
/* Layout: press-desk tool. Calm cool neutrals, cobalt as the single accent, photo stage always neutral grey for honest colour judgement. */
:root{
  --bg:#eef0f3; --panel:#ffffff; --sunk:#f6f7f9; --ink:#161a21; --muted:#5b6474; --line:#dde1e8;
  --accent:#2347c5; --accent-soft:#e6ebfb; --accent-ink:#ffffff;
  --stage:#3b3c3e; --stage-ink:#d9dadc;
  --ok:#1d7f48; --ok-soft:#e2f3e9; --warn:#a4660c; --warn-soft:#fbf0dc; --bad:#b4232c;
  --f-display:"Archivo","Helvetica Neue",Arial,sans-serif;
  --f-body:"IBM Plex Sans",system-ui,-apple-system,"Segoe UI",sans-serif;
  --f-mono:"IBM Plex Mono",ui-monospace,"SF Mono",Menlo,Consolas,monospace;
  --r:8px;
}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){
  --bg:#111317; --panel:#191c21; --sunk:#14171b; --ink:#e7e9ee; --muted:#98a0ae; --line:#2a2f37;
  --accent:#86a0ff; --accent-soft:#1f2741; --accent-ink:#0d1226;
  --stage:#2b2c2e; --stage-ink:#c9cacc;
  --ok:#5fcf8f; --ok-soft:#173225; --warn:#e7b25c; --warn-soft:#33270f; --bad:#ff7a82; color-scheme:dark}}
:root[data-theme="dark"]{
  --bg:#111317; --panel:#191c21; --sunk:#14171b; --ink:#e7e9ee; --muted:#98a0ae; --line:#2a2f37;
  --accent:#86a0ff; --accent-soft:#1f2741; --accent-ink:#0d1226;
  --stage:#2b2c2e; --stage-ink:#c9cacc;
  --ok:#5fcf8f; --ok-soft:#173225; --warn:#e7b25c; --warn-soft:#33270f; --bad:#ff7a82; color-scheme:dark}
html,body{height:100%}
body{background:var(--bg);color:var(--ink);font:15px/1.5 var(--f-body);-webkit-font-smoothing:antialiased}
*{box-sizing:border-box}
h1,h2,h3{font-family:var(--f-display);font-stretch:88%;letter-spacing:-.01em;text-wrap:balance;margin:0;line-height:1.15}
h1{font-size:1.75rem;font-weight:750}
h2{font-size:1.15rem;font-weight:700}
h3{font-size:.95rem;font-weight:700}
.mono{font-family:var(--f-mono);font-size:.82em}
.muted{color:var(--muted)}
.label{font-family:var(--f-display);font-stretch:92%;font-size:.7rem;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--muted)}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

/* top bar */
.top{position:sticky;top:env(safe-area-inset-top,0px);z-index:20;display:flex;align-items:center;gap:20px;padding:0 20px;height:56px;background:var(--panel);border-bottom:1px solid var(--line)}
.brand{display:flex;align-items:baseline;gap:8px;font-family:var(--f-display);font-weight:800;font-stretch:80%;font-size:1.15rem;letter-spacing:.01em;white-space:nowrap}
.brand b{background:var(--accent);color:var(--accent-ink);padding:1px 6px;border-radius:4px;font-stretch:100%}
.nav{display:flex;gap:2px;overflow-x:auto}
.nav button{border:0;background:none;padding:8px 12px;border-radius:6px;color:var(--muted);font-weight:500;white-space:nowrap}
.nav button[aria-current="page"]{color:var(--ink);background:var(--sunk)}
.me{margin-left:auto;display:flex;align-items:center;gap:8px;font-size:.85rem;color:var(--muted);white-space:nowrap}
.me .dot{width:8px;height:8px;border-radius:50%;background:var(--ok)}
.me .dot.off{background:var(--warn)}

/* generic */
.wrap{max-width:1120px;margin:0 auto;padding-block:28px 60px;padding-inline:20px}
.row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.spacer{flex:1}
.btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);background:var(--panel);padding:7px 14px;border-radius:7px;font-weight:500;font-size:.9rem;white-space:nowrap}
.btn:hover{border-color:var(--muted)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.btn.primary:hover{filter:brightness(1.08)}
.btn.ghost{border-color:transparent;background:none}
.btn.small{padding:4px 10px;font-size:.82rem}
.btn:disabled{opacity:.45;cursor:not-allowed}
.field{display:flex;flex-direction:column;gap:5px;min-width:0}
.field>span{font-size:.8rem;font-weight:600;color:var(--muted)}
.field small{color:var(--muted);font-size:.78rem}
input[type=text],input[type=date],input[type=time],input[type=number],input[type=email],input[type=password],select,textarea{width:100%;background:var(--sunk);border:1px solid var(--line);border-radius:7px;padding:8px 10px;min-width:0}
textarea{resize:vertical;line-height:1.45}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);background:var(--panel)}
.grid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
@media (max-width:640px){.grid2,.grid3{grid-template-columns:1fr}}
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r)}
.chip{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:99px;background:var(--sunk);border:1px solid var(--line);font-size:.78rem;color:var(--muted);white-space:nowrap}
.chip.sport{background:var(--accent-soft);border-color:transparent;color:var(--accent);font-weight:600}
.seg{display:inline-flex;background:var(--sunk);border:1px solid var(--line);border-radius:8px;padding:2px}
.seg button{border:0;background:none;padding:5px 12px;border-radius:6px;font-size:.86rem;color:var(--muted);font-weight:500}
.seg button[aria-pressed="true"]{background:var(--panel);color:var(--ink);box-shadow:0 1px 2px rgb(0 0 0/.12)}
.banner{background:var(--warn-soft);color:var(--warn);padding:8px 20px;font-size:.85rem;border-bottom:1px solid var(--line)}

