:root{--bg:#f4f6f8;--card:#fff;--ink:#141720;--muted:#6b7280;--line:#e5e7eb;--brand:#4a9eff;--brand2:#2f7fe0;--ok:#16a34a;--warn:#d97706;--bad:#dc2626;--zebra:#fafbfc;--lock:#f3f4f6;--input:#fff;--flashbg:#ecfdf5;--flashline:#a7f3d0;--flashink:#065f46;--pill:#f3f4f6;--shadow:rgba(20,23,32,.10)}
:root[data-theme=dark]{--bg:#0f1117;--card:#181b24;--ink:#e6e8ee;--muted:#9aa3b2;--line:#2a2f3d;--brand:#5aa8ff;--brand2:#82bdff;--ok:#34d399;--warn:#fbbf24;--bad:#f87171;--zebra:#1c2030;--lock:#232838;--input:#11141c;--flashbg:#0f2a1f;--flashline:#1f5a3f;--flashink:#a7f3d0;--pill:#232838;--shadow:rgba(0,0,0,.5)}
:root[data-theme=dark] .btn.ghost{background:var(--card);color:var(--ink)}:root[data-theme=dark] .btn.ghost:hover{background:#232838}
:root[data-theme=dark] .ts thead th{background:var(--card)}:root[data-theme=dark] .ts td.cell input:hover,:root[data-theme=dark] .ts td.cell input:focus{background:var(--input)}
:root[data-theme=dark] .flash.bad{background:#2a1215;border-color:#7f1d1d;color:#fecaca}:root[data-theme=dark] code.link{background:#11141c}
:root[data-theme=dark] #pop,:root[data-theme=dark] .tag{background:var(--card)}:root[data-theme=dark] .tag{color:#c7d2fe}:root[data-theme=dark] .tag.grey{color:var(--muted)}
:root[data-theme=dark] .ts tfoot td{border-top-color:var(--line)}
*{box-sizing:border-box}html,body{margin:0;background:var(--bg);color:var(--ink);font-family:Montserrat,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;font-size:14px}
a{color:var(--brand2)}
.brand{font-weight:800;font-size:1.25rem;letter-spacing:-.02em}.brand span{color:var(--brand)}
.btn{display:inline-block;background:var(--brand);color:#fff;border:0;border-radius:8px;padding:.7rem 1.1rem;font:inherit;font-weight:600;cursor:pointer;text-decoration:none}
.btn:hover{background:var(--brand2)}.btn:disabled{opacity:.6;cursor:default}
.btn.ghost{background:#fff;color:var(--ink);border:1px solid var(--line)}.btn.ghost:hover{background:#f3f4f6}
.btn.sm{padding:.35rem .7rem;font-size:12.5px;border-radius:6px}.btn.danger{background:#fff;color:var(--bad);border:1px solid #fecaca}.btn.danger:hover{background:#fef2f2}
input,select,textarea{font:inherit;color:inherit;background:var(--input)}
.theme{background:none;border:1px solid var(--line);color:var(--ink);border-radius:999px;width:32px;height:32px;cursor:pointer;font-size:16px;line-height:1}
.theme:hover{background:var(--pill)}.theme.corner{position:absolute;top:14px;right:14px}
.authcard{position:relative}
img.logo{height:36px;max-width:220px;object-fit:contain;display:block}img.logo.prev{height:48px;margin-bottom:6px}
.settings .frow{display:flex;gap:14px;align-items:flex-start;margin-bottom:12px}.settings label{width:140px;color:var(--muted);padding-top:.5rem;font-size:13px}
.settings input[type=text],.settings input:not([type]),.settings select{padding:.5rem .6rem;border:1px solid var(--line);border-radius:8px;min-width:260px;max-width:100%}
/* auth */
body.auth{display:flex;min-height:100vh;align-items:center;justify-content:center;padding:16px}
.authcard{background:var(--card);border-radius:14px;box-shadow:0 10px 40px var(--shadow);padding:2rem;width:min(420px,100%)}
.authcard h1{font-size:1.4rem;margin:1rem 0 .3rem}.muted{color:var(--muted)}.small{font-size:12.5px}
.authcard .btn{width:100%;margin-top:.5rem}.authcard input{width:100%;padding:.7rem .8rem;border:1px solid var(--line);border-radius:8px;margin-top:.6rem}
.or{text-align:center;color:var(--muted);margin:.9rem 0 .2rem;font-size:12px;text-transform:uppercase;letter-spacing:2px}
.err{color:var(--bad);margin-top:.8rem;min-height:1em}.ok{color:var(--ok);margin-top:.8rem}
/* app shell */
.top{background:var(--card);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:5}
.top .in{max-width:1400px;margin:0 auto;padding:10px 18px;display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.top nav a{margin-right:14px;color:var(--muted);text-decoration:none;font-weight:600}.top nav a.on,.top nav a:hover{color:var(--ink)}
.top .sp{flex:1}.top .who{color:var(--muted);font-size:13px}
.wrap{max-width:1400px;margin:0 auto;padding:18px}
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px 18px;margin-bottom:16px}
h2{font-size:1.1rem;margin:0 0 10px}
.flash{background:var(--flashbg);border:1px solid var(--flashline);color:var(--flashink);padding:10px 14px;border-radius:10px;margin-bottom:14px}
.flash.bad{background:#fef2f2;border-color:#fecaca;color:#991b1b}
/* week nav */
.weeknav{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.weeknav .title{font-size:1.15rem;font-weight:700;margin:0 6px}
.weeknav input[type=date]{padding:.4rem .5rem;border:1px solid var(--line);border-radius:6px}
.weeknav .tot{margin-left:auto;font-weight:700;font-size:1.05rem}
.weeknav select{padding:.4rem .5rem;border:1px solid var(--line);border-radius:6px;background:var(--input)}
/* grid */
.gridwrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
table.ts{border-collapse:separate;border-spacing:0;width:100%;min-width:820px}
.ts th,.ts td{border-bottom:1px solid var(--line);padding:6px 6px;vertical-align:middle}
.ts thead th{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:1px;text-align:center;padding-bottom:8px;position:sticky;top:0;background:var(--card)}
.ts thead th.today{color:var(--brand2)}.ts thead th .d{display:block;font-size:14px;color:var(--ink);letter-spacing:0;text-transform:none;font-weight:700}
.ts th.rowh{text-align:left;min-width:240px;width:30%}
.ts td.rowh{text-align:left}.ts td.rowh .c{font-weight:700}.ts td.rowh .p{color:var(--muted);font-size:12.5px}
.ts td.rowh .x{opacity:0;border:0;background:none;color:var(--bad);cursor:pointer;font-size:14px;margin-left:6px}.ts tr:hover td.rowh .x{opacity:.7}
.ts td.cell{text-align:center;width:9%;min-width:76px;position:relative}
.ts td.cell input{width:64px;text-align:center;padding:.45rem .3rem;border:1px solid transparent;border-radius:6px;background:transparent;font-weight:600;font-size:14px}
.ts td.cell input:hover{border-color:var(--line);background:var(--input)}.ts td.cell input:focus{outline:2px solid var(--brand);border-color:transparent;background:var(--input)}
.ts td.cell input.locked{background:var(--lock);color:var(--muted);cursor:not-allowed}
.ts td.cell input.saving{border-color:var(--warn)}.ts td.cell input.saved{border-color:var(--ok)}.ts td.cell input.bad{border-color:var(--bad)}
.ts td.cell .n{position:absolute;right:4px;top:4px;width:14px;height:14px;border:0;background:none;padding:0;cursor:pointer;opacity:0;font-size:11px;line-height:14px;color:var(--muted)}
.ts td.cell:hover .n,.ts td.cell .n.has{opacity:1}.ts td.cell .n.has{color:var(--brand2)}
.ts td.cell.we{background:var(--zebra)}
.ts td.tot,.ts th.tot{text-align:center;font-weight:700;width:9%}
.ts tfoot td{font-weight:700;border-top:2px solid var(--ink);border-bottom:0;text-align:center}.ts tfoot td.rowh{text-align:left}
.ts tfoot td.grand{color:var(--brand2);font-size:15px}
.addrow{margin-top:12px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.addrow select{padding:.5rem .6rem;border:1px solid var(--line);border-radius:8px;background:var(--input);min-width:220px}
.empty{color:var(--muted);padding:20px;text-align:center}
/* notes popover */
#pop{position:absolute;z-index:20;background:var(--card);border:1px solid var(--line);border-radius:10px;box-shadow:0 10px 30px var(--shadow);padding:10px;width:300px;display:none}
#pop textarea{width:100%;height:90px;border:1px solid var(--line);border-radius:6px;padding:6px;resize:vertical}
#pop .row{display:flex;gap:6px;justify-content:flex-end;margin-top:6px}
/* month strip */
.strip{display:flex;gap:10px;flex-wrap:wrap}.strip .pill{background:var(--pill);border-radius:999px;padding:4px 12px;font-size:12.5px}.strip .pill b{color:var(--ink)}
/* admin tables */
table.adm{width:100%;border-collapse:collapse}.adm th,.adm td{border-bottom:1px solid var(--line);padding:7px 8px;text-align:left;vertical-align:middle;font-size:13px}
.adm th{font-size:11.5px;color:var(--muted);text-transform:uppercase;letter-spacing:1px}
.adm td form{display:inline}.adm .off td{color:var(--muted)}
.tag{display:inline-block;background:#eef2ff;color:#3730a3;border-radius:6px;padding:1px 7px;font-size:11.5px;font-weight:600}.tag.grey{background:#f3f4f6;color:#6b7280}
code.link{display:block;background:var(--pill);padding:8px;border-radius:6px;word-break:break-all;font-size:12px;margin-top:6px}
@media(max-width:700px){.wrap{padding:10px}.card{padding:12px}.ts th.rowh{min-width:160px}}
