/* ===== Tabs Component ===== */

/* Container — column layout, token variables flow down */
.ui-tabs {
    display: flex;
    flex-direction: column;
}

.ui-tabs-surface {
    display: flex;
    flex-direction: column;
}

.ui-tabs-header,
.ui-tabs-body {
    position: relative;
}

/* TabList — horizontal row of tab triggers */
.ui-tablist {
    display: flex;
    gap: 0;
    border-bottom: 2px solid var(--tabs-border);
    padding: var(--meb-space-stack-none);
    margin: var(--meb-space-stack-none);
}

/* Tab trigger — button-reset with token-driven colors */
.ui-tab {
    all: unset;
    box-sizing: border-box;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: var(--tabs-background);
    color: var(--tabs-foreground);
    border: none;
    border-bottom: 2px solid transparent;
    padding: 10px 20px;
    font-family: inherit;
    font-size: var(--text-sm);
    font-weight: var(--weight-medium);
    line-height: var(--font-lineheight-body);
    cursor: pointer;
    position: relative;
    bottom: -2px; /* overlap the tablist border */
    transition: color 120ms ease, border-color 120ms ease, background 120ms ease;
    white-space: nowrap;
    user-select: none;
}

.ui-tab:hover {
    color: var(--tabs-foreground);
    background: color-mix(in srgb, var(--tabs-foreground) 3%, transparent);
}

.ui-tab:focus-visible {
    outline: 2px solid var(--tabs-focus-ring);
    outline-offset: 2px;
    border-radius: 4px 4px 0 0;
}

/* Active tab — indicator line + active colors */
.ui-tab.active {
    color: var(--tabs-foreground);
    border-bottom-color: var(--tabs-border);
    font-weight: var(--weight-semibold);
}

/* Panel — content area below the tab strip */
.ui-tabpanel {
    padding: 16px 0;
}

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
    .ui-tab {
        transition: none;
    }
}

/* ===== Segmented Variant ===== */

.ui-tabs.variant-segmented {
    --tabs-horizontal-inset: 24px;
    --tabs-radius: 40px;
    --tabs-border-width: 1px;
}

.ui-tabs.variant-segmented .ui-tabs-surface {
    padding-left: var(--tabs-horizontal-inset);
    padding-right: var(--tabs-horizontal-inset);
}

.ui-tabs.variant-segmented .ui-tabs-header {
    position: relative;
    background: transparent;
    display: flex;
    align-items: flex-end;
    gap: 0;
    /* Keep overlap behavior scoped to the active tab. */
    overflow: visible;
    padding-left: 0;
    padding-right: 0;
    margin-bottom: 0;
    z-index: 3;
}

.ui-tabs.variant-segmented .ui-tablist {
    display: flex;
    gap: 0;
    align-items: flex-end;
    isolation: isolate;
    padding: var(--meb-space-stack-none);
    padding-left: 0;
    margin: var(--meb-space-stack-none);
    margin-left: 0;
    border-bottom: none;
}

.ui-tabs.variant-segmented .ui-tab {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    min-width: var(--tabs-tab-width, auto);
    min-height: 64px;
    padding: 12px 28px 12px 28px;
    background: var(--tabs-segmented-tab-background);
    border: var(--tabs-border-width) solid var(--tabs-segmented-tab-border);
    border-bottom: none;
    border-radius: var(--tabs-radius) var(--tabs-radius) 0 0;
    border-bottom-left-radius: 0;
    border-bottom-right-radius: 0;
    box-shadow: 2px 0 0 var(--tabs-segmented-tab-shadow);
    color: var(--tabs-segmented-tab-foreground);
    font-size: var(--text-md);
    font-weight: var(--weight-regular);
    margin-right: calc(-1 * var(--tabs-border-width));
    margin-bottom: calc(-1 * var(--tabs-border-width));
    bottom: auto;
    z-index: 2;
    transition: none;
}

.ui-tabs.variant-segmented .ui-tab::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: -1px;
    height: var(--tabs-border-width);
    background: var(--tabs-segmented-tab-border);
    z-index: 1;
}

.ui-tabs.variant-segmented .ui-tab:hover {
    background: var(--tabs-segmented-tab-hover-background);
    color: var(--tabs-segmented-tab-hover-foreground);
    border-color: var(--tabs-segmented-tab-hover-border);
}

.ui-tabs.variant-segmented .ui-tab:active {
    background: var(--tabs-segmented-tab-pressed-background);
    color: var(--tabs-segmented-tab-pressed-foreground);
}

