/* ===== Public dashboard ===== */
.skip{position:absolute;left:12px;top:-60px;z-index:100;background:var(--surface);color:var(--ink);padding:10px 14px;border-radius:10px;font-weight:750;border:2px solid var(--primary)}
.skip:focus{top:12px}
.dtop .brand{text-decoration:none;color:inherit;min-width:0}
.dtop .brand span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dtop .tools{margin-left:auto}

/* live indicator */
.dlive{display:inline-flex;align-items:center;gap:7px;height:34px;padding:0 12px;border-radius:999px;border:1px solid var(--line);background:var(--surface);color:var(--ink);font-size:13px;font-weight:750;white-space:nowrap;max-width:52vw}
.dlive .sl{overflow:hidden;text-overflow:ellipsis}
.dlive i{width:9px;height:9px;border-radius:50%;background:var(--warn-line);flex-shrink:0}
.dlive[data-k="ok"] i{background:#1fbf6a;box-shadow:0 0 0 0 rgba(31,191,106,.6);animation:livepulse 2.4s ease-out infinite}
.dlive[data-k="bad"]{border-color:var(--err);color:var(--err);background:var(--err-bg)}
.dlive[data-k="bad"] i{background:var(--err)}
@keyframes livepulse{0%{box-shadow:0 0 0 0 rgba(31,191,106,.55)}70%{box-shadow:0 0 0 7px rgba(31,191,106,0)}100%{box-shadow:0 0 0 0 rgba(31,191,106,0)}}
:root[data-raceday="1"] .dlive[data-k="ok"] i{animation:none}

/* tabs: one row, always visible, scrolls if it has to */
.dtabs{display:flex;gap:4px;padding:0 12px 10px;overflow-x:auto;scrollbar-width:none;max-width:1240px;margin:0 auto}
.dtabs::-webkit-scrollbar{display:none}
.dtab{flex:1 0 auto;min-height:40px;padding:0 16px;border-radius:999px;border:1px solid transparent;background:transparent;color:var(--muted);font-weight:750;font-size:14.5px;cursor:pointer}
.dtab:hover{color:var(--ink);background:var(--hl-2)}
.dtab[aria-selected="true"]{background:var(--pressed-bg);color:var(--pressed-fg)}
.dtab:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
@media (min-width:761px){.dtab{flex:0 0 auto}}

/* hero: the next race, on moving water */
.dhero{position:relative;border-radius:var(--r-lg);overflow:hidden;margin:0 0 14px;background:linear-gradient(160deg,var(--water-2),var(--water-1) 70%);color:#fff;isolation:isolate}
.dhero-in{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:18px;padding:22px;align-items:start}
@media (max-width:860px){.dhero-in{grid-template-columns:minmax(0,1fr);padding:16px;gap:14px}}
.hk{margin:0 0 8px;font-size:13px;font-weight:750;color:var(--mist)}
.hcard h1{color:#fff;margin:0;font-size:clamp(21px,3.4vw,30px);font-weight:900;letter-spacing:-.3px;line-height:1.15}
.hcard>p{color:var(--foam);margin:6px 0 0}
.hrace{display:flex;gap:14px;align-items:center;margin-bottom:12px}
.hrace p{margin:4px 0 0;color:var(--foam);font-weight:650;font-size:14px}
.hno{display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:72px;padding:8px 10px;border-radius:14px;background:#fff;color:var(--water-1);line-height:1;flex-shrink:0}
.hno small{font-size:11px;font-weight:750;opacity:.75}
.hno b{font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:32px;font-weight:900}
.hlast{background:rgba(6,21,41,.42);border:1px solid rgba(193,227,241,.22);border-radius:var(--r);padding:14px}
:root[data-raceday="1"] .hlast{background:rgba(0,0,0,.35)}
.hlt{display:block;color:#fff;font-size:16px;margin-bottom:8px}
.hlast ol{list-style:none;margin:0 0 12px;padding:0;display:grid;gap:6px}
.hlast li{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:10px;align-items:center}
.hlast .crew{font-weight:750;overflow-wrap:anywhere}
.hlast .tm{font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--foam);font-size:13.5px}
.hlast .btn{width:100%;justify-content:center}

/* lane rows (race cards + hero) */
.rlanes{list-style:none;margin:0;padding:0}
.rlanes li{display:grid;grid-template-columns:40px minmax(0,1fr) auto 58px;gap:10px;align-items:center;padding:7px 14px;border-top:1px solid var(--line-2);min-height:46px}
.rlanes li:first-child{border-top:0}
.rlanes .crew{font-weight:700;color:var(--ink);overflow-wrap:anywhere;line-height:1.25}
.rlanes .tm{font-family:var(--mono);font-variant-numeric:tabular-nums;font-weight:700;color:var(--ink);white-space:nowrap}
.rlanes .plc{justify-self:end;display:flex;gap:4px;align-items:center}
.rlanes .plc:empty{display:none}
.rlanes li.m1{background:var(--gold-row)}.rlanes li.m2{background:var(--silver-row)}.rlanes li.m3{background:var(--bronze-row)}
.rlanes li.hit{box-shadow:inset 4px 0 0 var(--accent);background:var(--hl)}
.rlanes li.vac{opacity:.6}
.rlanes .buoy{width:32px;height:32px;font-size:15px}
.rlanes.hl li{border-top-color:rgba(193,227,241,.16);padding:6px 4px;min-height:42px}
.rlanes.hl .crew,.rlanes.hl .tm{color:#fff}
.rlanes.hl .muted{color:var(--mist)}
.rlanes.hl li.m1,.rlanes.hl li.m2,.rlanes.hl li.m3{background:rgba(255,255,255,.08)}
.rlanes.hl li.hit{background:rgba(15,189,238,.18)}
@media (min-width:861px){.rlanes.hl{display:grid;grid-template-columns:1fr 1fr;column-gap:18px}.rlanes.hl li:nth-child(2){border-top:0}}

/* list controls */
.dbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 2px 10px}
.dprog{margin:0;font-weight:750;color:var(--ink)}
.dfilters{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin:0 0 12px;position:sticky;top:calc(var(--topbar) + 50px + env(safe-area-inset-top,0px));z-index:20;padding:8px 0;background:var(--bg)}
.dsearch{position:relative;flex:1 1 220px;display:flex;align-items:center}
.dsearch .ico{position:absolute;left:12px;width:18px;height:18px;color:var(--muted);pointer-events:none}
.dsearch input{width:100%;height:44px;padding:0 12px 0 38px;border-radius:12px;border:1px solid var(--line);background:var(--surface);color:var(--ink);font-size:16px}
.dsearch input:focus-visible{outline:2px solid var(--primary);outline-offset:1px}
.seg{display:inline-flex;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--surface);flex:0 0 auto}
.seg button{min-height:44px;padding:0 14px;border:0;background:transparent;color:var(--muted);font-weight:750;cursor:pointer}
.seg button+button{border-left:1px solid var(--line)}
.seg button[aria-pressed="true"]{background:var(--pressed-bg);color:var(--pressed-fg)}
.seg button:focus-visible{outline:2px solid var(--primary);outline-offset:-2px}
@media (max-width:560px){.seg{flex:1 1 100%}.seg button{flex:1;padding:0 8px}}

/* crew finder summary */
.crewsum{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,250px),1fr));gap:10px;margin:0 0 14px}
.cs{background:var(--surface);border:1px solid var(--line);border-left:4px solid var(--accent);border-radius:var(--r);padding:11px 14px;display:flex;flex-direction:column;gap:2px}
.cs b{color:var(--ink);font-size:15.5px;overflow-wrap:anywhere}
.cs span{color:var(--muted);font-size:13px;font-weight:650}
.cs .cs-st{color:var(--ink);font-size:14px;font-weight:700;margin-top:4px}

