.stepper-container { display: flex; flex-direction: column; width: 100%; } /* ─── Header (indicator bar) ─── */ .stepper-header { display: flex; align-items: flex-start; justify-content: center; gap: 0; margin-bottom: 2rem; position: relative; &.is-disabled { opacity: 0.5; .stepper-header__circle { cursor: not-allowed; } } &__item { display: flex; flex-direction: column; align-items: center; flex: 0 1 190px; width: 100%; max-width: 190px; position: relative; } &__line { position: absolute; top: 5px; // center of the 10px dot right: 50%; left: -50%; height: 2px; background-color: #d9d9d9; transition: background-color 0.35s ease; z-index: 0; &.is-completed { background-color: var(--bs-primary); } } &__circle { position: relative; z-index: 1; width: 10px; height: 10px; border-radius: 50%; background-color: #d9d9d9; // default: inactive future border: none; cursor: default; transition: background-color 0.3s cubic-bezier(0.4, 0, 0.2, 1); padding: 0; &.is-clickable { cursor: pointer; } } &__label { margin-top: 10px; font-size: 15px; font-weight: 700; text-transform: uppercase; color: #d9d9d9; // default: inactive future text-align: center; transition: color 0.3s ease; max-width: 120px; line-height: 1.3; } // Active step &__item.is-active { .stepper-header__circle { background-color: #666666; } .stepper-header__label { color: #666666; } } // Completed past step &__item.is-completed { .stepper-header__circle { background-color: var(--bs-primary); } .stepper-header__label { color: var(--bs-primary); } } } /* ─── Body (content area) ─── */ .stepper-body { // step.component.html controls visibility via @if (isActive()) }