.ui-tabs.variant-segmented .ui-tab:has(+ .ui-tab.active) {
    box-shadow: none;
}

.ui-tabs.variant-segmented .ui-tab:has(+ .ui-tab.active)::before {
    content: "";
    position: absolute;
    top: 0;
    right: -2px;
    bottom: calc(var(--tabs-border-width) + 1px);
    width: calc(var(--tabs-radius) + 2px);
    border-top-right-radius: var(--tabs-radius);
    border-right: 2px solid var(--tabs-segmented-tab-shadow);
    clip-path: inset(0 0 calc(100% - var(--tabs-radius)) 0 round 0 var(--tabs-radius) 0 0);
    pointer-events: none;
    z-index: 3;
}

.ui-tabs.variant-segmented .ui-tab:focus-visible {
    border-radius: var(--tabs-radius) var(--tabs-radius) 0 0;
}

.ui-tabs.variant-segmented .ui-tab:focus {
    outline: none;
}

.ui-tabs.variant-segmented .ui-tab[disabled] {
    background: var(--tabs-segmented-tab-disabled-background);
    color: var(--tabs-segmented-tab-disabled-foreground);
    border-color: var(--tabs-segmented-tab-disabled-border);
    cursor: not-allowed;
    opacity: 0.6;
}

.ui-tabs.variant-segmented .ui-tab.active {
    background: var(--tabs-segmented-tab-active-background);
    border-color: transparent;
    border-bottom: none;
    box-shadow: none;
    color: var(--tabs-segmented-tab-active-foreground);
    overflow: visible;
    z-index: 1;
}

.ui-tabs.variant-segmented .ui-tab.active::after {
    bottom: -1px;
    height: calc(var(--tabs-border-width) + 1px);
    background: var(--tabs-segmented-tab-active-background);
    z-index: 10;
}

.ui-tabs.variant-segmented .ui-tab.active::before {
    content: "";
    position: absolute;
    top: 0;
    right: 0;
    bottom: calc(var(--tabs-border-width) + 1px);
    left: 0;
    border: var(--tabs-border-width) solid var(--tabs-segmented-tab-active-border);
    border-bottom: none;
    border-radius: var(--tabs-radius) var(--tabs-radius) 0 0;
    border-bottom-left-radius: 0;
    border-bottom-right-radius: 0;
    box-shadow: 2px 0 0 var(--tabs-segmented-tab-active-shadow);
    pointer-events: none;
    z-index: 11;
}

.ui-tabs.variant-segmented .ui-tab.active:not(:first-child)::before {
    left: var(--tabs-border-width);
    border-left: none;
}

.ui-tabs.variant-segmented .ui-tabs-body {
    position: relative;
    background: var(--tabs-segmented-body-background);
    border: var(--tabs-border-width) solid var(--tabs-segmented-body-border);
    border-radius: var(--tabs-radius);
    border-top-left-radius: 0;
    box-shadow: 4px 4px 0 var(--tabs-segmented-body-shadow);
    padding: 56px 24px 24px 24px;
    margin-top: 0;
    z-index: 2;
}

.ui-tabs.variant-segmented .ui-tabpanel {
    padding: var(--meb-space-stack-none);
    background: transparent;
}

/* ===== Folder Variant ===== */

/* Folder tabs render as a tab rail attached to a bordered content sheet.
   This variant intentionally reuses the segmented token contract through Tabs.razor.cs. */
.ui-tabs.variant-folder {
    --tabs-horizontal-inset: 0;
    --tabs-radius: var(--meb-border-radius-xl);
    --tabs-border-width: var(--meb-border-width-sm);
}

.ui-tabs.variant-folder .ui-tabs-surface {
    display: flex;
    flex-direction: column;
    width: 100%;
    overflow: visible;
    padding-left: var(--tabs-horizontal-inset);
    padding-right: var(--tabs-horizontal-inset);
    background: transparent;
    box-shadow: none;
}

.ui-tabs.variant-folder .ui-tabs-header {
    position: relative;
    z-index: 3;
    width: 100%;
    overflow: visible;
    background: transparent;
}


.ui-tabs.variant-folder .ui-tablist {
    position: relative;
    z-index: 2;
    display: flex;
    width: 100%;
    gap: 0;
    align-items: flex-end;
    isolation: isolate;
    padding: var(--meb-space-stack-none);
    margin: var(--meb-space-stack-none);
    border-bottom: none;
    background: transparent;
    box-sizing: border-box;
}

