/* ============================================
   OFFSEASON WEB APP — App Shell + Views
   Inherits design tokens from landing.css
   ============================================ */

/* Global border-box for the app shell so width:100% + padding never overflows.
   (Landing pages scope this to .bw-landing; the app <body> is not, so set it
   here.) */
#bw-app, #bw-app *, #bw-app *::before, #bw-app *::after { box-sizing: border-box; }

/* Reset for app pages (no landing pitch bg) */
body {
    margin: 0;
    padding: 0;
    font-family: var(--bw-font-body);
    background: var(--bw-bg);
    color: var(--bw-text-primary);
    -webkit-font-smoothing: antialiased;
    min-height: 100dvh;
}

/* Visually-hidden but available to screen readers (labels, live regions). */
.bw-sr-only {
    position: absolute !important;
    width: 1px; height: 1px;
    padding: 0; margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* Guarantee a visible keyboard-focus ring on synthetic buttons (role=button
   divs/rows/spans) and links, so keyboard users can see where they are. */
#bw-app [role="button"]:focus-visible,
#bw-app a:focus-visible,
#bw-app button:focus-visible {
    outline: 2px solid var(--bw-gold);
    outline-offset: 2px;
    border-radius: 4px;
}

/* Route changes move focus programmatically onto the view container/heading
   (tabindex="-1", announceView). Those targets are unreachable by Tab, so a
   focus ring there is pure noise (the full-page blue border after login).
   Real keyboard focus rings on links/buttons stay via :focus-visible above. */
[tabindex="-1"]:focus {
    outline: none;
}

/* Skip-to-content: off-screen until focused, then pinned top-left. */
.bw-skip-link {
    position: fixed;
    top: 0.5rem;
    left: 0.5rem;
    z-index: 1000;
    background: var(--bw-surface);
    color: var(--bw-text-primary);
    border: 1px solid var(--bw-border-strong);
    border-radius: 8px;
    padding: 0.55rem 0.9rem;
    font-size: 0.875rem;
    font-weight: 600;
    text-decoration: none;
    transform: translateY(-150%);
    transition: transform 0.15s ease;
}
.bw-skip-link:focus {
    transform: translateY(0);
    outline: 2px solid var(--bw-gold);
    outline-offset: 2px;
}

/* ============================================
   APP SHELL LAYOUT
   ============================================ */

#bw-app {
    display: grid;
    grid-template-columns: 260px 1fr;
    min-height: 100dvh;
}

/* Sidebar */
.bw-sidebar {
    position: fixed;
    top: 0;
    left: 0;
    bottom: 0;
    width: 260px;
    background: var(--bw-surface);
    border-right: 1px solid var(--bw-border-subtle);
    display: flex;
    flex-direction: column;
    z-index: 100;
    transition: background var(--bw-transition-theme), border var(--bw-transition-theme);
}

.bw-sidebar-header {
    display: flex;
    align-items: center;
    gap: 0.625rem;
    padding: 1.25rem 1.25rem 1rem;
    border-bottom: 1px solid var(--bw-border-subtle);
}

.bw-sidebar-logo {
    width: 36px;
    height: 36px;
    border-radius: 8px;
    flex-shrink: 0;
}

[data-theme="dark"] .bw-sidebar-logo {
    background: #FAFAFA;
    padding: 3px;
}

.bw-sidebar-brand {
    display: flex;
    flex-direction: column;
    line-height: 1.1;
}

.bw-sidebar-title {
    font-family: var(--bw-font-display);
    font-size: 0.9rem;
    font-weight: 700;
    letter-spacing: 1.5px;
    color: var(--bw-text-primary);
}

.bw-sidebar-subtitle {
    font-size: 0.6rem;
    color: var(--bw-text-muted);
    letter-spacing: 0.5px;
}

/* Sidebar nav */
.bw-sidebar-nav {
    flex: 1;
    padding: 0.75rem 0.75rem;
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
}

.bw-nav-item {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    padding: 0.625rem 0.875rem;
    border-radius: 10px;
    color: var(--bw-text-secondary);
    text-decoration: none;
    font-size: 0.875rem;
    font-weight: 500;
    transition: background 0.15s ease, color 0.15s ease;
}

.bw-nav-item svg {
    width: 20px;
    height: 20px;
    flex-shrink: 0;
}

.bw-nav-item:hover {
    background: var(--bw-panel);
    color: var(--bw-text-primary);
}

.bw-nav-item.active {
    background: rgba(245, 156, 156, 0.12);
    color: var(--bw-nav-active);
    /* Non-color cue is the weight bump (700 vs 500) + the tinted fill; no
       single-side inset bar (it clipped against the border-radius). */
    font-weight: 700;
}

.bw-nav-item.active svg {
    stroke: var(--bw-nav-active);
}

/* Sidebar footer — when used as a button (popover trigger) it must look
   like a plain panel, not a <button>. */
.bw-sidebar-footer {
    padding: 0.75rem 1rem;
    border-top: 1px solid var(--bw-border-subtle);
}

.bw-sidebar-footer-trigger {
    display: block;
    width: 100%;
    background: transparent;
    border: none;
    border-top: 1px solid var(--bw-border-subtle);
    font-family: inherit;
    color: inherit;
    text-align: left;
    cursor: pointer;
    transition: background 0.15s ease;
}

.bw-sidebar-footer-trigger:hover,
.bw-sidebar-footer-trigger[aria-expanded="true"] {
    background: var(--bw-panel);
}

.bw-sidebar-user-caret {
    width: 14px;
    height: 14px;
    margin-left: auto;
    color: var(--bw-text-muted);
    transition: transform 0.15s ease;
}

.bw-sidebar-footer-trigger[aria-expanded="true"] .bw-sidebar-user-caret {
    transform: rotate(180deg);
}

.bw-sidebar-league {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    margin-bottom: 0.5rem;
    padding: 0.4rem 0.5rem;
    border-radius: 10px;
    background: var(--bw-panel);
}
.bw-sidebar-league-emoji { font-size: 1.15rem; line-height: 1; flex: 0 0 auto; }
.bw-sidebar-league-text { display: flex; flex-direction: column; gap: 0.05rem; min-width: 0; }
.bw-sidebar-league-label {
    font-family: var(--bw-font-mono);
    font-size: 0.5625rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bw-text-muted);
}

.bw-sidebar-league-name {
    font-family: var(--bw-font-display);
    font-size: 0.8125rem;
    font-weight: 700;
    color: var(--bw-text-primary);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.bw-sidebar-league-meta {
    font-size: 0.6875rem;
    color: var(--bw-text-muted);
}

/* League switcher inside the user popover. */
.bw-user-popover { max-height: min(80vh, 640px); overflow-y: auto; }
.bw-user-popover-label {
    font-family: var(--bw-font-mono);
    font-size: 0.5625rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bw-text-muted);
    padding: 0.25rem 0.625rem 0.1rem;
}
.bw-popover-leagues { display: flex; flex-direction: column; gap: 0.1rem; }
.bw-league-switch {
    display: flex;
    align-items: center;
    gap: 0.55rem;
    width: 100%;
    padding: 0.5rem 0.625rem;
    border: none;
    background: transparent;
    border-radius: 8px;
    cursor: pointer;
    text-align: left;
    color: var(--bw-text-primary);
    font-family: inherit;
}
.bw-league-switch:hover { background: var(--bw-panel); }
.bw-league-switch.active { background: color-mix(in srgb, var(--bw-gold) 13%, transparent); }
.bw-league-switch-emoji { font-size: 1.1rem; line-height: 1; flex: 0 0 auto; }
.bw-league-switch-body { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 0.05rem; }
.bw-league-switch-name { font-size: 0.8125rem; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bw-league-switch-meta { font-size: 0.6875rem; color: var(--bw-text-muted); font-family: var(--bw-font-mono); }
.bw-league-switch-tag { flex: 0 0 auto; font-size: 0.625rem; font-weight: 700; color: var(--bw-text-muted); white-space: nowrap; }
.bw-league-switch.active .bw-league-switch-tag { color: var(--bw-gold); }
.bw-league-switch.add { color: var(--bw-text-secondary); font-size: 0.75rem; font-weight: 600; }

.bw-sidebar-user {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.375rem 0;
}

.bw-sidebar-emoji {
    font-size: 1.25rem;
    line-height: 1;
}

.bw-sidebar-username {
    font-size: 0.8125rem;
    font-weight: 500;
    color: var(--bw-text-secondary);
}

/* ============================================
   USER POPOVER (opens from sidebar footer on desktop,
   from bottom-nav avatar chip on mobile)
   ============================================ */
.bw-user-popover {
    position: fixed;
    z-index: 150;
    min-width: 240px;
    max-width: calc(100vw - 24px);
    background: var(--bw-surface);
    border: 1px solid var(--bw-border-strong);
    border-radius: 12px;
    box-shadow: 0 12px 40px rgba(0, 0, 0, 0.25), 0 2px 8px rgba(0, 0, 0, 0.08);
    padding: 0.5rem;
    opacity: 0;
    transform: translateY(6px);
    pointer-events: none;
    /* visibility:hidden pulls the ~14 controls out of the tab order and the
       a11y tree while closed (opacity/pointer-events alone left them tabbable);
       the delayed visibility transition keeps the fade-out animation. */
    visibility: hidden;
    transition: opacity 0.15s ease, transform 0.15s ease, visibility 0s linear 0.15s;
}

.bw-user-popover.open {
    opacity: 1;
    transform: translateY(0);
    pointer-events: auto;
    visibility: visible;
    transition: opacity 0.15s ease, transform 0.15s ease, visibility 0s;
}

.bw-user-popover-header {
    display: flex;
    align-items: center;
    gap: 0.625rem;
    padding: 0.5rem 0.625rem;
}

.bw-user-popover-emoji {
    font-size: 1.75rem;
    line-height: 1;
    flex-shrink: 0;
}

.bw-user-popover-identity {
    display: flex;
    flex-direction: column;
    line-height: 1.2;
    min-width: 0;
}

.bw-user-popover-username {
    font-family: var(--bw-font-display);
    font-size: 0.875rem;
    font-weight: 700;
    color: var(--bw-text-primary);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.bw-user-popover-email {
    font-size: 0.6875rem;
    color: var(--bw-text-muted);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    margin-top: 0.125rem;
}

.bw-user-popover-divider {
    height: 1px;
    background: var(--bw-border-subtle);
    margin: 0.375rem 0;
}

.bw-user-popover-item {
    display: flex;
    align-items: center;
    gap: 0.625rem;
    width: 100%;
    /* box-sizing matters — <button> defaults to border-box in most UA
       stylesheets but <a> defaults to content-box, so width:100% plus
       padding made the anchor items (Profile, Analytics, Help, FAQ)
       overflow the popover while buttons (Dark mode, Sign out) stayed
       within bounds. Normalize both to border-box. */
    box-sizing: border-box;
    padding: 0.5rem 0.625rem;
    background: transparent;
    border: none;
    border-radius: 8px;
    font-family: inherit;
    font-size: 0.8125rem;
    font-weight: 500;
    color: var(--bw-text-primary);
    text-align: left;
    text-decoration: none;
    cursor: pointer;
    transition: background 0.1s ease;
}

.bw-user-popover-item:hover {
    background: var(--bw-panel);
}

.bw-user-popover-item svg {
    color: var(--bw-text-muted);
    flex-shrink: 0;
}

.bw-user-popover-item:hover svg {
    color: var(--bw-text-primary);
}

.bw-user-popover-item-danger {
    color: var(--bw-error);
}

.bw-user-popover-item-danger svg {
    color: var(--bw-error);
    opacity: 0.7;
}

.bw-user-popover-item-danger:hover {
    background: rgba(220, 38, 38, 0.08);
}

.bw-user-popover-item-danger:hover svg {
    color: var(--bw-error);
    opacity: 1;
}

/* Admin-only entry in the user popover — subtle coral accent so the
   admin entry reads as "elevated permission" without shouting. */
.bw-user-popover-admin {
    color: var(--bw-gold-deep);
}
.bw-user-popover-admin svg {
    color: var(--bw-gold-deep);
    opacity: 0.85;
}
.bw-user-popover-admin:hover {
    background: rgba(224, 118, 118, 0.08);
}
.bw-user-popover-admin.hidden {
    display: none;
}

/* Compact legal / info row in the user popover. Pills-in-a-row layout,
   deliberately quieter than the primary action items above so About /
   Brand / Privacy / Terms don't compete visually with Sign out. */
.bw-user-popover-legal {
    display: flex;
    flex-wrap: wrap;
    gap: 0.25rem 0.75rem;
    padding: 0.625rem 1rem 0.75rem;
    font-size: 0.75rem;
    color: var(--bw-text-muted);
}
.bw-user-popover-legal a {
    color: var(--bw-text-muted);
    text-decoration: none;
    padding: 2px 0;
    border-radius: 2px;
    transition: color 0.15s ease;
}
.bw-user-popover-legal a:hover {
    color: var(--bw-text-primary);
    text-decoration: underline;
    text-underline-offset: 2px;
}

/* Mobile bottom-nav user chip (replaces Profile tab) */
.bw-bnav-user {
    background: transparent;
    border: none;
    font-family: inherit;
    cursor: pointer;
}

.bw-bnav-emoji {
    font-size: 1.25rem;
    line-height: 1;
    margin-bottom: 2px;
}

/* Main content */
.bw-main {
    grid-column: 2;
    min-height: 100dvh;
    overflow-y: auto;
}

.bw-content {
    max-width: 960px;
    /* Left-align with a tight, consistent gap from the sidebar on wide
       screens; only center once the viewport would push the content
       past ~1400px from the sidebar edge. Keeps content visually
       anchored to the nav rather than floating in the middle. */
    margin-left: 2.5rem;
    margin-right: auto;
    padding: 2rem 1.5rem 4rem;
}

@media (min-width: 1600px) {
    .bw-content {
        margin-left: 4rem;
    }
}

/* Non-hub surfaces stay left-anchored and fluid to the right edge (capped for
   readability). The hub surfaces (Clubhouse, Record Book) center themselves at
   1280 via .bw-hub-grid / .bw-rec2-page (v2 §5.1/§6.3), so this band is for
   everything else. */
@media (min-width: 1000px) {
    .bw-content { max-width: 1560px; margin-left: 2.5rem; margin-right: auto; }
}

/* PLATFORM TAG — the one badge, everywhere a league is named (16-DESIGN §7.2).
   Neutral on purpose: colour-coding platforms would put three new accents into a
   system whose second principle is "one accent", and it was Yahoo purple only
   because Yahoo was the only platform. Flat, hairline, no fill. */
.bw-src-tag {
    display: inline-block;
    vertical-align: middle;
    margin-left: 0.35rem;
    padding: 0.05rem 0.4rem;
    border-radius: 999px;
    border: 1px solid var(--bw-border);
    font-family: var(--bw-font-mono);
    font-size: 0.5625rem;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--bw-text-secondary);
    background: transparent;
}
.bw-src-tag.sm { font-size: 0.5rem; padding: 0 0.25rem; margin-left: 0.2rem; }

/* ── Fantasy (Yahoo) League view ─────────────────────────────────────────────
   The League tab's Fantasy side (standings / record book / leaguemates), shown
   for source='yahoo' leagues and toggled against the Offseason (pools) side. */
.bw-lg-toggle { display: inline-flex; gap: 2px; background: rgba(0,0,0,0.05); border: 1px solid var(--bw-border-subtle); border-radius: 999px; padding: 3px; margin-bottom: 1rem; }
.bw-lg-toggle-btn { border: 0; background: transparent; color: var(--bw-text-muted); font-weight: 700; font-size: 0.8125rem; padding: 0.4rem 0.95rem; border-radius: 999px; cursor: pointer; }
.bw-lg-toggle-btn.on { background: var(--bw-gold); color: var(--bw-on-gold); }
[data-theme="dark"] .bw-lg-toggle { background: rgba(255,255,255,0.06); }

.bw-fan-head { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.85rem; }
.bw-fan-title { font-family: var(--bw-font-display); font-weight: 900; font-size: 1.4rem; }
.bw-fan-subnav { display: flex; gap: 0.4rem; margin-bottom: 1rem; flex-wrap: wrap; }
.bw-fan-tab { border: 1px solid var(--bw-border-subtle); background: var(--bw-surface); color: var(--bw-text-muted); font-weight: 700; font-size: 0.8125rem; padding: 0.4rem 0.85rem; border-radius: 999px; cursor: pointer; }
.bw-fan-tab.on { background: var(--bw-ink, #1a2230); color: #fff; border-color: transparent; }
.bw-fan-sync { margin-left: auto; border: 1px solid var(--bw-border-subtle); background: var(--bw-surface); color: var(--bw-text-muted); font-weight: 700; font-size: 0.75rem; padding: 0.3rem 0.7rem; border-radius: 999px; cursor: pointer; white-space: nowrap; }
.bw-fan-sync:hover { color: var(--bw-ink, #1a2230); }
.bw-fan-sync:disabled { opacity: 0.6; cursor: default; }
.bw-fan-secmeta { font-family: var(--bw-font-mono); font-size: 0.6875rem; text-transform: uppercase; letter-spacing: 0.06em; color: var(--bw-text-muted); margin-bottom: 0.6rem; }
.bw-fan-emptybox { text-align: center; padding: 2.5rem 1.25rem; background: var(--bw-surface); border: 1px dashed var(--bw-border-subtle); border-radius: 10px; }
.bw-fan-emptybox-emoji { font-size: 2rem; }
.bw-fan-emptybox-title { font-weight: 800; font-size: 1.05rem; margin-top: 0.4rem; }
.bw-fan-emptybox-sub { font-size: 0.875rem; color: var(--bw-text-muted); margin-top: 0.3rem; max-width: 32rem; margin-left: auto; margin-right: auto; }
.bw-fan-loading { padding: 1.5rem; text-align: center; color: var(--bw-text-muted); }
.bw-fan-empty { padding: 1rem; text-align: center; color: var(--bw-text-muted); }

.bw-fan-tablewrap { overflow-x: auto; }
.bw-fan-table { width: 100%; border-collapse: collapse; font-size: 0.875rem; }
.bw-fan-table th { text-align: left; font-family: var(--bw-font-mono); font-size: 0.625rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); padding: 0.4rem 0.5rem; border-bottom: 1px solid var(--bw-border-subtle); }
.bw-fan-table td { padding: 0.55rem 0.5rem; border-bottom: 1px solid var(--bw-border-subtle); vertical-align: middle; }
.bw-fan-rank { font-weight: 800; color: var(--bw-text-muted); width: 2ch; }
.bw-fan-team { display: flex; align-items: center; gap: 0.55rem; }
.bw-fan-av { font-size: 1.15rem; }
.bw-fan-teamtext { display: flex; flex-direction: column; line-height: 1.2; min-width: 0; }
.bw-fan-tn { font-weight: 700; }
/* Manager-name link inside a standings row (replaces the old whole-row onclick:
   keyboard-focusable, inherits the row's ink, underlines on hover/focus). */
.bw-fan-tnlink { color: inherit; text-decoration: none; cursor: pointer; }
.bw-fan-tnlink:hover, .bw-fan-tnlink:focus-visible { text-decoration: underline; }
.bw-fan-mn { font-size: 0.75rem; color: var(--bw-text-muted); }
.bw-fan-rec { font-variant-numeric: tabular-nums; }
.bw-fan-num { font-variant-numeric: tabular-nums; font-weight: 700; text-align: right; }
.bw-fan-strk { font-family: var(--bw-font-mono); font-size: 0.75rem; color: var(--bw-text-muted); }

.bw-fan-champs { display: flex; flex-direction: column; gap: 0.4rem; margin-bottom: 1.25rem; }
.bw-fan-champ { display: grid; grid-template-columns: 3rem 1fr; align-items: center; gap: 0.7rem; padding: 0.55rem 0.75rem; background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 10px; }
.bw-fan-champ-yr { font-family: var(--bw-font-display); font-weight: 900; font-size: 1.1rem; color: var(--bw-text-muted); }
.bw-fan-champ-body { display: flex; flex-direction: column; min-width: 0; gap: 1px; }
.bw-fan-champ-nm { font-weight: 800; }
.bw-fan-champ-tm { font-weight: 400; font-size: 0.8125rem; color: var(--bw-text-muted); }
.bw-fan-champ-rest { font-size: 0.75rem; color: var(--bw-text-muted); }
.bw-champ-dot { margin: 0 0.4rem; opacity: 0.5; }

/* Manager profile IA (2026-07 redesign): identity masthead full width, then a
   primary body with a section nav that is a right rail of summary cards at
   >= 1100px and a horizontal chip-tab row below that. One DOM, two shapes. */
.bw-fanm-wrap { max-width: 1120px; margin: 0 auto; }
.bw-fanm-bwgrid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 200px), 1fr)); gap: 0.55rem; }
.bw-fan-recgrid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 0.75rem; }
.bw-fan-reccard { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 12px; padding: 0.75rem 0.85rem; }
.bw-fan-reccard-t { font-weight: 800; font-size: 0.8125rem; margin-bottom: 0.4rem; }
.bw-fan-reccard ol { margin: 0; padding-left: 1.1rem; display: flex; flex-direction: column; gap: 0.25rem; }
.bw-fan-reccard li { font-size: 0.8125rem; }
.bw-fan-rec-meta { font-family: var(--bw-font-mono); font-size: 0.6875rem; color: var(--bw-text-muted); }

.bw-fan-mates { display: flex; flex-direction: column; gap: 0.4rem; }
.bw-fan-mate { display: flex; align-items: center; gap: 0.65rem; padding: 0.55rem 0.7rem; background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 10px; }
.bw-fan-mate-main { display: flex; flex-direction: column; flex: 1; min-width: 0; line-height: 1.25; }
.bw-fan-mate-nm { font-weight: 700; }
.bw-fan-mate-sub { font-size: 0.75rem; color: var(--bw-text-muted); }
.bw-fan-you { font-family: var(--bw-font-mono); font-size: 0.5625rem; text-transform: uppercase; background: var(--bw-gold); color: var(--bw-on-gold); padding: 0.05rem 0.3rem; border-radius: 4px; margin-left: 0.3rem; }
.bw-fan-badge { font-family: var(--bw-font-mono); font-size: 0.625rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; padding: 0.2rem 0.5rem; border-radius: 999px; white-space: nowrap; }
.bw-fan-badge.on { background: rgba(34,197,94,0.15); color: var(--bw-success, #16a34a); }
.bw-fan-badge.off { background: rgba(0,0,0,0.06); color: var(--bw-text-muted); }
[data-theme="dark"] .bw-fan-badge.off { background: rgba(255,255,255,0.08); }
.bw-fan-invite { margin-top: 0.85rem; font-size: 0.8125rem; color: var(--bw-text-muted); background: var(--bw-surface); border: 1px dashed var(--bw-border-subtle); border-radius: 10px; padding: 0.7rem 0.85rem; }
.bw-fan-rosterarrow { color: var(--bw-text-muted); font-size: 1.2rem; }

/* Rosters (team's players) */
.bw-fan-roster { display: flex; flex-direction: column; gap: 2px; }
.bw-fan-player { display: grid; grid-template-columns: 3rem 1fr auto; align-items: center; gap: 0.6rem; padding: 0.5rem 0.7rem; background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 8px; }
.bw-fan-pos { font-family: var(--bw-font-mono); font-size: 0.6875rem; font-weight: 700; text-transform: uppercase; color: var(--bw-text-muted); }
.bw-fan-pname { font-weight: 600; font-size: 0.9375rem; }
.bw-fan-pstatus { font-family: var(--bw-font-mono); font-size: 0.5625rem; text-transform: uppercase; color: var(--bw-error, #dc2626); border: 1px solid currentColor; border-radius: 4px; padding: 0 0.25rem; vertical-align: middle; }
.bw-fan-pteam { font-family: var(--bw-font-mono); font-size: 0.75rem; color: var(--bw-text-muted); }

/* Keepers */
.bw-keep-flabel { display: block; font-family: var(--bw-font-mono); font-size: 0.625rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); margin: 0.7rem 0 0.25rem; }
.bw-keep-input { width: 100%; max-width: 18rem; height: auto; padding: 0.55rem 0.7rem; font-size: 16px; border: 1px solid var(--bw-border-subtle); border-radius: 9px; background: var(--bw-bg, #fff); color: inherit; }
[data-theme="dark"] .bw-keep-input { background: rgba(255,255,255,0.05); }
.bw-keep-bar { display: flex; align-items: center; gap: 0.6rem; margin-bottom: 0.9rem; }
.bw-keep-rule { font-family: var(--bw-font-mono); font-size: 0.75rem; color: var(--bw-text-muted); }
.bw-keep-teams { display: flex; flex-direction: column; gap: 0.5rem; }
.bw-keep-team { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 11px; padding: 0.6rem 0.75rem; }
.bw-keep-team.mine { border-color: var(--bw-gold); }
.bw-keep-team-head { display: flex; align-items: center; gap: 0.6rem; }
.bw-keep-list { margin: 0.5rem 0 0; padding-left: 1.2rem; display: flex; flex-direction: column; gap: 0.15rem; font-size: 0.875rem; }
.bw-keep-none { display: block; margin-top: 0.4rem; font-size: 0.8125rem; color: var(--bw-text-muted); }
.bw-keep-picks { display: flex; flex-direction: column; gap: 2px; }
.bw-keep-pick { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 0.6rem; padding: 0.55rem 0.7rem; background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 8px; cursor: pointer; }
.bw-keep-pick.dis { opacity: 0.5; cursor: default; }
.bw-keep-cb { width: 1.1rem; height: 1.1rem; accent-color: var(--bw-gold); }
.bw-keep-pick.ro { grid-template-columns: 1fr auto; cursor: default; }
.bw-keep-pick.picked { border-color: var(--bw-gold); }
.bw-keep-pick-nm { font-weight: 600; font-size: 0.9375rem; }
.bw-keep-pick-meta { font-family: var(--bw-font-mono); font-size: 0.6875rem; color: var(--bw-text-muted); text-align: right; }
.bw-keep-cta { font-family: var(--bw-font-mono); font-size: 0.6875rem; font-weight: 700; color: var(--bw-gold); white-space: nowrap; }

/* Draft board + report card */
.bw-draft-grade { display: inline-block; font-family: var(--bw-font-display); font-weight: 900; font-size: 0.9375rem; color: var(--bw-gold); }
.bw-draft-round { margin-bottom: 1rem; }
.bw-draft-rhead { font-family: var(--bw-font-mono); font-size: 0.625rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: var(--bw-text-muted); margin-bottom: 0.35rem; }
.bw-draft-pick { display: grid; grid-template-columns: 2.2rem 1fr auto; align-items: center; gap: 0.6rem; padding: 0.45rem 0.6rem; background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 8px; margin-bottom: 2px; }
.bw-draft-num { font-family: var(--bw-font-mono); font-weight: 700; color: var(--bw-text-muted); font-size: 0.8125rem; }
.bw-draft-p { display: flex; flex-direction: column; min-width: 0; line-height: 1.2; }
.bw-draft-pn { font-weight: 600; font-size: 0.9375rem; }
.bw-draft-pmeta { font-size: 0.75rem; color: var(--bw-text-muted); }

/* Draft grade color chips (report cards) */
.bw-draft-grade.g-a { color: #16a34a; }
.bw-draft-grade.g-b { color: #65a30d; }
.bw-draft-grade.g-c { color: #ca8a04; }
.bw-draft-grade.g-d { color: #ea580c; }
.bw-draft-grade.g-f { color: var(--bw-error, #dc2626); }

/* League view chrome */
.bw-fan-leaguebar { display: flex; align-items: center; gap: 0.6rem; margin-bottom: 0.85rem; }
.bw-fan-seasonsel { max-width: 10rem; }
.bw-fan-onbadge { font-family: var(--bw-font-mono); font-size: 0.5rem; font-weight: 700; text-transform: uppercase; background: rgba(34,197,94,0.16); color: var(--bw-success, #16a34a); padding: 0 0.25rem; border-radius: 4px; vertical-align: middle; }
.bw-fan-kepttag { font-family: var(--bw-font-mono); font-size: 0.5625rem; color: var(--bw-text-muted); }
.bw-fan-leaguehint { margin-top: 0.75rem; font-size: 0.75rem; color: var(--bw-text-muted); text-align: center; }
/* Standings PF-bar legend: the house mono caption. */
.bw-fan-pflegend { margin-top: 0.5rem; font-family: var(--bw-font-mono); font-size: 0.625rem; letter-spacing: 0.03em; color: var(--bw-text-muted); }

/* Manager profile: placings + sections */
.bw-fanm-places { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 1rem; }
.bw-fanm-place { display: flex; align-items: center; gap: 0.35rem; background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 999px; padding: 0.3rem 0.7rem; }
.bw-fanm-place-em { font-size: 1.1rem; }
.bw-fanm-place-n { font-weight: 800; }
.bw-fanm-place-yr { font-family: var(--bw-font-mono); font-size: 0.6875rem; color: var(--bw-text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 14rem; }
/* Each profile section is a self-contained hairline card in the flow grid. */
.bw-fanm-sec { margin: 0; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-lg, 12px); background: var(--bw-surface); padding: 0.85rem 0.9rem; }
.bw-fanm-sec-t { font-family: var(--bw-font-mono); font-size: 0.6875rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: var(--bw-text-muted); margin-bottom: 0.55rem; padding-bottom: 0.5rem; border-bottom: 1px solid var(--bw-border-subtle); }
/* Nested tiles inside a section card read as recessed sub-panels, not double cards. */
.bw-fanm-sec .bw-fan-reccard { background: var(--bw-panel); border-color: transparent; }
.bw-fanm-rival-nm { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bw-dpick-note, .bw-dcard-notes { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }

/* Roster + keeper chips in the profile */
.bw-kplist { display: flex; flex-direction: column; gap: 2px; }
.bw-kp { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 0.55rem; padding: 0.5rem 0.7rem; background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 8px; cursor: pointer; }
.bw-kp.ro { grid-template-columns: 1fr auto; cursor: default; }
.bw-kp.dis { opacity: 0.55; cursor: default; }
.bw-kp-main { display: flex; flex-direction: column; min-width: 0; line-height: 1.25; }
.bw-kp-n { font-weight: 600; font-size: 0.9375rem; }
.bw-kp-acq { font-family: var(--bw-font-mono); font-size: 0.5625rem; color: var(--bw-text-muted); text-transform: uppercase; letter-spacing: 0.03em; }
.bw-kchip { font-family: var(--bw-font-mono); font-size: 0.625rem; font-weight: 700; text-transform: uppercase; padding: 0.15rem 0.45rem; border-radius: 999px; white-space: nowrap; }
.bw-kchip.ok { background: rgba(34,197,94,0.15); color: var(--bw-success, #16a34a); }
.bw-kchip.no { background: rgba(0,0,0,0.06); color: var(--bw-text-muted); }
/* In-season roster view: the demoted keeper-cost chip, the slot column, and the
   starters/bench group headers. Flat, hairline, mono, per the ledger rules. */
.bw-kchip.dim { background: transparent; border: 1px solid var(--bw-border-subtle); color: var(--bw-text-muted); font-weight: 600; }
.bw-kp-slot { font-family: var(--bw-font-mono); font-size: 0.625rem; font-weight: 700; color: var(--bw-text-muted); min-width: 2.6rem; text-align: center; border: 1px solid var(--bw-border-subtle); border-radius: 6px; padding: 0.12rem 0.2rem; white-space: nowrap; }
.bw-kp-group { font-family: var(--bw-font-mono); font-size: 0.625rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: var(--bw-text-muted); margin: 0.55rem 0 0.15rem; }
.bw-kp-group:first-child { margin-top: 0; }
.bw-kchip.kept { background: var(--bw-gold); color: var(--bw-on-gold); }
[data-theme="dark"] .bw-kchip.no { background: rgba(255,255,255,0.08); }

/* Draft report cards (per season, collapsible) */
.bw-dcards { display: flex; flex-direction: column; gap: 0.5rem; }
.bw-dcard { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 11px; overflow: hidden; }
.bw-dcard-sum { display: flex; align-items: center; gap: 0.6rem; padding: 0.6rem 0.8rem; cursor: pointer; list-style: none; }
.bw-dcard-sum::-webkit-details-marker { display: none; }
.bw-dcard-yr { font-family: var(--bw-font-display); font-weight: 900; font-size: 1.05rem; }
.bw-dcard-status { font-size: 0.8125rem; color: var(--bw-text-muted); }
.bw-dcard-chev { margin-left: auto; color: var(--bw-text-muted); transition: transform 0.15s; }
.bw-dcard[open] .bw-dcard-chev { transform: rotate(90deg); }
.bw-dcard-notes { padding: 0 0.8rem 0.5rem; font-size: 0.875rem; }
.bw-dcard-picks { padding: 0 0.6rem 0.6rem; display: flex; flex-direction: column; gap: 2px; }
.bw-dpick { display: grid; grid-template-columns: 2.6rem 1fr auto; align-items: center; gap: 0.5rem; padding: 0.4rem 0.5rem; border-top: 1px solid var(--bw-border-subtle); }
.bw-dpick-rd { font-family: var(--bw-font-mono); font-size: 0.75rem; color: var(--bw-text-muted); }
.bw-dpick-p { display: flex; flex-direction: column; min-width: 0; line-height: 1.25; }
.bw-dpick-pn { font-weight: 600; font-size: 0.875rem; }
.bw-dpick-pos { font-family: var(--bw-font-mono); font-size: 0.625rem; color: var(--bw-text-muted); }
.bw-dpick-note { font-size: 0.75rem; color: var(--bw-text-muted); font-style: italic; }

/* Co-commish management (in the Manage members list) */
.bw-cocom-row { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; padding: 0.5rem 0; border-bottom: 1px solid var(--bw-border-subtle); flex-wrap: wrap; }
.bw-cocom-who { display: flex; align-items: center; gap: 0.4rem; color: var(--bw-text-primary); }
.bw-cocom-nm { font-weight: 600; }
.bw-cocom-badge { font-family: var(--bw-font-mono); font-size: 0.5625rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; padding: 0.1rem 0.4rem; border-radius: 5px; }
.bw-cocom-badge.head { background: var(--bw-gold); color: var(--bw-on-gold); }
.bw-cocom-badge.co { background: rgba(0,0,0,0.07); color: var(--bw-text-muted); }
[data-theme="dark"] .bw-cocom-badge.co { background: rgba(255,255,255,0.1); }
.bw-cocom-actions { display: flex; gap: 0.35rem; flex-wrap: wrap; }
.bw-cocom-btn { border: 1px solid var(--bw-border-subtle); background: var(--bw-surface); color: var(--bw-text-primary); font-size: 0.6875rem; font-weight: 600; padding: 0.25rem 0.55rem; border-radius: 999px; cursor: pointer; white-space: nowrap; }
.bw-cocom-btn:hover { border-color: var(--bw-gold); }
.bw-cocom-btn.danger { color: var(--bw-error, #dc2626); }
.bw-cocom-pending { background: rgba(245,156,156,0.12); border: 1px solid var(--bw-gold); border-radius: 10px; padding: 0.7rem 0.85rem; font-size: 0.8125rem; margin-bottom: 0.75rem; }
.bw-cocom-pactions { display: flex; gap: 0.5rem; margin-top: 0.5rem; flex-wrap: wrap; }

/* Tappable rows (Standings / Leaguemates -> manager profile) */
.bw-fan-clickrow { transition: background 0.12s; }
/* FIX 5: the whole standings row is a click target for the manager profile.
   Hover is the hairline-to-salmon border idiom, never a shadow. */
tr.bw-fan-clickrow.has-link { cursor: pointer; }
tr.bw-fan-clickrow.has-link:hover td { border-bottom-color: var(--bw-gold, #F59C9C); }
/* Row-hover highlight only where the name is actually a link. */
tr.bw-fan-clickrow.has-link:hover td { background: rgba(0,0,0,0.03); }
.bw-fan-mate.bw-fan-clickrow:hover { background: rgba(0,0,0,0.03); }
[data-theme="dark"] tr.bw-fan-clickrow.has-link:hover td,
[data-theme="dark"] .bw-fan-mate.bw-fan-clickrow:hover { background: rgba(255,255,255,0.04); }

/* Manager profile (trophy case) */
.bw-fanm-back { border: 0; background: transparent; color: var(--bw-text-muted); font-weight: 700; font-size: 0.8125rem; cursor: pointer; padding: 0 0 0.5rem; }
.bw-fanm-head { display: flex; align-items: center; gap: 0.85rem; margin-bottom: 0.85rem; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-lg, 12px); background: var(--bw-surface); padding: 0.9rem 1rem; }
.bw-fanm-av { font-size: 2.1rem; flex: 0 0 auto; width: 3rem; height: 3rem; display: flex; align-items: center; justify-content: center; background: var(--bw-panel); border-radius: var(--bw-radius-full, 999px); }
.bw-fanm-headtext { min-width: 0; }
.bw-fanm-name { font-family: var(--bw-font-display); font-weight: 900; font-size: 1.35rem; display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; }
.bw-fanm-sub { font-size: 0.8125rem; color: var(--bw-text-muted); }
.bw-fanm-titles { font-size: 1rem; margin-bottom: 1rem; }
.bw-fanm-titles.muted { font-size: 0.8125rem; color: var(--bw-text-muted); }
.bw-fanm-titles-yrs { font-size: 0.8125rem; color: var(--bw-text-muted); margin-left: 0.35rem; }
/* 5 tiles: 3+2 wrap below 900 (v2 §6.2/§7), 5-across at desktop. */
.bw-fanm-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 0.5rem; margin-bottom: 1rem; }
.bw-fanm-stat { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); padding: 0.7rem 0.6rem; text-align: center; }
.bw-fanm-stat-v { display: block; font-family: var(--bw-font-display); font-weight: 900; font-size: 1.3rem; font-variant-numeric: tabular-nums; line-height: 1.1; }
.bw-fanm-stat-l { display: block; font-family: var(--bw-font-mono); font-size: 0.625rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--bw-text-muted); margin-top: 3px; }
.bw-fanm-rivals { margin-top: 1.1rem; }
.bw-fanm-rival { display: flex; align-items: center; justify-content: space-between; gap: 0.4rem; padding: 0.45rem 0.7rem; background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 9px; }
.bw-fanm-rival-nm { font-weight: 600; font-size: 0.875rem; }
.bw-fanm-rival-rec { font-variant-numeric: tabular-nums; font-weight: 800; font-size: 0.875rem; color: var(--bw-text-muted); }
.bw-fanm-rival-rec.win { color: var(--bw-success, #16a34a); }
.bw-fanm-rival-rec.loss { color: var(--bw-gold-deep); }

/* ── Manager profile IA (2026-07): masthead ─────────────────────────────── */
.bw-fanm-mast { border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-lg, 12px); background: var(--bw-surface); padding: 1rem 1.1rem; margin-bottom: 1rem; }
.bw-fanm-head2 { display: flex; align-items: flex-start; gap: 0.9rem; margin-bottom: 0.85rem; }
.bw-fanm-name { margin: 0; }
.bw-fanm-facts { display: flex; align-items: baseline; flex-wrap: wrap; gap: 0.45rem; margin-top: 0.3rem; font-size: 0.8125rem; color: var(--bw-text-secondary); }
.bw-fanm-fact b { font-family: var(--bw-font-mono); font-variant-numeric: tabular-nums; font-weight: 700; color: var(--bw-text-primary); }
.bw-fanm-fact-dot { color: var(--bw-text-muted); }
.bw-fanm-mast .bw-fanm-places, .bw-fanm-mast .bw-fanm-titles { margin-bottom: 0; }
.bw-rb-mastcase { display: flex; align-items: center; flex-wrap: wrap; gap: 0.35rem; margin-top: 0.75rem; padding-top: 0.7rem; border-top: 1px solid var(--bw-border-subtle); }
.bw-rb-mastcase-t { margin: 0 0.25rem 0 0; }
.bw-rb-mastcase .bw-club-muted { font-size: 0.75rem; }
.bw-rb-mastchip-nm { color: var(--bw-text-primary); }
.bw-rb-mastchip-yr { color: var(--bw-text-muted); }

/* Section nav: chip-tab row by default, right rail of summary cards >= 1100. */
.bw-fanm-layout { display: flex; flex-direction: column; gap: 0.8rem; }
.bw-fanm-rail { display: flex; gap: 0.35rem; overflow-x: auto; -webkit-overflow-scrolling: touch; padding-bottom: 2px; scrollbar-width: none; }
.bw-fanm-rail::-webkit-scrollbar { display: none; }
.bw-fanm-navitem { flex: 0 0 auto; display: inline-flex; align-items: center; border: 1px solid var(--bw-border-subtle); background: transparent; color: var(--bw-text-secondary); border-radius: var(--bw-radius-full, 999px); padding: 0.3rem 0.7rem; font-size: 0.75rem; font-weight: 600; cursor: pointer; white-space: nowrap; }
.bw-fanm-navitem:hover, .bw-fanm-navitem:focus-visible { border-color: var(--bw-gold); color: var(--bw-text-primary); }
.bw-fanm-navitem.on { border-color: var(--bw-gold); color: var(--bw-text-primary); background: color-mix(in srgb, var(--bw-gold) 12%, transparent); }
.bw-fanm-navsum { display: none; }
.bw-fanm-body { display: flex; flex-direction: column; gap: 0.8rem; min-width: 0; }
.bw-fanm-fade { animation: bwAlmFade 0.18s ease; }

@media (min-width: 1100px) {
    .bw-fanm-layout { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 1rem; align-items: start; }
    .bw-fanm-rail { grid-column: 2; grid-row: 1; flex-direction: column; gap: 0.45rem; overflow: visible; position: sticky; top: 1rem; padding-bottom: 0; }
    .bw-fanm-body { grid-column: 1; grid-row: 1; }
    .bw-fanm-navitem { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; width: 100%; border-radius: var(--bw-radius-md, 10px); background: var(--bw-surface); padding: 0.6rem 0.75rem; white-space: normal; text-align: left; }
    .bw-fanm-navitem.on { background: color-mix(in srgb, var(--bw-gold) 10%, var(--bw-surface)); }
    .bw-fanm-navlabel { font-size: 0.8125rem; font-weight: 700; color: var(--bw-text-primary); }
    .bw-fanm-navsum { display: block; font-family: var(--bw-font-mono); font-size: 0.625rem; letter-spacing: 0.03em; color: var(--bw-text-muted); font-variant-numeric: tabular-nums; }
}

/* The story: pinned vs-you card + season-by-season timeline. */
.bw-fanm-vsyou { border-color: var(--bw-gold); }
.bw-fanm-vsyou-row { display: flex; align-items: baseline; gap: 0.7rem; flex-wrap: wrap; }
.bw-fanm-vsyou-rec { font-family: var(--bw-font-display); font-weight: 900; font-size: 1.6rem; font-variant-numeric: tabular-nums; }
.bw-fanm-vsyou-rec.win { color: var(--bw-success, #16a34a); }
.bw-fanm-vsyou-rec.loss { color: var(--bw-gold-deep); }
.bw-fanm-vsyou-sub { font-size: 0.8125rem; color: var(--bw-text-muted); }
.bw-fanm-vsyou-row .bw-fanm-linkbtn { margin-left: auto; }
.bw-fanm-ssns { display: flex; flex-direction: column; }
.bw-fanm-ssn { display: grid; grid-template-columns: 3.4rem 5.6rem 3.8rem minmax(6rem, 11rem) 1fr; align-items: center; gap: 0.6rem; padding: 0.45rem 0.2rem; border-top: 1px solid var(--bw-border-subtle); }
.bw-fanm-ssn.hd { border-top: 0; padding-top: 0; font-family: var(--bw-font-mono); font-size: 0.625rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); }
.bw-fanm-ssn-yr { font-family: var(--bw-font-display); font-weight: 900; font-size: 1rem; font-variant-numeric: tabular-nums; }
.bw-fanm-ssn-rk { font-family: var(--bw-font-mono); font-size: 0.75rem; color: var(--bw-text-secondary); }
.bw-fanm-ssn-rec { font-family: var(--bw-font-mono); font-size: 0.8125rem; font-weight: 700; font-variant-numeric: tabular-nums; }
.bw-fanm-ssn-pf { font-family: var(--bw-font-mono); font-size: 0.75rem; color: var(--bw-text-secondary); font-variant-numeric: tabular-nums; }
.bw-fanm-ssn-pf .bw-rankbar { margin-top: 0.2rem; max-width: none; }
.bw-fanm-ssn-tm { font-size: 0.75rem; color: var(--bw-text-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
@media (max-width: 699px) {
    .bw-fanm-ssn { grid-template-columns: 3.2rem 4.8rem 3.6rem 1fr; row-gap: 0.15rem; }
    .bw-fanm-ssn-tm { grid-column: 1 / -1; }
    .bw-fanm-ssn.hd .bw-fanm-ssn-tm { display: none; }
    .bw-fanm-ssn-tm:empty { display: none; }
}

/* Draft record: full-body season cards with a real pick table (never a skinny
   strip): round/pick · player + position · grade chip · note. */
.bw-fanm-dcard2-hd { display: flex; align-items: baseline; gap: 0.7rem; flex-wrap: wrap; margin-bottom: 0.5rem; }
.bw-fanm-dcard2-yr { font-family: var(--bw-font-display); font-weight: 900; font-size: 1.35rem; font-variant-numeric: tabular-nums; }
.bw-draft-grade.big { font-size: 1.6rem; line-height: 1; }
.bw-fanm-dcard2-tm { margin-left: auto; font-size: 0.75rem; color: var(--bw-text-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 14rem; }
.bw-fanm-dcard2-notes { margin: 0 0 0.6rem; font-size: 0.875rem; color: var(--bw-text-secondary); line-height: 1.45; }
.bw-fanm-dtable { display: flex; flex-direction: column; }
.bw-fanm-drow { display: grid; grid-template-columns: 3rem minmax(11rem, 16rem) 2.8rem minmax(0, 1fr); align-items: baseline; gap: 0.7rem; padding: 0.42rem 0.2rem; border-top: 1px solid var(--bw-border-subtle); }
.bw-fanm-drow.hd { border-top: 0; padding-top: 0; font-family: var(--bw-font-mono); font-size: 0.625rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); }
.bw-fanm-dpicknum { font-family: var(--bw-font-mono); font-size: 0.75rem; color: var(--bw-text-muted); font-variant-numeric: tabular-nums; }
.bw-fanm-dplayer { font-weight: 600; font-size: 0.875rem; min-width: 0; }
.bw-fanm-dpos { font-family: var(--bw-font-mono); font-size: 0.625rem; color: var(--bw-text-muted); margin-left: 0.15rem; }
.bw-fanm-dnote { font-size: 0.78125rem; color: var(--bw-text-muted); line-height: 1.4; }
@media (max-width: 899px) {
    .bw-fanm-drow { grid-template-columns: 3rem minmax(0, 1fr) 2.8rem; row-gap: 0.15rem; }
    .bw-fanm-drow .bw-fanm-dnote { grid-column: 2 / -1; }
    .bw-fanm-drow.hd .bw-fanm-dnote, .bw-fanm-drow .bw-fanm-dnote:empty { display: none; }
}

/* ---- Draft grades on a symbolic (emoji) scale -----------------------------
   The generic card assumes a letter grade in a 2.8rem slot and a one-line
   note. A commish grading on emoji with a paragraph per pick needs the grade
   to have room and the commentary to be prose, so the card adapts to whatever
   it was actually given rather than to a configured mode. */
.bw-draft-grade.sym { color: var(--bw-text-primary); font-weight: 400; font-size: 0.9375rem; letter-spacing: -0.04em; white-space: nowrap; }
.bw-draft-grade.big.sym { font-size: 1.5rem; letter-spacing: -0.05em; }
.bw-fanm-dcard2.sym .bw-fanm-drow { grid-template-columns: 3rem minmax(9rem, 15rem) 4.4rem minmax(0, 1fr); }

/* Long-form commentary drops to its own line under the pick. */
.bw-fanm-drow.stacked { grid-template-columns: 3rem minmax(0, 1fr) 4.4rem; row-gap: 0.25rem; padding-bottom: 0.6rem; }
.bw-fanm-drow.stacked .bw-fanm-dnote { grid-column: 2 / -1; font-size: 0.8125rem; color: var(--bw-text-secondary); line-height: 1.5; }
/* Hide the Note header when notes are prose, but keep the header on the SAME
   template as the rows, or the Grade label drifts off the grades it labels. */
.bw-fanm-dcard2.longform .bw-fanm-drow.hd .bw-fanm-dnote { visibility: hidden; }

/* Tally + the two picks worth arguing about. */
.bw-dgstrip { display: flex; flex-wrap: wrap; gap: 0.3rem; margin: 0 0 0.55rem; }
.bw-dgt { display: inline-flex; align-items: baseline; gap: 0.3rem; border: 1px solid var(--bw-border-subtle); padding: 0.1rem 0.45rem; font-family: var(--bw-font-mono); font-size: 0.75rem; color: var(--bw-text-secondary); }
.bw-dgt b { font-size: 0.875rem; }
.bw-dghls { display: flex; flex-wrap: wrap; gap: 0.35rem 1.1rem; margin: 0 0 0.7rem; }
.bw-dghl { display: inline-flex; align-items: baseline; gap: 0.35rem; font-size: 0.8125rem; }
.bw-dghl .lbl { font-family: var(--bw-font-mono); font-size: 0.5625rem; letter-spacing: 0.11em; text-transform: uppercase; color: var(--bw-text-muted); }
.bw-dghl .rd { font-family: var(--bw-font-mono); font-size: 0.6875rem; color: var(--bw-text-muted); }

/* The scale, written down next to the grades that use it. */
.bw-dglegend { display: flex; flex-wrap: wrap; gap: 0.3rem; margin-top: 0.9rem; padding-top: 0.7rem; border-top: 1px solid var(--bw-border-subtle); }
.bw-dgkey { display: inline-flex; align-items: baseline; gap: 0.35rem; font-size: 0.6875rem; color: var(--bw-text-muted); border: 1px solid var(--bw-border-subtle); padding: 0.1rem 0.45rem; }
.bw-dgkey b { font-size: 0.8125rem; letter-spacing: -0.04em; }

/* The tier reads as a label, not as leftover muted text. */
.bw-dcard-status { font-size: 0.6875rem; letter-spacing: 0.06em; text-transform: uppercase; color: var(--bw-text-secondary); border: 1px solid var(--bw-border-strong); padding: 0.12rem 0.5rem; }

@media (max-width: 899px) {
    .bw-fanm-dcard2.sym .bw-fanm-drow,
    .bw-fanm-drow.stacked { grid-template-columns: 3rem minmax(0, 1fr) 4.4rem; }
}

/* Rivalries: the full head-to-head table. */
.bw-fanm-h2h { display: flex; flex-direction: column; }
.bw-fanm-h2h-row { display: grid; grid-template-columns: minmax(0, 1fr) 4.6rem 3.6rem; align-items: center; gap: 0.6rem; padding: 0.45rem 0.2rem; border-top: 1px solid var(--bw-border-subtle); }
.bw-fanm-h2h-row.hd { border-top: 0; padding-top: 0; font-family: var(--bw-font-mono); font-size: 0.625rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); }
.bw-fanm-h2h-who { display: flex; align-items: center; gap: 0.5rem; min-width: 0; }
.bw-fanm-h2h-nm { font-weight: 600; font-size: 0.875rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bw-fanm-h2h-nm .bw-fan-tnlink { color: inherit; }
.bw-fanm-h2h-row .bw-fanm-rival-rec, .bw-fanm-h2h-gm { text-align: right; }
.bw-fanm-h2h-gm { font-family: var(--bw-font-mono); font-size: 0.6875rem; color: var(--bw-text-muted); font-variant-numeric: tabular-nums; }

/* Masthead condenses on phones. */
@media (max-width: 699px) {
    .bw-fanm-mast { padding: 0.8rem 0.85rem; }
    .bw-fanm-head2 { gap: 0.7rem; }
    .bw-fanm-head2 .bw-av { width: 42px !important; height: 42px !important; font-size: 16px !important; }
    .bw-fanm-name { font-size: 1.15rem; }
    .bw-fanm-place-yr { max-width: 9rem; }
}

/* The dead .bw-league-standings-layout / .bw-lh-rail-* desktop experiment
   (a standings rail that was built once and reverted) is removed here per
   LEAGUE_HUB_SPEC §9. The bw-hub-grid primitives replace it. */

/* Labeled back-links + breadcrumbs (replace bare "‹" arrows so drill-in screens
   read as navigation, not a mobile-only back button). */
.bw-backlink {
    display: inline-flex;
    align-items: center;
    gap: 0.15rem;
    background: transparent;
    border: none;
    padding: 0.2rem 0;
    font-family: inherit;
    font-size: 0.8125rem;
    font-weight: 600;
    color: var(--bw-text-secondary);
    text-decoration: none;
    cursor: pointer;
}
.bw-backlink:hover { color: var(--bw-text-primary); }
.bw-breadcrumb { display: flex; align-items: center; gap: 0.5rem; min-width: 0; }
.bw-breadcrumb-link {
    font-size: 0.8125rem;
    font-weight: 600;
    color: var(--bw-text-secondary);
    text-decoration: none;
    white-space: nowrap;
}
.bw-breadcrumb-link:hover { color: var(--bw-text-primary); }
.bw-breadcrumb-sep { color: var(--bw-text-muted); }

/* Loading screen */
.bw-loading-screen {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    min-height: 60vh;
}

/* Bottom nav (mobile only) */
.bw-bottom-nav {
    display: none;
}

/* ============================================
   SHARED COMPONENTS
   ============================================ */

.bw-card {
    background: var(--bw-surface);
    border: 1px solid var(--bw-border-subtle);
    border-radius: 10px;
    padding: 1.25rem;
    transition: background var(--bw-transition-theme), border var(--bw-transition-theme);
}

.bw-card-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 1rem;
}

.bw-card-title {
    font-family: var(--bw-font-display);
    font-size: 1rem;
    font-weight: 700;
    color: var(--bw-text-primary);
}

.bw-card-label {
    font-family: var(--bw-font-mono);
    font-size: 0.65rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    color: var(--bw-text-muted);
}

.bw-page-title {
    font-family: var(--bw-font-display);
    font-size: 1.5rem;
    font-weight: 800;
    color: var(--bw-text-primary);
    margin: 0 0 1.5rem;
}

.bw-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.5rem;
    padding: 0.75rem 1.25rem;
    border: none;
    border-radius: 10px;
    font-family: var(--bw-font-body);
    font-size: 0.875rem;
    font-weight: 600;
    cursor: pointer;
    transition: background 0.15s ease, transform 0.1s ease;
}

.bw-btn:active { transform: scale(0.97); }

.bw-btn-primary {
    background: var(--bw-gold);
    color: #1B2D4F;
}

.bw-btn-primary:hover { background: var(--bw-gold-bright); }

.bw-btn-secondary {
    background: var(--bw-panel);
    color: var(--bw-text-primary);
}

.bw-btn-secondary:hover { background: var(--bw-border-subtle); }

.bw-btn-secondary.active {
    background: rgba(245,156,156,0.15);
    color: var(--bw-gold);
    border: 1px solid rgba(245,156,156,0.3);
}

.bw-empty-state {
    text-align: center;
    padding: 3rem 1.5rem;
    color: var(--bw-text-muted);
    font-size: 0.9375rem;
}

.bw-error-inline {
    padding: 0.75rem 1rem;
    background: rgba(220,38,38,0.08);
    border: 1px solid rgba(220,38,38,0.2);
    border-radius: 10px;
    color: var(--bw-error);
    font-size: 0.875rem;
    margin-bottom: 1rem;
}

.bw-badge {
    display: inline-flex;
    align-items: center;
    padding: 0.2rem 0.5rem;
    border-radius: 4px;
    font-family: var(--bw-font-mono);
    font-size: 0.65rem;
    font-weight: 700;
    letter-spacing: 0.5px;
}

/* ============================================
   DASHBOARD VIEW
   ============================================ */

.bw-dash-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 1rem;
    margin-bottom: 1.5rem;
}

/* ================================================================
   HOME DASHBOARD — richer layout lifted from the old world-cup.php
   marketing page. Hero, phase chip, stat tiles, progress rings,
   league snapshot, opening-match cards. Uses existing brand tokens
   so dark mode + locale switch just work.
   ================================================================ */

/* Hero — gradient card with pulse chip, big year, 3-stat row */
.bw-home-hero {
    position: relative;
    overflow: hidden;
    /* Flat solid navy + hairline (binding design rule: no gradients, no glows) */
    background: #1B2D4F;
    border: 1px solid rgba(255, 255, 255, 0.10);
    color: #FAFAFA;
    border-radius: 12px;
    padding: clamp(1.5rem, 4vw, 2.25rem) clamp(1.25rem, 4vw, 2rem);
    margin-bottom: 1.25rem;
}
.bw-home-hero-chip {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    background: rgba(245, 156, 156, 0.15);
    border: 1px solid rgba(250, 181, 181, 0.3);
    color: #FAB5B5;
    padding: 4px 10px;
    border-radius: 999px;
    font-family: var(--bw-font-mono);
    font-size: 0.6875rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    font-weight: 700;
    position: relative;
}
.bw-home-hero-chip .bw-pulse-dot {
    width: 6px; height: 6px; border-radius: 50%;
    background: #FAB5B5;
    animation: bwPulseDot 1.8s ease-in-out infinite;
}
@keyframes bwPulseDot {
    0%, 100% { opacity: 1;   transform: scale(1);   }
    50%      { opacity: 0.4; transform: scale(1.4); }
}
.bw-home-hero-title {
    font-family: var(--bw-font-display);
    font-weight: 900;
    font-size: clamp(2rem, 6vw, 3.25rem);
    letter-spacing: -0.025em;
    line-height: 1;
    margin: 0.75rem 0 0.5rem;
    color: #FAFAFA;
}
.bw-home-hero-title .year {
    /* Flat solid salmon (was a gradient-clipped fill) */
    color: var(--bw-gold);
}
.bw-home-hero-sub {
    color: rgba(250, 250, 250, 0.7);
    font-size: 0.9375rem;
    max-width: 48ch;
    margin: 0 0 1.25rem;
    line-height: 1.5;
}
.bw-home-hero-stats {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 0.625rem;
    position: relative;
}
.bw-home-hero-stat {
    background: rgba(255, 255, 255, 0.07);
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 10px;
    padding: 0.875rem 0.75rem;
    text-align: center;
}
.bw-home-hero-stat-val {
    font-family: var(--bw-font-display);
    font-weight: 800;
    font-size: clamp(1.25rem, 3vw, 1.875rem);
    line-height: 1;
    color: #FAFAFA;
}
.bw-home-hero-stat-lbl {
    font-family: var(--bw-font-mono);
    font-size: 0.625rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: rgba(250,250,250,0.6);
    margin-top: 0.375rem;
}

/* Section title used between hero and card lists */
.bw-home-section-title {
    font-family: var(--bw-font-mono);
    font-size: 0.6875rem;
    letter-spacing: 0.28em;
    text-transform: uppercase;
    color: var(--bw-text-muted);
    margin: 1.5rem 0 0.625rem;
    padding-bottom: 0.5rem;
    border-bottom: 1px solid var(--bw-border-subtle);
}

/* 2-col grid for home cards (collapses on mobile) */
.bw-home-two-col {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: 1rem;
    margin-bottom: 1rem;
}

/* Progress ring / bar for pick completion */
.bw-home-progress-row {
    display: flex;
    align-items: center;
    gap: 0.875rem;
    padding: 0.5rem 0;
}
.bw-home-progress-row:not(:last-child) {
    border-bottom: 1px solid var(--bw-border-subtle);
    margin-bottom: 0.5rem;
}
.bw-home-progress-label {
    flex: 1;
    display: flex;
    flex-direction: column;
    gap: 2px;
}
.bw-home-progress-label .nm {
    font-size: 0.875rem;
    color: var(--bw-text-primary);
    font-weight: 600;
}
.bw-home-progress-label .sub {
    font-family: var(--bw-font-mono);
    font-size: 0.6875rem;
    color: var(--bw-text-muted);
    letter-spacing: 0.06em;
}
.bw-home-progress-bar {
    flex: 1.2;
    height: 6px;
    background: var(--bw-panel);
    border-radius: 999px;
    overflow: hidden;
}
.bw-home-progress-fill {
    height: 100%;
    background: var(--bw-gold);
    border-radius: 999px;
    transition: width 0.4s ease;
}
.bw-home-progress-count {
    font-family: var(--bw-font-display);
    font-weight: 700;
    font-size: 0.9375rem;
    color: var(--bw-text-primary);
    min-width: 54px;
    text-align: right;
}

/* League snapshot tile — rank + leaguemates */
.bw-home-league-row {
    display: grid;
    grid-template-columns: auto 1fr auto;
    gap: 0.625rem;
    align-items: center;
    padding: 0.5rem 0;
    border-bottom: 1px solid var(--bw-border-subtle);
}
.bw-home-league-row:last-child { border-bottom: 0; }
.bw-home-league-row .rank {
    font-family: var(--bw-font-display);
    font-weight: 700;
    font-size: 0.9375rem;
    width: 22px;
    text-align: center;
    color: var(--bw-text-muted);
}
.bw-home-league-row.you .rank { color: var(--bw-gold-deep); }
.bw-home-league-row .name {
    font-size: 0.875rem;
    color: var(--bw-text-primary);
}
.bw-home-league-row.you .name { font-weight: 700; }
.bw-home-league-row .pts {
    font-family: var(--bw-font-mono);
    font-size: 0.8125rem;
    color: var(--bw-text-secondary);
}

.bw-stat-card {
    background: var(--bw-surface);
    border: 1px solid var(--bw-border-subtle);
    border-radius: 10px;
    padding: 1.25rem;
    text-align: center;
}

.bw-stat-value {
    font-family: var(--bw-font-display);
    font-size: 2rem;
    font-weight: 800;
    color: var(--bw-gold);
    line-height: 1;
}

.bw-stat-label {
    font-size: 0.75rem;
    color: var(--bw-text-muted);
    margin-top: 0.25rem;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.bw-progress-bar {
    height: 8px;
    background: var(--bw-panel);
    border-radius: 4px;
    overflow: hidden;
    margin: 0.75rem 0;
}

.bw-progress-fill {
    height: 100%;
    background: var(--bw-gold);
    border-radius: 4px;
    transition: width 0.4s ease;
}
.bw-live-dot {
    display: inline-block;
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--bw-live);
    margin-right: 4px;
    animation: bwPulse 1.5s ease-in-out infinite;
}

/* ============================================
   LEADERBOARD VIEW
   ============================================ */

.bw-lb-row {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    padding: 0.75rem 1rem;
    background: var(--bw-surface);
    border: 1px solid var(--bw-border-subtle);
    border-radius: 10px;
    margin-bottom: 0.5rem;
    transition: border-color 0.15s;
}

.bw-lb-row.current {
    background: rgba(245,156,156,0.1);
    border-color: rgba(245,156,156,0.3);
}

.bw-lb-rank {
    width: 28px;
    height: 28px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-family: var(--bw-font-mono);
    font-size: 0.75rem;
    font-weight: 800;
    flex-shrink: 0;
    background: var(--bw-panel);
    color: var(--bw-text-primary);
}

.bw-lb-rank.gold { background: #FFD700; color: #1B2D4F; }
.bw-lb-rank.silver { background: #C0C0C0; color: #1B2D4F; }
.bw-lb-rank.bronze { background: #CD7F32; color: #FFF; }

.bw-lb-info { flex: 1; min-width: 0; }

.bw-lb-name {
    font-size: 0.875rem;
    font-weight: 600;
    color: var(--bw-text-primary);
}

.bw-lb-sub {
    font-family: var(--bw-font-mono);
    font-size: 0.6875rem;
    color: var(--bw-text-muted);
}

.bw-lb-pts {
    text-align: right;
    flex-shrink: 0;
}

.bw-lb-pts-num {
    font-family: var(--bw-font-display);
    font-size: 1.125rem;
    font-weight: 800;
    color: var(--bw-text-primary);
    line-height: 1;
}

.bw-lb-pts-label {
    font-size: 0.625rem;
    color: var(--bw-text-muted);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.bw-score-input {
    /* box-sizing: border-box so when this input is re-used in the
       Create / Join League modals with style="width:100%; padding:
       0.75rem", the padding and border stay INSIDE the 100% instead
       of pushing the input past the modal's right edge. The match-
       score boxes (the original use) have fixed pixel width + no
       padding, so this is a no-op there. */
    box-sizing: border-box;
    width: 42px;
    height: 38px;
    border: 1px solid var(--bw-border-strong);
    border-radius: 8px;
    background: var(--bw-panel);
    color: var(--bw-text-primary);
    font-family: var(--bw-font-display);
    font-size: 1rem;
    font-weight: 700;
    text-align: center;
    -webkit-appearance: none;
    -moz-appearance: textfield;
}

.bw-score-input:focus {
    outline: none;
    border-color: var(--bw-gold);
    box-shadow: 0 0 0 3px rgba(245,156,156,0.18);
}

.bw-score-input:disabled {
    opacity: 0.5;
    cursor: not-allowed;
}

.bw-score-sep {
    font-size: 1rem;
    font-weight: 300;
    color: var(--bw-text-muted);
}

/* ============================================
   PROFILE VIEW
   ============================================ */

.bw-profile-card {
    display: flex;
    align-items: center;
    gap: 1rem;
    padding: 1.25rem;
    background: var(--bw-surface);
    border: 1px solid var(--bw-border-subtle);
    border-radius: 10px;
    margin-bottom: 1rem;
}

.bw-profile-emoji-lg {
    font-size: 2.5rem;
    line-height: 1;
}

.bw-profile-info h3 {
    font-family: var(--bw-font-display);
    font-size: 1.125rem;
    font-weight: 700;
    color: var(--bw-text-primary);
    margin: 0;
}

.bw-profile-info p {
    font-size: 0.8125rem;
    color: var(--bw-text-muted);
    margin: 0.125rem 0 0;
}

.bw-setting-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0.875rem 1rem;
    border-bottom: 1px solid var(--bw-border-subtle);
}

.bw-setting-label {
    font-size: 0.875rem;
    font-weight: 500;
    color: var(--bw-text-primary);
}

.bw-emoji-grid {
    display: grid;
    grid-template-columns: repeat(10, 1fr);
    gap: 0.375rem;
    margin: 1rem 0;
}

.bw-emoji-btn {
    width: 100%;
    aspect-ratio: 1;
    border: 1px solid var(--bw-border-subtle);
    border-radius: 8px;
    background: var(--bw-panel);
    font-size: 1.25rem;
    cursor: pointer;
    transition: border-color 0.15s, transform 0.1s;
    display: flex;
    align-items: center;
    justify-content: center;
}

.bw-emoji-btn:hover { border-color: var(--bw-gold); transform: scale(1.1); }
.bw-emoji-btn.selected { border-color: var(--bw-gold); background: rgba(245,156,156,0.15); }

/* Toggle switch */
.bw-toggle {
    position: relative;
    width: 44px;
    height: 24px;
    background: var(--bw-panel);
    border-radius: 12px;
    border: 1px solid var(--bw-border-subtle);
    cursor: pointer;
    transition: background 0.2s;
}

.bw-toggle.on { background: var(--bw-gold); border-color: var(--bw-gold); }

.bw-toggle::after {
    content: '';
    position: absolute;
    top: 2px;
    left: 2px;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    background: white;
    transition: transform 0.2s;
    box-shadow: 0 1px 3px rgba(0,0,0,0.15);
}

.bw-toggle.on::after { transform: translateX(20px); }

/* ============================================
   RESPONSIVE — MOBILE
   ============================================ */

@media (max-width: 768px) {
    #bw-app {
        grid-template-columns: 1fr;
    }

    .bw-sidebar {
        display: none;
    }

    .bw-main {
        grid-column: 1;
        padding-bottom: calc(64px + env(safe-area-inset-bottom, 0px));
    }

    .bw-content {
        /* Reset the desktop-only left-anchoring margins. On mobile the
           sidebar is hidden, so the 2.5rem (+ 4rem at >=1600px) left
           margin that anchors the content next to the sidebar on
           desktop tilts every page to the right. Symmetric padding
           only. */
        margin-left: 0;
        margin-right: 0;
        max-width: 100%;
        padding: 1.25rem 1rem 2rem;
    }
    .bw-bottom-nav {
        display: flex;
        position: fixed;
        bottom: 0;
        left: 0;
        right: 0;
        height: calc(56px + env(safe-area-inset-bottom, 0px));
        padding-bottom: env(safe-area-inset-bottom, 0px);
        background: var(--bw-surface);
        border-top: 1px solid var(--bw-border-subtle);
        z-index: 100;
        backdrop-filter: blur(20px);
        -webkit-backdrop-filter: blur(20px);
    }

    .bw-bnav-item {
        flex: 1;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        gap: 0.125rem;
        text-decoration: none;
        color: var(--bw-text-muted);
        font-size: 0.625rem;
        font-weight: 500;
        padding: 0.375rem 0;
        transition: color 0.15s;
    }

    .bw-bnav-item svg {
        width: 22px;
        height: 22px;
    }

    .bw-bnav-item.active {
        color: var(--bw-nav-active);
        /* Non-color cue is the weight bump + active glyph color; no inset
           edge bar (it read as a clipped one-sided border). */
        font-weight: 700;
    }
    .bw-bnav-item.active svg {
        stroke: var(--bw-nav-active);
    }

    .bw-page-title {
        font-size: 1.25rem;
    }

    .bw-dash-grid {
        grid-template-columns: repeat(3, 1fr);
    }

    .bw-emoji-grid {
        grid-template-columns: repeat(8, 1fr);
    }
}

@media (max-width: 480px) {
    .bw-dash-grid {
        grid-template-columns: 1fr 1fr 1fr;
    }

    .bw-emoji-grid {
        grid-template-columns: repeat(6, 1fr);
    }

}

/* ============================================================================
   CHAT / MESSAGING
   ============================================================================ */

/* Nav unread badge — anchored to the icon's top-right corner */
.bw-nav-icon-wrap { position: relative; display: inline-flex; }
.bw-chat-badge {
    position: absolute;
    top: -7px;
    left: 100%;
    margin-left: -11px;
    min-width: 17px;
    height: 17px;
    padding: 0 4px;
    box-sizing: border-box;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: 999px;
    background: var(--bw-gold);
    color: var(--bw-on-gold);
    font-size: 0.625rem;
    font-weight: 700;
    line-height: 1;
    letter-spacing: 0;
    font-variant-numeric: tabular-nums;
    border: 1.5px solid var(--bw-surface);
}
/* display:inline-flex overrides the [hidden] attribute, so re-hide explicitly. */
.bw-chat-badge[hidden] { display: none; }

/* Chat list */
.bw-chat-list { display: flex; flex-direction: column; gap: 0.25rem; }

.bw-chat-row {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    width: 100%;
    padding: 0.75rem;
    border: none;
    background: transparent;
    border-radius: var(--bw-radius-sm, 10px);
    cursor: pointer;
    text-align: left;
    transition: background 0.15s;
}
.bw-chat-row:hover { background: var(--bw-panel); }

.bw-chat-avatar {
    flex: 0 0 auto;
    width: 40px;
    height: 40px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.35rem;
    background: var(--bw-panel);
    border-radius: 50%;
}

.bw-chat-row-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 0.15rem; }
.bw-chat-row-top { display: flex; align-items: baseline; justify-content: space-between; gap: 0.5rem; }
.bw-chat-row-title { font-weight: 600; color: var(--bw-text-primary); font-size: 0.9375rem; }
.bw-chat-row-time { color: var(--bw-text-muted); font-size: 0.6875rem; white-space: nowrap; }
.bw-chat-row-preview {
    color: var(--bw-text-secondary);
    font-size: 0.8125rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.bw-chat-unread {
    flex: 0 0 auto;
    min-width: 20px;
    height: 20px;
    padding: 0 6px;
    border-radius: 999px;
    background: var(--bw-gold);
    color: var(--bw-on-gold);
    font-size: 0.6875rem;
    font-weight: 700;
    line-height: 20px;
    text-align: center;
}

/* Thread view */
.bw-chat-thread { display: flex; flex-direction: column; height: calc(100vh - 7rem); height: calc(100dvh - 7rem); max-height: 820px; }

/* When a thread is open, #bw-content becomes a full-height flex column so the
   thread fills the viewport and the composer pins to the bottom — no guessed
   height, no dead space. Toggled by openChat() / cleared on navigation. */
.bw-content.bw-fill {
    display: flex;
    flex-direction: column;
    box-sizing: border-box;
    height: 100dvh;
    padding-top: 1.5rem;
    padding-bottom: 1.5rem;
}
.bw-main:has(> .bw-content.bw-fill) { padding-bottom: 0; }
.bw-content.bw-fill > .bw-chat-thread {
    flex: 1 1 auto;
    height: auto;
    min-height: 0;
    max-height: none;
}
@media (max-width: 768px) {
    /* Leave room for the fixed bottom nav so the composer sits just above it. */
    .bw-content.bw-fill {
        height: calc(100dvh - 56px - env(safe-area-inset-bottom, 0px));
        padding: 1rem 1rem 0.75rem;
    }
}

/* Chat list header (page title + New message button). */
.bw-chat-hdr { display: flex; align-items: center; justify-content: space-between; gap: 1rem; margin-bottom: 1rem; }

.bw-chat-thread-header {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    padding-bottom: 0.75rem;
    border-bottom: 1px solid var(--bw-border-subtle);
}
.bw-chat-back {
    border: none;
    background: transparent;
    color: var(--bw-text-primary);
    font-size: 1.6rem;
    line-height: 1;
    cursor: pointer;
    padding: 0 0.25rem;
}
.bw-chat-thread-title { font-family: var(--bw-font-display); font-weight: 700; font-size: 1.0625rem; color: var(--bw-text-primary); }

.bw-chat-messages {
    flex: 1;
    overflow-y: auto;
    display: flex;
    flex-direction: column;
    gap: 0.6rem;
    padding: 1rem 0.25rem;
}

.bw-chat-msg { display: flex; gap: 0.5rem; max-width: 78%; }
.bw-chat-msg.mine { margin-left: auto; flex-direction: row-reverse; }
/* System notices — centered muted pill, visually distinct from person bubbles. */
.bw-chat-system { display: flex; justify-content: center; margin: 0.4rem auto; max-width: 88%; }
.bw-chat-system span {
    font-size: 0.75rem;
    line-height: 1.4;
    text-align: center;
    color: var(--bw-text-muted);
    background: var(--bw-panel);
    border: 1px solid var(--bw-border-subtle);
    border-radius: 999px;
    padding: 0.35rem 0.85rem;
}
.bw-chat-msg-avatar {
    flex: 0 0 auto;
    width: 28px; height: 28px;
    display: flex; align-items: center; justify-content: center;
    font-size: 1rem;
    background: var(--bw-panel);
    border-radius: 50%;
    align-self: flex-end;
}
.bw-chat-msg-col { display: flex; flex-direction: column; gap: 0.15rem; min-width: 0; }
.bw-chat-msg.mine .bw-chat-msg-col { align-items: flex-end; }
.bw-chat-msg-author { font-size: 0.6875rem; color: var(--bw-text-muted); padding-left: 0.5rem; }

.bw-chat-bubble {
    position: relative;
    padding: 0.5rem 0.75rem;
    background: var(--bw-panel);
    border-radius: 10px;
    border-top-left-radius: 4px;
    color: var(--bw-text-primary);
    font-size: 0.9375rem;
    line-height: 1.4;
    word-wrap: break-word;
    overflow-wrap: anywhere;
}
.bw-chat-msg.mine .bw-chat-bubble {
    background: var(--bw-gold);
    color: var(--bw-on-gold);
    border-top-left-radius: 14px;
    border-top-right-radius: 4px;
}
.bw-chat-text { white-space: pre-wrap; }
.bw-chat-time { display: block; margin-top: 0.2rem; font-size: 0.625rem; opacity: 0.6; }
.bw-chat-quote {
    display: block;
    margin-bottom: 0.3rem;
    padding-left: 0.5rem;
    border-left: 2px solid currentColor;
    font-size: 0.75rem;
    opacity: 0.75;
}

.bw-chat-reactions { display: flex; flex-wrap: wrap; gap: 0.25rem; align-items: center; }
.bw-chat-msg.mine .bw-chat-reactions { justify-content: flex-end; }
.bw-chat-reaction {
    border: 1px solid var(--bw-border-subtle);
    background: var(--bw-surface);
    color: var(--bw-text-secondary);
    border-radius: 999px;
    padding: 0.05rem 0.4rem;
    font-size: 0.75rem;
    cursor: pointer;
    line-height: 1.4;
}
.bw-chat-reaction.reacted { border-color: var(--bw-gold); color: var(--bw-gold); }
.bw-chat-reaction.add { opacity: 0; transition: opacity 0.15s; }
.bw-chat-msg:hover .bw-chat-reaction.add { opacity: 0.7; }
/* Touch/coarse-pointer devices have no hover, so reveal the add-reaction (+)
   control at rest — otherwise it's undiscoverable on the most mobile surface. */
@media (hover: none) {
    .bw-chat-reaction.add { opacity: 0.55; }
}
/* Keyboard focus must reveal it too. */
.bw-chat-reaction.add:focus-visible { opacity: 1; }
.bw-chat-react-add { position: relative; display: inline-flex; }
.bw-chat-react-bar {
    display: inline-flex;
    gap: 0.15rem;
    margin-left: 0.25rem;
}
/* The `hidden` attribute's UA display:none is otherwise overridden by the
   author display rule above, so re-assert it explicitly. */
.bw-chat-react-bar[hidden] { display: none; }
.bw-chat-react-bar button {
    border: none; background: transparent; cursor: pointer; font-size: 1rem; padding: 0 0.1rem;
}

/* Composer */
.bw-chat-composer {
    display: flex;
    gap: 0.5rem;
    padding-top: 0.75rem;
    border-top: 1px solid var(--bw-border-subtle);
}
.bw-chat-input {
    flex: 1;
    padding: 0.65rem 0.9rem;
    border: 1px solid var(--bw-border-subtle);
    border-radius: 999px;
    background: var(--bw-surface);
    color: var(--bw-text-primary);
    /* 16px min: anything smaller makes iOS Safari auto-zoom (and shift the
       layout) when the field is focused. */
    font-size: 16px;
    outline: none;
}
.bw-chat-input:focus { border-color: var(--bw-gold); }

/* (iOS focus-zoom guard moved to the END of this file so later component
   rules can't override it — .bw-pm-input/.bw-score-input used to win the
   cascade at 15px/13px and iOS zoomed the whole page on focus.) */

/* Home fantasy lead card (Yahoo leagues): compact standings rows. */
.bw-fanhome-row { display: flex; align-items: center; gap: 0.75rem; width: 100%; text-align: left; background: none; border: none; cursor: pointer; padding: 0.6rem 1rem; border-bottom: 1px solid var(--bw-border-subtle); color: var(--bw-text-primary); font-family: var(--bw-font-body); }
.bw-fanhome-row:hover { background: var(--bw-panel); }
.bw-fanhome-rank { font-family: var(--bw-font-mono); font-size: 0.72rem; color: var(--bw-text-muted); font-variant-numeric: tabular-nums; }
.bw-fanhome-row:first-child .bw-fanhome-rank { color: var(--bw-gold-deep); font-weight: 700; }
.bw-fanhome-main { min-width: 0; flex: 1; }
.bw-fanhome-team { display: block; font-weight: 600; font-size: 0.875rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bw-fanhome-mgr { display: block; font-size: 0.72rem; color: var(--bw-text-muted); }
.bw-fanhome-rec { font-family: var(--bw-font-mono); font-weight: 700; font-size: 0.85rem; font-variant-numeric: tabular-nums; }
.bw-fanhome-strk { font-family: var(--bw-font-mono); font-size: 0.68rem; color: var(--bw-text-muted); min-width: 2ch; }
.bw-fanhome-more { display: block; width: 100%; background: none; border: none; cursor: pointer; padding: 0.65rem 1rem; text-align: left; font-family: var(--bw-font-mono); font-size: 0.7rem; letter-spacing: 0.05em; text-transform: uppercase; color: var(--bw-text-secondary); }
.bw-fanhome-more:hover { color: var(--bw-gold-deep); }

/* Admin-only strip: visually quarantined from the user-facing page so an
   admin can always tell what members actually see. */
.bw-admin-strip { display: flex; align-items: center; gap: 0.8rem; flex-wrap: wrap; margin-top: 1.5rem; padding: 0.8rem 1rem; border-style: dashed; }
.bw-admin-strip-tag { font-family: var(--bw-font-mono); font-size: 0.6rem; letter-spacing: 0.12em; text-transform: uppercase; background: var(--bw-navy); color: #fff; border-radius: 4px; padding: 0.2rem 0.5rem; flex: 0 0 auto; }
[data-theme="dark"] .bw-admin-strip-tag { background: var(--bw-panel); color: var(--bw-text-secondary); }
.bw-admin-strip-txt { font-size: 0.8125rem; color: var(--bw-text-secondary); flex: 1 1 auto; }
.bw-admin-strip .bw-btn { flex: 0 0 auto; font-size: 0.75rem; padding: 0.4rem 0.8rem; }

/* Small helper text under an editor field. */
.bw-pm-hint { font-size: 0.6875rem; color: var(--bw-text-muted); line-height: 1.45; margin: 0.35rem 0 0.25rem; }
.bw-chat-send {
    flex: 0 0 auto;
    width: 42px; height: 42px;
    border: none;
    border-radius: 50%;
    background: var(--bw-gold);
    color: var(--bw-on-gold);
    font-size: 1.05rem;
    cursor: pointer;
}
.bw-chat-send:active { transform: scale(0.94); }

.bw-chat-section-label {
    padding: 0.5rem 0.75rem 0.25rem;
    font-size: 0.6875rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    color: var(--bw-text-muted);
}
.bw-chat-section-label:first-child { padding-top: 0; }

/* ============================================================================
   POOLS (Your Pools home + pool view)
   ============================================================================ */

/* Responsive tiles — one column on mobile, multiple on desktop width. */
.bw-pool-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
    gap: 0.875rem;
    align-items: start;
}

.bw-pool-card {
    display: block;
    width: 100%;
    text-align: left;
    padding: 1rem 1.125rem;
    background: var(--bw-surface);
    border: 1px solid var(--bw-border-subtle);
    border-radius: 10px;
    cursor: pointer;
    transition: border-color 0.15s, transform 0.05s;
}
.bw-pool-card:hover { border-color: var(--bw-gold); }
.bw-pool-card:active { transform: scale(0.995); }

.bw-pool-card-top { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.5rem; }
.bw-pool-icon {
    width: 38px; height: 38px;
    display: flex; align-items: center; justify-content: center;
    font-size: 1.35rem;
    background: var(--bw-panel);
    border-radius: 10px;
}
.bw-pool-name { flex: 1; font-weight: 600; font-size: 1rem; color: var(--bw-text-primary); }

.bw-pool-pill {
    font-size: 0.6875rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    padding: 2px 8px;
    border: 1px solid;
    border-radius: 999px;
}

.bw-pool-card-meta {
    display: flex; align-items: center; justify-content: space-between;
    font-size: 0.8125rem; color: var(--bw-text-secondary);
}

.bw-pool-add {
    display: flex; align-items: center; justify-content: center; gap: 0.5rem;
    width: 100%; padding: 0.9rem;
    border: 1px dashed var(--bw-border-subtle);
    border-radius: 10px;
    background: transparent;
    color: var(--bw-text-secondary);
    font-size: 0.875rem;
    cursor: pointer;
}
.bw-pool-add:hover { border-color: var(--bw-gold); color: var(--bw-text-primary); }

/* Pool view header + switcher */
.bw-pool-header { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.75rem; }
.bw-pool-switcher { position: relative; }
.bw-pool-chip {
    display: inline-flex; align-items: center; gap: 0.5rem;
    padding: 0.4rem 0.7rem;
    background: var(--bw-surface);
    border: 1px solid var(--bw-border-subtle);
    border-radius: 999px;
    font-size: 0.9375rem; font-weight: 600;
    color: var(--bw-text-primary);
    cursor: pointer;
}
.bw-pool-chip-name { max-width: 60vw; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.bw-pool-switch-menu {
    position: absolute; top: calc(100% + 6px); left: 0; z-index: 30;
    min-width: 220px;
    background: var(--bw-surface);
    border: 1px solid var(--bw-border-subtle);
    border-radius: 12px;
    box-shadow: var(--bw-shadow-md, 0 8px 32px rgba(0,0,0,0.18));
    overflow: hidden;
    padding: 0.25rem;
}
.bw-pool-switch-item {
    display: flex; align-items: center; gap: 0.5rem;
    width: 100%; padding: 0.6rem 0.7rem;
    background: transparent; border: none; border-radius: 8px;
    font-size: 0.9375rem; color: var(--bw-text-primary);
    cursor: pointer; text-align: left;
}
.bw-pool-switch-item:hover { background: var(--bw-panel); }

/* Pool sub-nav */
.bw-pool-subnav {
    display: flex; align-items: center; gap: 0.5rem;
    margin-bottom: 1.25rem;
}
.bw-pool-subnav-main {
    display: flex; gap: 0.25rem; flex: 1;
    background: var(--bw-panel);
    padding: 0.25rem;
    border-radius: 12px;
}
.bw-pool-tab {
    flex: 1; text-align: center;
    padding: 0.5rem 0;
    border-radius: 9px;
    font-size: 0.875rem; font-weight: 600;
    color: var(--bw-text-secondary);
    text-decoration: none;
}
.bw-pool-tab.active { background: var(--bw-surface); color: var(--bw-text-primary); }
/* The primary action (make picks while open, standings once locked) reads
   heavier than its siblings — this isn't a flat 4-up tab strip. */
.bw-pool-tab.primary { color: var(--bw-text-primary); }
.bw-pool-tab.primary.active { background: var(--pool-deep); color: #fff; }
/* Receipt is secondary: a compact icon pill outside the main group. */
.bw-pool-tab.receipt {
    flex: 0 0 auto; padding: 0.5rem 0.7rem; font-size: 1rem;
    background: var(--bw-panel); border-radius: 10px;
}
.bw-pool-tab.receipt.active { background: var(--bw-surface); box-shadow: 0 0 0 1px var(--bw-border-strong) inset; }

/* ============================================================================
   PROFILE STATS / HISTORY
   ============================================================================ */
.bw-profile-stats {
    background: var(--bw-surface);
    border: 1px solid var(--bw-border-subtle);
    border-radius: 10px;
    padding: 1.125rem;
    margin-bottom: 1.25rem;
}
.bw-profile-stats-head { display: flex; align-items: center; gap: 0.875rem; margin-bottom: 1rem; }
.bw-profile-stats-head h3 { font-size: 1.125rem; font-weight: 700; color: var(--bw-text-primary); }
.bw-profile-rank {
    display: flex; flex-direction: column; align-items: center;
    font-family: var(--bw-font-display); font-weight: 800; font-size: 1.5rem;
    color: var(--bw-gold); line-height: 1;
}
.bw-profile-rank small { font-size: 0.625rem; font-weight: 600; color: var(--bw-text-muted); margin-top: 2px; }

.bw-profile-statgrid {
    display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.5rem;
}
.bw-profile-statgrid > div {
    display: flex; flex-direction: column; align-items: center; gap: 2px;
    padding: 0.625rem 0.25rem; background: var(--bw-panel); border-radius: 10px;
}
.bw-profile-statgrid .v { font-family: var(--bw-font-display); font-weight: 700; font-size: 1.25rem; color: var(--bw-text-primary); }
.bw-profile-statgrid .l { font-size: 0.625rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--bw-text-muted); }

.bw-profile-spark { margin-top: 1rem; }

/* Hero row: big total + accuracy */
.bw-profile-hero { display: flex; gap: 0.75rem; margin-bottom: 0.875rem; }
.bw-profile-hero-main, .bw-profile-hero-side {
    flex: 1 1 0; display: flex; flex-direction: column; align-items: flex-start;
    padding: 0.75rem 0.9rem; background: var(--bw-panel); border-radius: 12px;
}
.bw-profile-hero-num { font-family: var(--bw-font-display); font-weight: 800; font-size: 1.875rem; line-height: 1; color: var(--bw-text-primary); }
.bw-profile-hero-num.accent { color: var(--bw-gold-deep, #B8860B); }
.bw-profile-hero-lbl { font-size: 0.6875rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); margin-top: 4px; }

/* Points-over-time chart */
.bw-profile-chart { margin-top: 1.125rem; }
.bw-profile-chart-head { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 0.4rem; }
.bw-profile-chart-now { font-family: var(--bw-font-display); font-weight: 700; font-size: 0.8125rem; color: var(--bw-gold-deep, #B8860B); }
.bw-pts-chart { margin-top: 0.25rem; }
.bw-pts-chart text { font-family: var(--bw-font-mono); }

/* Standings rows are tappable → member profile */
.bw-lb-row[role="button"] { cursor: pointer; transition: background 0.12s; }
.bw-lb-row[role="button"]:hover { background: var(--bw-panel); }

/* ============================================================================
   POOL MARKETPLACE BRANDING — lean into the swimming-pool pun (water, waves)
   ============================================================================ */
:root {
    --pool-aqua-light: #7FE0EE;
    --pool-aqua: #34BCD9;
    --pool-deep: #0E7C9B;
    --pool-foam: #ECFBFF;
}
[data-theme="dark"] { --pool-foam: #0c2730; --pool-deep: #34BCD9; }

.bw-pool-browse-head { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 1rem; }

/* Hero banner — a little slice of pool water */
.bw-pool-hero {
    position: relative;
    overflow: hidden;
    border-radius: 18px;
    padding: 1.5rem 1.5rem 2.75rem;
    margin-bottom: 1.5rem;
    background: var(--pool-aqua);   /* flat fill + no inset glow (was a gradient) — SPEC_09 9.11 */
}
.bw-pool-hero-inner { display: flex; align-items: center; gap: 1rem; position: relative; z-index: 2; }
.bw-pool-hero-emoji {
    font-size: 2.25rem;
    filter: drop-shadow(0 2px 6px rgba(0, 60, 80, 0.25));
    animation: poolBob 3.5s ease-in-out infinite;
}
@keyframes poolBob { 0%,100% { transform: translateY(0) rotate(-3deg); } 50% { transform: translateY(-5px) rotate(3deg); } }
.bw-pool-hero h2 {
    font-family: var(--bw-font-display); font-size: 1.5rem; font-weight: 800;
    margin: 0 0 0.2rem; color: #fff; letter-spacing: -0.01em;
    text-shadow: 0 1px 8px rgba(0, 60, 80, 0.25);
}
.bw-pool-hero p { margin: 0; font-size: 0.9375rem; color: rgba(255, 255, 255, 0.92); }

/* Animated foam waves along the bottom of the hero */
.bw-pool-waves { position: absolute; left: 0; right: 0; bottom: -1px; height: 34px; z-index: 1; }
.bw-pool-waves svg { position: absolute; left: 0; bottom: 0; width: 200%; height: 100%; }
.bw-pool-waves .wfront { animation: poolDrift 7s linear infinite; }
.bw-pool-waves .wback  { animation: poolDrift 11s linear infinite reverse; opacity: 0.55; }
@keyframes poolDrift { from { transform: translateX(0); } to { transform: translateX(-50%); } }

/* Catalog tiles */
.bw-pool-catalog { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 1rem; align-items: start; }
.bw-pool-tile {
    position: relative; overflow: hidden;
    background: var(--bw-surface);
    border: 1px solid var(--bw-border-subtle);
    border-radius: 12px;
    padding: 1rem 1.125rem 1.125rem;
    transition: border-color 0.15s, transform 0.06s;
}
.bw-pool-tile:hover { border-color: var(--pool-aqua); }
/* a thin pool-water line along the top edge */
.bw-pool-tile::before {
    content: ""; position: absolute; top: 0; left: 0; right: 0; height: 4px;
    background: var(--pool-aqua);
    opacity: 0.85;
}
.bw-pool-tile-top { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.6rem; }
.bw-pool-tile-icon {
    width: 44px; height: 44px; flex: 0 0 auto;
    display: flex; align-items: center; justify-content: center; font-size: 1.5rem;
    background: var(--pool-foam); border-radius: 12px;
}
.bw-pool-tile-meta { flex: 1; min-width: 0; }
.bw-pool-tile-name { font-weight: 700; font-size: 1rem; color: var(--bw-text-primary); display: flex; align-items: center; gap: 0.35rem; }
.bw-pool-flame { font-size: 0.875rem; }
.bw-pool-tile-tags { display: flex; flex-wrap: wrap; align-items: center; gap: 0.4rem; margin-top: 0.25rem; }
.bw-pool-tag {
    font-size: 0.625rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em;
    padding: 2px 7px; border-radius: 999px;
    background: var(--pool-foam); color: var(--pool-deep);
}
.bw-pool-leagues { font-size: 0.6875rem; color: var(--bw-text-muted); }
.bw-pool-tile-desc { margin: 0 0 0.875rem; font-size: 0.8125rem; color: var(--bw-text-secondary); line-height: 1.45; }

/* "Dive in" button — pool water */
.bw-pool-dive {
    width: 100%;
    border: none;
    background: var(--pool-aqua);
    color: #fff; font-weight: 700; font-size: 0.875rem;
    padding: 0.6rem; border-radius: 10px; cursor: pointer;
    transition: transform 0.06s, filter 0.15s;
}
.bw-pool-dive:hover { filter: brightness(1.05); }
.bw-pool-dive:active { transform: scale(0.98); }
.bw-pool-dive:disabled { opacity: 0.7; cursor: default; }

/* Small wave accent under the "Your pools" home title */
.bw-pools-title-wrap { display: flex; align-items: center; gap: 0.5rem; }

/* ============================================================================
   THE POOL — app-store / streaming-style marketplace
   ============================================================================ */
.bw-mk-search { position: relative; margin-bottom: 0.75rem; }
.bw-mk-search input {
    width: 100%; height: 42px; padding: 0 0.9rem 0 2.3rem; box-sizing: border-box;
    border-radius: 999px; border: 1px solid var(--bw-border-subtle);
    background: var(--bw-surface); color: var(--bw-text-primary); font-size: 0.9375rem; outline: none;
}
.bw-mk-search input:focus { border-color: var(--pool-aqua); }
.bw-mk-search-icon { position: absolute; left: 0.9rem; top: 50%; transform: translateY(-50%); opacity: 0.55; font-size: 0.875rem; }

.bw-mk-chips { display: flex; gap: 0.5rem; overflow-x: auto; padding-bottom: 0.25rem; margin-bottom: 1.25rem; scrollbar-width: none; }
.bw-mk-chips::-webkit-scrollbar { display: none; }
.bw-mk-chip {
    flex: 0 0 auto; padding: 0.4rem 0.85rem; border-radius: 999px;
    border: 1px solid var(--bw-border-subtle); background: var(--bw-surface);
    color: var(--bw-text-secondary); font-size: 0.8125rem; font-weight: 600; cursor: pointer; white-space: nowrap;
}
.bw-mk-chip.active { background: var(--pool-deep); border-color: var(--pool-deep); color: #fff; }

/* Featured spotlight */
.bw-mk-featured {
    position: relative; overflow: hidden; display: block; width: 100%; text-align: left;
    border: none; cursor: pointer; border-radius: 12px; padding: 1.5rem; margin-bottom: 1.75rem;
    color: #fff; min-height: 168px;
}
.bw-mk-featured:active { transform: scale(0.995); }
.bw-mk-featured-glow { position: absolute; right: -50px; top: -50px; width: 190px; height: 190px; border-radius: 50%; background: rgba(255,255,255,0.16); }
.bw-mk-featured-row { display: flex; align-items: center; justify-content: space-between; position: relative; z-index: 1; margin-bottom: 0.75rem; }
.bw-mk-featured-emoji { font-size: 2.5rem; filter: drop-shadow(0 2px 8px rgba(0,0,0,0.22)); }
.bw-mk-featured-tag { font-size: 0.6875rem; font-weight: 800; letter-spacing: 0.08em; background: rgba(255,255,255,0.22); padding: 4px 10px; border-radius: 999px; }
.bw-mk-featured-name { position: relative; z-index: 1; font-family: var(--bw-font-display); font-size: 1.5rem; font-weight: 800; margin-bottom: 0.35rem; text-shadow: 0 1px 8px rgba(0,0,0,0.18); }
.bw-mk-featured-desc { position: relative; z-index: 1; font-size: 0.9375rem; opacity: 0.95; margin-bottom: 0.75rem; }
.bw-mk-featured-meta { position: relative; z-index: 1; font-size: 0.8125rem; opacity: 0.92; font-weight: 600; }

/* Rails */
.bw-mk-rail { margin-bottom: 1.5rem; }
.bw-mk-rail-title { font-size: 1.0625rem; font-weight: 700; color: var(--bw-text-primary); margin-bottom: 0.75rem; }
.bw-mk-rail-track { display: flex; gap: 0.875rem; overflow-x: auto; padding-bottom: 0.5rem; scroll-snap-type: x proximity; scrollbar-width: none; }
.bw-mk-rail-track::-webkit-scrollbar { display: none; }

/* Cards */
.bw-mk-card {
    flex: 0 0 auto; width: 168px; scroll-snap-align: start;
    border: 1px solid var(--bw-border-subtle); border-radius: 12px; overflow: hidden;
    background: var(--bw-surface); cursor: pointer; text-align: left; padding: 0;
    transition: transform 0.08s, border-color 0.15s;
}
.bw-mk-card:hover { border-color: var(--pool-aqua); transform: translateY(-2px); }
.bw-mk-card-art { position: relative; height: 86px; display: flex; align-items: center; justify-content: center; }
.bw-mk-card-emoji { font-size: 2.25rem; filter: drop-shadow(0 2px 6px rgba(0,0,0,0.18)); }
.bw-mk-badge { position: absolute; top: 8px; right: 8px; font-size: 0.5625rem; font-weight: 800; letter-spacing: 0.03em; padding: 3px 7px; border-radius: 999px; background: rgba(255,255,255,0.92); }
.bw-mk-badge.live { color: #DC2626; } .bw-mk-badge.fire { color: #B45309; }
.bw-mk-card-body { padding: 0.7rem 0.8rem 0.85rem; }
.bw-mk-card-name { font-weight: 700; font-size: 0.875rem; color: var(--bw-text-primary); line-height: 1.25; margin-bottom: 0.3rem; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.bw-mk-card-sub { font-size: 0.6875rem; color: var(--bw-text-muted); margin-bottom: 0.3rem; }
.bw-mk-card-pop { font-size: 0.6875rem; color: var(--pool-deep); font-weight: 600; }

.bw-mk-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(158px, 1fr)); gap: 0.875rem; }
.bw-mk-grid .bw-mk-card { width: auto; }

/* Detail sheet (product page) */
.bw-mk-overlay { position: fixed; inset: 0; z-index: 200; background: rgba(8,18,26,0.55); display: flex; align-items: flex-end; justify-content: center; }
.bw-mk-sheet { width: 100%; max-width: 460px; background: var(--bw-surface); border-radius: 12px 12px 0 0; overflow: hidden; max-height: 90vh; max-height: calc(100dvh - 2.5rem); overflow-y: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch; animation: mkUp 0.22s cubic-bezier(.2,.8,.2,1); padding-bottom: env(safe-area-inset-bottom); }
@keyframes mkUp { from { transform: translateY(50px); opacity: 0.6; } to { transform: translateY(0); opacity: 1; } }
@media (min-width: 560px) { .bw-mk-overlay { align-items: center; } .bw-mk-sheet { border-radius: 12px; } }
.bw-mk-sheet-art { position: relative; height: 150px; display: flex; align-items: center; justify-content: center; }
.bw-mk-sheet-emoji { font-size: 3.75rem; filter: drop-shadow(0 3px 10px rgba(0,0,0,0.22)); }
.bw-mk-sheet-close { position: absolute; right: 0.9rem; top: 0.9rem; width: 30px; height: 30px; border: none; border-radius: 50%; background: rgba(255,255,255,0.9); color: #333; font-size: 0.8125rem; cursor: pointer; }
.bw-mk-sheet-body { padding: 1.25rem; }
.bw-mk-sheet-name { font-family: var(--bw-font-display); font-size: 1.375rem; font-weight: 800; color: var(--bw-text-primary); margin-bottom: 0.5rem; }
.bw-mk-sheet-tags { display: flex; flex-wrap: wrap; align-items: center; gap: 0.4rem; margin-bottom: 1rem; }
.bw-mk-sheet-desc { font-size: 0.9375rem; color: var(--bw-text-secondary); line-height: 1.5; margin-bottom: 1rem; }
.bw-mk-sheet-rows { border-top: 1px solid var(--bw-border-subtle); margin-bottom: 1.25rem; }
.bw-mk-sheet-row { display: flex; justify-content: space-between; gap: 1rem; padding: 0.75rem 0; border-bottom: 1px solid var(--bw-border-subtle); font-size: 0.875rem; }
.bw-mk-sheet-row .k { color: var(--bw-text-muted); flex: 0 0 auto; }
.bw-mk-sheet-row .v { color: var(--bw-text-primary); text-align: right; }
.bw-mk-sheet-hint { text-align: center; color: var(--bw-text-muted); font-size: 0.8125rem; padding: 0.5rem; }

/* ============================================================================
   THE POOL — analytical / "alive" elements
   ============================================================================ */
/* Pulse ticker */
.bw-mk-pulse { display: flex; align-items: center; gap: 0.6rem; background: var(--bw-panel); border-radius: 999px; padding: 0.45rem 0.5rem 0.45rem 0.8rem; margin-bottom: 1.25rem; overflow: hidden; }
.bw-mk-pulse-label { flex: 0 0 auto; font-size: 0.625rem; font-weight: 800; letter-spacing: 0.08em; color: #DC2626; }
.bw-mk-pulse-win { flex: 1; overflow: hidden; -webkit-mask-image: linear-gradient(90deg, transparent, #000 4%, #000 96%, transparent); mask-image: linear-gradient(90deg, transparent, #000 4%, #000 96%, transparent); }
.bw-mk-pulse-track { display: inline-flex; align-items: center; gap: 0.75rem; white-space: nowrap; animation: pulseMarquee 36s linear infinite; }
.bw-mk-pulse-item { font-size: 0.75rem; color: var(--bw-text-secondary); }
.bw-mk-pulse-dot { color: var(--pool-aqua); }
@keyframes pulseMarquee { from { transform: translateX(0); } to { transform: translateX(-50%); } }

/* Spotlight (rotating, analytical) */
.bw-mk-spot { position: relative; overflow: hidden; border-radius: 12px; padding: 1.5rem; margin-bottom: 1.75rem; color: #fff; display: flex; gap: 1.5rem; }
.bw-mk-spot-main { flex: 1; min-width: 0; position: relative; z-index: 1; }
.bw-mk-spot-tagline { font-size: 0.9375rem; opacity: 0.95; margin-bottom: 0.5rem; }
.bw-mk-spot-btn { margin-top: 0.85rem; border: none; background: rgba(255,255,255,0.95); color: var(--pool-deep); font-weight: 800; font-size: 0.8125rem; padding: 0.55rem 1.1rem; border-radius: 999px; cursor: pointer; }
.bw-mk-spot-btn:active { transform: scale(0.97); }
.bw-mk-spot-side { flex: 0 0 42%; max-width: 300px; position: relative; z-index: 1; background: rgba(255,255,255,0.16); border-radius: 10px; padding: 0.9rem 1rem; color: #fff; align-self: center; }
@media (max-width: 640px) { .bw-mk-spot { flex-direction: column; } .bw-mk-spot-side { flex: none; max-width: none; } }

/* Consensus bars */
.bw-mk-consensus-q { font-size: 0.75rem; font-weight: 700; margin-bottom: 0.55rem; opacity: 0.92; }
.bw-mk-bar-row { display: grid; grid-template-columns: 88px 1fr 32px; align-items: center; gap: 0.5rem; margin-bottom: 0.4rem; font-size: 0.75rem; }
.bw-mk-bar-label { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bw-mk-bar { height: 7px; border-radius: 999px; overflow: hidden; }
.bw-mk-bar-fill { display: block; height: 100%; border-radius: 999px; transform-origin: left; animation: barGrow 0.7s cubic-bezier(.2,.8,.2,1) both; }
.bw-mk-bar-pct { text-align: right; font-variant-numeric: tabular-nums; opacity: 0.9; }
@keyframes barGrow { from { transform: scaleX(0); } to { transform: scaleX(1); } }
.bw-mk-spot-side .bw-mk-bar { background: rgba(255,255,255,0.28); }
.bw-mk-spot-side .bw-mk-bar-fill { background: #fff; }
.bw-mk-sheet .bw-mk-consensus { color: var(--bw-text-primary); margin: 0.75rem 0; }
.bw-mk-sheet .bw-mk-bar { background: var(--bw-panel); }
.bw-mk-sheet .bw-mk-bar-fill { background: var(--pool-aqua); }

/* Odds chips */
.bw-mk-odds { display: flex; flex-wrap: wrap; gap: 0.4rem; margin: 0.7rem 0 0; }
.bw-mk-odd { font-size: 0.6875rem; padding: 3px 9px; border-radius: 999px; background: rgba(255,255,255,0.22); color: #fff; }
.bw-mk-odd b { font-weight: 800; }
.bw-mk-odds.dark { margin-bottom: 0.5rem; }
.bw-mk-odds.dark .bw-mk-odd { background: var(--bw-panel); color: var(--bw-text-primary); }

/* Card consensus stat line */
.bw-mk-card-stat { font-size: 0.6875rem; color: var(--bw-text-muted); }
.bw-mk-card-stat b { color: var(--pool-deep); }

/* Pool talk — hot-take cards + sheet rows */
.bw-mk-take { flex: 0 0 auto; width: 232px; scroll-snap-align: start; text-align: left; border: 1px solid var(--bw-border-subtle); border-radius: 10px; background: var(--bw-surface); padding: 0.85rem; cursor: pointer; display: flex; flex-direction: column; gap: 0.45rem; min-height: 116px; }
.bw-mk-take:hover { border-color: var(--pool-aqua); }
.bw-mk-take-top { display: flex; align-items: center; gap: 0.4rem; }
.bw-mk-take-av { width: 22px; height: 22px; border-radius: 50%; background: var(--pool-aqua); color: #fff; font-size: 0.625rem; font-weight: 800; display: flex; align-items: center; justify-content: center; flex: 0 0 auto; }
.bw-mk-take-u { font-size: 0.6875rem; color: var(--bw-text-muted); font-weight: 600; }
.bw-mk-take-text { font-size: 0.875rem; color: var(--bw-text-primary); line-height: 1.35; }
.bw-mk-take-pool { font-size: 0.6875rem; color: var(--bw-text-muted); margin-top: auto; }
.bw-mk-take-row { display: flex; gap: 0.6rem; align-items: flex-start; padding: 0.55rem 0; }

.bw-mk-sheet-section { font-size: 0.75rem; font-weight: 800; text-transform: uppercase; letter-spacing: 0.04em; color: var(--bw-text-muted); margin: 1.1rem 0 0.5rem; }

/* ============================================================================
   PLAYABLE PROP POOL — questions / picks / results
   ============================================================================ */
.bw-prop-head { margin-bottom: 1.25rem; }
.bw-prop-progress { height: 8px; border-radius: 999px; background: var(--bw-panel); overflow: hidden; }
.bw-prop-progress-fill { height: 100%; border-radius: 999px; background: var(--pool-deep); transition: width 0.35s ease; }
.bw-prop-progress-label { font-size: 0.75rem; color: var(--bw-text-muted); margin-top: 0.4rem; }

.bw-prop-q { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 10px; padding: 1rem 1.125rem; margin-bottom: 0.875rem; }
.bw-prop-q-top { display: flex; align-items: baseline; justify-content: space-between; gap: 0.75rem; margin-bottom: 0.75rem; }
.bw-prop-q-text { font-weight: 700; font-size: 0.9375rem; color: var(--bw-text-primary); }
.bw-prop-q-pts { flex: 0 0 auto; font-size: 0.6875rem; font-weight: 700; color: var(--pool-deep); background: var(--pool-foam); padding: 2px 8px; border-radius: 999px; }

.bw-prop-options { display: flex; flex-direction: column; gap: 0.45rem; }
.bw-prop-opt {
    position: relative; display: flex; align-items: center; gap: 0.5rem;
    width: 100%; text-align: left; padding: 0.6rem 0.8rem;
    border: 1.5px solid var(--bw-border-subtle); border-radius: 10px;
    background: var(--bw-bg, transparent); color: var(--bw-text-primary);
    font-size: 0.875rem; cursor: pointer; transition: border-color 0.12s, background 0.12s;
}
.bw-prop-opt:hover:not(:disabled) { border-color: var(--pool-aqua); }
.bw-prop-opt:disabled { cursor: default; opacity: 0.9; }
.bw-prop-opt.picked { border-color: var(--pool-deep); background: var(--pool-foam); }
.bw-prop-opt.picked .bw-prop-opt-label { font-weight: 700; }
.bw-prop-opt.correct { border-color: var(--bw-success); }
.bw-prop-opt-label { flex: 1; min-width: 0; z-index: 1; }
.bw-prop-opt-bar { flex: 0 0 70px; height: 6px; border-radius: 999px; background: var(--bw-panel); overflow: hidden; }
.bw-prop-opt-bar > span { display: block; height: 100%; background: var(--pool-aqua); border-radius: 999px; }
.bw-prop-opt-pct { flex: 0 0 auto; font-size: 0.6875rem; color: var(--bw-text-muted); font-variant-numeric: tabular-nums; width: 30px; text-align: right; }

.bw-prop-result { display: flex; flex-wrap: wrap; align-items: center; gap: 0.75rem; }
.bw-prop-result-correct { font-weight: 700; color: var(--bw-success); }
.bw-prop-result-consensus { font-size: 0.8125rem; color: var(--bw-text-muted); }

/* ============================================================================
   THE POOL — clone / report / request, lineage tags, and pool editor
   ============================================================================ */

/* Lineage / ownership tags on cards */
.bw-mk-card-tags { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 0.4rem; }
.bw-mk-tag { font-size: 0.5625rem; font-weight: 700; letter-spacing: 0.02em; padding: 2px 6px; border-radius: 999px; border: 1px solid var(--bw-border-subtle); color: var(--bw-text-muted); }
.bw-mk-tag.in { color: var(--bw-success); border-color: color-mix(in srgb, var(--bw-success) 35%, transparent); }
.bw-mk-tag.priv { color: var(--bw-text-secondary); }
.bw-mk-tag.clone, .bw-mk-tag.clones { color: var(--pool-deep); border-color: color-mix(in srgb, var(--pool-deep) 35%, transparent); }

/* Sheet hint variants */
.bw-mk-sheet-hint.ok { color: var(--bw-success); font-weight: 600; }

/* Sheet action area (clone / report / edit) */
.bw-mk-act-row { display: flex; gap: 0.6rem; margin-top: 0.6rem; }
.bw-mk-act {
    flex: 1 1 0; border: 1px solid var(--bw-border-strong); background: var(--bw-panel);
    color: var(--bw-text-primary); font-weight: 700; font-size: 0.8125rem;
    padding: 0.55rem 0.6rem; border-radius: 10px; cursor: pointer; transition: filter 0.15s, transform 0.06s;
}
.bw-mk-act:hover { filter: brightness(1.04); }
.bw-mk-act:active { transform: scale(0.98); }
.bw-mk-act:disabled { opacity: 0.6; cursor: default; }
.bw-mk-act.ghost { background: transparent; color: var(--bw-text-secondary); }
.bw-mk-act.danger { border-color: color-mix(in srgb, var(--bw-danger, #DC2626) 50%, transparent); color: var(--bw-danger, #DC2626); background: transparent; }
.bw-mk-act.wide { width: 100%; flex: none; margin-top: 0.6rem; }
.bw-pool-dive.ask { background: var(--bw-gold); color: var(--bw-on-gold); }

/* Commish requests banner */
.bw-mk-reqs { border: 1px solid color-mix(in srgb, var(--bw-gold) 35%, transparent); background: color-mix(in srgb, var(--bw-gold) 8%, var(--bw-surface)); border-radius: 10px; padding: 0.85rem; margin-bottom: 1.1rem; }
.bw-mk-reqs-title { font-weight: 800; font-size: 0.9375rem; color: var(--bw-text-primary); margin-bottom: 0.65rem; }
.bw-mk-req { display: flex; align-items: center; gap: 0.7rem; padding: 0.5rem 0; border-top: 1px solid var(--bw-border-subtle); }
.bw-mk-req:first-of-type { border-top: none; }
.bw-mk-req-emoji { font-size: 1.5rem; flex: 0 0 auto; }
.bw-mk-req-main { flex: 1 1 0; min-width: 0; }
.bw-mk-req-name { font-weight: 700; font-size: 0.875rem; color: var(--bw-text-primary); }
.bw-mk-req-who { font-size: 0.75rem; color: var(--bw-text-muted); }
.bw-mk-req-actions { display: flex; gap: 0.4rem; flex: 0 0 auto; }
.bw-mk-req-add { border: none; background: var(--pool-deep); color: #fff; font-weight: 700; font-size: 0.75rem; padding: 0.4rem 0.7rem; border-radius: 8px; cursor: pointer; }
.bw-mk-req-no { border: 1px solid var(--bw-border-strong); background: transparent; color: var(--bw-text-muted); font-weight: 600; font-size: 0.75rem; padding: 0.4rem 0.6rem; border-radius: 8px; cursor: pointer; }

/* Pool modal (request / report / clone / editor) */
.bw-pm { position: relative; width: 100%; max-width: 480px; background: var(--bw-surface); border-radius: 12px 12px 0 0; padding: 1.25rem; padding-bottom: calc(1.25rem + env(safe-area-inset-bottom)); max-height: 90vh; max-height: calc(100dvh - 2.5rem); overflow-y: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch; animation: mkUp 0.22s cubic-bezier(.2,.8,.2,1); }
@media (min-width: 560px) { .bw-pm { border-radius: 12px; max-height: 90vh; } }
/* Every poolModal sheet gets an explicit close; body scroll locks while any
   sheet or the marketplace overlay is open (no scroll-chaining on touch). */
.bw-pm-close { position: sticky; top: 0; float: right; z-index: 2; width: 30px; height: 30px; border: 1px solid var(--bw-border-subtle); border-radius: 50%; background: var(--bw-panel); color: var(--bw-text-secondary); font-size: 0.8125rem; cursor: pointer; margin: -0.25rem -0.25rem 0 0; }
.bw-pm-close:hover { color: var(--bw-text-primary); border-color: var(--bw-border-strong); }
body:has(.bw-mk-overlay) { overflow: hidden; }
.bw-pm-head { font-family: var(--bw-font-display); font-size: 1.1875rem; font-weight: 800; color: var(--bw-text-primary); margin-bottom: 0.5rem; }
.bw-pm-sub { font-size: 0.875rem; color: var(--bw-text-secondary); line-height: 1.5; margin: 0 0 1rem; }
.bw-pm-label { display: block; font-size: 0.75rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: var(--bw-text-muted); margin: 0.75rem 0 0.35rem; }
.bw-pm-input { width: 100%; box-sizing: border-box; border: 1px solid var(--bw-border-strong); background: var(--bw-panel); color: var(--bw-text-primary); border-radius: 10px; padding: 0.55rem 0.7rem; font-size: 0.9375rem; outline: none; font-family: inherit; }
.bw-pm-input:focus { border-color: var(--pool-aqua); }
.bw-pm-input.small { font-size: 0.875rem; padding: 0.45rem 0.6rem; }
.bw-pm-reasons { display: flex; flex-direction: column; gap: 0.35rem; margin-bottom: 0.75rem; }
.bw-pm-reason { display: flex; align-items: center; gap: 0.5rem; font-size: 0.875rem; color: var(--bw-text-primary); cursor: pointer; padding: 0.3rem 0; }
.bw-pm-check { display: flex; align-items: center; gap: 0.5rem; font-size: 0.875rem; color: var(--bw-text-secondary); margin-top: 0.75rem; cursor: pointer; }
.bw-pm-actions { display: flex; gap: 0.6rem; margin-top: 1.1rem; }
.bw-pm-actions > * { flex: 1 1 0; }

/* Question editor */
.bw-pm-qedit { margin-top: 0.5rem; }
.bw-pm-q { border: 1px solid var(--bw-border-subtle); border-radius: 12px; padding: 0.75rem; margin-bottom: 0.75rem; background: var(--bw-panel); }
.bw-pm-q-top { display: flex; gap: 0.5rem; align-items: center; margin-bottom: 0.6rem; }
.bw-pm-q-top .bw-pm-input { flex: 1 1 0; }
.bw-pm-x { flex: 0 0 auto; width: 28px; height: 28px; border: 1px solid var(--bw-border-strong); background: transparent; color: var(--bw-text-muted); border-radius: 8px; cursor: pointer; font-size: 0.75rem; }
.bw-pm-x:hover { color: var(--bw-danger, #DC2626); }
.bw-pm-opts { display: flex; flex-direction: column; gap: 0.4rem; margin-bottom: 0.5rem; }
.bw-pm-opt { display: flex; gap: 0.4rem; align-items: center; }
.bw-pm-opt .bw-pm-input { flex: 1 1 0; }
.bw-pm-addopt { align-self: flex-start; border: none; background: transparent; color: var(--pool-deep); font-weight: 600; font-size: 0.8125rem; cursor: pointer; padding: 0.2rem 0; }
.bw-pm-points { display: flex; align-items: center; gap: 0.5rem; font-size: 0.8125rem; color: var(--bw-text-muted); font-weight: 600; }
.bw-pm-num { width: 64px; border: 1px solid var(--bw-border-strong); background: var(--bw-surface); color: var(--bw-text-primary); border-radius: 8px; padding: 0.35rem 0.5rem; font-size: 0.875rem; }

/* Structured builder (proposal 26 §4.3): rounds and slots, options as chips.
   Same hairline language as the question editor, one level of nesting deeper. */
.bw-pm-rounds { display: flex; flex-direction: column; margin-top: 0.5rem; }
.bw-pm-round { border: 1px solid var(--bw-border-subtle); border-radius: 12px; padding: 0.75rem; margin-bottom: 0.75rem; background: var(--bw-panel); }
.bw-pm-round-top { display: flex; gap: 0.5rem; align-items: center; margin-bottom: 0.6rem; flex-wrap: wrap; }
.bw-pm-round-top .bw-pm-input { flex: 1 1 8rem; min-width: 0; }
.bw-pm-slot { border-top: 1px solid var(--bw-border-subtle); padding-top: 0.55rem; margin-top: 0.55rem; }
.bw-pm-slot-top { display: flex; gap: 0.4rem; align-items: center; margin-bottom: 0.4rem; }
.bw-pm-slot-top .bw-pm-input { flex: 1 1 0; min-width: 0; }
.bw-pm-chips { display: flex; flex-wrap: wrap; gap: 0.35rem; align-items: center; }
.bw-pm-chip { display: inline-flex; align-items: center; gap: 0.15rem; border: 1px solid var(--bw-border-strong); border-radius: 999px; padding: 0.1rem 0.15rem 0.1rem 0.5rem; background: var(--bw-surface); }
.bw-pm-chipin { border: none; background: transparent; color: var(--bw-text-primary); font-size: 0.8125rem; padding: 0.15rem 0; min-width: 4rem; }
.bw-pm-chipin:focus { outline: 2px solid var(--bw-gold); outline-offset: 2px; border-radius: 4px; }
.bw-pm-chipx { border: none; background: transparent; color: var(--bw-text-muted); cursor: pointer; font-size: 0.65rem; line-height: 1; padding: 0.25rem 0.35rem; border-radius: 999px; }
.bw-pm-chipx:hover { color: var(--bw-gold-deep); }
.bw-pm-structacts { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-top: 0.5rem; }
.bw-pm-err { font-size: 0.8125rem; color: var(--bw-error); margin: 0.5rem 0 0; }
/* The cost line: coral, because it is a warning about real picks, never red. */
.bw-pm-cost { font-size: 0.75rem; color: var(--bw-gold-deep); margin: 0.35rem 0 0.25rem; line-height: 1.45; }
.bw-pm-cost.inline { display: inline-block; margin-left: 0.6rem; font-family: var(--bw-font-mono); font-size: 0.625rem; }

/* ============================================================================
   LOGGED-IN IA — Home dashboard, Pools hub, League hub
   ============================================================================ */
.bw-page-sub { color: var(--bw-text-muted); font-size: 0.8125rem; margin: -1rem 0 1.25rem; }

/* Home greeting */
.bw-home-greeting { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 1.25rem; }
.bw-home-emoji { font-size: 1.75rem; line-height: 1; flex: 0 0 auto; }
.bw-home-hi { font-family: var(--bw-font-display); font-size: 1.5rem; font-weight: 800; color: var(--bw-text-primary); margin: 0; }
.bw-home-sub { color: var(--bw-text-muted); font-size: 0.8125rem; margin: 0.1rem 0 0; }

/* Snapshot card (Home + League header) */
.bw-snap-card { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 12px; padding: 1.1rem 1.2rem; margin-bottom: 1.5rem; }
.bw-snap-top { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; margin-bottom: 0.85rem; }
.bw-snap-league { display: flex; align-items: center; gap: 0.5rem; min-width: 0; }
.bw-snap-league-name { font-family: var(--bw-font-display); font-size: 1.1875rem; font-weight: 800; color: var(--bw-text-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bw-snap-commish { flex: 0 0 auto; font-size: 0.5625rem; font-weight: 800; letter-spacing: 0.06em; color: var(--bw-gold); background: rgba(245,156,156,0.15); padding: 2px 6px; border-radius: 999px; }
.bw-snap-stats { display: flex; flex-wrap: wrap; gap: 0.5rem 1rem; margin-bottom: 0.5rem; }
.bw-snap-stat { font-size: 0.8125rem; color: var(--bw-text-secondary); }
.bw-snap-stat b { color: var(--bw-text-primary); font-weight: 800; }
.bw-snap-stat.unread b { color: var(--bw-gold-deep); }
.bw-snap-link { background: none; border: none; color: var(--pool-deep); font-weight: 700; font-size: 0.8125rem; cursor: pointer; padding: 0.25rem 0 0; }
.bw-snap-seats { font-size: 0.75rem; color: var(--bw-text-muted); margin: 0.4rem 0 0; }
.bw-snap-switch { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-top: 0.75rem; }


/* Needs-picks alert */
.bw-home-alert { background: color-mix(in srgb, var(--bw-gold) 9%, var(--bw-surface)); border: 1px solid color-mix(in srgb, var(--bw-gold) 35%, transparent); border-radius: 10px; padding: 0.9rem 1rem; margin-bottom: 1.5rem; }
.bw-home-alert-head { font-family: var(--bw-font-display); font-weight: 700; font-size: 0.9375rem; color: var(--bw-text-primary); margin-bottom: 0.6rem; display: flex; align-items: center; gap: 0.5rem; }
.bw-needs-count { font-family: var(--bw-font-mono); font-size: 0.66rem; font-weight: 700; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 999px; background: var(--bw-gold-deep); color: #fff; display: inline-flex; align-items: center; justify-content: center; }
/* Quiet season strip when no season is live (Home fallback). */
.bw-season-hero-quiet { padding: 0.8rem 1rem; }
.bw-season-hero-quiet .bw-season-hero-kicker { font-family: var(--bw-font-mono); font-size: 0.62rem; letter-spacing: 0.12em; text-transform: uppercase; color: var(--bw-text-muted); }
.bw-home-alert-chips { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.bw-needs-chip { display: inline-flex; align-items: center; gap: 0.4rem; border: 1px solid var(--bw-border-strong); background: var(--bw-surface); color: var(--bw-text-primary); font-weight: 600; font-size: 0.8125rem; padding: 0.4rem 0.7rem; border-radius: 999px; cursor: pointer; }
.bw-needs-chip:hover { border-color: var(--bw-gold); }
.bw-needs-prog { font-family: var(--bw-font-mono); font-size: 0.6875rem; color: var(--bw-text-muted); }

/* Section headers */
.bw-home-sec-head, .bw-hub-sec-head { display: flex; align-items: baseline; justify-content: space-between; gap: 1rem; margin: 0 0 0.75rem; }
.bw-home-sec-title { font-size: 1.0625rem; font-weight: 700; color: var(--bw-text-primary); margin: 0; }
.bw-home-sec-link { font-size: 0.8125rem; font-weight: 600; color: var(--pool-deep); text-decoration: none; flex: 0 0 auto; }

/* Home horizontal rail of pools */
.bw-hub-rail { display: flex; gap: 0.75rem; overflow-x: auto; padding-bottom: 0.5rem; margin-bottom: 1.5rem; scrollbar-width: none; }
.bw-hub-rail::-webkit-scrollbar { display: none; }
.bw-hub-rail .bw-pool-card { flex: 0 0 230px; }

/* Quick actions */
.bw-home-actions { display: flex; gap: 0.6rem; flex-wrap: wrap; margin-top: 0.5rem; }

/* ── DESKTOP HOME pass (2026-07): two-column dashboard on wide screens. The
   greeting spans the top; the league snapshot + quick actions move into a
   right rail beside "Your pools", which wraps into a grid instead of a scroll
   rail. Mobile keeps the single-column stack (DOM order is the mobile order).
   REVERT: delete this block (+ the .bw-home wrapper in renderHome()), or
   `git revert` the commit. */
@media (min-width: 1000px) {
    .bw-home {
        display: grid;
        grid-template-columns: minmax(0, 1fr) 300px;
        grid-template-areas:
            "greet greet"
            "main  snap"
            "main  acts";
        column-gap: 1.5rem;
        row-gap: 1rem;
        align-items: start;
    }
    .bw-home > .bw-home-greeting { grid-area: greet; }
    .bw-home > .bw-snap-card     { grid-area: snap; margin: 0; }
    /* In the narrow rail, let the league name show in full and wrap the invite
       chip to its own line instead of truncating the name to "Ba...". */
    .bw-home > .bw-snap-card .bw-snap-top { flex-wrap: wrap; gap: 0.5rem; }
    .bw-home > .bw-snap-card .bw-snap-league { flex: 1 1 100%; min-width: 0; }
    .bw-home > .bw-snap-card .bw-snap-league-name { white-space: normal; }
    .bw-home > .bw-home-main     { grid-area: main; min-width: 0; }
    .bw-home > .bw-home-actions  { grid-area: acts; flex-direction: column; margin: 0; }
    .bw-home > .bw-home-actions .bw-home-action { width: 100%; }
    /* "Your pools" uses the column width: a wrapping grid, not a scroll rail. */
    .bw-home-main .bw-hub-rail {
        display: grid;
        grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
        overflow: visible;
        gap: 0.75rem;
    }
    .bw-home-main .bw-hub-rail .bw-pool-card { flex: initial; }
}
/* ── end DESKTOP HOME pass ──────────────────────────────────────────────────*/

/* ── TABLET pass (2026-07): 769-999px (iPad portrait and friends). The sidebar
   is visible but the two-column dashboard hasn't kicked in, so use the column
   well: tighter gutters, wrapping card grids instead of horizontal scrollers,
   and full-width quick actions in a row. ──────────────────────────────────── */
@media (min-width: 769px) and (max-width: 999px) {
    .bw-content { margin-left: 1.5rem; margin-right: 1.5rem; max-width: none; }
    .bw-hub-rail {
        display: grid;
        grid-template-columns: repeat(auto-fill, minmax(210px, 1fr));
        overflow: visible;
        gap: 0.75rem;
    }
    .bw-hub-rail .bw-pool-card { flex: initial; }
    .bw-event-rail { flex-wrap: wrap; overflow: visible; }
    .bw-home-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 0.6rem; }
    .bw-home-actions .bw-home-action { width: 100%; }
    .bw-season-grid { grid-template-columns: 1fr 1fr; }
}
/* ── end TABLET pass ────────────────────────────────────────────────────────*/
.bw-home-action { flex: 1 1 0; min-width: 110px; display: flex; align-items: center; justify-content: center; gap: 0.4rem; border: 1px solid var(--bw-border-subtle); background: var(--bw-surface); color: var(--bw-text-primary); font-weight: 700; font-size: 0.8125rem; padding: 0.7rem 0.5rem; border-radius: 12px; cursor: pointer; }
.bw-home-action:hover { border-color: var(--pool-aqua); }
.bw-home-action span { font-size: 1rem; }
.bw-home-action-badge { font-style: normal; font-size: 0.625rem; font-weight: 800; color: #fff; background: var(--bw-gold-deep); border-radius: 999px; padding: 1px 6px; }

/* Pool card status flag */
.bw-pool-flag { flex: 0 0 auto; font-size: 0.625rem; font-weight: 800; letter-spacing: 0.02em; padding: 3px 8px; border-radius: 999px; }
.bw-pool-flag.topick { color: var(--bw-gold-deep); background: rgba(245,156,156,0.18); }
.bw-pool-flag.live { color: #DC2626; background: rgba(220,38,38,0.12); }

/* Pools hub sections */
.bw-hub-sec { margin-bottom: 1.75rem; }
.bw-hub-sec-title { font-size: 1.0625rem; font-weight: 700; color: var(--bw-text-primary); margin-bottom: 0.75rem; }
.bw-hub-sec-count { font-size: 0.75rem; font-weight: 700; color: var(--bw-text-muted); background: var(--bw-panel); border-radius: 999px; padding: 1px 8px; margin-left: 0.25rem; }

/* Browse-the-marketplace entry */
.bw-pools-browse { width: 100%; box-sizing: border-box; display: flex; align-items: center; gap: 0.9rem; text-align: left; border: 1px dashed var(--bw-border-strong); background: var(--bw-panel); border-radius: 12px; padding: 1.1rem 1.2rem; cursor: pointer; transition: border-color 0.15s; }
.bw-pools-browse:hover { border-color: var(--pool-aqua); }
.bw-pools-browse-emoji { font-size: 1.75rem; flex: 0 0 auto; }
.bw-pools-browse-text { flex: 1 1 0; min-width: 0; }
.bw-pools-browse-title { display: block; font-weight: 700; font-size: 0.9375rem; color: var(--bw-text-primary); }
.bw-pools-browse-sub { display: block; font-size: 0.75rem; color: var(--bw-text-muted); margin-top: 2px; }
.bw-pools-browse-arrow { flex: 0 0 auto; font-size: 1.25rem; color: var(--pool-deep); }

/* ============================================================================
   THE RECEIPTS — shareable thermal-receipt record of your calls
   ============================================================================ */
.bw-receipt-wrap { display: flex; flex-direction: column; align-items: center; gap: 1rem; margin: 0.25rem 0 0.5rem; }

.bw-receipt {
    width: 330px; max-width: 100%;
    background: #fbf9f2; color: #1b1b1b;
    font-family: var(--bw-font-mono); font-size: 12px; line-height: 1.5;
    padding: 26px 22px 20px;
    position: relative;
    box-shadow: 0 14px 36px rgba(0,0,0,0.28);
    /* zigzag teeth top + bottom (thermal-receipt edge) */
    --tooth: 9px;
    -webkit-mask:
        conic-gradient(from -45deg at bottom, #0000 25%, #000 0) 0 100% / var(--tooth) var(--tooth) repeat-x,
        conic-gradient(from 135deg at top, #0000 25%, #000 0) 0 0 / var(--tooth) var(--tooth) repeat-x,
        linear-gradient(#000 0 0) 0 50% / 100% calc(100% - 2*var(--tooth)) no-repeat;
            mask:
        conic-gradient(from -45deg at bottom, #0000 25%, #000 0) 0 100% / var(--tooth) var(--tooth) repeat-x,
        conic-gradient(from 135deg at top, #0000 25%, #000 0) 0 0 / var(--tooth) var(--tooth) repeat-x,
        linear-gradient(#000 0 0) 0 50% / 100% calc(100% - 2*var(--tooth)) no-repeat;
}

.bw-receipt-head { text-align: center; }
.bw-receipt-brand { font-family: var(--bw-font-display); font-weight: 800; font-size: 20px; letter-spacing: 2px; }
.bw-receipt-tag { font-size: 10px; letter-spacing: 3px; margin-top: 2px; }
.bw-receipt-meta { text-align: center; font-size: 10px; color: #555; margin-top: 6px; }
.bw-receipt-who { text-align: center; margin-top: 10px; font-size: 13px; font-weight: 700; }
.bw-receipt-who .em { font-size: 18px; vertical-align: -2px; }

.bw-receipt-rule { border: none; border-top: 1px dashed #9a9a8e; margin: 12px 0; }
.bw-receipt-cols { display: flex; justify-content: space-between; font-size: 10px; color: #666; letter-spacing: 1px; }

.bw-receipt-line { display: flex; align-items: baseline; gap: 6px; margin: 5px 0; }
.bw-receipt-line .nm { display: flex; align-items: center; gap: 6px; min-width: 0; }
.bw-receipt-line .nm .ic { font-size: 13px; }
.bw-receipt-line .nm .tx { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bw-receipt-line .dots { flex: 1; border-bottom: 1px dotted #b9b8aa; transform: translateY(-3px); min-width: 12px; }
.bw-receipt-line .vl { flex: 0 0 auto; font-weight: 700; }
.bw-receipt-line .vl.win { color: #1a7f37; }
.bw-receipt-line .vl.loss { color: #b42318; }

.bw-receipt-note { font-size: 10px; color: #6c6c60; margin: -1px 0 7px; padding-left: 2px; font-style: italic; }
.bw-receipt-total { display: flex; justify-content: space-between; font-weight: 800; font-size: 15px; margin: 4px 0; }
.bw-receipt-sub { display: flex; justify-content: space-between; font-size: 11px; margin: 3px 0; }
.bw-receipt-stamp { text-align: center; border: 2px solid #b42318; color: #b42318; font-weight: 800; letter-spacing: 2px; font-size: 13px; padding: 4px 0; margin: 12px auto; width: 70%; transform: rotate(-4deg); border-radius: 4px; }
.bw-receipt-foot { text-align: center; font-size: 10px; color: #555; margin-top: 10px; }
.bw-receipt-slogan { text-align: center; font-weight: 700; font-size: 11px; letter-spacing: 1px; margin-top: 8px; }
.bw-receipt-barcode { height: 42px; margin: 12px 0 4px;
    background-image: repeating-linear-gradient(90deg, #1b1b1b 0 2px, transparent 2px 4px, #1b1b1b 4px 5px, transparent 5px 9px, #1b1b1b 9px 11px, transparent 11px 12px, #1b1b1b 12px 15px, transparent 15px 17px); }
.bw-receipt-no { text-align: center; font-size: 10px; letter-spacing: 2px; color: #333; }

.bw-receipt-share { display: inline-flex; align-items: center; gap: 0.4rem; border: none; background: var(--bw-gold); color: var(--bw-on-gold); font-weight: 800; font-size: 0.875rem; padding: 0.65rem 1.25rem; border-radius: 999px; cursor: pointer; }
.bw-receipt-share:active { transform: scale(0.98); }

/* Dedicated /receipt page */
.bw-receipt-pagehead { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 1.25rem; }
.bw-receipt-pagehead > span { font-family: var(--bw-font-display); font-weight: 800; font-size: 1.25rem; flex: 1; }

/* League-hub teaser link styling reuses .bw-home-sec-head */

/* League — members tab roster */
.bw-member-list { display: flex; flex-direction: column; gap: 0.4rem; }
.bw-member-row {
    display: flex; align-items: center; gap: 0.75rem; width: 100%;
    padding: 0.7rem 0.85rem; text-align: left; cursor: pointer;
    background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 12px;
    transition: border-color 0.15s;
}
.bw-member-row:hover { border-color: var(--bw-gold); }
.bw-member-emoji { font-size: 1.5rem; flex: 0 0 auto; }
.bw-member-main { flex: 1 1 0; min-width: 0; }
.bw-member-name { font-weight: 700; font-size: 0.9375rem; color: var(--bw-text-primary); display: inline-flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; }
.bw-member-pts { flex: 0 0 auto; font-family: var(--bw-font-display); font-weight: 800; font-size: 1.125rem; color: var(--bw-text-primary); }
.bw-member-pts small { font-size: 0.625rem; font-weight: 600; color: var(--bw-text-muted); margin-left: 2px; }

/* Pool grading (commish/admin sets the winning answers) */
.bw-grade-banner { display: flex; gap: 0.7rem; align-items: flex-start; background: color-mix(in srgb, var(--pool-aqua) 12%, var(--bw-surface)); border: 1px solid color-mix(in srgb, var(--pool-aqua) 35%, transparent); border-radius: 12px; padding: 0.8rem 0.9rem; margin-bottom: 1rem; font-size: 0.8125rem; color: var(--bw-text-secondary); }
.bw-grade-banner-icon { font-size: 1.25rem; flex: 0 0 auto; }
.bw-grade-banner b { color: var(--bw-text-primary); }

.bw-prop-q-pts { flex: 0 0 auto; font-size: 0.6875rem; font-weight: 700; color: var(--bw-text-muted); background: var(--bw-panel); border-radius: 999px; padding: 1px 8px; }

.bw-grade-opts { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-top: 0.65rem; padding-top: 0.65rem; border-top: 1px dashed var(--bw-border-subtle); }
.bw-grade-opt { border: 1px solid var(--bw-border-strong); background: var(--bw-surface); color: var(--bw-text-primary); font-weight: 600; font-size: 0.8125rem; padding: 0.4rem 0.7rem; border-radius: 999px; cursor: pointer; transition: filter 0.12s, transform 0.06s; }
.bw-grade-opt:hover { filter: brightness(1.04); border-color: var(--bw-success, #10B981); }
.bw-grade-opt:active { transform: scale(0.97); }
.bw-grade-opt.is-correct { background: var(--bw-success, #10B981); border-color: var(--bw-success, #10B981); color: #fff; }
.bw-grade-opt.is-correct::before { content: '✓ '; }
.bw-grade-clear { border: none; background: transparent; color: var(--bw-text-muted); font-size: 0.75rem; font-weight: 600; cursor: pointer; text-decoration: underline; padding: 0.4rem 0.5rem; }

/* Pool editor category chips */
.bw-pm-cats { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-bottom: 0.25rem; }
.bw-pm-cat { border: 1px solid var(--bw-border-strong); background: var(--bw-surface); color: var(--bw-text-secondary); font-weight: 600; font-size: 0.8125rem; padding: 0.4rem 0.75rem; border-radius: 999px; cursor: pointer; }
.bw-pm-cat.active { background: var(--pool-deep); border-color: var(--pool-deep); color: #fff; }

/* Admin grading blocks */
.bw-adm-pool { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 10px; padding: 1rem 1.1rem; margin-bottom: 1rem; }
.bw-adm-pool-head { display: flex; align-items: center; gap: 0.7rem; }
.bw-adm-pool-emoji { font-size: 1.75rem; flex: 0 0 auto; }
.bw-adm-pool-id { flex: 1; min-width: 0; }
.bw-adm-pool-name { font-family: var(--bw-font-display); font-weight: 800; font-size: 1.0625rem; color: var(--bw-text-primary); }
.bw-adm-pool-meta { font-size: 0.75rem; color: var(--bw-text-muted); display: flex; align-items: center; gap: 0.35rem; flex-wrap: wrap; margin-top: 2px; }

/* Locked-picks banner */
.bw-lock-banner { display: flex; align-items: center; gap: 0.5rem; background: var(--bw-panel); border: 1px solid var(--bw-border-strong); border-radius: 12px; padding: 0.7rem 0.9rem; margin-bottom: 1rem; font-size: 0.8125rem; color: var(--bw-text-secondary); }
.bw-lock-banner b { color: var(--bw-text-primary); }

/* Structured play (survivor / bracket) — rounds of tap-to-pick slots. */
.bw-struct-round { margin-bottom: 1rem; }
.bw-struct-round-head { display: flex; align-items: center; gap: 0.5rem; font-family: var(--bw-font-display); font-size: 0.95rem; margin: 0 0 0.5rem; color: var(--bw-text-primary); }
.bw-struct-pts { font-family: var(--bw-font-mono); font-size: 0.65rem; letter-spacing: 0.06em; text-transform: uppercase; color: var(--bw-text-muted); background: var(--bw-panel); border-radius: 4px; padding: 0.1rem 0.4rem; }
.bw-struct-slot { border: 1px solid var(--bw-border-subtle); border-radius: 10px; padding: 0.6rem 0.7rem; margin-bottom: 0.5rem; }
.bw-struct-slot-label { font-size: 0.75rem; color: var(--bw-text-muted); margin-bottom: 0.4rem; }
.bw-struct-opts { display: flex; flex-wrap: wrap; gap: 0.4rem; }
.bw-struct-opt { flex: 1 1 auto; min-width: 90px; text-align: center; padding: 0.55rem 0.6rem; border: 1px solid var(--bw-border-strong); border-radius: 8px; background: var(--bw-bg); color: var(--bw-text-primary); font-size: 0.8125rem; font-weight: 600; cursor: pointer; transition: background .12s, border-color .12s; }
.bw-struct-opt:hover:not(:disabled) { border-color: var(--bw-gold); }
.bw-struct-opt.picked { background: rgba(245,156,156,0.18); border-color: var(--bw-gold); color: var(--bw-text-primary); }
.bw-struct-opt.win { border-color: #16a34a; background: rgba(22,163,74,0.12); }
.bw-struct-opt.miss { border-color: #DC2626; background: rgba(220,38,38,0.10); }
.bw-struct-opt:disabled { opacity: 0.42; cursor: not-allowed; }
.bw-struct-badge { font-size: 0.75rem; }
.bw-struct-badge.win { color: #16a34a; }
.bw-struct-badge.miss { color: #DC2626; }
.bw-struct-grade { display: flex; flex-wrap: wrap; align-items: center; gap: 0.35rem; margin-top: 0.5rem; padding-top: 0.5rem; border-top: 1px dashed var(--bw-border-subtle); }
.bw-struct-grade > span { font-size: 0.7rem; color: var(--bw-text-muted); text-transform: uppercase; letter-spacing: 0.05em; }
.bw-struct-gradebtn { font-size: 0.7rem; padding: 0.25rem 0.5rem; border: 1px solid var(--bw-border-subtle); border-radius: 6px; background: transparent; color: var(--bw-text-secondary); cursor: pointer; }
.bw-struct-gradebtn.active { background: var(--bw-success); border-color: var(--bw-success); color: #fff; }
.bw-struct-gradebtn.clear { color: var(--bw-text-muted); }

/* Trade analyzer. */
.bw-trade-teams { display: flex; align-items: flex-end; gap: 0.6rem; margin-bottom: 0.9rem; }
.bw-trade-teams label { flex: 1; display: block; }
.bw-trade-teams select { width: 100%; }
.bw-trade-swap { flex: 0 0 auto; padding-bottom: 0.55rem; color: var(--bw-text-muted); font-size: 1.1rem; }
.bw-trade-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.7rem; }
.bw-trade-rosterhd { font-family: var(--bw-font-mono); font-size: 0.65rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--bw-text-muted); margin-bottom: 0.4rem; }
.bw-trade-roster { display: flex; flex-direction: column; gap: 0.3rem; }
.bw-trade-pl { display: flex; align-items: center; justify-content: space-between; gap: 0.4rem; text-align: left; padding: 0.4rem 0.5rem; border: 1px solid var(--bw-border-subtle); border-radius: 8px; background: var(--bw-bg); cursor: pointer; font-size: 0.8rem; color: var(--bw-text-primary); }
.bw-trade-pl:hover { border-color: var(--bw-gold); }
.bw-trade-pl.on { background: rgba(245,156,156,0.18); border-color: var(--bw-gold); }
.bw-trade-pl-main { display: flex; align-items: center; gap: 0.35rem; min-width: 0; }
.bw-trade-pl-main > span:last-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bw-trade-pl-pos { font-family: var(--bw-font-mono); font-size: 0.6rem; font-weight: 700; padding: 0.05rem 0.3rem; border-radius: 4px; background: var(--bw-panel); color: var(--bw-text-secondary); flex: 0 0 auto; }
.bw-trade-pl-pos.rb { color: #16a34a; } .bw-trade-pl-pos.wr { color: #2563eb; } .bw-trade-pl-pos.qb { color: #dc2626; } .bw-trade-pl-pos.te { color: #d97706; }
.bw-trade-pl-meta { font-family: var(--bw-font-mono); font-size: 0.65rem; color: var(--bw-text-muted); flex: 0 0 auto; }
.bw-trade-factor { padding: 0.6rem 0; border-top: 1px solid var(--bw-border-subtle); }
.bw-trade-factor:first-child { border-top: none; }
.bw-trade-factor-hd { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; }
.bw-trade-factor-name { font-weight: 600; font-size: 0.85rem; }
.bw-trade-factor-desc { font-size: 0.72rem; color: var(--bw-text-muted); margin: 0.25rem 0 0; line-height: 1.45; }
.bw-trade-seg { display: inline-flex; border: 1px solid var(--bw-border-strong); border-radius: 7px; overflow: hidden; flex: 0 0 auto; }
.bw-trade-seg-btn { font-size: 0.68rem; padding: 0.2rem 0.45rem; background: transparent; color: var(--bw-text-secondary); border: none; border-left: 1px solid var(--bw-border-subtle); cursor: pointer; text-transform: capitalize; }
.bw-trade-seg-btn:first-child { border-left: none; }
.bw-trade-seg-btn.on { background: var(--bw-gold); color: #1B2D4F; font-weight: 700; }
.bw-trade-willing { display: flex; align-items: center; gap: 0.5rem; margin-top: 0.5rem; font-size: 0.68rem; color: var(--bw-text-muted); }
.bw-trade-willing input { flex: 1; }
.bw-trade-verdict-top { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; margin-bottom: 0.75rem; }
.bw-trade-vbadge { font-family: var(--bw-font-display); font-weight: 800; font-size: 1rem; padding: 0.3rem 0.7rem; border-radius: 8px; }
.bw-trade-vbadge.you { background: rgba(22,163,74,0.15); color: #16a34a; }
.bw-trade-vbadge.them { background: rgba(220,38,38,0.12); color: #dc2626; }
.bw-trade-vbadge.even { background: var(--bw-panel); color: var(--bw-text-secondary); }
.bw-trade-acc { text-align: right; line-height: 1.1; }
.bw-trade-acc-num { display: block; font-family: var(--bw-font-display); font-weight: 800; font-size: 1.6rem; }
.bw-trade-acc.good .bw-trade-acc-num { color: #16a34a; } .bw-trade-acc.mid .bw-trade-acc-num { color: #d97706; } .bw-trade-acc.bad .bw-trade-acc-num { color: #dc2626; }
.bw-trade-acc-lbl { font-size: 0.65rem; color: var(--bw-text-muted); text-transform: uppercase; letter-spacing: 0.04em; }
.bw-trade-balbar { display: flex; height: 26px; border-radius: 7px; overflow: hidden; font-size: 0.68rem; font-weight: 700; margin-bottom: 0.7rem; }
.bw-trade-balbar-give { background: rgba(220,38,38,0.25); color: var(--bw-text-primary); display: flex; align-items: center; padding: 0 0.5rem; white-space: nowrap; }
.bw-trade-balbar-get { background: rgba(22,163,74,0.25); color: var(--bw-text-primary); display: flex; align-items: center; justify-content: flex-end; padding: 0 0.5rem; white-space: nowrap; }
.bw-trade-rec { font-size: 0.85rem; line-height: 1.5; margin: 0 0 0.7rem; color: var(--bw-text-primary); }
.bw-trade-plsum { display: flex; flex-wrap: wrap; align-items: center; gap: 0.35rem; margin-bottom: 0.4rem; }
.bw-trade-plsum-lbl { font-size: 0.65rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); flex: 0 0 62px; }
.bw-trade-plsum-chip { font-size: 0.72rem; background: var(--bw-panel); border-radius: 5px; padding: 0.12rem 0.4rem; }
.bw-trade-plsum-chip b { font-family: var(--bw-font-mono); }
.bw-trade-flags { margin: 0.6rem 0; }
.bw-trade-flag { font-size: 0.75rem; color: #d97706; background: rgba(217,119,6,0.1); border-radius: 6px; padding: 0.35rem 0.5rem; margin-bottom: 0.3rem; }
.bw-trade-fx-hd { font-family: var(--bw-font-mono); font-size: 0.62rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--bw-text-muted); margin: 0.7rem 0 0.4rem; }
.bw-trade-fx { display: flex; gap: 0.5rem; align-items: baseline; padding: 0.3rem 0; font-size: 0.8rem; }
.bw-trade-fx-delta { font-family: var(--bw-font-mono); font-weight: 700; flex: 0 0 42px; text-align: right; }
.bw-trade-fx-delta.pos { color: var(--bw-success); } .bw-trade-fx-delta.neg { color: var(--bw-gold-deep); }
.bw-trade-fx-txt { color: var(--bw-text-secondary); line-height: 1.4; }
.bw-trade-src { font-family: var(--bw-font-mono); font-size: 0.6rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; padding: 0.15rem 0.45rem; border-radius: 5px; }
.bw-trade-src.live { color: #16a34a; background: rgba(22,163,74,0.14); }
.bw-trade-src.draft { color: var(--bw-text-muted); background: var(--bw-panel); }
@media (max-width: 560px) { .bw-trade-grid { grid-template-columns: 1fr; } }

/* Admin report moderation */
.bw-report-reasons { display: flex; flex-wrap: wrap; gap: 0.35rem; margin: 0.5rem 0 0.6rem; }
.bw-report-reason { font-size: 0.6875rem; font-weight: 700; color: var(--bw-danger, #DC2626); background: color-mix(in srgb, var(--bw-danger, #DC2626) 10%, transparent); border-radius: 999px; padding: 2px 8px; }
.bw-report-list { display: flex; flex-direction: column; gap: 0.4rem; }
.bw-report-row { display: flex; gap: 0.6rem; align-items: flex-start; padding: 0.5rem 0.6rem; background: var(--bw-panel); border-radius: 10px; }
.bw-report-tag { flex: 0 0 auto; font-size: 0.625rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.03em; color: var(--bw-text-muted); background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 999px; padding: 2px 7px; margin-top: 1px; }
.bw-report-body { flex: 1 1 0; min-width: 0; }
.bw-report-detail { font-size: 0.8125rem; color: var(--bw-text-primary); }
.bw-report-who { font-size: 0.6875rem; color: var(--bw-text-muted); margin-top: 1px; }
.bw-report-actions { display: flex; gap: 0.5rem; margin-top: 0.75rem; }

/* Receipt action buttons (share + save) */
.bw-receipt-btns { display: flex; gap: 0.5rem; flex-wrap: wrap; justify-content: center; }
.bw-receipt-share.alt { background: transparent; color: var(--bw-text-primary); border: 1px solid var(--bw-border-strong); }

/* ============================================================================
   ADMIN — Offseason Commish dashboard + review queue
   ============================================================================ */
.bw-adm-stat-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.5rem; }
.bw-adm-stat { display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 0.8rem 0.4rem; background: var(--bw-panel); border: 1px solid var(--bw-border-subtle); border-radius: 12px; }
.bw-adm-stat .v { font-family: var(--bw-font-display); font-weight: 800; font-size: 1.375rem; color: var(--bw-text-primary); line-height: 1; }
.bw-adm-stat .l { font-size: 0.625rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--bw-text-muted); }
/* A shelf nothing has landed on yet says "none yet" in the number's slot: the
   same tile, the honest word, at label weight so it never reads as a count. */
.bw-adm-stat .v.none { font-family: var(--bw-font-mono); font-weight: 600; font-size: 0.8125rem; color: var(--bw-text-muted); text-transform: uppercase; letter-spacing: 0.04em; line-height: 1.7; }
.bw-adm-stat.accent { border-color: color-mix(in srgb, var(--bw-gold) 45%, transparent); background: color-mix(in srgb, var(--bw-gold) 10%, var(--bw-surface)); }
.bw-adm-stat.accent .v { color: var(--bw-gold-deep, #B8860B); }
@media (max-width: 560px) { .bw-adm-stat-grid { grid-template-columns: repeat(2, 1fr); } }

.bw-adm-log-row { display: flex; align-items: baseline; justify-content: space-between; gap: 1rem; padding: 0.45rem 0.25rem; border-bottom: 1px solid var(--bw-border-subtle); font-size: 0.8125rem; color: var(--bw-text-secondary); }
.bw-adm-log-row:last-child { border-bottom: none; }
.bw-adm-log-row b { color: var(--bw-text-primary); }
.bw-adm-log-meta { flex: 0 0 auto; font-size: 0.6875rem; color: var(--bw-text-muted); }

/* Review queue previews */
.bw-review-desc { font-size: 0.8125rem; color: var(--bw-text-secondary); margin: 0.5rem 0; }
.bw-review-qs { display: flex; flex-direction: column; gap: 0.5rem; margin-top: 0.4rem; }
.bw-review-q { background: var(--bw-panel); border-radius: 10px; padding: 0.55rem 0.7rem; }
.bw-review-q-text { font-size: 0.875rem; font-weight: 600; color: var(--bw-text-primary); }
.bw-review-q-opts { display: flex; flex-wrap: wrap; gap: 0.35rem; margin-top: 0.4rem; }
.bw-review-opt { font-size: 0.75rem; color: var(--bw-text-secondary); background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 999px; padding: 2px 8px; }

/* ──────────────────────────────────────────────────────────────
   Prediction-market vibe (Kalshi / Polymarket-style live odds)
   Reframes prop picks as a live crowd market: big mono % "chance",
   green/red momentum, animated probability bars, and volume.
   ────────────────────────────────────────────────────────────── */
.bw-mkt-head { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 12px; padding: 0.9rem 1rem; margin-bottom: 1rem; }
.bw-mkt-head-top { display: flex; align-items: center; justify-content: space-between; margin-bottom: 0.6rem; }
.bw-mkt-live { font-family: var(--bw-font-mono); font-size: 0.6875rem; font-weight: 600; letter-spacing: 1px; color: var(--pool-deep); display: inline-flex; align-items: center; gap: 6px; }
.bw-mkt-live-dot { width: 7px; height: 7px; border-radius: 50%; background: #EF4444; animation: mktPulse 1.8s infinite; }
@keyframes mktPulse { 0% { box-shadow: 0 0 0 0 rgba(239,68,68,.5); } 70% { box-shadow: 0 0 0 7px rgba(239,68,68,0); } 100% { box-shadow: 0 0 0 0 rgba(239,68,68,0); } }
.bw-mkt-head-prog { font-family: var(--bw-font-mono); font-size: 0.75rem; color: var(--bw-text-secondary); }
.bw-mkt-head-sub { font-size: 0.75rem; color: var(--bw-text-muted); margin-top: 0.5rem; }

.bw-mkt-q { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 12px; padding: 1rem; margin-bottom: 0.85rem; }
.bw-mkt-q-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 0.6rem; }
.bw-mkt-q-text { font-size: 0.9375rem; font-weight: 600; color: var(--bw-text-primary); line-height: 1.35; }
.bw-mkt-q-pts { flex: none; font-family: var(--bw-font-mono); font-size: 0.6875rem; font-weight: 600; color: var(--pool-deep); background: var(--pool-foam); padding: 3px 8px; border-radius: 999px; white-space: nowrap; }
.bw-mkt-q-meta { margin: 0.4rem 0 0.75rem; }
.bw-mkt-vol { font-family: var(--bw-font-mono); font-size: 0.6875rem; color: var(--bw-text-muted); }
.bw-mkt-vol.bw-mkt-new { color: var(--pool-deep); }
.bw-mkt-options { display: flex; flex-direction: column; gap: 0.5rem; }
.bw-mkt-opt { position: relative; overflow: hidden; width: 100%; text-align: left; border: 1px solid var(--bw-border-strong); background: var(--bw-bg); border-radius: 12px; padding: 0; cursor: pointer; transition: border-color .15s, transform .05s; }
.bw-mkt-opt[disabled] { cursor: default; }
.bw-mkt-opt:not([disabled]):hover { border-color: var(--pool-deep); }
.bw-mkt-opt:not([disabled]):active { transform: scale(.995); }
.bw-mkt-opt-fill { position: absolute; top: 0; bottom: 0; left: 0; background: rgba(52,188,217,.34); transition: width .7s cubic-bezier(.4,0,.2,1); z-index: 0; }
/* Global ("everyone") share as a faint fill behind the solid league bar — the
   part that extends past your league reads as a lighter shade. */
.bw-mkt-opt-gfill { position: absolute; top: 0; bottom: 0; left: 0; background: rgba(52,188,217,.15); transition: width .7s cubic-bezier(.4,0,.2,1); z-index: 0; pointer-events: none; }
.bw-mkt-opt-body { position: relative; z-index: 1; display: flex; align-items: center; justify-content: space-between; gap: 0.6rem; padding: 0.75rem 0.9rem; }
.bw-mkt-opt-label { font-size: 0.875rem; color: var(--bw-text-primary); font-weight: 500; }
.bw-mkt-opt-right { display: flex; align-items: center; gap: 0.5rem; }
.bw-mkt-opt-pct { font-family: var(--bw-font-mono); font-size: 1rem; font-weight: 600; color: var(--bw-text-primary); font-variant-numeric: tabular-nums; min-width: 44px; text-align: right; }
.bw-mkt-opt.picked { border-color: var(--pool-deep); box-shadow: 0 0 0 1px var(--pool-deep) inset; }
.bw-mkt-opt.picked .bw-mkt-opt-fill { background: rgba(52,188,217,.46); }
.bw-mkt-opt.correct { border-color: var(--bw-success); }
.bw-mkt-opt.correct .bw-mkt-opt-fill { background: rgba(5,150,105,.3); }
.bw-mkt-opt.wrong { border-color: var(--bw-error); opacity: .82; }
.bw-mkt-you { font-family: var(--bw-font-mono); font-size: 0.5625rem; font-weight: 700; letter-spacing: .5px; color: #fff; background: var(--pool-deep); padding: 2px 6px; border-radius: 999px; margin-right: 7px; vertical-align: middle; }
.bw-mkt-move { font-family: var(--bw-font-mono); font-size: 0.6875rem; font-weight: 600; padding: 1px 5px; border-radius: 6px; font-variant-numeric: tabular-nums; }
.bw-mkt-move.up { color: #0a7f3f; background: rgba(5,150,105,.14); }
.bw-mkt-move.down { color: #b42318; background: rgba(220,38,38,.12); }
/* Global ("everyone") %: a small muted number beside the big league %. */
.bw-mkt-opt-global { display: inline-flex; align-items: center; gap: 3px; font-family: var(--bw-font-mono); font-size: 0.6875rem; font-weight: 500; color: var(--bw-text-muted); font-variant-numeric: tabular-nums; white-space: nowrap; }
.bw-mkt-gmove { font-size: 0.5625rem; font-weight: 700; }
.bw-mkt-gmove.up { color: #0a7f3f; }
.bw-mkt-gmove.down { color: #b42318; }
.bw-mkt-opt.bump .bw-mkt-opt-pct { animation: mktBump .5s ease; }
@keyframes mktBump { 0% { transform: scale(1); } 30% { transform: scale(1.18); color: var(--pool-deep); } 100% { transform: scale(1); } }
/* Thin league sample (<3 picks on the question): the "your league" bar/% is
   just 0/100 noise, so hide it and lead with the crowd market — the global
   fill becomes the visible bar and the 🌐 % becomes the primary number. The
   user's own pick still reads via the .picked border. */
.bw-mkt-q.league-thin .bw-mkt-opt-fill { display: none; }
.bw-mkt-q.league-thin .bw-mkt-opt-gfill { background: rgba(52,188,217,.26); }
.bw-mkt-q.league-thin .bw-mkt-opt-pct { display: none; }
.bw-mkt-q.league-thin .bw-mkt-opt-global { font-size: 1rem; font-weight: 600; color: var(--bw-text-primary); min-width: 44px; justify-content: flex-end; }
/* Opening line (no calls in yet, or the blend is still mostly the prior): the
   % is real arithmetic but it is not a crowd, so it must not wear the crowd's
   weight. .league-thin promotes it to the primary number on a fresh question,
   which is exactly when it is least earned; this walks that back. */
.bw-mkt-q.opening-line .bw-mkt-opt-global,
.bw-mkt-q.league-thin.opening-line .bw-mkt-opt-global { color: var(--bw-text-muted); font-weight: 500; }
.bw-mkt-q.opening-line .bw-mkt-opt-gfill { opacity: .5; }
.bw-mkt-vol-inline { font-family: var(--bw-font-mono); font-size: 0.625rem; color: var(--bw-text-muted); font-weight: 400; margin-left: 4px; }
.bw-mk-bar-row.lead .bw-mk-bar-pct { color: var(--pool-deep); font-weight: 700; }
.bw-mkt-card-odds { display: flex; align-items: center; gap: 0.45rem; margin-top: 2px; }
.bw-mkt-card-pct { font-family: var(--bw-font-mono); font-size: 1.0625rem; font-weight: 700; color: var(--bw-text-primary); font-variant-numeric: tabular-nums; }
.bw-mkt-card-fav { font-size: 0.75rem; color: var(--bw-text-secondary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bw-mk-tag.closed { color: var(--bw-text-secondary); border-color: var(--bw-border-strong); }
.bw-mk-tag.soon { color: var(--bw-gold-deep, #E07676); border-color: color-mix(in srgb, var(--bw-gold-deep, #E07676) 35%, transparent); }
.bw-mk-sheet-hint.closed { color: var(--bw-text-secondary); font-weight: 600; background: var(--bw-panel); border-radius: 10px; }

/* ──────────────────────────────────────────────────────────────
   Market-board marketplace (Kalshi/Polymarket-style browse)
   ────────────────────────────────────────────────────────────── */
.bw-mk-sec-title { font-family: var(--bw-font-display); font-weight: 700; font-size: 1rem; color: var(--bw-text-primary); margin: 1.4rem 0 0.7rem; display: flex; align-items: center; gap: 0.5rem; }
.bw-mk-sec-count { font-family: var(--bw-font-mono); font-size: 0.6875rem; color: var(--bw-text-muted); background: var(--bw-panel); padding: 2px 7px; border-radius: 999px; }

/* Read-only odds row (shares the pick-screen market look). */
.bw-mkt-row { position: relative; overflow: hidden; border: 1px solid var(--bw-border-subtle); background: var(--bw-bg); border-radius: 10px; }
.bw-mkt-row .bw-mkt-opt-fill { position: absolute; top: 0; bottom: 0; left: 0; background: rgba(52,188,217,.16); z-index: 0; }
.bw-mkt-row .bw-mkt-opt-body { position: relative; z-index: 1; display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; padding: 0.5rem 0.7rem; }
.bw-mkt-row .bw-mkt-opt-label { font-size: 0.8125rem; color: var(--bw-text-primary); }
.bw-mkt-row .bw-mkt-opt-pct { font-family: var(--bw-font-mono); font-size: 0.875rem; font-weight: 600; color: var(--bw-text-primary); font-variant-numeric: tabular-nums; min-width: 40px; text-align: right; }

/* Featured market boards. */
.bw-mktb-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 0.85rem; }
.bw-mktb { text-align: left; width: 100%; background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 12px; padding: 1rem; cursor: pointer; transition: border-color .15s, transform .05s; display: flex; flex-direction: column; gap: 0.7rem; }
.bw-mktb:hover { border-color: var(--pool-deep); }
.bw-mktb:active { transform: scale(.995); }
.bw-mktb-top { display: flex; align-items: center; gap: 0.6rem; }
.bw-mktb-emoji { flex: none; width: 40px; height: 40px; border-radius: 11px; display: flex; align-items: center; justify-content: center; font-size: 1.25rem; }
.bw-mktb-head { flex: 1; min-width: 0; }
.bw-mktb-name { font-weight: 700; font-size: 0.9375rem; color: var(--bw-text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bw-mktb-q { font-size: 0.75rem; color: var(--bw-text-secondary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bw-mktb-rows { display: flex; flex-direction: column; gap: 0.35rem; }
.bw-mktb-new { font-size: 0.8125rem; color: var(--pool-deep); background: var(--pool-foam); border-radius: 10px; padding: 0.7rem; text-align: center; }
.bw-mktb-foot { display: flex; justify-content: space-between; font-family: var(--bw-font-mono); font-size: 0.6875rem; color: var(--bw-text-muted); }

/* Odds-forward tiles. */
.bw-mkt-tiles { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 0.7rem; }
.bw-mkt-tile { text-align: left; background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 10px; padding: 0.85rem; cursor: pointer; transition: border-color .15s, transform .05s; display: flex; flex-direction: column; gap: 0.5rem; }
.bw-mkt-tile:hover { border-color: var(--pool-deep); }
.bw-mkt-tile:active { transform: scale(.99); }
.bw-mkt-tile.closed { opacity: 0.72; }
.bw-mkt-tile-head { display: flex; align-items: center; gap: 0.45rem; }
.bw-mkt-tile-emoji { font-size: 1.1rem; }
.bw-mkt-tile-name { flex: 1; min-width: 0; font-weight: 600; font-size: 0.875rem; color: var(--bw-text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bw-mkt-tile-lock { font-size: 0.75rem; }
.bw-mkt-tile-q { font-size: 0.6875rem; color: var(--bw-text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bw-mkt-tile-odds { position: relative; overflow: hidden; border: 1px solid var(--bw-border-subtle); border-radius: 10px; background: var(--bw-bg); }
.bw-mkt-tile-odds .bw-mkt-opt-fill { position: absolute; top: 0; bottom: 0; left: 0; background: rgba(52,188,217,.19); z-index: 0; }
.bw-mkt-tile-odds-body { position: relative; z-index: 1; display: flex; align-items: center; justify-content: space-between; gap: 0.4rem; padding: 0.55rem 0.7rem; }
.bw-mkt-tile-fav { font-size: 0.8125rem; font-weight: 600; color: var(--bw-text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bw-mkt-tile-noodds { font-size: 0.75rem; color: var(--bw-text-secondary); padding: 0.55rem 0; }
.bw-mkt-tile-foot { font-family: var(--bw-font-mono); font-size: 0.625rem; color: var(--bw-text-muted); }

/* Movers strip. */
.bw-mover { text-align: left; flex: 0 0 auto; width: 150px; background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 12px; padding: 0.7rem; cursor: pointer; transition: border-color .15s; }
.bw-mover:hover { border-color: var(--pool-deep); }
.bw-mover-top { display: flex; align-items: center; justify-content: space-between; margin-bottom: 0.4rem; }
.bw-mover-emoji { font-size: 1.1rem; }
.bw-mover-fav { font-size: 0.8125rem; color: var(--bw-text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bw-mover-fav b { font-family: var(--bw-font-mono); }
.bw-mover-pool { font-size: 0.6875rem; color: var(--bw-text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-top: 0.15rem; }

.bw-mkt-live-badge { font-family: var(--bw-font-mono); font-size: 0.625rem; font-weight: 700; color: #fff; background: #EF4444; padding: 2px 7px; border-radius: 999px; letter-spacing: .5px; }
.bw-mkt-live-badge.sm { font-size: 0.5625rem; padding: 1px 6px; }

/* ── CALLS — personal "call your shot" predictions ─────────────────────────── */
.bw-calls-head { display:flex; align-items:center; justify-content:space-between; gap:1rem; margin-bottom:1rem; }
.bw-calls-sub { font-size:0.8125rem; color:var(--bw-text-muted); margin:0.15rem 0 0; }
.bw-calls-list { display:flex; flex-direction:column; gap:0.6rem; }
.bw-call-row { display:flex; align-items:center; gap:0.75rem; width:100%; text-align:left; padding:0.85rem 0.9rem; background:var(--bw-surface); border:1px solid var(--bw-border-subtle); border-radius:10px; cursor:pointer; transition:border-color .15s, transform .05s; }
.bw-call-row:hover { border-color:var(--pool-deep); }
.bw-call-row:active { transform:scale(.995); }
.bw-call-row-icon { font-size:1.5rem; flex-shrink:0; }
.bw-call-row-main { flex:1; min-width:0; display:flex; flex-direction:column; gap:2px; }
.bw-call-row-title { font-size:0.9375rem; font-weight:600; color:var(--bw-text-primary); }
.bw-call-row-sub { font-size:0.8125rem; color:var(--bw-text-secondary); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.bw-call-row-meta { font-family:var(--bw-font-mono); font-size:0.6875rem; color:var(--bw-text-muted); }
.bw-call-pill { flex-shrink:0; font-family:var(--bw-font-mono); font-size:0.625rem; font-weight:700; letter-spacing:.5px; padding:3px 9px; border-radius:999px; text-transform:uppercase; background:var(--bw-panel); color:var(--bw-text-muted); }
.bw-call-pill.open { color:var(--bw-gold-deep); background:rgba(245,156,156,0.14); }
.bw-call-pill.locked { color:var(--pool-deep); background:rgba(52,188,217,0.14); }
.bw-call-pill.win { color:#0a7f3f; background:rgba(5,150,105,0.14); }
.bw-call-pill.loss { color:#b42318; background:rgba(220,38,38,0.12); }
.bw-call-empty { text-align:center; padding:2.5rem 1.5rem; max-width:420px; margin:1.5rem auto; }
.bw-call-empty-emoji { font-size:2.5rem; }
.bw-call-empty-title { font-family:var(--bw-font-display); font-size:1.25rem; font-weight:800; color:var(--bw-text-primary); margin:0.5rem 0; }
.bw-call-empty p { font-size:0.9rem; color:var(--bw-text-secondary); line-height:1.6; margin:0 0 1.25rem; }
/* The claim headline on a call receipt (stays on the cream receipt paper). */
.bw-call-claim { font-family:var(--bw-font-mono); font-size:0.95rem; font-weight:700; color:#1b1b1b; text-align:center; line-height:1.4; padding:0.25rem 0; }
.bw-call-actions { display:flex; flex-wrap:wrap; gap:0.5rem; justify-content:center; margin-top:1rem; }
.bw-call-actions .bw-btn { flex:1; min-width:120px; }
.bw-call-grade { display:flex; flex-wrap:wrap; align-items:center; gap:0.5rem; justify-content:center; margin-top:0.85rem; }
.bw-call-grade-q { font-size:0.8125rem; color:var(--bw-text-secondary); width:100%; text-align:center; }
.bw-call-note { font-size:0.75rem; color:var(--bw-text-muted); text-align:center; margin:0.75rem 0 0; }
.bw-textlink { display:block; margin:1rem auto 0; background:none; border:none; color:var(--bw-text-muted); font-size:0.8125rem; cursor:pointer; text-decoration:underline; }
.bw-textlink.danger { color:var(--bw-error); }
/* Create-a-call editor bits (inside the shared .bw-pm modal). */
.bw-call-kinds { display:flex; flex-wrap:wrap; gap:0.4rem; margin-bottom:0.5rem; }
.bw-call-kind { flex:1; min-width:calc(50% - 0.2rem); padding:0.55rem 0.5rem; font-size:0.8125rem; font-weight:600; border:1px solid var(--bw-border-subtle); background:var(--bw-surface); color:var(--bw-text-secondary); border-radius:10px; cursor:pointer; }
.bw-call-kind.on { border-color:var(--pool-deep); background:rgba(52,188,217,0.10); color:var(--bw-text-primary); }
.bw-call-two { display:flex; gap:0.6rem; }
.bw-call-two > div { flex:1; min-width:0; }
.bw-call-opts { display:flex; flex-wrap:wrap; gap:0.4rem; margin-bottom:0.5rem; }
.bw-call-opt { flex:1; min-width:70px; padding:0.5rem; font-size:0.8125rem; font-weight:600; border:1px solid var(--bw-border-subtle); background:var(--bw-surface); color:var(--bw-text-secondary); border-radius:9px; cursor:pointer; }
.bw-call-opt.on { border-color:var(--pool-deep); background:rgba(52,188,217,0.12); color:var(--bw-text-primary); }
.bw-call-check { display:flex; align-items:center; gap:0.5rem; font-size:0.8125rem; color:var(--bw-text-secondary); margin:0.35rem 0 0.5rem; cursor:pointer; }
.bw-call-score { display:flex; align-items:center; gap:0.6rem; margin-bottom:0.5rem; }
.bw-call-score .bw-pm-input { width:70px; text-align:center; }
.bw-call-hint { font-size:0.75rem; color:var(--bw-text-muted); line-height:1.5; margin:0.35rem 0 0; }

/* ── LEAGUE HUB (overview) — attention rail, add-a-pool, links ──────────────── */
.bw-lh-alert { background:linear-gradient(135deg, rgba(245,156,156,0.12), rgba(245,156,156,0.05)); border:1px solid rgba(245,156,156,0.28); border-radius:12px; padding:0.85rem; margin-bottom:1.25rem; }
.bw-lh-alert-head { font-size:0.8125rem; font-weight:700; color:var(--bw-text-primary); margin-bottom:0.6rem; }
.bw-lh-need { display:flex; align-items:center; gap:0.75rem; width:100%; text-align:left; padding:0.6rem 0.65rem; background:var(--bw-surface); border:1px solid var(--bw-border-subtle); border-radius:12px; cursor:pointer; margin-bottom:0.4rem; transition:border-color .15s, transform .05s; }
.bw-lh-need:last-child { margin-bottom:0; }
.bw-lh-need:hover { border-color:var(--bw-gold); }
.bw-lh-need:active { transform:scale(.995); }
.bw-lh-need.soon { border-color:rgba(245,156,156,0.5); }
.bw-lh-need-ic { font-size:1.375rem; flex-shrink:0; }
.bw-lh-need-main { flex:1; min-width:0; display:flex; flex-direction:column; gap:1px; }
.bw-lh-need-nm { font-size:0.9rem; font-weight:600; color:var(--bw-text-primary); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.bw-lh-need-sub { font-size:0.75rem; color:var(--bw-text-secondary); }
.bw-lh-cd { font-family:var(--bw-font-mono); color:var(--bw-gold-deep); font-weight:600; }
.bw-lh-need.soon .bw-lh-cd { color:var(--bw-error); }
.bw-lh-need-arr { flex-shrink:0; color:var(--bw-text-muted); font-size:1.1rem; }
.bw-lh-add { display:flex; align-items:center; gap:0.75rem; width:100%; text-align:left; padding:0.85rem 0.9rem; background:var(--bw-surface); border:1px dashed var(--bw-border-strong); border-radius:10px; cursor:pointer; margin:1rem 0; transition:border-color .15s; }
.bw-lh-add:hover { border-color:var(--pool-deep); }
.bw-lh-add-ic { font-size:1.25rem; color:var(--pool-deep); flex-shrink:0; }
.bw-lh-links { display:flex; flex-wrap:wrap; gap:0.5rem; margin-top:1.25rem; }
.bw-lh-links a { flex:1; min-width:calc(50% - 0.25rem); display:flex; align-items:center; gap:0.5rem; justify-content:center; padding:0.7rem; background:var(--bw-panel); border:1px solid var(--bw-border-subtle); border-radius:12px; color:var(--bw-text-secondary); text-decoration:none; font-size:0.8125rem; font-weight:600; }
.bw-lh-links a:hover { color:var(--bw-text-primary); border-color:var(--bw-border-strong); }
.bw-mk-context { font-size:0.8125rem; color:var(--bw-text-secondary); background:var(--bw-panel); border-radius:10px; padding:0.6rem 0.8rem; margin:0 0 1rem; line-height:1.5; }
@media (min-width:1000px) { .bw-lh-links a { min-width:auto; } }

/* ── Import picks (copy from another league) ────────────────────────────────── */
.bw-import-banner { background:rgba(52,188,217,0.08); border:1px solid rgba(52,188,217,0.25); border-radius:10px; padding:0.75rem 0.85rem; margin-bottom:1rem; }
.bw-import-head { font-size:0.8125rem; font-weight:700; color:var(--bw-text-primary); margin-bottom:0.55rem; }
.bw-import-opts { display:flex; flex-wrap:wrap; gap:0.45rem; }
.bw-import-opt { display:inline-flex; align-items:center; gap:0.4rem; padding:0.5rem 0.75rem; font-size:0.8125rem; font-weight:600; color:var(--pool-deep); background:var(--bw-surface); border:1px solid rgba(52,188,217,0.4); border-radius:10px; cursor:pointer; }
.bw-import-opt:hover { background:rgba(52,188,217,0.10); }
.bw-import-opt span { font-family:var(--bw-font-mono); font-size:0.6875rem; color:var(--bw-text-muted); }

/* ── Call public-share controls ────────────────────────────────────────────── */
.bw-call-public { margin-top:0.85rem; padding:0.85rem; background:var(--bw-panel); border:1px solid var(--bw-border-subtle); border-radius:12px; }
.bw-call-pub-label { font-size:0.8125rem; font-weight:700; color:var(--bw-text-primary); margin-bottom:0.5rem; }
.bw-call-pub-row { display:flex; gap:0.5rem; margin-bottom:0.5rem; }
.bw-call-pub-row .bw-pm-input { flex:1; min-width:0; font-size:0.75rem; text-align:left; padding:0.5rem 0.6rem; }
.bw-call-public .bw-textlink { margin:0.25rem 0 0; }

/* ── Seasons & Events ──────────────────────────────────────────────────────── */
/* Current-season hero (Home) */
.bw-season-hero { margin:0.25rem 0 1.25rem; padding:1rem 1rem 1.1rem; background:var(--bw-surface); border:1px solid var(--bw-border-subtle); border-radius:12px; }
.bw-season-hero-head { display:flex; align-items:flex-start; gap:0.75rem; margin-bottom:0.85rem; }
.bw-season-hero-emoji { font-size:1.75rem; line-height:1; flex:0 0 auto; }
.bw-season-hero-txt { flex:1; min-width:0; }
.bw-season-hero-kicker { display:block; font-family:var(--bw-font-mono,monospace); font-size:0.6875rem; letter-spacing:0.06em; text-transform:uppercase; color:var(--bw-gold); font-weight:700; }
.bw-season-hero-name { margin:0.1rem 0 0; font-size:1.25rem; font-weight:800; color:var(--bw-text-primary); }
.bw-season-hero-theme { margin:0.2rem 0 0; font-size:0.8125rem; color:var(--bw-text-secondary); }
.bw-season-hero-link { flex:0 0 auto; font-size:0.75rem; font-weight:600; color:var(--bw-gold); text-decoration:none; white-space:nowrap; padding-top:0.2rem; }

/* Event rail (horizontal scroll on mobile) + list */
.bw-event-rail { display:grid; grid-auto-flow:column; grid-auto-columns:minmax(230px,1fr); gap:0.6rem; overflow-x:auto; padding-bottom:0.25rem; scroll-snap-type:x mandatory; }
.bw-event-rail::-webkit-scrollbar { height:6px; }
.bw-event-list, .bw-season-grid { display:grid; gap:0.6rem; margin-top:0.75rem; }
@media (min-width:640px){ .bw-season-grid { grid-template-columns:repeat(2,1fr); } .bw-event-list { grid-template-columns:repeat(2,1fr); } }

.bw-event-card { display:block; width:100%; text-align:left; cursor:pointer; scroll-snap-align:start; background:var(--bw-panel); border:1px solid var(--bw-border-subtle); border-radius:10px; padding:0.8rem 0.85rem; transition:border-color 0.15s, transform 0.15s; }
.bw-event-card:hover { border-color:var(--bw-gold); transform:translateY(-1px); }
.bw-event-top { display:flex; align-items:center; gap:0.55rem; }
.bw-event-icon { font-size:1.35rem; line-height:1; flex:0 0 auto; }
.bw-event-info { flex:1; min-width:0; display:flex; flex-direction:column; }
.bw-event-name { font-size:0.9375rem; font-weight:700; color:var(--bw-text-primary); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.bw-event-fan { font-size:0.625rem; font-weight:700; color:var(--bw-gold); border:1px solid var(--bw-gold); border-radius:6px; padding:0.05rem 0.3rem; margin-left:0.3rem; vertical-align:middle; }
.bw-event-type { font-size:0.75rem; color:var(--bw-text-muted); }
.bw-event-meta { display:flex; align-items:center; justify-content:space-between; gap:0.5rem; margin-top:0.6rem; }
.bw-event-when { font-size:0.75rem; color:var(--bw-text-secondary); font-weight:500; }

.bw-event-state { font-size:0.6875rem; font-weight:700; padding:0.15rem 0.45rem; border-radius:999px; background:var(--bw-panel); border:1px solid var(--bw-border-subtle); color:var(--bw-text-secondary); white-space:nowrap; }
.bw-event-state.live { color:#fff; background:var(--bw-live,#16A34A); border-color:transparent; }
.bw-event-state.done { color:var(--bw-text-muted); }
.bw-event-state.draft { color:var(--bw-text-muted); border-style:dashed; }
.bw-event-lchip { font-size:0.6875rem; font-weight:700; padding:0.12rem 0.4rem; border-radius:6px; white-space:nowrap; }
.bw-event-lchip.added { color:var(--bw-success,#16A34A); background:color-mix(in srgb, var(--bw-success,#16A34A) 14%, transparent); }
.bw-event-lchip.req { color:var(--bw-gold); background:color-mix(in srgb, var(--bw-gold) 16%, transparent); }
.bw-event-lchip.closed { color:var(--bw-text-muted); background:var(--bw-panel); }
.bw-season-empty { font-size:0.8125rem; color:var(--bw-text-muted); margin:0.25rem 0 0; }

/* ============================================================================
   EVENT DETAIL — rich, phase-aware, two-column (bw-ev2-*)
   ============================================================================ */
.bw-ev2 { display:grid; grid-template-columns:1fr; gap:1.25rem; }
@media (min-width:900px){ .bw-ev2 { grid-template-columns:minmax(0,1fr) 288px; align-items:start; } }
.bw-ev2-main { min-width:0; display:flex; flex-direction:column; gap:1.1rem; }
.bw-ev2-head { display:flex; gap:0.9rem; align-items:flex-start; }
.bw-ev2-icon { font-size:2.6rem; line-height:1; flex:0 0 auto; }
.bw-ev2-id { min-width:0; }
.bw-ev2-name { font-family:var(--bw-font-display); font-weight:800; font-size:1.7rem; margin:0; color:var(--bw-text-primary); line-height:1.1; }
.bw-ev2-meta { font-family:var(--bw-font-mono); font-size:0.68rem; font-weight:700; letter-spacing:0.06em; text-transform:uppercase; color:var(--bw-text-muted); margin:0.35rem 0 0; }
.bw-ev2-cta { margin:0; }
.bw-ev2-cta:empty { display:none; }

/* Stat tiles */
/* auto-fill, not auto-fit: an event with no seeded participation renders one
   tile, and auto-fit stretched that single tile across the whole column like a
   banner. Packs authored by proposal 26 ship no invented participation numbers,
   so one tile is now a normal case rather than a bug. */
/* The tile grid is auto-FIT, not auto-fill: with three tiles in a wide column
   auto-fill left phantom tracks and squeezed the real ones to their 90px floor,
   which is how a nine-character value ended up in a 78px content box. The floor
   is also wider now, and the value wraps and steps down instead of hanging off
   both sides of its own border (the "Announced" overflow). */
.bw-ev2-stats { display:grid; grid-template-columns:repeat(auto-fit,minmax(104px,1fr)); gap:0.6rem; }
.bw-ev2-stat { border:1px solid var(--bw-border-subtle); border-radius:12px; padding:0.7rem 0.55rem; text-align:center; background:var(--bw-surface); min-width:0; }
.bw-ev2-stat-v { font-family:var(--bw-font-display); font-weight:800; font-size:1.35rem; color:var(--bw-text-primary); line-height:1.05; min-width:0; overflow-wrap:break-word; }
.bw-ev2-stat-v.long { font-size:1.05rem; }
.bw-ev2-stat-l { font-family:var(--bw-font-mono); font-size:0.58rem; font-weight:700; letter-spacing:0.06em; text-transform:uppercase; color:var(--bw-text-muted); margin-top:0.35rem; }

/* Phase hero (preview / recap / live) */
.bw-ev2-hero { border:1px solid var(--bw-border-subtle); border-radius:14px; padding:1.1rem 1.15rem; background:var(--bw-surface); }
.bw-ev2-hero-tag { display:inline-block; font-family:var(--bw-font-mono); font-size:0.6rem; font-weight:700; letter-spacing:0.1em; text-transform:uppercase; color:var(--bw-gold); background:color-mix(in srgb, var(--bw-gold) 12%, transparent); border-radius:99px; padding:0.15rem 0.5rem; margin-bottom:0.6rem; }
.bw-ev2-hero.recap .bw-ev2-hero-tag { color:var(--bw-text-secondary); background:var(--bw-panel); }
.bw-ev2-hero-title { font-family:var(--bw-font-display); font-weight:800; font-size:1.15rem; color:var(--bw-text-primary); }
.bw-ev2-hero-sub { font-size:0.875rem; color:var(--bw-text-secondary); margin:0.3rem 0 0; line-height:1.5; }
/* The preview slate: the real questions, with their real options. Rows read
   like the pick screen they are previewing without being that screen (no bars,
   no buttons, nothing clickable), so the reader never mistakes a look for a
   pick. Options are inert chips, and a long option list wraps. */
.bw-ev2-pvlist { list-style:none; margin:0.85rem 0 0; padding:0; display:flex; flex-direction:column; }
.bw-ev2-pvq { padding:0.6rem 0; border-top:1px solid var(--bw-border-subtle); min-width:0; }
.bw-ev2-pvq:first-child { border-top:none; padding-top:0.2rem; }
.bw-ev2-pvq-top { display:flex; align-items:baseline; justify-content:space-between; gap:0.75rem; }
.bw-ev2-pvq-text { font-size:0.875rem; font-weight:600; color:var(--bw-text-primary); line-height:1.4; min-width:0; }
.bw-ev2-pvq-pts { flex:0 0 auto; font-family:var(--bw-font-mono); font-size:0.62rem; font-weight:700; letter-spacing:0.05em; text-transform:uppercase; color:var(--bw-text-muted); white-space:nowrap; }
.bw-ev2-pvq-opts { display:flex; flex-wrap:wrap; gap:0.3rem; margin-top:0.4rem; }
.bw-ev2-pvq-opt { font-size:0.75rem; color:var(--bw-text-secondary); background:var(--bw-panel); border:1px solid var(--bw-border-subtle); border-radius:99px; padding:0.12rem 0.5rem; }
.bw-ev2-pvmore { font-size:0.75rem; color:var(--bw-text-muted); margin:0.6rem 0 0; }
.bw-ev2-results { display:flex; flex-direction:column; }
.bw-ev2-result { display:flex; align-items:center; justify-content:space-between; gap:1rem; padding:0.6rem 0; border-top:1px solid var(--bw-border-subtle); }
.bw-ev2-result:first-child { border-top:none; }
.bw-ev2-result-q { font-size:0.85rem; color:var(--bw-text-secondary); min-width:0; }
.bw-ev2-result-a { font-family:var(--bw-font-display); font-weight:800; font-size:0.95rem; color:var(--bw-text-primary); white-space:nowrap; }

/* About + rules blocks */
.bw-ev2-block { border:1px solid var(--bw-border-subtle); border-radius:14px; padding:1.1rem 1.15rem; background:var(--bw-surface); }
.bw-ev2-block-h { display:flex; align-items:center; gap:0.5rem; flex-wrap:wrap; font-family:var(--bw-font-mono); font-size:0.66rem; font-weight:700; letter-spacing:0.1em; text-transform:uppercase; color:var(--bw-text-muted); margin-bottom:0.7rem; }
.bw-ev2-format { font-family:var(--bw-font-mono); font-size:0.6rem; letter-spacing:0.03em; text-transform:none; color:var(--bw-text-secondary); background:var(--bw-panel); border-radius:99px; padding:0.1rem 0.45rem; }
.bw-ev2-about { font-size:0.925rem; line-height:1.6; color:var(--bw-text-secondary); margin:0; }
.bw-ev2-rules { margin:0; padding-left:1.15rem; display:flex; flex-direction:column; gap:0.45rem; }
.bw-ev2-rules li { font-size:0.875rem; line-height:1.5; color:var(--bw-text-secondary); }
.bw-ev2-rules li::marker { color:var(--bw-gold); font-weight:700; }
.bw-ev2-foot { font-size:0.72rem; color:var(--bw-text-muted); margin:0.9rem 0 0; }

/* Right rail: key dates + facts */
.bw-ev2-rail { display:flex; flex-direction:column; gap:1rem; }
.bw-ev2-side { border:1px solid var(--bw-border-subtle); border-radius:14px; padding:0.9rem 1rem; background:var(--bw-surface); }
.bw-ev2-side-h { font-family:var(--bw-font-mono); font-size:0.62rem; font-weight:700; letter-spacing:0.1em; text-transform:uppercase; color:var(--bw-text-muted); margin-bottom:0.5rem; }
.bw-ev2-date { display:flex; align-items:center; justify-content:space-between; gap:0.8rem; padding:0.4rem 0; border-top:1px solid var(--bw-border-subtle); font-size:0.82rem; }
.bw-ev2-side .bw-ev2-date:first-of-type { border-top:none; }
.bw-ev2-boardlink { display:block; border:1px solid var(--bw-border-subtle); border-radius:14px; padding:0.75rem 1rem; background:var(--bw-surface); font-size:0.8125rem; font-weight:600; color:var(--bw-text-primary); text-decoration:none; }
.bw-ev2-boardlink:hover { border-color:var(--bw-border-strong); }
.bw-ev2-note { text-align:center; padding:1.5rem; margin-top:1rem; }
.bw-ev2-note p { color:var(--bw-text-secondary); margin:0; }

/* ── The league season board (proposal 26 §4.2) ──────────────────────────────
   A flat hairline ledger. No medals, no gradients, and salmon appears exactly
   once: on the row belonging to whoever is reading. Wide tables scroll inside
   their own box so the page body never scrolls sideways. */
.bw-sb { display:flex; flex-direction:column; }
.bw-sb-head { display:flex; flex-wrap:wrap; align-items:baseline; gap:0.6rem; margin-bottom:0.75rem; }
/* Embedded in the Yard, the board's own title is dropped and only its currency
   line survives, so the head sits tighter under the section header above it. */
.bw-sb-head.embedded { margin-bottom:0.5rem; }
.bw-sb-title { font-family:var(--bw-font-display); font-size:1.05rem; font-weight:800; color:var(--bw-text-primary); margin:0; }
.bw-sb-cur { font-size:0.75rem; color:var(--bw-text-muted); }
.bw-sb-wrap { overflow-x:auto; border:1px solid var(--bw-border-subtle); border-radius:12px; }
.bw-sb-table { width:100%; border-collapse:collapse; font-size:0.8125rem; }
.bw-sb-table th, .bw-sb-table td { padding:0.5rem 0.6rem; text-align:left; border-bottom:1px solid var(--bw-border-subtle); white-space:nowrap; }
.bw-sb-table tbody tr:last-child th, .bw-sb-table tbody tr:last-child td { border-bottom:none; }
.bw-sb-table thead th { font-family:var(--bw-font-mono); font-size:0.6rem; font-weight:700; letter-spacing:0.06em; text-transform:uppercase; color:var(--bw-text-muted); vertical-align:bottom; }
.bw-sb-rank { width:2.2rem; text-align:right; font-family:var(--bw-font-mono); color:var(--bw-text-muted); }
.bw-sb-who { min-width:9rem; white-space:normal; }
.bw-sb-emoji { margin-right:0.35rem; }
.bw-sb-tag { display:inline-block; margin-left:0.35rem; font-family:var(--bw-font-mono); font-size:0.55rem; text-transform:uppercase; letter-spacing:0.05em; color:var(--bw-text-muted); border:1px solid var(--bw-border-subtle); border-radius:999px; padding:0.02rem 0.3rem; }
.bw-sb-ev { max-width:7rem; }
.bw-sb-ev-i { margin-right:0.25rem; }
.bw-sb-ev-n { display:inline-block; max-width:5.5rem; overflow:hidden; text-overflow:ellipsis; vertical-align:bottom; }
.bw-sb-ev.pending .bw-sb-ev-n { color:var(--bw-text-muted); }
.bw-sb-cell { font-family:var(--bw-font-mono); text-align:right; }
.bw-sb-cell.zero { color:var(--bw-text-muted); }
.bw-sb-total { font-family:var(--bw-font-mono); font-weight:700; text-align:right; color:var(--bw-text-primary); }
/* The one salmon in the room. */
.bw-sb-table tbody tr.you { background:color-mix(in srgb, var(--bw-gold) 10%, transparent); }
.bw-sb-table tbody tr.you .bw-sb-total, .bw-sb-table tbody tr.you .bw-sb-rank { color:var(--bw-gold-deep); }
.bw-sb-table tbody tr.you .bw-sb-tag.you { color:var(--bw-gold-deep); border-color:color-mix(in srgb, var(--bw-gold-deep) 45%, transparent); }
.bw-sb-note { font-size:0.75rem; color:var(--bw-text-muted); margin:0.6rem 0 0; line-height:1.5; }
@media (max-width: 560px) { .bw-sb-ev-n { max-width:3.5rem; } .bw-sb-who { min-width:7rem; } }

/* The Yard's side-bet column group (proposal 27 §2.3). A record is not points,
   so the group gets its own name and a hairline standing between the two. No
   colour does the separating: a rule and a label do. */
.bw-sb-grouphead th { border-bottom:1px solid var(--bw-border-subtle); padding-bottom:0.3rem; }
.bw-sb-grouphead th.sbet, .bw-sb-table th.sbet, .bw-sb-table td.sbet { border-left:1px solid var(--bw-border-subtle); }
.bw-sb-table th.sbet, .bw-sb-table td.sbet { text-align:right; }
.bw-sb-table th.sbet .bw-sb-ev-n { max-width:none; }

/* ── The Yard (proposal 27) ──────────────────────────────────────────────────
   Four blocks of rows the rest of the app already knows how to draw. Nothing
   here invents a card: events wear .bw-se-row, side bets wear .bw-bet-row. */
.bw-yd { display:flex; flex-direction:column; }
.bw-yd-head { margin-bottom:0.9rem; }
.bw-yd-sub { font-size:0.85rem; color:var(--bw-text-muted); margin:0.25rem 0 0; }
.bw-yd-list { display:flex; flex-direction:column; gap:0.5rem; border:1px solid var(--bw-border-subtle); border-radius:12px; padding:0.35rem; background:var(--bw-surface); }
.bw-yd-list .bw-se-row { border-top:none; border-radius:10px; }
.bw-yd-moverow { display:flex; align-items:center; gap:0.5rem; flex-wrap:wrap; }
.bw-yd-moverow .bw-bet-row { flex:1 1 14rem; }
.bw-yd-movechip { flex:0 0 auto; font-family:var(--bw-font-mono); font-size:0.6rem; font-weight:700; letter-spacing:0.05em; text-transform:uppercase; color:var(--bw-gold-deep); border:1px solid color-mix(in srgb, var(--bw-gold-deep) 40%, transparent); border-radius:999px; padding:0.14rem 0.45rem; white-space:nowrap; }
.bw-se-pill.topick { color:var(--bw-gold-deep); background:color-mix(in srgb, var(--bw-gold) 20%, transparent); }
.bw-yd-bookline { display:block; margin-top:0.5rem; font-size:0.78rem; color:var(--bw-text-muted); text-decoration:none; }
.bw-yd-bookline:hover { color:var(--bw-text-primary); }
.bw-yd-actions { display:flex; flex-wrap:wrap; gap:0.6rem; }
.bw-yd-empty { border:1px solid var(--bw-border-subtle); border-radius:14px; background:var(--bw-surface); padding:1.75rem 1.25rem; text-align:center; display:flex; flex-direction:column; align-items:center; gap:0.6rem; }
.bw-yd-empty-emoji { font-size:1.9rem; color:var(--bw-text-muted); line-height:0; }
/* The Yard's stroke mark, wherever the surface needs one. Sized in em so the
   two hosts (the empty card and the error box) keep their own scale. */
.bw-yd-mark { width:1.9em; height:1.9em; display:block; }
.bw-fan-emptybox-emoji .bw-yd-mark { width:1em; height:1em; }
.bw-yd-empty-title { font-family:var(--bw-font-display); font-size:1.05rem; font-weight:800; color:var(--bw-text-primary); margin:0; max-width:28rem; line-height:1.45; }
.bw-yd-empty-sub { font-size:0.8rem; color:var(--bw-text-muted); margin:0; max-width:28rem; }
@media (max-width: 560px) { .bw-yd-actions { flex-direction:column; align-items:stretch; } }
.bw-ev2-date span { color:var(--bw-text-muted); }
.bw-ev2-date b { color:var(--bw-text-primary); font-weight:700; text-align:right; }

/* ============================================================================
   PROFILE / SETTINGS — sectioned, two-column (bw-pf-*)
   ============================================================================ */
.bw-pf { display:flex; flex-direction:column; gap:1.25rem; }
.bw-pf-head { display:flex; align-items:center; gap:0.9rem; }
.bw-pf-emoji { font-size:2.8rem; line-height:1; flex:0 0 auto; width:4rem; height:4rem; display:flex; align-items:center; justify-content:center; background:var(--bw-panel); border-radius:16px; }
.bw-pf-name { font-family:var(--bw-font-display); font-weight:800; font-size:1.7rem; margin:0; color:var(--bw-text-primary); line-height:1.1; }
.bw-pf-meta { font-family:var(--bw-font-mono); font-size:0.68rem; font-weight:700; letter-spacing:0.05em; text-transform:uppercase; color:var(--bw-text-muted); margin:0.3rem 0 0; }
.bw-pf-body { display:grid; grid-template-columns:1fr; gap:1rem; align-items:start; }
@media (min-width:820px){ .bw-pf-body { grid-template-columns:1fr 1fr; } }
.bw-pf-col { display:flex; flex-direction:column; gap:1rem; min-width:0; }
.bw-pf-sec { border:1px solid var(--bw-border-subtle); border-radius:14px; padding:1rem 1.1rem 1.1rem; background:var(--bw-surface); }
.bw-pf-sec-h { display:flex; align-items:center; gap:0.4rem; font-family:var(--bw-font-mono); font-size:0.66rem; font-weight:700; letter-spacing:0.1em; text-transform:uppercase; color:var(--bw-text-muted); margin-bottom:0.75rem; }
.bw-pf-sec-n { color:var(--bw-text-primary); background:var(--bw-panel); border-radius:99px; padding:0.05rem 0.4rem; letter-spacing:0; }
.bw-pf-hint { font-size:0.78rem; color:var(--bw-text-muted); margin:0 0 0.7rem; line-height:1.4; }
.bw-pf-empty { font-size:0.85rem; color:var(--bw-text-secondary); margin:0 0 0.75rem; }

/* League rows */
.bw-pf-league { display:flex; align-items:center; gap:0.7rem; padding:0.55rem 0.5rem; border-radius:10px; border:1px solid transparent; margin-bottom:0.4rem; }
.bw-pf-league.active { background:color-mix(in srgb, var(--bw-gold) 8%, var(--bw-surface)); border-color:color-mix(in srgb, var(--bw-gold) 30%, var(--bw-border-subtle)); }
.bw-pf-league-emoji { font-size:1.5rem; flex:0 0 auto; }
.bw-pf-league-main { display:flex; flex-direction:column; min-width:0; flex:1; }
.bw-pf-league-name { font-weight:700; font-size:0.9rem; color:var(--bw-text-primary); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.bw-pf-league-sub { font-size:0.7rem; color:var(--bw-text-muted); }
.bw-pf-league-tag { flex:0 0 auto; font-size:0.66rem; font-weight:700; color:var(--bw-gold); }
.bw-pf-sm { padding:0.35rem 0.7rem; font-size:0.72rem; flex:0 0 auto; }
.bw-pf-wide { width:100%; justify-content:center; margin-top:0.5rem; }
.bw-pf-danger { width:100%; margin-top:0.6rem; background:transparent; border:1px solid color-mix(in srgb, var(--bw-error,#DC2626) 40%, transparent); color:var(--bw-error,#DC2626); border-radius:10px; padding:0.55rem; font-size:0.8rem; font-weight:600; cursor:pointer; }
.bw-pf-danger:hover { background:color-mix(in srgb, var(--bw-error,#DC2626) 8%, transparent); }
.bw-pf-sec .bw-emoji-grid { margin:0; }

/* ============================================================================
   SEASONS — spotlight + year-at-a-glance (bw-se-*)
   ============================================================================ */
.bw-se-page { display:flex; flex-direction:column; gap:1.5rem; }
.bw-se-pagehead .bw-calls-sub { margin:0.25rem 0 0; }

/* Current / next-up spotlight — flat hairline card, coral is the only accent */
.bw-se-spot { border:1px solid var(--bw-border-subtle); border-radius:14px; padding:1.25rem 1.25rem 1rem; background:var(--bw-surface); }
.bw-se-spot-head { display:flex; gap:0.9rem; align-items:flex-start; }
.bw-se-spot-emoji { font-size:2.5rem; line-height:1; flex:0 0 auto; }
.bw-se-spot-id { min-width:0; }
.bw-se-live { display:inline-flex; align-items:center; gap:0.4rem; font-family:var(--bw-font-mono); font-size:0.65rem; font-weight:700; letter-spacing:0.1em; text-transform:uppercase; color:var(--bw-gold); }
.bw-se-live-dot { width:7px; height:7px; border-radius:50%; background:var(--bw-gold); box-shadow:0 0 0 0 color-mix(in srgb, var(--bw-gold) 60%, transparent); animation:sePulse 1.8s infinite; }
@keyframes sePulse { 0%{box-shadow:0 0 0 0 color-mix(in srgb, var(--bw-gold) 55%, transparent);} 70%{box-shadow:0 0 0 7px transparent;} 100%{box-shadow:0 0 0 0 transparent;} }
.bw-se-kicker { font-family:var(--bw-font-mono); font-size:0.65rem; font-weight:700; letter-spacing:0.1em; text-transform:uppercase; color:var(--bw-text-muted); }
.bw-se-spot-name { font-family:var(--bw-font-display); font-weight:800; font-size:1.6rem; margin:0.15rem 0 0; color:var(--bw-text-primary); line-height:1.1; }
.bw-se-spot-theme { font-size:0.85rem; color:var(--bw-text-secondary); margin:0.3rem 0 0; line-height:1.45; }
.bw-se-prog { height:5px; border-radius:99px; background:var(--bw-panel); overflow:hidden; margin:0.9rem 0 0; }
.bw-se-prog-fill { height:100%; border-radius:99px; background:var(--bw-gold); }
.bw-se-spot-summary { font-size:0.8125rem; color:var(--bw-text-secondary); margin:0.8rem 0 0.2rem; }
.bw-se-spot-summary b { color:var(--bw-text-primary); font-family:var(--bw-font-mono); }
.bw-se-spot-events { display:flex; flex-direction:column; margin:0.6rem 0 0; }
.bw-se-empty-line { font-size:0.85rem; color:var(--bw-text-muted); padding:0.75rem 0; margin:0; }
.bw-se-spot-all { display:inline-block; margin-top:0.7rem; font-size:0.8125rem; font-weight:600; color:var(--bw-gold); text-decoration:none; }
.bw-se-spot-all:hover { text-decoration:underline; }

/* Event rows (spotlight + season detail) */
.bw-se-rows { border:1px solid var(--bw-border-subtle); border-radius:12px; overflow:hidden; }
.bw-se-row { display:flex; align-items:center; gap:0.7rem; width:100%; text-align:left; padding:0.65rem 0.7rem; background:transparent; border:none; border-top:1px solid var(--bw-border-subtle); cursor:pointer; transition:background .12s; }
.bw-se-spot-events .bw-se-row { padding-left:0.35rem; padding-right:0.35rem; }
.bw-se-row:first-child { border-top:none; }
.bw-se-row:hover { background:var(--bw-panel); }
.bw-se-row-emoji { font-size:1.35rem; flex:0 0 auto; }
.bw-se-row-main { display:flex; flex-direction:column; min-width:0; flex:1; }
.bw-se-row-name { font-weight:600; font-size:0.9rem; color:var(--bw-text-primary); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.bw-se-row-type { font-size:0.72rem; color:var(--bw-text-muted); }
.bw-se-pill { flex:0 0 auto; font-size:0.66rem; font-weight:700; padding:0.16rem 0.45rem; border-radius:99px; white-space:nowrap; }
.bw-se-pill.in { color:var(--bw-success,#16A34A); background:color-mix(in srgb, var(--bw-success,#16A34A) 14%, transparent); }
.bw-se-pill.live { color:var(--bw-gold); background:color-mix(in srgb, var(--bw-gold) 16%, transparent); }
.bw-se-pill.soon { color:var(--bw-gold); background:color-mix(in srgb, var(--bw-gold) 12%, transparent); }
.bw-se-pill.fan { color:var(--bw-gold); background:color-mix(in srgb, var(--bw-gold) 12%, transparent); }
.bw-se-pill.done { color:var(--bw-text-secondary); background:var(--bw-panel); }
.bw-se-pill.closed { color:var(--bw-text-muted); background:var(--bw-panel); }

/* The year — a connected ledger calendar (no boxes, hairline columns) */
.bw-se-year-head { margin-bottom:0.6rem; }
.bw-se-year-head { display:flex; flex-wrap:wrap; align-items:baseline; gap:0.6rem; }
.bw-se-year-label { font-family:var(--bw-font-mono); font-size:0.65rem; font-weight:700; letter-spacing:0.12em; text-transform:uppercase; color:var(--bw-text-muted); }
.bw-se-year-note { font-size:0.78rem; color:var(--bw-text-muted); }
.bw-se-cal { display:flex; border:1px solid var(--bw-border-subtle); border-radius:14px; overflow:hidden; background:var(--bw-surface); }
.bw-se-cal-col { flex:1 1 0; min-width:0; text-align:left; background:transparent; border:none; border-left:1px solid var(--bw-border-subtle); padding:0.95rem 0.9rem 0.8rem; cursor:pointer; display:flex; flex-direction:column; gap:0.15rem; transition:background .12s; }
.bw-se-cal-col:first-child { border-left:none; }
.bw-se-cal-col:hover { background:var(--bw-panel); }
.bw-se-cal-col.current { background:color-mix(in srgb, var(--bw-gold) 8%, var(--bw-surface)); }
.bw-se-cal-col.current:hover { background:color-mix(in srgb, var(--bw-gold) 12%, var(--bw-surface)); }
.bw-se-cal-col.past { opacity:0.6; }
.bw-se-cal-col.ghost { cursor:default; }
.bw-se-cal-when { display:flex; align-items:baseline; justify-content:space-between; gap:0.4rem; margin-bottom:0.35rem; }
.bw-se-cal-q { font-family:var(--bw-font-mono); font-size:0.58rem; font-weight:700; letter-spacing:0.08em; color:var(--bw-text-muted); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.bw-se-cal-live { font-family:var(--bw-font-mono); font-size:0.55rem; font-weight:700; letter-spacing:0.05em; text-transform:uppercase; color:var(--bw-gold); white-space:nowrap; }
.bw-se-cal-status { font-family:var(--bw-font-mono); font-size:0.55rem; font-weight:700; letter-spacing:0.03em; text-transform:uppercase; color:var(--bw-text-muted); white-space:nowrap; }
.bw-se-cal-name { font-family:var(--bw-font-display); font-weight:800; font-size:1.15rem; color:var(--bw-text-primary); line-height:1.1; margin-bottom:0.5rem; }
.bw-se-cal-name em { font-style:normal; font-family:var(--bw-font-mono); font-weight:600; font-size:0.72rem; color:var(--bw-text-muted); }
.bw-se-cal-events { display:flex; flex-direction:column; gap:0.3rem; }
.bw-se-cal-ev { display:flex; align-items:center; gap:0.45rem; font-size:0.78rem; color:var(--bw-text-secondary); overflow:hidden; white-space:nowrap; }
/* The truncation belongs on the NAME, not on the flex row: text-overflow has
   nothing to ellipsize on a flex container, which is why a long event name used
   to clip mid-word at the column edge. min-width:0 is what lets a flex item
   shrink below its content width at all. */
.bw-se-cal-ev .bw-se-cal-dot { flex:0 0 auto; }
/* NOT `.bw-se-cal-name`: that class is already the SEASON TITLE in this very
   component (Inter Tight, 800, 1.15rem, defined above). Reusing it here meant
   every event line silently inherited the title's type and rendered at 18.4px
   display-800 instead of 12.5px body. The name has to be its own. */
.bw-se-cal-evname { flex:1 1 auto; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.bw-se-cal-ev.live, .bw-se-cal-ev.in, .bw-se-cal-ev.join, .bw-se-cal-ev.fan { color:var(--bw-text-primary); font-weight:600; }
.bw-se-cal-ev.done, .bw-se-cal-ev.muted, .bw-se-cal-ev.draftrow { color:var(--bw-text-muted); }
.bw-se-cal-evtag { flex:0 0 auto; font-family:var(--bw-font-mono); font-size:0.55rem; font-weight:700; letter-spacing:0.05em; text-transform:uppercase; color:var(--bw-gold-deep, #E07676); }
.bw-se-cal-dot { width:6px; height:6px; border-radius:50%; flex:0 0 auto; background:var(--bw-border-strong); }
.bw-se-cal-ev.live .bw-se-cal-dot, .bw-se-cal-ev.join .bw-se-cal-dot, .bw-se-cal-ev.fan .bw-se-cal-dot { background:var(--bw-gold); }
.bw-se-cal-ev.in .bw-se-cal-dot { width:auto; height:auto; background:none; color:var(--bw-success,#16A34A); font-size:0.72rem; font-weight:800; line-height:1; margin:0 -1px 0 -2px; }
.bw-se-cal-more { font-size:0.7rem; color:var(--bw-text-muted); padding-left:1.05rem; }
/* The honest count under the season name: how many events, and how many of them
   have a field a league could actually play. */
.bw-se-cal-count { display:flex; flex-wrap:wrap; align-items:baseline; gap:0.4rem; font-family:var(--bw-font-mono); font-size:0.6rem; letter-spacing:0.02em; color:var(--bw-text-muted); margin:-0.25rem 0 0.6rem; }
.bw-se-cal-draft { font-weight:700; color:var(--bw-gold-deep, #E07676); }
/* The current quarter's column, when the spotlight card above already drew its
   slate. It points back instead of repeating it. */
.bw-se-cal-here { font-size:0.78rem; line-height:1.45; color:var(--bw-text-secondary); }
.bw-se-cal-col.here { background:color-mix(in srgb, var(--bw-gold) 8%, var(--bw-surface)); }
.bw-se-cal-foot { font-size:0.7rem; font-weight:600; color:var(--bw-text-secondary); margin-top:0.7rem; }
.bw-se-cal-foot.arrow { color:var(--bw-text-muted); font-weight:500; }
.bw-se-cal-col:hover .bw-se-cal-foot.arrow { color:var(--bw-gold); }

/* Empty state */
.bw-se-empty { text-align:center; padding:1.5rem 0 2rem; }
.bw-se-empty-title { font-family:var(--bw-font-display); font-weight:800; font-size:1.5rem; margin:0 0 0.5rem; color:var(--bw-text-primary); }
.bw-se-empty-sub { font-size:0.9rem; color:var(--bw-text-secondary); max-width:34rem; margin:0 auto 1.5rem; line-height:1.5; }
.bw-se-empty .bw-se-cal { text-align:left; }

/* Season detail header + groups */
.bw-se-dhead { display:flex; gap:0.9rem; align-items:flex-start; padding:0.25rem 0 1rem; border-bottom:1px solid var(--bw-border-subtle); margin-bottom:1.25rem; }
.bw-se-dhead-emoji { font-size:2.5rem; line-height:1; flex:0 0 auto; }
.bw-se-dhead-main { min-width:0; flex:1; }
.bw-se-dhead-top { display:flex; align-items:center; gap:0.6rem; flex-wrap:wrap; }
.bw-se-dhead-q { font-family:var(--bw-font-mono); font-size:0.65rem; font-weight:700; letter-spacing:0.08em; text-transform:uppercase; color:var(--bw-text-muted); }
.bw-se-dhead-name { font-family:var(--bw-font-display); font-weight:800; font-size:1.7rem; margin:0.2rem 0 0; color:var(--bw-text-primary); line-height:1.1; }
.bw-se-dhead-theme { font-size:0.9rem; color:var(--bw-text-secondary); margin:0.35rem 0 0; line-height:1.45; }
.bw-se-tag { font-size:0.6rem; font-weight:700; letter-spacing:0.03em; text-transform:uppercase; padding:0.12rem 0.4rem; border-radius:99px; white-space:nowrap; }
.bw-se-tag.current { color:var(--bw-gold); background:color-mix(in srgb, var(--bw-gold) 14%, transparent); }
.bw-se-tag.up { color:var(--bw-text-muted); background:var(--bw-panel); }
.bw-se-tag.past { color:var(--bw-text-muted); background:var(--bw-panel); }
.bw-se-group { margin-bottom:1.35rem; }
.bw-se-group-head { display:flex; align-items:center; gap:0.4rem; font-family:var(--bw-font-mono); font-size:0.66rem; font-weight:700; letter-spacing:0.1em; text-transform:uppercase; color:var(--bw-text-muted); margin:0 0 0.5rem; }
.bw-se-group-n { color:var(--bw-text-primary); background:var(--bw-panel); border-radius:99px; padding:0.05rem 0.4rem; letter-spacing:0; }

/* Ledger stacks on narrow screens (still hairline-divided, no boxes) */
@media (max-width:640px){
    .bw-se-cal { flex-direction:column; }
    .bw-se-cal-col { border-left:none; border-top:1px solid var(--bw-border-subtle); }
    .bw-se-cal-col:first-child { border-top:none; }
}

/* Season browse cards */
.bw-season-card { display:block; width:100%; text-align:left; cursor:pointer; background:var(--bw-surface); border:1px solid var(--bw-border-subtle); border-radius:12px; padding:1rem; transition:border-color 0.15s, transform 0.15s; }
.bw-season-card:hover { border-color:var(--bw-gold); transform:translateY(-1px); }
.bw-season-card-top { display:flex; align-items:center; gap:0.5rem; margin-bottom:0.4rem; }
.bw-season-card-emoji { font-size:1.4rem; }
.bw-season-card-name { font-size:1.05rem; font-weight:800; color:var(--bw-text-primary); flex:1; min-width:0; }
.bw-season-card-theme { font-size:0.8125rem; color:var(--bw-text-secondary); margin:0 0 0.6rem; }
.bw-season-chips { display:flex; flex-wrap:wrap; gap:0.35rem; }
.bw-season-chip { font-size:0.6875rem; font-weight:600; color:var(--bw-text-secondary); background:var(--bw-panel); border:1px solid var(--bw-border-subtle); border-radius:999px; padding:0.15rem 0.5rem; }
.bw-season-chip.muted { color:var(--bw-text-muted); }
.bw-season-badge { font-size:0.625rem; font-weight:800; letter-spacing:0.03em; text-transform:uppercase; padding:0.15rem 0.45rem; border-radius:999px; white-space:nowrap; }
.bw-season-badge.current { color:#fff; background:var(--bw-live,#16A34A); }
.bw-season-badge.up { color:var(--bw-gold); border:1px solid var(--bw-gold); }
.bw-season-badge.draft { color:var(--bw-text-muted); border:1px dashed var(--bw-border); }

/* Season & event detail */
.bw-season-detail-head, .bw-event-detail-head { display:flex; align-items:center; gap:0.75rem; margin:0.5rem 0 1rem; }
.bw-season-detail-head .bw-season-hero-emoji, .bw-event-detail-icon { font-size:2rem; }
.bw-event-detail { background:var(--bw-surface); border:1px solid var(--bw-border-subtle); border-radius:12px; padding:1.1rem; }
.bw-event-desc { font-size:0.875rem; color:var(--bw-text-secondary); margin:0 0 1rem; line-height:1.5; }
.bw-event-windows { display:grid; gap:0.4rem; margin:0 0 1.1rem; }
.bw-event-win { display:flex; justify-content:space-between; font-size:0.8125rem; padding:0.5rem 0.7rem; background:var(--bw-panel); border-radius:10px; }
.bw-event-win span { color:var(--bw-text-muted); }
.bw-event-win b { color:var(--bw-text-primary); }
.bw-event-cta { margin:0.5rem 0; }
.bw-event-cta .bw-btn { width:100%; }
.bw-event-actionrow { display:flex; align-items:center; justify-content:space-between; gap:0.75rem; }
.bw-event-foot { font-size:0.75rem; color:var(--bw-text-muted); margin:0.9rem 0 0; line-height:1.5; }

/* Admin seasons pipeline */
.bw-adm-season { background:var(--bw-surface); border:1px solid var(--bw-border-subtle); border-radius:10px; padding:0.85rem 1rem; margin-bottom:0.75rem; }
.bw-adm-season-head { display:flex; align-items:center; justify-content:space-between; gap:0.5rem; margin-bottom:0.5rem; flex-wrap:wrap; }
.bw-adm-season-actions, .bw-adm-event-actions { display:flex; gap:0.75rem; align-items:center; }
.bw-adm-status { font-size:0.6875rem; font-weight:700; text-transform:uppercase; letter-spacing:0.03em; padding:0.1rem 0.4rem; border-radius:6px; background:var(--bw-panel); color:var(--bw-text-muted); font-style:normal; }
.bw-adm-status.published { color:var(--bw-success,#16A34A); }
.bw-adm-event { display:flex; align-items:center; justify-content:space-between; gap:0.5rem; font-size:0.8125rem; color:var(--bw-text-secondary); padding:0.4rem 0; border-top:1px solid var(--bw-border-subtle); }
.bw-adm-event em { color:var(--bw-text-muted); font-style:normal; font-family:var(--bw-font-mono,monospace); font-size:0.6875rem; }
/* Reorder + feature controls (proposal 26 §5.9 step 5). Flat, hairline, and the
   drag affordance never becomes the only way to move a row. */
/* The row carries eight controls now. On a narrow console it wraps rather than
   clipping half of them off the right edge where nothing can reach them. */
.bw-adm-event { flex-wrap:wrap; }
.bw-adm-event-actions { display:flex; flex-wrap:wrap; align-items:center; gap:0.5rem; }
.bw-adm-event-grip { flex:0 0 auto; color:var(--bw-text-muted); font-size:0.75rem; cursor:grab; letter-spacing:-0.1em; }
.bw-adm-event.dragging { opacity:0.5; }
.bw-adm-event[draggable="true"]:focus-within { outline:2px solid var(--bw-gold); outline-offset:2px; border-radius:6px; }
.bw-adm-ord { border:1px solid var(--bw-border-subtle); background:transparent; color:var(--bw-text-muted); border-radius:6px; cursor:pointer; font-size:0.6875rem; line-height:1; padding:0.2rem 0.35rem; }
.bw-adm-ord:hover { color:var(--bw-text-primary); border-color:var(--bw-border-strong); }
.bw-adm-feat-on { color:var(--bw-gold); font-weight:700; }
.bw-adm-noevents { font-size:0.75rem; color:var(--bw-text-muted); margin:0.25rem 0 0; }

/* ── Side bets ─────────────────────────────────────────────────────────────── */
.bw-bet-head-actions { display:flex; gap:0.5rem; }
.bw-bet-nudge { background:color-mix(in srgb, var(--bw-gold) 12%, transparent); border:1px solid color-mix(in srgb, var(--bw-gold) 40%, transparent); border-radius:12px; padding:0.7rem 0.9rem; font-size:0.8125rem; color:var(--bw-text-primary); margin:0.75rem 0; }
.bw-bet-nudge .bw-textlink { font-weight:700; }

.bw-bet-list { display:grid; gap:0.5rem; margin:0.5rem 0 0.75rem; }
.bw-bet-row { display:flex; align-items:center; gap:0.65rem; width:100%; text-align:left; cursor:pointer; background:var(--bw-panel); border:1px solid var(--bw-border-subtle); border-radius:12px; padding:0.65rem 0.8rem; transition:border-color 0.15s; }
.bw-bet-row:hover { border-color:var(--bw-gold); }
.bw-bet-row-icon { font-size:1.3rem; flex:0 0 auto; }
.bw-bet-row-main { flex:1; min-width:0; display:flex; flex-direction:column; gap:0.2rem; }
.bw-bet-row-title { font-size:0.9rem; font-weight:700; color:var(--bw-text-primary); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.bw-bet-row-meta { display:flex; align-items:center; gap:0.45rem; flex-wrap:wrap; }
.bw-bet-scope { font-size:0.68rem; font-weight:600; color:var(--bw-text-secondary); }
.bw-bet-cat { font-size:0.68rem; color:var(--bw-text-muted); }
.bw-bet-takers { font-size:0.68rem; color:var(--bw-text-muted); }

.bw-bet-pill { font-size:0.68rem; font-weight:800; padding:0.18rem 0.5rem; border-radius:999px; white-space:nowrap; flex:0 0 auto; }
.bw-bet-pill.open { color:var(--bw-text-secondary); background:var(--bw-panel); border:1px solid var(--bw-border-subtle); }
.bw-bet-pill.live { color:#fff; background:var(--bw-live,#16A34A); }
.bw-bet-pill.due  { color:var(--bw-on-gold); background:var(--bw-gold); }
.bw-bet-pill.win  { color:#fff; background:var(--bw-success,#16A34A); }
.bw-bet-pill.loss { color:#fff; background:var(--bw-error,#DC2626); }
.bw-bet-pill.void, .bw-bet-pill.done { color:var(--bw-text-muted); background:var(--bw-panel); border:1px solid var(--bw-border-subtle); }

.bw-bet-start { display:flex; align-items:center; justify-content:center; gap:0.5rem; width:100%; cursor:pointer; background:var(--bw-panel); border:1px dashed var(--bw-border); border-radius:12px; padding:0.85rem; color:var(--bw-text-secondary); font-size:0.85rem; font-weight:600; }
.bw-bet-start:hover { border-color:var(--bw-gold); color:var(--bw-text-primary); }
.bw-bet-start span { font-size:1.1rem; }

/* Detail + take */
.bw-sbet-detail { background:var(--bw-surface); border:1px solid var(--bw-border-subtle); border-radius:12px; padding:1.1rem; }
.bw-sbet-detail-head { display:flex; align-items:flex-start; gap:0.75rem; margin-bottom:0.5rem; }
.bw-sbet-detail-icon { font-size:1.9rem; }
.bw-sbet-byline { font-size:0.78rem; color:var(--bw-text-muted); margin:0.2rem 0 0; }
.bw-sbet-items { display:grid; gap:0.9rem; margin-top:0.85rem; }
.bw-sbet-item { background:var(--bw-panel); border:1px solid var(--bw-border-subtle); border-radius:12px; padding:0.8rem; }
.bw-sbet-item-q { font-size:0.9rem; font-weight:700; color:var(--bw-text-primary); margin-bottom:0.6rem; }
.bw-sbet-opts { display:flex; flex-wrap:wrap; gap:0.4rem; }
.bw-sbet-opt { font-size:0.8125rem; font-weight:600; padding:0.4rem 0.7rem; border-radius:999px; border:1px solid var(--bw-border-subtle); background:var(--bw-surface); color:var(--bw-text-secondary); cursor:default; }
button.bw-sbet-opt { cursor:pointer; }
.bw-sbet-opt.picked { border-color:var(--bw-gold); background:color-mix(in srgb, var(--bw-gold) 16%, transparent); color:var(--bw-text-primary); }
.bw-sbet-opt.correct { border-color:var(--bw-success,#16A34A); background:color-mix(in srgb, var(--bw-success,#16A34A) 16%, transparent); color:var(--bw-text-primary); }
.bw-sbet-opt em { font-style:normal; font-size:0.68rem; color:var(--bw-text-muted); margin-left:0.25rem; }
.bw-sbet-actions { margin-top:1rem; }
.bw-sbet-actions .bw-btn { width:100%; }

/* Consensus bars */
.bw-sbet-bars { margin-top:0.7rem; display:grid; gap:0.35rem; }
.bw-sbet-bar { display:grid; grid-template-columns:1fr auto; align-items:center; gap:0.5rem; font-size:0.72rem; }
.bw-sbet-bar-label { color:var(--bw-text-secondary); grid-column:1; }
.bw-sbet-bar-label em { font-style:normal; color:var(--bw-gold); font-weight:700; }
.bw-sbet-bar-track { grid-column:1 / -1; grid-row:2; height:6px; border-radius:6px; background:var(--bw-panel); overflow:hidden; }
.bw-sbet-bar-fill { display:block; height:100%; background:var(--bw-text-muted); border-radius:6px; }
.bw-sbet-bar.mine .bw-sbet-bar-fill { background:var(--bw-gold); }
.bw-sbet-bar.correct .bw-sbet-bar-fill { background:var(--bw-success,#16A34A); }
.bw-sbet-bar-pct { grid-column:2; grid-row:1; color:var(--bw-text-muted); font-variant-numeric:tabular-nums; }

/* Browse grid */
.bw-bet-browse-grid { display:grid; gap:0.6rem; margin-top:0.5rem; }
@media (min-width:640px){ .bw-bet-browse-grid { grid-template-columns:repeat(2,1fr); } }
.bw-bet-browse-card { display:block; width:100%; text-align:left; cursor:pointer; background:var(--bw-surface); border:1px solid var(--bw-border-subtle); border-radius:10px; padding:0.9rem; transition:border-color 0.15s, transform 0.15s; }
.bw-bet-browse-card:hover { border-color:var(--bw-gold); transform:translateY(-1px); }
.bw-bet-browse-top { display:flex; align-items:center; gap:0.5rem; margin-bottom:0.35rem; }
.bw-bet-browse-title { font-size:0.95rem; font-weight:700; color:var(--bw-text-primary); }
.bw-bet-browse-lead { font-size:0.8rem; color:var(--bw-text-secondary); margin-top:0.5rem; font-weight:600; }
.bw-bet-browse-by { font-size:0.7rem; color:var(--bw-text-muted); margin-top:0.6rem; }

/* Editor */
.bw-bet-cat-row { display:flex; gap:0.5rem; }
.bw-bet-cat-row select { flex:1; min-width:0; }
.bw-bet-count { font-size:0.72rem; color:var(--bw-text-muted); font-weight:600; }
.bw-bet-item-edit { background:var(--bw-panel); border:1px solid var(--bw-border-subtle); border-radius:12px; padding:0.75rem; margin-bottom:0.6rem; }
.bw-bet-item-edit-head { display:flex; justify-content:space-between; align-items:center; font-size:0.75rem; font-weight:700; color:var(--bw-text-secondary); margin-bottom:0.5rem; }
.bw-bet-opts-edit { display:grid; gap:0.4rem; margin-top:0.5rem; }
.bw-bet-opt-row { display:flex; align-items:center; gap:0.4rem; }
.bw-bet-opt-row .bw-pm-input { flex:1; min-width:0; }
.bw-bet-pickdot { flex:0 0 auto; width:1.75rem; height:1.75rem; border-radius:999px; border:1px solid var(--bw-border-subtle); background:var(--bw-surface); color:var(--bw-text-muted); cursor:pointer; font-size:0.85rem; }
.bw-bet-pickdot.on { border-color:var(--bw-gold); color:var(--bw-gold); background:color-mix(in srgb, var(--bw-gold) 14%, transparent); }
.bw-bet-opt-x { flex:0 0 auto; width:1.6rem; height:1.6rem; border:none; background:transparent; color:var(--bw-text-muted); cursor:pointer; }
.bw-bet-pick-hint { font-size:0.7rem; color:var(--bw-text-muted); margin:0.4rem 0 0; }
.bw-bet-additem { width:100%; margin-top:0.25rem; }

/* Blocked-until-you-grade interstitial */
.bw-bet-gate { position:fixed; inset:0; z-index:1500; background:rgba(0,0,0,0.72); display:flex; align-items:center; justify-content:center; padding:1rem; overflow-y:auto; }
.bw-bet-gate-card { background:var(--bw-surface); border:1px solid var(--bw-border-subtle); border-radius:18px; max-width:440px; width:100%; padding:1.25rem; box-shadow:0 20px 60px rgba(0,0,0,0.4); }
.bw-bet-gate-head { display:flex; gap:0.75rem; align-items:flex-start; margin-bottom:1rem; }
.bw-bet-gate-emoji { font-size:1.9rem; }
.bw-bet-gate-head h2 { font-size:1.15rem; font-weight:800; color:var(--bw-text-primary); margin:0 0 0.25rem; }
.bw-bet-gate-head p { font-size:0.82rem; color:var(--bw-text-secondary); margin:0; line-height:1.5; }
.bw-bet-gate-more { color:var(--bw-gold); font-weight:600; }
.bw-bet-gate-items { display:grid; gap:0.75rem; margin-bottom:1rem; }
.bw-bet-gate-actions .bw-btn { width:100%; }
.bw-bet-gate-escape { text-align:center; font-size:0.75rem; color:var(--bw-text-muted); margin-top:0.85rem; }

/* ── Side-bet chat artifacts ───────────────────────────────────────────────── */
.bw-sbet-art { align-self:stretch; max-width:82%; margin:0.35rem auto; background:var(--bw-surface); border:1px solid var(--bw-border-subtle); border-left:3px solid var(--bw-gold); border-radius:12px; padding:0.7rem 0.85rem; }
.bw-sbet-art.due { border-left-color:var(--bw-gold); }
.bw-sbet-art.done { opacity:0.85; border-left-color:var(--bw-text-muted); }
.bw-sbet-art-tag { font-size:0.68rem; font-weight:800; letter-spacing:0.03em; text-transform:uppercase; color:var(--bw-gold); }
.bw-sbet-art-title { font-size:0.9rem; font-weight:700; color:var(--bw-text-primary); margin:0.3rem 0; }
.bw-sbet-art-meta { display:flex; flex-wrap:wrap; gap:0.5rem; align-items:center; margin-bottom:0.5rem; }
.bw-sbet-art-meta:empty { display:none; }
.bw-sbet-art-cta { display:inline-block; font-size:0.78rem; font-weight:700; color:var(--bw-on-gold); background:var(--bw-gold); border:none; border-radius:8px; padding:0.4rem 0.75rem; cursor:pointer; }
.bw-sbet-art.done .bw-sbet-art-cta { background:var(--bw-text-muted); }
.bw-sbet-art.takeable .bw-sbet-art-cta { background:var(--bw-success,#16A34A); }

.bw-sbet-result { display:flex; align-items:center; gap:0.5rem; justify-content:center; text-align:center; max-width:88%; margin:0.4rem auto; padding:0.55rem 0.85rem; background:color-mix(in srgb, var(--bw-success,#16A34A) 12%, transparent); border:1px solid color-mix(in srgb, var(--bw-success,#16A34A) 35%, transparent); border-radius:12px; font-size:0.8rem; color:var(--bw-text-primary); cursor:pointer; }
.bw-sbet-result-flag { font-size:1rem; }
/* The second link (proposal 27 §4.4): quiet, secondary, never competing with
   the artifact's own action. It is absent entirely on a solo or h2h bet. */
.bw-sbet-yardlink { display:inline-block; margin-left:0.6rem; font-size:0.75rem; font-weight:600; color:var(--bw-text-muted); text-decoration:none; border-bottom:1px solid var(--bw-border-subtle); }
.bw-sbet-yardlink:hover { color:var(--bw-text-primary); }

/* ── Side-bet trust + stats ────────────────────────────────────────────────── */
.bw-bet-verified { font-size:0.68rem; font-weight:700; color:var(--bw-success,#16A34A); margin-left:0.4rem; }
.bw-bet-challenged { font-size:0.68rem; font-weight:700; color:var(--bw-error,#DC2626); }
.bw-sbet-graded-foot { margin-top:0.5rem; }
.bw-sbet-graded-row { display:flex; align-items:center; gap:0.75rem; margin-top:0.35rem; }

.bw-sbet-statcard { margin-top:0.75rem; }
.bw-sbet-statcard-head { font-size:0.9rem; font-weight:800; color:var(--bw-text-primary); margin-bottom:0.6rem; }
.bw-sbet-statrow { display:grid; grid-template-columns:repeat(4,1fr); gap:0.5rem; }
.bw-sbet-stat { text-align:center; background:var(--bw-panel); border:1px solid var(--bw-border-subtle); border-radius:10px; padding:0.55rem 0.3rem; }
.bw-sbet-stat b { display:block; font-size:1.05rem; font-weight:800; color:var(--bw-text-primary); font-variant-numeric:tabular-nums; }
.bw-sbet-stat span { font-size:0.65rem; color:var(--bw-text-muted); text-transform:uppercase; letter-spacing:0.03em; }
.bw-sbet-reliability { font-size:0.75rem; color:var(--bw-text-secondary); margin:0.6rem 0 0; }
.bw-sbet-catstats { display:flex; flex-wrap:wrap; gap:0.4rem; margin-top:0.6rem; }
.bw-sbet-catstat { font-size:0.7rem; color:var(--bw-text-secondary); background:var(--bw-panel); border:1px solid var(--bw-border-subtle); border-radius:999px; padding:0.15rem 0.5rem; }
.bw-sbet-catstat b { color:var(--bw-text-primary); }
.bw-sbet-catstat em { color:var(--bw-text-muted); font-style:normal; }

.bw-adm-sbet { margin-bottom:0.75rem; }
.bw-adm-sbet-head { display:flex; align-items:center; gap:0.5rem; font-size:0.95rem; }
.bw-adm-sbet-by { font-size:0.72rem; color:var(--bw-text-muted); margin:0.2rem 0 0.5rem; }
.bw-adm-sbet-item { font-size:0.8rem; color:var(--bw-text-secondary); padding:0.15rem 0; }
.bw-adm-sbet-challs { margin:0.5rem 0; }
.bw-adm-sbet-chall { font-size:0.75rem; color:var(--bw-error,#DC2626); padding:0.1rem 0; }
.bw-adm-sbet-actions { display:flex; gap:0.5rem; margin-top:0.5rem; }

/* ── Fantasy commish tools ─────────────────────────────────────────────────── */
.bw-ctool-grid { display:grid; gap:0.6rem; margin-top:0.5rem; }
@media (min-width:560px){ .bw-ctool-grid { grid-template-columns:repeat(2,1fr); } }
.bw-ctool { display:flex; align-items:center; gap:0.7rem; width:100%; text-align:left; cursor:pointer; background:var(--bw-surface); border:1px solid var(--bw-border-subtle); border-radius:10px; padding:0.85rem; transition:border-color 0.15s, transform 0.15s; }
.bw-ctool:hover:not(:disabled) { border-color:var(--bw-gold); transform:translateY(-1px); }
.bw-ctool.soon { opacity:0.55; cursor:default; }
.bw-ctool-icon { font-size:1.5rem; flex:0 0 auto; width:2.4rem; height:2.4rem; display:flex; align-items:center; justify-content:center; background:var(--bw-panel); border-radius:10px; }
.bw-ctool-txt { display:flex; flex-direction:column; min-width:0; }
.bw-ctool-title { font-size:0.9rem; font-weight:700; color:var(--bw-text-primary); }
.bw-ctool-title em { font-style:normal; font-size:0.6rem; font-weight:700; text-transform:uppercase; color:var(--bw-text-muted); border:1px solid var(--bw-border-subtle); border-radius:5px; padding:0.05rem 0.3rem; margin-left:0.3rem; }
.bw-ctool-desc { font-size:0.75rem; color:var(--bw-text-secondary); }

/* Schedule generator */
.bw-sched-row2 { display:grid; grid-template-columns:1fr 1fr; gap:0.6rem; }
.bw-sched-rivrow { display:flex; align-items:center; gap:0.35rem; margin-bottom:0.4rem; }
.bw-sched-rivrow .bw-keep-input { margin:0; }
.bw-sched-rivwk { width:3.5rem; flex:0 0 auto; }
.bw-sched-vs { font-size:0.75rem; color:var(--bw-text-muted); }
.bw-sched-tabs { display:flex; gap:0.4rem; margin:1rem 0 0.6rem; }
.bw-sched-grid { display:grid; gap:0.5rem; grid-template-columns:repeat(auto-fill,minmax(150px,1fr)); }
.bw-sched-week { background:var(--bw-panel); border:1px solid var(--bw-border-subtle); border-radius:10px; padding:0.5rem 0.6rem; }
.bw-sched-wk-h { font-size:0.7rem; font-weight:800; text-transform:uppercase; letter-spacing:0.04em; color:var(--bw-gold); margin-bottom:0.35rem; }
.bw-sched-game { font-size:0.8rem; color:var(--bw-text-primary); padding:0.15rem 0; }
.bw-sched-game span { color:var(--bw-text-muted); font-size:0.7rem; }
.bw-sched-game.bye { color:var(--bw-text-muted); font-style:italic; }
.bw-sched-mtxwrap { overflow-x:auto; }
.bw-sched-mtx { border-collapse:collapse; font-size:0.7rem; }
.bw-sched-mtx th { padding:0.25rem 0.4rem; color:var(--bw-text-secondary); font-weight:600; text-align:right; white-space:nowrap; }
.bw-sched-mtx thead th { text-align:center; }
.bw-mtx { text-align:center; padding:0.25rem 0.45rem; border:1px solid var(--bw-border-subtle); font-variant-numeric:tabular-nums; font-weight:700; }
.bw-mtx-0 { color:var(--bw-text-muted); background:var(--bw-panel); }
.bw-mtx-1 { color:#fff; background:var(--bw-success,#16A34A); }
.bw-mtx-2 { color:#fff; background:#D9A400; }
.bw-mtx-3 { color:#fff; background:var(--bw-error,#DC2626); }
.bw-mtx-self { color:var(--bw-text-muted); background:transparent; }
.bw-sched-mtxlegend { display:flex; align-items:center; gap:0.3rem; font-size:0.72rem; color:var(--bw-text-muted); margin-top:0.6rem; flex-wrap:wrap; }
.bw-sched-mtxlegend .bw-mtx { padding:0.1rem 0.35rem; }
.bw-sched-b2b { font-size:0.78rem; color:var(--bw-text-secondary); margin-top:0.7rem; line-height:1.5; }

/* Draft grades */
.bw-draft-head { display:flex; align-items:center; justify-content:space-between; gap:0.5rem; margin-bottom:0.6rem; }
.bw-draft-pubrow { display:flex; align-items:center; justify-content:space-between; gap:0.5rem; padding:0.5rem 0.7rem; background:var(--bw-panel); border-radius:10px; margin-bottom:0.75rem; flex-wrap:wrap; }
.bw-draft-pubstate { font-size:0.78rem; color:var(--bw-text-secondary); }
.bw-draft-pubbtn { padding:0.35rem 0.8rem; font-size:0.78rem; }
.bw-draft-teams { display:grid; gap:0.4rem; grid-template-columns:repeat(auto-fill,minmax(150px,1fr)); }
.bw-draft-team { display:flex; align-items:center; justify-content:space-between; gap:0.4rem; cursor:pointer; background:var(--bw-panel); border:1px solid var(--bw-border-subtle); border-radius:10px; padding:0.55rem 0.7rem; text-align:left; }
.bw-draft-team:hover { border-color:var(--bw-gold); }
.bw-draft-team-nm { font-size:0.82rem; font-weight:600; color:var(--bw-text-primary); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.bw-draft-team-g { font-size:0.72rem; font-weight:800; padding:0.1rem 0.4rem; border-radius:6px; flex:0 0 auto; }
.bw-draft-team-g.ungraded { color:var(--bw-text-muted); border:1px dashed var(--bw-border); font-weight:600; }
.bw-draft-pickwrap { overflow-x:auto; margin-top:0.6rem; }
.bw-draft-picktable { width:100%; border-collapse:collapse; }
.bw-draft-picktable td { padding:0.3rem 0.35rem; border-bottom:1px solid var(--bw-border-subtle); vertical-align:middle; }
.bw-draft-picktable .bw-keep-input { margin:0; }
.bw-draft-pick-rd { font-family:var(--bw-font-mono,monospace); font-size:0.72rem; color:var(--bw-text-muted); white-space:nowrap; }
.bw-draft-pick-pl { font-size:0.8rem; color:var(--bw-text-primary); }
.bw-draft-pos { font-size:0.68rem; color:var(--bw-text-muted); }
.bw-draft-pnote { font-size:0.72rem; min-width:90px; }


/* ── iOS focus-zoom guard (KEEP LAST — cascade order is the point) ──────────
   Any focusable text field under 16px makes iOS Safari zoom the page on
   focus, which reads as "the whole screen became scrollable". This floor
   must beat every component font-size above, so it lives at the end of the
   file. Phones only; desktop keeps component sizing. */
@media (max-width: 768px) {
    /* Modal sheets (poolModal, marketplace, generic modal) append to BODY,
       not #bw-app — cover both roots or the sheet fields keep zooming. */
    #bw-app input, #bw-app select, #bw-app textarea,
    .bw-mk-overlay input, .bw-mk-overlay select, .bw-mk-overlay textarea,
    #modal-overlay input, #modal-overlay select, #modal-overlay textarea {
        font-size: 16px !important;
    }
}

/* ── Trade Machine (Brain) — flat, hairline, salmon accent ────────────────── */
.bw-tm-preset-row { display: flex; gap: 0.4rem; flex-wrap: wrap; }
.bw-tm-preset { flex: 1 1 auto; padding: 0.5rem 0.7rem; border: 1px solid var(--bw-border-subtle); background: var(--bw-surface); color: var(--bw-text-secondary); border-radius: 8px; font-size: 0.82rem; font-weight: 600; cursor: pointer; }
.bw-tm-preset.on { border-color: var(--bw-gold); color: var(--bw-text-primary); background: color-mix(in srgb, var(--bw-gold) 10%, transparent); }
.bw-tm-adv { margin-top: 0.7rem; }
.bw-tm-adv > summary { cursor: pointer; font-size: 0.82rem; color: var(--bw-text-muted); font-weight: 600; }
.bw-tm-fgroup { font-family: var(--bw-font-mono); font-size: 0.6rem; text-transform: uppercase; color: var(--bw-text-muted); letter-spacing: 0.06em; margin-left: 0.3rem; }

.bw-tm-verdict { padding: 1.1rem 1.15rem; }
.bw-tm-verdict-top { display: flex; align-items: stretch; gap: 1rem; justify-content: space-between; flex-wrap: wrap; }
.bw-tm-score { display: flex; flex-direction: column; }
.bw-tm-score-n { font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 800; font-size: 2.9rem; line-height: 0.95; letter-spacing: -0.03em; color: var(--bw-text-muted); }
.bw-tm-score.pos .bw-tm-score-n { color: var(--bw-success, #16a34a); }
.bw-tm-score.neg .bw-tm-score-n { color: var(--bw-gold-deep, #E07676); }
.bw-tm-score-lbl { font-weight: 700; font-size: 1rem; color: var(--bw-text-primary); margin-top: 0.2rem; }
.bw-tm-score-micro { font-family: var(--bw-font-mono); font-size: 0.62rem; text-transform: uppercase; letter-spacing: 0.12em; color: var(--bw-text-muted); margin-top: 0.15rem; }
.bw-tm-side { display: flex; flex-direction: column; align-items: flex-end; justify-content: center; gap: 0.35rem; text-align: right; }
.bw-tm-fair { display: flex; flex-direction: column; align-items: flex-end; }
.bw-tm-fair-n { font-weight: 800; font-size: 1.2rem; color: var(--bw-text-primary); }
.bw-tm-fair.ok .bw-tm-fair-n { color: var(--bw-success, #16a34a); }
.bw-tm-fair.bad .bw-tm-fair-n { color: var(--bw-gold-deep, #E07676); }
.bw-tm-fair-lbl { font-family: var(--bw-font-mono); font-size: 0.62rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--bw-text-muted); }
.bw-tm-rung { font-family: var(--bw-font-mono); font-size: 0.62rem; text-transform: uppercase; letter-spacing: 0.06em; color: var(--bw-text-muted); border: 1px solid var(--bw-border-subtle); border-radius: 999px; padding: 0.2rem 0.5rem; }
.bw-tm-summary { font-size: 0.94rem; line-height: 1.55; color: var(--bw-text-secondary); margin: 0.9rem 0 0.7rem; }
.bw-tm-reasons { display: flex; flex-direction: column; gap: 0.5rem; margin-top: 0.8rem; }
.bw-tm-reason { display: flex; gap: 0.55rem; align-items: flex-start; }
.bw-tm-reason-dot { width: 8px; height: 8px; border-radius: 50%; margin-top: 0.4rem; flex: 0 0 auto; background: var(--bw-text-muted); }
.bw-tm-reason-dot.value { background: var(--bw-gold); }
.bw-tm-reason-dot.behavior { background: var(--bw-navy-light, #2A3F66); }
.bw-tm-reason-dot.fit { background: var(--bw-success, #16a34a); }
.bw-tm-reason-txt { font-size: 0.88rem; line-height: 1.45; color: var(--bw-text-secondary); }
.bw-tm-chips { display: flex; flex-wrap: wrap; gap: 0.35rem; margin-top: 0.8rem; }
.bw-tm-chip2 { font-family: var(--bw-font-mono); font-size: 0.62rem; padding: 0.2rem 0.5rem; border: 1px solid var(--bw-border-subtle); border-radius: 999px; color: var(--bw-text-secondary); }

/* Equity panel (Phase 2): championship-odds impact + league ripple. Flat,
   hairline, salmon accent — no gradients, no single-side colored edges. */
.bw-tm-eq { margin: 0.85rem 0 0.2rem; }
.bw-tm-eq-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 0.55rem; }
.bw-tm-eq-cell { display: flex; flex-direction: column; gap: 0.2rem; padding: 0.55rem 0.65rem; border: 1px solid var(--bw-border-subtle); border-radius: 8px; background: var(--bw-panel); }
.bw-tm-eq-k { font-size: 0.66rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--bw-text-muted); }
.bw-tm-eq-v { font-family: var(--bw-font-mono); font-size: 0.9rem; font-weight: 700; color: var(--bw-text-secondary); }
.bw-tm-eq-v.pos, .bw-tm-eq-updown.up { color: var(--bw-success, #16a34a); }
.bw-tm-eq-v.neg, .bw-tm-eq-updown.down { color: var(--bw-gold-deep, #E07676); }
.bw-tm-eq-updown { font-family: var(--bw-font-mono); font-size: 0.9rem; font-weight: 700; }
.bw-tm-eq-ripple { margin-top: 0.7rem; border-top: 1px solid var(--bw-border-subtle); padding-top: 0.55rem; }
.bw-tm-eq-ripple-h { font-size: 0.66rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--bw-text-muted); margin-bottom: 0.35rem; }
.bw-tm-eq-ripple-row { display: flex; justify-content: space-between; align-items: baseline; padding: 0.18rem 0; }
.bw-tm-eq-ripple-name { font-size: 0.82rem; color: var(--bw-text-secondary); }
.bw-tm-eq-ripple-d { font-family: var(--bw-font-mono); font-size: 0.78rem; font-weight: 700; }
.bw-tm-eq-ripple-d.pos { color: var(--bw-success, #16a34a); }
.bw-tm-eq-ripple-d.neg { color: var(--bw-gold-deep, #E07676); }
.bw-tm-eq-diverge { font-size: 0.82rem; line-height: 1.5; color: var(--bw-text-secondary); margin: 0.6rem 0 0; padding: 0.55rem 0.65rem; border: 1px solid var(--bw-border-subtle); border-radius: 8px; }
@media (max-width: 480px) { .bw-tm-eq-grid { grid-template-columns: 1fr; } }

/* Acceptance / manager read (Phase 3). Flat + hairline; salmon accent. */
.bw-tm-acc { margin: 0.85rem 0 0.2rem; border: 1px solid var(--bw-border-subtle); border-radius: 8px; padding: 0.65rem 0.7rem; background: var(--bw-panel); }
.bw-tm-acc.suppressed { color: var(--bw-gold-deep, #E07676); }
.bw-tm-acc-top { display: flex; align-items: baseline; gap: 0.8rem; flex-wrap: wrap; }
.bw-tm-acc-p { display: flex; align-items: baseline; gap: 0.4rem; }
.bw-tm-acc-p .n { font-family: var(--bw-font-mono); font-size: 1.15rem; font-weight: 800; }
.bw-tm-acc-p.good .n { color: var(--bw-success, #16a34a); }
.bw-tm-acc-p.mid .n { color: var(--bw-text-secondary); }
.bw-tm-acc-p.bad .n { color: var(--bw-gold-deep, #E07676); }
.bw-tm-acc-p .lbl { font-size: 0.68rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--bw-text-muted); }
.bw-tm-acc-head { font-size: 0.9rem; font-weight: 700; color: var(--bw-text-primary); }
.bw-tm-acc-lines { margin: 0.55rem 0 0; padding-left: 1.05rem; display: flex; flex-direction: column; gap: 0.3rem; }
.bw-tm-acc-lines li { font-size: 0.84rem; line-height: 1.45; color: var(--bw-text-secondary); }

/* Inbox (Phase 3, §3.2a) — incoming offers atop the Trade Machine. */
.bw-tm-inbox { padding: 0.9rem 1rem; margin-bottom: 0.9rem; }
.bw-tm-inbox-hd { font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 800; font-size: 1rem; display: flex; align-items: center; gap: 0.5rem; }
.bw-tm-inbox-count { font-family: var(--bw-font-mono); font-size: 0.66rem; font-weight: 700; padding: 0.15rem 0.5rem; border-radius: 999px; background: rgba(245,156,156,0.14); color: var(--bw-gold-deep, #E07676); border: 1px solid rgba(245,156,156,0.35); }
.bw-tm-inbox-row { display: flex; align-items: center; justify-content: space-between; gap: 0.9rem; padding: 0.65rem 0; border-top: 1px solid var(--bw-border-subtle); }
.bw-tm-inbox-row:first-of-type { border-top: none; margin-top: 0.3rem; }
.bw-tm-inbox-main { min-width: 0; }
.bw-tm-inbox-from { font-size: 0.8rem; color: var(--bw-text-muted); margin-bottom: 0.2rem; }
.bw-tm-inbox-exp { font-family: var(--bw-font-mono); font-size: 0.68rem; }
.bw-tm-inbox-exp.soon { color: var(--bw-gold-deep, #E07676); }
.bw-tm-inbox-deal { display: flex; flex-direction: column; gap: 0.15rem; font-size: 0.86rem; color: var(--bw-text-secondary); line-height: 1.35; }
.bw-tm-inbox-deal b { color: var(--bw-text-muted); font-weight: 700; font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.03em; margin-right: 0.25rem; }
.bw-tm-inbox-side { display: flex; align-items: center; gap: 0.7rem; flex: 0 0 auto; }
.bw-tm-inbox-score { font-family: var(--bw-font-mono); font-size: 1.1rem; font-weight: 800; }
.bw-tm-inbox-score.pos { color: var(--bw-success, #16a34a); }
.bw-tm-inbox-score.neg { color: var(--bw-gold-deep, #E07676); }
.bw-tm-inbox-score.even { color: var(--bw-text-muted); }
.bw-tm-inbox-btn { font-size: 0.78rem; font-weight: 700; padding: 0.35rem 0.7rem; border-radius: 7px; border: 1px solid var(--bw-border-subtle); background: var(--bw-panel); color: var(--bw-text-primary); cursor: pointer; }
.bw-tm-inbox-btn:hover { border-color: var(--bw-gold-deep, #E07676); }

.bw-tm-ledger > summary { cursor: pointer; font-weight: 700; display: flex; align-items: center; gap: 0.5rem; }
.bw-tm-led-count { font-family: var(--bw-font-mono); font-size: 0.7rem; background: var(--bw-panel); border: 1px solid var(--bw-border-subtle); border-radius: 999px; padding: 0.1rem 0.45rem; color: var(--bw-text-muted); }
.bw-tm-ledrow { display: grid; grid-template-columns: 52px 1fr; gap: 0.7rem; padding: 0.6rem 0; border-top: 1px solid var(--bw-border-subtle); }
.bw-tm-led-season { font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 800; color: var(--bw-gold-deep, #E07676); font-size: 1rem; }
.bw-tm-led-side { font-size: 0.84rem; color: var(--bw-text-secondary); line-height: 1.4; }
.bw-tm-led-narr { font-size: 0.76rem; color: var(--bw-text-muted); margin-top: 0.2rem; }
.bw-tm-led-card { display: flex; flex-wrap: wrap; gap: 0.5rem 1rem; margin-top: 0.35rem; font-size: 0.8rem; color: var(--bw-text-secondary); }
.bw-tm-led-grade { display: inline-block; min-width: 1.4rem; text-align: center; font-family: var(--bw-font-mono); font-weight: 800; font-size: 0.72rem; padding: 0.05rem 0.3rem; border-radius: 5px; border: 1px solid var(--bw-border-subtle); color: var(--bw-text-muted); }
.bw-tm-led-grade.win { color: var(--bw-gold-deep, #E07676); border-color: rgba(245,156,156,0.4); }

/* ── Trade Machine UX v2 (docs/TRADE_MACHINE_UX_OVERHAUL_SPEC.md) ──────────
   Flat, hairline, salmon accent. No gradients, no single-side colored edges. */
.bw-tm-hd { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; }
.bw-tm-hd-right { display: flex; align-items: center; gap: 0.5rem; }
.bw-tm-gear { width: 34px; height: 34px; border-radius: var(--bw-radius-full, 999px); border: 1px solid var(--bw-border-subtle); background: var(--bw-surface); color: var(--bw-text-secondary); cursor: pointer; font-size: 0.95rem; }
.bw-tm-title { font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 800; font-size: 1.25rem; margin: 0.5rem 0 0.15rem; color: var(--bw-text-primary); }
.bw-tm-title-lg { display: block; font-family: var(--bw-font-mono); font-weight: 600; font-size: 0.62rem; text-transform: uppercase; letter-spacing: 0.12em; color: var(--bw-text-muted); margin-top: 0.15rem; }
.bw-tm-tabs { display: flex; gap: 0.35rem; margin: 0.7rem 0 0.9rem; overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
.bw-tm-tabs::-webkit-scrollbar { display: none; }
.bw-tm-tab { flex: 0 0 auto; padding: 0.42rem 0.85rem; border-radius: var(--bw-radius-full, 999px); border: 1px solid var(--bw-border-subtle); background: var(--bw-surface); color: var(--bw-text-secondary); font-size: 0.82rem; font-weight: 700; cursor: pointer; }
.bw-tm-tab.on { border-color: var(--bw-gold); color: var(--bw-text-primary); background: color-mix(in srgb, var(--bw-gold) 10%, transparent); }
.bw-tm-tabn { font-family: var(--bw-font-mono); font-size: 0.62rem; font-weight: 700; padding: 0.05rem 0.4rem; border-radius: 999px; background: color-mix(in srgb, var(--bw-gold) 14%, transparent); color: var(--bw-gold-deep, #E07676); border: 1px solid color-mix(in srgb, var(--bw-gold) 35%, transparent); margin-left: 0.2rem; }
.bw-tm-secmeta { font-family: var(--bw-font-mono); font-size: 0.62rem; text-transform: uppercase; letter-spacing: 0.1em; color: var(--bw-text-muted); margin: 0.9rem 0 0.4rem; }
.bw-tm-morelink { display: inline-block; background: none; border: none; color: var(--bw-text-secondary); font-size: 0.8rem; font-weight: 600; cursor: pointer; padding: 0.4rem 0; }
.bw-tm-sm { padding: 0.45rem 0.85rem; font-size: 0.8rem; }
.bw-tm-surface .pos, .bw-tm-shprev .pos { color: var(--bw-success, #059669); }
.bw-tm-surface .neg, .bw-tm-shprev .neg { color: var(--bw-gold-deep, #E07676); }
.bw-tm-surface .even { color: var(--bw-text-muted); }

/* currency + persona chips (§4.2/§4.3) */
.bw-tm-cur { font-family: var(--bw-font-mono); font-size: 0.6rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; padding: 0.16rem 0.45rem; border-radius: 999px; border: 1px solid var(--bw-border-subtle); color: var(--bw-text-secondary); background: var(--bw-panel); }
.bw-tm-persona { font-family: var(--bw-font-mono); font-size: 0.62rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: var(--bw-text-secondary); border: 1px solid var(--bw-border-subtle); border-radius: 999px; padding: 0.2rem 0.55rem; }
.bw-tm-rung { font-family: var(--bw-font-mono); font-size: 0.62rem; text-transform: uppercase; letter-spacing: 0.06em; color: var(--bw-text-muted); border: 1px solid var(--bw-border-subtle); border-radius: 999px; padding: 0.2rem 0.5rem; background: none; cursor: pointer; }
.bw-tm-exp { font-family: var(--bw-font-mono); font-size: 0.66rem; color: var(--bw-text-muted); }
.bw-tm-exp.soon { color: var(--bw-gold-deep, #E07676); }
.bw-tm-exp.today { color: var(--bw-gold-deep, #E07676); font-weight: 700; padding: 0.14rem 0.45rem; border-radius: 999px; background: color-mix(in srgb, var(--bw-gold) 14%, transparent); border: 1px solid color-mix(in srgb, var(--bw-gold) 35%, transparent); }

/* Desk offer cards (§6.1) */
.bw-tm-offer { padding: 0.9rem 1rem; margin-bottom: 0.7rem; }
.bw-tm-offer-top { display: flex; justify-content: space-between; align-items: center; gap: 0.6rem; }
.bw-tm-offer-top-r { display: inline-flex; align-items: center; gap: 0.4rem; flex: 0 0 auto; }
.bw-tm-offer-from { font-size: 0.86rem; font-weight: 700; color: var(--bw-text-primary); }
.bw-tm-offer-dismiss { border: none; background: none; color: var(--bw-text-muted); cursor: pointer; font-size: 0.8rem; line-height: 1; padding: 0.2rem 0.35rem; border-radius: var(--bw-radius-sm, 6px); }
.bw-tm-offer-dismiss:hover { color: var(--bw-text-primary); background: color-mix(in srgb, var(--bw-text-muted) 12%, transparent); }
.bw-tm-offer-deal { margin-top: 0.45rem; display: flex; flex-direction: column; gap: 0.15rem; font-size: 0.86rem; color: var(--bw-text-secondary); line-height: 1.4; }
.bw-tm-offer-deal b { color: var(--bw-text-muted); font-weight: 700; font-size: 0.66rem; text-transform: uppercase; letter-spacing: 0.04em; margin-right: 0.25rem; }
.bw-tm-offer-read { display: flex; align-items: center; gap: 0.5rem; margin-top: 0.55rem; }
.bw-tm-offer-score { font-family: var(--bw-font-mono); font-weight: 800; font-size: 0.92rem; }
.bw-tm-offer-sum { font-size: 0.8rem; color: var(--bw-text-muted); margin-top: 0.35rem; line-height: 1.45; }
.bw-tm-offer-actions { display: flex; gap: 0.5rem; margin-top: 0.7rem; }

/* Horizon Trades (proposal 07): the dual-horizon pair + defensibility chip. Flat,
   hairlines only, no gradients, salmon never red per house rules. */
.bw-tm-horizon .bw-tm-offer-from i { font-style: normal; font-family: var(--bw-font-mono); font-size: 0.66rem; color: var(--bw-text-muted); font-weight: 500; }
.bw-tm-horizon-pair { margin-top: 0.55rem; display: flex; flex-direction: column; gap: 0.25rem; padding: 0.55rem 0.65rem; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-sm, 6px); background: var(--bw-panel); }
.bw-tm-horizon-line { display: flex; justify-content: space-between; align-items: baseline; gap: 0.6rem; font-size: 0.84rem; color: var(--bw-text-secondary); }
.bw-tm-horizon-line b { color: var(--bw-text-primary); font-weight: 800; }
.bw-tm-horizon-line b.pos { color: var(--bw-success, #059669); }
.bw-tm-horizon-line i { font-style: normal; font-family: var(--bw-font-mono); font-size: 0.62rem; color: var(--bw-text-muted); white-space: nowrap; }
.bw-tm-horizon-def { margin-top: 0.5rem; font-family: var(--bw-font-mono); font-size: 0.68rem; letter-spacing: 0.02em; color: var(--bw-text-secondary); padding: 0.32rem 0.55rem; border: 1px solid var(--bw-border-subtle); border-radius: 999px; display: inline-block; }
.bw-tm-horizon-read { margin-top: 0.6rem; padding: 0.55rem 0.65rem; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-sm, 6px); background: var(--bw-panel); }
.bw-tm-horizon-read .bw-tm-secmeta { margin-bottom: 0.3rem; }
.bw-tm-horizon-read .bw-tm-horizon-line { margin-top: 0.15rem; }

/* Composer (§7): partner chips, tray, wells */
.bw-tm-pchips { display: flex; gap: 0.4rem; overflow-x: auto; padding-bottom: 0.25rem; -webkit-overflow-scrolling: touch; }
.bw-tm-pchip { flex: 0 0 auto; padding: 0.42rem 0.75rem; border-radius: 999px; border: 1px solid var(--bw-border-subtle); background: var(--bw-surface); color: var(--bw-text-secondary); font-size: 0.8rem; font-weight: 700; cursor: pointer; white-space: nowrap; }
.bw-tm-pchip.on { border-color: var(--bw-gold); color: var(--bw-text-primary); background: color-mix(in srgb, var(--bw-gold) 10%, transparent); }
.bw-tm-pcap { font-family: var(--bw-font-mono); font-size: 0.66rem; color: var(--bw-text-muted); margin: 0.25rem 0 0; }
.bw-tm-tray { padding: 0.8rem 0.9rem; margin-top: 0.7rem; }
.bw-tm-well-hd { display: flex; justify-content: space-between; align-items: baseline; font-family: var(--bw-font-mono); font-size: 0.62rem; text-transform: uppercase; letter-spacing: 0.1em; color: var(--bw-text-muted); }
.bw-tm-well-n { font-weight: 700; }
.bw-tm-well-body { display: flex; flex-wrap: wrap; gap: 0.35rem; margin: 0.45rem 0; min-height: 1.9rem; }
.bw-tm-well-empty { font-size: 0.8rem; color: var(--bw-text-muted); padding: 0.2rem 0; }
.bw-tm-asset { display: inline-flex; align-items: center; gap: 0.35rem; padding: 0.28rem 0.3rem 0.28rem 0.6rem; border: 1px solid var(--bw-border-subtle); border-radius: 999px; background: var(--bw-panel); font-size: 0.8rem; font-weight: 600; color: var(--bw-text-primary); }
.bw-tm-asset i { font-style: normal; font-family: var(--bw-font-mono); font-size: 0.6rem; color: var(--bw-text-muted); }
.bw-tm-asset-x { border: none; background: none; color: var(--bw-text-muted); cursor: pointer; font-size: 0.7rem; padding: 0.1rem 0.3rem; }
.bw-tm-asset-x:hover { color: var(--bw-gold-deep, #E07676); }
.bw-tm-well-actions { display: flex; gap: 0.4rem; }
.bw-tm-add { padding: 0.32rem 0.65rem; border-radius: var(--bw-radius-sm, 6px); border: 1px solid var(--bw-border-subtle); background: var(--bw-surface); color: var(--bw-text-secondary); font-size: 0.76rem; font-weight: 700; cursor: pointer; }
.bw-tm-add:hover { border-color: var(--bw-gold); }
.bw-tm-tray-mid { display: flex; justify-content: center; margin: 0.6rem 0; border-top: 1px solid var(--bw-border-subtle); }
.bw-tm-swap { margin-top: -0.85rem; padding: 0.25rem 0.7rem; border-radius: 999px; border: 1px solid var(--bw-border-subtle); background: var(--bw-surface); color: var(--bw-text-muted); font-size: 0.7rem; font-weight: 700; cursor: pointer; }
.bw-tm-asrow { font-size: 0.78rem; color: var(--bw-text-muted); margin-top: 0.6rem; display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; }
.bw-tm-asel { font-size: 0.78rem; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-sm, 6px); background: var(--bw-surface); color: var(--bw-text-secondary); padding: 0.2rem 0.4rem; }
.bw-tm-thread { font-size: 0.8rem; color: var(--bw-text-secondary); border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); padding: 0.5rem 0.7rem; margin-bottom: 0.7rem; background: var(--bw-panel); }

/* The persistent verdict bar (§7.5) */
.bw-tm-vbar { position: sticky; bottom: calc(64px + env(safe-area-inset-bottom)); z-index: 5; display: flex; justify-content: space-between; align-items: center; gap: 0.6rem; width: 100%; margin-top: 0.9rem; padding: 0.7rem 0.9rem; border: 1px solid var(--bw-border-strong, var(--bw-border-subtle)); border-radius: var(--bw-radius-md, 10px); background: var(--bw-surface); cursor: pointer; text-align: left; }
.bw-tm-vbar:disabled { cursor: default; }
.bw-tm-vbar-hint { font-size: 0.82rem; color: var(--bw-text-muted); }
.bw-tm-vbar-hint.shimmer { animation: tmPulse 1.2s ease-in-out infinite; }
.bw-tm-vbar-read { display: flex; align-items: center; gap: 0.5rem; font-size: 0.9rem; }
.bw-tm-vbar-read b { font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 800; }
.bw-tm-vbar-read.stale { opacity: 0.55; }
.bw-tm-vbar-read i { font-style: normal; font-size: 0.72rem; color: var(--bw-text-muted); }
.bw-tm-vbar-open { font-size: 0.8rem; font-weight: 700; color: var(--bw-text-secondary); flex: 0 0 auto; }
@keyframes tmPulse { 0%, 100% { opacity: 0.45; } 50% { opacity: 1; } }
@media (min-width: 769px) { .bw-tm-vbar { bottom: 0.5rem; } }

/* Sheets (roster / pick / config / data / share) */
.bw-tm-sheet { padding: 1rem 1.1rem calc(1rem + env(safe-area-inset-bottom)); max-width: 560px; width: 100%; }
.bw-tm-sheet-hd { display: flex; justify-content: space-between; align-items: center; gap: 0.6rem; font-weight: 800; font-family: var(--bw-font-display, 'Inter Tight'); font-size: 1rem; margin-bottom: 0.7rem; color: var(--bw-text-primary); }
.bw-tm-search { width: 100%; margin-bottom: 0.5rem; }
.bw-tm-pickrow { display: flex; gap: 0.35rem; flex-wrap: wrap; margin-bottom: 0.4rem; }
.bw-tm-pickchip { padding: 0.3rem 0.6rem; border-radius: 999px; border: 1px solid var(--bw-border-subtle); background: var(--bw-surface); color: var(--bw-text-secondary); font-size: 0.78rem; font-weight: 700; cursor: pointer; }
.bw-tm-pickchip.on { border-color: var(--bw-gold); color: var(--bw-text-primary); background: color-mix(in srgb, var(--bw-gold) 10%, transparent); }
.bw-tm-sortrow { font-size: 0.72rem; color: var(--bw-text-muted); display: flex; align-items: center; gap: 0.35rem; margin: 0.2rem 0 0.5rem; }
.bw-tm-sortbtn { border: none; background: none; color: var(--bw-text-muted); font-size: 0.72rem; font-weight: 700; cursor: pointer; padding: 0.15rem 0.3rem; border-radius: var(--bw-radius-sm, 6px); }
.bw-tm-sortbtn.on { color: var(--bw-text-primary); background: var(--bw-panel); }
.bw-tm-sheet-list { max-height: 46dvh; overflow-y: auto; overscroll-behavior: contain; border-top: 1px solid var(--bw-border-subtle); }
.bw-tm-rrow { display: flex; justify-content: space-between; align-items: center; gap: 0.6rem; width: 100%; padding: 0.55rem 0.15rem; border: none; border-bottom: 1px solid var(--bw-border-subtle); background: none; cursor: pointer; text-align: left; }
.bw-tm-rrow-main { font-size: 0.88rem; font-weight: 600; color: var(--bw-text-primary); display: flex; align-items: center; gap: 0.4rem; }
.bw-tm-rrow-meta { font-family: var(--bw-font-mono); font-size: 0.7rem; color: var(--bw-text-muted); flex: 0 0 auto; }
.bw-tm-rrow.on { background: color-mix(in srgb, var(--bw-gold) 7%, transparent); }
.bw-tm-rrow.on .bw-tm-rrow-meta { color: var(--bw-gold-deep, #E07676); }
.bw-tm-sheet-done { width: 100%; margin-top: 0.7rem; }
.bw-tm-datarow { display: grid; grid-template-columns: 110px 1fr; gap: 0.6rem; padding: 0.5rem 0; border-top: 1px solid var(--bw-border-subtle); font-size: 0.82rem; }
.bw-tm-datarow .k { font-family: var(--bw-font-mono); font-size: 0.64rem; text-transform: uppercase; letter-spacing: 0.06em; color: var(--bw-text-muted); padding-top: 0.15rem; }
.bw-tm-datarow .v { color: var(--bw-text-secondary); line-height: 1.45; }

/* The Answer Band (§4.1) */
.bw-tm-band { padding: 1.05rem 1.1rem; margin-bottom: 0.7rem; }
.bw-tm-band.isstale { opacity: 0.55; }
.bw-tm-band-top { display: flex; justify-content: space-between; align-items: center; gap: 0.5rem; flex-wrap: wrap; margin-bottom: 0.75rem; }
.bw-tm-band-right { display: flex; align-items: center; gap: 0.45rem; }
.bw-tm-band-label { font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 800; font-size: 1.9rem; line-height: 1.05; letter-spacing: -0.02em; color: var(--bw-text-primary); }
.bw-tm-band-label.pos { color: var(--bw-success, #059669); }
.bw-tm-band-label.neg { color: var(--bw-gold-deep, #E07676); }
.bw-tm-band-score { font-family: var(--bw-font-mono); font-weight: 800; font-size: 1.05rem; margin-top: 0.15rem; color: var(--bw-text-secondary); }
.bw-tm-band-score span { font-family: var(--bw-font-mono); font-size: 0.62rem; text-transform: uppercase; letter-spacing: 0.1em; color: var(--bw-text-muted); margin-left: 0.3rem; }
.bw-tm-meter { display: flex; gap: 2px; margin: 0.7rem 0 0.25rem; }
.bw-tm-cell { flex: 1 1 0; height: 10px; border: 1px solid var(--bw-border-subtle); border-radius: 2px; background: var(--bw-panel); }
.bw-tm-cell.pos { background: var(--bw-success, #059669); border-color: var(--bw-success, #059669); }
.bw-tm-cell.neg { background: var(--bw-gold-deep, #E07676); border-color: var(--bw-gold-deep, #E07676); }
.bw-tm-cell.zero, .bw-tm-cell.even { background: var(--bw-text-muted); border-color: var(--bw-text-muted); }
.bw-tm-meter-caps { display: flex; justify-content: space-between; font-family: var(--bw-font-mono); font-size: 0.56rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--bw-text-muted); margin-bottom: 0.6rem; }
.bw-tm-curline { display: flex; align-items: center; gap: 0.45rem; font-size: 0.78rem; color: var(--bw-text-muted); margin-top: 0.3rem; }
.bw-tm-kicker { font-size: 0.94rem; font-weight: 600; color: var(--bw-text-primary); margin-top: 0.55rem; line-height: 1.45; }
/* Season phase + your own contention: context under the kicker, quieter than it,
   because it tells you which number to read rather than adding one. */
.bw-tm-seasonread { font-size: 0.82rem; color: var(--bw-text-muted); margin-top: 0.4rem; line-height: 1.45; }
.bw-tm-rung.bw-tm-season { cursor: default; }
.bw-tm-band-div { border-top: 1px solid var(--bw-border-subtle); margin: 0.8rem 0; }
.bw-tm-slot { display: flex; flex-direction: column; gap: 0.25rem; }
.bw-tm-slot-k { font-family: var(--bw-font-mono); font-size: 0.62rem; text-transform: uppercase; letter-spacing: 0.1em; color: var(--bw-text-muted); }
.bw-tm-slot-p { font-family: var(--bw-font-mono); font-weight: 800; font-size: 1.05rem; }
.bw-tm-slot-p.good { color: var(--bw-success, #059669); }
.bw-tm-slot-p.mid { color: var(--bw-text-secondary); }
.bw-tm-slot-p.bad { color: var(--bw-gold-deep, #E07676); }
.bw-tm-slot-line { font-size: 0.82rem; color: var(--bw-text-secondary); line-height: 1.45; }
.bw-tm-slot-line.muted { color: var(--bw-text-muted); font-size: 0.76rem; }
.bw-tm-slot-warn { font-size: 0.84rem; color: var(--bw-gold-deep, #E07676); line-height: 1.45; }
.bw-tm-triage { align-self: flex-start; font-weight: 800; font-size: 0.95rem; padding: 0.3rem 0.7rem; border-radius: 999px; border: 1px solid var(--bw-border-subtle); color: var(--bw-text-primary); }
.bw-tm-triage.lean_accept { color: var(--bw-success, #059669); border-color: color-mix(in srgb, var(--bw-success, #059669) 40%, transparent); }
.bw-tm-triage.lean_decline, .bw-tm-triage.lean_counter { color: var(--bw-gold-deep, #E07676); border-color: color-mix(in srgb, var(--bw-gold) 40%, transparent); }
.bw-tm-shape { font-size: 0.8rem; color: var(--bw-text-muted); margin-top: 0.8rem; display: flex; align-items: center; gap: 0.45rem; flex-wrap: wrap; }
.bw-tm-unpriced { font-family: var(--bw-font-mono); font-size: 0.62rem; padding: 0.12rem 0.45rem; border-radius: 999px; border: 1px solid var(--bw-border-subtle); background: none; color: var(--bw-gold-deep, #E07676); cursor: pointer; }
.bw-tm-tension { font-size: 0.86rem; font-weight: 600; color: var(--bw-text-primary); border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); background: var(--bw-panel); padding: 0.55rem 0.7rem; margin-top: 0.7rem; line-height: 1.45; }
.bw-tm-band-actions { display: flex; gap: 0.5rem; margin-top: 0.9rem; flex-wrap: wrap; }
.bw-tm-stale { font-size: 0.78rem; color: var(--bw-text-secondary); border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); padding: 0.45rem 0.7rem; margin-bottom: 0.6rem; background: var(--bw-panel); }
.bw-tm-skel { height: 14px; border-radius: 4px; background: var(--bw-panel); border: 1px solid var(--bw-border-subtle); margin-bottom: 0.5rem; animation: tmPulse 1.2s ease-in-out infinite; }
.bw-tm-skel.w60 { width: 60%; } .bw-tm-skel.w80 { width: 80%; }

/* Second Opinion (§4.2) */
.bw-tm-so { padding: 0.85rem 1rem; margin-bottom: 0.7rem; }
.bw-tm-so-row { display: flex; align-items: center; gap: 0.55rem; padding: 0.3rem 0; font-size: 0.9rem; color: var(--bw-text-secondary); }
.bw-tm-so-row b { font-family: var(--bw-font-mono); font-weight: 800; min-width: 2.4rem; }
.bw-tm-so-txt { font-size: 0.82rem; color: var(--bw-text-muted); line-height: 1.5; margin: 0.4rem 0 0; }

/* Deep-dive folds (§4.5) */
.bw-tm-fold { padding: 0; margin-bottom: 0.55rem; }
.bw-tm-fold > summary { cursor: pointer; font-weight: 700; font-size: 0.92rem; color: var(--bw-text-primary); padding: 0.8rem 1rem; list-style: none; display: flex; justify-content: space-between; align-items: center; }
.bw-tm-fold > summary::-webkit-details-marker { display: none; }
.bw-tm-fold > summary::after { content: '›'; color: var(--bw-text-muted); transform: rotate(90deg); transition: transform var(--bw-transition-fast, 0.15s); }
.bw-tm-fold[open] > summary::after { transform: rotate(-90deg); }
.bw-tm-fold-body { padding: 0 1rem 0.9rem; border-top: 1px solid var(--bw-border-subtle); padding-top: 0.7rem; }
.bw-tm-arows { margin-top: 0.55rem; }
.bw-tm-arow { display: flex; justify-content: space-between; gap: 0.7rem; padding: 0.3rem 0; border-top: 1px solid var(--bw-border-subtle); font-size: 0.82rem; color: var(--bw-text-secondary); }
.bw-tm-arow b { font-family: var(--bw-font-mono); font-size: 0.74rem; flex: 0 0 auto; }
.bw-tm-pcard { display: flex; justify-content: space-between; align-items: center; gap: 0.6rem; padding: 0.45rem 0; border-top: 1px solid var(--bw-border-subtle); }
.bw-tm-pcard-name { font-size: 0.86rem; font-weight: 600; color: var(--bw-text-primary); display: flex; align-items: center; gap: 0.4rem; }
.bw-tm-pcard-meta { font-family: var(--bw-font-mono); font-size: 0.7rem; color: var(--bw-text-muted); flex: 0 0 auto; }
.bw-tm-pcard-meta i { font-style: normal; }
.bw-tm-shape-big { font-weight: 700; font-size: 0.95rem; color: var(--bw-text-primary); }
.bw-tm-shape-n { font-family: var(--bw-font-mono); font-size: 0.7rem; color: var(--bw-text-muted); font-weight: 600; margin-left: 0.3rem; }
.bw-tm-bal { display: flex; align-items: center; gap: 0.55rem; margin-top: 0.6rem; }
.bw-tm-bal-bar { flex: 1; display: flex; height: 14px; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-sm, 6px); overflow: hidden; }
.bw-tm-bal-give { background: color-mix(in srgb, var(--bw-gold-deep, #E07676) 22%, transparent); border-right: 1px solid var(--bw-border-subtle); }
.bw-tm-bal-get { background: color-mix(in srgb, var(--bw-success, #059669) 18%, transparent); }
.bw-tm-bal-caps { display: flex; justify-content: space-between; font-family: var(--bw-font-mono); font-size: 0.66rem; color: var(--bw-text-muted); margin-top: 0.25rem; }

/* Config sheet (§8) */
.bw-tm-precards { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.45rem; }
.bw-tm-precard { display: flex; flex-direction: column; gap: 0.25rem; text-align: left; padding: 0.6rem 0.65rem; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); background: var(--bw-surface); cursor: pointer; }
.bw-tm-precard b { font-size: 0.82rem; color: var(--bw-text-primary); }
.bw-tm-precard span { font-size: 0.68rem; color: var(--bw-text-muted); line-height: 1.35; }
.bw-tm-precard.on { border-color: var(--bw-gold); background: color-mix(in srgb, var(--bw-gold) 8%, transparent); }
.bw-tm-frow { display: flex; justify-content: space-between; align-items: center; gap: 0.7rem; padding: 0.5rem 0; border-top: 1px solid var(--bw-border-subtle); }
.bw-tm-frow-txt { min-width: 0; }
.bw-tm-frow-txt b { display: block; font-size: 0.84rem; color: var(--bw-text-primary); }
.bw-tm-frow-txt span { display: block; font-size: 0.7rem; color: var(--bw-text-muted); line-height: 1.35; margin-top: 0.1rem; }
.bw-tm-frow-seg { display: flex; border: 1px solid var(--bw-border-subtle); border-radius: 999px; overflow: hidden; flex: 0 0 auto; }
.bw-tm-seg { border: none; background: none; padding: 0.28rem 0.5rem; font-size: 0.66rem; font-weight: 700; color: var(--bw-text-muted); cursor: pointer; }
.bw-tm-seg.on { background: color-mix(in srgb, var(--bw-gold) 14%, transparent); color: var(--bw-text-primary); }
@media (max-width: 480px) { .bw-tm-precards { grid-template-columns: 1fr; } .bw-tm-frow { flex-wrap: wrap; } }

/* Share sheet (§10) */
.bw-tm-shmodes { display: flex; gap: 0.4rem; }
.bw-tm-shmode { flex: 1; padding: 0.5rem; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); background: var(--bw-surface); font-weight: 700; font-size: 0.84rem; color: var(--bw-text-secondary); cursor: pointer; }
.bw-tm-shmode.on { border-color: var(--bw-gold); color: var(--bw-text-primary); background: color-mix(in srgb, var(--bw-gold) 10%, transparent); }
.bw-tm-shexp { font-size: 0.78rem; color: var(--bw-text-muted); line-height: 1.5; margin: 0.6rem 0; }
.bw-tm-shprev { border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); background: var(--bw-panel); padding: 0.75rem 0.85rem; font-size: 0.84rem; color: var(--bw-text-secondary); }
.bw-tm-shprev p { margin: 0.45rem 0 0; font-size: 0.8rem; line-height: 1.5; }
.bw-tm-shprev b { color: var(--bw-text-muted); font-weight: 700; font-size: 0.66rem; text-transform: uppercase; letter-spacing: 0.04em; margin-right: 0.25rem; }

/* Ledger (§9) */
.bw-tm-hero { margin-bottom: 0.8rem; }
.bw-tm-hero-t { font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 800; font-size: 1.15rem; color: var(--bw-text-primary); }
.bw-tm-hero-s { font-size: 0.8rem; color: var(--bw-text-muted); margin-top: 0.2rem; line-height: 1.45; }
.bw-tm-recs { display: flex; gap: 0.4rem; overflow-x: auto; padding-bottom: 0.3rem; margin-bottom: 0.5rem; -webkit-overflow-scrolling: touch; }
.bw-tm-rec { flex: 0 0 auto; font-family: var(--bw-font-mono); font-size: 0.68rem; font-weight: 600; padding: 0.3rem 0.6rem; border-radius: 999px; border: 1px solid var(--bw-border-subtle); background: var(--bw-surface); color: var(--bw-text-secondary); cursor: pointer; white-space: nowrap; }
.bw-tm-rec.on { border-color: var(--bw-gold); color: var(--bw-text-primary); background: color-mix(in srgb, var(--bw-gold) 10%, transparent); }
.bw-tm-led-year { font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 800; font-size: 1rem; color: var(--bw-gold-deep, #E07676); margin: 0.9rem 0 0.45rem; }
.bw-tm-ledcard { padding: 0.75rem 0.9rem; margin-bottom: 0.55rem; }
.bw-tm-ledcard .bw-tm-led-side { display: flex; align-items: baseline; gap: 0.4rem; flex-wrap: wrap; }
.bw-tm-led-pts { font-family: var(--bw-font-mono); font-size: 0.7rem; color: var(--bw-text-muted); }

/* Responsive: desktop two-pane (§11.3) */
.bw-tm-canvas { display: none; }
@media (min-width: 1024px) {
    .bw-tm-two { display: grid; grid-template-columns: minmax(340px, 420px) 1fr; gap: 1.1rem; align-items: start; }
    .bw-tm-canvas { display: block; position: sticky; top: 1rem; }
    .bw-tm-two + .bw-tm-vbar { display: none; }
}

/* ── Trade Machine UX v2.1: partner grid + TL;DR facts + detail screen ────── */
.bw-tm-pgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 0.45rem; }
.bw-tm-pcard2 { display: flex; flex-direction: column; gap: 0.15rem; text-align: left; padding: 0.55rem 0.7rem; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); background: var(--bw-surface); cursor: pointer; min-width: 0; }
.bw-tm-pcard2 b { font-size: 0.84rem; color: var(--bw-text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bw-tm-pcard2 span { font-family: var(--bw-font-mono); font-size: 0.64rem; color: var(--bw-text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bw-tm-pcard2.on { border-color: var(--bw-gold); background: color-mix(in srgb, var(--bw-gold) 8%, transparent); }

.bw-tm-facts { padding: 0.9rem 1rem; margin-bottom: 0.7rem; }
.bw-tm-facts-odds { display: flex; gap: 1.1rem; flex-wrap: wrap; font-size: 0.8rem; color: var(--bw-text-muted); }
.bw-tm-facts-odds b { font-family: var(--bw-font-mono); font-weight: 700; margin-left: 0.3rem; }

.bw-tm-breakdown { display: block; width: 100%; text-align: left; padding: 0.85rem 1rem; border: 1px solid var(--bw-border-strong, var(--bw-border-subtle)); border-radius: var(--bw-radius-md, 10px); background: var(--bw-surface); color: var(--bw-text-primary); font-weight: 700; font-size: 0.9rem; cursor: pointer; margin-bottom: 0.7rem; }
.bw-tm-breakdown:hover { border-color: var(--bw-gold); }

.bw-tm-detail-hd { display: flex; justify-content: space-between; align-items: center; gap: 0.7rem; flex-wrap: wrap; margin: 0.3rem 0 0.6rem; }
.bw-tm-detail-score { font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 800; font-size: 1.25rem; }
.bw-tm-jumps { display: flex; gap: 0.35rem; flex-wrap: wrap; margin-bottom: 0.8rem; }
.bw-tm-jump { font-family: var(--bw-font-mono); font-size: 0.66rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; padding: 0.3rem 0.6rem; border: 1px solid var(--bw-border-subtle); border-radius: 999px; color: var(--bw-text-secondary); text-decoration: none; }
.bw-tm-jump:hover { border-color: var(--bw-gold); color: var(--bw-text-primary); }
.bw-tm-sec { padding: 0.9rem 1rem; margin-bottom: 0.65rem; scroll-margin-top: 0.8rem; }
.bw-tm-sec-t { font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 800; font-size: 0.98rem; color: var(--bw-text-primary); margin-bottom: 0.6rem; padding-bottom: 0.5rem; border-bottom: 1px solid var(--bw-border-subtle); }

/* Trade proposal cards in chat + the propose sheet (Stage 1.5) */
.bw-tm-chatcard { border: 1px solid var(--bw-border-strong, var(--bw-border-subtle)); border-radius: var(--bw-radius-md, 10px); background: var(--bw-surface); padding: 0.8rem 0.9rem; margin: 0.5rem 0; max-width: 480px; }
.bw-tm-chatcard-hd { font-weight: 800; font-size: 0.9rem; color: var(--bw-text-primary); }
.bw-tm-chatcard-deal { margin-top: 0.45rem; display: flex; flex-direction: column; gap: 0.15rem; font-size: 0.84rem; color: var(--bw-text-secondary); line-height: 1.4; }
.bw-tm-chatcard-deal b { color: var(--bw-text-primary); font-weight: 700; }
.bw-tm-chatcard-fair { font-family: var(--bw-font-mono); font-size: 0.68rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); margin-top: 0.45rem; }
.bw-tm-chatcard-note { font-size: 0.84rem; color: var(--bw-text-secondary); border-top: 1px solid var(--bw-border-subtle); margin-top: 0.5rem; padding-top: 0.5rem; font-style: italic; }
.bw-tm-chatcard-actions { margin-top: 0.6rem; }
.bw-tm-chatcard-meta { font-size: 0.68rem; color: var(--bw-text-muted); margin-top: 0.5rem; }
.bw-tm-notebox { width: 100%; min-height: 72px; resize: vertical; font-family: inherit; }

/* ── What-If Machine (docs/WHAT_IF_MACHINE_SPEC.md §9) ─────────────────────── */
.bw-wi-block { display: flex; align-items: center; gap: 0.55rem; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); background: var(--bw-surface); padding: 0.55rem 0.7rem; margin-bottom: 0.45rem; }
.bw-wi-block-n { font-family: var(--bw-font-mono); font-weight: 800; font-size: 0.72rem; color: var(--bw-gold-deep, #E07676); flex: 0 0 auto; }
.bw-wi-block-t { font-size: 0.84rem; color: var(--bw-text-primary); line-height: 1.4; min-width: 0; flex: 1; }
.bw-wi-beh { display: flex; flex-direction: column; gap: 0.25rem; }
.bw-wi-beh > span { font-family: var(--bw-font-mono); font-size: 0.62rem; text-transform: uppercase; letter-spacing: 0.1em; color: var(--bw-text-muted); }
.bw-wi-beh select { width: 100%; }
.bw-wi-chips { display: flex; gap: 0.35rem; flex-wrap: wrap; }
.bw-wi-chip { font-family: var(--bw-font-mono); font-size: 0.66rem; font-weight: 700; padding: 0.25rem 0.55rem; border: 1px solid var(--bw-border-subtle); border-radius: 999px; color: var(--bw-text-secondary); }
.bw-wi-btype { display: flex; flex-direction: column; gap: 0.2rem; width: 100%; text-align: left; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); background: var(--bw-surface); padding: 0.65rem 0.75rem; margin-bottom: 0.45rem; cursor: pointer; }
.bw-wi-btype b { font-size: 0.88rem; color: var(--bw-text-primary); }
.bw-wi-btype span { font-size: 0.74rem; color: var(--bw-text-muted); }
.bw-wi-btype:hover { border-color: var(--bw-gold); }
.bw-wi-pick { display: block; width: 100%; text-align: left; border: none; border-top: 1px solid var(--bw-border-subtle); background: none; padding: 0.55rem 0.1rem; font-size: 0.82rem; color: var(--bw-text-secondary); cursor: pointer; line-height: 1.4; }
.bw-wi-pick b { color: var(--bw-text-primary); margin-right: 0.3rem; }
.bw-wi-pick:hover { color: var(--bw-text-primary); }
.bw-wi-picklist { max-height: 32dvh; overflow-y: auto; overscroll-behavior: contain; border-top: 1px solid var(--bw-border-subtle); }
.bw-wi-prow { display: flex; justify-content: space-between; align-items: center; gap: 0.6rem; width: 100%; padding: 0.45rem 0.15rem; border: none; border-bottom: 1px solid var(--bw-border-subtle); background: none; cursor: pointer; text-align: left; font-size: 0.84rem; color: var(--bw-text-primary); }
.bw-wi-prow.on { background: color-mix(in srgb, var(--bw-gold) 8%, transparent); }
.bw-wi-feedrow { display: flex; gap: 0.6rem; padding: 0.45rem 0; border-top: 1px solid var(--bw-border-subtle); align-items: baseline; }
.bw-wi-feedrow:first-of-type { border-top: none; }
.bw-wi-feedwk { font-family: var(--bw-font-mono); font-size: 0.66rem; font-weight: 700; color: var(--bw-text-muted); flex: 0 0 3.2rem; }
.bw-wi-feedtxt { font-size: 0.86rem; color: var(--bw-text-secondary); line-height: 1.45; }
.bw-wi-model { font-family: var(--bw-font-mono); font-size: 0.58rem; text-transform: uppercase; letter-spacing: 0.06em; padding: 0.08rem 0.35rem; border: 1px solid var(--bw-border-subtle); border-radius: 999px; color: var(--bw-gold-deep, #E07676); margin-left: 0.3rem; }
.bw-wi-standrow { display: grid; grid-template-columns: 1fr auto auto; gap: 0.8rem; padding: 0.4rem 0; border-top: 1px solid var(--bw-border-subtle); font-size: 0.84rem; color: var(--bw-text-primary); align-items: baseline; }
.bw-wi-standhd { border-top: none; font-family: var(--bw-font-mono); font-size: 0.62rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--bw-text-muted); }
.bw-wi-standv { font-family: var(--bw-font-mono); font-size: 0.78rem; color: var(--bw-text-secondary); min-width: 5.2rem; text-align: right; }

/* Win-Win Finder cards (docs/TRADE_FINDER_PLAN.md §5) */
.bw-tm-winwin { display: flex; align-items: baseline; gap: 0.35rem; font-family: var(--bw-font-mono); font-weight: 800; font-size: 0.88rem; flex-wrap: wrap; }
.bw-tm-winwin i { font-style: normal; font-family: var(--bw-font-mono); font-size: 0.58rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; color: var(--bw-text-muted); margin-left: 0.25rem; }

/* ── Keeper Advisor (proposal 01) — flat, hairline, salmon for negatives only ── */
.bw-ka-surface { display: block; }
.bw-ka-surface .pos { color: var(--bw-success, #059669); }
.bw-ka-surface .neg { color: var(--bw-gold-deep, #E07676); }  /* salmon, never red */

.bw-ka-tldr { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 12px; padding: 0.85rem 0.95rem; margin-bottom: 0.9rem; }
.bw-ka-tldr-lead { font-family: var(--bw-font-mono); font-size: 0.6rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.1em; color: var(--bw-text-muted); margin-bottom: 0.35rem; }
.bw-ka-tldr-head { font-weight: 800; font-size: 1.02rem; color: var(--bw-text-primary); line-height: 1.3; }
.bw-ka-tldr-sub { font-size: 0.85rem; color: var(--bw-text-secondary); margin-top: 0.25rem; }
.bw-ka-tldr-actions { margin-top: 0.75rem; }

.bw-ka-banner { margin-top: 0.6rem; font-size: 0.78rem; line-height: 1.4; color: var(--bw-text-secondary); background: color-mix(in srgb, var(--bw-gold-deep, #E07676) 9%, transparent); border: 1px solid color-mix(in srgb, var(--bw-gold-deep, #E07676) 32%, transparent); border-radius: 9px; padding: 0.5rem 0.65rem; }

/* "How these numbers work": quiet board caption + the methodology sheet body. */
.bw-ka-boardcap { display: block; font-size: 0.72rem; line-height: 1.45; color: var(--bw-text-muted); margin: 0 0.15rem 0.5rem; }
.bw-ka-how { display: inline; background: none; border: 0; padding: 0; font: inherit; font-weight: 700; color: var(--bw-text-secondary); text-decoration: underline; text-underline-offset: 2px; cursor: pointer; }
.bw-ka-how:hover { color: var(--bw-text-primary); }
.bw-ka-mdi-p { font-size: 0.86rem; line-height: 1.5; color: var(--bw-text-secondary); margin: 0 0 0.4rem; }
.bw-ka-mdi-p:last-child { margin-bottom: 0; }

.bw-ka-rows { display: flex; flex-direction: column; gap: 0.4rem; }
.bw-ka-row { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 10px; padding: 0.55rem 0.7rem; }
.bw-ka-row.selectable { cursor: pointer; }
.bw-ka-row.sel { border-color: var(--bw-gold); background: color-mix(in srgb, var(--bw-gold) 8%, var(--bw-surface)); }
.bw-ka-row-main { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; }
.bw-ka-row-sub { font-size: 0.72rem; color: var(--bw-text-muted); margin-top: 0.3rem; }
.bw-ka-chip { font-family: var(--bw-font-mono); font-size: 0.56rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; padding: 0.15rem 0.4rem; border-radius: 5px; border: 1px solid var(--bw-border-subtle); color: var(--bw-text-muted); white-space: nowrap; }
.bw-ka-chip.keep { color: var(--bw-success, #059669); border-color: color-mix(in srgb, var(--bw-success, #059669) 45%, transparent); }
.bw-ka-chip.bubble { color: var(--bw-gold-deep, #E07676); border-color: color-mix(in srgb, var(--bw-gold-deep, #E07676) 45%, transparent); }
.bw-ka-chip.letgo, .bw-ka-chip.ineli { color: var(--bw-text-muted); }
.bw-ka-name { font-weight: 700; font-size: 0.9rem; color: var(--bw-text-primary); }
.bw-ka-pos { font-family: var(--bw-font-mono); font-size: 0.62rem; font-weight: 600; color: var(--bw-text-muted); }
.bw-ka-cost { font-family: var(--bw-font-mono); font-size: 0.72rem; color: var(--bw-text-secondary); }
.bw-ka-surplus { margin-left: auto; font-family: var(--bw-font-mono); font-weight: 800; font-size: 0.9rem; }
.bw-ka-surplus.muted { font-weight: 600; font-size: 0.72rem; color: var(--bw-text-muted); text-transform: lowercase; }
.bw-ka-trend { font-family: var(--bw-font-mono); font-size: 0.66rem; color: var(--bw-text-muted); flex-basis: 100%; }
.bw-ka-yearchip { display: inline-block; font-family: var(--bw-font-mono); font-size: 0.62rem; color: var(--bw-text-muted); border: 1px solid var(--bw-border-subtle); border-radius: 999px; padding: 0 0.4rem; margin-left: 0.3rem; }

.bw-ka-declbar { position: sticky; bottom: 0; display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; margin-top: 0.9rem; padding: 0.7rem 0.85rem; background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 12px; }
.bw-ka-declcount { font-family: var(--bw-font-mono); font-size: 0.8rem; font-weight: 700; color: var(--bw-text-secondary); }

.bw-ka-mkt-head { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 12px; padding: 0.75rem 0.9rem; margin-bottom: 0.8rem; }
.bw-ka-mkt-line { font-size: 0.82rem; color: var(--bw-text-secondary); margin-top: 0.2rem; }
.bw-ka-mkt-line.strong { font-weight: 800; font-size: 0.95rem; color: var(--bw-text-primary); margin-top: 0; }
.bw-ka-mkt-rows, .bw-ka-sheet-rows { display: flex; flex-direction: column; gap: 0.4rem; }
.bw-ka-mkt-row, .bw-ka-sheet-row { display: flex; align-items: baseline; gap: 0.6rem; flex-wrap: wrap; background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 10px; padding: 0.55rem 0.7rem; }
.bw-ka-mkt-team { font-weight: 700; font-size: 0.86rem; color: var(--bw-text-primary); min-width: 8rem; }
.bw-ka-mkt-status { font-family: var(--bw-font-mono); font-size: 0.72rem; color: var(--bw-text-muted); }
.bw-ka-mkt-status.sealed { color: var(--bw-text-secondary); }
.bw-ka-mkt-keeps { font-size: 0.8rem; color: var(--bw-text-secondary); flex: 1 1 12rem; }
.bw-ka-projchip { font-family: var(--bw-font-mono); font-size: 0.56rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); border: 1px solid var(--bw-border-subtle); border-radius: 999px; padding: 0 0.35rem; }
.bw-ka-mkt-value { font-family: var(--bw-font-mono); font-size: 0.68rem; font-weight: 700; color: var(--bw-text-secondary); margin-left: auto; white-space: nowrap; }

/* League-wide keeper leaderboard */
.bw-ka-lead { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 12px; padding: 0.8rem 0.9rem; margin-bottom: 0.8rem; }
.bw-ka-lead-hd { font-weight: 800; font-size: 0.95rem; color: var(--bw-text-primary); }
.bw-ka-lead-sub { font-size: 0.76rem; color: var(--bw-text-muted); margin: 0.15rem 0 0.6rem; }
.bw-ka-lead-row { display: flex; align-items: baseline; gap: 0.6rem; padding: 0.35rem 0; border-top: 1px solid var(--bw-border-subtle); }
.bw-ka-lead-row:first-of-type { border-top: none; }
.bw-ka-lead-rank { font-family: var(--bw-font-mono); font-size: 0.72rem; color: var(--bw-text-muted); min-width: 1.2rem; }
.bw-ka-lead-name { font-weight: 700; font-size: 0.85rem; color: var(--bw-text-primary); flex: 1; }
.bw-ka-lead-team { display: block; font-family: var(--bw-font-mono); font-size: 0.64rem; font-weight: 500; color: var(--bw-text-muted); }
.bw-ka-lead-val { font-family: var(--bw-font-mono); font-weight: 800; font-size: 0.85rem; white-space: nowrap; }
/* Post-lock scan: every team's declared set, read-only, one page. Flat cards,
   hairline borders, salmon only for a negative number. */
.bw-ka-scan-head { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 12px; padding: 0.75rem 0.9rem; margin-bottom: 0.8rem; }
.bw-ka-scan-count { font-weight: 800; font-size: 0.95rem; color: var(--bw-text-primary); }
.bw-ka-scan-note { font-size: 0.78rem; color: var(--bw-text-secondary); margin-top: 0.25rem; }
.bw-ka-scan-tools { display: flex; align-items: center; justify-content: space-between; gap: 0.6rem; margin-top: 0.6rem; flex-wrap: wrap; }
.bw-ka-scan-ro { font-family: var(--bw-font-mono); font-size: 0.58rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--bw-text-muted); border: 1px solid var(--bw-border-subtle); border-radius: 999px; padding: 0.1rem 0.45rem; }
.bw-ka-scan-sort { display: inline-flex; gap: 0.3rem; }
.bw-ka-scan-sortbtn { font-family: var(--bw-font-mono); font-size: 0.66rem; color: var(--bw-text-muted); background: none; border: 1px solid var(--bw-border-subtle); border-radius: 999px; padding: 0.15rem 0.55rem; cursor: pointer; }
.bw-ka-scan-sortbtn.on { color: var(--bw-text-primary); border-color: var(--bw-text-muted); }

.bw-ka-scan { display: grid; grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr)); gap: 0.5rem; }
.bw-ka-scan-card { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 10px; padding: 0.6rem 0.7rem; }
.bw-ka-scan-card.mine { border-color: var(--bw-text-muted); }
.bw-ka-scan-top { display: flex; align-items: baseline; gap: 0.4rem; flex-wrap: wrap; margin-bottom: 0.4rem; }
.bw-ka-scan-team { font-weight: 700; font-size: 0.86rem; color: var(--bw-text-primary); background: none; border: none; padding: 0; cursor: pointer; text-align: left; }
.bw-ka-scan-you { font-family: var(--bw-font-mono); font-size: 0.56rem; text-transform: uppercase; letter-spacing: 0.06em; color: var(--bw-text-muted); border: 1px solid var(--bw-border-subtle); border-radius: 999px; padding: 0 0.35rem; }
.bw-ka-scan-partial { font-family: var(--bw-font-mono); font-size: 0.66rem; color: var(--bw-text-muted); }
.bw-ka-scan-total { font-family: var(--bw-font-mono); font-size: 0.68rem; font-weight: 700; margin-left: auto; white-space: nowrap; }
.bw-ka-scan-total.pos { color: var(--bw-success, #059669); }
.bw-ka-scan-total.neg { color: var(--bw-gold-deep, #E07676); }
.bw-ka-scan-keeps { display: flex; flex-direction: column; }
.bw-ka-scan-keep { display: flex; align-items: baseline; gap: 0.5rem; padding: 0.3rem 0; border-top: 1px solid var(--bw-border-subtle); }
.bw-ka-scan-keep:first-child { border-top: none; }
.bw-ka-scan-keep.empty { font-family: var(--bw-font-mono); font-size: 0.7rem; color: var(--bw-text-muted); }
.bw-ka-scan-kn { font-size: 0.82rem; color: var(--bw-text-primary); flex: 1 1 auto; }
.bw-ka-scan-pos { font-family: var(--bw-font-mono); font-size: 0.6rem; color: var(--bw-text-muted); margin-left: 0.3rem; }
.bw-ka-scan-kr { font-family: var(--bw-font-mono); font-size: 0.66rem; color: var(--bw-text-muted); white-space: nowrap; }
.bw-ka-scan-kv { font-family: var(--bw-font-mono); font-size: 0.72rem; font-weight: 700; white-space: nowrap; min-width: 3.4rem; text-align: right; }
.bw-ka-scan-kv.pos { color: var(--bw-success, #059669); }
.bw-ka-scan-kv.neg { color: var(--bw-gold-deep, #E07676); }
.bw-ka-scan-kv.none { color: var(--bw-text-muted); font-weight: 500; }
.bw-ka-scan-actions { display: flex; gap: 0.35rem; margin-top: 0.5rem; }

.bw-ka-sheet-actions { margin-bottom: 0.7rem; }
.bw-ka-sheet-none { font-family: var(--bw-font-mono); font-size: 0.72rem; color: var(--bw-gold-deep, #E07676); }
.bw-ka-sheet-lines { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.bw-ka-sheet-seg { font-family: var(--bw-font-mono); font-size: 0.74rem; color: var(--bw-text-secondary); }

/* ── Mock Draft Simulator (proposal 06) — flat, hairline, salmon never red ── */
.bw-md-setup, .bw-md-room, .bw-md-recap { display: block; }
.bw-md-modes { display: grid; grid-template-columns: 1fr 1fr; gap: 0.6rem; margin-bottom: 1rem; }
.bw-md-modecard { text-align: left; background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 12px; padding: 0.8rem 0.9rem; cursor: pointer; display: flex; flex-direction: column; gap: 0.3rem; }
.bw-md-modecard.on { border-color: var(--bw-gold); background: color-mix(in srgb, var(--bw-gold) 8%, var(--bw-surface)); }
.bw-md-modecard.disabled { opacity: 0.5; cursor: not-allowed; }
.bw-md-modecard-title { font-family: var(--bw-font-mono); font-size: 0.62rem; font-weight: 700; letter-spacing: 0.1em; color: var(--bw-text-primary); }
.bw-md-modecard-desc { font-size: 0.8rem; color: var(--bw-text-secondary); line-height: 1.35; }
.bw-md-fields, .bw-md-admin-fields { display: flex; flex-wrap: wrap; gap: 0.6rem; margin-bottom: 0.9rem; }
.bw-md-field { display: flex; flex-direction: column; gap: 0.25rem; flex: 1 1 8rem; }
.bw-md-field-grow { flex: 2 1 14rem; }
.bw-md-field-lbl { font-family: var(--bw-font-mono); font-size: 0.58rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: var(--bw-text-muted); }
.bw-md-select, .bw-md-input { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 8px; padding: 0.45rem 0.55rem; color: var(--bw-text-primary); font-size: 0.85rem; }
.bw-md-arr { margin: 0.2rem 0 0.9rem; }
.bw-md-arr-hint { font-size: 0.76rem; color: var(--bw-text-muted); margin: 0.15rem 0 0.5rem; }
.bw-md-arr-list { display: flex; flex-direction: column; gap: 0.3rem; }
.bw-md-arr-row { display: flex; align-items: center; gap: 0.6rem; background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 8px; padding: 0.4rem 0.6rem; }
.bw-md-arr-row.me { border-color: var(--bw-gold); background: color-mix(in srgb, var(--bw-gold) 7%, var(--bw-surface)); }
.bw-md-arr-n { font-family: var(--bw-font-mono); font-size: 0.7rem; color: var(--bw-text-muted); min-width: 1.4rem; }
.bw-md-arr-name { flex: 1; font-size: 0.86rem; color: var(--bw-text-primary); }
.bw-md-arr-name em { font-family: var(--bw-font-mono); font-size: 0.6rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-gold); font-style: normal; margin-left: 0.3rem; }
.bw-md-arr-btns { display: inline-flex; gap: 0.25rem; }
.bw-md-arr-btn { width: 1.7rem; height: 1.5rem; background: transparent; border: 1px solid var(--bw-border-subtle); border-radius: 6px; color: var(--bw-text-secondary); cursor: pointer; font-size: 0.7rem; }
.bw-md-arr-btn:disabled { opacity: 0.3; cursor: default; }
.bw-md-startrow { display: flex; align-items: center; gap: 0.8rem; margin-top: 0.4rem; }
.bw-md-speednote { font-family: var(--bw-font-mono); font-size: 0.7rem; color: var(--bw-text-muted); }
.bw-md-err { margin-top: 0.6rem; font-size: 0.8rem; color: var(--bw-gold-deep, #E07676); }
.bw-md-hist { margin-top: 1.2rem; }
.bw-md-histrow { width: 100%; display: flex; align-items: stretch; gap: 0.35rem; margin-bottom: 0.4rem; }
.bw-md-histrow-open { flex: 1; display: flex; justify-content: space-between; align-items: center; background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 9px; padding: 0.5rem 0.7rem; cursor: pointer; }
.bw-md-histrow-del { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 9px; padding: 0 0.65rem; color: var(--bw-text-muted); cursor: pointer; }
.bw-md-histrow-del:hover { color: var(--bw-text-primary); border-color: var(--bw-border-strong); }
.bw-md-clearall { margin-top: 0.2rem; }
.bw-md-histrow-main { font-size: 0.84rem; color: var(--bw-text-secondary); }
.bw-md-grade-chip { font-family: var(--bw-font-mono); font-weight: 800; color: var(--bw-gold); }

/* ── Draft Advisor (site admin only) ─────────────────────────────────────────
   Setup: a constraint builder card. In the room the advice lives in the
   redesigned spine + dossier (the bw-mdr layer below); what follows here is
   the setup card plus the flat/hairline atoms those surfaces share. */
.bw-md-advcard { border: 1px solid var(--bw-border-subtle); border-radius: 12px; padding: 0.7rem 0.8rem; background: var(--bw-surface); margin: 0.2rem 0 0.9rem; }
.bw-md-adv-toggles { display: flex; gap: 0.4rem; flex-wrap: wrap; }
.bw-md-adv-toggle { font-family: var(--bw-font-mono); font-size: 0.64rem; text-transform: uppercase; letter-spacing: 0.05em; background: transparent; border: 1px solid var(--bw-border-subtle); border-radius: 999px; color: var(--bw-text-muted); padding: 0.35rem 0.75rem; min-height: 2rem; cursor: pointer; }
.bw-md-adv-toggle.on { border-color: var(--bw-gold); color: var(--bw-gold); background: color-mix(in srgb, var(--bw-gold) 8%, transparent); }
.bw-md-adv-note { font-size: 0.78rem; color: var(--bw-text-muted); margin-top: 0.4rem; }
.bw-md-adv-builder { margin-top: 0.7rem; }
.bw-md-adv-seclbl { font-family: var(--bw-font-mono); font-size: 0.58rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: var(--bw-text-muted); margin: 0.7rem 0 0.35rem; }
.bw-md-adv-gates { display: flex; flex-direction: column; gap: 0.35rem; }
.bw-md-adv-gate { display: flex; align-items: center; justify-content: space-between; gap: 0.6rem; }
.bw-md-adv-gate-lbl { font-size: 0.83rem; color: var(--bw-text-secondary); }
.bw-md-adv-select { flex: 0 0 8.5rem; min-height: 2.2rem; }
.bw-md-adv-caps { display: flex; flex-wrap: wrap; gap: 0.4rem; }
.bw-md-adv-cap { display: inline-flex; align-items: center; gap: 0.3rem; border: 1px solid var(--bw-border-subtle); border-radius: 999px; padding: 0.15rem 0.3rem; background: var(--bw-surface); }
.bw-md-adv-step { width: 2rem; height: 2rem; border: 1px solid var(--bw-border-subtle); border-radius: 999px; background: transparent; color: var(--bw-text-secondary); font-size: 0.9rem; line-height: 1; cursor: pointer; }
.bw-md-adv-step:hover { border-color: var(--bw-border-strong); color: var(--bw-text-primary); }
.bw-md-adv-cap-val { font-family: var(--bw-font-mono); font-size: 0.74rem; font-weight: 700; color: var(--bw-text-primary); min-width: 3.2rem; text-align: center; }
.bw-md-adv-cap-val.none { font-weight: 500; color: var(--bw-text-muted); }
.bw-md-adv-nchips { display: flex; flex-wrap: wrap; gap: 0.3rem; }
.bw-md-adv-nchip { font-family: var(--bw-font-mono); font-size: 0.66rem; background: transparent; border: 1px solid var(--bw-border-subtle); border-radius: 999px; color: var(--bw-text-muted); padding: 0.3rem 0.75rem; min-height: 2rem; cursor: pointer; }
.bw-md-adv-nchip.on { border-color: var(--bw-gold); color: var(--bw-gold); background: color-mix(in srgb, var(--bw-gold) 8%, transparent); }

/* Advisor atoms shared by the redesigned room's spine + dossier */
.bw-md-adv-retry { background: none; border: 0; padding: 0; cursor: pointer; font-family: var(--bw-font-mono); font-size: 0.72rem; color: var(--bw-gold); text-decoration: underline dotted; text-underline-offset: 3px; }
/* The flat board. Deliberately not styled like the disagreement banner or an
   error: it is the advisor being honest that this pick does not matter much. */
.bw-md-adv-flat { font-size: 0.74rem; color: var(--bw-text-secondary); line-height: 1.4; margin-bottom: 0.45rem; padding: 0.4rem 0.55rem; border-left: 2px solid var(--bw-border-subtle); border-radius: 0 8px 8px 0; background: color-mix(in srgb, var(--bw-text-muted) 6%, transparent); }
.bw-md-adv-pair { font-weight: 600; color: var(--bw-text-primary); }
.bw-md-adv-fullrow { font-size: 0.72rem; color: var(--bw-text-secondary); line-height: 1.5; margin-top: 0.25rem; }
.bw-md-adv-fullrow b { font-family: var(--bw-font-mono); font-size: 0.66rem; color: var(--bw-text-primary); }
.bw-md-adv-fullnote { color: var(--bw-text-muted); }
/* Articulation (d): the out-for-season flag on the raw board. Muted, factual,
   hairline; salmon is for the brand, never for injury news. */
.bw-md-prow-out { font-family: var(--bw-font-mono); font-size: 0.58rem; letter-spacing: 0.04em; color: var(--bw-text-muted); border: 1px solid var(--bw-border-subtle); border-radius: 999px; padding: 0.08rem 0.4rem; white-space: nowrap; }
/* Context badges (advisor pro WS2): flat chips, hairline border, every one
   dated. Badges cite, they never assert; a stale badge mutes further and says
   the word stale so it cannot read as a live fact. */
.bw-md-adv-ctxrow { display: flex; flex-wrap: wrap; gap: 0.3rem; margin-top: 0.3rem; }
.bw-md-adv-ctx { font-family: var(--bw-font-mono); font-size: 0.62rem; color: var(--bw-text-secondary); padding: 0.1rem 0.4rem; border: 1px solid var(--bw-border-subtle); border-radius: 999px; background: transparent; white-space: nowrap; }
.bw-md-adv-ctx-stale { color: var(--bw-text-muted); opacity: 0.6; border-style: dashed; }
/* Profile picker (advisor pro WS5): six flat cards plus the custom builder
   below them. The best-ball caveat lives ON the card, at the point of choice. */
.bw-md-adv-profs { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 0.4rem; }
.bw-md-adv-prof { display: flex; flex-direction: column; gap: 0.2rem; text-align: left; padding: 0.5rem 0.6rem; border: 1px solid var(--bw-border-subtle); border-radius: 10px; background: transparent; cursor: pointer; }
.bw-md-adv-prof.on { border-color: var(--bw-text-secondary); background: color-mix(in srgb, var(--bw-text-muted) 8%, transparent); }
.bw-md-adv-prof-name { font-weight: 600; font-size: 0.8rem; color: var(--bw-text-primary); }
.bw-md-adv-prof-shape { font-size: 0.7rem; color: var(--bw-text-secondary); line-height: 1.35; }
.bw-md-adv-prof-caveat { font-size: 0.64rem; color: var(--bw-text-muted); line-height: 1.35; }
.bw-md-adv-risks { display: flex; flex-wrap: wrap; gap: 0.3rem; margin-top: 0.5rem; }
.bw-md-adv-risk { font-family: var(--bw-font-mono); font-size: 0.62rem; border: 1px solid var(--bw-border-subtle); border-radius: 999px; padding: 0.15rem 0.55rem; color: var(--bw-text-secondary); background: color-mix(in srgb, var(--bw-text-muted) 7%, transparent); cursor: help; }
.bw-md-adv-dis { font-size: 0.78rem; color: var(--bw-text-secondary); line-height: 1.4; margin-top: 0.5rem; padding: 0.4rem 0.55rem; border-left: 2px solid var(--bw-gold); border-radius: 0 8px 8px 0; background: color-mix(in srgb, var(--bw-gold) 7%, transparent); }
/* The opinionated override: house gold, never alarmist red. It is the advisor
   arguing FOR a pick, so it reads as an upgrade, not as a warning. */
.bw-md-adv-ovr-kicker { font-family: var(--bw-font-mono); font-size: 0.58rem; font-weight: 800; letter-spacing: 0.1em; color: var(--bw-gold); }
.bw-md-adv-ovr-breaks { display: flex; flex-wrap: wrap; gap: 0.25rem; margin-top: 0.35rem; }
.bw-md-adv-ovr-break { font-family: var(--bw-font-mono); font-size: 0.6rem; border: 1px solid color-mix(in srgb, var(--bw-gold) 45%, transparent); border-radius: 999px; padding: 0.15rem 0.55rem; color: var(--bw-gold); background: color-mix(in srgb, var(--bw-gold) 12%, transparent); }
.bw-md-manual-status { font-family: var(--bw-font-mono); font-size: 0.76rem; color: var(--bw-text-primary); }
/* ── Personalized Tiers (the Tier Lab). Same band language as the Command
   view — flat, hairline, one accent — but a richer study row. ─────────────── */
.bw-ts-teaser { display: flex; align-items: center; gap: 0.75rem; width: 100%; text-align: left; margin: 0.35rem 0 0.85rem; padding: 0.55rem 0.7rem; border: 1px solid var(--bw-border-subtle); border-radius: 10px; background: var(--bw-surface); cursor: pointer; transition: border-color 120ms ease; }
.bw-ts-teaser:hover { border-color: var(--bw-gold); }
.bw-ts-teaser-main { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.bw-ts-teaser-title { font-weight: 700; font-size: 0.85rem; color: var(--bw-text-primary); }
.bw-ts-teaser-desc { font-size: 0.72rem; color: var(--bw-text-muted); }
.bw-ts-teaser-go { flex: 0 0 auto; font-family: var(--bw-font-mono); font-size: 0.68rem; font-weight: 700; color: var(--bw-gold-deep, #B8860B); white-space: nowrap; }

.bw-ts-hero { padding: 1.4rem 0.9rem 1.6rem; text-align: center; }
.bw-ts-hero-title { font-family: var(--bw-font-display); font-size: 1.3rem; font-weight: 800; color: var(--bw-text-primary); }
.bw-ts-hero-desc { max-width: 34rem; margin: 0.45rem auto 0.9rem; font-size: 0.82rem; color: var(--bw-text-secondary); }
.bw-ts-hero-actions { display: flex; gap: 0.5rem; justify-content: center; flex-wrap: wrap; }
.bw-ts-note { margin-top: 0.7rem; font-size: 0.7rem; color: var(--bw-text-muted); }

.bw-ts-setlist { margin-top: 0.6rem; }
.bw-ts-setrow { display: flex; align-items: stretch; gap: 0.4rem; margin-top: 0.35rem; }
.bw-ts-setrow-open { flex: 1 1 auto; min-width: 0; display: flex; align-items: baseline; gap: 0.6rem; flex-wrap: wrap; text-align: left; padding: 0.5rem 0.6rem; border: 1px solid var(--bw-border-subtle); border-radius: 8px; background: var(--bw-surface); cursor: pointer; }
.bw-ts-setrow-open:hover { border-color: var(--bw-gold); }
.bw-ts-setrow-name { font-weight: 700; font-size: 0.82rem; color: var(--bw-text-primary); }
.bw-ts-setrow-meta { font-family: var(--bw-font-mono); font-size: 0.64rem; color: var(--bw-text-muted); }

.bw-ts-manage { display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; margin: 0.2rem 0 0.6rem; }
.bw-ts-name { flex: 1 1 11rem; min-width: 8rem; padding: 0.4rem 0.55rem; font-size: 0.82rem; border: 1px solid var(--bw-border-subtle); border-radius: 8px; background: var(--bw-surface); color: var(--bw-text-primary); }
.bw-ts-name:focus { outline: none; border-color: var(--bw-gold); }
.bw-ts-dirtydot { font-size: 0.7rem; color: transparent; }
.bw-ts-dirtydot.on { color: var(--bw-gold); }
.bw-ts-loadsel, .bw-ts-movesel { font-size: 0.7rem; padding: 0.25rem 0.3rem; border: 1px solid var(--bw-border-subtle); border-radius: 6px; background: var(--bw-surface); color: var(--bw-text-secondary); max-width: 8.5rem; }
.bw-ts-del { color: var(--bw-gold-deep, #E07676); }
.bw-ts-chips { display: flex; gap: 0.3rem; flex-wrap: wrap; margin-bottom: 0.55rem; }

.bw-ts-tabs { display: flex; gap: 0.3rem; flex-wrap: wrap; margin-bottom: 0.55rem; }
.bw-ts-tab { font-family: var(--bw-font-mono); font-size: 0.68rem; font-weight: 700; padding: 0.25rem 0.6rem; border: 1px solid var(--bw-border-subtle); border-radius: 999px; background: var(--bw-surface); color: var(--bw-text-secondary); cursor: pointer; }
.bw-ts-tab.on { border-color: var(--bw-gold); color: var(--bw-text-primary); }

.bw-ts-band { border: 1px solid var(--bw-border-subtle); border-radius: 10px; background: var(--bw-surface); padding: 0.45rem 0.55rem; margin-bottom: 0.5rem; }
.bw-ts-band-hd { display: flex; align-items: baseline; gap: 0.5rem; flex-wrap: wrap; margin-bottom: 0.25rem; }
.bw-ts-label { font-family: var(--bw-font-mono); font-size: 0.64rem; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; color: var(--bw-text-secondary); background: none; border: none; padding: 0; cursor: pointer; }
.bw-ts-label:hover { color: var(--bw-text-primary); }
.bw-ts-label-pen { margin-left: 0.3rem; font-size: 0.6rem; color: var(--bw-text-muted); }
.bw-ts-label-edit { font-family: var(--bw-font-mono); font-size: 0.68rem; padding: 0.15rem 0.3rem; border: 1px solid var(--bw-gold); border-radius: 6px; background: var(--bw-surface); color: var(--bw-text-primary); }
.bw-ts-band-n { font-family: var(--bw-font-mono); font-size: 0.62rem; color: var(--bw-text-muted); }
.bw-ts-band-note { font-family: var(--bw-font-mono); font-size: 0.62rem; color: var(--bw-gold-deep, #B8860B); }
.bw-ts-band-tools { margin-left: auto; display: flex; gap: 0.3rem; }
.bw-ts-empty-tier { padding: 0.4rem 0.2rem; font-size: 0.72rem; color: var(--bw-text-muted); font-style: italic; }

.bw-ts-row { display: flex; align-items: center; gap: 0.45rem; flex-wrap: wrap; padding: 0.28rem 0.15rem; border-top: 1px solid var(--bw-border-subtle); }
.bw-ts-row:first-of-type { border-top: none; }
.bw-ts-row.crossed .bw-ts-row-name, .bw-ts-row.crossed .bw-ts-row-ranks, .bw-ts-row.crossed .bw-ts-row-team { opacity: 0.38; text-decoration: line-through; }
.bw-ts-row.crossed .bw-md-pos, .bw-ts-row.crossed .bw-ts-bc, .bw-ts-row.crossed .bw-ts-edge { opacity: 0.38; }
.bw-ts-row-rank { flex: 0 0 1.6rem; font-family: var(--bw-font-mono); font-size: 0.64rem; color: var(--bw-text-muted); text-align: right; }
.bw-ts-row-name { font-size: 0.82rem; font-weight: 600; color: var(--bw-text-primary); }
.bw-ts-row-team { font-family: var(--bw-font-mono); font-size: 0.62rem; color: var(--bw-text-muted); }
.bw-ts-bc { font-family: var(--bw-font-mono); font-size: 0.58rem; font-weight: 700; padding: 0.08rem 0.3rem; border: 1px solid var(--bw-border-subtle); border-radius: 5px; color: var(--bw-text-secondary); }
.bw-ts-edge { font-family: var(--bw-font-mono); font-size: 0.58rem; color: var(--bw-gold-deep, #B8860B); }
.bw-ts-row-ranks { font-family: var(--bw-font-mono); font-size: 0.62rem; color: var(--bw-text-muted); }
.bw-ts-row-tools { margin-left: auto; display: flex; align-items: center; gap: 0.25rem; }
.bw-ts-tool { font-family: var(--bw-font-mono); font-size: 0.62rem; padding: 0.15rem 0.4rem; border: 1px solid var(--bw-border-subtle); border-radius: 6px; background: none; color: var(--bw-text-secondary); cursor: pointer; }
.bw-ts-tool:hover:not(:disabled) { border-color: var(--bw-gold); color: var(--bw-text-primary); }
.bw-ts-tool:disabled { opacity: 0.3; cursor: default; }
.bw-ts-x { font-weight: 700; }

@media (max-width: 640px) {
    .bw-ts-row { gap: 0.3rem; }
    .bw-ts-row-rank { flex-basis: 1.2rem; }
    .bw-ts-row-tools { margin-left: 0; flex-basis: 100%; justify-content: flex-end; }
    .bw-ts-band-tools { margin-left: 0; flex-basis: 100%; justify-content: flex-end; display: flex; }
}

/* The draft board: fixed seat columns x round rows */
.bw-md-board-wrap { overflow-x: auto; border: 1px solid var(--bw-border-subtle); border-radius: 10px; }
.bw-md-bd { display: inline-block; min-width: 100%; }
.bw-md-bd-row { display: flex; }
.bw-md-bd-rlabel { flex: 0 0 2.1rem; display: flex; align-items: center; justify-content: center; font-family: var(--bw-font-mono); font-size: 0.62rem; color: var(--bw-text-muted); border-right: 1px solid var(--bw-border-subtle); border-bottom: 1px solid var(--bw-border-subtle); background: var(--bw-surface); position: sticky; left: 0; z-index: 1; }
.bw-md-bd-seat { flex: 0 0 5.4rem; padding: 0.35rem 0.4rem; font-family: var(--bw-font-mono); font-size: 0.6rem; color: var(--bw-text-secondary); text-align: center; border-bottom: 1px solid var(--bw-border-subtle); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bw-md-bd-seat.me { color: var(--bw-gold); }
.bw-md-bd-cell { flex: 0 0 5.4rem; min-height: 2.7rem; padding: 0.25rem 0.35rem; border-right: 1px solid var(--bw-border-subtle); border-bottom: 1px solid var(--bw-border-subtle); background: var(--bw-surface); overflow: hidden; }
/* Proposal 13: cells hold 0..n picks (.bw-md-bd-pk sub-blocks stack); position
   tints live on the pick block, not the cell. Ghost = traded-away parity slot. */
.bw-md-bd-pk { padding: 0.05rem 0; }
.bw-md-bd-cell.stacked .bw-md-bd-pk + .bw-md-bd-pk { border-top: 1px solid var(--bw-border-subtle); margin-top: 0.15rem; padding-top: 0.2rem; }
.bw-md-bd-pk.bw-md-cell-qb { background: color-mix(in srgb, #B48AE6 12%, var(--bw-surface)); }
.bw-md-bd-pk.bw-md-cell-rb { background: color-mix(in srgb, #5FA98A 12%, var(--bw-surface)); }
.bw-md-bd-pk.bw-md-cell-wr { background: color-mix(in srgb, #5F8FB0 12%, var(--bw-surface)); }
.bw-md-bd-pk.bw-md-cell-te { background: color-mix(in srgb, #C79A5B 12%, var(--bw-surface)); }
.bw-md-bd-cell.you { box-shadow: inset 0 0 0 2px var(--bw-gold); }
.bw-md-bd-pk.keeper { box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--bw-gold) 55%, var(--bw-border-subtle)); }
.bw-md-bd-cell.empty { background: transparent; }
.bw-md-bd-cell.oc { background: color-mix(in srgb, var(--bw-gold-deep, #E07676) 14%, transparent); }
/* A traded slot: the pick stays in its ORIGINAL column, visibly different
   (dashed border + neutral wash) with a mono "→ acquirer" line. Scales with
   the cell; no color beyond the neutral tint so position hues still read. */
.bw-md-bd-cell.traded { border: 1px dashed var(--bw-border-strong); background: color-mix(in srgb, var(--bw-text-muted) 7%, var(--bw-surface)); }
.bw-md-bd-to { display: block; font-family: var(--bw-font-mono); font-size: 0.56rem; color: var(--bw-text-secondary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* Proposal 13: setup disclosure + commish Draft picks editor. Flat, hairline. */
.bw-md-pickacc { margin: 0.6rem 0; }
.bw-md-acc { margin-top: 1rem; }
.bw-md-acc summary { font-family: var(--bw-font-mono); font-size: 0.72rem; color: var(--bw-text-muted); cursor: pointer; }
.bw-md-pickline { display: flex; align-items: center; gap: 0.45rem; padding: 0.28rem 0; border-bottom: 1px solid var(--bw-border-subtle); font-size: 0.8rem; }
.bw-md-pickline-r { font-family: var(--bw-font-mono); font-size: 0.66rem; color: var(--bw-text-muted); min-width: 2rem; }
.bw-md-pickfix { display: inline-block; margin-top: 0.5rem; font-size: 0.78rem; color: var(--bw-gold-deep, #E07676); }
.bw-pk-row { display: flex; align-items: center; gap: 0.5rem; padding: 0.34rem 0; border-bottom: 1px solid var(--bw-border-subtle); font-size: 0.84rem; }
.bw-pk-rd { font-family: var(--bw-font-mono); font-size: 0.66rem; color: var(--bw-text-muted); min-width: 2.2rem; }
.bw-pk-arrow { color: var(--bw-text-muted); }
.bw-pk-form { display: flex; flex-wrap: wrap; gap: 0.7rem; align-items: end; margin-top: 0.4rem; }
.bw-pk-form label { display: flex; flex-direction: column; gap: 0.25rem; font-size: 0.72rem; color: var(--bw-text-muted); }
.bw-pk-form select, .bw-pk-form input { border: 1px solid var(--bw-border); background: var(--bw-surface); color: var(--bw-text-primary); border-radius: 8px; padding: 0.35rem 0.5rem; font-size: 0.84rem; }
.bw-md-bd-name { display: block; font-size: 0.68rem; font-weight: 600; color: var(--bw-text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bw-md-bd-pos { font-family: var(--bw-font-mono); font-size: 0.56rem; color: var(--bw-text-muted); }
.bw-md-bd-oc { font-family: var(--bw-font-mono); font-size: 0.54rem; color: var(--bw-gold-deep, #E07676); }

/* Position filter chips (shared by the redesigned room's rail) */
.bw-md-poschip { font-family: var(--bw-font-mono); font-size: 0.62rem; background: transparent; border: 1px solid var(--bw-border-subtle); border-radius: 999px; color: var(--bw-text-muted); padding: 0.15rem 0.55rem; cursor: pointer; }
.bw-md-poschip.on { border-color: var(--bw-gold); color: var(--bw-gold); }

/* Order arranger: drag handle + drag states */
.bw-md-arr-grip { cursor: grab; color: var(--bw-text-muted); font-size: 0.95rem; user-select: none; }
.bw-md-arr-row.dragging { opacity: 0.45; }
.bw-md-arr-row.dropzone { border-color: var(--bw-gold); box-shadow: inset 0 0 0 1px var(--bw-gold); }

.bw-md-speedctl { display: inline-flex; gap: 0.2rem; margin-left: auto; }
.bw-md-speedpill { font-family: var(--bw-font-mono); font-size: 0.6rem; text-transform: uppercase; letter-spacing: 0.05em; background: transparent; border: 1px solid var(--bw-border-subtle); border-radius: 999px; color: var(--bw-text-muted); padding: 0.15rem 0.5rem; cursor: pointer; }
.bw-md-speedpill.on { border-color: var(--bw-gold); color: var(--bw-gold); }
.bw-md-qbtn { font-family: var(--bw-font-mono); font-size: 0.62rem; text-transform: uppercase; background: transparent; border: 1px solid var(--bw-border-subtle); border-radius: 6px; color: var(--bw-text-muted); padding: 0.2rem 0.45rem; cursor: pointer; }
.bw-md-qbtn.on { border-color: var(--bw-gold); color: var(--bw-gold); }

/* Position chips + board cell tints (flat, full hairline, muted hues) */
.bw-md-pos { font-family: var(--bw-font-mono); font-size: 0.58rem; font-weight: 700; letter-spacing: 0.04em; padding: 0.1rem 0.34rem; border-radius: 5px; border: 1px solid var(--bw-border-subtle); color: var(--bw-text-secondary); }
.bw-md-pos.qb { background: color-mix(in srgb, #B48AE6 16%, transparent); border-color: color-mix(in srgb, #B48AE6 40%, transparent); }
.bw-md-pos.rb { background: color-mix(in srgb, #5FA98A 16%, transparent); border-color: color-mix(in srgb, #5FA98A 40%, transparent); }
.bw-md-pos.wr { background: color-mix(in srgb, #5F8FB0 16%, transparent); border-color: color-mix(in srgb, #5F8FB0 40%, transparent); }
.bw-md-pos.te { background: color-mix(in srgb, #C79A5B 16%, transparent); border-color: color-mix(in srgb, #C79A5B 40%, transparent); }
.bw-md-pos.k, .bw-md-pos.def { background: color-mix(in srgb, var(--bw-text-muted) 14%, transparent); }
.bw-md-team-pos { display: flex; align-items: center; gap: 0.45rem; flex-wrap: wrap; }
.bw-md-team-player { font-size: 0.84rem; color: var(--bw-text-secondary); }
.bw-md-team-player em { font-family: var(--bw-font-mono); font-size: 0.66rem; color: var(--bw-text-muted); font-style: normal; }
.bw-md-cell-qb { background: color-mix(in srgb, #B48AE6 10%, var(--bw-surface)); }
.bw-md-cell-rb { background: color-mix(in srgb, #5FA98A 10%, var(--bw-surface)); }
.bw-md-cell-wr { background: color-mix(in srgb, #5F8FB0 10%, var(--bw-surface)); }
.bw-md-cell-te { background: color-mix(in srgb, #C79A5B 10%, var(--bw-surface)); }

/* ══ RECAP: the story (redesign §7) ══════════════════════════════════════════
   One readable column with a spine: the verdict, a sticky anchor rail, the
   cost table, the headlines, the ledger, the roster, the standings, the board
   last with the late rounds folded, then what next. Flat surfaces on the
   neutral ground, hairline borders, salmon reserved for you and your verdicts,
   green only for the genuinely good, never red. */
.bw-md-recap { max-width: 60rem; margin: 0 auto; display: flex; flex-direction: column; gap: 1.1rem; }
.bw-md-act { border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-lg, 12px); background: var(--bw-surface); padding: 1rem 1.1rem; scroll-margin-top: 3.4rem; }
.bw-md-acthd { display: flex; align-items: baseline; justify-content: space-between; gap: 0.75rem; margin-bottom: 0.55rem; }
.bw-md-acttitle { margin: 0; font-family: var(--bw-font-mono); font-size: 0.66rem; font-weight: 700; letter-spacing: 0.12em; color: var(--bw-text-muted); text-transform: uppercase; }
.bw-md-sec-sub { font-size: 0.82rem; line-height: 1.45; color: var(--bw-text-muted); margin: 0 0 0.85rem; max-width: 46rem; }

/* THE VERDICT. The kicker, the letter in its own card, the one-sentence story,
   the provenance chips, and the tiles. */
.bw-md-hero { padding: 1.2rem 1.1rem 1.1rem; }
.bw-md-kicker { font-family: var(--bw-font-mono); font-size: 0.6rem; font-weight: 700; letter-spacing: 0.13em; text-transform: uppercase; color: var(--bw-text-muted); margin-bottom: 0.8rem; }
.bw-md-hero-top { display: flex; align-items: flex-start; gap: 1.4rem; }
.bw-md-hero-fig { flex: 0 0 auto; display: flex; flex-direction: column; align-items: center; border: 1px solid var(--bw-border-strong, var(--bw-border-subtle)); border-radius: 16px; background: var(--bw-surface); padding: 0.9rem 1.5rem 1rem; }
.bw-md-hero-num { font-family: var(--bw-font-display, inherit); font-weight: 900; font-size: 4.4rem; line-height: 0.95; letter-spacing: -0.02em; color: var(--bw-text-primary); font-variant-numeric: tabular-nums; }
.bw-md-hero-fig.branch .bw-md-hero-num { font-size: 2.4rem; color: var(--bw-gold-deep, #E07676); }
.bw-md-hero-fig.branch.pos .bw-md-hero-num { color: var(--bw-success, #059669); }
.bw-md-hero-sub { margin-top: 0.5rem; max-width: 8.5rem; text-align: center; font-family: var(--bw-font-mono); font-size: 0.56rem; line-height: 1.35; letter-spacing: 0.09em; text-transform: uppercase; color: var(--bw-text-muted); }
.bw-md-hero-body { flex: 1 1 auto; min-width: 0; }
.bw-md-hero-story { margin: 0; max-width: 35rem; font-family: var(--bw-font-display, inherit); font-weight: 800; font-size: 1.32rem; line-height: 1.28; letter-spacing: -0.01em; color: var(--bw-text-primary); }
.bw-md-hero-deck { margin: 0.5rem 0 0; max-width: 35rem; font-size: 0.88rem; line-height: 1.5; color: var(--bw-text-secondary); }
.bw-md-hero-chips { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-top: 0.8rem; }
.bw-md-hchip { font-family: var(--bw-font-mono); font-size: 0.6rem; letter-spacing: 0.04em; color: var(--bw-text-secondary); border: 1px solid var(--bw-border-subtle); border-radius: 999px; background: var(--bw-surface); padding: 0.16rem 0.55rem; white-space: nowrap; }
.bw-md-tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(8.5rem, 1fr)); gap: 0.6rem; margin-top: 1.3rem; }
.bw-md-tile { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); padding: 0.7rem 0.85rem; display: flex; flex-direction: column; gap: 0.2rem; }
.bw-md-tile-v { font-family: var(--bw-font-mono); font-variant-numeric: tabular-nums; font-size: 1.18rem; font-weight: 700; color: var(--bw-text-primary); }
.bw-md-tile-l { font-family: var(--bw-font-mono); font-size: 0.56rem; letter-spacing: 0.07em; text-transform: uppercase; color: var(--bw-text-muted); }

/* THE ANCHOR RAIL. Sticky against the app's own scroller; the recap is one
   page with a spine, not a pile. Buttons, not hrefs: a hash would fight the
   router. */
.bw-md-anchors { position: sticky; top: 0; z-index: 5; display: flex; gap: 1.15rem; background: var(--bw-bg); border-bottom: 1px solid var(--bw-border-subtle); padding: 0.6rem 0.2rem; margin: 0; overflow-x: auto; scrollbar-width: none; }
.bw-md-anchors::-webkit-scrollbar { display: none; }
.bw-md-anchors button { flex: 0 0 auto; font-family: var(--bw-font-mono); font-size: 0.64rem; font-weight: 700; letter-spacing: 0.07em; text-transform: uppercase; color: var(--bw-text-muted); background: none; border: 0; padding: 0; cursor: pointer; white-space: nowrap; }
.bw-md-anchors button:hover, .bw-md-anchors button:focus-visible { color: var(--bw-gold-deep, #E07676); }

/* The branch comparison, inside the hero: two numbers and the pick they split on. */
.bw-md-bcmp { margin-top: 0.75rem; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); }
.bw-md-bcmp-pair { display: flex; }
.bw-md-bcmp-cell { flex: 1 1 0; display: flex; flex-direction: column; gap: 0.1rem; padding: 0.5rem 0.7rem; font-family: var(--bw-font-mono); font-size: 0.58rem; letter-spacing: 0.06em; text-transform: uppercase; color: var(--bw-text-muted); }
.bw-md-bcmp-cell + .bw-md-bcmp-cell { border-left: 1px solid var(--bw-border-subtle); }
.bw-md-bcmp-cell em { font-style: normal; font-size: 1.15rem; font-variant-numeric: tabular-nums; color: var(--bw-text-primary); letter-spacing: 0; }
.bw-md-bcmp-cell.on em { color: var(--bw-gold-deep, #E07676); }
.bw-md-bcmp-div { border-top: 1px solid var(--bw-border-subtle); padding: 0.5rem 0.7rem; font-size: 0.8rem; line-height: 1.45; color: var(--bw-text-secondary); }
.bw-md-bcmp-div .bw-md-recap-lbl { margin-bottom: 0.15rem; }

/* ══ ONE TAG VOCABULARY ══════════════════════════════════════════════════════
   Six chips and no others. Same shape everywhere: hairline capsule, mono, tiny.
   YOU is the only filled one, because there is only one of you on the board. */
.bw-md-tag { display: inline-flex; align-items: center; font-family: var(--bw-font-mono); font-size: 0.5rem; font-weight: 700; letter-spacing: 0.07em; text-transform: uppercase; white-space: nowrap; border: 1px solid var(--bw-border-subtle); border-radius: 3px; padding: 0.02rem 0.22rem; color: var(--bw-text-muted); margin-left: 0.28rem; vertical-align: middle; }
.bw-md-tag.you { background: var(--bw-gold); border-color: var(--bw-gold); color: var(--bw-on-gold); }
.bw-md-tag.kept { border-color: color-mix(in srgb, var(--bw-gold) 45%, var(--bw-border-subtle)); color: var(--bw-gold-deep, #E07676); }
.bw-md-tag.branch { border-style: dashed; }
.bw-md-tag.traded { border-style: dashed; font-weight: 400; letter-spacing: 0.02em; }
.bw-md-tag.value { border-color: color-mix(in srgb, var(--bw-success, #059669) 45%, var(--bw-border-subtle)); color: var(--bw-success, #059669); }
.bw-md-tag.reach { border-color: color-mix(in srgb, var(--bw-gold-deep, #E07676) 55%, var(--bw-border-subtle)); color: var(--bw-gold-deep, #E07676); }

/* WHAT IT COST YOU. The trust artifact: one hairline table, followed rows
   quiet, detours carrying their price. Delta color is verdict color. */
.bw-md-avy { border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); overflow: hidden; }
.bw-md-avy-row { display: grid; grid-template-columns: 3.2rem minmax(0, 1.1fr) minmax(0, 1.1fr) 4rem 6rem; gap: 0.6rem; align-items: baseline; padding: 0.42rem 0.9rem; border-bottom: 1px solid var(--bw-border-subtle); font-size: 0.8rem; color: var(--bw-text-primary); }
.bw-md-avy-row:last-child { border-bottom: none; }
.bw-md-avy-row.head { font-family: var(--bw-font-mono); font-size: 0.58rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--bw-text-muted); background: var(--bw-panel, var(--bw-surface)); }
.bw-md-avy-row.quiet, .bw-md-avy-row.quiet .bw-md-avy-pk { color: var(--bw-text-muted); }
.bw-md-avy-pk { font-family: var(--bw-font-mono); font-variant-numeric: tabular-nums; font-size: 0.68rem; font-weight: 700; color: var(--bw-text-primary); }
.bw-md-avy-said, .bw-md-avy-took { min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bw-md-avy-row:not(.head):not(.quiet) .bw-md-avy-took { font-weight: 600; }
.bw-md-avy-d { font-family: var(--bw-font-mono); font-variant-numeric: tabular-nums; font-size: 0.7rem; font-weight: 700; text-align: right; }
.bw-md-avy-d.neg { color: var(--bw-gold-deep, #E07676); }
.bw-md-avy-d.pos { color: var(--bw-success, #059669); }
.bw-md-avy-d.zero { color: var(--bw-text-muted); font-weight: 400; }
.bw-md-avy-verd { font-family: var(--bw-font-mono); font-size: 0.58rem; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase; text-align: right; color: var(--bw-text-secondary); }
.bw-md-avy-verd.followed, .bw-md-avy-verd.unpriced { color: var(--bw-text-muted); }
.bw-md-avy-verd.good { color: var(--bw-success, #059669); }
.bw-md-avy-verd.costly { color: var(--bw-gold-deep, #E07676); }

/* THE HEADLINES. Three cells, three cards. */
.bw-md-hl { display: grid; grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr)); gap: 0.7rem; }
.bw-md-hl-cell { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); padding: 0.85rem 1rem; min-width: 0; }
.bw-md-hl-lbl { font-family: var(--bw-font-mono); font-size: 0.56rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--bw-text-muted); }
.bw-md-hl-main { display: flex; align-items: center; gap: 0.4rem; margin: 0.35rem 0 0.15rem; }
.bw-md-hl-main .bw-md-tag { margin-left: 0; }
.bw-md-hl-name { font-family: var(--bw-font-display, inherit); font-weight: 800; font-size: 1.05rem; color: var(--bw-text-primary); overflow: hidden; text-overflow: ellipsis; }
.bw-md-hl-meta { font-size: 0.78rem; line-height: 1.45; color: var(--bw-text-secondary); }

/* PICK BY PICK. The ledger as a verdict-dotted timeline: dot, pick, player,
   the engine's note, the verdict word. The turning point row is tinted. */
.bw-md-ledger { border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); overflow: hidden; }
.bw-md-lg-row { display: flex; align-items: baseline; gap: 0.65rem; padding: 0.5rem 1rem; border-bottom: 1px solid var(--bw-border-subtle); font-size: 0.84rem; }
.bw-md-lg-row.turnpt { background: color-mix(in srgb, var(--bw-gold) 13%, transparent); }
.bw-md-lg-dot { flex: 0 0 8px; width: 8px; height: 8px; border-radius: 50%; align-self: center; background: color-mix(in srgb, var(--bw-text-muted) 40%, transparent); }
.bw-md-lg-dot.best { background: var(--bw-success, #059669); }
.bw-md-lg-dot.value { background: color-mix(in srgb, var(--bw-success, #059669) 55%, transparent); }
.bw-md-lg-dot.costly { background: var(--bw-gold-deep, #E07676); }
.bw-md-lg-dot.recovered { background: var(--bw-text-secondary); }
.bw-md-lg-pick { flex: 0 0 2.9rem; font-family: var(--bw-font-mono); font-variant-numeric: tabular-nums; font-size: 0.68rem; font-weight: 700; color: var(--bw-text-primary); }
.bw-md-lg-name { font-weight: 700; color: var(--bw-text-primary); white-space: nowrap; }
.bw-md-lg-note { flex: 1 1 auto; min-width: 0; font-size: 0.76rem; line-height: 1.4; color: var(--bw-text-muted); }
.bw-md-lg-verd { flex: 0 0 auto; font-family: var(--bw-font-mono); font-size: 0.56rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--bw-text-secondary); }
.bw-md-lg-legend { display: flex; flex-wrap: wrap; gap: 0.4rem 1.1rem; font-size: 0.64rem; color: var(--bw-text-muted); padding: 0.6rem 1rem; background: var(--bw-panel, var(--bw-surface)); }
.bw-md-lg-legend span { display: inline-flex; align-items: center; gap: 0.3rem; }
.bw-md-lg-legend .bw-md-lg-dot { flex: 0 0 7px; width: 7px; height: 7px; }

/* THE ROSTER. Starters as a filled slot skeleton, bench beside it, flags in
   words underneath. Waiver fills ghosted, exactly like the standings sheet. */
.bw-md-roster { display: grid; grid-template-columns: 1fr 1fr; gap: 0.7rem; }
.bw-md-ros-card { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); padding: 0.6rem 0; align-self: start; }
.bw-md-ros-h { display: flex; justify-content: space-between; gap: 0.6rem; font-family: var(--bw-font-mono); font-size: 0.58rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--bw-text-muted); padding: 0.2rem 1rem 0.5rem; }
.bw-md-ros-row { display: flex; align-items: baseline; gap: 0.5rem; padding: 0.28rem 1rem; font-size: 0.84rem; }
.bw-md-ros-row.waiver { opacity: 0.62; }
.bw-md-ros-slot { flex: 0 0 2.6rem; font-family: var(--bw-font-mono); font-size: 0.6rem; font-weight: 700; letter-spacing: 0.05em; color: var(--bw-text-muted); }
.bw-md-ros-who { font-weight: 600; color: var(--bw-text-primary); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bw-md-ros-at { margin-left: auto; font-family: var(--bw-font-mono); font-variant-numeric: tabular-nums; font-size: 0.64rem; color: var(--bw-text-muted); }
.bw-md-byeline { font-size: 0.8rem; line-height: 1.45; color: var(--bw-text-secondary); margin-top: 0.55rem; max-width: 46rem; }

/* THE LEAGUE. Labeled bars, your row the one tinted thing on the table. */
.bw-md-st { border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); background: var(--bw-surface); padding: 0.6rem 1rem; }
.bw-md-st-how { background: none; border: 0; padding: 0; cursor: pointer; font-family: var(--bw-font-mono); font-size: 0.66rem; letter-spacing: 0.03em; color: var(--bw-text-muted); text-decoration: underline dotted; text-underline-offset: 3px; }
.bw-md-st-how:hover, .bw-md-st-how:focus-visible { color: var(--bw-text-primary); }
.bw-md-st-row { display: flex; align-items: center; gap: 0.7rem; padding: 0.26rem 0; font-size: 0.82rem; }
.bw-md-st-rank { flex: 0 0 1.4rem; font-family: var(--bw-font-mono); font-variant-numeric: tabular-nums; font-size: 0.68rem; font-weight: 700; color: var(--bw-text-muted); text-align: right; }
.bw-md-st-row.you .bw-md-st-rank { color: var(--bw-gold-deep, #E07676); }
.bw-md-st-name { flex: 0 0 auto; width: 11rem; min-width: 0; display: inline-flex; align-items: baseline; gap: 0.1rem; font-weight: 600; color: var(--bw-text-primary); overflow: hidden; white-space: nowrap; }
.bw-md-st-row.you .bw-md-st-name { color: var(--bw-gold-deep, #E07676); }
.bw-md-st-wchip { font-family: var(--bw-font-mono); font-size: 0.55rem; font-weight: 400; text-transform: uppercase; letter-spacing: 0.04em; color: var(--bw-text-muted); border: 1px solid var(--bw-border-subtle); border-radius: 999px; padding: 0.05rem 0.35rem; white-space: nowrap; margin-left: 0.3rem; }
.bw-md-st-bar { flex: 1 1 auto; display: block; height: 8px; border-radius: 999px; background: color-mix(in srgb, var(--bw-text-muted) 16%, transparent); overflow: hidden; }
.bw-md-st-fill { display: block; height: 100%; border-radius: 999px; background: color-mix(in srgb, var(--bw-text-muted) 45%, transparent); transform-origin: left; animation: barGrow 0.7s cubic-bezier(0.2, 0.8, 0.2, 1) both; }
.bw-md-st-row.you .bw-md-st-fill { background: var(--bw-gold); }
.bw-md-st-nums { flex: 0 0 auto; display: flex; flex-direction: column; align-items: flex-end; gap: 0.05rem; font-family: var(--bw-font-mono); font-variant-numeric: tabular-nums; }
.bw-md-st-rec { font-size: 0.72rem; font-weight: 700; color: var(--bw-text-primary); }
.bw-md-st-row.you .bw-md-st-rec { color: var(--bw-gold-deep, #E07676); }
.bw-md-st-pts { font-size: 0.64rem; color: var(--bw-text-muted); }
.bw-md-st-note { font-size: 0.78rem; line-height: 1.45; color: var(--bw-text-secondary); margin-top: 0.6rem; max-width: 46rem; }

/* THE BOARD, LAST. The heatmap grid scrolls inside its own container; rounds
   past MD_LATE_FROM hide behind a class toggle, never a repaint. Tighter than
   the live room's board because nothing here is a target: position tint
   carries the shape, the round rail sticks, and your own column is outlined
   top to bottom so you can find yourself instantly. */
.bw-md-late-off .bw-md-g-row.late > * { display: none; }
.bw-md-latewrap { margin-top: 0.7rem; text-align: center; }
.bw-md-gridwrap { overflow-x: auto; overscroll-behavior-x: contain; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); }
/* One CSS grid, not twelve flex rows: the column track is declared once, so a
   long player name can never widen a column and push the board out of its own
   scroller (which is exactly what an auto-sized flex row did). */
.bw-md-grid2 { display: grid; grid-template-columns: 1.9rem repeat(var(--md-cols, 12), 5.6rem); width: max-content; min-width: 100%; }
.bw-md-g-row { display: contents; }
.bw-md-g-rail { position: sticky; left: 0; z-index: 2; display: flex; align-items: center; justify-content: center; font-family: var(--bw-font-mono); font-size: 0.58rem; color: var(--bw-text-muted); background: var(--bw-panel, var(--bw-surface)); border-right: 1px solid var(--bw-border-subtle); border-bottom: 1px solid var(--bw-border-subtle); }
.bw-md-g-head .bw-md-g-rail, .bw-md-g-seat { position: sticky; top: 0; z-index: 3; background: var(--bw-surface); }
.bw-md-g-head .bw-md-g-rail { z-index: 4; }
.bw-md-g-seat { min-width: 0; padding: 0.3rem 0.35rem; font-family: var(--bw-font-mono); font-size: 0.56rem; color: var(--bw-text-secondary); text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; border-bottom: 1px solid var(--bw-border-subtle); }
.bw-md-g-seat.me { color: var(--bw-gold-deep, #E07676); font-weight: 700; }
.bw-md-g-cell { position: relative; min-width: 0; overflow: hidden; min-height: 2.5rem; border-right: 1px solid var(--bw-border-subtle); border-bottom: 1px solid var(--bw-border-subtle); background: var(--bw-surface); }
.bw-md-g-cell.empty { background: transparent; }
/* Your column, outlined top to bottom. Drawn on a pseudo-element ABOVE the
   position tint, because a cell background paints over an inset shadow and the
   rail came out as a row of disconnected ticks. */
.bw-md-g-cell.you::after, .bw-md-g-seat.me::after { content: ''; position: absolute; inset: 0; pointer-events: none; z-index: 2; box-shadow: inset 2px 0 0 var(--bw-gold), inset -2px 0 0 var(--bw-gold); }
.bw-md-g-seat.me { position: sticky; }
.bw-md-g-seat.me::after { box-shadow: inset 2px 0 0 var(--bw-gold), inset -2px 0 0 var(--bw-gold), inset 0 2px 0 var(--bw-gold); }
.bw-md-grid2 > .bw-md-g-row:last-child .bw-md-g-cell.you::after { box-shadow: inset 2px 0 0 var(--bw-gold), inset -2px 0 0 var(--bw-gold), inset 0 -2px 0 var(--bw-gold); }
.bw-md-g-pk { position: relative; padding: 0.22rem 0.3rem; }
.bw-md-g-pk + .bw-md-g-pk { border-top: 1px solid var(--bw-border-subtle); }
.bw-md-g-pk.bw-md-cell-qb { background: color-mix(in srgb, #B48AE6 13%, var(--bw-surface)); }
.bw-md-g-pk.bw-md-cell-rb { background: color-mix(in srgb, #5FA98A 13%, var(--bw-surface)); }
.bw-md-g-pk.bw-md-cell-wr { background: color-mix(in srgb, #5F8FB0 13%, var(--bw-surface)); }
.bw-md-g-pk.bw-md-cell-te { background: color-mix(in srgb, #C79A5B 13%, var(--bw-surface)); }
/* A keeper was never a decision, so it reads as background, not as a pick. */
.bw-md-g-pk.kept { opacity: 0.55; }
.bw-md-g-pk.value { box-shadow: inset 0 -2px 0 var(--bw-success, #059669); }
.bw-md-g-pk.reach { box-shadow: inset 0 -2px 0 var(--bw-gold-deep, #E07676); }
.bw-md-g-name { display: block; font-size: 0.66rem; font-weight: 600; line-height: 1.2; color: var(--bw-text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bw-md-g-meta { display: flex; align-items: center; gap: 0.1rem; }
.bw-md-g-pos { font-family: var(--bw-font-mono); font-size: 0.52rem; color: var(--bw-text-muted); }
.bw-md-g-meta .bw-md-tag { margin-left: 0.15rem; font-size: 0.5rem; padding: 0 0.2rem; }
.bw-md-g-pk > .bw-md-tag.traded { display: block; margin: 0.1rem 0 0; font-size: 0.46rem; overflow: hidden; text-overflow: ellipsis; }
/* Re-draft, always live on YOUR picks, revealed on hover or keyboard focus for
   everybody else's. Never hidden from the keyboard: it is a real button that
   simply does not paint until it is wanted. */
.bw-md-g-rd { position: absolute; right: 0.1rem; bottom: 0.05rem; z-index: 1; width: 1.05rem; height: 1.05rem; display: flex; align-items: center; justify-content: center; font-size: 0.7rem; line-height: 1; padding: 0; border: 0; border-radius: 3px; background: color-mix(in srgb, var(--bw-surface) 88%, transparent); color: var(--bw-text-muted); cursor: pointer; opacity: 0; transition: opacity 0.12s ease, color 0.12s ease; }
.bw-md-g-cell.you .bw-md-g-rd { opacity: 0.6; color: var(--bw-gold-deep, #E07676); }
.bw-md-g-cell:hover .bw-md-g-rd { opacity: 1; }
.bw-md-g-rd:hover, .bw-md-g-rd:focus-visible { opacity: 1; color: var(--bw-gold-deep, #E07676); outline: 1px solid var(--bw-gold); }
/* No hover on a touch screen: every cell shows the affordance, quietly. */
@media (hover: none) { .bw-md-g-rd { opacity: 0.5; } }

/* What the advisor thought: the aggregate split, for mocks graded before the
   pick-time snapshots existed. Two halves of the same decisions. */
.bw-md-ar { padding: 0.7rem 0.8rem; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); }
.bw-md-ar-split { display: flex; margin-top: 0.35rem; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-sm, 8px); }
.bw-md-ar-side { flex: 1 1 0; padding: 0.5rem 0.65rem; }
.bw-md-ar-side + .bw-md-ar-side { border-left: 1px solid var(--bw-border-subtle); }
.bw-md-ar-n { font-family: var(--bw-font-mono); font-variant-numeric: tabular-nums; font-size: 0.98rem; font-weight: 700; color: var(--bw-text-primary); }
.bw-md-ar-lbl { font-family: var(--bw-font-mono); font-size: 0.56rem; letter-spacing: 0.07em; text-transform: uppercase; color: var(--bw-text-muted); }
.bw-md-ar-cost { margin-top: 0.2rem; font-size: 0.76rem; color: var(--bw-text-secondary); }
.bw-md-ar-note { margin: 0.55rem 0 0; max-width: 46rem; font-size: 0.82rem; line-height: 1.45; color: var(--bw-text-primary); }

/* WHAT NEXT. */
.bw-md-redraft-note { margin-bottom: 0.7rem; }
.bw-md-redraft-h { font-size: 0.9rem; font-weight: 700; color: var(--bw-text-primary); }
.bw-md-redraft-p { margin: 0.15rem 0 0; max-width: 42rem; font-size: 0.82rem; line-height: 1.45; color: var(--bw-text-secondary); }

/* Recap atoms. */
.bw-md-recap-lbl { font-family: var(--bw-font-mono); font-size: 0.6rem; font-weight: 700; letter-spacing: 0.08em; color: var(--bw-text-muted); margin-bottom: 0.3rem; }
.bw-md-recap-actions { display: flex; gap: 0.5rem; flex-wrap: wrap; }
.bw-md-nextpoint { margin-top: 0.9rem; padding-top: 0.8rem; border-top: 1px solid var(--bw-border-subtle); }

/* ── Recap, wide ── */
@media (min-width: 900px) {
    .bw-md-act { padding: 1.15rem 1.3rem; }
    .bw-md-hero { padding: 1.4rem 1.5rem 1.3rem; }
    .bw-md-hero-num { font-size: 5.6rem; }
    .bw-md-hero-story { font-size: 1.5rem; }
}
/* Only widen the columns once twelve of them plus the rail genuinely fit. */
@media (min-width: 1500px) { .bw-md-grid2 { grid-template-columns: 1.9rem repeat(var(--md-cols, 12), 6.6rem); } }

/* ── Recap, tablet ── */
@media (max-width: 999px) {
    .bw-md-hl { grid-template-columns: 1fr 1fr; }
    .bw-md-hl-cell:last-child:nth-child(odd) { grid-column: 1 / -1; }
}
/* ── Recap, phone. The hero stacks, the tiles go two up with the lead tile
   full width, the anchors scroll, the roster is one column, and nothing may
   force a sideways page scroll: the board grid scrolls inside itself. ── */
@media (max-width: 760px) {
    .bw-md-recap { gap: 0.9rem; }
    .bw-md-act { padding: 0.9rem 0.85rem; border-radius: var(--bw-radius-md, 10px); }
    .bw-md-hero { padding: 1rem 0.85rem 0.9rem; }
    .bw-md-hero-top { flex-direction: column; align-items: flex-start; gap: 0.8rem; }
    .bw-md-hero-fig { padding: 0.7rem 1.1rem 0.8rem; }
    .bw-md-hero-num { font-size: 3.2rem; }
    .bw-md-hero-story { font-size: 1.08rem; }
    .bw-md-tiles { grid-template-columns: 1fr 1fr; }
    .bw-md-tiles .bw-md-tile:first-child { grid-column: 1 / -1; }
    .bw-md-hl { grid-template-columns: 1fr; }
    .bw-md-hl-cell:last-child:nth-child(odd) { grid-column: auto; }
    .bw-md-roster { grid-template-columns: 1fr; }
    .bw-md-lg-row { flex-wrap: wrap; }
    .bw-md-lg-note { flex-basis: 100%; order: 5; padding-left: calc(8px + 0.65rem); }
    .bw-md-lg-verd { margin-left: auto; }
    .bw-md-st-name { width: 7.2rem; }
    .bw-md-recap-actions .bw-btn { flex: 1 1 100%; }
    .bw-md-grid2 { grid-template-columns: 1.7rem repeat(var(--md-cols, 12), 5rem); }
}
/* The cost table refolds to two lines per pick on narrow screens:
   "pick | you took | delta" over "card: advisor said | verdict";
   followed rows collapse to one quiet line. */
@media (max-width: 680px) {
    .bw-md-avy-row { grid-template-columns: 2.9rem minmax(0, 1fr) auto; grid-template-areas: "pk took d" "pk said verd"; row-gap: 0.06rem; }
    .bw-md-avy-pk { grid-area: pk; }
    .bw-md-avy-took { grid-area: took; }
    .bw-md-avy-said { grid-area: said; font-size: 0.68rem; color: var(--bw-text-muted); }
    .bw-md-avy-said::before { content: "card: "; }
    .bw-md-avy-d { grid-area: d; }
    .bw-md-avy-verd { grid-area: verd; }
    .bw-md-avy-row.quiet .bw-md-avy-said { display: none; }
    .bw-md-avy-row.head { grid-template-areas: "pk took d"; }
    .bw-md-avy-row.head .bw-md-avy-said, .bw-md-avy-row.head .bw-md-avy-verd { display: none; }
}



/* Admin ADP */
.bw-md-admin-fresh { margin-bottom: 1rem; }
.bw-md-freshrow { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; padding: 0.4rem 0; border-bottom: 1px solid var(--bw-border-subtle); }
.bw-md-freshfmt { font-family: var(--bw-font-mono); font-size: 0.78rem; color: var(--bw-text-primary); min-width: 6rem; }
.bw-md-freshmeta { font-size: 0.72rem; color: var(--bw-text-muted); }
.bw-md-queuechip { font-family: var(--bw-font-mono); font-size: 0.7rem; color: var(--bw-text-secondary); margin-top: 0.5rem; }
.bw-md-csv { width: 100%; min-height: 8rem; background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 9px; padding: 0.6rem; color: var(--bw-text-primary); font-family: var(--bw-font-mono); font-size: 0.78rem; margin-bottom: 0.6rem; }
.bw-md-admin-preview, .bw-md-admin-uploads { margin-top: 1rem; padding-top: 0.8rem; border-top: 1px solid var(--bw-border-subtle); }
.bw-md-diff { display: flex; gap: 0.6rem; font-size: 0.76rem; color: var(--bw-text-muted); margin: 0.5rem 0; }
.bw-md-diff-up { color: var(--bw-success, #059669); }
.bw-md-diff-down { color: var(--bw-gold-deep, #E07676); }
.bw-md-unresolved { margin: 0.6rem 0; }
.bw-md-unrow { display: flex; justify-content: space-between; gap: 0.5rem; font-size: 0.8rem; color: var(--bw-text-secondary); padding: 0.25rem 0; }
.bw-md-unstatus { font-family: var(--bw-font-mono); font-size: 0.66rem; color: var(--bw-gold-deep, #E07676); }
.bw-md-uprow { display: flex; align-items: center; gap: 0.6rem; flex-wrap: wrap; padding: 0.45rem 0; border-bottom: 1px solid var(--bw-border-subtle); }
.bw-md-upfmt { font-family: var(--bw-font-mono); font-size: 0.78rem; color: var(--bw-text-primary); min-width: 6rem; }
.bw-md-upmeta { font-size: 0.74rem; color: var(--bw-text-muted); flex: 1; }
.bw-md-upstatus { font-family: var(--bw-font-mono); font-size: 0.62rem; text-transform: uppercase; letter-spacing: 0.05em; }
.bw-md-up-published { color: var(--bw-success, #059669); }
.bw-md-up-draft { color: var(--bw-gold); }
.bw-md-up-superseded { color: var(--bw-text-muted); }
.bw-md-toast { position: fixed; bottom: 1.5rem; left: 50%; transform: translateX(-50%); background: var(--bw-text-primary); color: var(--bw-bg); font-size: 0.82rem; padding: 0.5rem 0.9rem; border-radius: 8px; z-index: 9999; }
.bw-md-seatnote, .bw-md-stalenote { font-size: 0.8rem; color: var(--bw-text-secondary); background: var(--bw-panel); border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md); padding: 0.45rem 0.7rem; margin: 0.4rem 0 0.1rem; }

/* Draft intel: tappable board headers + the intel sheet body */
.bw-md-bd-seat.tappable { cursor: pointer; text-decoration: underline dotted; text-underline-offset: 3px; }
.bw-md-bd-seat.tappable:hover, .bw-md-bd-seat.tappable:focus-visible { color: var(--bw-text-primary); }
.bw-mdi-body { padding: 0.25rem 0 0.5rem; }
.bw-mdi-sec { margin: 0.65rem 0 0; }
.bw-mdi-h { font-family: var(--bw-font-mono); font-size: 0.68rem; text-transform: uppercase; letter-spacing: 0.06em; color: var(--bw-text-muted); margin-bottom: 0.3rem; }
.bw-mdi-line { font-size: 0.92rem; color: var(--bw-text-primary); }
.bw-mdi-row { display: flex; justify-content: space-between; gap: 0.75rem; font-size: 0.85rem; padding: 0.22rem 0; border-bottom: 1px solid var(--bw-border-subtle); }
.bw-mdi-row:last-child { border-bottom: 0; }
.bw-mdi-row .bw-mdi-val { color: var(--bw-text-secondary); text-align: right; }
.bw-mdi-muted { font-size: 0.85rem; color: var(--bw-text-muted); padding: 0.3rem 0; }
.bw-mdi-full { margin-top: 0.8rem; width: 100%; }

/* Chat artifacts inside the standard message chrome (reactions + attribution) */
.bw-chat-msg-art .bw-chat-msg-col { flex: 1; min-width: 0; max-width: 30rem; }
.bw-chat-msg-art.mine { justify-content: flex-end; }
.bw-chat-msg-art .bw-tm-chatcard, .bw-chat-msg-art .bw-sbet-art, .bw-chat-msg-art .bw-sbet-result { max-width: 100%; }
.bw-md-cc-grade { display: inline-block; font-family: var(--bw-font-mono); font-weight: 700; background: var(--bw-gold); color: var(--bw-on-gold); border-radius: 6px; padding: 0.05rem 0.45rem; margin-right: 0.45rem; }
.bw-tm-cc-pos { font-family: var(--bw-font-mono); font-size: 0.68rem; color: var(--bw-text-muted); text-transform: uppercase; }
.bw-empty-note { font-size: 0.82rem; color: var(--bw-text-muted); padding: 0.5rem 0; }

@media (max-width: 640px) {
    .bw-md-modes { grid-template-columns: 1fr; }
    .bw-md-speedctl { margin-left: 0; width: 100%; }
}

/* ════════════════════════════════════════════════════════════════════════════
   THE LEAGUE HUB (re-architecture — docs/LEAGUE_HUB_SPEC.md §9)
   Flat surfaces, full hairline borders, no gradients, no shadows. Salmon
   (--bw-gold) is accent/highlight only, never red. Theme-aware via tokens.
   bw-hub-* = chrome + grid primitives; bw-club-* = the Clubhouse; bw-mgr-* =
   managers index; bw-commish-* = the commissioner area.
   ════════════════════════════════════════════════════════════════════════════ */

/* ── Shared hub header ─────────────────────────────────────────────────────── */
/* SPEC_09 9.9: needs_relink banner on league views — flat, hairline, salmon. */
.bw-hub-relink {
    display: flex; align-items: center; justify-content: space-between; gap: 0.75rem;
    flex-wrap: wrap;
    background: color-mix(in srgb, var(--bw-gold) 10%, var(--bw-surface));
    border: 1px solid color-mix(in srgb, var(--bw-gold) 45%, transparent);
    border-radius: 10px;
    padding: 0.7rem 0.9rem;
    margin-bottom: 1rem;
    font-size: 0.8125rem;
    color: var(--bw-text-primary);
}
.bw-hub-relink-btn { flex: 0 0 auto; padding: 0.4rem 0.85rem; font-size: 0.78rem; }

.bw-hub-head { margin-bottom: 1rem; }
.bw-hub-head-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 0.75rem; }
.bw-hub-idty { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; min-width: 0; }
.bw-hub-league { font-family: var(--bw-font-display, inherit); font-size: 1.25rem; font-weight: 700; color: var(--bw-text-primary); }
.bw-hub-state {
    font-family: var(--bw-font-mono, monospace); font-size: 0.625rem; font-weight: 600; letter-spacing: 0.08em;
    text-transform: uppercase; color: var(--bw-gold);
    border: 1px solid var(--bw-border-strong); border-radius: var(--bw-radius-full);
    padding: 0.15rem 0.5rem; white-space: nowrap;
}
.bw-hub-head-actions { display: flex; align-items: center; gap: 0.5rem; flex-shrink: 0; }
.bw-hub-fresh { font-size: 0.6875rem; color: var(--bw-text-muted); display: inline-flex; align-items: center; gap: 0.35rem; }
.bw-hub-syncbtn, .bw-hub-gear {
    background: transparent; border: 1px solid var(--bw-border-subtle); color: var(--bw-text-secondary);
    border-radius: var(--bw-radius-full); cursor: pointer; font-size: 0.8125rem; line-height: 1;
    width: 1.9rem; height: 1.9rem; display: inline-flex; align-items: center; justify-content: center;
}
.bw-hub-syncbtn.wide { width: auto; padding: 0 0.65rem; font-size: 0.6875rem; }
.bw-hub-syncbtn:hover, .bw-hub-gear:hover { border-color: var(--bw-border-strong); color: var(--bw-text-primary); }
.bw-hub-me { display: flex; align-items: center; gap: 0.5rem; margin-top: 0.4rem; }
.bw-hub-me-av { font-size: 1rem; }
.bw-hub-me-nm { font-size: 0.8125rem; font-weight: 600; color: var(--bw-text-secondary); }
.bw-hub-rankchip {
    font-family: var(--bw-font-mono, monospace); font-size: 0.625rem; color: var(--bw-text-muted);
    border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-full); padding: 0.1rem 0.45rem;
}
/* The sub-nav row (.bw-hub-nav / .bw-hub-tab) is retired: the Clubhouse is the
   only landing and the Record Book launches from the Tools dock. A hairline under
   the header replaces the nav's bottom border for separation. */
.bw-hub-head-nonav { border-bottom: 1px solid var(--bw-border-subtle); padding-bottom: 0.85rem; }

/* ── 12-col hub grid: centered, capped at 1280px, rail collapses under 1024 ──
   The rail is `.bw-hubrail` (NOT `.bw-hub-rail`): the pools/home surfaces own
   `.bw-hub-rail` (a horizontal-scroll card row, app.css ~3803) and the two
   collided, bleeding overflow-x:auto into the hub rail (v2 §6.1). ── */
.bw-hub-grid { display: grid; grid-template-columns: 1fr; gap: 1.25rem; max-width: 1280px; margin: 0 auto; }
.bw-hub-main { min-width: 0; }
.bw-hubrail { min-width: 0; display: flex; flex-direction: column; gap: 1rem; }
@media (min-width: 1024px) {
    .bw-hub-grid { grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr); align-items: start; }
    .bw-hubrail { position: sticky; top: 1rem; }
}

/* ── Clubhouse season table (v2 §3.2): the landing centerpiece ─────────────── */
.bw-club-tablecard { border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-lg); background: var(--bw-surface); padding: 0.9rem 1rem; }
.bw-club-tablehead { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; }
.bw-club-seasonsel { width: auto; font-size: 0.75rem; padding: 0.3rem 0.5rem; }
.bw-club-seasonlabel { font-family: var(--bw-font-mono); font-size: 0.75rem; color: var(--bw-text-muted); }
.bw-club-table { width: 100%; }
.bw-fan-pf { font-family: var(--bw-font-mono); font-size: 0.8125rem; color: var(--bw-text-secondary); text-align: right; }
.bw-club-table th.bw-col-pf { text-align: right; }
.bw-fan-troph { white-space: nowrap; font-size: 0.85rem; }
.bw-fan-champcol { cursor: pointer; }
/* Playoff-line divider: a hairline rule between the last seed and the first miss. */
.bw-fan-poline td { padding: 0; border: 0; }
.bw-fan-poline td > span { display: block; border-top: 1px dashed var(--bw-gold); font-family: var(--bw-font-mono); font-size: 0.5rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--bw-gold); padding: 0.1rem 0 0.15rem; text-align: right; }

/* Responsive column shedding (v2 §7): PF appears >=560, Strk appears >=1024. */
.bw-col-pf { display: none; }
.bw-col-strk { display: none; }
@media (min-width: 560px) { .bw-col-pf { display: table-cell; } }
@media (min-width: 1024px) { .bw-col-strk { display: table-cell; } }

/* Clubhouse mobile stack order (v2 §3.1): hero, my team, tools, moments, table,
   record watch, then the Offseason tease (never load-bearing, so it sits last on
   a phone). Below 1024 the rail's cards interleave with the main column via
   `display: contents` + explicit order; at desktop the two-column grid returns. */
@media (max-width: 1023px) {
    .bw-hub-grid { display: flex; flex-direction: column; }
    .bw-hub-main, .bw-hubrail { display: contents; }
    .bw-club-hero { order: 1; }
    /* The week scoreboard (proposal 24) sits with the week, directly under the
       Week card. Empty in the offseason, so the rest of the stack is unchanged. */
    #bw-club-weekrail { order: 2; }
    .bw-club-myteam { order: 3; }
    .bw-club-dock { order: 4; }
    .bw-club-moments-sec { order: 5; }
    .bw-club-seasontable { order: 6; }
    .bw-club-recwatch { order: 7; }
    .bw-club-offs { order: 8; }
}

/* ── The state-aware hero ──────────────────────────────────────────────────── */
.bw-club-hero {
    border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-lg);
    background: var(--bw-surface); padding: 1.1rem 1.15rem; margin-bottom: 1rem;
}
.bw-club-hero-eyebrow {
    font-family: var(--bw-font-mono, monospace); font-size: 0.625rem; font-weight: 600; letter-spacing: 0.09em;
    text-transform: uppercase; color: var(--bw-gold); margin-bottom: 0.35rem;
}
.bw-club-hero-title { font-size: 1.15rem; font-weight: 700; color: var(--bw-text-primary); margin: 0 0 0.5rem; line-height: 1.25; }
.bw-club-hero-line { font-size: 0.85rem; color: var(--bw-text-secondary); margin: 0 0 0.3rem; line-height: 1.45; }
.bw-club-hero-actions { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-top: 0.85rem; }
.bw-club-heroBtn {
    border: 1px solid var(--bw-border-strong); background: transparent; color: var(--bw-text-primary);
    border-radius: var(--bw-radius-md); padding: 0.5rem 0.85rem; font-size: 0.8125rem; font-weight: 600; cursor: pointer;
}
.bw-club-heroBtn:hover { border-color: var(--bw-gold); }
.bw-club-heroBtn.primary { background: var(--bw-gold); border-color: var(--bw-gold); color: #1B2D4F; }
.bw-club-heroBtn.primary:hover { background: var(--bw-gold-deep); border-color: var(--bw-gold-deep); }

/* ── The Week card (proposal 24, the Living Clubhouse) ─────────────────────────
   Same hero shell, no new chrome: flat surface, hairline border, one accent.
   The score pair is mono so digits align; the two freshness chips are hairline
   outlines, never filled blocks, and the live chip uses the salmon accent (never
   red, house rule). Nothing here introduces a gradient or a one-sided edge. */
.bw-club-week .bw-club-hero-line.muted { color: var(--bw-text-muted); }
.bw-club-week .bw-club-hero-line.warn { color: var(--bw-gold); }
.bw-club-wkrow {
    display: flex; align-items: center; gap: 0.75rem; flex-wrap: wrap;
    margin: 0.15rem 0 0.7rem;
}
.bw-club-wkside { display: flex; align-items: baseline; gap: 0.5rem; min-width: 0; flex: 1; }
.bw-club-wkteam, .bw-club-wkopp {
    font-size: 0.95rem; font-weight: 700; color: var(--bw-text-primary);
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
a.bw-club-wkopp { text-decoration: none; }
a.bw-club-wkopp:hover { color: var(--bw-gold); }
.bw-club-wkvs { font-family: var(--bw-font-mono, monospace); font-size: 0.6875rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--bw-text-muted); }
.bw-club-wknum { font-family: var(--bw-font-mono, monospace); font-size: 1.25rem; font-weight: 700; color: var(--bw-text-primary); }
.bw-club-wknum.none { color: var(--bw-text-muted); font-weight: 400; }
.bw-club-wkfresh { display: flex; align-items: center; flex-wrap: wrap; gap: 0.4rem; margin-top: 0.7rem; }
.bw-club-wkchip {
    font-family: var(--bw-font-mono, monospace); font-size: 0.625rem; font-weight: 600;
    letter-spacing: 0.06em; text-transform: uppercase; color: var(--bw-text-muted);
    border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-sm, 4px);
    padding: 0.15rem 0.4rem;
}
.bw-club-wkchip.ev-live { color: var(--bw-gold); border-color: var(--bw-gold); }
.bw-club-wkchip.ev-final { color: var(--bw-text-secondary); border-color: var(--bw-border-strong); }
.bw-club-wkchip.ev-gap { color: var(--bw-text-muted); border-style: dashed; }
.bw-club-wkcap { font-family: var(--bw-font-mono, monospace); font-size: 0.625rem; color: var(--bw-text-muted); }

/* ── The league scoreboard strip (proposal 24 §2.2, rail) ─────────────────────
   One hairline card, one row per matchup, mono numbers so the columns align.
   The winner reads by weight, not by color: no green/red scoreboard palette. */
.bw-club-sbcard {
    border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-lg);
    background: var(--bw-surface); padding: 0.85rem 0.9rem;
}
.bw-club-sb { display: flex; flex-direction: column; }
.bw-club-sbrow {
    display: grid; grid-template-columns: 1fr 1fr auto; align-items: center; gap: 0.5rem;
    padding: 0.4rem 0; border-bottom: 1px solid var(--bw-border-subtle);
}
.bw-club-sbrow:last-child { border-bottom: none; }
.bw-club-sbside { display: flex; align-items: baseline; gap: 0.35rem; min-width: 0; }
.bw-club-sbnm {
    font-size: 0.75rem; color: var(--bw-text-secondary); text-decoration: none;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; min-width: 0;
}
a.bw-club-sbnm:hover { color: var(--bw-gold); }
.bw-club-sbnm.won { color: var(--bw-text-primary); font-weight: 700; }
.bw-club-sbpts { font-family: var(--bw-font-mono, monospace); font-size: 0.75rem; color: var(--bw-text-primary); }
.bw-club-sblean { font-family: var(--bw-font-mono, monospace); font-size: 0.625rem; color: var(--bw-text-muted); white-space: nowrap; }
.bw-club-sblean.none { font-style: italic; }
.bw-club-oddsnote { margin-top: 0.35rem; }
.bw-fan-odds, .bw-fan-xw { font-family: var(--bw-font-mono, monospace); font-size: 0.75rem; color: var(--bw-text-secondary); text-align: right; white-space: nowrap; }
/* Phone sheds the forward-look columns the way it already sheds PF and Strk. */
@media (max-width: 560px) { .bw-col-odds, .bw-col-xw { display: none; } }

/* ── Clubhouse sections (moments, standings snapshot) ──────────────────────── */
.bw-club-sec { margin-bottom: 1rem; }
.bw-club-sec-h {
    display: flex; align-items: baseline; justify-content: space-between; gap: 0.5rem;
    font-size: 0.75rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em;
    color: var(--bw-text-muted); margin-bottom: 0.5rem;
}
.bw-club-sec-link { font-size: 0.6875rem; font-weight: 600; color: var(--bw-gold); text-decoration: none; text-transform: none; letter-spacing: 0; }
.bw-club-moments { display: flex; flex-direction: column; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md); overflow: hidden; }
.bw-club-moment {
    display: flex; align-items: center; gap: 0.5rem; width: 100%; text-align: left; cursor: pointer;
    background: var(--bw-surface); border: none; border-bottom: 1px solid var(--bw-border-subtle);
    padding: 0.6rem 0.75rem; font-size: 0.8125rem; color: var(--bw-text-secondary);
}
.bw-club-moment:last-child { border-bottom: none; }
.bw-club-moment:hover { background: var(--bw-panel); }
.bw-club-moment-dot { color: var(--bw-gold); font-weight: 700; }
.bw-club-moment-tx { flex: 1; min-width: 0; }
.bw-club-moment-arr { color: var(--bw-text-muted); }

.bw-club-standings { display: flex; flex-direction: column; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md); overflow: hidden; }
.bw-club-strow {
    display: flex; align-items: center; gap: 0.6rem; width: 100%; text-align: left; cursor: pointer;
    background: var(--bw-surface); border: none; border-bottom: 1px solid var(--bw-border-subtle); padding: 0.5rem 0.75rem;
}
.bw-club-strow:last-child { border-bottom: none; }
.bw-club-strow:hover { background: var(--bw-panel); }
.bw-club-strow.me { background: color-mix(in srgb, var(--bw-gold) 10%, var(--bw-surface)); }
.bw-club-strk { font-family: var(--bw-font-mono, monospace); font-size: 0.75rem; color: var(--bw-text-muted); width: 1.4rem; text-align: center; }
.bw-club-stav { font-size: 0.95rem; }
.bw-club-stnm { flex: 1; min-width: 0; font-size: 0.8125rem; font-weight: 600; color: var(--bw-text-primary); display: flex; flex-direction: column; }
.bw-club-stnm small { font-weight: 400; font-size: 0.6875rem; color: var(--bw-text-muted); }
.bw-club-strec { font-family: var(--bw-font-mono, monospace); font-size: 0.75rem; color: var(--bw-text-secondary); }

/* ── Rail: my team, tools dock, record watch ───────────────────────────────── */
.bw-club-dock-h { font-size: 0.75rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); margin-bottom: 0.5rem; }
.bw-club-myteam, .bw-club-dock, .bw-club-recwatch, .bw-club-offs {
    border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-lg); background: var(--bw-surface); padding: 0.85rem 0.9rem;
}
/* The Offseason tease: hairline card, muted text, no accent (RELAUNCH §3). */
.bw-club-offs { display: block; text-decoration: none; }
.bw-club-offs:hover { border-color: var(--bw-border-strong); }
.bw-club-offs .bw-club-dock-h { display: block; }
.bw-club-offs-line { display: block; font-size: 0.8125rem; line-height: 1.45; color: var(--bw-text-secondary); }
.bw-club-muted { font-size: 0.8125rem; color: var(--bw-text-muted); margin: 0; }
.bw-club-myteam-top { display: flex; align-items: center; gap: 0.6rem; }
.bw-club-myteam-av { font-size: 1.4rem; }
.bw-club-myteam-id { display: flex; flex-direction: column; min-width: 0; }
.bw-club-myteam-nm { font-size: 0.9rem; font-weight: 700; color: var(--bw-text-primary); }
.bw-club-myteam-sub { font-family: var(--bw-font-mono, monospace); font-size: 0.6875rem; color: var(--bw-text-muted); }
.bw-club-myteam-ov { font-family: var(--bw-font-mono, monospace); font-size: 0.6875rem; color: var(--bw-text-muted); margin-top: 0.5rem; }
.bw-club-keeptitle { font-size: 0.6875rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); margin-top: 0.85rem; }
.bw-club-keepfoot { display: block; width: 100%; text-align: left; margin-top: 0.55rem; background: transparent; border: none; padding: 0; color: var(--bw-gold); font-size: 0.6875rem; font-weight: 600; cursor: pointer; }
.bw-club-keepfoot:hover { color: var(--bw-gold-deep); }
.bw-club-myteam-chips { display: flex; flex-wrap: wrap; gap: 0.35rem; margin-top: 0.5rem; }
.bw-kv {
    font-size: 0.625rem; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-full);
    padding: 0.12rem 0.45rem; color: var(--bw-text-secondary); display: inline-flex; gap: 0.3rem; align-items: center;
}
.bw-kv b { font-family: var(--bw-font-mono, monospace); font-weight: 700; }
.bw-kv.keep b { color: var(--bw-success, #059669); }
.bw-kv.bubble b { color: var(--bw-gold); }
.bw-kv.letgo b { color: var(--bw-gold-deep); }
.bw-kv.muted b { color: var(--bw-text-muted); }
.bw-club-myteam-link, .bw-club-sec-allbtn {
    margin-top: 0.75rem; width: 100%; background: transparent; border: 1px solid var(--bw-border-subtle);
    border-radius: var(--bw-radius-md); color: var(--bw-text-secondary); font-size: 0.75rem; font-weight: 600;
    padding: 0.45rem; cursor: pointer;
}
.bw-club-myteam-link:hover { border-color: var(--bw-gold); color: var(--bw-text-primary); }
.bw-club-dock-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.5rem; }
.bw-club-tile {
    display: flex; align-items: center; gap: 0.5rem; text-align: left; cursor: pointer;
    border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md); background: var(--bw-panel); padding: 0.6rem 0.65rem;
}
.bw-club-tile:hover { border-color: var(--bw-gold); }
.bw-club-tile-icon { font-size: 1.05rem; }
.bw-club-tile-txt { display: flex; flex-direction: column; min-width: 0; }
.bw-club-tile-nm { font-size: 0.75rem; font-weight: 700; color: var(--bw-text-primary); }
.bw-club-tile-st { font-size: 0.625rem; color: var(--bw-text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bw-club-recwatch .bw-club-moment { border: none; border-radius: var(--bw-radius-sm); background: transparent; padding: 0.4rem 0; }
.bw-club-recwatch .bw-club-moment:hover { background: transparent; color: var(--bw-text-primary); }

/* ── Managers index ────────────────────────────────────────────────────────── */
.bw-mgr-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 0.75rem; }
.bw-mgr-card {
    display: flex; align-items: center; gap: 0.65rem; text-align: left; cursor: pointer;
    border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-lg); background: var(--bw-surface); padding: 0.85rem 0.9rem;
}
.bw-mgr-card:hover { border-color: var(--bw-gold); }
.bw-mgr-av { font-size: 1.6rem; }
.bw-mgr-body { display: flex; flex-direction: column; min-width: 0; }
.bw-mgr-nm { font-size: 0.875rem; font-weight: 700; color: var(--bw-text-primary); }
.bw-mgr-tm { font-size: 0.75rem; color: var(--bw-text-secondary); }
.bw-mgr-meta { font-family: var(--bw-font-mono, monospace); font-size: 0.6875rem; color: var(--bw-text-muted); margin-top: 0.15rem; }

/* ── Commissioner area ─────────────────────────────────────────────────────── */
.bw-commish-wrap { max-width: 760px; }
.bw-commish-title { font-size: 1.1rem; font-weight: 700; color: var(--bw-text-primary); margin: 0.75rem 0 1rem; }
.bw-commish-sec { margin-bottom: 1.5rem; }

@media (min-width: 560px) {
    .bw-mgr-grid { grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); }
}
@media (max-width: 559px) {
    .bw-club-dock-grid { grid-template-columns: 1fr; }
    .bw-hub-league { font-size: 1.1rem; }
}

/* ── Manager profile v2 (LEAGUE_HUB_SPEC §5.2) ─────────────────────────────── */
.bw-fanm-linkacts { display: flex; gap: 0.4rem; margin-top: 0.4rem; }
.bw-fanm-linkbtn { border: 1px solid var(--bw-border-subtle); background: transparent; color: var(--bw-text-secondary); font-size: 0.6875rem; font-weight: 600; padding: 0.25rem 0.55rem; border-radius: var(--bw-radius-full); cursor: pointer; }
.bw-fanm-linkbtn:hover { border-color: var(--bw-gold); color: var(--bw-text-primary); }
.bw-fanm-model { font-family: var(--bw-font-mono); font-size: 0.5625rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--bw-text-muted); margin: 0.5rem 0 0; }
.bw-fanm-persona { font-size: 0.875rem; color: var(--bw-text-secondary); margin: 0 0 0.7rem; line-height: 1.4; }
.bw-fanm-sub-t { font-family: var(--bw-font-mono); font-size: 0.625rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); margin: 0.85rem 0 0.4rem; }
/* First eyebrow group inside a section card sits flush under the section title. */
.bw-fanm-sub-t--lead { margin-top: 0; }
/* Draft-record season picker: chip row (<= 8 seasons, the Wire idiom) or the
   house select. Sits between the persona card and the one visible season card. */
.bw-fanm-dpick { margin: 0; }
.bw-fanm-dpick.bw-tm-recs { padding-bottom: 0; margin-bottom: 0; }

/* Roster rows with headshot + position + verdict chip */
.bw-kp.face { grid-template-columns: auto auto 1fr auto; }
.bw-kp.ro.face { grid-template-columns: auto 1fr auto; }
/* In-season starter rows carry a leading slot chip as a fourth column. */
.bw-kp.ro.face.slotted { grid-template-columns: auto auto 1fr auto; }
.bw-kp-face { width: 2rem; height: 2rem; border-radius: var(--bw-radius-full); object-fit: cover; background: var(--bw-panel); border: 1px solid var(--bw-border-subtle); display: inline-flex; align-items: center; justify-content: center; }
.bw-kp-face.ph { font-family: var(--bw-font-mono); font-size: 0.625rem; color: var(--bw-text-muted); }
.bw-kp-pos { font-family: var(--bw-font-mono); font-size: 0.625rem; color: var(--bw-text-muted); font-weight: 600; }

/* Trade DNA */
.bw-dna-rows { display: flex; flex-direction: column; gap: 0.3rem; margin-bottom: 0.5rem; }
.bw-dna-row { display: flex; align-items: baseline; justify-content: space-between; gap: 0.5rem; font-size: 0.8125rem; color: var(--bw-text-secondary); border-bottom: 1px solid var(--bw-border-subtle); padding-bottom: 0.3rem; }
.bw-dna-row b { font-family: var(--bw-font-mono); color: var(--bw-text-primary); }
.bw-dna-sub { font-family: var(--bw-font-mono); font-size: 0.5625rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); margin: 0.5rem 0 0.3rem; }
.bw-dna-chips { display: flex; flex-wrap: wrap; gap: 0.35rem; }
.bw-dna-chip { font-size: 0.6875rem; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-full); padding: 0.15rem 0.5rem; color: var(--bw-text-secondary); }
.bw-dna-chip b { font-family: var(--bw-font-mono); color: var(--bw-text-muted); }
.bw-dna-chip.pos { border-color: color-mix(in srgb, var(--bw-success, #059669) 40%, transparent); color: var(--bw-success, #059669); }
.bw-dna-chip.neg { border-color: color-mix(in srgb, var(--bw-gold-deep) 40%, transparent); color: var(--bw-gold-deep); }

/* Achievements gallery */
.bw-ach-wrap { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-top: 0.4rem; }
.bw-ach { display: inline-flex; align-items: center; gap: 0.3rem; font-size: 0.6875rem; font-weight: 600; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-full); padding: 0.2rem 0.55rem; color: var(--bw-text-secondary); }
.bw-ach-em { font-size: 0.85rem; }

/* Tendencies */
.bw-tend-row { display: flex; align-items: baseline; gap: 0.5rem; font-size: 0.8125rem; color: var(--bw-text-secondary); }
.bw-tend-row b { font-family: var(--bw-font-mono); color: var(--bw-text-primary); }
.bw-tend-q { font-family: var(--bw-font-mono); font-size: 0.625rem; color: var(--bw-text-muted); margin-left: auto; }

/* Managers index head + sort */
.bw-mgr-head { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; margin-bottom: 0.6rem; }
.bw-mgr-sort { width: auto; font-size: 0.75rem; padding: 0.3rem 0.5rem; }

/* ── Record Book v2 (LEAGUE_HUB_V2_SPEC §5): centered page + explicit CSS grid ─
   The uneven CSS-columns masonry is replaced by a 2-col grid with explicit
   placement (championship wall + achievements span full width). ── */
.bw-rec2-page { max-width: 1280px; margin: 0 auto; }
.bw-rec2-grid { display: grid; grid-template-columns: 1fr; gap: 1rem; align-items: start; }
@media (min-width: 900px) { .bw-rec2-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.bw-rec2-full { grid-column: 1 / -1; }
.bw-rec2-block { margin: 0; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-lg); background: var(--bw-surface); padding: 0.9rem 1rem; }
.bw-rec2-h { font-size: 0.8125rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); margin-bottom: 0.7rem; }
.bw-rec2-sub { font-size: 0.75rem; color: var(--bw-text-muted); margin: -0.4rem 0 0.7rem; }
.bw-rec2-chips { display: flex; gap: 0.35rem; margin-bottom: 0.7rem; }
.bw-rec2-chip { font-size: 0.6875rem; font-weight: 600; border: 1px solid var(--bw-border-subtle); background: transparent; color: var(--bw-text-secondary); border-radius: var(--bw-radius-full); padding: 0.2rem 0.6rem; cursor: pointer; }
.bw-rec2-chip.on { border-color: var(--bw-gold); color: var(--bw-text-primary); background: color-mix(in srgb, var(--bw-gold) 12%, transparent); }
.bw-rec2-who { color: var(--bw-text-primary); font-weight: 600; cursor: pointer; }
.bw-rec2-who:hover { color: var(--bw-gold); }
.bw-rec2-dyn { font-family: var(--bw-font-mono); font-size: 0.5625rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--bw-gold); border: 1px solid color-mix(in srgb, var(--bw-gold) 40%, transparent); border-radius: var(--bw-radius-full); padding: 0.05rem 0.35rem; margin-left: 0.35rem; }
.bw-fan-champ-sc { font-family: var(--bw-font-mono); font-size: 0.75rem; color: var(--bw-text-muted); }
.bw-rec2-rk { font-family: var(--bw-font-mono); font-size: 0.6875rem; color: var(--bw-text-muted); width: 1rem; display: inline-block; }
.bw-rec2-lb li { display: flex; align-items: baseline; gap: 0.4rem; }
.bw-rec2-lb li b { margin-left: auto; font-family: var(--bw-font-mono); }
.bw-rec2-rivs { display: flex; flex-direction: column; gap: 0.4rem; }
.bw-rec2-riv { display: flex; flex-direction: column; gap: 0.15rem; padding: 0.5rem 0.6rem; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md); }
.bw-rec2-rivnm { font-size: 0.8125rem; }
/* The head-to-head record: full contrast, normal spacing, breathing margin, so
   it reads as part of the "leads / tied" sentence, not a sandwiched glyph run. */
.bw-rec2-rivrec { font-family: var(--bw-font-mono); font-weight: 700; color: var(--bw-text-primary); letter-spacing: normal; margin: 0 0.45rem; }
.bw-rec2-rivmeta { font-family: var(--bw-font-mono); font-size: 0.625rem; color: var(--bw-text-muted); }
.bw-rec2-rivstreak { color: var(--bw-gold); }
/* Achievements: a badge-tile trophy case, never a comma run-on. Tiles 2-up on
   phone, 3-up tablet, 4-up desktop (v2 §7). */
.bw-rec2-achs { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.5rem; }
@media (min-width: 560px) { .bw-rec2-achs { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (min-width: 900px) { .bw-rec2-achs { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
.bw-rec2-achtile { display: flex; flex-direction: column; gap: 0.25rem; padding: 0.6rem 0.65rem; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md); background: var(--bw-panel); }
.bw-rec2-achtile.dim { opacity: 0.5; }
.bw-rec2-achtop { display: flex; align-items: center; justify-content: space-between; }
.bw-rec2-achemoji { font-size: 1.5rem; }
.bw-rec2-achcount { font-family: var(--bw-font-mono); font-size: 0.625rem; font-weight: 700; color: var(--bw-gold); border: 1px solid color-mix(in srgb, var(--bw-gold) 40%, transparent); border-radius: var(--bw-radius-full); padding: 0.05rem 0.4rem; }
.bw-rec2-achname { font-size: 0.8125rem; font-weight: 700; color: var(--bw-text-primary); }
.bw-rec2-achlines { display: flex; flex-direction: column; gap: 0.1rem; }
.bw-rec2-achhidden { display: none; }
.bw-rec2-achline { font-size: 0.6875rem; color: var(--bw-text-secondary); }
.bw-rec2-achunclaimed { font-family: var(--bw-font-mono); font-size: 0.625rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); }
.bw-rec2-achmore { align-self: flex-start; margin-top: 0.15rem; background: transparent; border: none; color: var(--bw-gold); font-size: 0.625rem; font-weight: 600; cursor: pointer; padding: 0; }
.bw-fan-champ-yr { font-size: 1.15rem; }

/* ── Commissioner area (LEAGUE_HUB_SPEC §7) ────────────────────────────────── */
/* Danger zone: flat, hairline, salmon accents. No red, no drama (taste rules). */
.bw-danger-zone { border: 1px solid color-mix(in srgb, var(--bw-gold-deep) 45%, transparent); }
.bw-danger-label { color: var(--bw-gold-deep); font-family: var(--bw-font-mono); font-size: 0.625rem; text-transform: uppercase; letter-spacing: 0.06em; }
.bw-danger-btn { width: 100%; background: transparent; color: var(--bw-gold-deep); border: 1px solid var(--bw-gold-deep); font-weight: 600; }
.bw-danger-btn:hover { background: color-mix(in srgb, var(--bw-gold-deep) 10%, transparent); }

/* Manager notes */
.bw-note-row { display: grid; grid-template-columns: 1fr auto; gap: 0.5rem 0.75rem; align-items: start; padding: 0.75rem 0; border-bottom: 1px solid var(--bw-border-subtle); }
.bw-note-who { grid-column: 1 / -1; font-size: 0.8125rem; font-weight: 600; color: var(--bw-text-primary); display: flex; align-items: center; gap: 0.4rem; }
.bw-note-ta { width: 100%; min-height: 2.4rem; resize: vertical; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md); background: var(--bw-surface); color: var(--bw-text-primary); font: inherit; font-size: 0.8125rem; padding: 0.5rem 0.6rem; }
.bw-note-ta:focus { outline: none; border-color: var(--bw-gold); }
.bw-note-save { align-self: start; border: 1px solid var(--bw-border-subtle); background: transparent; color: var(--bw-text-secondary); font-size: 0.75rem; font-weight: 600; padding: 0.5rem 0.75rem; border-radius: var(--bw-radius-md); cursor: pointer; }
.bw-note-save:hover { border-color: var(--bw-gold); color: var(--bw-text-primary); }

/* ==========================================================================
   ADMIN CONSOLE (#/admin) — flat, hairline, salmon accent (--bw-gold), neutral
   background. Matches the League Hub v2 language. Theme-aware via --bw-* vars.
   ========================================================================== */
.bw-adm { max-width: 1080px; margin: 0 auto; }
.bw-adm-head { display: flex; align-items: center; gap: 0.6rem; margin: 0 0 1rem; }
.bw-adm-title { font-family: var(--bw-font-display); font-size: 1.375rem; font-weight: 800; margin: 0; color: var(--bw-text-primary); letter-spacing: -0.01em; }
.bw-adm-rolechip { font-family: var(--bw-font-mono); font-size: 0.625rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--bw-text-muted); border: 1px solid var(--bw-border-subtle); border-radius: 6px; padding: 0.1rem 0.4rem; }
.bw-adm-rolechip.super { color: var(--bw-gold); border-color: var(--bw-gold); }

.bw-adm-layout { display: grid; grid-template-columns: 190px 1fr; gap: 1.25rem; align-items: start; }
.bw-adm-rail { display: flex; flex-direction: column; gap: 0.15rem; position: sticky; top: 0.5rem; }
/* Five task-shaped groups (proposal 28 §3.1). The label is a quiet mono
   eyebrow, not a heading weight: the rail is still one list to scan. */
.bw-adm-railgroup { display: flex; flex-direction: column; gap: 0.15rem; }
.bw-adm-railgroup + .bw-adm-railgroup { margin-top: 0.7rem; }
.bw-adm-railgroup-label { font-family: var(--bw-font-mono); font-size: 0.5625rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--bw-text-muted); padding: 0 0.65rem 0.25rem; }
.bw-adm-navitem { display: flex; align-items: center; gap: 0.55rem; text-align: left; width: 100%; padding: 0.5rem 0.65rem; border: none; background: transparent; border-radius: 8px; font-size: 0.875rem; font-weight: 600; color: var(--bw-text-secondary); cursor: pointer; transition: background 0.12s, color 0.12s; }
.bw-adm-navitem:hover { background: color-mix(in srgb, var(--bw-gold) 8%, transparent); color: var(--bw-text-primary); }
.bw-adm-navitem.active { background: color-mix(in srgb, var(--bw-gold) 14%, transparent); color: var(--bw-text-primary); }
.bw-adm-navitem.danger { color: var(--bw-gold); }
.bw-adm-navicon { display: inline-flex; align-items: center; justify-content: center; width: 1.2rem; flex: 0 0 1.2rem; color: var(--bw-text-muted); }
.bw-adm-navitem.active .bw-adm-navicon, .bw-adm-navitem:hover .bw-adm-navicon { color: var(--bw-gold); }
.bw-adm-navitem.danger .bw-adm-navicon { color: var(--bw-gold); }
.bw-adm-navitem:focus-visible { outline: 2px solid var(--bw-gold); outline-offset: 1px; }
.bw-adm-main { min-width: 0; }
/* The shared section body every leaf renderer replaces wholesale. It had no
   rule at all, so a wide table could push the grid instead of scrolling. */
.bw-adm-body { min-width: 0; }

.bw-adm-subnav { display: flex; gap: 0.25rem; flex-wrap: wrap; border-bottom: 1px solid var(--bw-border-subtle); margin-bottom: 1rem; }
.bw-adm-tab { border: none; background: transparent; padding: 0.5rem 0.75rem; font-size: 0.8125rem; font-weight: 600; color: var(--bw-text-muted); cursor: pointer; border-bottom: 2px solid transparent; margin-bottom: -1px; }
.bw-adm-tab.active { color: var(--bw-text-primary); border-bottom-color: var(--bw-gold); }
.bw-adm-tab:hover { color: var(--bw-text-primary); }
.bw-adm-tab:focus-visible, .bw-adm-minibtn:focus-visible { outline: 2px solid var(--bw-gold); outline-offset: 1px; border-radius: 4px; }
.bw-adm-table tr[role="button"]:focus-visible { outline: 2px solid var(--bw-gold); outline-offset: -2px; }
/* Count chip on a sub-nav tab (the ADP resolution queue's depth). */
.bw-adm-tabcount { display: inline-block; margin-left: 0.3rem; font-family: var(--bw-font-mono); font-size: 0.625rem; font-weight: 700; color: var(--bw-gold); border: 1px solid color-mix(in srgb, var(--bw-gold) 45%, transparent); border-radius: 999px; padding: 0.02rem 0.35rem; }
.bw-adm-tabcount[hidden] { display: none; }

/* Table pagers (resolution queue, waitlist). */
.bw-adm-pager { display: flex; align-items: center; gap: 0.5rem; margin-top: 0.6rem; }
.bw-adm-pager .bw-adm-minibtn { margin-left: 0; }
.bw-adm-pager .bw-adm-minibtn[disabled] { opacity: 0.45; cursor: default; }
.bw-adm-pager .bw-adm-hint { padding: 0; }

/* In-table chooser (queue candidate select / raw player id). */
.bw-adm-qsel { max-width: 20rem; width: 100%; padding: 0.3rem 0.4rem; font-size: 0.8125rem; border: 1px solid var(--bw-border); border-radius: 6px; background: var(--bw-bg); color: var(--bw-text-primary); }
.bw-adm-qsel:focus { outline: none; border-color: var(--bw-gold); }

.bw-adm-sechead { margin: 0 0 1rem; }
.bw-adm-sechead h2 { font-family: var(--bw-font-display); font-size: 1.125rem; font-weight: 800; margin: 0 0 0.15rem; color: var(--bw-text-primary); }
.bw-adm-sechead p { margin: 0; font-size: 0.8125rem; color: var(--bw-text-muted); }
.bw-adm-secsub { font-family: var(--bw-font-mono); font-size: 0.6875rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); margin: 1.4rem 0 0.6rem; }

.bw-adm-health { display: flex; flex-wrap: wrap; gap: 0.4rem 1.1rem; padding: 0.6rem 0.85rem; border: 1px solid var(--bw-border-subtle); border-radius: 10px; background: var(--bw-surface); font-size: 0.75rem; color: var(--bw-text-secondary); }
.bw-adm-health b { color: var(--bw-text-muted); font-weight: 600; margin-right: 0.25rem; }
.bw-adm-health .flag { color: var(--bw-gold); }

.bw-adm-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 1.25rem; }
.bw-adm-cols > div { min-width: 0; }

.bw-adm-privacy { border: 1px solid var(--bw-border-subtle); border-left: 2px solid var(--bw-gold); border-radius: 8px; background: var(--bw-surface); padding: 0.6rem 0.85rem; font-size: 0.75rem; line-height: 1.5; color: var(--bw-text-secondary); margin-bottom: 0.5rem; }
.bw-adm-hint { font-size: 0.75rem; color: var(--bw-text-muted); padding: 0.35rem 0.1rem; margin: 0; }

.bw-adm-searchbar { display: flex; gap: 0.4rem; margin: 0.5rem 0 1rem; flex-wrap: wrap; }
.bw-input { flex: 1; min-width: 180px; padding: 0.5rem 0.7rem; font-size: 0.875rem; border: 1px solid var(--bw-border); border-radius: 8px; background: var(--bw-bg); color: var(--bw-text-primary); }
.bw-input:focus { outline: none; border-color: var(--bw-gold); }

.bw-adm-tablewrap { overflow-x: auto; border: 1px solid var(--bw-border-subtle); border-radius: 10px; }
.bw-adm-table { width: 100%; border-collapse: collapse; font-size: 0.8125rem; }
.bw-adm-table th { text-align: left; font-family: var(--bw-font-mono); font-size: 0.625rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--bw-text-muted); font-weight: 600; padding: 0.55rem 0.65rem; border-bottom: 1px solid var(--bw-border-subtle); white-space: nowrap; }
.bw-adm-table td { padding: 0.5rem 0.65rem; border-bottom: 1px solid var(--bw-border-subtle); color: var(--bw-text-primary); vertical-align: middle; }
.bw-adm-table tbody tr:last-child td { border-bottom: none; }
.bw-adm-td-id { color: var(--bw-text-muted); font-family: var(--bw-font-mono); font-size: 0.75rem; }
.bw-adm-td-email { color: var(--bw-text-secondary); }
.bw-adm-td-muted { color: var(--bw-text-muted); white-space: nowrap; }
.bw-adm-td-team { font-weight: 600; }
.bw-adm-td-actions { text-align: right; white-space: nowrap; }

.bw-adm-rolebadge { font-family: var(--bw-font-mono); font-size: 0.5625rem; text-transform: uppercase; letter-spacing: 0.03em; border-radius: 4px; padding: 0.05rem 0.3rem; border: 1px solid var(--bw-border); color: var(--bw-text-muted); }
.bw-adm-rolebadge.super { color: var(--bw-gold); border-color: var(--bw-gold); }

.bw-adm-minibtn { font-size: 0.75rem; font-weight: 600; padding: 0.3rem 0.6rem; border-radius: 6px; border: 1px solid var(--bw-border); background: var(--bw-surface); color: var(--bw-text-secondary); cursor: pointer; margin-left: 0.3rem; }
.bw-adm-minibtn:hover { border-color: var(--bw-gold); color: var(--bw-text-primary); }
.bw-adm-minibtn.danger { color: var(--bw-gold); border-color: color-mix(in srgb, var(--bw-gold) 40%, var(--bw-border)); }
.bw-adm-lock { color: var(--bw-text-muted); font-size: 0.9rem; }

.bw-adm-bar { display: flex; align-items: center; gap: 0.5rem; font-size: 0.75rem; margin: 0.3rem 0; }
.bw-adm-bar-l { flex: 0 0 38%; color: var(--bw-text-secondary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bw-adm-bar-track { flex: 1; height: 7px; background: var(--bw-border-subtle); border-radius: 4px; overflow: hidden; }
.bw-adm-bar-fill { display: block; height: 100%; background: var(--bw-gold); border-radius: 4px; }
.bw-adm-bar-v { flex: 0 0 auto; color: var(--bw-text-muted); font-family: var(--bw-font-mono); font-size: 0.6875rem; min-width: 2.2rem; text-align: right; }

.bw-adm-toolbar { display: flex; gap: 0.4rem; flex-wrap: wrap; margin: 0.5rem 0 1rem; }

@media (max-width: 720px) {
    .bw-adm-layout { grid-template-columns: 1fr; }
    .bw-adm-rail { position: static; flex-direction: row; overflow-x: auto; gap: 0.25rem; padding-bottom: 0.35rem; border-bottom: 1px solid var(--bw-border-subtle); margin-bottom: 0.75rem; }
    /* The rail becomes one horizontal scroller: the groups stop being boxes and
       let their items flow into the row, with the label riding along as the
       divider it already is. */
    .bw-adm-railgroup { display: contents; }
    .bw-adm-railgroup-label { align-self: center; flex: 0 0 auto; white-space: nowrap; padding: 0 0.2rem 0 0.5rem; }
    /* width:auto is load-bearing: the rail's base rule sets width:100%, which a
       flex-basis of auto then resolves against the SCROLLER, so every item was
       a full viewport wide and the row scrolled for thirteen screens. */
    .bw-adm-navitem { flex: 0 0 auto; width: auto; white-space: nowrap; padding: 0.4rem 0.6rem; }
    .bw-adm-navitem span:not(.bw-adm-navicon) { font-size: 0.8125rem; }
    .bw-adm-cols { grid-template-columns: 1fr; }
    .bw-adm-pager { flex-wrap: wrap; }
}

/* ── Ticker curation console (proposal 29 §2.1) ─────────────────────────────
   The composition first, the table second. Flat surfaces, hairline borders,
   no colored edges: the only color in here is the gold that already marks a
   selected control everywhere else in the console. */
.bw-adm-sechead-split { display: flex; justify-content: space-between; align-items: flex-start; gap: 1rem; flex-wrap: wrap; }
.bw-adm-tick-acts { display: flex; align-items: center; gap: 0.4rem; flex: 0 0 auto; }
.bw-adm-tick-err { font-size: 0.8125rem; color: var(--bw-text-secondary); border: 1px solid var(--bw-border-subtle); border-radius: 10px; background: var(--bw-surface); padding: 0.6rem 0.85rem; margin: 0 0 0.75rem; line-height: 1.5; }

.bw-adm-tick-panel { border: 1px solid var(--bw-border-subtle); border-radius: 10px; background: var(--bw-surface); padding: 0.85rem 1rem; margin-bottom: 1.25rem; }
.bw-adm-tick-head { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; flex-wrap: wrap; margin-bottom: 0.6rem; }
.bw-adm-tick-tabs { display: inline-flex; gap: 0.25rem; }
.bw-adm-tick-tab { font-size: 0.75rem; font-weight: 600; padding: 0.3rem 0.6rem; border-radius: 6px; border: 1px solid var(--bw-border); background: transparent; color: var(--bw-text-muted); cursor: pointer; }
.bw-adm-tick-tab:hover { color: var(--bw-text-primary); }
.bw-adm-tick-tab.is-on { color: var(--bw-text-primary); border-color: var(--bw-gold); }
.bw-adm-tick-tab:focus-visible { outline: 2px solid var(--bw-gold); outline-offset: 1px; }
.bw-adm-tick-cache { font-size: 0.75rem; color: var(--bw-text-muted); }

.bw-adm-tick-list { list-style: none; margin: 0 0 0.5rem; padding: 0; }
.bw-adm-tick-item { display: flex; align-items: baseline; gap: 0.6rem; flex-wrap: wrap; font-size: 0.8125rem; padding: 0.4rem 0; border-top: 1px solid var(--bw-border-subtle); }
.bw-adm-tick-item:first-child { border-top: none; }
.bw-adm-tick-num { flex: 0 0 1.4rem; font-family: var(--bw-font-mono); font-size: 0.6875rem; color: var(--bw-text-muted); text-align: right; }
.bw-adm-tick-origin { flex: 0 0 auto; font-family: var(--bw-font-mono); font-size: 0.5625rem; text-transform: uppercase; letter-spacing: 0.03em; border: 1px solid var(--bw-border); border-radius: 4px; padding: 0.05rem 0.3rem; color: var(--bw-text-muted); }
.bw-adm-tick-origin.curated { color: var(--bw-gold); border-color: var(--bw-gold); }
.bw-adm-tick-line { flex: 1 1 16rem; min-width: 0; color: var(--bw-text-primary); }
.bw-adm-tick-line b { font-weight: 800; }
.bw-adm-tick-meta { flex: 0 0 auto; font-family: var(--bw-font-mono); font-size: 0.6875rem; color: var(--bw-text-muted); }
.bw-adm-tick-note { flex: 1 1 100%; font-size: 0.75rem; color: var(--bw-text-muted); margin: 0.2rem 0 0; line-height: 1.5; }

.bw-adm-tick-card { border: 1px solid var(--bw-border-subtle); border-radius: 10px; background: var(--bw-panel); padding: 0.7rem 0.85rem; margin: 0.75rem 0 0; font-size: 0.8125rem; color: var(--bw-text-secondary); line-height: 1.5; }
.bw-adm-tick-card p { margin: 0 0 0.4rem; }
.bw-adm-tick-card b { color: var(--bw-text-primary); }
.bw-adm-tick-card .bw-adm-minibtn { margin-left: 0; }

.bw-adm-tick-quiet { margin-top: 0.75rem; }
.bw-adm-tick-quiet > summary { font-size: 0.75rem; color: var(--bw-text-muted); cursor: pointer; }
.bw-adm-tick-quiet ul { list-style: none; margin: 0.5rem 0 0; padding: 0; }
.bw-adm-tick-quietrow { display: flex; align-items: baseline; gap: 0.6rem; flex-wrap: wrap; font-size: 0.8125rem; color: var(--bw-text-muted); padding: 0.35rem 0; border-top: 1px solid var(--bw-border-subtle); }
.bw-adm-tick-quietrow .bw-adm-tick-line { color: var(--bw-text-secondary); }

.bw-adm-tick-h3 { font-family: var(--bw-font-mono); font-size: 0.6875rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); margin: 1.4rem 0 0.6rem; }
.bw-adm-tick-grip { color: var(--bw-text-muted); font-size: 0.75rem; cursor: grab; letter-spacing: -0.1em; }
.bw-adm-tick-row.dragging { opacity: 0.5; }
.bw-adm-tick-row[draggable="true"]:focus-within { outline: 2px solid var(--bw-gold); outline-offset: -2px; }

/* Danger Zone cards */
.bw-adm-dwrap { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 0.6rem; }
.bw-adm-dcard { display: flex; align-items: flex-start; justify-content: space-between; gap: 0.75rem; border: 1px solid var(--bw-border-subtle); border-radius: 10px; padding: 0.75rem 0.85rem; background: var(--bw-surface); }
.bw-adm-dcard-body { display: flex; flex-direction: column; gap: 0.15rem; min-width: 0; }
.bw-adm-dcard-body b { font-size: 0.875rem; color: var(--bw-text-primary); }
.bw-adm-dcard-body span { font-size: 0.75rem; color: var(--bw-text-muted); line-height: 1.45; }
.bw-adm-dcard > .bw-adm-minibtn { flex: 0 0 auto; margin-top: 0.1rem; }
.bw-adm-preview { margin-top: 0.6rem; padding-top: 0.6rem; border-top: 1px solid var(--bw-border-subtle); font-size: 0.8125rem; }
.bw-adm-chips { display: flex; flex-wrap: wrap; gap: 0.3rem; margin: 0.4rem 0; }
.bw-adm-chip { font-family: var(--bw-font-mono); font-size: 0.625rem; color: var(--bw-text-secondary); border: 1px solid var(--bw-border-subtle); border-radius: 4px; padding: 0.1rem 0.35rem; }
/* Draft Lab: the signed ours-minus-market column. Same pos/neg vocabulary as
   the Trade Machine deltas. */
.bw-adm-delta { font-family: var(--bw-font-mono); font-weight: 600; }
.bw-adm-delta.pos { color: var(--bw-success, #16a34a); }
.bw-adm-delta.neg { color: var(--bw-gold-deep, #B8860B); }

/* State pills + progress minis. Born on the Keepers console (bw-kpr-*, with
   two hardcoded hexes that ignored the theme); now console-wide and tokenized,
   so both themes and any future palette change carry them. */
.bw-adm-pill { display: inline-block; font-family: var(--bw-font-mono); font-size: 0.625rem; text-transform: uppercase; letter-spacing: 0.03em; font-weight: 700; padding: 0.12rem 0.4rem; border-radius: 999px; border: 1px solid var(--bw-border-subtle); color: var(--bw-text-secondary); }
.bw-adm-pill.on, .bw-adm-pill.declared { color: var(--bw-success); border-color: color-mix(in srgb, var(--bw-success) 40%, transparent); background: color-mix(in srgb, var(--bw-success) 10%, transparent); }
.bw-adm-pill.partial { color: var(--bw-gold-deep); border-color: color-mix(in srgb, var(--bw-gold) 45%, transparent); background: color-mix(in srgb, var(--bw-gold) 12%, transparent); }
.bw-adm-pill.none, .bw-adm-pill.off { color: var(--bw-text-muted); }
.bw-adm-progress { white-space: nowrap; }
.bw-adm-mini { display: inline-block; font-family: var(--bw-font-mono); font-size: 0.625rem; color: var(--bw-text-muted); margin-right: 0.4rem; }
.bw-adm-mini.declared { color: var(--bw-success); }
.bw-adm-mini.partial { color: var(--bw-gold-deep); }
.bw-adm-rules { display: grid; grid-template-columns: repeat(2, 1fr); gap: 0.4rem 1rem; border: 1px solid var(--bw-border-subtle); border-radius: 10px; padding: 0.75rem 0.9rem; margin-bottom: 1rem; }
.bw-adm-rule { display: flex; flex-direction: column; gap: 1px; }
.bw-adm-rule .k { font-family: var(--bw-font-mono); font-size: 0.5625rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--bw-text-muted); }
.bw-adm-rule .v { font-size: 0.8125rem; color: var(--bw-text-primary); }
.bw-adm-note { border: 1px solid var(--bw-border-subtle); border-radius: 10px; padding: 0.75rem 0.9rem; margin-bottom: 1rem; font-size: 0.8125rem; color: var(--bw-text-muted); }
.bw-adm-mgr { display: flex; align-items: center; gap: 0.5rem; }
.bw-adm-picks { max-width: 22rem; }
@media (max-width: 560px) { .bw-adm-rules { grid-template-columns: 1fr; } }

/* Event Packs panel (proposal 26 §4.4). Flat, hairline, one card per idea.
   Coral (--bw-gold-deep) appears in exactly one place: a warning that says how
   many real picks an import is about to strand or void. */
.bw-adm-parked b { color: var(--bw-text-primary); }
.bw-adm-parked .bw-textlink { margin-left: 0.35rem; }
.bw-adm-pack { border: 1px solid var(--bw-border-subtle); border-radius: 12px; padding: 1rem 1.1rem; margin-bottom: 1rem; }
.bw-adm-pack-head { font-family: var(--bw-font-display); font-size: 1rem; font-weight: 800; color: var(--bw-text-primary); margin-bottom: 0.5rem; display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.5rem; }
.bw-adm-pack-verb { font-family: var(--bw-font-mono); font-size: 0.625rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); }
.bw-adm-pack-label { display: block; font-family: var(--bw-font-mono); font-size: 0.625rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); margin: 0.75rem 0 0.3rem; }
.bw-adm-pack-file { display: block; width: 100%; font-size: 0.78rem; color: var(--bw-text-secondary); }
.bw-adm-pack-text { display: block; width: 100%; box-sizing: border-box; font-family: var(--bw-font-mono); font-size: 0.7rem; line-height: 1.5; padding: 0.5rem 0.6rem; border: 1px solid var(--bw-border-subtle); border-radius: 8px; background: var(--bw-panel); color: var(--bw-text-primary); resize: vertical; }
.bw-adm-pack-actions { display: flex; align-items: center; gap: 0.75rem; margin-top: 0.75rem; flex-wrap: wrap; }
.bw-adm-pack-err { font-size: 0.8125rem; color: var(--bw-error); margin: 0.6rem 0 0; }
/* A guard is not an error: it is the system doing its job. Coral, like every
   other warning about real picks. --bw-error stays reserved for things that
   actually went wrong. */
.bw-adm-pack-err.guard { color: var(--bw-gold-deep); }
.bw-adm-pack-sec { border-top: 1px solid var(--bw-border-subtle); padding-top: 0.7rem; margin-top: 0.7rem; }
.bw-adm-pack-sech { font-family: var(--bw-font-mono); font-size: 0.625rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); margin-bottom: 0.4rem; }
.bw-adm-pack-row { display: flex; gap: 0.75rem; align-items: baseline; padding: 0.15rem 0; font-size: 0.8125rem; }
.bw-adm-pack-rowl { flex: 0 0 8rem; font-family: var(--bw-font-mono); font-size: 0.6875rem; color: var(--bw-text-muted); }
.bw-adm-pack-rowv { flex: 1; min-width: 0; color: var(--bw-text-primary); overflow-wrap: anywhere; }
.bw-adm-pack-row.warn .bw-adm-pack-rowv { color: var(--bw-gold-deep); }
.bw-adm-pack-warn { border: 1px solid color-mix(in srgb, var(--bw-gold-deep) 45%, var(--bw-border-subtle)); border-radius: 10px; padding: 0.6rem 0.8rem; margin: 0.6rem 0; }
.bw-adm-pack-warn p { margin: 0 0 0.3rem; font-size: 0.8125rem; color: var(--bw-gold-deep); }
.bw-adm-pack-warn p:last-child { margin-bottom: 0; }
.bw-adm-pack-src { list-style: none; margin: 0.3rem 0 0; padding: 0; }
.bw-adm-pack-src li { display: flex; flex-wrap: wrap; gap: 0.4rem; font-size: 0.78rem; padding: 0.12rem 0; }
.bw-adm-pack-src li span { color: var(--bw-text-primary); }
.bw-adm-pack-src li a { font-family: var(--bw-font-mono); font-size: 0.6875rem; color: var(--bw-text-muted); overflow-wrap: anywhere; }
.bw-adm-pack-opts { display: flex; flex-direction: column; gap: 0.4rem; border-top: 1px solid var(--bw-border-subtle); padding-top: 0.7rem; margin-top: 0.7rem; }
.bw-adm-pack-opt { display: flex; align-items: center; gap: 0.5rem; font-size: 0.8125rem; color: var(--bw-text-secondary); }
.bw-adm-pack-opt input { accent-color: var(--bw-gold); }
@media (max-width: 560px) { .bw-adm-pack-rowl { flex-basis: 5.5rem; } }

/* Commish keeper Manage tab (bw-kmg-*): set on behalf, finalize, publish. */
.bw-kmg { display: flex; flex-direction: column; }
.bw-kmg-card { display: flex; align-items: flex-start; gap: 1rem; border: 1px solid var(--bw-border-subtle); border-radius: 12px; padding: 0.9rem 1rem; margin-bottom: 0.75rem; }
.bw-kmg-card.locked { border-color: color-mix(in srgb, var(--bw-gold) 40%, var(--bw-border-subtle)); background: color-mix(in srgb, var(--bw-gold) 6%, transparent); }
.bw-kmg-card-main { flex: 1; min-width: 0; }
.bw-kmg-card-t { font-weight: 700; font-size: 0.9rem; color: var(--bw-text-primary); }
.bw-kmg-card-d { font-size: 0.78rem; color: var(--bw-text-muted); margin-top: 0.2rem; line-height: 1.5; }
.bw-kmg-card > .bw-btn { flex: 0 0 auto; white-space: nowrap; align-self: center; }
.bw-kmg-link { display: flex; gap: 0.35rem; margin-top: 0.6rem; align-items: center; }
.bw-kmg-link input { flex: 1; min-width: 0; font-family: var(--bw-font-mono); font-size: 0.7rem; padding: 0.35rem 0.5rem; border: 1px solid var(--bw-border-subtle); border-radius: 6px; background: var(--bw-panel); color: var(--bw-text-secondary); }
.bw-kmg-teams { display: flex; flex-direction: column; border: 1px solid var(--bw-border-subtle); border-radius: 10px; overflow: hidden; }
.bw-kmg-team { display: flex; align-items: center; gap: 0.6rem; padding: 0.6rem 0.8rem; border-bottom: 1px solid var(--bw-border-subtle); }
.bw-kmg-team:last-child { border-bottom: none; }
.bw-kmg-team-main { flex: 1; min-width: 0; }
.bw-kmg-team-n { font-weight: 600; font-size: 0.85rem; color: var(--bw-text-primary); }
.bw-kmg-team-m { font-weight: 400; font-size: 0.72rem; color: var(--bw-text-muted); }
.bw-kmg-team-k { font-size: 0.72rem; color: var(--bw-text-muted); margin-top: 0.15rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bw-kmg-team .bw-adm-minibtn { flex: 0 0 auto; }
.bw-kmg-picks { display: flex; flex-direction: column; border: 1px solid var(--bw-border-subtle); border-radius: 10px; overflow-y: auto; max-height: 46vh; }
.bw-kmg-pick { display: flex; align-items: center; gap: 0.6rem; padding: 0.5rem 0.7rem; border-bottom: 1px solid var(--bw-border-subtle); cursor: pointer; }
.bw-kmg-pick:last-child { border-bottom: none; }
.bw-kmg-pick.dis { opacity: 0.5; cursor: not-allowed; }
.bw-kmg-pick input { flex: 0 0 auto; }
.bw-kmg-pick-n { flex: 1; min-width: 0; font-size: 0.85rem; color: var(--bw-text-primary); }
.bw-kmg-pick-p { font-family: var(--bw-font-mono); font-size: 0.62rem; text-transform: uppercase; color: var(--bw-text-muted); margin-left: 0.2rem; }
.bw-kmg-pick-c { font-family: var(--bw-font-mono); font-size: 0.68rem; color: var(--bw-text-muted); white-space: nowrap; }
@media (max-width: 560px) { .bw-kmg-card { flex-direction: column; } .bw-kmg-card > .bw-btn { width: 100%; } }

/* Admin modal forms */
.bw-adm-form { display: flex; flex-direction: column; gap: 0.75rem; }
.bw-adm-flabel { display: flex; flex-direction: column; gap: 0.3rem; font-size: 0.75rem; font-weight: 600; color: var(--bw-text-secondary); }
.bw-adm-flabel .bw-input { font-weight: 400; }
.bw-adm-flabel textarea.bw-input { resize: vertical; font-family: inherit; }
/* A row of fields side by side (the ADP season/format/label line). */
.bw-adm-form-inline { flex-direction: row; flex-wrap: wrap; align-items: flex-end; gap: 0.5rem; }
.bw-adm-form-inline .bw-adm-flabel { flex: 0 0 8rem; }
.bw-adm-flabel-grow { flex: 1 1 14rem; }
.bw-adm-csv { width: 100%; min-height: 9rem; margin: 0.3rem 0 0.6rem; padding: 0.6rem 0.7rem; font-family: var(--bw-font-mono); font-size: 0.75rem; line-height: 1.5; border: 1px solid var(--bw-border); border-radius: 8px; background: var(--bw-bg); color: var(--bw-text-primary); resize: vertical; }
.bw-adm-csv:focus { outline: none; border-color: var(--bw-gold); }

/* ── The console's ONE dialog (proposal 28 §4) ──────────────────────────────
   adminFormModal's styles used to be inline style="" strings, which is why the
   console's three dialog idioms could drift apart without anyone noticing.
   Flat, hairline, salmon for the primary; --bw-error stays reserved for actual
   errors, never for a destructive button. */
.bw-adm-modal-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.55); z-index: 1000; display: flex; align-items: center; justify-content: center; padding: 1rem; }
.bw-adm-modal { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 16px; padding: 1.5rem; width: 100%; max-width: 460px; max-height: 88vh; overflow: auto; box-shadow: 0 20px 60px var(--bw-shadow-color); }
.bw-adm-modal-title { font-family: var(--bw-font-display); font-size: 1.1875rem; font-weight: 800; color: var(--bw-text-primary); margin: 0 0 0.6rem; }
.bw-adm-modal-msg { color: var(--bw-text-secondary); font-size: 0.875rem; line-height: 1.55; margin: 0 0 0.8rem; }
.bw-adm-modal-list { margin: 0 0 1rem; padding-left: 1.1rem; color: var(--bw-text-secondary); font-size: 0.8125rem; line-height: 1.55; }
/* Destructive framing is a hairline, not a red button. The gold edge and the
   typed phrase carry the weight; salmon stays the primary everywhere. */
.bw-adm-modal-list.danger { list-style: none; padding: 0.5rem 0.75rem; margin-left: 0; border: 1px solid var(--bw-border-subtle); border-left: 2px solid var(--bw-gold); border-radius: 8px; }
.bw-adm-modal-list.danger li + li { margin-top: 0.25rem; }
.bw-adm-modal-err { color: var(--bw-error); font-size: 0.75rem; margin: 0.6rem 0 0; }
.bw-adm-modal-err[hidden] { display: none; }
.bw-adm-modal-actions { display: flex; gap: 0.5rem; margin-top: 1.25rem; }
.bw-adm-modal-actions .bw-btn { flex: 1; }
.bw-adm-modal-actions .bw-btn[disabled] { opacity: 0.5; cursor: default; }

/* ==========================================================================
   COMMISSIONER CONSOLE (bw-cl-* Rule Lab, bw-dk-* Docket, bw-pl-* Pulse).
   Flat, hairline, salmon accent (--bw-gold), theme-aware.
   ========================================================================== */
.bw-cl-controls { display: flex; flex-direction: column; gap: 0.9rem; }
.bw-cl-rung, .bw-cl-srung { font-family: var(--bw-font-mono); font-size: 0.5625rem; text-transform: uppercase; letter-spacing: 0.03em; color: var(--bw-text-muted); margin-left: 0.35rem; }
.bw-cl-srows { display: flex; flex-direction: column; gap: 0.4rem; margin: 0.75rem 0; }
.bw-cl-srow { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; font-size: 0.8125rem; color: var(--bw-text-secondary); padding: 0.4rem 0; border-bottom: 1px solid var(--bw-border-subtle); }
.bw-cl-srow:last-child { border-bottom: none; }
.bw-cl-srow b { color: var(--bw-text-primary); font-family: var(--bw-font-mono); }
.bw-cl-prop { border: 1px solid var(--bw-border-subtle); border-radius: 10px; padding: 0.75rem 0.85rem; background: var(--bw-surface); margin-bottom: 0.6rem; }
.bw-cl-prop-hd { display: flex; align-items: center; gap: 0.5rem; font-size: 0.9375rem; }
.bw-cl-prop-desc { font-size: 0.8125rem; color: var(--bw-text-secondary); margin: 0.3rem 0 0.5rem; line-height: 1.45; }
.bw-cl-prop-foot { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; }
.bw-cl-vote { font-family: var(--bw-font-mono); font-size: 0.75rem; padding: 0.25rem 0.55rem; border: 1px solid var(--bw-border); border-radius: 6px; background: var(--bw-bg); color: var(--bw-text-secondary); cursor: pointer; }
.bw-cl-vote:hover { border-color: var(--bw-gold); color: var(--bw-text-primary); }
.bw-cl-status { font-family: var(--bw-font-mono); font-size: 0.5625rem; text-transform: uppercase; border-radius: 4px; padding: 0.1rem 0.35rem; border: 1px solid var(--bw-border); color: var(--bw-text-muted); }
.bw-cl-status.approved { color: var(--bw-success, #3aa76d); border-color: currentColor; }
.bw-cl-status.rejected { color: var(--bw-gold); border-color: var(--bw-gold); }
/* Pulse bands */
.bw-pl-band { font-family: var(--bw-font-mono); font-size: 0.625rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--bw-text-muted); margin: 1.1rem 0 0.5rem; }
.bw-pl-card { border: 1px solid var(--bw-border-subtle); border-radius: 10px; padding: 0.75rem 0.85rem; margin-bottom: 0.5rem; background: var(--bw-surface); }
.bw-pl-card.unmanaged { border-left: 2px solid var(--bw-gold); }
.bw-pl-hd { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; }
.bw-pl-hd b { font-size: 0.9375rem; }
.bw-pl-score { font-family: var(--bw-font-mono); font-size: 0.75rem; color: var(--bw-text-muted); }
.bw-pl-fact { font-size: 0.75rem; color: var(--bw-text-secondary); margin-top: 0.25rem; }
.bw-pl-actions { display: flex; gap: 0.4rem; margin-top: 0.5rem; }
/* Docket */
.bw-dk-pick { border: 1px solid var(--bw-border-subtle); border-radius: 8px; padding: 0.6rem 0.75rem; margin-bottom: 0.4rem; cursor: pointer; background: var(--bw-surface); }
.bw-dk-pick:hover { border-color: var(--bw-gold); }
.bw-dk-pick.on { border-color: var(--bw-gold); }
.bw-dk-sec { border: 1px solid var(--bw-border-subtle); border-radius: 10px; padding: 0.75rem 0.85rem; margin: 0.6rem 0; background: var(--bw-surface); }
.bw-dk-sec h4 { font-family: var(--bw-font-mono); font-size: 0.625rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--bw-text-muted); margin: 0 0 0.5rem; }
.bw-dk-collusion { border-left: 2px solid var(--bw-gold); }

/* ── Season Almanac (proposal 02 §5): flat, hairline, salmon accents ───────── */
.bw-tm-back { background: none; border: none; color: var(--bw-text-muted); font-weight: 700; font-size: 0.82rem; padding: 0.3rem 0; cursor: pointer; margin-bottom: 0.4rem; }
.bw-tm-back:hover { color: var(--bw-text-primary); }
.bw-tm-chip { font-family: var(--bw-font-mono); font-size: 0.6rem; text-transform: uppercase; letter-spacing: 0.05em; padding: 0.1rem 0.4rem; border: 1px solid var(--bw-border-subtle); border-radius: 5px; color: var(--bw-text-secondary); white-space: nowrap; margin-left: 0.4rem; }
.bw-tm-chip.mini { font-size: 0.56rem; padding: 0.05rem 0.32rem; }
.bw-tm-dpanel { padding: 0.85rem 0.95rem; background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); margin-bottom: 0.65rem; }
.bw-tm-dpanel-hd { display: flex; align-items: center; flex-wrap: wrap; font-family: var(--bw-font-mono); font-size: 0.68rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: var(--bw-text-muted); margin-bottom: 0.55rem; }
.bw-tm-dreal-line { font-size: 0.86rem; color: var(--bw-text-secondary); margin-top: 0.3rem; line-height: 1.45; }
.bw-tm-dcall-refuse { font-size: 0.88rem; color: var(--bw-text-secondary); line-height: 1.45; }
.bw-tm-ddata { font-size: 0.72rem; color: var(--bw-text-muted); line-height: 1.5; border-top: 1px solid var(--bw-border-subtle); padding-top: 0.55rem; margin-top: 0.4rem; }

.bw-tm-alm-wrap { max-width: 900px; margin: 0 auto; }

/* ── Season Almanac magazine layout (cover lead + chapter navigator) ───────── */
.bw-alm { display: flex; flex-direction: column; }
.bw-alm-eyebrow { font-family: var(--bw-font-mono); font-size: 0.66rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.12em; color: var(--bw-gold-deep, #E07676); margin-bottom: 0.4rem; }
.bw-alm-eyebrow-inline { color: var(--bw-text-muted); margin-top: 1rem; }

.bw-alm-mast { margin-bottom: 0.85rem; padding-bottom: 0.7rem; border-bottom: 2px solid var(--bw-text-primary); }
.bw-alm-mast-row { display: flex; align-items: center; justify-content: space-between; gap: 0.6rem; flex-wrap: wrap; margin-bottom: 0.55rem; }
.bw-alm-mast-title { display: flex; align-items: center; font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 900; font-size: 1.35rem; letter-spacing: 0.02em; color: var(--bw-text-primary); }

/* The cover lead: labeled headline over a short dek. */
.bw-alm-lead { padding: 0.4rem 0 1.1rem; border-bottom: 1px solid var(--bw-border-subtle); margin-bottom: 0.9rem; }
.bw-alm-lead-h { font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 900; font-size: clamp(1.7rem, 5vw, 2.6rem); line-height: 1.08; letter-spacing: -0.01em; color: var(--bw-text-primary); }
.bw-alm-lead-dek { margin-top: 0.6rem; font-size: 1.02rem; line-height: 1.5; color: var(--bw-text-secondary); max-width: 40rem; }
.bw-alm-lead .bw-tm-alm-acts { margin-top: 0.9rem; }

/* The chapter navigator: a scrollable table of contents; one section at a time. */
.bw-alm-nav { display: flex; gap: 0.4rem; overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; padding-bottom: 4px; margin-bottom: 1rem; border-bottom: 1px solid var(--bw-border-subtle); }
.bw-alm-nav::-webkit-scrollbar { display: none; }
.bw-alm-navchip { flex: 0 0 auto; border: 0; background: none; cursor: pointer; font-family: var(--bw-font-mono); font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); padding: 0.4rem 0.2rem; margin-right: 0.5rem; border-bottom: 2px solid transparent; white-space: nowrap; }
.bw-alm-navchip:hover { color: var(--bw-text-secondary); }
.bw-alm-navchip.on { color: var(--bw-text-primary); border-bottom-color: var(--bw-gold-deep, #E07676); }
.bw-alm-navchip.locked { opacity: 0.55; }

/* A chapter rendered as a magazine article. */
.bw-alm-article { animation: bwAlmFade 0.18s ease; }
@keyframes bwAlmFade { from { opacity: 0; transform: translateY(3px); } to { opacity: 1; transform: none; } }
.bw-alm-article-eye { display: flex; align-items: center; gap: 0.4rem; font-family: var(--bw-font-mono); font-size: 0.68rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.1em; color: var(--bw-text-muted); margin-bottom: 0.5rem; }
.bw-alm-article-h { font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 800; font-size: clamp(1.3rem, 3.5vw, 1.7rem); line-height: 1.2; color: var(--bw-text-primary); margin-bottom: 0.9rem; }
.bw-alm-body-line { font-size: 0.95rem; line-height: 1.55; color: var(--bw-text-secondary); margin-bottom: 0.35rem; }
.bw-alm-note { font-size: 0.74rem; color: var(--bw-text-muted); margin-top: 0.45rem; line-height: 1.4; }

/* Names: ONE treatment wherever a person is called out (brand salmon, bold). */
.bw-alm-name { font-weight: 800; color: var(--bw-gold-deep, #E07676); }
.bw-alm-td-deserved { color: var(--bw-text-secondary); }
.bw-alm-swing { font-family: var(--bw-font-mono); font-size: 0.78em; }
.bw-alm-swing.pos { color: var(--bw-gold-deep, #E07676); }
.bw-alm-swing.neg { color: var(--bw-text-muted); }

/* The luck ledger as a diverging bar list: scannable at 12 teams. */
.bw-alm-luck-list { display: flex; flex-direction: column; margin-top: 0.3rem; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); overflow: hidden; }
.bw-alm-luck-row { display: grid; grid-template-columns: minmax(8.5rem, 1.1fr) minmax(0, 1.6fr) 3.2rem; gap: 0.6rem; align-items: center; padding: 0.55rem 0.75rem; border-bottom: 1px solid var(--bw-border-subtle); background: var(--bw-surface); }
.bw-alm-luck-row:last-child { border-bottom: 0; }
.bw-alm-luck-team { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.bw-alm-luck-team .bw-alm-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 0.92rem; }
.bw-alm-luck-rec { font-family: var(--bw-font-mono); font-size: 0.66rem; color: var(--bw-text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bw-alm-luck-mid { display: flex; flex-direction: column; gap: 0.25rem; min-width: 0; }
.bw-alm-luck-swing { font-family: var(--bw-font-mono); font-size: 0.64rem; color: var(--bw-text-secondary); }
.bw-alm-luck-swing.neg { color: var(--bw-gold-deep, #E07676); }
.bw-alm-luck-swing.pos { color: var(--bw-success, #16a34a); }
.bw-alm-luck-swing.flat { color: var(--bw-text-muted); }
.bw-alm-luck-arr { opacity: 0.6; }
.bw-alm-luck-bar { position: relative; height: 8px; border-radius: 4px; background: var(--bw-panel); overflow: hidden; }
.bw-alm-luck-axis { position: absolute; left: 50%; top: 0; bottom: 0; width: 1px; background: var(--bw-border-strong, rgba(0,0,0,0.16)); }
.bw-alm-luck-fill { position: absolute; top: 0; bottom: 0; border-radius: 4px; }
.bw-alm-luck-fill.pos { background: var(--bw-success, #16a34a); opacity: 0.75; }
.bw-alm-luck-fill.neg { background: var(--bw-gold-deep, #E07676); opacity: 0.8; }
.bw-alm-luck-val { font-family: var(--bw-font-mono); font-weight: 800; font-size: 0.82rem; text-align: right; color: var(--bw-text-muted); }
.bw-alm-luck-val.pos { color: var(--bw-success, #16a34a); }
.bw-alm-luck-val.neg { color: var(--bw-gold-deep, #E07676); }
@media (max-width: 559px) {
    .bw-alm-luck-row { grid-template-columns: minmax(0, 1fr) 3rem; }
    .bw-alm-luck-mid { grid-column: 1 / -1; }
}

/* Trades: a card per deal (who got what, which week, grades). */
.bw-alm-deals { display: flex; flex-direction: column; gap: 0.5rem; margin: 0.3rem 0; }
.bw-alm-deal { border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); background: var(--bw-surface); padding: 0.6rem 0.75rem; }
.bw-alm-deal-hd { margin-bottom: 0.3rem; }
.bw-alm-deal-wk { font-family: var(--bw-font-mono); font-size: 0.58rem; font-weight: 700; letter-spacing: 0.06em; color: var(--bw-text-muted); border: 1px solid var(--bw-border-subtle); border-radius: 5px; padding: 0.05rem 0.35rem; }
.bw-alm-deal-side { display: flex; align-items: baseline; gap: 0.35rem; flex-wrap: wrap; font-size: 0.9rem; color: var(--bw-text-secondary); padding: 0.15rem 0; }
.bw-alm-deal-side.win .bw-alm-name { color: var(--bw-success, #16a34a); }
.bw-alm-deal-got { color: var(--bw-text-muted); }
.bw-alm-bf-deal { font-size: 0.86rem; color: var(--bw-text-secondary); line-height: 1.45; margin-bottom: 0.5rem; }
.bw-alm-ach-who { font-family: var(--bw-font-mono); font-size: 0.66rem; color: var(--bw-text-muted); }
.bw-alm-award-share { margin-top: 0.55rem; align-self: flex-start; border: 1px solid var(--bw-border-subtle); background: transparent; color: var(--bw-text-secondary); font-size: 0.68rem; font-weight: 600; padding: 0.25rem 0.6rem; border-radius: var(--bw-radius-full, 999px); cursor: pointer; }
.bw-alm-award-share:hover { border-color: var(--bw-gold); color: var(--bw-text-primary); }

/* Tables (luck ledger, final table). */
.bw-alm-tablewrap { overflow-x: auto; margin: 0.4rem 0 0.2rem; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); }
.bw-alm-table { width: 100%; border-collapse: collapse; font-size: 0.9rem; }
.bw-alm-table th { text-align: right; font-family: var(--bw-font-mono); font-size: 0.6rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); padding: 0.55rem 0.7rem; border-bottom: 1px solid var(--bw-border-subtle); background: var(--bw-panel); }
.bw-alm-table th:first-child, .bw-alm-table td:first-child { text-align: left; }
.bw-alm-table td { text-align: right; padding: 0.55rem 0.7rem; border-bottom: 1px solid var(--bw-border-subtle); font-variant-numeric: tabular-nums; color: var(--bw-text-secondary); }
.bw-alm-table tr:last-child td { border-bottom: 0; }
.bw-alm-td-nm { font-weight: 700; color: var(--bw-text-primary); }
.bw-alm-td-rank { font-family: var(--bw-font-mono); color: var(--bw-text-muted); }
.bw-alm-td-luck { font-weight: 800; font-family: var(--bw-font-mono); }
.bw-alm-td-luck.pos { color: var(--bw-success, #16a34a); }
.bw-alm-td-luck.neg { color: var(--bw-gold-deep, #E07676); }

/* Awards: each explains itself (title + one-line definition + winner + stat). */
.bw-alm-awards { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 220px), 1fr)); gap: 0.6rem; }
.bw-alm-award { border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-lg, 12px); background: var(--bw-surface); padding: 0.8rem 0.85rem; display: flex; flex-direction: column; gap: 0.3rem; }
.bw-alm-award-t { font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 800; font-size: 0.98rem; color: var(--bw-gold-deep, #E07676); }
.bw-alm-award-def { font-size: 0.78rem; line-height: 1.4; color: var(--bw-text-muted); }
.bw-alm-award-win { display: flex; flex-direction: column; gap: 1px; margin-top: 0.25rem; padding-top: 0.4rem; border-top: 1px solid var(--bw-border-subtle); }
.bw-alm-award-win b { font-size: 0.95rem; color: var(--bw-text-primary); }
.bw-alm-award-win span { font-family: var(--bw-font-mono); font-size: 0.72rem; color: var(--bw-text-secondary); }
[data-theme="dark"] .bw-alm-mast { border-bottom-color: var(--bw-border-strong, rgba(255,255,255,0.15)); }
.bw-tm-alm { display: flex; flex-direction: column; gap: 0.2rem; }
/* Chapters flow 1 -> 2 -> 3 columns by width; TL;DR + awards stay full width above/below. */
.bw-tm-alm-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 320px), 1fr)); gap: 0.65rem; align-items: start; }
.bw-tm-alm-head { margin-bottom: 0.6rem; }
.bw-tm-alm-titlerow { display: flex; align-items: center; justify-content: space-between; gap: 0.6rem; flex-wrap: wrap; margin-bottom: 0.55rem; }
.bw-tm-alm-title { display: flex; align-items: center; font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 800; font-size: 1.25rem; color: var(--bw-text-primary); }
.bw-tm-alm-rchip { font-family: var(--bw-font-mono); font-size: 0.6rem; margin-left: 0.35rem; opacity: 0.7; }
.bw-tm-alm-tabs { display: flex; gap: 0.4rem; }
.bw-tm-alm-picker { overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; flex-wrap: nowrap; padding-bottom: 2px; }
.bw-tm-alm-picker::-webkit-scrollbar { display: none; }
.bw-tm-alm-picker .bw-tm-rec { flex: 0 0 auto; }
.bw-tm-alm-banner { font-size: 0.82rem; color: var(--bw-text-secondary); background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 8px; padding: 0.6rem 0.75rem; margin: 0.4rem 0 0.6rem; }
.bw-tm-alm-tldr { padding: 0.9rem 1rem; margin-bottom: 0.7rem; }
.bw-tm-alm-tldr > div { font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 800; font-size: 1.2rem; line-height: 1.32; color: var(--bw-text-primary); margin-bottom: 0.25rem; }
.bw-tm-alm-tldr .bw-tm-alm-acts { margin-top: 0.6rem; }
.bw-tm-alm-hl { font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 800; font-size: 1.02rem; line-height: 1.35; color: var(--bw-text-primary); margin-bottom: 0.5rem; }
.bw-tm-alm-stats { display: flex; flex-wrap: wrap; gap: 0.5rem; margin: 0.5rem 0; }
.bw-tm-alm-stat { display: flex; flex-direction: column; gap: 0.1rem; border: 1px solid var(--bw-border-subtle); border-radius: 8px; padding: 0.5rem 0.7rem; min-width: 8rem; }
.bw-tm-alm-stat-l { font-family: var(--bw-font-mono); font-size: 0.58rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); }
.bw-tm-alm-stat b { font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 800; font-size: 0.95rem; color: var(--bw-text-primary); }
.bw-tm-alm-stat-c { font-size: 0.72rem; color: var(--bw-text-muted); }
.bw-tm-alm-acts { display: flex; gap: 0.4rem; flex-wrap: wrap; margin-top: 0.65rem; }
.bw-tm-alm-locked { opacity: 0.85; }
.bw-tm-alm-bf { margin-top: 0.7rem; padding-top: 0.6rem; border-top: 1px solid var(--bw-border-subtle); }
.bw-tm-alm-bf-h { font-family: var(--bw-font-mono); font-size: 0.62rem; font-weight: 700; letter-spacing: 0.08em; color: var(--bw-text-muted); margin-bottom: 0.4rem; }
.bw-tm-dbf-hl { font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 800; font-size: 0.98rem; line-height: 1.35; color: var(--bw-text-primary); }
.bw-tm-dbf-ripples { margin-top: 0.4rem; font-family: var(--bw-font-mono); font-size: 0.74rem; color: var(--bw-text-muted); }
.bw-tm-dbf-ripple { overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
.bw-tm-alm-bf .bw-tm-sm { margin-top: 0.6rem; }
.bw-tm-alm-awards { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 0.5rem; }
.bw-tm-alm-award { display: flex; flex-direction: column; gap: 0.15rem; border: 1px solid var(--bw-border-subtle); border-radius: 8px; padding: 0.55rem 0.7rem; }
.bw-tm-alm-award b { font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 800; font-size: 0.86rem; color: var(--bw-gold-deep, #E07676); }
.bw-tm-alm-award span { font-size: 0.8rem; color: var(--bw-text-primary); }
.bw-tm-alm-award-s { font-size: 0.72rem; color: var(--bw-text-muted) !important; }

/* ── Gameday Gazette (proposal 03): reuses the Almanac article language ────── */
.bw-gz-mast-meta { display: flex; align-items: center; gap: 0.45rem; flex-wrap: wrap; font-family: var(--bw-font-mono); font-size: 0.72rem; color: var(--bw-text-muted); }
.bw-gz-amended { font-size: 0.66rem; color: var(--bw-text-muted); }
.bw-gz-tldr { padding: 0.5rem 0 0.9rem; border-bottom: 1px solid var(--bw-border-subtle); margin-bottom: 0.9rem; }
.bw-gz-tldr-line { font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 700; font-size: 1.02rem; line-height: 1.45; color: var(--bw-text-primary); }
.bw-gz-lead-line { font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 800; font-size: clamp(1.15rem, 3vw, 1.45rem); line-height: 1.3; color: var(--bw-text-primary); margin-bottom: 0.45rem; }
.bw-gz-section { padding: 0.9rem 0; border-bottom: 1px solid var(--bw-border-subtle); }
.bw-gz-section:last-of-type { border-bottom: 0; }
.bw-gz-links { margin-top: 0.55rem; display: flex; gap: 0.4rem; flex-wrap: wrap; }
.bw-gz-table { width: 100%; border-collapse: collapse; margin-top: 0.55rem; font-size: 0.82rem; }
.bw-gz-table th { font-family: var(--bw-font-mono); font-size: 0.62rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: var(--bw-text-muted); text-align: left; padding: 0.3rem 0.5rem; border-bottom: 1px solid var(--bw-border-subtle); }
.bw-gz-table td { padding: 0.38rem 0.5rem; border-bottom: 1px solid var(--bw-border-subtle); color: var(--bw-text-secondary); }
.bw-gz-table tr:last-child td { border-bottom: 0; }
.bw-gz-td-num { font-family: var(--bw-font-mono); font-size: 0.78rem; color: var(--bw-text-primary); white-space: nowrap; }
.bw-gz-up { font-family: var(--bw-font-mono); font-size: 0.66rem; color: var(--bw-success, #16a34a); }
.bw-gz-dn { font-family: var(--bw-font-mono); font-size: 0.66rem; color: var(--bw-gold-deep, #E07676); }
.bw-gz-issues { margin-top: 1rem; }
.bw-gz-set-row { margin: 0.6rem 0; }
.bw-gz-checks { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 0.35rem; margin-top: 0.4rem; }
.bw-gz-check { display: flex; align-items: center; gap: 0.45rem; font-size: 0.84rem; color: var(--bw-text-secondary); cursor: pointer; }
/* Gazette tables scroll internally at ALL widths (was ≤640px only, which let
   the 641-768px band push a 5-col table past .bw-content). */
.bw-gz-tablewrap { overflow-x: auto; -webkit-overflow-scrolling: touch; border: 1px solid var(--bw-border-subtle); border-radius: 10px; }
.bw-gz-tablewrap .bw-gz-table { margin: 0; }

/* ============================================
   SPA page-level overflow + motion backstops
   ============================================ */
/* landing.css pins overflow-x:hidden on html/body; app.css never did, so one
   unwrapped nowrap element could pan the whole SPA page. Mirror that guard. */
html, body { overflow-x: hidden; }
.bw-content { min-width: 0; }

/* Global reduced-motion escape hatch: only one component honored the OS
   setting before. Respect it everywhere (spinners, skeletons, slide-ins). */
@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
        scroll-behavior: auto !important;
    }
}

/* ============================================
   RIVALRY BADGES (proposal 08): flat, hairline,
   salmon accent only. Art always sits inside a
   hairline-bounded rounded tile.
   ============================================ */
.bw-rb-tile { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; flex: 0 0 40px; border: 1px solid var(--bw-border-subtle); border-radius: 8px; background: var(--bw-panel); overflow: hidden; }
.bw-rb-tile img { width: 100%; height: 100%; object-fit: cover; display: block; }
.bw-rb-tile.emoji { font-size: 1.35rem; }
.bw-rb-tile.lg { width: 64px; height: 64px; flex: 0 0 64px; border-radius: 10px; }
.bw-rb-tile.lg.emoji { font-size: 2rem; }

.bw-rb-stamp { font-family: var(--bw-font-mono); font-size: 0.5625rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: var(--bw-gold-deep, #E07676); border: 1px solid currentColor; border-radius: 3px; padding: 0 0.3rem; vertical-align: middle; }
.bw-rb-stamp.retired { color: var(--bw-text-muted); }

/* Commish pivot */
.bw-rb-enablecard { border: 1px solid var(--bw-border-subtle); border-radius: 12px; background: var(--bw-surface); padding: 1.1rem 1.2rem; max-width: 30rem; }
.bw-rb-enablepitch { font-family: var(--bw-font-display); font-weight: 800; font-size: 1.05rem; color: var(--bw-text-primary); margin: 0 0 0.4rem; }
.bw-rb-list { border-top: 1px solid var(--bw-border-subtle); }
.bw-rb-row { display: flex; align-items: center; gap: 0.7rem; padding: 0.65rem 0; border-bottom: 1px solid var(--bw-border-subtle); }
.bw-rb-row-main { display: flex; flex-direction: column; gap: 0.15rem; min-width: 0; flex: 1; }
.bw-rb-row-nm { font-weight: 700; font-size: 0.875rem; color: var(--bw-text-primary); display: flex; align-items: center; gap: 0.4rem; }
.bw-rb-row-holder { font-family: var(--bw-font-mono); font-size: 0.6875rem; color: var(--bw-text-muted); }
.bw-rb-row-acts { display: flex; gap: 0.35rem; flex: 0 0 auto; }
.bw-rb-adminfoot { display: flex; gap: 0.5rem; margin-top: 1rem; }

/* Editor */
.bw-rb-form { max-width: 30rem; }
.bw-rb-lorebox { min-height: 5.5rem; resize: vertical; }
.bw-rb-drop { display: flex; align-items: center; gap: 0.75rem; border: 1px dashed var(--bw-border-strong); border-radius: 10px; padding: 0.75rem; background: var(--bw-panel); }
.bw-rb-drop.over { border-color: var(--bw-gold); }
.bw-rb-drop #rb-preview img { width: 72px; height: 72px; object-fit: cover; border-radius: 8px; border: 1px solid var(--bw-border-subtle); display: block; }
.bw-rb-disclosure { font-family: var(--bw-font-mono); font-size: 0.6875rem; color: var(--bw-text-muted); margin: 0.4rem 0 0; }
.bw-rb-formacts { display: flex; gap: 0.5rem; margin-top: 1rem; flex-wrap: wrap; }
.bw-rb-deletebtn { color: var(--bw-gold-deep, #E07676); }

/* Assignment grid (keeper-settings form idiom) */
.bw-rb-awrow { display: flex; align-items: center; gap: 0.5rem; padding: 0.4rem 0; border-bottom: 1px solid var(--bw-border-subtle); }
.bw-rb-awyr { font-family: var(--bw-font-mono); font-weight: 700; font-size: 0.8125rem; color: var(--bw-text-primary); flex: 0 0 3rem; }
.bw-rb-awsel { flex: 1 1 10rem; min-width: 0; }
.bw-rb-awnote { flex: 1 1 12rem; min-width: 0; }
.bw-rb-addyear { display: flex; gap: 0.5rem; align-items: center; margin-top: 0.75rem; }

/* Profile badge case */
.bw-rb-casegrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(110px, 1fr)); gap: 0.6rem; }
.bw-rb-casetile { display: flex; flex-direction: column; align-items: center; gap: 0.3rem; padding: 0.6rem 0.4rem; border: 1px solid var(--bw-border-subtle); border-radius: 10px; background: var(--bw-surface); cursor: pointer; text-align: center; }
.bw-rb-casetile:hover, .bw-rb-casetile:focus-visible { border-color: var(--bw-gold); }
.bw-rb-casename { font-weight: 700; font-size: 0.75rem; color: var(--bw-text-primary); line-height: 1.25; }
.bw-rb-caseyears { font-family: var(--bw-font-mono); font-size: 0.625rem; color: var(--bw-text-muted); }

/* Detail sheet */
.bw-rb-sheet { max-width: 26rem; }
.bw-rb-detail { padding: 0.75rem 0.25rem 0.25rem; }
.bw-rb-art { width: 240px; height: 240px; max-width: 100%; object-fit: cover; display: block; margin: 0 auto 0.75rem; border: 1px solid var(--bw-border-subtle); border-radius: 12px; background: var(--bw-panel); }
span.bw-rb-art.emoji { display: flex; align-items: center; justify-content: center; font-size: 5rem; }
.bw-rb-detail-name { font-family: var(--bw-font-display); font-weight: 800; font-size: 1.2rem; color: var(--bw-text-primary); text-align: center; margin-bottom: 0.35rem; display: flex; align-items: center; justify-content: center; gap: 0.4rem; }
.bw-rb-lore { font-size: 0.8125rem; color: var(--bw-text-secondary); line-height: 1.55; margin: 0 0 0.9rem; text-align: center; }
.bw-rb-lin-t { font-family: var(--bw-font-mono); font-size: 0.6875rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: var(--bw-text-muted); margin-bottom: 0.4rem; padding-bottom: 0.35rem; border-bottom: 1px solid var(--bw-border-subtle); }
.bw-rb-lin { display: flex; align-items: baseline; gap: 0.5rem; padding: 0.35rem 0.4rem; border-bottom: 1px solid var(--bw-border-subtle); border-radius: 6px; }
.bw-rb-lin.cur { background: rgba(245, 156, 156, 0.10); }
.bw-rb-lin-yr { font-family: var(--bw-font-mono); font-size: 0.75rem; color: var(--bw-text-muted); flex: 0 0 2.6rem; }
.bw-rb-lin-nm { font-weight: 800; font-size: 0.8125rem; color: var(--bw-gold-deep, #E07676); }
.bw-rb-lin-note { font-size: 0.75rem; color: var(--bw-text-muted); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bw-rb-lin-cur { font-family: var(--bw-font-mono); font-size: 0.5625rem; font-weight: 700; text-transform: uppercase; color: var(--bw-gold-deep, #E07676); border: 1px solid currentColor; border-radius: 3px; padding: 0 0.25rem; margin-left: auto; }

/* Clubhouse strip (standings card footer) */
.bw-rb-strip { display: flex; flex-wrap: wrap; align-items: center; gap: 0.35rem; padding: 0.6rem 0.75rem 0; }
.bw-rb-strip-t { font-size: 0.625rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--bw-text-muted); margin-right: 0.15rem; }
.bw-rb-chip-yr { font-family: var(--bw-font-mono); font-size: 0.625rem; color: var(--bw-text-muted); margin-left: 0.3rem; }
.bw-rb-mastcase-n { font-family: var(--bw-font-mono); color: var(--bw-text-primary); font-weight: 600; }
.bw-rb-chip { display: inline-flex; align-items: center; gap: 0.3rem; font-family: var(--bw-font-mono); font-size: 0.6875rem; font-weight: 600; color: var(--bw-text-secondary); background: var(--bw-panel); border: 1px solid var(--bw-border-subtle); border-radius: 999px; padding: 0.15rem 0.55rem; cursor: pointer; }
.bw-rb-chip img { width: 16px; height: 16px; object-fit: cover; border-radius: 4px; }
.bw-rb-chip:hover, .bw-rb-chip:focus-visible { border-color: var(--bw-gold); }

/* ============================================================================
   SEASON LAUNCH (proposal 09): the one "No seasons" state + admin visibility UX
   ============================================================================ */

/* Member seasons empty state (§1.4): standard card, calendar glyph, muted body.
   Identical for review mode and a genuinely empty catalog. Flat, hairline. */
.bw-se-none { border: 1px solid var(--bw-border-subtle); border-radius: 14px; background: var(--bw-surface); margin-top: 1rem; }
.bw-se-none svg { color: var(--bw-text-muted); margin-bottom: 0.75rem; }
.bw-se-none-title { font-family: var(--bw-font-display); font-size: 1.125rem; font-weight: 800; color: var(--bw-text-primary); margin: 0 0 0.35rem; }
.bw-se-none-sub { font-size: 0.875rem; color: var(--bw-text-secondary); margin: 0 auto; max-width: 34rem; }

/* Admin overview: the seasons-visibility mode card (§1.3). */
.bw-adm-modecard { display: flex; flex-wrap: wrap; gap: 1rem; align-items: center; justify-content: space-between; border: 1px solid var(--bw-border-subtle); border-radius: 14px; background: var(--bw-surface); padding: 1rem 1.25rem; margin-bottom: 1rem; }
.bw-adm-modecard.review { border-color: color-mix(in srgb, var(--bw-gold-deep) 55%, transparent); }
.bw-adm-modecard-main { display: flex; flex-direction: column; gap: 0.35rem; }
.bw-adm-modecard-label { font-family: var(--bw-font-mono); font-size: 0.6875rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: var(--bw-text-muted); }
.bw-adm-modestamp { font-family: var(--bw-font-display); font-size: 1.75rem; font-weight: 800; letter-spacing: 0.04em; line-height: 1; }
.bw-adm-modestamp.live { color: var(--bw-success, #16a34a); }
.bw-adm-modestamp.review { color: var(--bw-gold-deep); }
.bw-adm-modecard-audit { font-size: 0.75rem; color: var(--bw-text-muted); }
.bw-adm-modecard-side { display: flex; flex-direction: column; gap: 0.5rem; align-items: flex-start; max-width: 24rem; }
.bw-adm-modecard-note { font-size: 0.8125rem; color: var(--bw-text-secondary); margin: 0; }
/* Season clock card (proposal 25 §3). Same card, two additions: a neutral stamp
   for a clock that is simply telling the truth, and the salmon accent reserved
   for the one state an operator must never overlook, a PINNED clock. Salmon is
   the accent here precisely because the pin is the only thing on this card that
   makes the platform say something the calendar did not. */
.bw-adm-modestamp.computed { color: var(--bw-text-primary); }
.bw-adm-modestamp.pinned { color: var(--bw-gold); }
.bw-adm-modecard.pinned { border-color: color-mix(in srgb, var(--bw-gold) 55%, transparent); }
.bw-adm-modecard-rows { display: flex; flex-direction: column; gap: 0.15rem; }
.bw-adm-modecard-actions { display: flex; flex-wrap: wrap; gap: 0.5rem; }

/* Deploys card (proposal 30 §4). Same modecard shell, two checkouts side by
   side inside its main column, plus a monospace treatment for the two things on
   this screen that must be read character by character: a sha and a command.
   Flat, hairline, salmon reserved for the one state that needs an operator's
   eyes (a pair that has diverged, a red promote). */
.bw-adm-deploy-heads { display: flex; flex-wrap: wrap; gap: 1.5rem; }
.bw-adm-deploy-side { display: flex; flex-direction: column; gap: 0.2rem; min-width: 13rem; }
.bw-adm-deploy-sha { font-family: var(--bw-font-mono); font-size: 1.25rem; font-weight: 700; letter-spacing: 0.03em; color: var(--bw-text-primary); line-height: 1.1; }
.bw-adm-deploy-parity { font-size: 0.875rem; font-weight: 700; color: var(--bw-text-primary); margin: 0.25rem 0 0.5rem; }
.bw-adm-deploy-parity.warn { color: var(--bw-gold-deep); }
.bw-adm-deploy-cmds { display: flex; flex-direction: column; gap: 0.35rem; margin-bottom: 1rem; }
.bw-adm-deploy-cmd { display: block; font-family: var(--bw-font-mono); font-size: 0.75rem; color: var(--bw-text-secondary); background: var(--bw-panel); border: 1px solid var(--bw-border-subtle); border-radius: 8px; padding: 0.45rem 0.6rem; overflow-x: auto; white-space: pre; }

/* Persistent review banner on every admin seasons screen (§1.3). Coral
   hairline, flat fill, no gradients. */
.bw-adm-reviewbanner { border: 1px solid var(--bw-gold-deep); border-radius: 10px; background: color-mix(in srgb, var(--bw-gold) 10%, transparent); color: var(--bw-text-primary); font-size: 0.8125rem; padding: 0.6rem 0.9rem; margin-bottom: 1rem; }
.bw-adm-reviewbanner b { color: var(--bw-gold-deep); }

/* Pipeline row upgrades: window/date meta + the due chip (§2.2). */
.bw-adm-season-meta { font-family: var(--bw-font-mono); font-size: 0.6875rem; color: var(--bw-text-muted); margin-left: 0.4rem; }
.bw-adm-due { font-family: var(--bw-font-mono); font-size: 0.625rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-on-gold); background: var(--bw-gold); border-radius: 999px; padding: 0.1rem 0.5rem; }
.bw-adm-due-act { font-weight: 700; color: var(--bw-gold-deep); }

/* ============================================================================
   VISUAL PARITY PASS (2026-07-22): shared primitives translated from the iOS
   design-kit refresh into the web's existing language. Flat, 1px hairlines,
   salmon accent only; motion law: 0.28s cubic-bezier(0.4,0,0.2,1) entrances,
   0.7s cubic-bezier(0.2,0.8,0.2,1) bar fills, nothing moves unless it is
   loading or entering. No gradients, no shadows.
   ============================================================================ */

/* Skeleton loading cards: flat tint line blocks inside hairline card chrome.
   Opacity pulse only (reuses tmPulse); no gradient shimmer (flat law). */
.bw-skel { display: flex; flex-direction: column; gap: 0.7rem; }
.bw-skel-card { border: 1px solid var(--bw-border-subtle); border-radius: 12px; background: var(--bw-surface); padding: 1rem 1.1rem; }
.bw-skel-line { height: 12px; border-radius: 4px; background: var(--bw-panel); border: 1px solid var(--bw-border-subtle); margin-bottom: 0.55rem; animation: tmPulse 1.2s ease-in-out infinite; }
.bw-skel-line:last-child { margin-bottom: 0; }
.bw-skel-line.w80 { width: 80%; }
.bw-skel-line.w60 { width: 60%; }
.bw-skel-line.w40 { width: 40%; }

/* Entrance: fade + 6px rise, 80ms stagger per --appear-i (capped in JS). */
.bw-appear { animation: bwAppearIn 0.28s cubic-bezier(0.4, 0, 0.2, 1) both; animation-delay: calc(var(--appear-i, 0) * 80ms); }
@keyframes bwAppearIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }

/* Identity avatar (the iOS OSAvatar translated): initials or the manager's
   emoji on an 18% tint circle with a 40% ring; hue hashed from a stable seed. */
.bw-av { display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto; border-radius: 50%; background: color-mix(in srgb, var(--bw-av-h, #5F8FB0) 18%, transparent); border: 1px solid color-mix(in srgb, var(--bw-av-h, #5F8FB0) 40%, transparent); font-family: var(--bw-font-display); font-weight: 600; letter-spacing: 0.02em; color: color-mix(in srgb, var(--bw-av-h, #5F8FB0) 55%, var(--bw-text-primary)); user-select: none; line-height: 1; }
[data-theme="dark"] .bw-av { color: color-mix(in srgb, var(--bw-av-h, #5F8FB0) 70%, var(--bw-text-primary)); }
.bw-av-em { line-height: 1; }

/* Proportional rank bar (points-for): 4px tint fill scaled to the leader,
   grows on first paint (barGrow keyframes shared with the market bars).
   Track at 20% muted so the full-length track stays visible and bars read as
   fractions of the same scale, not different lengths. (12% was near-invisible;
   dark --bw-text-muted is white @55%, so 20% of it = white @11%: still subtle.) */
.bw-rankbar { display: block; height: 4px; border-radius: 999px; background: color-mix(in srgb, var(--bw-text-muted) 20%, transparent); overflow: hidden; margin-top: 0.28rem; max-width: 15rem; }
.bw-rankbar-fill { display: block; height: 100%; border-radius: 999px; background: color-mix(in srgb, var(--bw-gold) 55%, transparent); transform-origin: left; animation: barGrow 0.7s cubic-bezier(0.2, 0.8, 0.2, 1) both; }

/* Medal chips: the v2.css .os-place palette ported for app surfaces. */
.bw-place { display: inline-block; font-family: var(--bw-font-mono); font-size: 0.62rem; font-weight: 700; letter-spacing: 0.06em; border-radius: 4px; padding: 0.14rem 0.4rem; border: 1px solid var(--bw-border-subtle); color: var(--bw-text-secondary); white-space: nowrap; }
.bw-place--gold { background: #F6E7B4; border-color: #E3C86A; color: #6B5310; }
.bw-place--silver { background: #ECEEF2; border-color: #C9CFDA; color: #4A5568; }
.bw-place--bronze { background: #F0DEC9; border-color: #D6B48C; color: #7A5327; }
.bw-place--poop { background: #EBDDD1; border-color: #CBB39E; color: #6B4F35; }
[data-theme="dark"] .bw-place--gold { background: rgba(246, 231, 180, 0.14); border-color: rgba(227, 200, 106, 0.4); color: #E7CE7E; }
[data-theme="dark"] .bw-place--silver { background: rgba(236, 238, 242, 0.1); border-color: rgba(201, 207, 218, 0.4); color: #C9CFDA; }
[data-theme="dark"] .bw-place--bronze { background: rgba(240, 222, 201, 0.1); border-color: rgba(214, 180, 140, 0.4); color: #D6B48C; }
[data-theme="dark"] .bw-place--poop { background: rgba(235, 221, 209, 0.1); border-color: rgba(203, 179, 158, 0.4); color: #CBB39E; }

/* Standings (Clubhouse season table): mono records/streaks, tabular numbers,
   and the caller's own row tinted salmon 8% inside a 1.5px salmon outline. */
.bw-club-table td.bw-fan-rec, .bw-club-table td.bw-fan-strk { font-family: var(--bw-font-mono); font-size: 0.8125rem; font-variant-numeric: tabular-nums; }
.bw-club-table td.bw-fan-pf { font-family: var(--bw-font-mono); font-variant-numeric: tabular-nums; text-align: right; }
.bw-club-table tr.me td { background: rgba(245, 156, 156, 0.08); }
.bw-club-table tr.me { outline: 1.5px solid var(--bw-gold); outline-offset: -1.5px; }

/* Trade Machine: position-tinted asset chips in the wells (.bw-md-pos recipe,
   16% fill / 40% border, muted palette only). */
.bw-tm-asset.qb { background: color-mix(in srgb, #B48AE6 16%, transparent); border-color: color-mix(in srgb, #B48AE6 40%, transparent); }
.bw-tm-asset.rb { background: color-mix(in srgb, #5FA98A 16%, transparent); border-color: color-mix(in srgb, #5FA98A 40%, transparent); }
.bw-tm-asset.wr { background: color-mix(in srgb, #5F8FB0 16%, transparent); border-color: color-mix(in srgb, #5F8FB0 40%, transparent); }
.bw-tm-asset.te { background: color-mix(in srgb, #C79A5B 16%, transparent); border-color: color-mix(in srgb, #C79A5B 40%, transparent); }
.bw-tm-asset.k, .bw-tm-asset.def { background: color-mix(in srgb, var(--bw-text-muted) 14%, transparent); }

/* Live tray valuation (compose): the give/get split bar above Analyze. */
.bw-tm-traybal { margin-top: 0.65rem; padding-top: 0.6rem; border-top: 1px solid var(--bw-border-subtle); }

/* Verdict entrance: the balance-bar segments grow on paint; the headline
   score rolls (tabular so digits do not jitter). In the live tray the same
   segments repaint on every asset change, so they use the 0.28s state-change
   duration instead of the 0.7s entrance grow. */
.bw-tm-bal-give, .bw-tm-bal-get { transform-origin: left; animation: barGrow 0.7s cubic-bezier(0.2, 0.8, 0.2, 1) both; }
.bw-tm-traybal .bw-tm-bal-give, .bw-tm-traybal .bw-tm-bal-get { animation-duration: 0.28s; }
.bw-tm-score-n { font-variant-numeric: tabular-nums; }

/* Reduced motion: the global escape hatch shortens durations but not delays;
   these new classes must fully no-op. */
@media (prefers-reduced-motion: reduce) {
    .bw-appear { animation: none; }
    .bw-skel-line { animation: none; }
    .bw-rankbar-fill, .bw-tm-bal-give, .bw-tm-bal-get, .bw-md-st-fill { animation: none; }
}

/* ─────────────────────────────────────────────────────────────────────────────
   The Wire (proposal 10): waiver receipts. Flat, hairline, salmon polarity.
   Single column under 900px; at >= 900px my card + awards sit beside the
   leaderboard and the log runs full width beneath (the .bw grid idiom).
   ──────────────────────────────────────────────────────────────────────────── */
.bw-wire { max-width: 1280px; margin: 0 auto; display: flex; flex-direction: column; gap: 1rem; }
.bw-wire-masthead { padding: 0.25rem 0 0.25rem; }
.bw-wire-title { font-family: var(--bw-font-display); font-size: 1.6rem; margin: 0.1rem 0 0.2rem; color: var(--bw-text-primary); }
.bw-wire-sub { font-size: 0.8rem; color: var(--bw-text-secondary); margin-bottom: 0.55rem; }
.bw-wire-note { font-size: 0.72rem; color: var(--bw-text-muted); border: 1px solid var(--bw-border-subtle); border-radius: 8px; padding: 0.4rem 0.6rem; margin-top: 0.5rem; max-width: 44rem; }

.bw-wire-grid { display: flex; flex-direction: column; gap: 1rem; }
.bw-wire-col { display: flex; flex-direction: column; gap: 1rem; min-width: 0; }
@media (min-width: 900px) {
    .bw-wire-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr); align-items: start; }
}

.bw-wire-card { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 12px; padding: 0.9rem 1rem; }
.bw-wire-card-h { font-family: var(--bw-font-mono); font-size: 0.6875rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: var(--bw-text-muted); margin-bottom: 0.6rem; display: flex; align-items: center; gap: 0.45rem; flex-wrap: wrap; }

/* Rung chips: the honesty ladder, always visible, never decorative. */
.bw-wire-rung { font-family: var(--bw-font-mono); font-size: 0.5625rem; font-weight: 700; letter-spacing: 0.05em; padding: 0.1rem 0.35rem; border-radius: 4px; border: 1px solid var(--bw-border-strong); color: var(--bw-text-secondary); background: transparent; white-space: nowrap; }
.bw-wire-rung.exact { border-color: var(--bw-gold); color: var(--bw-gold-deep); }
.bw-wire-rung.sm { font-size: 0.5rem; }

/* My card stats. */
.bw-wire-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(90px, 1fr)); gap: 0.6rem; margin-bottom: 0.6rem; }
.bw-wire-stat { border: 1px solid var(--bw-border-subtle); border-radius: 8px; padding: 0.5rem 0.6rem; }
.bw-wire-stat-n { font-family: var(--bw-font-mono); font-size: 1.15rem; font-weight: 700; color: var(--bw-text-primary); font-variant-numeric: tabular-nums; }
.bw-wire-stat-l { font-family: var(--bw-font-mono); font-size: 0.5625rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); margin-top: 0.15rem; }
.bw-wire-receipt { font-size: 0.78rem; color: var(--bw-text-secondary); padding: 0.45rem 0; border-top: 1px solid var(--bw-border-subtle); }
.bw-wire-receipt-l { font-family: var(--bw-font-mono); font-size: 0.5625rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); margin-right: 0.4rem; }

/* Awards. */
.bw-wire-awards { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 0.6rem; }
.bw-wire-award { border: 1px solid var(--bw-border-subtle); border-radius: 8px; padding: 0.55rem 0.65rem; }
.bw-wire-award-l { font-family: var(--bw-font-mono); font-size: 0.5625rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-gold-deep); }
.bw-wire-award-who { display: flex; align-items: center; gap: 0.35rem; margin: 0.3rem 0 0.15rem; font-size: 0.8rem; color: var(--bw-text-primary); }
.bw-wire-award-line { font-size: 0.72rem; color: var(--bw-text-secondary); }

/* Tables: mono numbers, hairline rows, horizontal scroll inside the card. */
.bw-wire-scroll { overflow-x: auto; }
.bw-wire-table { width: 100%; border-collapse: collapse; font-size: 0.78rem; }
.bw-wire-table th { font-family: var(--bw-font-mono); font-size: 0.5625rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); text-align: left; padding: 0.3rem 0.5rem; border-bottom: 1px solid var(--bw-border-strong); white-space: nowrap; }
/* FIX 1: the row hairline lives on the tr (border-collapse), not on the cells.
   A display:flex td stops being a table-cell, so per-cell borders stepped
   between the place-chip column and the manager column. */
.bw-wire-table td { padding: 0.42rem 0.5rem; vertical-align: middle; }
.bw-wire-table tbody tr { border-bottom: 1px solid var(--bw-border-subtle); }
.bw-wire-table tbody tr:last-child { border-bottom: none; }
.bw-wire-td-n { font-family: var(--bw-font-mono); font-variant-numeric: tabular-nums; white-space: nowrap; }
.bw-wire-td-rk { width: 1.8rem; }
.bw-wire-td-who { white-space: nowrap; }
.bw-wire-td-who > * { vertical-align: middle; }
.bw-wire-td-who .bw-av { margin-right: 0.25rem; }
.bw-wire-td-pl { white-space: nowrap; }
.bw-wire-rk { font-family: var(--bw-font-mono); font-size: 0.68rem; color: var(--bw-text-muted); }
.bw-wire-num { font-family: var(--bw-font-mono); font-variant-numeric: tabular-nums; font-weight: 700; }
.bw-wire-num.pos { color: var(--bw-success, #16a34a); }
.bw-wire-num.neg { color: var(--bw-gold-deep, #E07676); }
.bw-wire-num.muted { color: var(--bw-text-muted); font-weight: 400; }
.bw-wire-meta { font-family: var(--bw-font-mono); font-size: 0.625rem; color: var(--bw-text-muted); }
.bw-wire-table .bw-rankbar { margin-top: 0.2rem; max-width: 90px; }
.bw-wire-table .bw-rankbar-fill.neg { background: var(--bw-gold-deep, #E07676); }

/* Move kind chips: flat tint, no gradients. */
.bw-wire-kind { font-family: var(--bw-font-mono); font-size: 0.5625rem; font-weight: 700; letter-spacing: 0.05em; padding: 0.1rem 0.35rem; border-radius: 4px; }
.bw-wire-kind.add { background: color-mix(in srgb, var(--bw-success, #16a34a) 14%, transparent); color: var(--bw-success, #16a34a); }
.bw-wire-kind.drop { background: color-mix(in srgb, var(--bw-gold-deep, #E07676) 14%, transparent); color: var(--bw-gold-deep, #E07676); }

/* FIX 2: the whole-column explainer affordance on the value headers. Flat,
   dashed hairline underline; inherits the th's mono uppercase styling. */
.bw-wire-infoth { background: none; border: none; padding: 0; margin: 0; font: inherit; color: inherit; text-transform: inherit; letter-spacing: inherit; cursor: pointer; border-bottom: 1px dashed var(--bw-border-strong); }
.bw-wire-infoth:hover, .bw-wire-infoth:focus-visible { color: var(--bw-text-primary); border-bottom-color: var(--bw-gold, #F59C9C); }

/* FIX 3: commissioner drill-down chip row (members never see it). */
.bw-wire-logfilter { display: flex; gap: 0.35rem; align-items: center; margin: 0.15rem 0 0.55rem; }

/* ═══════════════════════════════════════════════════════════════════════════
   THE CHARTER (proposal 12): the league constitution. The app's most editorial
   surface: typography carries it (Inter Tight 900 masthead over the ONE
   sanctioned non-hairline line, mono receipts, hairline rules), zero
   decoration beyond the masthead rule. Flat, no gradients, no shadows.
   ═══════════════════════════════════════════════════════════════════════════ */

/* Reader: a readable centered column (~760px). */
.bw-ch-wrap { max-width: 760px; margin: 0 auto; }
.bw-ch-histwrap { max-width: 1100px; margin: 0 auto; }
.bw-ch-col { min-width: 0; }
.bw-ch-rail { display: none; }

/* >=1100px: sticky left section-nav rail beside the reading column. */
@media (min-width: 1100px) {
    .bw-ch-wrap { display: grid; grid-template-columns: 200px 760px; gap: 2rem; max-width: 1000px; justify-content: center; }
    .bw-ch-rail { display: flex; flex-direction: column; gap: 0.15rem; position: sticky; top: 4.5rem; align-self: start; padding-top: 3.4rem; }
    .bw-ch-rail-link { font-family: var(--bw-font-mono); font-size: 0.6875rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--bw-text-muted); text-decoration: none; padding: 0.28rem 0.5rem; border-left: 1px solid var(--bw-border-subtle); }
    .bw-ch-rail-link:hover { color: var(--bw-text-primary); border-left-color: var(--bw-gold); }
    /* FIX 4: the active rail item (aria-current set on click). */
    .bw-ch-rail-link[aria-current="true"] { color: var(--bw-text-primary); border-left-color: var(--bw-gold-deep, #E07676); }
}

/* Masthead: the magazine voice. 2px ink rule (the sanctioned non-hairline). */
.bw-ch-mast { margin: 0.5rem 0 1rem; padding-bottom: 0.75rem; border-bottom: 2px solid var(--bw-text-primary); }
.bw-ch-mast-eyebrow { font-family: var(--bw-font-mono); font-size: 0.625rem; letter-spacing: 0.14em; color: var(--bw-text-muted); margin-bottom: 0.35rem; }
.bw-ch-mast-title { font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 900; font-size: clamp(1.35rem, 4vw, 1.9rem); letter-spacing: 0.01em; line-height: 1.12; color: var(--bw-text-primary); }
[data-theme="dark"] .bw-ch-mast { border-bottom-color: var(--bw-border-strong, rgba(255,255,255,0.25)); }

.bw-ch-tabs { display: flex; gap: 0.4rem; margin-bottom: 1.1rem; }

/* Sections. */
.bw-ch-sec { padding: 1.1rem 0 1.25rem; border-bottom: 1px solid var(--bw-border-subtle); }
.bw-ch-sec:last-child { border-bottom: none; }
.bw-ch-sec-eyebrow { font-family: var(--bw-font-mono); font-size: 0.625rem; letter-spacing: 0.14em; color: var(--bw-gold-deep, #E07676); margin-bottom: 0.25rem; }
.bw-ch-sec-title { font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 800; font-size: 1.125rem; color: var(--bw-text-primary); margin: 0 0 0.3rem; }
.bw-ch-receipt { font-family: var(--bw-font-mono); font-size: 0.6875rem; letter-spacing: 0.04em; color: var(--bw-text-muted); margin-bottom: 0.55rem; }
.bw-ch-body { font-size: 0.9375rem; line-height: 1.6; color: var(--bw-text-secondary); margin: 0 0 0.5rem; }

/* Typed rule fields: a mono ledger with dot leaders, flat. */
.bw-ch-typed { margin-top: 0.5rem; border: 1px solid var(--bw-border-subtle); border-radius: 8px; padding: 0.55rem 0.75rem; }
.bw-ch-typed-row { display: flex; align-items: baseline; gap: 0.5rem; padding: 0.18rem 0; }
.bw-ch-typed-k { font-family: var(--bw-font-mono); font-size: 0.75rem; color: var(--bw-text-secondary); white-space: nowrap; }
.bw-ch-dots { flex: 1; border-bottom: 1px dotted var(--bw-border-subtle); transform: translateY(-3px); }
.bw-ch-typed-v { font-family: var(--bw-font-mono); font-size: 0.75rem; font-weight: 700; font-variant-numeric: tabular-nums; color: var(--bw-text-primary); white-space: nowrap; }
.bw-ch-typed-cat { font-family: var(--bw-font-mono); font-size: 0.5625rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--bw-text-muted); margin: 0.5rem 0 0.15rem; }
.bw-ch-typed-cat:first-child { margin-top: 0; }
.bw-ch-mono { font-family: var(--bw-font-mono); font-size: 0.6875rem; font-variant-numeric: tabular-nums; color: var(--bw-text-muted); }

/* Drift banner: advisory, hairline, salmon-tinted; never an alarm. */
.bw-ch-drift { border: 1px solid var(--bw-gold-deep, #E07676); border-radius: 8px; padding: 0.7rem 0.85rem; margin: 0 0 1.1rem; font-size: 0.8125rem; color: var(--bw-text-secondary); background: color-mix(in srgb, var(--bw-gold-deep, #E07676) 7%, transparent); }
.bw-ch-drift b { color: var(--bw-text-primary); }
.bw-ch-drift-line { margin-top: 0.3rem; }
.bw-ch-drift-note { font-family: var(--bw-font-mono); font-size: 0.625rem; letter-spacing: 0.05em; text-transform: uppercase; color: var(--bw-text-muted); margin-top: 0.45rem; }

/* History: a full-width ledger of diffs. */
.bw-ch-ledger { display: flex; flex-direction: column; }
.bw-ch-vrow { padding: 0.75rem 0.15rem; border-bottom: 1px solid var(--bw-border-subtle); }
.bw-ch-vrow-hd { display: flex; align-items: baseline; gap: 0.6rem; flex-wrap: wrap; }
.bw-ch-vnum { font-family: var(--bw-font-mono); font-size: 0.75rem; font-weight: 700; color: var(--bw-text-muted); }
.bw-ch-vrow-sec { font-weight: 700; font-size: 0.875rem; color: var(--bw-text-primary); }
.bw-ch-vrow-date { margin-left: auto; font-family: var(--bw-font-mono); font-size: 0.6875rem; color: var(--bw-text-muted); }
.bw-ch-kind { font-family: var(--bw-font-mono); font-size: 0.5625rem; font-weight: 700; letter-spacing: 0.06em; padding: 0.12rem 0.4rem; border-radius: 3px; border: 1px solid var(--bw-border-subtle); color: var(--bw-text-muted); }
.bw-ch-kind.ratified { border-color: var(--bw-gold-deep, #E07676); color: var(--bw-gold-deep, #E07676); }
.bw-ch-kind.seeded { border-color: var(--bw-border-subtle); }
.bw-ch-diffs { margin-top: 0.45rem; overflow-x: auto; }
.bw-ch-diff { font-family: var(--bw-font-mono); font-size: 0.71875rem; line-height: 1.5; white-space: pre-wrap; word-break: break-word; padding: 0.05rem 0.35rem; border-radius: 3px; }
.bw-ch-diff.add { color: var(--bw-success, #16a34a); background: color-mix(in srgb, var(--bw-success, #16a34a) 8%, transparent); }
.bw-ch-diff.del { color: var(--bw-gold-deep, #E07676); background: color-mix(in srgb, var(--bw-gold-deep, #E07676) 8%, transparent); }

/* Commissioner pivot bits. */
.bw-ch-create { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 10px; padding: 1rem 1.1rem; }
.bw-ch-qrow { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 10px; padding: 0.7rem 0.85rem; margin-bottom: 0.5rem; }
.bw-ch-qrow-hd { display: flex; align-items: baseline; justify-content: space-between; gap: 0.6rem; }
.bw-ch-qrow-ft { display: flex; align-items: center; justify-content: space-between; gap: 0.6rem; margin-top: 0.4rem; flex-wrap: wrap; }
.bw-ch-adm-rows { display: flex; flex-direction: column; }
.bw-ch-adm-row { display: flex; align-items: center; gap: 0.6rem; padding: 0.5rem 0.15rem; border-bottom: 1px solid var(--bw-border-subtle); }
.bw-ch-adm-title { font-weight: 700; font-size: 0.875rem; color: var(--bw-text-primary); }
.bw-ch-adm-row .bw-adm-hint { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bw-ch-adm-acts { display: flex; gap: 0.3rem; white-space: nowrap; }
.bw-ch-del { color: var(--bw-gold-deep, #E07676); border-color: var(--bw-gold-deep, #E07676); }

/* ── Amendments (proposal 19): the democratic loop, in the same ledger voice.
   Hairline rows, mono metadata, no new colors: statuses reuse the existing
   ink / salmon / success tokens the History stamps already use. ───────────── */
.bw-ch-sec-ft { margin-top: 0.6rem; }
.bw-ch-amend-wrap { display: flex; flex-direction: column; }
.bw-ch-amend-top { display: flex; align-items: center; gap: 0.7rem; flex-wrap: wrap; padding-bottom: 0.8rem; margin-bottom: 0.4rem; border-bottom: 1px solid var(--bw-border-subtle); }
.bw-ch-amend-top .bw-adm-hint { flex: 1; min-width: 14rem; }
.bw-ch-amend-row { padding: 0.8rem 0.15rem; border-bottom: 1px solid var(--bw-border-subtle); }
.bw-ch-amend-hd { display: flex; align-items: baseline; gap: 0.6rem; flex-wrap: wrap; }
.bw-ch-amend-title { background: none; border: none; padding: 0; margin: 0; font: inherit; text-align: left; cursor: pointer; font-weight: 700; font-size: 0.9375rem; color: var(--bw-text-primary); }
.bw-ch-amend-title:hover, .bw-ch-amend-title:focus-visible { color: var(--bw-gold-deep, #E07676); }
.bw-ch-amend-what { font-size: 0.8125rem; color: var(--bw-text-secondary); margin-top: 0.25rem; }
.bw-ch-amend-meta { display: flex; align-items: baseline; gap: 0.6rem; flex-wrap: wrap; margin-top: 0.3rem; font-size: 0.75rem; color: var(--bw-text-muted); }
.bw-ch-amend-by { font-size: 0.75rem; color: var(--bw-text-secondary); }
.bw-ch-amend-sub { font-family: var(--bw-font-mono); font-size: 0.6875rem; color: var(--bw-text-muted); }
.bw-ch-amend-vote { display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; margin-top: 0.5rem; }
.bw-ch-amend-ft { display: flex; align-items: center; gap: 0.3rem; flex-wrap: wrap; margin-top: 0.55rem; }
.bw-ch-amend-detail { margin-top: 0.6rem; padding-left: 0.75rem; border-left: 1px solid var(--bw-border-subtle); }
.bw-ch-amend-note { font-size: 0.8125rem; color: var(--bw-text-secondary); margin: 0.35rem 0; }
.bw-ch-amend-trail { display: flex; flex-direction: column; gap: 0.2rem; margin: 0.5rem 0; }
.bw-ch-amend-step { display: flex; align-items: baseline; gap: 0.5rem; flex-wrap: wrap; font-size: 0.75rem; }
.bw-ch-amend-step-label { font-weight: 700; color: var(--bw-text-primary); }
/* Status stamps: same hairline chip as the History kind stamps. */
.bw-ch-amend-chip { font-family: var(--bw-font-mono); font-size: 0.5625rem; font-weight: 700; letter-spacing: 0.06em; padding: 0.12rem 0.4rem; border-radius: 3px; border: 1px solid var(--bw-border-subtle); color: var(--bw-text-muted); white-space: nowrap; }
.bw-ch-amend-chip.league_vote, .bw-ch-amend-chip.submitted { border-color: var(--bw-gold-deep, #E07676); color: var(--bw-gold-deep, #E07676); }
.bw-ch-amend-chip.ratified, .bw-ch-amend-chip.implemented { border-color: var(--bw-success, #16a34a); color: var(--bw-success, #16a34a); }

/* Chat artifact card (rides .bw-tm-chatcard chrome). */
.bw-ch-chatcard { display: flex; flex-direction: column; align-items: flex-start; gap: 0.25rem; text-align: left; }
.bw-ch-chatcard-eyebrow { font-family: var(--bw-font-mono); font-size: 0.5625rem; font-weight: 700; letter-spacing: 0.12em; color: var(--bw-gold-deep, #E07676); }
.bw-ch-chatcard-line { font-size: 0.8125rem; font-weight: 600; color: var(--bw-text-primary); line-height: 1.4; }
.bw-ch-chatcard-cta { font-family: var(--bw-font-mono); font-size: 0.625rem; color: var(--bw-text-muted); }

/* A removal reads as a stamp, never as the stored marker. */
.bw-ch-amend-strike { font-family: var(--bw-font-mono); font-size: 0.5625rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; padding: 0.1rem 0.35rem; border: 1px solid var(--bw-gold-deep, #E07676); border-radius: 3px; color: var(--bw-gold-deep, #E07676); }

/* ── The amendment composer (proposal 19, guided flow) ──────────────────────
   Three steps in one overlay: where (section cards), which line (the charter's
   own rule rows), and the change (an input picked by the value's type). Flat
   and hairline throughout; the only controls are ones the app already owns:
   .bw-namemode segments, .bw-md-adv-step steppers, .bw-input, .bw-keep-input. */
.bw-cx-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.55); z-index: 1000; display: flex; align-items: center; justify-content: center; padding: 1rem; }
.bw-cx-modal { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 16px; padding: 1.25rem; width: 100%; max-width: 520px; max-height: 88vh; overflow: auto; }
.bw-cx-hd { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; }
.bw-cx-eyebrow { font-family: var(--bw-font-mono); font-size: 0.5625rem; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase; color: var(--bw-gold-deep, #E07676); }
.bw-cx-x { appearance: none; background: transparent; border: 0; font-size: 1.25rem; line-height: 1; color: var(--bw-text-muted); cursor: pointer; padding: 0 0.25rem; }
.bw-cx-x:hover { color: var(--bw-text-primary); }
.bw-cx-back { appearance: none; background: transparent; border: 0; padding: 0.35rem 0 0; font-size: 0.75rem; color: var(--bw-text-muted); cursor: pointer; }
.bw-cx-back:hover { color: var(--bw-text-primary); }
.bw-cx-h { font-family: var(--bw-font-display, 'Inter Tight'); font-weight: 800; font-size: 1.0625rem; color: var(--bw-text-primary); margin: 0.5rem 0 0.15rem; display: flex; align-items: baseline; gap: 0.4rem; }
.bw-cx-h-icon { font-size: 0.9375rem; }
.bw-cx-sub { font-size: 0.8125rem; color: var(--bw-text-muted); margin: 0 0 0.85rem; }

/* Step 1: the section grid. */
.bw-cx-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 0.5rem; }
.bw-cx-card { display: flex; flex-direction: column; align-items: flex-start; gap: 0.1rem; text-align: left; width: 100%; padding: 0.7rem 0.75rem; background: transparent; border: 1px solid var(--bw-border-subtle); border-radius: 10px; cursor: pointer; }
.bw-cx-card:hover { border-color: var(--bw-border-strong); }
.bw-cx-card:focus-visible { outline: 2px solid var(--bw-gold); outline-offset: -2px; }
.bw-cx-card-icon { font-size: 1rem; }
.bw-cx-card-art { font-family: var(--bw-font-mono); font-size: 0.5625rem; letter-spacing: 0.12em; color: var(--bw-text-muted); }
.bw-cx-card-title { font-size: 0.875rem; font-weight: 700; color: var(--bw-text-primary); line-height: 1.25; }
.bw-cx-card-meta { font-family: var(--bw-font-mono); font-size: 0.625rem; color: var(--bw-text-muted); }
/* The one card that is not a section: dashed hairline, never a coral block. */
.bw-cx-card-new { margin-top: 0.5rem; border-style: dashed; }
.bw-cx-card-new .bw-cx-card-title { color: var(--bw-gold-deep, #E07676); }

/* Step 2: the rule rows, the charter page's own ledger line made tappable. */
.bw-cx-rules { display: flex; flex-direction: column; border: 1px solid var(--bw-border-subtle); border-radius: 8px; padding: 0.4rem 0.6rem; }
.bw-cx-cat { font-family: var(--bw-font-mono); font-size: 0.5625rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--bw-text-muted); margin: 0.55rem 0 0.15rem; }
.bw-cx-cat:first-child { margin-top: 0.15rem; }
.bw-cx-rule { display: flex; align-items: baseline; gap: 0.5rem; width: 100%; text-align: left; padding: 0.35rem 0.35rem; background: transparent; border: 1px solid transparent; border-radius: 6px; cursor: pointer; }
.bw-cx-rule:hover { border-color: var(--bw-border-subtle); }
.bw-cx-rule.on { border-color: var(--bw-gold-deep, #E07676); }
.bw-cx-rule:focus-visible { outline: 2px solid var(--bw-gold); outline-offset: -2px; }
.bw-cx-rule-k { font-size: 0.8125rem; color: var(--bw-text-secondary); white-space: nowrap; }
.bw-cx-rule.on .bw-cx-rule-k { color: var(--bw-text-primary); font-weight: 700; }
.bw-cx-rule-v { font-family: var(--bw-font-mono); font-size: 0.75rem; font-weight: 700; font-variant-numeric: tabular-nums; color: var(--bw-text-primary); white-space: nowrap; }

/* Step 3: the change. */
.bw-cx-nowrow { display: flex; align-items: baseline; gap: 0.5rem; margin-bottom: 0.7rem; }
.bw-cx-nowlbl { font-family: var(--bw-font-mono); font-size: 0.5625rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--bw-text-muted); }
.bw-cx-nowval { font-family: var(--bw-font-mono); font-size: 0.8125rem; font-weight: 700; font-variant-numeric: tabular-nums; color: var(--bw-text-primary); }
.bw-cx-input { margin-bottom: 0.7rem; }
.bw-cx-stepper { display: flex; align-items: center; gap: 0.5rem; }
.bw-cx-num { width: 6rem; text-align: center; font-variant-numeric: tabular-nums; }
.bw-cx-unit { font-family: var(--bw-font-mono); font-size: 0.6875rem; color: var(--bw-text-muted); }
.bw-cx-removerow { display: flex; align-items: center; gap: 0.45rem; font-size: 0.8125rem; color: var(--bw-text-secondary); margin-bottom: 0.7rem; }
.bw-cx-preview { font-family: var(--bw-font-mono); font-size: 0.75rem; color: var(--bw-text-primary); border: 1px solid var(--bw-border-subtle); border-radius: 6px; padding: 0.5rem 0.6rem; margin-bottom: 0.85rem; }
.bw-cx-err { color: var(--bw-gold); font-size: 0.75rem; margin: 0.4rem 0 0; }
.bw-cx-ft { display: flex; gap: 0.5rem; margin-top: 1.1rem; }
.bw-cx-ft .bw-btn { flex: 1; }
.bw-cx-note { font-size: 0.6875rem; line-height: 1.5; color: var(--bw-text-muted); margin-top: 0.9rem; padding-top: 0.7rem; border-top: 1px solid var(--bw-border-subtle); }
@media (max-width: 520px) {
    .bw-cx-grid { grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); }
}

/* ── How teams are named (docs/NAME_DISPLAY_SPEC.md §2) ─────────────────────
   A two-option segmented control. Flat, hairline, no gradient and no coral:
   this is a preference, not a call to action. Lives in Profile preferences and
   again on the mock draft setup screen, so it is styled once here. */
.bw-namemode {
    display: inline-flex;
    border: 1px solid var(--bw-border-subtle);
    border-radius: 6px;
    overflow: hidden;
    flex: none;
}
.bw-namemode-opt {
    appearance: none;
    background: transparent;
    border: 0;
    border-right: 1px solid var(--bw-border-subtle);
    padding: 0.32rem 0.65rem;
    font-family: var(--bw-font-mono);
    font-size: 0.625rem;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--bw-text-muted);
    cursor: pointer;
    white-space: nowrap;
    transition: background 0.15s, color 0.15s;
}
.bw-namemode-opt:last-child { border-right: 0; }
.bw-namemode-opt:hover { color: var(--bw-text-primary); }
.bw-namemode-opt.on {
    background: var(--bw-panel);
    color: var(--bw-text-primary);
}
.bw-namemode-opt:focus-visible {
    outline: 2px solid var(--bw-gold);
    outline-offset: -2px;
}
.bw-namemode-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
}
.bw-md-namemode { margin-top: 0.75rem; }
@media (max-width: 520px) {
    .bw-namemode-row { flex-direction: column; align-items: flex-start; }
}

/* ─────────────────────────────────────────────────────────────────────────────
   The Book (proposal 20): the league prop board. #/league/book
   Flat, hairline, no gradients. Numbers are mono and tabular so a column of
   odds lines up. Salmon is a tint/fill only; text salmon is --bw-gold-deep.

   The board is GAME CARDS at every width. The first build rendered a four
   column table inside a horizontal scroller, which put the only tappable
   column (the prices) off the right edge of a 375 pixel phone, so every row
   had to be scrolled sideways one at a time to reach the thing you came for.
   ───────────────────────────────────────────────────────────────────────────── */
.bw-bk { display: flex; flex-direction: column; gap: 1rem; }
.bw-bk-masthead { display: flex; flex-direction: column; gap: 0.4rem; padding-bottom: 0.75rem; border-bottom: 1px solid var(--bw-border-subtle); }
.bw-bk-title { font-family: var(--bw-font-display); font-size: 1.5rem; font-weight: 800; margin: 0; color: var(--bw-text-primary); }
.bw-bk-sub { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; }
.bw-bk-meta { font-family: var(--bw-font-mono); font-size: 0.68rem; color: var(--bw-text-muted); }
.bw-bk-banner { font-size: 0.82rem; line-height: 1.45; color: var(--bw-text-secondary); background: color-mix(in srgb, var(--bw-gold) 8%, transparent); border: 1px solid color-mix(in srgb, var(--bw-gold) 35%, transparent); border-radius: var(--bw-radius-md, 10px); padding: 0.6rem 0.75rem; }
.bw-bk-tabs { display: flex; gap: 0.4rem; flex-wrap: wrap; }
.bw-bk-tabs .bw-tm-rec { display: inline-flex; align-items: center; gap: 0.35rem; }

.bw-bk-card { border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); background: var(--bw-surface); padding: 0.9rem; display: flex; flex-direction: column; gap: 0.7rem; }
.bw-bk-card-h { display: flex; align-items: baseline; gap: 0.6rem; flex-wrap: wrap; font-family: var(--bw-font-mono); font-size: 0.7rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: var(--bw-text-primary); }

/* ── one chip vocabulary ──────────────────────────────────────────────────────
   Every tag on every Book surface is this shape: mono, uppercase, hairline,
   3px. The modifier says what KIND of tag it is, and nothing else changes, so
   PROMOTED reads as PROMOTED on the board, on the slate and in the chat room. */
.bw-bk-chip { display: inline-flex; align-items: center; gap: 0.2rem; font-family: var(--bw-font-mono); font-size: 0.6rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; white-space: nowrap; padding: 0.1rem 0.35rem; border: 1px solid var(--bw-border-subtle); border-radius: 3px; color: var(--bw-text-muted); }
.bw-bk-chip.stale, .bw-bk-chip.doubt { color: var(--bw-gold-deep); border-color: color-mix(in srgb, var(--bw-gold) 55%, transparent); }
.bw-bk-chip.out { color: var(--bw-gold-deep); border-color: color-mix(in srgb, var(--bw-gold) 55%, transparent); background: color-mix(in srgb, var(--bw-gold) 10%, transparent); }
.bw-bk-chip.grp { color: var(--bw-text-secondary); }
.bw-bk-chip.pre { border-style: dashed; }
.bw-bk-chip.pulled { opacity: 0.75; }
.bw-bk-chip.promoted { background: var(--bw-gold); border-color: var(--bw-gold); color: var(--bw-on-gold); }
/* A game that is over, and one that has started and is not. Both are QUIET:
   neither is news, and the IN PROGRESS chip in particular must never look like
   a live feed, because The Book takes one snapshot a day. */
.bw-bk-chip.done { color: var(--bw-text-secondary); }
.bw-bk-chip.live { color: var(--bw-text-muted); border-style: dashed; }

/* ── the verdict: what a closing number did ───────────────────────────────────
   Same 3px hairline shape as every other chip, one tone apart from it so a
   result never gets mistaken for a market tag. Flat, no fills, and the miss
   colour is the deep salmon the house uses for a step down, never a red. */
.bw-bk-verdict { display: inline-flex; align-items: center; font-family: var(--bw-font-mono); font-size: 0.55rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; white-space: nowrap; padding: 0.05rem 0.25rem; border: 1px solid var(--bw-border-subtle); border-radius: 3px; color: var(--bw-text-muted); }
.bw-bk-verdict.hit { color: var(--bw-success); border-color: color-mix(in srgb, var(--bw-success) 40%, transparent); }
.bw-bk-verdict.miss { color: var(--bw-gold-deep); border-color: color-mix(in srgb, var(--bw-gold) 45%, transparent); }
.bw-bk-verdict.push { color: var(--bw-text-secondary); border-style: dashed; }
.bw-bk-verdict.big { font-size: 0.7rem; padding: 0.15rem 0.4rem; }

/* ── the final score ──────────────────────────────────────────────────────── */
.bw-bk-score { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.3rem; }
.bw-bk-score-t { display: flex; align-items: baseline; justify-content: center; gap: 0.35rem; font-family: var(--bw-font-mono); font-size: 0.66rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: var(--bw-text-muted); }
.bw-bk-score-t b { font-size: 1.1rem; font-weight: 800; font-variant-numeric: tabular-nums; letter-spacing: -0.01em; color: var(--bw-text-secondary); }
.bw-bk-score-t.win, .bw-bk-score-t.win b { color: var(--bw-text-primary); }
.bw-bk-score-inline { font-family: var(--bw-font-mono); font-size: 0.66rem; font-weight: 700; font-variant-numeric: tabular-nums; color: var(--bw-text-secondary); }

/* A movement delta. Direction is the glyph; the colour only reinforces it, and
   the down colour is the deep salmon, never a red. */
.bw-bk-move { display: inline-flex; align-items: center; font-family: var(--bw-font-mono); font-size: 0.66rem; font-weight: 700; font-variant-numeric: tabular-nums; letter-spacing: 0.02em; padding: 0.05rem 0.3rem; border-radius: 3px; border: 1px solid var(--bw-border-subtle); white-space: nowrap; }
.bw-bk-move.up { color: var(--bw-success); border-color: color-mix(in srgb, var(--bw-success) 40%, transparent); }
.bw-bk-move.down { color: var(--bw-gold-deep); border-color: color-mix(in srgb, var(--bw-gold) 50%, transparent); }
.bw-bk-move.big { font-size: 0.82rem; padding: 0.2rem 0.45rem; align-self: flex-start; }

/* ── filters ──────────────────────────────────────────────────────────────── */
.bw-bk-filters { display: grid; grid-template-columns: 1fr auto auto; gap: 0.5rem; align-items: center; }
.bw-bk-select { font-size: 0.78rem; padding: 0.35rem 0.5rem; border: 1px solid var(--bw-border-subtle); border-radius: 6px; background: var(--bw-surface); color: var(--bw-text-primary); max-width: 100%; min-width: 0; }
.bw-bk .bw-bk-q { min-width: 0; }

/* The lens row: what SHAPE the board is in, which is a different question from
   which markets it holds, so it never shares a row with the group pills. */
.bw-bk-lens { display: flex; gap: 0.4rem; flex-wrap: wrap; align-items: center; }
.bw-bk-lensbtn { display: inline-flex; align-items: center; gap: 0.3rem; font-size: 0.76rem; font-weight: 700; padding: 0.3rem 0.65rem; border: 1px solid var(--bw-border-subtle); border-radius: 6px; background: var(--bw-surface); color: var(--bw-text-secondary); cursor: pointer; }
.bw-bk-lensbtn:hover:not(:disabled) { border-color: var(--bw-gold); color: var(--bw-text-primary); }
.bw-bk-lensbtn.on { background: var(--bw-gold); border-color: var(--bw-gold); color: var(--bw-on-gold); }
.bw-bk-lensbtn:disabled { opacity: 0.45; cursor: default; }
.bw-bk-lensbtn.ghost { margin-left: auto; font-weight: 600; color: var(--bw-text-muted); }

/* ── the game card ────────────────────────────────────────────────────────── */
.bw-bk-grid { display: grid; grid-template-columns: 1fr; gap: 0.6rem; }
.bw-bk-gamecard { display: flex; flex-direction: column; gap: 0.5rem; border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); padding: 0.7rem 0.75rem; background: var(--bw-surface); align-self: start; }
.bw-bk-gamecard.unpriced { opacity: 0.75; }
/* A played game is not dimmed away: the score is the reason it is still on the
   board. Only its NUMBERS step back (see .closed below), and the frame goes
   dashed so a glance down the column can tell results from fixtures. */
.bw-bk-gamecard.final { border-style: dashed; }
.bw-bk-gc-h { display: flex; align-items: baseline; gap: 0.5rem; flex-wrap: wrap; }
.bw-bk-gc-teams { font-weight: 800; font-size: 0.95rem; letter-spacing: -0.01em; color: var(--bw-text-primary); }
.bw-bk-gc-when { font-family: var(--bw-font-mono); font-size: 0.66rem; font-variant-numeric: tabular-nums; color: var(--bw-text-secondary); }
/* The FINAL heading inside a slate day. Same register as the day divider one
   rung quieter, so the day divider still owns the day. */
.bw-bk-final-h { display: flex; align-items: baseline; gap: 0.4rem; font-family: var(--bw-font-mono); font-size: 0.58rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.09em; color: var(--bw-text-muted); padding: 0.5rem 0 0.25rem; }

/* ── THE MATRIX ───────────────────────────────────────────────────────────────
   The classic sportsbook grid: two team rows by three market columns, the
   captions printed once at the top and the abbreviation leading each row. The
   columns are equal by GRID and not by flex, so every cell in a column is
   exactly as wide as every other one whatever it holds.

   The first build gave each market an auto-fit cell of its own, so a card's
   three controls came out three different widths, and the two halves inside
   one control came out two different heights. */
.bw-bk-mx { display: grid; grid-template-columns: 2.5rem repeat(3, minmax(0, 1fr)); gap: 0.25rem; align-items: stretch; }
.bw-bk-mx-cap { display: flex; align-items: flex-end; justify-content: center; min-width: 0; overflow: hidden; }
.bw-bk-mx-cap, .bw-bk-cap { font-family: var(--bw-font-mono); font-size: 0.6rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: var(--bw-text-muted); white-space: nowrap; }
.bw-bk-mx-team { display: flex; align-items: center; min-width: 0; font-size: 0.8rem; font-weight: 800; letter-spacing: -0.01em; font-variant-numeric: tabular-nums; color: var(--bw-text-primary); }

/* ── THE CELL ─────────────────────────────────────────────────────────────────
   One anatomy for every price on The Book. Two fixed slots, always both
   present: the line value on top in ink, the price under it in muted. A market
   with no line (a moneyline) puts its price in the top slot and leaves the
   bottom one EMPTY BUT OCCUPIED, which is what makes a column of cells one
   height. Chips are absolutely positioned so a movement delta cannot reflow
   the number it annotates. Nothing here ever wraps. */
.bw-bk-cell {
    position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center;
    gap: 1px; min-height: 2.75rem; min-width: 0; padding: 0.3rem 0.35rem;
    border: 1px solid var(--bw-border-subtle); border-radius: 6px;
    background: var(--bw-surface); color: var(--bw-text-primary); cursor: pointer; overflow: hidden;
}
.bw-bk-cell-in { display: contents; }
button.bw-bk-cell:hover:not(:disabled) { border-color: var(--bw-gold); background: color-mix(in srgb, var(--bw-gold) 8%, transparent); }
.bw-bk-cell:disabled, .bw-bk-cell.static, .bw-bk-cell.blank { cursor: default; }
.bw-bk-cell.taken { background: color-mix(in srgb, var(--bw-gold) 12%, transparent); border-color: color-mix(in srgb, var(--bw-gold) 45%, transparent); }
.bw-bk-cell.blank { background: transparent; border-style: dashed; }
.bw-bk-cell.blank .bw-bk-cell-line { color: var(--bw-text-muted); font-weight: 400; }
.bw-bk-cell-line { font-family: var(--bw-font-mono); font-size: 0.82rem; font-weight: 700; line-height: 1.15; font-variant-numeric: tabular-nums; color: var(--bw-text-primary); white-space: nowrap; }
/* The favoured side reads at full ink and the other steps back one tone. In
   the light theme --bw-text-primary IS the navy, so the only way to render
   "favourite deeper than dog" is to step the dog back. No fills, no colour. */
.bw-bk-cell-line.fav { font-weight: 800; color: var(--bw-text-primary); }
.bw-bk-cell-line.dog { font-weight: 700; color: var(--bw-text-secondary); }
.bw-bk-cell-pre { color: var(--bw-text-muted); font-weight: 700; margin-right: 0.22em; }
/* A CLOSED cell: the game has started, so nothing here is promotable and the
   number is history. Struck and quiet, in the SAME 44px two-line anatomy as
   every other cell, so a finished card sits in the same grid as a live one and
   the column does not jump. */
.bw-bk-cell.closed { border-style: dashed; background: transparent; }
.bw-bk-cell.closed .bw-bk-cell-line, .bw-bk-cell.closed .bw-bk-cell-price {
    text-decoration: line-through; text-decoration-thickness: 1px;
    color: var(--bw-text-muted); font-weight: 700;
}
.bw-bk-cell.closed .bw-bk-verdict { position: absolute; top: 1px; right: 2px; font-size: 0.48rem; line-height: 1.2; padding: 0 2px; border: 0; }
.bw-bk-mx-team.win { color: var(--bw-text-primary); }
.bw-bk-mx.closed .bw-bk-mx-team:not(.win) { color: var(--bw-text-muted); }
.bw-bk-cell-price { font-family: var(--bw-font-mono); font-size: 0.68rem; line-height: 1.15; font-variant-numeric: tabular-nums; color: var(--bw-text-muted); white-space: nowrap; }
/* The empty slot still takes its line, which is the whole trick. */
.bw-bk-cell-price:empty::after { content: "\00a0"; }
.bw-bk-cell .bw-bk-move { position: absolute; top: 1px; right: 2px; font-size: 0.5rem; line-height: 1; padding: 0 1px; border: 0; }
.bw-bk-chip.mini { position: absolute; top: 1px; right: 2px; font-size: 0.5rem; line-height: 1.2; padding: 0 2px; gap: 0; }

/* A standalone pair (the Movers lens, the player sheet): the eyebrow names the
   side the way the matrix's column header and team row name their cells, so no
   cell ever grows a third line to say what it is. */
.bw-bk-pair { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.2rem 0.3rem; align-items: stretch; }
.bw-bk-pair.solo { grid-template-columns: minmax(0, 1fr); }
.bw-bk-pair .bw-bk-cap { text-align: center; overflow: hidden; }

.bw-bk-gc-toggle { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; width: 100%; padding: 0.4rem 0.5rem; border: 1px solid var(--bw-border-subtle); border-radius: 6px; background: transparent; font-family: var(--bw-font-mono); font-size: 0.66rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: var(--bw-text-secondary); cursor: pointer; }
.bw-bk-gc-toggle:hover { border-color: var(--bw-gold); color: var(--bw-text-primary); }
.bw-bk-caret { font-family: var(--bw-font-mono); font-size: 0.85rem; line-height: 1; color: var(--bw-text-muted); }
.bw-bk-gc-props { display: flex; flex-direction: column; gap: 0.5rem; }
/* `display: flex` outranks the hidden attribute's own display:none, so the
   collapsed state has to be said here or every card renders open. */
.bw-bk-gc-props[hidden] { display: none; }
.bw-bk-grp { display: flex; flex-direction: column; gap: 0.15rem; }
.bw-bk-grp-h { display: flex; align-items: baseline; gap: 0.4rem; font-family: var(--bw-font-mono); font-size: 0.58rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.09em; color: var(--bw-text-muted); padding-top: 0.25rem; border-top: 1px solid var(--bw-border-subtle); }

/* One prop, in the matrix's anatomy turned on its side: the identity block
   leads the row the way a team abbreviation leads a matrix row, then two equal
   cells. The two cells are a FIXED equal width, so the O and the U of every
   prop in a card line up down the page. */
.bw-bk-prop { display: grid; grid-template-columns: minmax(0, 1fr) 5.5rem 5.5rem; gap: 0.3rem; align-items: stretch; padding: 0.4rem 0; }
.bw-bk-prop + .bw-bk-prop { border-top: 1px solid var(--bw-border-subtle); }
.bw-bk-prop-id { display: flex; flex-direction: column; align-items: flex-start; justify-content: center; gap: 0.1rem; min-width: 0; max-width: 100%; }
.bw-bk-prop-tags { display: flex; align-items: center; gap: 0.3rem; flex-wrap: wrap; min-width: 0; }
/* The player sheet lists one market per row, full width: the identity is the
   market label, so the pair gets the whole sheet rather than a prop grid's
   right hand column. */
.bw-bk-sheetrow { display: flex; flex-direction: column; gap: 0.3rem; padding: 0.5rem 0; }
.bw-bk-sheetrow + .bw-bk-sheetrow { border-top: 1px solid var(--bw-border-subtle); }
.bw-bk-name { font: inherit; font-weight: 700; font-size: 0.86rem; color: var(--bw-text-primary); background: none; border: 0; border-bottom: 1px dotted var(--bw-border-subtle); padding: 0; cursor: pointer; text-align: left; }
.bw-bk-name:hover { color: var(--bw-gold-deep); border-bottom-color: var(--bw-gold); }
.bw-bk-name.flat { border-bottom: 0; cursor: default; }
.bw-bk-mkt { font-family: var(--bw-font-mono); font-size: 0.66rem; color: var(--bw-text-secondary); }
.bw-bk-mkt.strong { font-size: 0.72rem; font-weight: 700; color: var(--bw-text-primary); }

/* ── the Movers lens ──────────────────────────────────────────────────────── */
.bw-bk-movers { display: flex; flex-direction: column; }
.bw-bk-mover { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 0.4rem 0.6rem; align-items: center; padding: 0.6rem 0; border-top: 1px solid var(--bw-border-subtle); }
.bw-bk-mover:first-child { border-top: 0; }
.bw-bk-mover-body { display: flex; flex-direction: column; gap: 0.15rem; min-width: 0; }
.bw-bk-mover .bw-bk-pair { grid-column: 3; min-width: 6rem; }
.bw-bk-mover.two .bw-bk-pair { min-width: 12rem; }

/* ── the archive ──────────────────────────────────────────────────────────── */
.bw-bk-arch { display: flex; flex-direction: column; }
.bw-bk-arch-row { display: flex; align-items: baseline; gap: 0.6rem; width: 100%; padding: 0.55rem 0.2rem; border: 0; border-top: 1px solid var(--bw-border-subtle); background: none; cursor: pointer; text-align: left; }
.bw-bk-arch-row:first-child { border-top: 0; }
.bw-bk-arch-row:hover { background: color-mix(in srgb, var(--bw-gold) 7%, transparent); }
.bw-bk-arch-wk { display: inline-flex; align-items: baseline; gap: 0.35rem; font-weight: 700; font-size: 0.88rem; color: var(--bw-text-primary); }
.bw-bk-arch-n { margin-left: auto; font-family: var(--bw-font-mono); font-size: 0.68rem; font-variant-numeric: tabular-nums; color: var(--bw-text-muted); }

/* ── the promote sheet ────────────────────────────────────────────────────── */
.bw-bk-pick { display: flex; flex-direction: column; gap: 0.15rem; padding: 0.6rem 0; border-bottom: 1px solid var(--bw-border-subtle); }
.bw-bk-pick-sub { display: flex; align-items: baseline; gap: 0.4rem; flex-wrap: wrap; font-weight: 700; font-size: 1rem; color: var(--bw-text-primary); }
.bw-bk-pick-mkt { font-family: var(--bw-font-mono); font-size: 0.68rem; color: var(--bw-text-secondary); }
/* The frozen pick, in the one cell anatomy: eyebrow names the side, the line
   sits above the price. Same shape on the sheet, on the slate and in chat. */
.bw-bk-pick-line { display: flex; align-items: center; gap: 0.5rem; padding-top: 0.15rem; }
.bw-bk-pick-line .bw-bk-move.big { align-self: center; }
.bw-bk-pickcell { display: flex; flex-direction: column; gap: 0.1rem; min-width: 4.5rem; max-width: 11rem; flex: 0 0 auto; align-self: flex-start; }
.bw-bk-pickcell .bw-bk-cap { text-align: center; overflow: hidden; text-overflow: ellipsis; }
.bw-bk-pickcell.big .bw-bk-cell { min-height: 3.1rem; }
.bw-bk-pickcell.big .bw-bk-cell-line { font-size: 1.05rem; }
.bw-bk-pickcell.big .bw-bk-cell-price { font-size: 0.8rem; }
.bw-bk-freeze { font-size: 0.75rem; color: var(--bw-text-muted); padding: 0.5rem 0; }
.bw-bk-label { font-family: var(--bw-font-mono); font-size: 0.65rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: var(--bw-text-muted); }
.bw-bk-take { width: 100%; max-width: 100%; box-sizing: border-box; font-family: inherit; font-size: 0.85rem; padding: 0.5rem; border: 1px solid var(--bw-border-subtle); border-radius: 6px; background: var(--bw-surface); color: var(--bw-text-primary); resize: vertical; }
.bw-bk-err { font-size: 0.78rem; color: var(--bw-gold-deep); padding-top: 0.35rem; }
/* The close button is position:absolute and the shared sheet is static, so
   without this it anchors to the fixed OVERLAY and floats in the top right
   corner of the screen, detached from the sheet it closes. */
.bw-bk-sheet { position: relative; max-width: 100%; box-sizing: border-box; }
.bw-bk-sheet .bw-mk-sheet-close { top: 0.75rem; right: 0.75rem; border: 1px solid var(--bw-border-subtle); background: var(--bw-surface); color: var(--bw-text-secondary); }
.bw-bk-sheet .bw-tm-sheet-hd { padding-right: 2.2rem; }

/* ── the Slate ────────────────────────────────────────────────────────────── */
.bw-bk-slate { display: flex; flex-direction: column; gap: 0.7rem; }
.bw-bk-promo { border: 1px solid var(--bw-border-subtle); border-radius: var(--bw-radius-md, 10px); padding: 0.7rem 0.8rem; display: flex; flex-direction: column; gap: 0.35rem; }
.bw-bk-promo-hd { display: flex; align-items: center; gap: 0.45rem; flex-wrap: wrap; }
.bw-bk-avatar { font-size: 1rem; }
.bw-bk-promo-who { font-weight: 700; font-size: 0.88rem; color: var(--bw-text-primary); }
.bw-bk-promo-pick { display: flex; align-items: center; gap: 0.5rem; }
.bw-bk-promo-who2 { display: flex; align-items: baseline; gap: 0.35rem; flex-wrap: wrap; min-width: 0; flex: 1 1 auto; }
.bw-bk-promo-sub { font-weight: 700; font-size: 0.86rem; color: var(--bw-text-primary); }
.bw-bk-promo-take { font-size: 0.85rem; line-height: 1.45; color: var(--bw-text-secondary); }
.bw-bk-promo-actions { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; padding-top: 0.2rem; }
.bw-bk-react { display: inline-flex; gap: 0.35rem; }

.bw-bk-chatcard { display: flex; flex-direction: column; gap: 0.3rem; }
.bw-bk-footer { font-size: 0.72rem; line-height: 1.5; color: var(--bw-text-muted); padding-top: 0.5rem; border-top: 1px solid var(--bw-border-subtle); }

/* Pill rows: weeks and market groups. One shape, one selected state, scrolling
   sideways rather than wrapping into an ambiguous second row. */
.bw-bk-weeks, .bw-bk-pills { display: flex; gap: 0.3rem; overflow-x: auto; overflow-y: hidden; padding-bottom: 0.2rem; scrollbar-width: thin; -webkit-overflow-scrolling: touch; }
.bw-bk-weeks::-webkit-scrollbar, .bw-bk-pills::-webkit-scrollbar { height: 4px; }
.bw-bk-weeks::-webkit-scrollbar-thumb, .bw-bk-pills::-webkit-scrollbar-thumb { background: var(--bw-border-subtle); border-radius: 999px; }
.bw-bk-week, .bw-bk-pill { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 0.3rem; font-family: var(--bw-font-mono); font-size: 0.66rem; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; white-space: nowrap; padding: 0.28rem 0.6rem; border: 1px solid var(--bw-border-subtle); border-radius: 999px; background: var(--bw-surface); color: var(--bw-text-muted); cursor: pointer; }
.bw-bk-week:hover:not(:disabled), .bw-bk-pill:hover:not(:disabled) { border-color: var(--bw-gold); color: var(--bw-text-primary); }
.bw-bk-week.on, .bw-bk-pill.on { background: var(--bw-gold); border-color: var(--bw-gold); color: var(--bw-on-gold); }
.bw-bk-week:disabled, .bw-bk-pill:disabled { opacity: 0.45; cursor: default; }
.bw-bk-week.pre:not(.on) { color: var(--bw-text-secondary); border-style: dashed; }
/* A week every game of which is final: one tone back and a quiet tick. Still
   fully pressable, because last week's results are the reason it is there. */
.bw-bk-week.done:not(.on) { color: var(--bw-text-muted); }
.bw-bk-tick { font-size: 0.55rem; opacity: 0.7; }
.bw-bk-week.ghost { font-weight: 600; text-transform: none; letter-spacing: 0; }
.bw-bk-now { font-size: 0.52rem; letter-spacing: 0.08em; opacity: 0.75; }
.bw-bk-pill-n { font-variant-numeric: tabular-nums; opacity: 0.7; }
.bw-bk-wk { font-family: var(--bw-font-mono); font-size: 0.66rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: var(--bw-text-primary); }
.bw-bk-note { font-size: 0.78rem; line-height: 1.45; color: var(--bw-text-secondary); }

/* The slate day the game cards sit under. */
.bw-bk-day { font-family: var(--bw-font-mono); font-size: 0.62rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.09em; color: var(--bw-text-muted); padding: 0.7rem 0 0.3rem; }
.bw-bk-day:not(:first-child) { border-top: 1px solid var(--bw-border-subtle); margin-top: 0.35rem; }

/* Two columns of game cards once there is honestly room for two, so a desktop
   week is a board and not a single-file column down the middle of the screen. */
@media (min-width: 960px) {
    .bw-bk-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 720px) {
    .bw-bk-prop { grid-template-columns: minmax(0, 1fr) 5rem 5rem; gap: 0.25rem; }
}

@media (max-width: 560px) {
    /* Search first and full width, the two selects sharing the row beneath it:
       three stacked full-width controls used to eat the whole first screen
       before a single line of the board appeared. */
    .bw-bk-filters { grid-template-columns: 1fr 1fr; }
    .bw-bk .bw-bk-q { grid-column: 1 / -1; width: 100%; }
    .bw-bk-select { width: 100%; }
    .bw-bk-card { padding: 0.75rem 0.65rem; }
    .bw-bk-gamecard { padding: 0.6rem 0.6rem; }
    .bw-bk-gc-teams { font-size: 0.9rem; }
    /* The matrix keeps all three columns on a phone: the cells compress, they
       do not stack, because a stacked matrix is the wall of text again. The
       props stack instead, identity over its two halves, so a player's name
       keeps a full line to itself and the two cells stay equal. */
    .bw-bk-prop { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.3rem; }
    .bw-bk-prop-id { grid-column: 1 / -1; }
    .bw-bk-lensbtn.ghost { margin-left: 0; }
    .bw-bk-mover { grid-template-columns: auto minmax(0, 1fr); align-items: start; }
    .bw-bk-mover .bw-bk-pair, .bw-bk-mover.two .bw-bk-pair { grid-column: 1 / -1; min-width: 0; }
}

/* The smallest phone still gets all three columns and the captions in full
   (a Moneyline caption measures 59 of the 67 pixels a column holds at 320, so
   the abbreviated fallback is not needed). Only the frame compresses. */
@media (max-width: 380px) {
    .bw-bk-mx { grid-template-columns: 2.1rem repeat(3, minmax(0, 1fr)); gap: 0.2rem; }
    .bw-bk-mx-cap, .bw-bk-cap { letter-spacing: 0.05em; }
    .bw-bk-mx-team { font-size: 0.72rem; }
    .bw-bk-cell { padding: 0.3rem 0.2rem; }
    .bw-bk-cell-line { font-size: 0.78rem; }
}

/* The promote and player sheets are BOTTOM SHEETS on a phone: a promotion is a
   one-handed action taken mid-scroll, and a centred dialog puts the confirm
   button under the keyboard. */
@media (max-width: 640px) {
    .bw-bk-overlay { align-items: flex-end; }
    .bw-bk-overlay .bw-bk-sheet {
        width: 100%; max-width: 100%; margin: 0;
        border-radius: var(--bw-radius-md, 10px) var(--bw-radius-md, 10px) 0 0;
        max-height: 88vh; overflow-y: auto;
        padding-bottom: calc(0.9rem + env(safe-area-inset-bottom));
    }
}


/* ── IMPORT VIEW (.bw-imp-*) — 16-DESIGN §5.2, §12 ───────────────────────────
   The only new component family this feature adds, and it is new because the
   audit found no stepper or wizard anywhere in this file. The SEASON GRID is
   the progress indicator; the bar is secondary. Nine seasons is nine chips, and
   a person's own years are more legible than a percentage.
   Chip state is never colour-only: waiting, done and skipped each carry text,
   and skipped additionally carries a hairline strike. */
.bw-imp {
    border: 1px solid var(--bw-border);
    border-radius: 12px;
    padding: 1rem;
    text-align: left;
    margin-top: 0.4rem;
}
.bw-imp-head {
    font-family: var(--bw-font-display);
    font-weight: 700;
    font-size: 0.9375rem;
    color: var(--bw-text-primary);
}
.bw-imp-bar { display: flex; align-items: center; gap: 0.6rem; }
.bw-imp-bar .bw-progress-bar { flex: 1; margin: 0.75rem 0; }
.bw-imp-count {
    font-family: var(--bw-font-mono);
    font-size: 0.75rem;
    font-variant-numeric: tabular-nums;
    color: var(--bw-text-secondary);
    white-space: nowrap;
}
.bw-imp-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(84px, 1fr));
    gap: 0.35rem;
    margin-top: 0.35rem;
}
.bw-imp-chip {
    display: flex;
    flex-direction: column;
    gap: 1px;
    padding: 0.3rem 0.45rem;
    border-radius: 8px;
    border: 1px solid var(--bw-border);
    font-family: var(--bw-font-mono);
    font-size: 0.75rem;
    font-variant-numeric: tabular-nums;
    line-height: 1.2;
}
.bw-imp-chip em {
    font-style: normal;
    font-family: var(--bw-font-body);
    font-size: 0.625rem;
    color: var(--bw-text-muted);
}
.bw-imp-chip.waiting { color: var(--bw-text-muted); }
.bw-imp-chip.done    { color: var(--bw-text-primary); }
/* The one salmon fill in this family, with navy text on it per the on-salmon
   rule. The verb underneath is what carries the meaning; the fill is decorative
   on top of it. */
.bw-imp-chip.active  { background: var(--bw-gold); border-color: var(--bw-gold); color: var(--bw-on-gold); }
.bw-imp-chip.active em { color: var(--bw-on-gold); opacity: 0.85; }
.bw-imp-chip.skipped { color: var(--bw-text-muted); text-decoration: line-through; text-decoration-thickness: 1px; }
.bw-imp-note { font-size: 0.75rem; color: var(--bw-text-muted); margin-top: 0.7rem; }
.bw-imp-fail { font-size: 0.8125rem; color: var(--bw-text-primary); line-height: 1.6; }

/* ── COVERAGE CARD (.bw-cov-*) — 16-DESIGN §5.3 ──────────────────────────────
   A threshold, not a receipt. No score, no grade, no percentage: the layout has
   nowhere to PUT one, which is the point. "What did not" is a <dl> so the
   cause-to-consequence pairing survives linearization. */
.bw-cov { max-width: 720px; text-align: left; }
.bw-cov-title { font-family: var(--bw-font-display); font-weight: 700; font-size: 1.25rem; color: var(--bw-text-primary); }
.bw-cov-sub { font-size: 0.8125rem; color: var(--bw-text-muted); margin-bottom: 1rem; }
.bw-cov-h {
    font-size: 0.6875rem;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bw-text-muted);
    margin: 1rem 0 0.4rem;
    border-top: 1px solid var(--bw-border);
    padding-top: 0.7rem;
}
.bw-cov-row { display: flex; justify-content: space-between; gap: 1rem; padding: 0.3rem 0; font-size: 0.8125rem; }
.bw-cov-row .bw-cov-k { color: var(--bw-text-primary); }
.bw-cov-row .bw-cov-v { color: var(--bw-text-secondary); font-family: var(--bw-font-mono); font-variant-numeric: tabular-nums; white-space: nowrap; }
.bw-cov-dl { margin: 0; }
.bw-cov-dl .bw-cov-k { font-size: 0.8125rem; color: var(--bw-text-primary); margin-top: 0.35rem; }
.bw-cov-dl .bw-cov-v { font-size: 0.75rem; color: var(--bw-text-muted); margin: 0 0 0.35rem; line-height: 1.55; }
.bw-cov-note { font-size: 0.75rem; color: var(--bw-text-muted); margin: 0.4rem 0 0; line-height: 1.55; }

@media (min-width: 560px) {
    .bw-cov-dl { display: grid; grid-template-columns: 40% 1fr; column-gap: 1rem; align-items: baseline; }
    .bw-cov-dl .bw-cov-k, .bw-cov-dl .bw-cov-v { margin: 0.2rem 0; }
}
@media (min-width: 1024px) {
    .bw-cov-dl { grid-template-columns: 30% 1fr; }
}

/* A platform heading inside the connections card (16-DESIGN §7.1). */
.bw-pf-plat-h {
    font-size: 0.75rem;
    font-weight: 700;
    color: var(--bw-text-secondary);
    margin: 0.85rem 0 0.2rem;
}
.bw-pf-plat-h:first-of-type { margin-top: 0.2rem; }

/* ============================================================================
   THE STAGING BANNER (proposal 30 §2)

   A flat coral hairline strip, pinned to the top of every screen on
   staging.offseason.org and on no other host. Every rule below is scoped to
   html.off-staging, which only ever gets set by applyStagingBanner() after the
   server said `env: 'staging'` — so production renders byte-identically to
   what it rendered before this existed, including the fixed sidebar's top.

   Flat, hairline, salmon (never red): a mirror is not an error state. Under
   the modal overlay (z-index 1000) on purpose, so a dialog still owns the
   screen when one is open.
   ============================================================================ */
.bw-staging-banner {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    z-index: 900;
    box-sizing: border-box;
    height: 30px;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.4rem;
    padding: 0 0.75rem;
    background: var(--bw-surface);
    border-bottom: 1px solid var(--bw-gold-deep);
    color: var(--bw-text-primary);
    font-family: var(--bw-font-mono);
    font-size: 0.6875rem;
    font-weight: 700;
    letter-spacing: 0.04em;
    text-align: center;
    line-height: 1.2;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
html.off-staging body { padding-top: 30px; }
html.off-staging .bw-sidebar { top: 30px; }
@media (max-width: 900px) {
    /* The copy is long for a phone; let it wrap to two lines rather than
       truncating the sentence that says the data is disposable. */
    .bw-staging-banner { height: auto; min-height: 30px; padding: 0.3rem 0.75rem; white-space: normal; }
    html.off-staging body { padding-top: 44px; }
}

/* ══ THE DRAFT ROOM (redesign 2026-08-26) ════════════════════════════════════
   One room, structured by attention (design-spec: draftroom-redesign).
   Tier 0 (clock bar, pick ribbon, action strip) never scrolls away; the
   tier-band spine is the primary column, the dossier is always open on the
   right, the players rail rides the left. Flat surfaces, hairline borders,
   salmon reserved for you and your decision. No gradients, no single-side
   colored edges, no em-dashes. Breakpoints (spec §4.7): >=1600 XL,
   1280-1599 reference, 1000-1279 compact (rail becomes a drawer), 769-999
   tablet (dossier becomes a bottom sheet), <=768 phone (immersive; decision
   banner pins to the thumb edge). */

/* ── Shell composition while the room is live ──────────────────────────── */
body.bw-md-roomlive .bw-main { overflow: hidden; height: 100dvh; min-height: 0; padding-bottom: 0; }
body.bw-md-roomlive .bw-content { max-width: none; margin: 0; padding: 0; height: 100dvh; display: flex; flex-direction: column; }
body.bw-md-roomlive #bw-fan-body { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; }

/* Compact icon rail below 1280: the room needs the width more than the
   labels. Logo glyph + icons only; active state keeps its tint fill. */
@media (min-width: 769px) and (max-width: 1279px) {
    body.bw-md-roomlive #bw-app { grid-template-columns: 68px 1fr; }
    body.bw-md-roomlive .bw-sidebar { width: 68px; }
    body.bw-md-roomlive .bw-sidebar-brand,
    body.bw-md-roomlive .bw-sidebar-league-text,
    body.bw-md-roomlive .bw-sidebar-username,
    body.bw-md-roomlive .bw-sidebar-user-caret,
    body.bw-md-roomlive .bw-nav-item > span:last-child { display: none; }
    body.bw-md-roomlive .bw-sidebar-header { justify-content: center; padding: 1rem 0.5rem 0.8rem; }
    body.bw-md-roomlive .bw-nav-item { justify-content: center; padding: 0.625rem 0; }
    body.bw-md-roomlive .bw-sidebar-footer { align-items: center; padding: 0.8rem 0.4rem; }
    body.bw-md-roomlive .bw-sidebar-league { justify-content: center; }
}

/* Phone: immersive. The room is a full-screen task; the clock bar's X is the
   way out, and the pinned decision bar owns the bottom edge. One bottom bar
   at a time, always. */
@media (max-width: 768px) {
    body.bw-md-roomlive .bw-bottom-nav { display: none; }
    body.bw-md-roomlive .bw-main { padding-bottom: 0; }
}

/* ── Room root ─────────────────────────────────────────────────────────── */
.bw-mdr { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; background: var(--bw-bg); }

/* ── Clock bar (Tier 0) ────────────────────────────────────────────────── */
.bw-mdr-clockbar { flex: 0 0 auto; display: flex; align-items: center; gap: 0.8rem; padding: 0.5rem 1rem; background: var(--bw-surface); border-bottom: 1px solid var(--bw-border-subtle); }
.bw-mdr-cklogo { display: none; width: 24px; height: 24px; flex-shrink: 0; }
.bw-mdr-roomtag { font-family: var(--bw-font-mono); font-size: 0.6rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--bw-text-muted); white-space: nowrap; }
.bw-mdr-ck-pick { font-family: var(--bw-font-mono); font-weight: 700; font-size: 0.84rem; color: var(--bw-text-primary); white-space: nowrap; }
.bw-mdr-ck-who { font-size: 0.82rem; color: var(--bw-text-secondary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
.bw-mdr-ck-who.you { color: var(--bw-gold-deep, #E07676); font-weight: 700; animation: bwMdrPulse 1.2s ease-in-out infinite; }
@keyframes bwMdrPulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.55; } }
.bw-mdr-runchip { font-family: var(--bw-font-mono); font-size: 0.62rem; font-weight: 700; letter-spacing: 0.04em; color: var(--bw-text-primary); background: color-mix(in srgb, var(--bw-text-muted) 8%, transparent); border: 1px solid var(--bw-border-strong); border-radius: 999px; padding: 0.16rem 0.55rem; white-space: nowrap; cursor: help; }
.bw-mdr-think { font-family: var(--bw-font-mono); font-size: 0.62rem; color: var(--bw-text-muted); white-space: nowrap; animation: bwMdrPulse 1.2s ease-in-out infinite; }
.bw-mdr-ck-right { margin-left: auto; display: flex; align-items: center; gap: 0.35rem; }
.bw-mdr-iconbtn { width: 26px; height: 26px; display: inline-flex; align-items: center; justify-content: center; border: 1px solid var(--bw-border-subtle); border-radius: 7px; background: var(--bw-surface); color: var(--bw-text-secondary); cursor: pointer; font-size: 0.72rem; flex-shrink: 0; }
.bw-mdr-iconbtn:hover { border-color: var(--bw-border-strong); color: var(--bw-text-primary); }

/* Board provenance chip + popover: the pin's identity out of the flow. */
.bw-mdr-provwrap { position: relative; display: inline-flex; }
.bw-mdr-provchip { font-family: var(--bw-font-mono); font-size: 0.62rem; color: var(--bw-text-secondary); border: 1px solid var(--bw-border-subtle); border-radius: 999px; padding: 0.16rem 0.55rem; background: var(--bw-surface); cursor: pointer; white-space: nowrap; }
.bw-mdr-provchip:hover { border-color: var(--bw-border-strong); }
.bw-mdr-provdot { display: inline-block; width: 6px; height: 6px; border-radius: 50%; background: var(--bw-gold-deep, #E07676); margin-left: 0.3rem; vertical-align: 1px; }
.bw-mdr-provpop { display: none; position: absolute; top: calc(100% + 6px); right: 0; z-index: 60; width: 19rem; max-width: 84vw; background: var(--bw-surface); border: 1px solid var(--bw-border-strong); border-radius: 10px; padding: 0.6rem 0.7rem; font-size: 0.74rem; color: var(--bw-text-secondary); line-height: 1.45; }
.bw-mdr-provpop.open { display: flex; flex-direction: column; gap: 0.35rem; }

/* Room controls menu: speed, sims, start over, demoted to Tier 2. */
.bw-mdr-menuwrap { position: relative; display: inline-flex; }
.bw-mdr-menu { display: none; position: absolute; top: calc(100% + 6px); right: 0; z-index: 60; min-width: 13rem; background: var(--bw-surface); border: 1px solid var(--bw-border-strong); border-radius: 10px; padding: 0.55rem 0.6rem; }
.bw-mdr-menu.open { display: flex; flex-direction: column; gap: 0.45rem; }
.bw-mdr-menu-sec { font-family: var(--bw-font-mono); font-size: 0.56rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--bw-text-muted); }
.bw-mdr-menu .bw-md-speedctl { margin-left: 0; }
.bw-mdr-menuitem { text-align: left; font-size: 0.8rem; color: var(--bw-text-primary); background: transparent; border: 1px solid var(--bw-border-subtle); border-radius: 8px; padding: 0.4rem 0.55rem; cursor: pointer; }
.bw-mdr-menuitem:hover { border-color: var(--bw-border-strong); }

.bw-mdr-progress { flex: 0 0 auto; height: 2px; background: color-mix(in srgb, var(--bw-text-muted) 12%, transparent); }
.bw-mdr-progress i { display: block; height: 100%; background: var(--bw-gold); transition: width 0.25s ease; }

/* ── Pick ribbon (Tier 0) ──────────────────────────────────────────────── */
.bw-mdr-ribbon { flex: 0 0 auto; display: flex; align-items: stretch; background: var(--bw-surface); border-bottom: 1px solid var(--bw-border-subtle); }
.bw-mdr-ribbon-scroll { flex: 1; display: flex; gap: 6px; overflow-x: auto; padding: 0.45rem 0.75rem; scrollbar-width: thin; min-width: 0; }
.bw-mdr-rp { flex: 0 0 auto; min-width: 6.2rem; max-width: 10rem; display: flex; flex-direction: column; align-items: flex-start; gap: 0.1rem; border: 1px solid var(--bw-border-subtle); border-radius: 8px; padding: 0.28rem 0.5rem; background: var(--bw-surface); cursor: pointer; text-align: left; }
.bw-mdr-rp:disabled { cursor: default; }
.bw-mdr-rp .n { width: 100%; display: flex; justify-content: space-between; gap: 0.4rem; font-family: var(--bw-font-mono); font-size: 0.56rem; color: var(--bw-text-muted); white-space: nowrap; }
.bw-mdr-rp .n b { color: var(--bw-text-secondary); }
.bw-mdr-rp .p { font-size: 0.72rem; font-weight: 600; color: var(--bw-text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; display: flex; align-items: center; gap: 0.3rem; }
.bw-mdr-rp .s { font-family: var(--bw-font-mono); font-size: 0.58rem; color: var(--bw-text-muted); white-space: nowrap; }
.bw-mdr-rp.done { background: color-mix(in srgb, var(--bw-text-muted) 6%, var(--bw-surface)); border-color: transparent; }
.bw-mdr-rp.now { border-color: var(--bw-gold-deep, #E07676); }
.bw-mdr-rp.now .n b { color: var(--bw-gold-deep, #E07676); }
.bw-mdr-rp.future { border-style: dashed; }
.bw-mdr-rp.you { background: color-mix(in srgb, var(--bw-gold) 14%, var(--bw-surface)); border: 1px solid var(--bw-gold-deep, #E07676); border-style: solid; }
.bw-mdr-rp.you .n b { color: var(--bw-gold-deep, #E07676); }
/* Your slot clamps to the nearest edge: "when am I up" never leaves the
   screen, whichever way the ribbon is scrolled. */
.bw-mdr-rp.sticky { position: sticky; left: 0; right: 0; z-index: 2; }
.bw-mdr-kept { font-family: var(--bw-font-mono); font-size: 0.5rem; font-weight: 700; letter-spacing: 0.06em; color: var(--bw-text-secondary); border: 1px solid var(--bw-border-strong); border-radius: 4px; padding: 0.02rem 0.25rem; }
.bw-mdr-ribbon-end { flex: 0 0 auto; display: flex; align-items: center; padding: 0 0.75rem; border-left: 1px solid var(--bw-border-subtle); }
.bw-mdr-ghost { font-family: var(--bw-font-mono); font-size: 0.62rem; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase; background: var(--bw-surface); border: 1px solid var(--bw-border-strong); border-radius: 8px; color: var(--bw-text-secondary); padding: 0.4rem 0.7rem; cursor: pointer; white-space: nowrap; }
.bw-mdr-ghost:hover { border-color: var(--bw-text-primary); color: var(--bw-text-primary); }

/* ── Action strip (Tier 0) ─────────────────────────────────────────────── */
.bw-mdr-strip { flex: 0 0 auto; border-bottom: 1px solid var(--bw-border-subtle); background: var(--bw-surface); }
.bw-mdr-strip-wait { display: grid; grid-template-columns: auto auto 1fr; }
.bw-mdr-swz { display: flex; flex-direction: column; justify-content: center; gap: 0.28rem; padding: 0.5rem 1rem; min-width: 0; }
.bw-mdr-swz + .bw-mdr-swz { border-left: 1px solid var(--bw-border-subtle); }
.bw-mdr-zlbl { font-family: var(--bw-font-mono); font-size: 0.55rem; font-weight: 700; letter-spacing: 0.12em; color: var(--bw-text-muted); text-transform: uppercase; }
.bw-mdr-zbody { display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; }
.bw-mdr-until { font-family: var(--bw-font-mono); font-size: 0.72rem; font-weight: 700; color: var(--bw-text-primary); white-space: nowrap; }
.bw-mdr-until b { color: var(--bw-gold-deep, #E07676); }
.bw-mdr-hold { font-size: 0.78rem; color: var(--bw-text-secondary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bw-mdr-hold b { color: var(--bw-text-primary); }
.bw-mdr-guide1 { font-size: 0.72rem; color: var(--bw-text-muted); }
.bw-mdr-planchip { font-family: var(--bw-font-mono); font-size: 0.64rem; border: 1px solid var(--bw-border-subtle); border-radius: 999px; padding: 0.14rem 0.5rem; background: color-mix(in srgb, var(--bw-text-muted) 6%, transparent); color: var(--bw-text-secondary); white-space: nowrap; }
.bw-mdr-planchip b { color: var(--bw-text-primary); }
.bw-mdr-plansep { font-family: var(--bw-font-mono); font-size: 0.6rem; color: var(--bw-text-muted); }
.bw-mdr-planedge { font-family: var(--bw-font-mono); font-size: 0.62rem; font-weight: 700; color: var(--bw-text-primary); white-space: nowrap; margin-left: 0.3rem; }
.bw-mdr-planfull { display: inline-block; }
.bw-mdr-planfull summary { font-family: var(--bw-font-mono); font-size: 0.62rem; color: var(--bw-text-muted); cursor: pointer; list-style-position: inside; }
.bw-mdr-planfull-rows { position: absolute; z-index: 55; margin-top: 0.3rem; background: var(--bw-surface); border: 1px solid var(--bw-border-strong); border-radius: 10px; padding: 0.5rem 0.65rem; min-width: 14rem; }
.bw-mdr-swz-plan { position: relative; }

/* Decision banner: salmon tint, full hairline, flat. The only loud thing. */
.bw-mdr-strip.turnbar { background: color-mix(in srgb, var(--bw-gold) 13%, var(--bw-surface)); border-bottom: 1px solid var(--bw-border-strong); }
.bw-mdr-st-row { display: flex; align-items: center; gap: 1rem; padding: 0.6rem 1rem; min-width: 0; }
.bw-mdr-st-label { display: flex; flex-direction: column; gap: 0.05rem; flex: 0 0 auto; }
.bw-mdr-st-onclock { font-family: var(--bw-font-display); font-weight: 800; font-size: 0.86rem; letter-spacing: 0.02em; color: var(--bw-gold-deep, #E07676); text-transform: uppercase; }
.bw-mdr-st-pick { font-family: var(--bw-font-mono); font-size: 0.66rem; color: var(--bw-text-secondary); }
.bw-mdr-st-card { display: flex; align-items: center; gap: 0.8rem; background: var(--bw-surface); border: 1px solid var(--bw-border-strong); border-radius: 10px; padding: 0.45rem 0.8rem; min-width: 0; flex: 0 1 auto; }
.bw-mdr-st-id { min-width: 0; flex: 0 0 auto; max-width: 20rem; }
.bw-mdr-st-kicker { font-family: var(--bw-font-mono); font-size: 0.56rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--bw-text-muted); }
.bw-mdr-st-name { font-family: var(--bw-font-display); font-weight: 800; font-size: 1rem; color: var(--bw-text-primary); white-space: nowrap; display: flex; align-items: center; gap: 0.35rem; }
.bw-mdr-st-meta { font-family: var(--bw-font-mono); font-size: 0.64rem; color: var(--bw-text-secondary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bw-mdr-st-why { flex: 1 1 0; min-width: 9rem; max-width: 24rem; font-size: 0.76rem; color: var(--bw-text-secondary); line-height: 1.35; display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; }
.bw-mdr-draftbtn { font-family: var(--bw-font-display); font-weight: 800; font-size: 0.86rem; background: var(--bw-gold); color: var(--bw-navy, #1B2D4F); border: 1px solid var(--bw-gold-deep, #E07676); border-radius: 9px; padding: 0.5rem 1rem; cursor: pointer; white-space: nowrap; }
.bw-mdr-draftbtn:hover { background: var(--bw-gold-deep, #E07676); color: #fff; }
.bw-mdr-st-alts { display: flex; flex-direction: column; gap: 0.25rem; margin-left: auto; min-width: 0; }
.bw-mdr-altchip { font-family: var(--bw-font-mono); font-size: 0.64rem; border: 1px solid var(--bw-border-subtle); border-radius: 999px; background: var(--bw-surface); padding: 0.16rem 0.55rem; color: var(--bw-text-secondary); cursor: pointer; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; text-align: left; }
.bw-mdr-altchip:hover { border-color: var(--bw-text-primary); }
.bw-mdr-st-pair { font-size: 0.74rem; font-weight: 600; color: var(--bw-text-primary); padding: 0 1rem 0.5rem; }

/* ── Main: rail / spine / dossier ──────────────────────────────────────── */
.bw-mdr-main { flex: 1 1 auto; min-height: 0; display: grid; grid-template-columns: 248px minmax(0, 1fr) 336px; }
@media (min-width: 1600px) { .bw-mdr-main { grid-template-columns: 280px minmax(0, 1fr) 384px; } }
.bw-mdr-rail, .bw-mdr-spine, .bw-mdr-dossier { min-height: 0; overflow-y: auto; scrollbar-width: thin; }
.bw-mdr-rail { background: var(--bw-surface); border-right: 1px solid var(--bw-border-subtle); }
.bw-mdr-spine { padding: 0.85rem 1rem; background: var(--bw-bg); }
.bw-mdr-dossier { background: var(--bw-surface); border-left: 1px solid var(--bw-border-subtle); padding: 0.85rem 0.9rem; }

/* ── Players rail (Tier 2) ─────────────────────────────────────────────── */
.bw-mdr-rtabs { display: flex; border-bottom: 1px solid var(--bw-border-subtle); position: sticky; top: 0; background: var(--bw-surface); z-index: 2; }
.bw-mdr-rtab { flex: 1; font-family: var(--bw-font-mono); font-size: 0.62rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; padding: 0.55rem 0; text-align: center; color: var(--bw-text-muted); background: none; border: none; border-bottom: 2px solid transparent; cursor: pointer; white-space: nowrap; }
.bw-mdr-rtab.on { color: var(--bw-text-primary); border-bottom-color: var(--bw-gold-deep, #E07676); }
.bw-mdr-search { display: block; margin: 0.6rem 0.6rem 0.4rem; width: calc(100% - 1.2rem); border: 1px solid var(--bw-border-strong); border-radius: 8px; padding: 0.42rem 0.6rem; font-size: 0.78rem; background: var(--bw-surface); color: var(--bw-text-primary); box-sizing: border-box; }
.bw-mdr-poschips { display: flex; gap: 0.25rem; padding: 0 0.6rem 0.5rem; flex-wrap: wrap; }
.bw-mdr-plist { display: flex; flex-direction: column; }
.bw-mdr-prow { display: flex; align-items: center; gap: 0.45rem; padding: 0.42rem 0.6rem; border-bottom: 1px solid var(--bw-border-subtle); cursor: pointer; }
.bw-mdr-prow:hover { background: color-mix(in srgb, var(--bw-text-muted) 6%, transparent); }
.bw-mdr-prow.sel { background: color-mix(in srgb, var(--bw-gold) 12%, var(--bw-surface)); }
.bw-mdr-prow-main { min-width: 0; flex: 1 1 auto; }
.bw-mdr-prow-name { font-size: 0.78rem; font-weight: 600; color: var(--bw-text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bw-mdr-prow-meta { font-family: var(--bw-font-mono); font-size: 0.58rem; color: var(--bw-text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bw-mdr-tiertag { flex: 0 0 auto; font-family: var(--bw-font-mono); font-size: 0.54rem; font-weight: 700; color: var(--bw-text-secondary); background: color-mix(in srgb, var(--bw-text-muted) 8%, transparent); border: 1px solid var(--bw-border-subtle); border-radius: 4px; padding: 0.06rem 0.3rem; cursor: help; }
.bw-mdr-prow-act { display: flex; gap: 0.3rem; flex: 0 0 auto; align-items: center; }
.bw-mdr-slotrow { display: flex; align-items: center; gap: 0.5rem; padding: 0.4rem 0.8rem; border-bottom: 1px solid var(--bw-border-subtle); }
.bw-mdr-slotrow .slot { font-family: var(--bw-font-mono); font-size: 0.6rem; font-weight: 700; color: var(--bw-text-muted); width: 2.6rem; flex: 0 0 auto; }
.bw-mdr-slotrow .who { font-size: 0.78rem; font-weight: 600; color: var(--bw-text-primary); }
.bw-mdr-slotrow.empty .who { color: var(--bw-text-muted); font-weight: 400; font-style: italic; }
.bw-mdr-slothead { font-family: var(--bw-font-mono); font-size: 0.56rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--bw-text-muted); padding: 0.55rem 0.8rem 0.2rem; }
.bw-mdr-railnote { font-size: 0.68rem; color: var(--bw-text-muted); padding: 0.6rem 0.8rem; }
.bw-mdr-roster { padding-bottom: 0.6rem; }

/* ── The spine (Tier 0/1) ──────────────────────────────────────────────── */
.bw-mdr-spinehead { display: flex; align-items: center; gap: 0.6rem; margin-bottom: 0.7rem; flex-wrap: wrap; }
.bw-mdr-spinetitle { font-family: var(--bw-font-display); font-weight: 800; font-size: 0.92rem; color: var(--bw-text-primary); }
.bw-mdr-spinesub { font-family: var(--bw-font-mono); font-size: 0.62rem; color: var(--bw-text-muted); }
.bw-mdr-railbtn { display: none; margin-left: auto; }
.bw-mdr-spinebody.stale { opacity: 0.6; transition: opacity 0.2s ease; }
.bw-mdr-quiet { font-size: 0.8rem; color: var(--bw-text-muted); }

.bw-mdr-band { background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 12px; margin-bottom: 0.7rem; }
.bw-mdr-band.lock { border-color: var(--bw-border-strong); }
.bw-mdr-band-head { display: flex; align-items: baseline; gap: 0.6rem; padding: 0.5rem 0.8rem; border-bottom: 1px solid var(--bw-border-subtle); flex-wrap: wrap; width: 100%; box-sizing: border-box; }
.bw-mdr-band.depth .bw-mdr-band-head { border-bottom: none; }
.bw-mdr-band-head.asbtn { background: none; border-left: none; border-right: none; border-top: none; cursor: pointer; text-align: left; }
.bw-mdr-band-label { font-family: var(--bw-font-mono); font-size: 0.62rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--bw-text-secondary); }
.bw-mdr-band.t1 .bw-mdr-band-label, .bw-mdr-band.lock .bw-mdr-band-label { color: var(--bw-gold-deep, #E07676); }
.bw-mdr-band-wait { font-size: 0.7rem; color: var(--bw-text-muted); }
.bw-mdr-band-run { margin-left: auto; font-family: var(--bw-font-mono); font-size: 0.6rem; font-weight: 700; color: var(--bw-gold-deep, #E07676); }
.bw-mdr-band-chips { display: flex; flex-wrap: wrap; gap: 0.5rem; padding: 0.6rem 0.8rem; }
.bw-mdr-chip { display: flex; flex-direction: column; gap: 0.2rem; min-width: 9.5rem; border: 1px solid var(--bw-border-strong); border-radius: 10px; padding: 0.42rem 0.6rem 0.48rem; background: var(--bw-surface); cursor: pointer; text-align: left; }
.bw-mdr-chip:hover { border-color: var(--bw-text-primary); }
.bw-mdr-chip.sel { border-color: var(--bw-text-primary); background: color-mix(in srgb, var(--bw-text-muted) 8%, var(--bw-surface)); }
.bw-mdr-chip.gone { opacity: 0.4; }
.bw-mdr-chip.gone .bw-mdr-chip-name { text-decoration: line-through; }
.bw-mdr-chip-top { display: flex; align-items: center; gap: 0.35rem; min-width: 0; }
.bw-mdr-chip-name { font-weight: 700; font-size: 0.8rem; color: var(--bw-text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bw-mdr-pickmark { font-family: var(--bw-font-mono); font-size: 0.52rem; font-weight: 700; letter-spacing: 0.08em; color: var(--bw-navy, #1B2D4F); background: var(--bw-gold); border-radius: 4px; padding: 0.05rem 0.28rem; flex: 0 0 auto; }
.bw-mdr-chip-mid { display: flex; align-items: center; gap: 0.5rem; min-width: 0; }
.bw-mdr-cscore { font-family: var(--bw-font-mono); font-size: 0.72rem; font-weight: 700; color: var(--bw-text-primary); cursor: help; }
.bw-mdr-csurv { flex: 1; height: 4px; background: color-mix(in srgb, var(--bw-text-muted) 16%, transparent); border-radius: 2px; overflow: hidden; min-width: 2rem; cursor: help; }
.bw-mdr-csurv i { display: block; height: 100%; background: var(--bw-text-secondary); }
.bw-mdr-csurvpct { font-family: var(--bw-font-mono); font-size: 0.6rem; color: var(--bw-text-muted); }
.bw-mdr-gone { font-family: var(--bw-font-mono); font-size: 0.6rem; color: var(--bw-text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* Badge glyphs: inline at the end of the name row, never floated. */
.bw-mdr-glyphs { display: inline-flex; align-items: center; gap: 0.28rem; margin-left: auto; padding-left: 0.4rem; flex: 0 0 auto; }
.bw-mdr-gl { font-style: normal; font-size: 0.6rem; line-height: 1; cursor: help; }
.bw-mdr-gl.conv { color: var(--bw-gold-deep, #E07676); }
.bw-mdr-gl.edge { color: var(--bw-text-secondary); }
.bw-mdr-gl.covet { color: #9A5F22; }
.bw-mdr-gl.queue { color: var(--bw-gold-deep, #E07676); font-size: 0.68rem; }

/* The override band: the one element allowed to outrank tier 1. */
.bw-mdr-ovrband { background: var(--bw-surface); border: 1px solid var(--bw-border-strong); border-radius: 12px; margin-bottom: 0.7rem; padding: 0.55rem 0.8rem; }
.bw-mdr-ovr-head { display: flex; align-items: center; gap: 0.45rem; flex-wrap: wrap; }
.bw-mdr-ovrdot { width: 8px; height: 8px; border-radius: 50%; background: var(--bw-gold-deep, #E07676); flex: 0 0 auto; }
.bw-mdr-ovr-why { font-size: 0.8rem; font-weight: 600; color: var(--bw-text-primary); line-height: 1.4; margin-top: 0.4rem; }
.bw-mdr-ovr-row { display: flex; align-items: center; gap: 0.5rem; margin-top: 0.5rem; flex-wrap: wrap; }

.bw-mdr-gline { font-size: 0.74rem; color: var(--bw-text-secondary); padding: 0.18rem 0; }
.bw-mdr-gline::before { content: "·"; margin-right: 0.4rem; color: var(--bw-text-muted); }
.bw-mdr-legend { margin-top: 0.9rem; background: var(--bw-surface); border: 1px solid var(--bw-border-subtle); border-radius: 10px; padding: 0.6rem 0.8rem; display: flex; flex-direction: column; gap: 0.3rem; }
.bw-mdr-lg { font-size: 0.7rem; color: var(--bw-text-secondary); display: flex; align-items: baseline; gap: 0.45rem; }
.bw-mdr-lg i { width: 12px; text-align: center; flex: 0 0 auto; }
.bw-mdr-lg b { color: var(--bw-text-primary); }

/* ── The dossier (Tier 1) ──────────────────────────────────────────────── */
.bw-mdr-dtop { display: flex; align-items: flex-start; gap: 0.5rem; }
.bw-mdr-dtop > div { min-width: 0; }
.bw-mdr-dkicker { font-family: var(--bw-font-mono); font-size: 0.58rem; font-weight: 700; letter-spacing: 0.12em; color: var(--bw-text-muted); text-transform: uppercase; margin-bottom: 0.35rem; }
.bw-mdr-dclose { display: none; margin-left: auto; }
.bw-mdr-dname { font-family: var(--bw-font-display); font-weight: 800; font-size: 1.2rem; color: var(--bw-text-primary); display: flex; align-items: center; gap: 0.45rem; flex-wrap: wrap; }
.bw-mdr-did { font-family: var(--bw-font-mono); font-size: 0.64rem; color: var(--bw-text-muted); margin-top: 0.15rem; }
.bw-mdr-gonetxt { color: var(--bw-gold-deep, #E07676); }
.bw-mdr-ranks { display: flex; gap: 0.3rem; flex-wrap: wrap; margin: 0.55rem 0 0.3rem; }
.bw-mdr-rk { font-family: var(--bw-font-mono); font-size: 0.62rem; border: 1px solid var(--bw-border-subtle); border-radius: 6px; padding: 0.14rem 0.42rem; background: color-mix(in srgb, var(--bw-text-muted) 6%, transparent); color: var(--bw-text-secondary); }
.bw-mdr-rk b { color: var(--bw-text-primary); }
.bw-mdr-rk.disp { border-style: dashed; background: var(--bw-surface); }
.bw-mdr-dwhy { font-size: 0.8rem; color: var(--bw-text-primary); line-height: 1.45; padding: 0.55rem 0.65rem; background: color-mix(in srgb, var(--bw-text-muted) 6%, transparent); border: 1px solid var(--bw-border-subtle); border-radius: 9px; margin: 0.55rem 0 0.2rem; }
.bw-mdr-dsec { font-family: var(--bw-font-mono); font-size: 0.58rem; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; color: var(--bw-text-muted); margin: 0.8rem 0 0.3rem; }
.bw-mdr-wf { border: 1px solid var(--bw-border-subtle); border-radius: 9px; padding: 0.3rem 0.6rem 0.45rem; }
.bw-mdr-survrow { display: flex; align-items: center; gap: 0.55rem; font-size: 0.74rem; padding: 0.22rem 0; }
.bw-mdr-survrow .lab { font-family: var(--bw-font-mono); font-size: 0.62rem; color: var(--bw-text-secondary); flex: 0 0 6rem; }
.bw-mdr-survrow .bar { flex: 1; height: 6px; background: color-mix(in srgb, var(--bw-text-muted) 16%, transparent); border-radius: 3px; overflow: hidden; }
.bw-mdr-survrow .bar i { display: block; height: 100%; background: var(--bw-text-secondary); }
.bw-mdr-survrow.hot .bar i { background: var(--bw-gold-deep, #E07676); }
.bw-mdr-survrow .pc { font-family: var(--bw-font-mono); font-size: 0.68rem; font-weight: 700; color: var(--bw-text-primary); flex: 0 0 2.2rem; text-align: right; }
.bw-mdr-taker { display: flex; gap: 0.5rem; font-size: 0.74rem; padding: 0.22rem 0; align-items: baseline; }
.bw-mdr-taker .who { font-weight: 600; color: var(--bw-text-primary); white-space: nowrap; }
.bw-mdr-taker .why { color: var(--bw-text-muted); font-size: 0.7rem; min-width: 0; }
.bw-mdr-covetline { font-size: 0.74rem; color: #9A5F22; background: color-mix(in srgb, #C79A5B 10%, transparent); border: 1px solid color-mix(in srgb, #C79A5B 30%, transparent); border-radius: 8px; padding: 0.4rem 0.55rem; margin-top: 0.35rem; }
.bw-mdr-lanetags { display: flex; gap: 0.3rem; flex-wrap: wrap; }
.bw-mdr-ltag { font-family: var(--bw-font-mono); font-size: 0.6rem; border: 1px solid var(--bw-border-subtle); border-radius: 999px; padding: 0.14rem 0.5rem; color: var(--bw-text-secondary); background: color-mix(in srgb, var(--bw-text-muted) 6%, transparent); }
.bw-mdr-dactions { display: flex; gap: 0.5rem; margin-top: 0.9rem; flex-wrap: wrap; align-items: center; }
.bw-mdr-dactions .bw-mdr-draftbtn { flex: 1 1 auto; }
.bw-mdr-dfoot { margin-top: 0.8rem; font-size: 0.64rem; color: var(--bw-text-muted); line-height: 1.5; }

/* ── Center board view: the wall board fills the column and follows live ── */
/* The spine stops scrolling itself; the board wrap becomes the one two-axis
   scroll container, so touch, wheel and scrollbar all move the same box. */
.bw-mdr-spine.boardview { display: flex; flex-direction: column; overflow: hidden; }
.bw-mdr-boardhost { position: relative; flex: 1 1 auto; min-height: 0; display: flex; }
.bw-mdr-boardhost .bw-md-board-wrap { flex: 1 1 auto; min-height: 0; overflow: auto; -webkit-overflow-scrolling: touch; overscroll-behavior: contain; scrollbar-width: thin; outline: none; }
.bw-mdr-boardhost .bw-md-bd { width: max-content; }
/* The live cell: a hairline salmon ring that survives every repaint. */
.bw-md-bd-cell.cur { box-shadow: inset 0 0 0 1px var(--bw-gold-deep, #E07676); background: color-mix(in srgb, var(--bw-gold-deep, #E07676) 10%, var(--bw-surface)); }
.bw-md-bd-cell.you.cur { box-shadow: inset 0 0 0 2px var(--bw-gold), inset 0 0 0 3px var(--bw-gold-deep, #E07676); }
/* The re-follow chip: appears only while the user browses on his own. */
.bw-mdr-followchip { display: none; position: absolute; right: 0.75rem; bottom: calc(0.75rem + env(safe-area-inset-bottom, 0px)); z-index: 5; align-items: center; gap: 0.4rem; font-family: var(--bw-font-mono); font-size: 0.64rem; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase; background: var(--bw-surface); border: 1px solid var(--bw-border-strong); border-radius: 999px; color: var(--bw-text-primary); padding: 0.36rem 0.75rem; cursor: pointer; white-space: nowrap; }
.bw-mdr-followchip .dot { width: 7px; height: 7px; border-radius: 50%; background: var(--bw-gold-deep, #E07676); flex: 0 0 auto; }
.bw-mdr-followchip:hover { border-color: var(--bw-text-primary); }
.bw-mdr-boardhost.unfollow .bw-mdr-followchip { display: inline-flex; }
/* The Tiers | Board control: text-scale, salmon underline on the active state. */
.bw-mdr-seg { display: inline-flex; gap: 0.15rem; }
.bw-mdr-seg button { font-family: var(--bw-font-mono); font-size: 0.66rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--bw-text-muted); background: none; border: none; border-bottom: 2px solid transparent; padding: 0.1rem 0.3rem 0.3rem; cursor: pointer; }
.bw-mdr-seg button.on { color: var(--bw-text-primary); border-bottom-color: var(--bw-gold-deep, #E07676); }
.bw-mdr-seg button:hover { color: var(--bw-text-primary); }
.bw-mdr-ghost.on { color: var(--bw-text-primary); border-color: var(--bw-gold-deep, #E07676); }
/* Advisor|ADP tier-ordering toggle: a quiet secondary control above the bands. */
.bw-mdr-tiermode { display: flex; align-items: baseline; flex-wrap: wrap; gap: 0.4rem 0.6rem; margin: 0 0 0.5rem; }
.bw-mdr-seg-sm button { font-size: 0.6rem; padding: 0.05rem 0.25rem 0.2rem; }
.bw-mdr-tiermode-sub { font-size: 0.66rem; color: var(--bw-text-muted); font-style: italic; }

/* ── Sheets, drawer, backdrop ──────────────────────────────────────────── */
.bw-mdr-backdrop { display: none; position: fixed; inset: 0; background: color-mix(in srgb, var(--bw-navy, #1B2D4F) 35%, transparent); z-index: 200; }

/* Compact 1000-1279: two columns; the players rail becomes a left drawer. */
@media (max-width: 1279px) {
    .bw-mdr-main { grid-template-columns: minmax(0, 1fr) 320px; }
    .bw-mdr-railbtn { display: inline-block; }
    .bw-mdr-rail { position: fixed; top: 0; bottom: 0; left: 68px; width: 300px; z-index: 210; transform: translateX(-130%); transition: transform 0.18s ease; border-right: 1px solid var(--bw-border-strong); }
    .bw-mdr.rail-open .bw-mdr-rail { transform: none; }
    .bw-mdr.rail-open .bw-mdr-backdrop { display: block; }
    .bw-mdr-strip-wait { grid-template-columns: 1fr 1fr; }
    .bw-mdr-swz-you { grid-column: 1 / -1; flex-direction: row; align-items: baseline; gap: 0.9rem; border-bottom: 1px solid var(--bw-border-subtle); flex-wrap: wrap; }
    .bw-mdr-swz-plan { border-left: none; }
    .bw-mdr-st-why { display: none; }
}

/* Tablet 769-999: one column; the dossier becomes a bottom sheet. */
@media (max-width: 999px) {
    .bw-mdr-main { grid-template-columns: minmax(0, 1fr); }
    .bw-mdr-dossier { position: fixed; left: 0; right: 0; bottom: 0; max-height: 78vh; z-index: 215; transform: translateY(110%); transition: transform 0.2s ease; border-top: 1px solid var(--bw-border-strong); border-left: none; border-radius: 14px 14px 0 0; }
    .bw-mdr.dossier-open .bw-mdr-dossier { transform: none; }
    .bw-mdr.dossier-open .bw-mdr-backdrop { display: block; }
    .bw-mdr-dclose { display: inline-flex; }
}

/* Phone <=768: immersive. Condensed clock bar (logo glyph in, chrome out),
   stacked study strip, full-width chips, the decision banner pinned to the
   thumb edge with a horizontal alternates row. */
@media (max-width: 768px) {
    .bw-mdr-clockbar { gap: 0.55rem; padding: 0.5rem 0.7rem; }
    .bw-mdr-cklogo { display: block; }
    .bw-mdr-roomtag, .bw-mdr-provwrap, .bw-mdr-runchip { display: none; }
    .bw-mdr-rail { left: 0; width: min(320px, 88vw); }
    .bw-mdr-ribbon-end { padding: 0 0.5rem; }
    .bw-mdr-strip-wait { grid-template-columns: 1fr; }
    .bw-mdr-swz + .bw-mdr-swz { border-left: none; border-top: 1px solid var(--bw-border-subtle); }
    .bw-mdr-swz-you { border-bottom: none; }
    .bw-mdr-swz-lanes { display: none; }   /* lanes stay reachable in the dossier */
    .bw-mdr-band-chips { flex-direction: column; }
    .bw-mdr-chip { min-width: 0; }
    .bw-mdr-spine { padding: 0.7rem 0.7rem 1rem; }
    /* The decision banner pins to the bottom edge; the room scrolls under it. */
    .bw-mdr-strip.turnbar { position: fixed; left: 0; right: 0; bottom: 0; z-index: 205; border-top: 1px solid var(--bw-border-strong); border-bottom: none; padding-bottom: env(safe-area-inset-bottom, 0px); }
    .bw-mdr-st-row { flex-wrap: wrap; gap: 0.45rem; padding: 0.55rem 0.8rem 0.4rem; }
    .bw-mdr-st-label { flex-direction: row; gap: 0.5rem; align-items: baseline; width: 100%; }
    .bw-mdr-st-card { width: 100%; flex-wrap: wrap; gap: 0.35rem 0.6rem; padding: 0.4rem 0.6rem; }
    .bw-mdr-st-id { flex: 1 1 auto; }
    .bw-mdr-st-name { font-size: 0.9rem; }
    .bw-mdr-st-meta { white-space: normal; }
    .bw-mdr-st-why { display: none; }
    .bw-mdr-st-alts { width: 100%; flex-direction: row; align-items: center; overflow-x: auto; margin-left: 0; scrollbar-width: none; }
    .bw-mdr-st-alts .bw-mdr-zlbl { display: none; }
    .bw-mdr-altchip { flex: 0 0 auto; }
    .bw-mdr-st-pair { display: none; }
    .bw-mdr.turn .bw-mdr-spine { padding-bottom: 12rem; }
    .bw-mdr.turn .bw-mdr-dossier { max-height: 62vh; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   OPEN DRAFT — the anonymous shell (proposal 33 §3, /mockdraft).
   The signed-out visitor gets the same room with the member chrome gone:
   no sidebar, no bottom nav, one slim brand bar with the join CTA.
   ═══════════════════════════════════════════════════════════════════════ */
body.bw-anon .bw-sidebar,
body.bw-anon .bw-bottom-nav,
body.bw-anon .bw-user-popover { display: none !important; }
body.bw-anon #bw-app { grid-template-columns: 1fr; }
body.bw-anon .bw-main { grid-column: 1; padding-bottom: 0; }
body.bw-anon .bw-content { margin-left: auto; margin-right: auto; }
body.bw-anon.bw-md-roomlive #bw-app { grid-template-columns: 1fr; }

.bw-anon-bar {
    display: flex; align-items: center; justify-content: space-between;
    gap: 0.8rem; padding: 0.55rem 0.25rem 0.9rem;
}
body.bw-md-roomlive .bw-anon-bar { padding: 0.45rem 0.9rem; border-bottom: 1px solid var(--bw-border-subtle); flex: 0 0 auto; }
.bw-anon-brand { display: flex; align-items: baseline; gap: 0.5rem; text-decoration: none; color: var(--bw-text); }
.bw-anon-brand img { width: 22px; height: 22px; border-radius: 5px; align-self: center; }
.bw-anon-brand-name { font-family: var(--bw-font-display, inherit); font-weight: 900; letter-spacing: 0.04em; font-size: 0.95rem; }
.bw-anon-brand-sub { font-size: 0.7rem; color: var(--bw-text-muted); text-transform: uppercase; letter-spacing: 0.08em; }

.bw-md-anonlede { color: var(--bw-text-muted); font-size: 0.9rem; margin: 0.2rem 0 1rem; max-width: 40rem; }
.bw-md-anonjoin {
    display: flex; align-items: center; justify-content: space-between; gap: 0.9rem;
    margin-top: 1.4rem; padding: 0.8rem 1rem; border: 1px solid var(--bw-border-subtle);
    border-radius: 10px; font-size: 0.85rem; color: var(--bw-text-muted); flex-wrap: wrap;
}
.bw-md-anonjoin .bw-btn { flex: 0 0 auto; }

/* ---- Single-league mode: the holding screen -------------------------------
   A full takeover, not a banner: nothing behind it works for this account, so
   showing a half-empty app under a warning would only invite clicking. */
body.bw-gated { overflow: hidden; }
.bw-gate {
    position: fixed; inset: 0; z-index: 3000; display: flex; align-items: center;
    justify-content: center; padding: 1.25rem; background: var(--bw-bg);
}
.bw-gate-card {
    width: 100%; max-width: 30rem; background: var(--bw-surface);
    border: 1px solid var(--bw-border-strong); padding: 2rem 1.75rem; text-align: center;
}
.bw-gate-logo { width: 44px; height: 44px; margin: 0 auto 1rem; display: block; }
.bw-gate-card h1 {
    font-family: var(--bw-font-display); font-size: 1.375rem; font-weight: 800;
    margin: 0 0 0.6rem; color: var(--bw-text-primary);
}
.bw-gate-card p {
    margin: 0 0 1.25rem; font-size: 0.9375rem; line-height: 1.55;
    color: var(--bw-text-secondary); text-wrap: pretty;
}
.bw-gate-acts { display: flex; flex-wrap: wrap; gap: 0.6rem; justify-content: center; }
.bw-gate-leave {
    background: none; border: 0; padding: 0.5rem 0.25rem; cursor: pointer;
    font: inherit; font-size: 0.8125rem; color: var(--bw-text-muted);
    text-decoration: underline; text-underline-offset: 3px;
}
.bw-gate-leave:hover { color: var(--bw-text-primary); }
.bw-gate-leave.danger { color: var(--bw-error); }
.bw-gate-leave[disabled] { opacity: 0.6; cursor: default; }
.bw-gate-confirm {
    margin-top: 1.25rem; padding-top: 1.25rem; border-top: 1px solid var(--bw-border-subtle);
}
.bw-gate-confirm[hidden] { display: none; }
.bw-gate-confirm p { margin-bottom: 0.9rem; }
.bw-gate-err { color: var(--bw-error); font-size: 0.8125rem; margin-top: 0.75rem; }