/* race cards */
.racelist{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,380px),1fr));gap:14px;align-items:start}
.race{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;scroll-margin-top:calc(var(--topbar) + 120px)}
.race-h{display:flex;align-items:center;gap:12px;padding:12px 14px;border-bottom:1px solid var(--line-2)}
.race-t{min-width:0;flex:1;display:flex;flex-direction:column}
.race-t b{color:var(--ink);font-size:15px;line-height:1.25}
.race-t small{color:var(--muted);font-size:12.5px;font-weight:650;margin-top:2px}
.rstat{font-size:12px;font-weight:800;padding:4px 10px;border-radius:999px;white-space:nowrap;background:var(--line-2);color:var(--muted)}
.rstat.done{background:var(--ok-bg);color:var(--ok)}
.rstat.live{background:var(--warn-bg);color:var(--warn)}
.rstat.next{background:var(--pressed-bg);color:var(--pressed-fg)}
.race.st-next{border-color:var(--primary);box-shadow:0 0 0 1px var(--primary)}
.race.st-live{border-color:var(--warn-line)}
.rnote{margin:0;padding:8px 14px;font-size:12.5px;color:var(--muted);border-top:1px solid var(--line-2);background:var(--surface-2)}
.racelist .empty{grid-column:1/-1;padding:28px;text-align:center;color:var(--muted);background:var(--surface);border:1px dashed var(--line);border-radius:var(--r-lg)}