.ui-tabs.variant-folder .ui-tab {
    position: relative;
    z-index: 2;
    bottom: auto;
    display: inline-flex;
    flex: 1 1 0;
    align-items: center;
    justify-content: center;
    min-width: var(--tabs-tab-width, 0);
    min-height: var(--meb-size-touch-target);
    margin-right: 0;
    margin-bottom: calc(-1 * var(--tabs-border-width));
    padding: var(--meb-space-stack-sm) var(--meb-space-inline-20);
    border: var(--tabs-border-width) solid var(--tabs-segmented-tab-border);
    border-bottom: none;
    border-radius: var(--tabs-radius) var(--tabs-radius) 0 0;
    background: var(--tabs-segmented-tab-background);
    color: var(--tabs-segmented-tab-foreground);
    box-shadow: none;
    font-size: var(--text-md);
    font-weight: var(--weight-regular);
    text-align: center;
    transition: none;
}

.ui-tabs.variant-folder .ui-tab:not(:last-child) {
    margin-right: calc(-1 * var(--tabs-border-width));
}

/* #11111 (S5-T7): Game Over dialog on a phone with a third tab (Survey or Feedback,
   board EndOfGame). 14px labels and 8px side padding so "Game Over | Leaderboard |
   Feedback" fits a 320px dialog. Lives here, not in BingoFinished.razor.css: Tabs is a
   child component, so a scoped rule would be dead and ::deep is not for control variants. */
.ui-tabs.variant-folder.bingo-end-tabs--three .ui-tab {
    padding-inline: var(--meb-space-inline-sm);
    font-size: var(--text-sm);
}

/* #11132 (S6-polish, E2E-B11, UI-14): five or more folder tabs (the Desktop side panel with the Poll
   tab: Chat | Call list | Poll | Game Log | Options) share one row of equal columns. The 20px side
   padding leaves "Game Log" no room at 768px, so the tabs drop to the 4px token (the board HostLive
   uses 0 4px) and the 14px label token. Keyed on a fifth tab, no breakpoint, tokens only. */
.ui-tabs.variant-folder .ui-tablist:has(> .ui-tab:nth-child(5)) > .ui-tab {
    padding-inline: var(--meb-space-inline-xs);
    font-size: var(--text-sm);
}

.ui-tabs.variant-folder .ui-tab::before {
    display: none;
}

.ui-tabs.variant-folder .ui-tab::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: calc(-1 * var(--tabs-border-width));
    height: var(--tabs-border-width);
    background: var(--tabs-segmented-tab-border);
    pointer-events: none;
}

.ui-tabs.variant-folder .ui-tab:hover {
    background: var(--tabs-segmented-tab-hover-background);
    color: var(--tabs-segmented-tab-hover-foreground);
    border-color: var(--tabs-segmented-tab-hover-border);
}

.ui-tabs.variant-folder .ui-tab:active {
    background: var(--tabs-segmented-tab-pressed-background);
    color: var(--tabs-segmented-tab-pressed-foreground);
}

.ui-tabs.variant-folder .ui-tab:focus-visible {
    border-radius: var(--tabs-radius) var(--tabs-radius) 0 0;
    outline: 2px solid var(--tabs-focus-ring);
    outline-offset: 2px;
}

/* #11111 (E2E-B6, A11Y-06): gated on :not(:focus-visible). The ungated `:focus` rule had the same
   specificity as the `:focus-visible` ring above it and came later, so it removed the keyboard ring.
   Mouse focus still shows no outline; keyboard focus keeps the --tabs-focus-ring ring. */
.ui-tabs.variant-folder .ui-tab:focus:not(:focus-visible) {
    outline: none;
}

.ui-tabs.variant-folder .ui-tab[disabled] {
    background: var(--tabs-segmented-tab-disabled-background);
    color: var(--tabs-segmented-tab-disabled-foreground);
    border-color: var(--tabs-segmented-tab-disabled-border);
    cursor: not-allowed;
    opacity: 0.6;
}

.ui-tabs.variant-folder .ui-tab.active {
    z-index: 4;
    background: var(--tabs-segmented-tab-active-background);
    color: var(--tabs-segmented-tab-active-foreground);
    border-color: var(--tabs-segmented-tab-active-border);
    border-bottom: none;
    box-shadow: none;
    font-weight: var(--weight-regular);
}

.ui-tabs.variant-folder .ui-tab.active::after {
    bottom: calc(-1 * var(--tabs-border-width));
    height: calc(var(--tabs-border-width) + 1px);
    background: var(--tabs-segmented-tab-active-background);
    z-index: 5;
}