/* games list */
.pagehead{display:flex;align-items:flex-end;gap:16px;flex-wrap:wrap;margin-bottom:22px}
.pagehead p{margin:4px 0 0;color:var(--muted);max-width:60ch}
.group-title{margin:28px 0 10px}
.games{display:flex;flex-direction:column;gap:8px}
.game{display:grid;grid-template-columns:64px minmax(0,1fr) auto;gap:18px;align-items:center;padding:14px 16px}
.date{text-align:center;border-right:1px solid var(--line);padding-right:14px}
.date .d{font-family:var(--f-display);font-weight:800;font-size:1.6rem;line-height:1;font-variant-numeric:tabular-nums}
.date .m{font-family:var(--f-display);font-size:.72rem;font-weight:700;letter-spacing:.08em;color:var(--muted);text-transform:uppercase}
.game h3{font-size:1.08rem}
.game .meta{color:var(--muted);font-size:.86rem;display:flex;gap:6px 12px;flex-wrap:wrap;margin-top:3px}
.game .acts{display:flex;gap:6px}
@media (max-width:640px){.game{grid-template-columns:52px minmax(0,1fr)}.game .acts{grid-column:1/-1}}
.empty{padding:40px 24px;text-align:center;color:var(--muted)}
.empty h2{color:var(--ink);margin-bottom:6px}

/* game form */
.formgrid{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:24px;align-items:start}
@media (max-width:900px){.formgrid{grid-template-columns:1fr}}
.formcard{padding:22px;display:flex;flex-direction:column;gap:16px}
.formcard fieldset{border:0;padding:0;margin:0;display:flex;flex-direction:column;gap:14px}
.formcard legend{padding:0;margin-bottom:10px}
.preview{position:sticky;top:76px;padding:20px;display:flex;flex-direction:column;gap:14px}
.pv dt{font-family:var(--f-display);font-stretch:92%;font-size:.68rem;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);margin-bottom:2px}
.pv dd{margin:0 0 12px;font-size:.9rem;overflow-wrap:anywhere}
.pv dd.cap{font-size:.95rem;line-height:1.5;background:var(--sunk);border-left:3px solid var(--accent);padding:10px 12px;border-radius:0 6px 6px 0}
.kw{display:flex;flex-wrap:wrap;gap:4px}
details summary{cursor:pointer;color:var(--muted);font-size:.86rem;font-weight:600}
.tokens{font-family:var(--f-mono);font-size:.75rem;color:var(--muted)}

/* rosters */
.teams{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:10px}
.team{padding:14px 16px;display:flex;flex-direction:column;gap:6px;text-align:left;border:1px solid var(--line);background:var(--panel);border-radius:var(--r)}
.team:hover{border-color:var(--accent)}
.team .code{font-family:var(--f-mono);font-size:.78rem;color:var(--accent);font-weight:500}
.ptable{width:100%;border-collapse:collapse;font-size:.9rem}
.ptable th{text-align:left;font-weight:600;color:var(--muted);font-size:.78rem;padding:6px 6px;border-bottom:1px solid var(--line)}
.ptable td{padding:4px 6px;border-bottom:1px solid var(--line)}
.ptable td input{padding:5px 8px}
.ptable .n{width:76px}
.tablewrap{overflow-x:auto}

