:root{--bg:#f4f5f7;--surface:#fff;--ink:#1a2530;--muted:#5f6c78;--line:#dfe3e8;--accent:#1f5f8b;--accent-soft:#e4eff6;
--risk:#b23a2a;--risk-soft:#fbe8e4;--warn:#96690c;--warn-soft:#fbf1d9;--ok:#26734d;--ok-soft:#e2f3ea;--idle:#59636e;--idle-soft:#eaedf0;color-scheme:light}
@media (prefers-color-scheme:dark){:root{--bg:#12171c;--surface:#1b2229;--ink:#e6ebef;--muted:#9aa7b2;--line:#2e3740;--accent:#7db8df;--accent-soft:#1d2e3b;
--risk:#f09a8a;--risk-soft:#3b211c;--warn:#e0bb66;--warn-soft:#352b14;--ok:#7fcfa5;--ok-soft:#18302a;--idle:#aab4bd;--idle-soft:#2a3138;color-scheme:dark}}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.6 -apple-system,"PingFang SC","Microsoft YaHei",system-ui,sans-serif}
a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer;background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:6px 12px}
button:hover{border-color:var(--accent)}
button.primary{background:var(--accent);border-color:var(--accent);color:var(--surface);font-weight:600}
button.link{border:none;background:none;color:var(--muted);padding:0;font-size:13px}
button.link:hover{color:var(--risk)}
:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
input,select,textarea{background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:6px 10px;max-width:100%}
textarea{width:100%;min-height:72px;resize:vertical}
.topbar{background:var(--surface);border-bottom:1px solid var(--line);padding:10px max(16px,calc((100vw - 1240px)/2));display:flex;gap:16px;align-items:center;flex-wrap:wrap}
.brand{font-weight:700;font-size:16px}.brand a{color:inherit}
.spacer{flex:1}.muted{color:var(--muted)}.small{font-size:13px}
.stale{color:var(--risk);font-weight:600}
main{max-width:1240px;margin:0 auto;padding:20px 16px 56px;display:flex;flex-direction:column;gap:16px}
.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.tile{all:unset;box-sizing:border-box;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:12px 14px;cursor:pointer;display:flex;flex-direction:column;gap:2px}
.tile:hover,.tile:focus-visible{border-color:var(--accent)}
.tile.on{border-color:var(--accent);background:var(--accent-soft)}
.tile b{font-size:24px;line-height:1.2;font-variant-numeric:tabular-nums}
.tile span{font-size:13px;color:var(--muted)}
.tile.alert b{color:var(--risk)}
.bands{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px}
.bands .tile{padding:8px 10px}.bands .tile b{font-size:18px}.bands .tile span{font-size:12px}
@media (max-width:820px){.bands{grid-template-columns:repeat(2,minmax(0,1fr))}}
.filters{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.filters input[type=search]{flex:1 1 220px}
.card{background:var(--surface);border:1px solid var(--line);border-radius:8px}
.tbl{overflow-x:auto}
table{border-collapse:collapse;width:100%;min-width:980px}
th,td{padding:9px 12px;text-align:left;border-bottom:1px solid var(--line);white-space:nowrap}
th{font-size:12.5px;font-weight:500;color:var(--muted)}
tbody tr:last-child td{border-bottom:none}
tbody tr.row{cursor:pointer}tbody tr.row:hover{background:var(--accent-soft)}
td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}
.pill{display:inline-block;padding:1px 8px;border-radius:999px;font-size:12.5px;font-weight:600}
.h-risk{color:var(--risk);background:var(--risk-soft)}.h-decline{color:var(--warn);background:var(--warn-soft)}
.h-healthy{color:var(--ok);background:var(--ok-soft)}.h-silent,.h-free{color:var(--idle);background:var(--idle-soft)}
.late{color:var(--risk);font-weight:600}
.pager{display:flex;gap:10px;align-items:center;justify-content:flex-end;padding:10px 12px}
.empty{padding:40px 16px;text-align:center;color:var(--muted)}
.head{display:flex;gap:12px;flex-wrap:wrap;align-items:baseline}
h1{font-size:22px;margin:0}h2{font-size:15px;margin:0}
.grid{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);gap:16px;align-items:start}
.col{display:flex;flex-direction:column;gap:16px;min-width:0}
.sec{padding:14px 16px;display:flex;flex-direction:column;gap:10px}
.kv{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px 16px}
.kv div{min-width:0;overflow-wrap:anywhere}.kv span{display:block;font-size:12.5px;color:var(--muted)}.kv b{font-weight:600;font-variant-numeric:tabular-nums}
.bars{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:4px;align-items:end;height:92px}
.bar{display:flex;flex-direction:column;justify-content:flex-end;height:100%;gap:2px;text-align:center;font-size:11px;color:var(--muted)}
.bar i{display:block;background:var(--accent);border-radius:2px 2px 0 0;min-height:1px}
.axis{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:4px;font-size:10.5px;color:var(--muted);text-align:center}
.mini table{min-width:0}.mini th,.mini td{padding:6px 0;white-space:normal}
.form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.form label{display:flex;flex-direction:column;gap:3px;font-size:12.5px;color:var(--muted)}
.form .wide{grid-column:1/-1}.form input,.form select,.form textarea{width:100%;font-size:14px;color:var(--ink)}
.err{color:var(--risk);font-size:13px;min-height:1em}
.fu{border-top:1px solid var(--line);padding-top:10px;display:flex;flex-direction:column;gap:3px}
.fu:first-child{border-top:none;padding-top:0}
.fu p{margin:0;white-space:pre-wrap;overflow-wrap:anywhere}
.login{min-height:100vh;display:grid;place-items:center;padding:16px}
.login form{width:min(360px,100%);display:flex;flex-direction:column;gap:12px;padding:24px}
.login input{width:100%}
.topbar nav{display:flex;gap:14px;flex-wrap:wrap}.topbar nav a{color:var(--muted);padding:2px 0;border-bottom:2px solid transparent}
.topbar nav a.on{color:var(--ink);border-color:var(--accent);font-weight:600}
.tiles{grid-template-columns:repeat(auto-fit,minmax(118px,1fr))}
.bands{grid-template-columns:repeat(auto-fit,minmax(118px,1fr))}
.stat{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:12px 14px;display:flex;flex-direction:column;gap:2px}
.stat b{font-size:24px;line-height:1.2;font-variant-numeric:tabular-nums}.stat span{font-size:13px;color:var(--muted)}
.searchrow{display:flex;gap:10px;align-items:center}.searchrow input{flex:1;min-width:0}
.filters-box summary{cursor:pointer;color:var(--muted);font-size:13px;padding:2px 0 8px}
table.list{min-width:1240px}
td.wrap{white-space:normal;min-width:260px;overflow-wrap:anywhere}
.pill.f-overdue{color:var(--risk);background:var(--risk-soft)}.pill.f-scheduled{color:var(--accent);background:var(--accent-soft)}
.pill.f-ok{color:var(--ok);background:var(--ok-soft)}.pill.f-never,.pill.f-closed{color:var(--idle);background:var(--idle-soft)}
.namebox{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.namebox input{flex:0 1 260px}
.imgs{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.perms{display:flex;flex-direction:column;gap:4px;font-size:14px}.perms label{display:flex;gap:6px;align-items:flex-start;color:var(--ink)!important;font-size:14px!important;flex-direction:row!important}
.perms input{width:auto!important;margin-top:4px}
.staff-row.off{opacity:.6}.narrow{max-width:420px}.form.one{grid-template-columns:minmax(0,1fr)}
textarea.short{min-height:92px}
.thumbs{display:flex;gap:8px;flex-wrap:wrap}
.thumb{display:flex;flex-direction:column;gap:2px;align-items:center}
.thumb img{width:84px;height:84px;object-fit:cover;border-radius:6px;border:1px solid var(--line);display:block}
.modal{position:fixed;inset:0;background:rgba(10,15,20,.55);display:grid;place-items:center;padding:16px;z-index:10}
.modal-body{padding:20px;display:flex;flex-direction:column;gap:12px;align-items:center;max-width:340px;text-align:center}
.qr{width:240px;height:240px;background:#fff;border-radius:6px;image-rendering:pixelated}
.upload-page{max-width:480px;gap:14px}
.pick{display:block;background:var(--accent);color:var(--surface);text-align:center;font-weight:600;border-radius:8px;padding:16px;cursor:pointer}
.pick input{display:none}.pick[hidden]{display:none}
.up-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;overflow-wrap:anywhere}
@media (max-width:820px){.grid{grid-template-columns:minmax(0,1fr)}.form{grid-template-columns:minmax(0,1fr)}
input,select,textarea,button{font-size:16px}
.tiles,.bands{grid-template-columns:repeat(2,minmax(0,1fr))}
.filters select,.filters label{flex:1 1 45%;min-width:0}.filters select{width:100%}
.topbar{gap:8px 12px}
table.list{min-width:0;display:block}.list thead{display:none}.list tbody{display:flex;flex-direction:column}
.list tr{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 12px;padding:12px 14px;border-bottom:1px solid var(--line)}
.list td{display:block;padding:0;border:none;white-space:normal;text-align:left;overflow-wrap:anywhere;min-width:0}
.list td.name{grid-column:1/-1;font-size:16px;font-weight:600}.list td.wrap{grid-column:1/-1;min-width:0}
.list td[data-label]::before{content:attr(data-label);display:block;font-size:12px;color:var(--muted)}}