.ui-tabs.variant-folder .ui-tabs-body {
    position: relative;
    z-index: 1;
    min-height: calc(var(--meb-size-touch-target) * 10);
    margin-top: calc(-1 * var(--tabs-border-width));
    padding: var(--meb-space-stack-md);
    border: var(--tabs-border-width) solid var(--tabs-segmented-body-border);
    border-radius: 0 0 var(--tabs-radius) var(--tabs-radius);
    background: var(--tabs-segmented-body-background);
    box-shadow: 4px 4px 0 var(--tabs-segmented-body-shadow);
    overflow: hidden;
}

.ui-tabs.variant-folder .ui-tabpanel {
    padding: var(--meb-space-stack-none);
    background: transparent;
}

/* ===== Toggle Variant ===== */

/* iOS-style segmented "pill toggle": a white stadium container holding equal-width
   tabs; the active tab is an inset filled pill (Bingo-Orange) with brand-navy ink.
   Used by the public /gamelist header (Figma 293:3274 desktop + 341:31 mobile).
   Visuals route through existing semantic tokens (no new theme rows / migration).
   Per-surface tab text size is the inherited --tabs-toggle-font-size custom property
   (set on the page wrapper, e.g. .gl-root / .gl-mroot). The default lives in the .ui-tab
   var() FALLBACK below -- NOT declared on this element, which would shadow the inherited
   page value (a property declared on .ui-tabs wins over one inherited from .gl-root). */
.ui-tabs.variant-toggle .ui-tabs-surface {
    display: block;
}

/* NOTE: use a fixed large radius (pagination, ~40px), NOT --meb-radius-full. radius-full is 50%, which
   on a WIDE short bar makes the corner arcs meet -> an ellipse rather than a stadium. 40px clamps to
   half the bar height, giving clean semicircular ends (the Figma toggle shape). */
.ui-tabs.variant-toggle .ui-tabs-header {
    background: var(--meb-surface-card);
    border: 1px solid var(--meb-border-default);
    border-radius: var(--meb-radius-pagination);
    box-shadow: var(--meb-shadow-surface-comic);
    padding: 6px;
}

.ui-tabs.variant-toggle .ui-tablist {
    display: flex;
    width: 100%;
    gap: 0;
    align-items: stretch;
    border-bottom: none;
    padding: 0;
    margin: 0;
}

.ui-tabs.variant-toggle .ui-tab {
    flex: 1 1 0;
    min-width: 0;
    min-height: 52px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 10px 24px;
    border: none;
    /* Fixed stadium radius (not radius-full/50%, which ellipses on the wide tab). */
    border-radius: var(--meb-radius-pagination);
    background: transparent;
    color: var(--meb-text-heading-brand);
    font-family: var(--meb-font-family-primary);
    font-weight: var(--meb-font-weight-medium, 500);
    /* Inherited per-surface size with a token default in the fallback (see header note) -- the default
       must live HERE, not as a declaration on .ui-tabs.variant-toggle (that would shadow the page value). */
    font-size: var(--tabs-toggle-font-size, var(--text-md, 1rem));
    line-height: 1.1;
    bottom: auto;
    white-space: nowrap;
    cursor: pointer;
    transition: background 120ms ease, color 120ms ease, box-shadow 120ms ease;
}

/* Subtle hover tint. The plain `transparent` line is a fallback for engines without color-mix()
   (so the rule never fails to parse); where supported, color-mix() provides the faint tint. */
.ui-tabs.variant-toggle .ui-tab:hover:not(.active) {
    background: transparent;
    background: color-mix(in srgb, var(--meb-text-heading-brand) 6%, transparent);
}

.ui-tabs.variant-toggle .ui-tab:focus-visible {
    outline: 2px solid transparent;
    box-shadow: var(--focus-ring-shadow, var(--meb-button-primary-focus-shadow));
}

.ui-tabs.variant-toggle .ui-tab.active {
    background: var(--meb-palette-orange-bingo);
    color: var(--meb-text-heading-brand);
    font-weight: var(--meb-font-weight-bold, 700);
    box-shadow: var(--meb-shadow-surface-comic-sm);
}

/* The active rule above has equal specificity and comes later, so it would drop the focus ring;
   compose the ring with the active shadow. */
.ui-tabs.variant-toggle .ui-tab.active:focus-visible {
    outline: 2px solid transparent;
    box-shadow: var(--focus-ring-shadow, var(--meb-button-primary-focus-shadow)), var(--meb-shadow-surface-comic-sm);
}

.ui-tabs.variant-toggle .ui-tabs-body {
    display: none;
}

