:root{--bg:#f4f6f9;--card:#fff;--ink:#14213d;--muted:#64748b;--line:#e5e9f0;--accent:#0b6bcb;
--accent-soft:#e6f0fb;--gold:#e0a800;--silver:#94a3b8;--bronze:#c2773a;--dq:#b42318;--shadow:0 1px 2px rgba(16,24,40,.06),0 1px 3px rgba(16,24,40,.08)}
@media (prefers-color-scheme:dark){:root{--bg:#0b1220;--card:#121a2b;--ink:#e6edf7;--muted:#93a3b8;
--line:#22304a;--accent:#5aa9ff;--accent-soft:#16263f;--dq:#ff8a80;--shadow:none}}
*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.45 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif}
a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}
.top{position:sticky;top:0;z-index:5;background:var(--ink);color:#fff;padding:10px 16px;display:flex;align-items:center;gap:12px;flex-wrap:wrap}
@media (prefers-color-scheme:dark){.top{background:#060b14}}
.logo{display:flex;flex:none}.logo img{display:block;width:30px;height:30px;opacity:.92}.logo:hover img{opacity:1}
.top h1{font-size:17px;margin:0;font-weight:650;flex:1 1 auto;min-width:0}
@media (max-width:600px){.top h1{flex:1 1 calc(100% - 42px)}}
.top .date{opacity:.75;font-size:13px;font-weight:400;margin-left:6px}
.live{display:inline-flex;align-items:center;gap:6px;font-size:12px;opacity:.9;white-space:nowrap}
.dot{width:8px;height:8px;border-radius:50%;background:#22c55e;box-shadow:0 0 0 0 rgba(34,197,94,.7);animation:pulse 2s infinite}
.dot.stale{background:#f59e0b;animation:none}
@keyframes pulse{70%{box-shadow:0 0 0 7px rgba(34,197,94,0)}100%{box-shadow:0 0 0 0 rgba(34,197,94,0)}}
.classic{background:#fff;color:#14213d;border:1px solid #c9ced8;border-radius:6px;padding:6px 10px;font-size:13px;font-weight:500;line-height:1;white-space:nowrap;box-shadow:0 1px 3px rgba(0,0,0,.12)}
.classic:hover{background:#f1f3f7;text-decoration:none}
.offline{flex:1 1 100%;margin:2px -16px -10px;padding:8px 16px;background:#f59e0b;color:#1f1300;font-size:13.5px;font-weight:550;line-height:1.35}
.offline[hidden]{display:none}
/* Below the sticky header, so it scrolls away on phones */
.notice{padding:10px max(16px,calc((100% - 1180px)/2 + 16px));background:#fef3c7;color:#1f1300;font-size:14px;line-height:1.4;border-bottom:1px solid #f5d77a}
.notice a{color:inherit;font-weight:650;text-decoration:underline}
.notice[hidden]{display:none}
.layout{display:grid;grid-template-columns:260px minmax(0,1fr);gap:20px;max-width:1180px;margin:20px auto;padding:0 16px}
nav.events{position:sticky;top:64px;align-self:start;max-height:calc(100vh - 84px);overflow:auto;background:var(--card);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow)}
nav.events summary{list-style:none;cursor:pointer;padding:12px 14px;font-weight:650;font-size:13px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
nav.events summary::-webkit-details-marker{display:none}
.nav-list{list-style:none;margin:0;padding:0 6px 8px}
.nav-list a{display:block;padding:7px 10px;border-radius:8px;color:var(--ink);font-size:14px}
.nav-list a:hover{background:var(--accent-soft);text-decoration:none}
.nav-list a.active{background:var(--accent);color:#fff}
.search{position:sticky;top:0;z-index:1;background:var(--card);padding:0 8px 8px}
.search input{width:100%;font:inherit;font-size:16px;color:var(--ink);background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:9px 12px 9px 34px;outline:none;
background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2.2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='m20 20-3.5-3.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:11px center;background-size:16px}
.search input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
#search-results{padding:0 6px 8px}
.sr-h{font-size:11.5px;font-weight:650;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin:6px 10px 4px}
.sr{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:8px;color:var(--ink)}
.sr:hover{background:var(--accent-soft);text-decoration:none}
.sr .place{flex:none}.sr-main{flex:1 1 auto;min-width:0;font-size:14px;line-height:1.3}
.sr-main small{display:block;color:var(--muted);font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sr .time{flex:none;font-weight:650;font-variant-numeric:tabular-nums;font-size:14px}
.sr-none{color:var(--muted);font-size:14px;margin:4px 10px 8px}
tr.hl td{background:#fff3bf!important}
@media (prefers-color-scheme:dark){tr.hl td{background:rgba(250,204,21,.18)!important}}
.card.event{scroll-margin-top:72px}
.nm{display:inline-flex;align-items:center;gap:2px}
.star{flex:none;display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;margin:-6px 0 -6px -8px;padding:0;border:0;border-radius:50%;background:none;color:var(--muted);cursor:pointer;opacity:.5}
.star svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linejoin:round}
.star:hover{opacity:1;background:var(--accent-soft)}
.star[aria-pressed="true"]{color:var(--gold);opacity:1}.star[aria-pressed="true"] svg{fill:currentColor}
tr.fav-row td{background:rgba(224,168,0,.10)}
.sr-wrap{display:flex;align-items:center}.sr-wrap .sr{flex:1 1 auto;min-width:0}.sr-wrap .star{margin:0 2px}
.favs details>summary{list-style:none;cursor:pointer;padding:12px 16px;font-weight:650;font-size:13px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);display:flex;justify-content:space-between}
.favs details>summary::-webkit-details-marker{display:none}
.favs details>summary::after{content:"Hide";text-transform:none;letter-spacing:0;color:var(--accent);font-weight:500}
.favs details:not([open])>summary::after{content:"Show"}
.favs-body{padding:0 8px 8px}
.fav{padding:4px 0 6px;border-top:1px solid var(--line)}.fav:first-child{border-top:0}
.fav-h{display:flex;align-items:center;gap:2px;padding:6px 10px 2px;font-size:15px}.fav-h .star{margin-left:-6px}
.fav-h .muted{margin-left:6px;font-size:13px}
.new{flex:none;font-size:10.5px;font-weight:700;color:#fff;background:#16a34a;border-radius:4px;padding:2px 5px;text-transform:uppercase;letter-spacing:.04em}
.favs-nav{display:none}
.favs-nav .sr-h{margin-top:2px}
.nav-list li.sess{padding:12px 10px 4px;font-size:11.5px;font-weight:650;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.nav-list li.sess:first-child{padding-top:2px}
.nav-list li.sess{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.nav-list .tally{font-weight:550;text-transform:none;letter-spacing:0;white-space:nowrap}
.nav-list a.posted,.nav-list a.pending{display:flex;align-items:center;gap:8px}
.nav-list .st{flex:none;width:8px;height:8px;border-radius:50%;background:#16a34a}
.nav-list a.pending{color:var(--muted)}
.nav-list a.pending .st{background:none;box-shadow:inset 0 0 0 1.5px currentColor}
.nav-list a.active .st{background:#fff}.nav-list a.active.pending .st{background:none}
.nav-list a.active.pending{color:#fff}
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.empty .when{font-weight:600;color:var(--accent);margin:0 0 8px}
.nav-empty{padding:0 14px 14px;color:var(--muted);font-size:14px;margin:0}
.mm{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;padding:10px 14px 14px;border-top:1px solid var(--line);font-size:12.5px;color:var(--muted)}
.mm-t{flex:1 1 100%}.mm b{color:var(--ink);font-weight:600}
.mm a{border:1px solid var(--line);border-radius:999px;padding:4px 10px;font-weight:600}
.mm a:hover{background:var(--accent-soft);text-decoration:none}
.mm-card{justify-content:center;border-top:0;margin-top:12px;padding:0}.mm-card .mm-t{text-align:center}
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);margin:0 0 18px;overflow:hidden}
.event-head{padding:14px 16px 10px;border-bottom:1px solid var(--line)}
.event-head h2{font-size:18px;margin:2px 0 0;line-height:1.3}
.ev-num{font-size:12px;font-weight:650;color:var(--accent);text-transform:uppercase;letter-spacing:.05em}
.round{font-size:13px;margin:12px 16px 4px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}
.meta{margin:8px 16px 0;font-size:12.5px;color:var(--muted)}
.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;padding:6px 0 4px}
table.results{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}
.results th{text-align:left;font-size:11.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:650;padding:8px 10px;border-bottom:1px solid var(--line);white-space:nowrap}
.results td{padding:9px 10px;border-bottom:1px solid var(--line);vertical-align:middle}
.results tbody tr:last-child td{border-bottom:0}
.results tbody tr:not(.detail):hover td{background:var(--accent-soft)}
.c-place{width:44px;text-align:center}
.c-seed,.c-prelims,.c-finals,.c-points,.c-age{text-align:right;white-space:nowrap}
.results th.c-seed,.results th.c-prelims,.results th.c-finals,.results th.c-points,.results th.c-age{text-align:right}
.c-finals .time{font-weight:650}
.who{font-weight:550}
.place{display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:26px;border-radius:999px;font-weight:650;font-size:13px}
.place.gold{background:var(--gold);color:#3b2f00}.place.silver{background:var(--silver);color:#0f172a}.place.bronze{background:var(--bronze);color:#fff}
.place.dq{color:var(--muted)}
tr.dq td{color:var(--muted)}tr.dq .who{font-weight:400}
.status{display:inline-block;font-size:11.5px;font-weight:650;color:var(--dq);border:1px solid currentColor;border-radius:4px;padding:0 5px}
.mark{color:var(--accent);font-weight:700;margin-left:1px}
.tag{font-size:10.5px;margin-left:5px;padding:1px 5px;border-radius:4px;background:var(--accent-soft);color:var(--accent);vertical-align:1px}
.muted{color:var(--muted)}
tr.detail td{padding:0 10px 8px 54px;border-bottom:1px solid var(--line)}
tr.detail summary{cursor:pointer;font-size:12.5px;color:var(--accent);padding:2px 0}
pre{font:12.5px/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;margin:6px 0;white-space:pre;overflow-x:auto}
tr.raw pre{color:var(--muted)}
tr.detail td{max-width:0}
pre.splits{white-space:pre-wrap;color:var(--muted)}
ol.roster{margin:6px 0 4px;padding-left:22px;display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:2px 18px;font-size:13.5px}
.empty{padding:28px 22px;text-align:center}.empty h2{margin:0 0 6px;font-size:19px}.empty p{margin:0;color:var(--muted)}
.scores .c-points{font-weight:650}
.note{max-width:1180px;margin:0 auto 28px;padding:0 16px;color:var(--muted);font-size:12.5px;display:flex;flex-wrap:wrap;justify-content:space-between;gap:6px 16px}
.credit{opacity:.7}.credit a{color:inherit;text-decoration:underline;text-decoration-color:var(--line);text-underline-offset:2px}.credit a:hover{color:var(--accent)}
@media (max-width:820px){
 .layout{grid-template-columns:1fr;gap:12px;margin-top:12px;padding:0 10px}
 nav.events{position:static;max-height:none}
 .opt{display:none}
 .results td,.results th{padding:8px 7px}
 tr.detail td{padding-left:12px}
 .top h1{font-size:15px}
}
/* Phones: events list lives in a bottom sheet opened by a floating button */
.fab-btn,.scrim,.fab-hint{display:none}
@media (max-width:820px){
 body{padding-bottom:76px}
 .fab-btn{display:inline-flex;align-items:center;gap:8px;position:fixed;right:16px;bottom:max(16px,env(safe-area-inset-bottom));z-index:10;border:0;border-radius:999px;padding:13px 18px;background:var(--accent);color:#fff;font:650 15px/1 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;box-shadow:0 6px 18px rgba(11,107,203,.35),0 2px 4px rgba(0,0,0,.15);cursor:pointer}
 .fab-btn svg{width:18px;height:18px}
 .fab-ev:not(:empty){padding-left:8px;border-left:1px solid rgba(255,255,255,.4)}
 nav.events{position:fixed;left:0;right:0;bottom:0;top:auto;z-index:20;max-height:78vh;overflow:auto;overscroll-behavior:contain;border-radius:16px 16px 0 0;border-bottom:0;padding-bottom:env(safe-area-inset-bottom);box-shadow:0 -8px 30px rgba(0,0,0,.25);transform:translateY(105%);visibility:hidden;transition:transform .22s ease,visibility 0s .22s}
 html.sheet-open nav.events{transform:none;visibility:visible;transition:transform .22s ease}
 nav.events summary{position:sticky;top:0;z-index:1;background:var(--card);display:flex;justify-content:space-between;align-items:center;padding:16px 16px 10px}
 nav.events summary::before{content:"";position:absolute;top:6px;left:50%;width:36px;height:4px;margin-left:-18px;border-radius:2px;background:var(--line)}
 nav.events summary::after{content:"Close";text-transform:none;letter-spacing:0;font-size:14px;color:var(--accent)}
 .nav-list a{padding:11px 12px;font-size:15px}
 nav.events summary{height:46px}
 .search{top:46px}
 html.searching nav.events{height:78vh}
 .favs-nav:not([hidden]){display:block;padding:0 6px 6px;border-bottom:1px solid var(--line);margin-bottom:8px}
 html.sheet-open .scrim{display:block;position:fixed;inset:0;z-index:15;background:rgba(8,12,20,.45)}
 html.sheet-open body{overflow:hidden}
 /* First visit: pulse + hint until the sheet has been opened once */
 html.fab-new .fab-btn::after{content:"";position:absolute;inset:0;border-radius:inherit;animation:fabpulse 1.8s ease-out infinite}
 .fab-hint{display:block;position:fixed;right:16px;bottom:calc(max(16px,env(safe-area-inset-bottom)) + 60px);z-index:10;background:var(--ink);color:var(--card);font-size:13.5px;font-weight:550;padding:8px 12px;border-radius:10px;box-shadow:0 4px 14px rgba(0,0,0,.2);opacity:0;transform:translateY(6px);transition:opacity .3s,transform .3s;pointer-events:none}
 .fab-hint::after{content:"";position:absolute;right:28px;bottom:-5px;width:10px;height:10px;background:inherit;transform:rotate(45deg)}
 html.fab-new .fab-hint.show{opacity:1;transform:none}
}
@keyframes fabpulse{0%{box-shadow:0 0 0 0 rgba(11,107,203,.55)}80%,100%{box-shadow:0 0 0 16px rgba(11,107,203,0)}}
@media (prefers-reduced-motion:reduce){html.fab-new .fab-btn::after{animation:none}}
/* Psych sheets (entries and seed times, before an event is swum): clearly not results */
.card.psych{border-style:dashed;border-color:var(--muted);box-shadow:none;background:var(--card)}
.card.psych .ev-num{color:var(--muted)}
.pill{display:inline-block;margin-left:8px;padding:1px 8px;border-radius:999px;font-size:11.5px;font-weight:650;letter-spacing:.02em;vertical-align:1px;background:#fef3c7;color:#7a4b00;border:1px solid #f5d77a}
@media (prefers-color-scheme:dark){.pill{background:rgba(245,158,11,.16);color:#fbbf24;border-color:rgba(245,158,11,.35)}}
.psych .c-place .place{background:none;border:1px dashed var(--muted);color:var(--muted);font-weight:500;min-width:26px}
.psych .c-seed .time{color:var(--muted);font-style:italic;font-weight:500}
.psych .round{color:var(--muted)}
/* My swimmers: filter and per-swimmer collapse */
.favs-tools{display:flex;gap:8px;align-items:center;padding:0 10px 8px}
.favs-tools[hidden]{display:none}
.favs-filter{flex:1 1 auto;min-width:0;font:inherit;font-size:16px;color:var(--ink);background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:8px 12px;outline:none}
.favs-filter:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.favs-all{flex:none;font:inherit;font-size:13px;color:var(--accent);background:none;border:0;padding:6px 4px;cursor:pointer;white-space:nowrap}
.fav[hidden]{display:none}
.fav-toggle{flex:1 1 auto;min-width:0;display:flex;align-items:center;gap:6px;background:none;border:0;padding:4px 2px;font:inherit;color:inherit;text-align:left;cursor:pointer;border-radius:8px}
.fav-toggle:hover{background:var(--accent-soft)}
.fav-toggle::after{content:"";flex:none;width:7px;height:7px;margin:0 6px 3px auto;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:rotate(45deg);transition:transform .15s}
.fav.collapsed .fav-toggle::after{transform:rotate(-45deg);margin-bottom:0}
.fav-toggle .muted{margin-left:0}
.fav-count{flex:none;font-size:12px;color:var(--muted)}
.fav.collapsed .fav-swims{display:none}
.fav.collapsed{padding-bottom:2px}