/* desk */
.desk{display:grid;grid-template-columns:minmax(0,1fr) 400px;grid-template-rows:auto minmax(0,1fr) auto;height:calc(100dvh - 57px - env(safe-area-inset-top,0px) - env(safe-area-inset-bottom,0px));min-height:520px}
.deskbar{grid-column:1/-1;display:flex;align-items:center;gap:14px;padding:10px 16px;background:var(--panel);border-bottom:1px solid var(--line);flex-wrap:wrap}
.deskbar h2{font-size:1.05rem}
.deskbar .sub{font-size:.82rem;color:var(--muted)}
.stagewrap{position:relative;background:var(--stage);min-height:0;overflow:hidden}
#stage{position:absolute;inset:0;width:100%;height:100%;touch-action:none}
.stage-empty{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;color:var(--stage-ink);text-align:center;padding:24px}
.stage-empty .drop{border:1.5px dashed color-mix(in srgb,var(--stage-ink) 45%,transparent);border-radius:12px;padding:36px 44px;max-width:440px}
.stage-empty h2{color:var(--stage-ink)}
.stage-empty p{margin:6px 0 16px;font-size:.9rem;opacity:.8}
.stagewrap.dragging{outline:3px solid var(--accent);outline-offset:-3px}
.stageinfo{position:absolute;left:12px;bottom:10px;font-family:var(--f-mono);font-size:.74rem;color:var(--stage-ink);opacity:.85;pointer-events:none}
.side{grid-row:2/4;grid-column:2;background:var(--panel);border-left:1px solid var(--line);display:flex;flex-direction:column;min-height:0}
.tabs{display:flex;border-bottom:1px solid var(--line);padding:0 8px}
.tabs button{border:0;background:none;padding:12px 12px 10px;font-weight:600;font-size:.88rem;color:var(--muted);border-bottom:2px solid transparent}
.tabs button[aria-selected="true"]{color:var(--ink);border-bottom-color:var(--accent)}
.sidebody{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:16px;min-height:0}
.sidefoot{border-top:1px solid var(--line);padding:12px 16px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.strip{grid-column:1;display:flex;gap:6px;overflow-x:auto;padding:8px;background:var(--panel);border-top:1px solid var(--line);min-height:104px}
.frame{flex:0 0 auto;width:118px;border:2px solid transparent;border-radius:6px;background:var(--sunk);padding:3px;text-align:left;position:relative}
.frame img{display:block;width:100%;height:66px;object-fit:contain;background:var(--stage);border-radius:3px}
.frame .fn{font-family:var(--f-mono);font-size:.66rem;color:var(--muted);display:block;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.frame.cur{border-color:var(--accent)}
.frame.sel:not(.cur){border-color:color-mix(in srgb,var(--accent) 45%,transparent)}
.frame .st{position:absolute;top:7px;right:7px;width:9px;height:9px;border-radius:50%;background:#888;box-shadow:0 0 0 2px var(--sunk)}
.frame .st.captioned{background:var(--accent)}
.frame .st.exported{background:var(--ok)}
@media (max-width:900px){
  .desk{grid-template-columns:1fr;grid-template-rows:auto 46vh auto auto;height:auto}
  .side{grid-row:auto;grid-column:1;border-left:0;border-top:1px solid var(--line)}
  .strip{grid-row:3}
}

/* caption panel */
.teamtoggle{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.teamtoggle button{border:1px solid var(--line);background:var(--sunk);border-radius:7px;padding:8px 10px;text-align:left;font-weight:600;font-size:.88rem;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.teamtoggle button small{display:block;font-family:var(--f-mono);font-weight:400;color:var(--muted);font-size:.7rem}
.teamtoggle button[aria-pressed="true"]{border-color:var(--accent);background:var(--accent-soft)}
.players{display:grid;grid-template-columns:repeat(auto-fill,minmax(112px,1fr));gap:5px}
.pl{display:flex;align-items:center;gap:7px;border:1px solid var(--line);background:var(--panel);border-radius:6px;padding:5px 7px;text-align:left;min-width:0}
.pl .no{font-family:var(--f-display);font-weight:800;font-size:1.05rem;min-width:26px;text-align:right;font-variant-numeric:tabular-nums;color:var(--accent)}
.pl .nm{font-size:.8rem;line-height:1.15;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.pl[aria-pressed="true"]{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.pl[aria-pressed="true"] .no{color:var(--accent-ink)}
.picked{display:flex;flex-wrap:wrap;gap:6px;min-height:28px;align-items:center}
.picked .chip{background:var(--accent-soft);color:var(--ink);border-color:transparent;font-size:.8rem}
.picked .chip button{border:0;background:none;padding:0 0 0 2px;color:var(--muted);font-size:1rem;line-height:1}
.actions{display:flex;flex-wrap:wrap;gap:5px}
.act{border:1px solid var(--line);background:var(--panel);border-radius:99px;padding:4px 11px;font-size:.82rem}
.act[aria-pressed="true"]{background:var(--ink);color:var(--panel);border-color:var(--ink)}
.act:disabled{opacity:.35;cursor:not-allowed}
.capbox{font-size:.95rem;min-height:120px}
.capstate{font-size:.78rem;color:var(--muted)}
.capstate.custom{color:var(--warn)}
.addp{display:grid;grid-template-columns:64px minmax(0,1fr) auto;gap:6px}

/* edit panel */
.slider{display:grid;grid-template-columns:96px minmax(0,1fr) 48px;align-items:center;gap:10px;font-size:.86rem}
.slider output{font-family:var(--f-mono);font-size:.78rem;text-align:right;color:var(--muted);font-variant-numeric:tabular-nums}
input[type=range]{width:100%;accent-color:var(--accent)}
.aspects{display:flex;flex-wrap:wrap;gap:5px}
.metatable{width:100%;border-collapse:collapse;font-size:.84rem}
.metatable th{text-align:left;vertical-align:top;color:var(--muted);font-weight:500;padding:6px 10px 6px 0;white-space:nowrap;font-family:var(--f-mono);font-size:.74rem}
.metatable td{padding:6px 0;border-bottom:1px solid var(--line);overflow-wrap:anywhere}

.progress{position:fixed;inset:auto 16px calc(16px + env(safe-area-inset-bottom,0px)) auto;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:14px 16px;width:300px;box-shadow:0 10px 30px rgb(0 0 0/.18);z-index:30}
.bar{height:6px;background:var(--sunk);border-radius:3px;overflow:hidden;margin-top:8px}
.bar i{display:block;height:100%;background:var(--accent);width:0;transition:width .2s}
#toast{position:fixed;left:50%;bottom:calc(20px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);background:var(--ink);color:var(--panel);padding:9px 16px;border-radius:8px;font-size:.88rem;z-index:40;max-width:calc(100% - 32px)}
.note{font-size:.84rem;color:var(--muted);background:var(--sunk);border:1px solid var(--line);border-radius:7px;padding:10px 12px}
.note.warn{background:var(--warn-soft);color:var(--warn);border-color:transparent}
.confirm{display:flex;gap:8px;align-items:center;flex-wrap:wrap;background:var(--warn-soft);color:var(--warn);padding:8px 10px;border-radius:7px;font-size:.85rem}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}

/* ---- server version additions ---- */
:root{color-scheme:light}
body{margin:0}
[hidden]{display:none!important}
img{max-width:100%}
.top{top:0}
.me .who{max-width:22ch;overflow:hidden;text-overflow:ellipsis}
.login{min-height:100dvh;display:grid;place-items:center;padding:24px 16px}
.login form{width:100%;max-width:400px}
.err{background:color-mix(in srgb,var(--bad) 12%,transparent);color:var(--bad);padding:8px 12px;border-radius:7px;font-size:.88rem}
.filters{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:0 0 14px}
.filters select,.filters input[type=text]{width:auto;min-width:0;padding:6px 10px;font-size:.88rem}
.filters input[type=text]{flex:1 1 200px}
.seg .count{font-family:var(--f-mono);font-size:.74rem;color:var(--muted);margin-left:3px}
.game.is-archived{opacity:.82}
.game.is-archived .date .d{color:var(--muted)}
fieldset{border:0;padding:0;margin:0;min-width:0;display:flex;flex-direction:column;gap:14px}
fieldset:disabled input,fieldset:disabled select{opacity:.7}
.sentlist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.sentlist li{padding:10px 0;border-bottom:1px solid var(--line)}
.people td{padding:8px 6px;vertical-align:middle}
.people select{width:auto;padding:4px 8px}
.people tr.inactive td{opacity:.5}
.pwbox{background:var(--panel);border:1px solid var(--line);padding:2px 8px;border-radius:5px;font-size:.95rem;user-select:all}
@media (max-width:640px){.top{gap:10px;padding:0 12px}.me .who{display:none}.filters select{flex:1 1 45%}}
.sentlist .mono{overflow-wrap:anywhere;min-width:0;flex:1 1 auto}
.sentlist .row{flex-wrap:nowrap;align-items:baseline}
@media (max-width:640px){
  .top{flex-wrap:wrap;height:auto;padding-block:8px 0;row-gap:4px}
  .top .nav{order:3;width:100%;margin:0 -6px}
  .top .me{margin-left:auto}
  .desk{height:auto}
}
