:root{--bg:#f5f6f8;--panel:#fff;--ink:#1b2430;--muted:#55607a;--line:#d5dbe5;--brand:#1f4e8c;--ok:#176a40;--warn:#8f4a05;--bad:#b42318;--chip:#eaeff7;--focus:#0b5fff;--on-brand:#fff}
@media (prefers-color-scheme:dark){:root{--bg:#10151c;--panel:#18202a;--ink:#e6ebf2;--muted:#a6b2c3;--line:#33415a;--brand:#6ea1e6;--ok:#4cc38a;--warn:#f0a35a;--bad:#ff8a82;--chip:#222d3b;--focus:#8ab4ff;--on-brand:#0a1424}}
*{box-sizing:border-box}
[hidden]{display:none!important}
body{margin:0;font:14px/1.5 system-ui,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--ink)}
/* keyboard focus must always be visible */
:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
main:focus{outline:none}
.skip{position:absolute;left:8px;top:-60px;z-index:30;background:var(--brand);color:var(--on-brand);padding:8px 14px;border-radius:6px;text-decoration:none}.skip:focus{top:8px}
header{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;padding:10px 20px;background:var(--panel);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:5}
.brand{font-weight:700;font-size:16px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}.brand small{font-weight:400;color:var(--muted)}
.menu-btn{display:none;font-weight:600}
.who{display:flex;gap:14px;align-items:flex-end;flex-wrap:wrap}
.layout{display:flex;min-height:calc(100vh - 53px)}
nav{width:226px;padding:12px 10px;background:var(--panel);border-right:1px solid var(--line);flex:none}
nav button{display:block;width:100%;text-align:left;margin:1px 0;padding:8px 10px;border:0;border-radius:6px;background:none;color:var(--ink);cursor:pointer;font:inherit;min-height:36px}
nav button:hover{background:var(--chip)}nav button.active{background:var(--brand);color:var(--on-brand);font-weight:600}
.nav-group{margin:12px 10px 4px;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
main{flex:1;padding:20px 24px;min-width:0;max-width:1300px}
main[aria-busy=true]{opacity:.6}
h1{font-size:20px;margin:0 0 14px}h2{font-size:15px;margin:18px 0 8px}h3{font-size:13px;margin:12px 0 6px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.card{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:14px 16px;margin-bottom:14px}
.notice{padding:8px 12px;border-radius:8px;margin-bottom:14px;background:color-mix(in srgb,var(--warn) 14%,var(--panel));border:1px solid color-mix(in srgb,var(--warn) 40%,var(--line))}
.grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(170px,1fr))}
.stat{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:12px 14px}.stat b{display:block;font-size:24px}.stat span{color:var(--muted);font-size:12px}
.tablewrap{position:relative;overflow-x:auto;margin-bottom:6px;border-radius:8px}
table{width:100%;border-collapse:collapse;background:var(--panel);border:1px solid var(--line)}
caption{text-align:left;color:var(--muted);font-size:12px;padding:0 0 4px;caption-side:top}
th,td{padding:7px 10px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}
th{font-size:12px;color:var(--muted);background:var(--chip);font-weight:600;white-space:nowrap}tr:last-child td{border-bottom:0}
tbody tr.click{cursor:pointer}tbody tr.click:hover{background:var(--chip)}
button.rowlink{border:0;background:none;padding:0;color:var(--brand);text-decoration:underline;font:inherit;cursor:pointer;text-align:left;min-height:0}
button,.btn{font:inherit;padding:6px 12px;border-radius:6px;border:1px solid var(--line);background:var(--panel);color:var(--ink);cursor:pointer;min-height:34px}
button.primary{background:var(--brand);color:var(--on-brand);border-color:var(--brand)}button.danger{color:var(--bad)}button:disabled{opacity:.5;cursor:not-allowed}
button.link{border:0;background:none;color:var(--brand);text-decoration:underline;padding:0;min-height:0;text-align:left}
input,select,textarea{font:inherit;padding:6px 8px;border:1px solid var(--muted);border-radius:6px;background:var(--panel);color:var(--ink);max-width:100%;min-height:34px}
label{display:inline-flex;flex-direction:column;gap:3px;font-size:12px;color:var(--muted)}
label.inline{flex-direction:row;align-items:center;gap:6px;color:var(--ink);font-size:14px}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:flex-end;margin-bottom:12px}
.badge,.chip{display:inline-block;padding:2px 8px;border-radius:999px;background:var(--chip);font-size:12px}
.chip.ok{color:var(--ok)}.chip.warn{color:var(--warn)}.chip.bad{color:var(--bad)}.chip.muted{color:var(--muted)}
.attn{padding-left:18px}.attn li{margin:4px 0}.muted{color:var(--muted)}.right{text-align:right}
.tabs{display:flex;gap:4px;margin:10px 0;border-bottom:1px solid var(--line);flex-wrap:wrap}.tabs button{border:0;border-bottom:3px solid transparent;border-radius:0;background:none}.tabs button.active{border-color:var(--brand);color:var(--brand);font-weight:600}
.kv{display:grid;grid-template-columns:150px 1fr;gap:4px 12px}.kv dt{color:var(--muted)}.kv dd{margin:0}
.timeline{list-style:none;padding:0;margin:0}.timeline li{padding:6px 0 6px 14px;border-left:2px solid var(--line);position:relative}.timeline li::before{content:"";position:absolute;left:-5px;top:12px;width:8px;height:8px;border-radius:50%;background:var(--brand)}
.issue{padding:6px 10px;border-radius:6px;margin:4px 0}.issue.err{background:color-mix(in srgb,var(--bad) 14%,transparent)}.issue.warn{background:color-mix(in srgb,var(--warn) 14%,transparent)}
.steps{display:flex;gap:8px;flex-wrap:wrap;list-style:none;padding:0;margin:0 0 14px;counter-reset:s}
.steps li{counter-increment:s;padding:8px 12px;border:1px solid var(--line);border-radius:8px;background:var(--panel);flex:1 1 200px}
.steps li::before{content:counter(s) ". ";font-weight:700}.steps li.done{border-color:var(--ok)}.steps li.now{border-color:var(--brand);box-shadow:0 0 0 2px color-mix(in srgb,var(--brand) 30%,transparent)}
.status-sel{min-width:110px}
#toast{position:fixed;bottom:18px;right:18px;max-width:420px;padding:10px 14px;border-radius:8px;background:var(--ink);color:var(--bg);display:none;z-index:20}#toast.err{background:var(--bad);color:#fff}
dialog{border:1px solid var(--line);border-radius:12px;padding:18px;background:var(--panel);color:var(--ink);min-width:min(360px,92vw);max-width:min(560px,96vw);max-height:92vh;overflow:auto}dialog::backdrop{background:#0006}
dialog h2{margin-top:0}
dialog .fields{display:grid;gap:10px;margin:12px 0}dialog .fields label{color:var(--ink)}dialog menu{display:flex;justify-content:flex-end;gap:8px;padding:0;margin:0}
.req{color:var(--bad)}
pre{background:var(--chip);padding:8px;border-radius:6px;overflow:auto;font-size:12px}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
@media(max-width:800px){
  .menu-btn{display:inline-flex;align-items:center;gap:6px}
  .layout{display:block}
  nav{display:none;width:auto;border-right:0;border-bottom:1px solid var(--line)}
  nav.open{display:block}
  nav button{min-height:44px}
  main{padding:14px}
  button,input,select,textarea{min-height:44px}
  .kv{grid-template-columns:110px 1fr}
  header{padding:8px 12px}
}
@media print{
  header,nav,.skip,#toast,.noprint,.tabs{display:none!important}
  body{background:#fff;color:#000}main{padding:0;max-width:none}
  .card,table{border-color:#999}th{background:#eee!important;color:#000}
  a{color:#000}
}

/* sign-in */
body.signed-out .layout,body.signed-out .who{display:none}
#login{display:flex;justify-content:center;padding:32px 16px}
#login[hidden]{display:none}
.login-card{width:100%;max-width:420px}
.login-card label{display:block;margin:12px 0}
.login-card input{width:100%}
.login-tabs{display:flex;gap:8px;margin:12px 0}
.login-tabs button[aria-pressed="true"]{background:#1d4ed8;color:#fff}
#login-status:empty{display:none}
#login-status.error{color:#9b1c1c;background:#fdecec;border:1px solid #f3b4b4;padding:8px 10px;border-radius:6px}
#login-status.info{background:#eef4ff;border:1px solid #b9cdf5;padding:8px 10px;border-radius:6px}
.login-links{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}
.linklike{background:none;border:0;padding:4px 0;color:#1d4ed8;text-decoration:underline;cursor:pointer;font:inherit}
#session{display:flex;gap:10px;align-items:center}
.login-h{font-size:1.5rem;font-weight:700;margin:0 0 8px}
