
/* Layout: video-review app shell. Top bar + tab nav; Analyze view = stage left, side pane right (landscape-first);
   other views are scrollable panels. Single deliberate dark look: charcoal film-room UI with one orange signal colour. */
:root{
  --bg:#111418; --surface:#1A1F25; --surface-2:#232A32; --surface-3:#2B333C; --line:#2E3740; --line-2:#3C4752;
  --fg:#F3F5F7; --muted:#9BA7B3; --dim:#6E7A86;
  --accent:#FF6300; --accent-hi:#FF7F2A; --on-accent:#140800;
  --ball:#DDEB45;
  --teamA:#3EA6FF; --teamB:#B98CFF;
  --good:#2FCB7E; --warn:#FFB020; --bad:#FF4D5E; --info:#7F96B2;
  --f-display:"Alliance No.2","Alliance No.1","Inter",system-ui,-apple-system,"Segoe UI",sans-serif;
  --f-body:"Alliance No.1","Inter",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  --f-mono:"Apercu Mono Pro","JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
  --r:8px; --hit:40px;
  color-scheme:dark;
}
@media (pointer:coarse){:root{--hit:44px}}
*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{background:var(--bg);color:var(--fg)}
body{font-family:var(--f-body);font-size:16px;line-height:1.5;-webkit-text-size-adjust:100%;text-size-adjust:100%;font-feature-settings:"cv11","ss01";padding-inline:max(16px,env(safe-area-inset-left,0px));padding-block:0 28px;-webkit-tap-highlight-color:transparent}
button,select,input{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.num{font-variant-numeric:tabular-nums}

/* ---------- top bar ---------- */
.top{display:flex;align-items:center;gap:10px 16px;padding-block:12px;flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:10px;margin-right:auto;min-width:0}
.logo{width:38px;height:38px;flex:none;display:block;filter:drop-shadow(0 4px 10px rgba(255,99,0,.28))}.logo svg{width:100%;height:100%;display:block}
.brand h1{margin:0;line-height:0;min-width:0;flex:none}
.wordmark{height:44px;width:auto;display:block}
.brand h1 span{color:var(--muted);font-weight:600}
.src{font-family:var(--f-mono);font-size:12.5px;color:var(--muted);background:var(--surface);border-radius:99px;padding:4px 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:34ch;min-width:0}
.src b{color:var(--accent);font-weight:500}
.actions{display:flex;gap:8px;flex-wrap:wrap}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:var(--hit);border:1px solid var(--line-2);background:var(--surface-2);border-radius:6px;padding:0 14px;cursor:pointer;font-weight:600;font-size:15px;white-space:nowrap;transition:background .15s,border-color .15s}
.btn:hover:not(:disabled){background:var(--surface-3);border-color:var(--dim)}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}
.btn.primary:hover:not(:disabled){background:var(--accent-hi);border-color:var(--accent-hi)}
.btn.on{border-color:var(--accent);color:var(--accent)}
.btn svg{width:17px;height:17px;flex:none}
@media (max-width:760px){.actions .btn .lbl{display:none}.actions .btn{padding:0 11px}}

/* ---------- nav ---------- */
.nav{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:14px;overflow-x:auto;scrollbar-width:none;position:sticky;top:env(safe-area-inset-top,0px);background:var(--bg);z-index:5}
.nav::-webkit-scrollbar{display:none}
.nav button{all:unset;cursor:pointer;display:flex;align-items:center;gap:7px;padding:0 14px;min-height:46px;font-weight:600;font-size:15.5px;color:var(--muted);border-bottom:3px solid transparent;white-space:nowrap}
.nav button svg{width:18px;height:18px}
.nav button[aria-selected="true"]{color:var(--fg);border-bottom-color:var(--accent)}
.nav button:focus-visible{outline:2px solid var(--accent)}
.nav .count{font-family:var(--f-mono);font-size:12px;background:var(--surface-2);border-radius:99px;padding:1px 7px;color:var(--muted)}
@media (orientation:portrait) and (max-width:700px){
  body{padding-bottom:calc(80px + env(safe-area-inset-bottom,0px))}
  .nav{position:fixed;left:0;right:0;bottom:0;top:auto;margin:0;border:0;border-top:1px solid var(--line);justify-content:space-around;padding-bottom:env(safe-area-inset-bottom,0px);background:var(--surface)}
  .nav button{flex-direction:column;gap:2px;font-size:12px;padding:6px 2px;min-height:58px;border-bottom:0;border-top:3px solid transparent;flex:1;justify-content:center}
  .nav button[aria-selected="true"]{border-top-color:var(--accent)}
  .nav .count,.nav .long{display:none}
}
.nav .short{display:none}
@media (orientation:portrait) and (max-width:700px){.nav .short{display:inline}}