/* events */
.evchips{display:flex;gap:8px;overflow-x:auto;padding:2px 2px 12px;scrollbar-width:thin}
.evchip{flex:0 0 auto;display:flex;flex-direction:column;align-items:flex-start;gap:2px;min-height:52px;padding:8px 14px;border-radius:12px;border:1px solid var(--line);background:var(--surface);color:var(--ink);font-weight:750;cursor:pointer;text-align:left}
.evchip small{font-size:12px;color:var(--muted);font-weight:650}
.evchip.on{background:var(--pressed-bg);color:var(--pressed-fg);border-color:var(--pressed-bg)}
.evchip.on small{color:inherit;opacity:.8}
.evchip:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
.hh{margin:16px 0 8px;font-size:14px;color:var(--ink)}

/* board on its own: full width, taller */
body[data-tab="board"] main{max-width:none}
body[data-tab="board"] .dfoot{display:none}

.dfoot{max-width:1240px;margin:0 auto;padding:0 20px 40px;color:var(--muted);font-size:13px;display:flex;flex-direction:column;gap:6px}
.dfoot p{margin:0;display:flex;gap:12px;flex-wrap:wrap;justify-content:space-between}
.dfoot a{color:var(--muted);font-weight:650}

@media (max-width:560px){
 .rlanes li{grid-template-columns:34px minmax(0,1fr) auto;grid-template-areas:"lane crew pl" "lane tm tm";row-gap:2px;padding:7px 12px}
 .rlanes .buoy{grid-area:lane}.rlanes .crew{grid-area:crew}.rlanes .plc{grid-area:pl}.rlanes .tm{grid-area:tm;font-size:13.5px}
 .rlanes .tm:empty{display:none}
 .rlanes.hl li{padding:6px 2px}
 .hno{min-width:62px}.hno b{font-size:27px}
 .dbar .btn{display:none}
}
@media (prefers-reduced-motion:reduce){.dlive[data-k="ok"] i{animation:none}}
@media print{.dfilters,.dtabs,.dhero,.dbar,.dfoot,.dlive,#d_contrast{display:none!important}.chrome{display:none!important}}

/* dashboard keeps its name visible on phones */
.dtop .brand b{display:block!important;font-size:16px}
@media (max-width:560px){.dtab{padding:0 11px;font-size:14px}.dtabs{gap:2px;padding:0 8px 8px}}
@media (max-width:380px){.dtop .brand span{display:none}.dtab{padding:0 9px;font-size:13.5px}}
