.tab-nav { top: 0; // No background color as TabNav is often over a background gradient .react-tabs { // Remove 12px top margin react-tab adds causing buggy 12px gap in all uses // TODO: Find upstream fix margin-top: -12px; &__tab-list { display: inline-flex; align-items: flex-start; gap: $pad-medium; border-bottom: none; width: 100%; height: 33px; margin: 0; // Override react-tab 10px bottom margin position: relative; // Required for shift left } &__tab { font-size: $x-small; border-radius: $border-radius-large; border: none; padding: 6px $pad-small; display: inline-flex; flex-direction: column; align-items: center; line-height: 21px; // Undoes blue native shadow &:focus { box-shadow: none; outline: 0; } &:hover { background-color: $ui-fleet-black-5; } // focus-visible only highlights when tabbing not clicking // outline instead of border prevents pixel shifts &:focus-visible { outline: 1px solid $core-focused-outline; outline-offset: -1px; } // // Bolding text when the button is active causes a layout shift // // so we add a hidden pseudo element with the same text string &:before { content: attr(data-text); height: 0; visibility: hidden; overflow: hidden; user-select: none; pointer-events: none; font-weight: $bold; } &--selected { font-weight: $bold; background-color: $ui-fleet-black-5; } &--disabled { cursor: not-allowed; } } &__tab-panel--selected { margin-top: $gap-page-component; .no-results-message { margin-top: $pad-xxlarge; font-size: $small; font-weight: $bold; span { margin-top: $pad-medium; font-size: $x-small; font-weight: $regular; display: block; } } } .tab-text { display: flex; /* Ensure text and count are aligned horizontally */ align-items: center; /* Vertically align items */ .tab-text__text { // Reserve space for bold text using a hidden pseudo-element &::before { content: attr(data-text); /* Same text as the visible one */ font-weight: $bold; /* Mimic bold styling */ visibility: hidden; /* Keep it invisible */ position: absolute; /* Prevent it from affecting layout */ } } } } // All secondary tab styling &--secondary { .react-tabs { &__tab-list { gap: $pad-xxlarge; border-bottom: 1px solid $ui-fleet-black-10; padding-bottom: 10px; } &__tab { padding: 5px 0 $pad-medium; &:hover { background-color: transparent; } // Aligns underline correctly when focused &:focus { &:after { left: 0; bottom: 0; } } &:focus-visible { outline: none; // Undo primary tabbing through app styling as it runs into edges .tab-text { outline: 1px solid $core-focused-outline; outline-offset: 3px; border-radius: $border-radius; } } &--selected { background-color: transparent; &::after { content: ""; width: 100%; height: 0; border-bottom: 2px solid $core-fleet-black; position: absolute; bottom: 0; left: 0; } } &:hover { &::after { content: ""; width: 100%; height: 0; border-bottom: 2px solid $core-fleet-black; position: absolute; bottom: 0; left: 0; } } &--disabled { &:hover { &::after { content: ""; width: 100%; height: 0; border-bottom: 0; position: absolute; bottom: 0; left: 0; } } } &.no-count:not(.errors-empty).react-tabs__tab--selected::after { bottom: -2px; } } } } }