/* ---------- shared ---------- */
.panel{background:var(--surface);border-radius:var(--r)}
.eyebrow{font-family:var(--f-display);font-weight:700;font-size:13.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.view-h{display:flex;align-items:baseline;justify-content:space-between;gap:8px 16px;flex-wrap:wrap;margin:4px 0 14px}
.view-h h2{font-family:var(--f-display);font-weight:600;font-size:26px;text-transform:uppercase;letter-spacing:.01em;margin:0;line-height:1.1}
.view-h p{margin:0;color:var(--muted);font-size:14.5px;max-width:65ch}
.chips{display:flex;gap:6px;flex-wrap:wrap}
.chip{min-height:34px;border:1px solid var(--line-2);background:transparent;border-radius:99px;padding:0 13px;font-size:14px;cursor:pointer;color:var(--muted);font-weight:600}
.chip[aria-pressed="true"]{color:var(--on-accent);border-color:var(--accent);background:var(--accent)}
.note{font-size:14px;color:var(--muted)}
.who{font-family:var(--f-mono);font-size:12px;border-radius:4px;padding:0 6px;color:#0B0F14;font-weight:500;white-space:nowrap}
.sev{font-family:var(--f-display);font-weight:700;font-size:12.5px;letter-spacing:.06em;text-transform:uppercase;border-radius:4px;padding:1px 7px;white-space:nowrap}
.sev.High{background:rgba(255,77,94,.16);color:#FF7B87}
.sev.Medium{background:rgba(255,176,32,.16);color:var(--warn)}
.sev.Low{background:rgba(127,150,178,.18);color:#AFC0D3}
.sev.Strength{background:rgba(47,203,126,.16);color:var(--good)}
.empty{padding:22px 14px;color:var(--muted);font-size:14.5px;text-align:center}

/* ---------- analyze view ---------- */
.an{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:14px;align-items:start}
@media (max-width:1180px){.an{grid-template-columns:minmax(0,1fr) 300px}}
@media (orientation:portrait) and (max-width:900px){.an{grid-template-columns:minmax(0,1fr)}}
.stage-col{min-width:0;display:flex;flex-direction:column;align-items:center}
.stage-inner{width:100%;max-width:100%}
.stage-wrap{position:relative;border-radius:var(--r);overflow:hidden;background:#06080B}
#stage{display:block;width:100%;height:auto;touch-action:pan-y}
.stage-wrap.cal #stage{touch-action:none}
.hud{position:absolute;left:10px;top:10px;right:10px;display:flex;gap:6px;align-items:center;pointer-events:none;flex-wrap:wrap}
.hud .tag{font-family:var(--f-mono);font-size:12px;background:rgba(17,20,24,.82);color:var(--fg);padding:3px 8px;border-radius:4px;letter-spacing:.02em}
.hud .tag.acc{background:var(--accent);color:var(--on-accent);font-weight:500}
.hud .rally{margin-left:auto;font-family:var(--f-display);font-weight:600;font-size:16px;letter-spacing:.04em;background:rgba(17,20,24,.86);padding:3px 10px;border-radius:4px;text-transform:uppercase}
.hud .rally b{color:var(--accent)}
.banner{position:static;margin-top:8px;width:100%;background:var(--surface-2);border:1px solid var(--line-2);border-radius:8px;padding:10px 12px;font-size:14.5px;display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.banner p{margin:0;flex:1 1 240px;min-width:0}
.banner b{color:var(--accent)}
.progress{position:absolute;left:10px;right:10px;bottom:10px;background:rgba(17,20,24,.95);border-radius:6px;padding:10px 12px}
.progress .row{display:flex;justify-content:space-between;align-items:center;gap:10px;font-size:14.5px;margin-bottom:8px}
.pbar{height:6px;background:var(--line);border-radius:3px;overflow:hidden}
.pbar i{display:block;height:100%;width:0;background:var(--accent);transition:width .2s}
.transport{display:flex;align-items:center;gap:8px;padding-top:8px;width:100%}
.ibtn{width:var(--hit);height:var(--hit);border-radius:6px;border:0;background:var(--surface-2);display:grid;place-items:center;cursor:pointer;flex:none}
.ibtn:hover{background:var(--surface-3)}
.ibtn svg{width:17px;height:17px}
.ibtn.play{background:var(--accent);color:var(--on-accent)}
.time{font-family:var(--f-mono);font-size:13.5px;color:var(--muted);white-space:nowrap}
.time b{color:var(--fg);font-weight:500}
.tl-wrap{flex:1 1 auto;min-width:0}
#timeline{display:block;width:100%;height:56px;cursor:pointer;touch-action:none}
select.sel{background:var(--surface-2);border:0;border-radius:6px;min-height:var(--hit);padding:0 8px;font-family:var(--f-mono);font-size:13.5px}
.below{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap;width:100%;padding-top:8px}
.legend{display:flex;gap:12px;flex-wrap:wrap;font-size:13px;color:var(--muted)}
.legend i{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:5px;vertical-align:-1px}
@media (max-width:700px){.time .dur{display:none}}

.side{display:flex;flex-direction:column;min-width:0;min-height:0;background:var(--surface);border-radius:var(--r);overflow:hidden}
.side-tabs{display:flex;border-bottom:1px solid var(--line);flex:none}
.side-tabs button{all:unset;cursor:pointer;flex:1;text-align:center;min-height:44px;font-weight:600;font-size:14.5px;color:var(--muted);border-bottom:2px solid transparent}
.side-tabs button[aria-selected="true"]{color:var(--fg);border-bottom-color:var(--accent)}
.side-tabs button:focus-visible{outline:2px solid var(--accent)}
.side-body{overflow:auto;min-height:0;flex:1}
@media (orientation:portrait) and (max-width:900px){.side-body{max-height:520px}}
.filters{display:flex;gap:5px;flex-wrap:wrap;padding:10px 12px 6px}
.filters button{border:0;background:var(--surface-2);border-radius:99px;padding:0 10px;min-height:30px;font-size:13.5px;color:var(--muted);cursor:pointer;font-weight:600}
.filters button[aria-pressed="true"]{background:var(--fg);color:#0B0F14}
.filters .n{font-family:var(--f-mono);font-size:12px;margin-left:4px;opacity:.75}
#feed{list-style:none;margin:0;padding:4px 6px 8px}
#feed li button{all:unset;box-sizing:border-box;display:grid;grid-template-columns:44px minmax(0,1fr);gap:3px 10px;width:100%;padding:10px 8px;border-radius:6px;cursor:pointer;border-left:3px solid var(--tone,var(--line-2))}
#feed li button:hover{background:var(--surface-2)}
#feed li button:focus-visible{outline:2px solid var(--accent)}
#feed li.active button{background:var(--surface-3)}
#feed .ts{font-family:var(--f-mono);font-size:13px;color:var(--muted)}
#feed .tt{font-weight:700;font-size:15px;line-height:1.3}
#feed .dd{grid-column:2;font-size:14px;color:var(--muted);line-height:1.45}
#feed .meta{grid-column:2;display:flex;gap:5px;flex-wrap:wrap;margin-top:3px;align-items:center}
.cat{font-family:var(--f-mono);font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.court-pane{display:flex;gap:12px;padding:12px}
#mini{display:block;width:150px;height:300px;flex:none}
.court-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:8px}
.seg{display:flex;background:var(--surface-2);border-radius:6px;padding:2px}
.seg button{flex:1;border:0;background:transparent;border-radius:5px;min-height:32px;font-size:13.5px;cursor:pointer;color:var(--muted);font-weight:600}
.seg button[aria-pressed="true"]{background:var(--surface-3);color:var(--fg)}
.fcard{background:var(--surface-2);border-radius:6px;padding:7px 10px}
.fcard .k{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.07em;font-weight:600}
.fcard .v{font-family:var(--f-display);font-size:18px;font-weight:700;line-height:1.2}
.zlegend{font-size:13px;color:var(--muted);display:grid;gap:3px}
.zlegend i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:6px;vertical-align:-1px}
.live-stats{padding:12px;display:grid;gap:10px}
.live-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.lstat{background:var(--surface-2);border-radius:6px;padding:8px 10px}
.lstat .k{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;font-weight:600}
.lstat .v{font-family:var(--f-display);font-weight:600;font-size:24px;line-height:1.1}
.lplayers{display:grid;gap:6px}
.lp{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;gap:8px;align-items:center;background:var(--surface-2);border-radius:6px;padding:7px 10px;font-size:14px}
.lp .z{font-family:var(--f-mono);font-size:12px}

/* landscape phones: compact everything to fit one screen */
@media (orientation:landscape) and (max-height:540px){
  body{font-size:15px}
  .top{padding-block:6px}
  .wordmark{height:28px}
  .src{display:none}
  .nav button{min-height:38px;font-size:14px;padding:0 11px}
  .nav{margin-bottom:8px}
  .an{grid-template-columns:minmax(0,1fr) 270px;gap:10px}
  #timeline{height:46px}
  .below{display:none}
  #mini{width:110px;height:220px}
  .view-h h2{font-size:21px}
  .hud .rally{font-size:14px}
  .actions .btn .lbl{display:none}
  .actions .btn{min-height:36px;padding:0 10px}
  .top{gap:8px}
  .time .dur,#rate{display:none}
  .ibtn{width:38px;height:38px}
  .transport{gap:6px;padding-top:6px}
}
.stage-wrap.small .hud .tag{display:none}
.stage-wrap.small .hud .rally{font-size:13.5px;padding:2px 8px}

/* ---------- players view ---------- */
.pgrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
@media (max-width:1180px){.pgrid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:560px){.pgrid{grid-template-columns:minmax(0,1fr)}}
.pcard{padding:14px;display:flex;flex-direction:column;gap:12px;border-top:3px solid var(--tc)}
.phead{display:flex;align-items:center;gap:8px}
.badge{font-family:var(--f-display);font-weight:600;font-size:14px;background:var(--tc);color:#0B0F14;border-radius:4px;padding:2px 6px;flex:none}
.pname{background:transparent;border:1px solid transparent;border-radius:5px;padding:3px 6px;font-weight:700;font-size:17px;width:100%;min-width:0}
.pname:hover,.pname:focus{border-color:var(--line-2)}
.kpis{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px 8px}
.kpi .k{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kpi .v{font-family:var(--f-display);font-weight:600;font-size:26px;line-height:1.05}
.kpi .v small{font-family:var(--f-body);font-size:13px;color:var(--muted);font-weight:600;margin-left:2px}
.zbar{display:flex;height:9px;border-radius:2px;overflow:hidden;background:var(--line)}
.zbar i{display:block;height:100%}
.zrow{display:flex;justify-content:space-between;font-size:12.5px;color:var(--muted);font-family:var(--f-mono);margin-top:5px;gap:6px}
.spark{display:block;width:100%;height:44px}
.topfix{display:flex;gap:8px;align-items:center;font-size:14px;color:var(--muted)}
.tbl-wrap{overflow-x:auto;margin-top:14px;border-radius:var(--r);background:var(--surface)}
table.mt{border-collapse:collapse;width:100%;min-width:600px;font-size:14.5px}
.mt th,.mt td{padding:10px 12px;text-align:right;border-bottom:1px solid var(--line);white-space:nowrap}
.mt th:first-child,.mt td:first-child{text-align:left;position:sticky;left:0;background:var(--surface)}
.mt thead th{font-family:var(--f-display);font-weight:700;font-size:14px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.mt td{font-variant-numeric:tabular-nums;font-family:var(--f-mono);font-size:14px}
.mt td:first-child{font-family:var(--f-body);font-size:14.5px}
.mt td small{display:block;font-family:var(--f-body);color:var(--dim);font-size:12.5px}
.mt td.best{color:var(--accent);font-weight:500}
.mt tr.grp td{background:var(--surface-2);font-family:var(--f-display);font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-size:13px;text-align:left;padding:7px 12px}

/* ---------- team & rallies view ---------- */
.kstrip{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin-bottom:14px}
@media (max-width:820px){.kstrip{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:460px){.kstrip{grid-template-columns:repeat(2,minmax(0,1fr))}}
.kbox{background:var(--surface);border-radius:var(--r);padding:12px 14px}
.kbox .k{font-size:12.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;font-weight:600}
.kbox .v{font-family:var(--f-display);font-weight:600;font-size:34px;line-height:1.05}
.kbox .v small{font-family:var(--f-body);font-size:14px;color:var(--muted);font-weight:600;margin-left:3px}
.kbox.acc .v{color:var(--accent)}
.two{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:14px;align-items:start}
@media (max-width:980px) and (orientation:portrait){.two{grid-template-columns:minmax(0,1fr)}}
@media (max-width:700px){.two{grid-template-columns:minmax(0,1fr)}}
.cmp{padding:14px}
.cmp-head{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:10px;margin-bottom:8px}
.cmp-head .ta{color:var(--teamA);font-weight:700;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cmp-head .tb{color:var(--teamB);font-weight:700;text-align:right;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.crow{display:grid;grid-template-columns:58px minmax(0,1fr) minmax(84px,auto) minmax(0,1fr) 58px;align-items:center;gap:8px;padding:7px 0;border-top:1px solid var(--line)}
.crow .lab{text-align:center;font-size:14px;color:var(--muted);font-weight:600;line-height:1.2}
.crow .va,.crow .vb{font-family:var(--f-display);font-weight:600;font-size:19px;white-space:nowrap}
.crow .vb{text-align:right}
.crow .bar{height:8px;background:var(--surface-2);border-radius:2px;position:relative;overflow:hidden}
.crow .bar i{position:absolute;top:0;bottom:0;border-radius:2px}
.crow .bar.l i{right:0;background:var(--teamA)}
.crow .bar.r i{left:0;background:var(--teamB)}
.crow.win-a .va{color:var(--accent)} .crow.win-b .vb{color:var(--accent)}
.rally-list{padding:6px 8px 10px;list-style:none;margin:0}
.rally-list li button{all:unset;box-sizing:border-box;cursor:pointer;display:grid;grid-template-columns:34px minmax(0,1fr) auto;gap:4px 10px;align-items:center;width:100%;padding:9px 8px;border-radius:6px}
.rally-list li button:hover{background:var(--surface-2)}
.rally-list li button:focus-visible{outline:2px solid var(--accent)}
.rnum{font-family:var(--f-display);font-weight:600;font-size:20px;color:var(--muted)}
.rbar{height:10px;background:var(--surface-2);border-radius:2px;overflow:hidden}
.rbar i{display:block;height:100%;background:var(--accent);border-radius:2px}
.rmeta{font-size:13.5px;color:var(--muted);grid-column:2/4}
.rdur{font-family:var(--f-mono);font-size:14px}

/* ---------- plan view ---------- */
.plan-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;align-items:start}
@media (max-width:900px) and (orientation:portrait){.plan-grid{grid-template-columns:minmax(0,1fr)}}
@media (max-width:700px){.plan-grid{grid-template-columns:minmax(0,1fr)}}
.pl{padding:14px 16px;border-top:3px solid var(--tc,var(--line-2))}
.pl-h{display:flex;align-items:center;gap:8px;margin-bottom:10px;flex-wrap:wrap}
.pl-h h3{margin:0;font-size:18px;font-weight:700}
.pl-h .score{margin-left:auto;font-family:var(--f-mono);font-size:13px;color:var(--muted)}
.items{display:grid;grid-template-columns:minmax(0,1fr);gap:8px;list-style:none;margin:0;padding:0}
.item{background:var(--surface-2);border-radius:6px;padding:10px 12px;display:grid;grid-template-columns:minmax(0,1fr);gap:4px;min-width:0}
.item .ih{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.item .ih b{font-size:15.5px}
.item .area{font-family:var(--f-mono);font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-left:auto}
.item .ev{font-size:14px;color:var(--muted)}
.item .ev em{font-style:normal;color:var(--fg);font-family:var(--f-mono);font-size:13.5px}
.item .tgt{font-size:13.5px;color:var(--muted)}
.item .tgt b{color:var(--fg);font-weight:600}
.item .drill{font-size:14px;line-height:1.45;border-left:2px solid var(--accent);padding-left:9px;margin-top:2px}
.item .drill span{font-weight:700;color:var(--accent)}

/* ---------- coach view ---------- */
.coach{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.3fr);gap:14px;align-items:start}
@media (max-width:900px) and (orientation:portrait){.coach{grid-template-columns:minmax(0,1fr)}}
@media (max-width:700px){.coach{grid-template-columns:minmax(0,1fr)}}
.coach .panel{padding:16px}
.coach h3{font-family:var(--f-display);font-weight:600;text-transform:uppercase;letter-spacing:.04em;font-size:18px;margin:0 0 10px}
.takeaways{margin:0;padding:0;list-style:none;display:grid;gap:10px}
.takeaways li{display:grid;grid-template-columns:8px minmax(0,1fr);gap:10px;font-size:15px;line-height:1.5}
.takeaways li::before{content:"";width:8px;height:8px;border-radius:2px;background:var(--tone,var(--muted));margin-top:7px}
#report{font-size:15px;line-height:1.6;max-width:72ch;min-height:120px}
#report h4{font-family:var(--f-display);font-weight:600;letter-spacing:.06em;font-size:15px;color:var(--accent);margin:14px 0 4px;text-transform:uppercase}
#report h4:first-child{margin-top:0}
#report p{margin:0 0 6px}
#report ul{margin:0 0 6px;padding-left:18px}
.coach-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:12px}
.foot{margin-top:22px;color:var(--dim);font-size:13.5px;line-height:1.6;max-width:110ch}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

/* ---------- typography pass: Palantir-style neo-grotesque, tight display tracking, sentence-case headings ---------- */
.view-h h2,.coach h3{text-transform:none;letter-spacing:-.025em}
.hud .rally{text-transform:none;letter-spacing:-.01em}
.kbox .v,.kpi .v,.lstat .v,.crow .va,.crow .vb,.rnum,.fcard .v{letter-spacing:-.03em}
.eyebrow,.sev,.cat,.item .area,.mt thead th,.mt tr.grp td,#report h4{letter-spacing:.06em}
.mt td,.time,.src,.who,.zrow,#feed .ts,.rdur{font-feature-settings:"zero"}
/* mobile readability: larger body, roomier lines, no sub-12px text */
@media (max-width:900px),(pointer:coarse){
  body{font-size:16.5px}
  .view-h p,.note,.takeaways li,#report,.item .ev,.item .drill,.item .tgt,#feed .dd,.rmeta{font-size:15.5px;line-height:1.55}
  #feed .tt,.item .ih b{font-size:16.5px}
  .fcard .k,.lstat .k,.kpi .k,.kbox .k,.eyebrow,.cat,.item .area,.legend,.zlegend,.zrow{font-size:12.5px}
  .btn,.chip,.filters button,.seg button,.side-tabs button{font-size:15px}
  .mt{font-size:15px}.mt td,.mt td:first-child{font-size:14.5px}.mt thead th{font-size:14px}
}
@media (orientation:portrait) and (max-width:700px){
  .nav button{font-size:12px}
  .brand h1{font-size:clamp(15px,4.8vw,19px)}
  .top{padding-block:10px}
  .src{max-width:100%}
}
@media (orientation:landscape) and (max-height:540px){
  body{font-size:15px}
  .view-h p,.note,.takeaways li,#feed .dd{font-size:14.5px}
  .brand h1{font-size:17px}
}

/* ================= v4: portrait-first phone & tablet layout ================= */
html,body{overflow-x:clip}
.toast{position:fixed;left:50%;bottom:calc(84px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);background:var(--surface-3);border:1px solid var(--line-2);padding:11px 16px;border-radius:10px;font-size:15px;line-height:1.4;z-index:60;width:max-content;max-width:min(92vw,460px);box-shadow:0 8px 24px rgba(0,0,0,.45)}
@media (orientation:landscape){.toast{bottom:20px}}
.stage-inner.bleed{background:var(--bg);max-width:none}
.stage-inner.bleed .stage-wrap{border-radius:0}

@media (orientation:portrait) and (max-width:900px){
  .side{background:transparent;border-radius:0;overflow:visible}
  .side-body{max-height:none;overflow:visible}
  .side-tabs{border:0;gap:8px;padding:14px 0 4px}
  .side-tabs button{background:var(--surface-2);border-radius:99px;min-height:44px;border-bottom:0;font-size:15.5px}
  .side-tabs button[aria-selected="true"]{background:var(--fg);color:#0B0F14}
  .side-body>div{background:var(--surface);border-radius:var(--r);margin-top:6px}
  #feed li button{padding:13px 10px}
  .an{gap:6px}
}

@media (orientation:portrait) and (max-width:700px){
  :root{--gut:16px}
  .top{display:grid;grid-template-columns:minmax(0,1fr);gap:12px;padding-block:calc(12px + env(safe-area-inset-top,0px)) 8px}
  .brand{display:grid;grid-template-columns:minmax(0,1fr);row-gap:8px;align-items:center;width:100%;margin:0}
  .wordmark{height:42px;max-width:100%}
  .logo{width:40px;height:40px;border-radius:10px;grid-row:1/3}
  .brand h1{font-size:clamp(19px,5.6vw,23px);line-height:1.12;white-space:normal}
  .brand h1 span{display:block;font-size:.72em;letter-spacing:-.01em;font-weight:500}
  .src{grid-column:1;justify-self:start;max-width:100%;font-size:12.5px}
  .actions{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:8px;width:100%}
  .actions .btn{flex-direction:column;gap:5px;min-height:60px;padding:8px 2px;font-size:13px;border-radius:10px}
  .actions .btn .lbl{display:block!important;text-transform:capitalize;line-height:1}
  .actions .btn .pre{display:none}
  .actions .btn svg{width:22px;height:22px}
  .view-h{margin-top:6px}
  .view-h h2{font-size:25px}
  /* video stage: edge to edge, controls under it */
  .transport{flex-wrap:wrap;gap:8px;padding:10px var(--gut) 6px}
  .tl-wrap{order:-1;flex:1 1 100%}
  #timeline{height:50px}
  .time{margin-left:auto;font-size:14.5px}
  .ibtn{width:48px;height:48px}
  .ibtn svg{width:19px;height:19px}
  select.sel#rate{min-height:48px;padding:0 10px}
  .below{padding:2px var(--gut) 10px;flex-direction:column;align-items:stretch;gap:10px}
  #layers{flex-wrap:nowrap;overflow-x:auto;gap:8px;scrollbar-width:none;padding-bottom:2px}
  #layers::-webkit-scrollbar{display:none}
  #layers .chip{flex:none;min-height:42px;padding:0 17px;font-size:15px}
  .legend{flex-wrap:nowrap;overflow-x:auto;white-space:nowrap;gap:14px;scrollbar-width:none}
  .banner{margin:8px var(--gut) 4px;width:auto}
  .banner .btn{min-height:46px;flex:1 1 100%}
  .hud{left:10px;right:10px;top:8px}
  .hud .tag{display:none}
  .hud .tag.acc{display:inline-block}
  .hud .rally{font-size:14px}
  .stage-wrap.small .hud .rally{font-size:13.5px}
  .side-tabs{padding-top:12px}
  .filters{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;padding-bottom:8px}
  .filters::-webkit-scrollbar{display:none}
  .filters button{flex:none;min-height:40px;padding:0 15px;font-size:14.5px}
  .court-pane{flex-direction:column;align-items:center}
  #mini{width:min(240px,64vw);height:calc(min(240px,64vw)*2)}
  .court-info{width:100%}
  /* data views */
  .pgrid{gap:12px}
  .mt td:first-child,.mt th:first-child{position:sticky;left:0;background:var(--surface);z-index:1;box-shadow:6px 0 8px -6px rgba(0,0,0,.6)}
  .mt tr.grp td:first-child{background:var(--surface-2)}
  .kstrip{gap:10px}
  .kbox .v{font-size:30px}
  .rally-list li{padding:14px 12px}
  .plan-grid{gap:12px}
  .item{padding:14px}
  .savebar{padding:12px}
  .savebar .btn{flex:1 1 100%;min-height:48px}
  .mrow .btn{min-height:44px}
}
/* keep the video in view while scrolling remarks (tall phones only) */
@media (orientation:portrait) and (max-width:700px) and (min-height:720px){
  .stage-col{position:sticky;top:0;z-index:7}
  .stage-inner.bleed{box-shadow:0 10px 18px -10px rgba(0,0,0,.75)}
}

/* tablets, portrait */
@media (orientation:portrait) and (min-width:701px) and (max-width:1100px){
  .top{padding-block:14px}
  .transport{padding-top:12px}
  .ibtn{width:48px;height:48px}
  #timeline{height:60px}
  #layers .chip{min-height:42px;font-size:15px;padding:0 16px}
  .side-body>div{margin-top:8px}
  .pgrid{grid-template-columns:repeat(2,minmax(0,1fr))}
}

/* phones & tablets, landscape */
@media (orientation:landscape) and (max-height:540px){
  body.calmode .top,body.calmode .nav,body.calmode .below,body.calmode .transport,body.calmode .side{display:none}
  body.calmode .stage-col{align-items:flex-start}
  .banner{margin-top:6px;padding:6px 10px;font-size:13.5px;gap:8px}
  .banner .more{display:none}
  .banner .btn{min-height:36px}
  .side-body{overflow:auto}
}

body.calmode .side{display:none}
body.calmode .below,body.calmode .transport{display:none}
/* ---------- v6: one spacing / radius / type scale for every view ---------- */
:root{--pad:16px;--gap:12px;--fs-label:12.5px;--fs-small:14px;--fs-body:15.5px}
.btn,.seg,.sel{border-radius:var(--r)}
.panel,.item,.kbox,.savebar,.tbl-wrap{border-radius:var(--r)}
.panel,.item,.savebar{padding:var(--pad)}
.pgrid,.plan-grid,.kstrip,.two,.coach{gap:var(--gap)}
.view-h{margin:4px 0 var(--gap)}
.view-h h2{font-size:clamp(22px,5.6vw,26px);line-height:1.15;letter-spacing:-.02em}
.view-h p{font-size:var(--fs-body);line-height:1.5;color:var(--muted);max-width:68ch}
.panel h3{font-size:18px;line-height:1.3;letter-spacing:-.015em}
.note,.foot{font-size:var(--fs-small);line-height:1.5}
.rally-list li{padding:0}
.rally-list li button{padding:12px 10px}
.rmeta{font-size:var(--fs-small);line-height:1.4}
.rdur,.mt td,.mt .num{font-family:var(--f-mono);font-size:14px}

@media (orientation:portrait) and (max-width:700px){body.calmode{padding-bottom:90px}}

/* ---------- demo clip menu ---------- */
.demomenu{position:fixed;z-index:60;min-width:260px;max-width:calc(100vw - 24px);background:var(--surface-2,var(--surface));border:1px solid var(--line-2);border-radius:var(--r);box-shadow:0 18px 50px rgba(0,0,0,.55);padding:6px;display:grid;gap:4px}
.demomenu[hidden]{display:none}
.demomenu button{display:grid;gap:2px;text-align:left;border:0;background:transparent;color:var(--fg);padding:11px 12px;border-radius:8px;min-height:52px;cursor:pointer;font:inherit}
.demomenu button:hover,.demomenu button:focus-visible{background:var(--surface-3)}
.demomenu button[aria-current="true"]{background:var(--surface-3);box-shadow:inset 3px 0 0 var(--accent)}
.demomenu b{font-size:15.5px;font-weight:600}.demomenu span{font-size:13.5px;color:var(--muted)}

/* ---------- calibration card ---------- */
.calpanel{display:flex;flex-direction:column;min-width:0;min-height:0;background:var(--surface);border:1px solid var(--line-2);border-radius:12px;overflow:hidden;box-shadow:0 12px 32px -18px rgba(0,0,0,.7)}
.cal-h{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 12px 12px 16px;border-bottom:1px solid var(--line);background:var(--surface-2);flex:none}
.cal-t{display:grid;gap:1px;min-width:0}
.cal-t b{font-family:var(--f-display);font-size:18px;line-height:1.2;letter-spacing:-.02em;white-space:nowrap}
.cal-t span{font-size:13px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cal-h .btn{min-height:42px;padding:0 20px}
.cal-body{display:grid;gap:16px;padding:16px;overflow-y:auto;overscroll-behavior:contain;min-height:0;flex:1 1 auto;align-content:start}
.cal-mode{display:grid;grid-template-columns:1fr 1fr;gap:4px;padding:4px;background:var(--bg);border:1px solid var(--line);border-radius:10px}
.cal-mode button{min-height:44px;border:0;border-radius:7px;background:transparent;color:var(--muted);font-weight:600;font-size:15px;line-height:1.2;padding:0 8px;cursor:pointer;white-space:nowrap}
.cal-mode button[aria-pressed="true"]{background:var(--surface-3);color:var(--fg);box-shadow:inset 0 0 0 1px var(--line-2)}
.cal-help{margin:0;color:var(--muted);font-size:14.5px;line-height:1.55}
.cal-help b{color:var(--fg);font-weight:600}
.cal-tip{margin:0;padding:10px 12px;border-radius:8px;background:rgba(255,99,0,.08);border:1px solid rgba(255,99,0,.28);font-size:14px;line-height:1.5;color:var(--fg)}
.cal-tip b:first-child{display:block;color:var(--accent);font-size:12px;letter-spacing:.08em;text-transform:uppercase;margin-bottom:2px}
.cal-part{display:grid;gap:16px}
.fld{display:grid;gap:8px;margin:0}
.fld>span{font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--dim)}
.fld select{width:100%;min-height:46px;padding:0 12px;font-size:15px;text-overflow:ellipsis}
.lmgrid{margin:0;padding:0;list-style:none;display:grid;grid-template-columns:1fr 1fr;gap:8px}
.lmgrid li{display:flex;align-items:center;gap:10px;min-height:44px;padding:6px 10px;border-radius:8px;background:var(--surface-2);border:1px solid var(--line);font-size:14.5px;font-weight:500;min-width:0}
.lmgrid i{flex:none;display:grid;place-items:center;width:24px;height:24px;border-radius:50%;background:var(--fg);color:var(--bg);font:600 12px/1 var(--f-mono);font-style:normal}
.lmgrid span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cal-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px}.cal-actions .btn{min-height:46px;font-size:15px}
.cal-warn{margin:0;padding:10px 12px;border-radius:8px;background:rgba(255,176,32,.1);border:1px solid rgba(255,176,32,.3);color:var(--warn);font-size:14px;line-height:1.45}
.fine{border-top:1px solid var(--line);padding-top:2px}
.fine summary{cursor:pointer;min-height:46px;display:flex;align-items:center;justify-content:space-between;font-weight:600;font-size:15px;color:var(--fg);list-style:none}
.fine summary::-webkit-details-marker{display:none}
.fine summary::after{content:"";width:8px;height:8px;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:rotate(45deg);transition:transform .15s;margin-right:4px}
.fine[open] summary::after{transform:rotate(-135deg)}
.sliders{display:grid;gap:10px;padding:4px 0 6px}
.sl{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:0 10px;font-size:14px;align-items:baseline}
.sl span{color:var(--muted)}.sl output{font-family:var(--f-mono);font-size:13px;color:var(--fg)}
.sl input{grid-column:1/-1;width:100%;accent-color:var(--accent);height:34px;margin:0}
.cal-cover{flex:none;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:6px 14px;padding:12px 16px;border-top:1px solid var(--line);background:var(--surface-2);font-size:13.5px;color:var(--muted)}
.cal-cover .bar{height:6px;border-radius:3px;background:var(--line);overflow:hidden}.cal-cover .bar i{display:block;height:100%;border-radius:3px;background:linear-gradient(90deg,var(--teamA),var(--good))}
.cal-cover b{color:var(--fg);font-family:var(--f-mono);font-weight:500}
body.calmode .hud{display:none}
@media (max-width:420px){.lmgrid li{font-size:14px;padding:6px 8px;gap:8px}.cal-h{padding-left:14px}.cal-body{padding:14px}}

/* ---------- v7: page frame + small polish ---------- */
body{max-width:1380px;margin-inline:auto}
@media (max-width:560px){.cmp-head{grid-template-columns:1fr 1fr;row-gap:6px}.cmp-head .eyebrow{grid-column:1/-1;grid-row:1}.cmp-head .ta,.cmp-head .tb{grid-row:2}}
@media (max-width:700px){#layers{-webkit-mask-image:linear-gradient(90deg,#000 90%,transparent);mask-image:linear-gradient(90deg,#000 90%,transparent)}}

/* ---------- visitors see no admin tools ---------- */
body.role-visitor #btnSwap,body.role-visitor #btnSwapP,body.role-visitor #btnLoad,body.role-visitor #btnCal,body.role-visitor #btnAnalyze,body.role-visitor #btnSave,body.role-visitor #btnSave2,body.role-visitor .savebar{display:none!important}
body.role-visitor .pname{pointer-events:none;background:transparent}
.saved{padding:14px;margin-top:14px}
.saved header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px;margin-bottom:6px}.saved h3{margin:0;font-size:18px;letter-spacing:-.02em}
.saved-list{display:grid;gap:0}
.saved-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 12px;align-items:center;padding:11px 0;border-top:1px solid var(--line)}
.saved-row:first-child{border-top:0}
.saved-row b{font-size:16px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.saved-row .meta{grid-column:1;color:var(--muted);font-size:14px}
.saved-row .btn{grid-column:2;grid-row:1/3;min-height:42px}
/* ---------- engine: AI calibration, roster dialog, admin ---------- */
.cal-ai{display:grid;gap:8px}
.cal-ai .btn{min-height:48px;font-size:15.5px;justify-content:center;gap:8px;width:100%}
.cal-ai .btn svg{width:17px;height:17px;flex:none}
.cal-ai [hidden]{display:none!important}
.cal-ai .btn.busy{opacity:.7;pointer-events:none}
.cal-ai .btn.busy svg{animation:spin 1.1s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.lens{gap:6px}.lens>span{display:flex;justify-content:space-between;font-size:13.5px;color:var(--muted)}.lens input{width:100%;accent-color:var(--accent)}
.cal-ai-s{margin:0;font-size:14px;line-height:1.5;color:var(--muted)}
.cal-ai-s:empty{display:none}
.cal-ai-s.ok{color:var(--good)}.cal-ai-s.warn{color:var(--warn)}.cal-ai-s.err{color:var(--bad)}.cal-ai-s.busy{color:var(--fg)}
body.modal{overflow:hidden}
.dlg-back{position:fixed;inset:0;z-index:80;background:rgba(5,8,12,.78);display:grid;place-items:center;padding:12px}
.dlg-back[hidden]{display:none}
.dlg{background:var(--surface);border:1px solid var(--line-2);border-radius:14px;width:min(920px,100%);max-height:calc(100dvh - 24px);overflow:auto;display:grid;gap:12px;padding:16px}
.dlg h3{margin:0;font-size:20px;letter-spacing:-.02em}
.dlg p{margin:0;color:var(--muted);font-size:14.5px;line-height:1.5}
.dlg canvas{width:100%;height:auto;border-radius:8px;background:#000;touch-action:manipulation;cursor:pointer;display:block}
.dlg .row{display:flex;gap:10px;align-items:center;justify-content:flex-end;flex-wrap:wrap}
.dlg .row .note{margin-right:auto}
.dlg .btn{min-height:46px}
#keyRows{display:grid;gap:14px}
.pthumb{width:36px;height:48px;border-radius:6px;object-fit:cover;background:#0B0F14;margin-right:8px;vertical-align:middle;flex:none}
.nm-grid .fld>span{display:flex;align-items:center}
.adm{padding:16px}.adm h3{margin:0 0 4px;font-size:18px;letter-spacing:-.02em}.adm>.note{margin:0 0 12px}
.vrow{display:grid;gap:12px;padding:14px 0;border-top:1px solid var(--line)}
.vrow:first-of-type{border-top:0}
.vrow header{display:flex;gap:10px;align-items:center;min-width:0}
.vrow header b{font-size:16px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tag{flex:none;font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--accent);border:1px solid rgba(255,99,0,.4);border-radius:99px;padding:2px 9px}
.nm-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.nm-grid .fld>span{font-size:13px;color:var(--muted)}
.nm-grid input,.adm-f input,.adm-f select{width:100%;min-height:var(--hit);background:var(--surface-2);border:1px solid var(--line-2);border-radius:6px;padding:0 12px;color:var(--fg);font:inherit}
.vrow footer{display:flex;gap:12px;align-items:center}
.adm-f{display:grid;gap:12px}
.adm-f .row{display:flex;gap:8px;flex-wrap:wrap}
.adm-f .row .btn{flex:1 1 120px}
.adm-st{margin:0;font-size:14px;line-height:1.5;color:var(--muted)}
.adm-st.ok{color:var(--good)}.adm-st.err{color:var(--bad)}
.recs{margin-top:18px;padding-top:14px;border-top:1px solid var(--line)}
.recs h4{margin:0 0 8px;font-size:15px}
.recs ol{margin:0;padding-left:20px;display:grid;gap:10px;font-size:14.5px;line-height:1.5}
.recs li span{color:var(--accent);font-size:12.5px;margin-left:6px}
.recs small{display:block;color:var(--muted);font-size:13.5px}
.recs code{font-family:var(--f-mono);font-size:12.5px;background:var(--surface-2);padding:1px 5px;border-radius:4px;word-break:break-all}
@media (max-width:560px){.nm-grid{grid-template-columns:1fr 1fr}.dlg{padding:12px}}
/* ================= v13: mobile experience pass (interface only) =================
   One scale for touch: 44px for primary controls, 40px for chip rows, 16px gutters, 12px gaps. */
.an{grid-template-areas:"stage side" "below side" "saved side";grid-template-rows:auto auto minmax(0,1fr);column-gap:14px;row-gap:0}
.stage-col{grid-area:stage}.below{grid-area:below}.saved{grid-area:saved}.side,.calpanel{grid-area:side}
body.calmode .saved{display:none}
body.role-visitor .adm-only{display:none}
.saved-list{max-height:min(46vh,340px);overflow:auto;overscroll-behavior:contain}
.saved-row .meta{font-size:13.5px;line-height:1.35}
@media (orientation:portrait) and (max-width:900px){
  .an{grid-template-areas:"stage" "below" "saved" "side";grid-template-rows:auto;row-gap:0}
  .saved{margin:12px 0 0}
}
@media (pointer:coarse),(max-width:900px){
  .btn,.ibtn{min-height:44px}
  .btn{min-width:44px}
  .chip,.filters button,.side-tabs button{min-height:44px}
  .pname{min-height:44px;border-color:var(--line)}
  body.role-visitor .pname{border-color:transparent}
  select.sel{min-height:44px}
  .saved-row .btn{min-height:44px;min-width:76px}
}
@media (orientation:portrait) and (max-width:700px){
  /* header: one compact row. Visitors get two icon buttons beside the logo, admin gets a labelled toolbar underneath. */
  .top{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px 10px;padding-block:calc(10px + env(safe-area-inset-top,0px)) 6px}
  .brand{grid-column:1;row-gap:6px}
  .wordmark{height:34px;width:auto;max-width:100%}
  .src{font-size:12px;padding:2px 10px;line-height:20px;max-width:100%}
  .actions{grid-column:1/-1;gap:6px}
  .actions .btn{min-height:54px;padding:6px 2px;font-size:12px;gap:4px;border-radius:var(--r)}
  .actions .btn svg{width:20px;height:20px}
  body.role-visitor .actions{grid-column:2;grid-row:1;width:auto;grid-auto-columns:48px;gap:8px}
  body.role-visitor .actions .btn{min-height:48px;padding:0}
  body.role-visitor .actions .btn .lbl{display:none!important}
  body.role-visitor .actions .btn svg{width:22px;height:22px}
  /* video controls */
  .transport{padding-top:8px}
  .time{font-size:14px}
  #layers .chip{min-height:44px}
  .filters button{min-height:44px}
  .view-h h2{font-size:24px}
  /* player table: all four players fit without sideways scrolling */
  .tbl-wrap{margin-top:12px}
  table.mt{min-width:0;table-layout:fixed}
  .mt th,.mt td{padding:9px 4px;white-space:normal}
  .mt th:first-child,.mt td:first-child{width:37%;padding-left:12px;position:static;box-shadow:none}
  .mt thead th{font-size:12px;letter-spacing:.02em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .mt td{font-size:14px}
  .mt td:first-child{font-size:14px;line-height:1.3}
  .mt td small{font-size:12px;line-height:1.3;margin-top:2px}
  .mt tr.grp td:first-child{position:static}
  /* plan filter chips and saved panel */
  .chips{gap:8px}
  .saved{padding:14px var(--gut)}
  .below{margin-inline:-16px;padding:2px 16px 4px}
  .saved-row{padding:10px 0}
}
@media (orientation:landscape) and (max-height:540px){
  .top{padding-block:calc(6px + env(safe-area-inset-top,0px))}
  .actions .btn{min-height:44px;min-width:44px}
  .nav button{min-height:44px}
  .ibtn{width:44px;height:44px}
  .filters button,.side-tabs button{min-height:40px}
  .saved{padding:10px 12px}
}
/* swap dialog and buttons */
.swapbtn{min-height:44px;gap:8px;font-size:14.5px}.swapbtn svg{width:18px;height:18px}
.below .swapbtn{align-self:flex-start}
.view-h .swapbtn{order:3}
.swapdlg{width:min(760px,100%)}
.swap-scrub{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;gap:10px;align-items:center}
.swap-scrub input[type=range]{width:100%;accent-color:var(--accent);min-height:44px}
.swap-scrub .num{font-family:var(--f-mono);font-size:14px;min-width:4.6em;text-align:right;color:var(--muted)}
.swap-scope{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.swap-scope label{display:flex;align-items:center;gap:8px;min-height:44px;padding:0 12px;border:1px solid var(--line-2);border-radius:var(--r);cursor:pointer;font-size:14.5px;line-height:1.25;background:var(--surface-2)}
.swap-scope input{accent-color:var(--accent);flex:none;width:18px;height:18px}
.swap-scope label:has(input:checked){border-color:var(--accent);color:var(--fg)}
#swapIds .chip.on{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}
#swapStatus.ok{color:var(--good)}#swapStatus.warn{color:var(--warn)}#swapStatus.err{color:var(--bad)}
#swapCv{touch-action:manipulation}
@media (max-width:620px){.swap-scope{grid-template-columns:1fr}.swap-scrub{grid-template-columns:auto minmax(0,1fr) auto}.swap-scrub .num{grid-column:1/-1;text-align:left}.dlg .row .btn{flex:1 1 44%}}
/* v15: logo link, modern saved table */
.homelink{display:block;border-radius:8px;line-height:0}
.homelink:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.stbl{display:grid;gap:0;font-size:14.5px}
.st-h,.st-r{display:grid;grid-template-columns:minmax(0,2.4fr) minmax(88px,.9fr) 74px 74px minmax(118px,1fr) auto;gap:0 14px;align-items:center;padding:0 14px}
.st-h{min-height:38px;color:var(--muted);font-size:11.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;border-bottom:1px solid var(--line)}
.st-h .n,.st-r .n{text-align:right;font-variant-numeric:tabular-nums}
.st-r{min-height:64px;border-bottom:1px solid var(--line);transition:background .15s}
.st-r:last-child{border-bottom:0}
.st-r:hover{background:color-mix(in srgb,var(--surface-2) 70%,transparent)}
.st-t{display:flex;align-items:center;gap:12px;min-width:0}
.st-ico{flex:none;width:38px;height:38px;border-radius:10px;display:grid;place-items:center;background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent)}
.st-ico.sum{background:var(--surface-2);color:var(--muted)}
.st-ico svg{width:18px;height:18px}
.st-t b{font-size:15.5px;font-weight:650;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}
.st-d{color:var(--muted)}
.st-tag{display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 10px;border-radius:999px;font-size:12.5px;font-weight:600;background:color-mix(in srgb,var(--good) 15%,transparent);color:var(--good);white-space:nowrap;justify-self:start}
.st-tag.sum{background:var(--surface-2);color:var(--muted)}
.st-tag i{width:6px;height:6px;border-radius:50%;background:currentColor}
.st-a{display:flex;gap:6px;justify-content:flex-end}
.st-a .btn{min-height:38px;padding:0 14px}
.saved-list,#libList{container-type:inline-size}
@container (max-width:680px){
  .st-h{display:none}
  .st-r{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"t t" "m a";gap:8px 10px;padding:12px 4px;min-height:0;align-items:center}
  .st-t{grid-area:t}.st-a{grid-area:a}
  .st-r>.st-d,.st-r>.n,.st-r>.st-tag{display:none}
  .st-m{grid-area:m;display:flex!important;flex-wrap:wrap;gap:4px 10px;color:var(--muted);font-size:13px;align-items:center}
  .st-a .btn{min-height:44px;min-width:76px}
}
@media (min-width:901px) and (max-width:1420px){.top .actions{gap:8px}.top .actions .btn{padding:0 12px}}
.st-m{display:none}

/* ---------- login ---------- */
.login-back{position:fixed;inset:0;z-index:200;background:var(--bg);display:grid;place-items:center;padding:20px;overflow:auto}
.login-back[hidden]{display:none}
.login{width:min(400px,100%);display:grid;gap:14px;background:var(--surface);border:1px solid var(--line-2);border-radius:16px;padding:26px 22px}
.login .wordmark{height:48px;margin:0 auto 4px;max-width:100%}
.login h2{margin:0;font-size:24px;letter-spacing:-.02em;text-align:center}
.login p{margin:0;color:var(--muted);text-align:center;font-size:15px}
.login .fld>span{font-size:13px;color:var(--muted)}
.login input{width:100%;min-height:50px;background:var(--surface-2);border:1px solid var(--line-2);border-radius:8px;padding:0 14px;color:var(--fg);font:inherit;font-size:17px}
.login .btn{min-height:50px;justify-content:center;font-size:16px}
.login-err{color:var(--bad)!important;min-height:1.3em}
#btnSignOut{margin-left:auto}
.job{border:1px solid var(--line);border-radius:10px;padding:12px;display:grid;gap:10px;margin:0;min-width:0}
.job legend{padding:0 6px;font-weight:600;font-size:15px}
.job .note{margin:0}
.keyrow>span em{font-style:normal;color:var(--muted);margin-left:6px}.keyrow>span em.ok{color:var(--good)}
.keyin{display:flex;gap:8px}.keyin input{flex:1;min-width:0}
/* ---------- library (Cloudflare D1) ---------- */
.savebar{display:flex;gap:10px;padding:12px;margin-bottom:14px;flex-wrap:wrap}
.savebar input{flex:1 1 260px;min-width:0;min-height:var(--hit);background:var(--surface-2);border:1px solid var(--line-2);border-radius:6px;padding:0 12px}
.lib{padding:14px}.lib h3{margin:0 0 10px;font-size:18px;letter-spacing:-.02em}
.mrow{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px 10px;padding:11px 0;border-top:1px solid var(--line)}
.mrow:first-child{border-top:0}
.mrow b{font-size:16px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mrow .meta{grid-column:1;color:var(--muted);font-size:14px}
.mrow .acts{grid-column:2;grid-row:1/3;display:flex;gap:6px;align-items:center}
.mrow .btn{min-height:38px;padding:0 12px}
.btn.danger:hover{border-color:var(--bad);color:var(--bad)}
.tbl-wrap.flat{margin-top:10px;background:transparent}
.delta{font-size:12px;margin-left:5px}.delta.up{color:var(--good)}.delta.dn{color:var(--bad)}
.toast{position:fixed;left:50%;bottom:calc(76px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);background:var(--surface-3);border:1px solid var(--line-2);padding:10px 16px;border-radius:8px;font-size:15px;z-index:50;max-width:min(90vw,460px)}
@media (orientation:landscape){.toast{bottom:20px}}