/* ===== BottomPill Variant ===== */

/* The pill bar renders visually below the active panel via column-reverse on
   the surface. The page is responsible for positioning the Tabs element
   within its layout (e.g. bottom of a mobile phone shell). */
.ui-tabs.variant-bottompill {
    /* Was 9999px (full stadium) -- the active tab read as a circular blob
       ("too round"). A finite token radius makes the bar a soft rounded-
       rectangle while the pill (49px tall) rounds to ~stadium at lg, matching
       the Figma 341-4679 bottom nav. Tunable: sm 8 / md 16 / lg 24 / xl 32. */
    --tabs-radius: var(--meb-border-radius-lg);
    --tabs-border-width: 1px;
    flex: 1 1 auto;
    min-height: 0;
}

/* Surface stacks panel(s) above the pill bar via column-reverse.
   `gap` provides the breathing room between the active panel and the pill.
   Body and panel remain block-level so their child cards keep block-context
   percentage heights for internal scroll (same chain as the default variant). */
.ui-tabs.variant-bottompill .ui-tabs-surface {
    flex: 1 1 auto;
    min-height: 0;
    flex-direction: column-reverse;
    gap: var(--meb-space-stack-md);
}

.ui-tabs.variant-bottompill .ui-tabs-header {
    background: var(--tabs-bottompill-container-background);
    border: var(--tabs-border-width) solid var(--tabs-bottompill-container-border);
    border-radius: var(--tabs-radius);
    box-shadow: 4px 4px 0 var(--tabs-bottompill-container-shadow);
    padding: var(--meb-space-stack-sm);
}

.ui-tabs.variant-bottompill .ui-tablist {
    display: flex;
    width: 100%;
    gap: 0;
    border-bottom: none;
    padding: var(--meb-space-stack-none);
    margin: var(--meb-space-stack-none);
}

.ui-tabs.variant-bottompill .ui-tab {
    flex: 1 1 0;
    min-width: 0;
    min-height: var(--meb-size-touch-target);
    padding: var(--meb-space-stack-14) var(--meb-space-inline-lg);
    background: var(--tabs-bottompill-tab-background);
    color: var(--tabs-bottompill-tab-foreground);
    border: none;
    border-radius: var(--tabs-radius);
    bottom: auto;
    font-size: var(--text-sm);
    font-weight: var(--weight-regular);
    transition: background 120ms ease, color 120ms ease;
}

/* #11111 (S5 quad r1 H-m10, F-m3): six BottomPill tabs at 320px (design 5.2 Six-tabs bullet). A bar with
   a sixth tab, below 360px, drops its labels to the existing 12px typography token (--text-xs) and the
   side padding from --meb-space-inline-lg (24px) to the existing 8px token (--meb-space-inline-sm), so
   all six fit at 320px. A Tabs-owned density rule keyed on the tab count, in the shared control's
   stylesheet like .bingo-end-tabs--three: no page class and no ::deep from a page stylesheet. The block
   padding stays the base rule's, so the touch target is unchanged. */
@media (max-width: 359.98px) {
    .ui-tabs.variant-bottompill .ui-tablist:has(> .ui-tab:nth-child(6)) > .ui-tab {
        font-size: var(--text-xs);
        padding-inline: var(--meb-space-inline-sm);
    }
}
.ui-tabs.variant-bottompill .ui-tab:hover {
    background: var(--tabs-bottompill-tab-hover-background);
    color: var(--tabs-bottompill-tab-hover-foreground);
}

.ui-tabs.variant-bottompill .ui-tab:focus-visible {
    outline: 2px solid var(--tabs-focus-ring);
    outline-offset: 2px;
    border-radius: var(--tabs-radius);
}

.ui-tabs.variant-bottompill .ui-tab.active {
    background: var(--tabs-bottompill-tab-active-background);
    color: var(--tabs-bottompill-tab-active-foreground);
    border-bottom-color: transparent;
    font-weight: var(--weight-regular);
}

.ui-tabs.variant-bottompill .ui-tab[disabled] {
    background: var(--tabs-bottompill-tab-disabled-background);
    color: var(--tabs-bottompill-tab-disabled-foreground);
    cursor: not-allowed;
    opacity: 0.6;
}

.ui-tabs.variant-bottompill .ui-tabs-body {
    background: transparent;
    border: none;
    box-shadow: none;
    padding: var(--meb-space-stack-none);
}

.ui-tabs.variant-bottompill .ui-tabpanel {
    padding: var(--meb-space-stack-none);
    background: transparent;
}
