:root{--bg:#f6f7f9;--surface:#fff;--border:#dfe3e8;--text:#1b1f24;--muted:#626c77;--accent:#1f6feb;--ok:#1a7f37;--ok-soft:#d7f0dd;--bad-soft:#fbe0e0;--warn:#9a6700;--warn-soft:#fff3cd;--radius:8px;color:var(--text);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif}*{box-sizing:border-box}body{background:var(--bg);margin:0;font-size:15px;line-height:1.5}button,input,select{font:inherit;color:inherit}button{cursor:pointer;border:1px solid var(--border);background:var(--surface);border-radius:var(--radius);padding:.45rem .9rem}button:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}button:disabled{opacity:.5;cursor:not-allowed}button.primary{background:var(--accent);border-color:var(--accent);color:#fff}button.primary:hover:not(:disabled){color:#fff;background:#1a5fd0}input,select{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);padding:.45rem .6rem}input:focus-visible,select:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.app-header{background:var(--surface);border-bottom:1px solid var(--border);z-index:10;align-items:center;gap:1.5rem;height:56px;padding:0 1.5rem;display:flex;position:sticky;top:0}.app-header .brand{font-weight:600}.app-header nav{gap:.5rem;display:flex}.app-header nav a{color:var(--muted);border-radius:var(--radius);padding:.3rem .7rem;text-decoration:none}.app-header nav a:hover{background:var(--bg);color:var(--text)}.app-header nav a.active{background:var(--bg);color:var(--accent);font-weight:500}.app-header .spacer{margin-left:auto}.app-header .who{color:var(--muted);font-size:.9rem}main{max-width:1400px;margin:0 auto;padding:1.5rem}h1{margin:0 0 1rem;font-size:1.35rem}.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1rem}.filters{flex-wrap:wrap;align-items:flex-end;gap:.75rem;margin-bottom:1rem;display:flex}.field{flex-direction:column;gap:.25rem;display:flex}.field label{color:var(--muted);font-size:.8rem}.table-wrap{overflow-x:auto}table{border-collapse:collapse;width:100%}th,td{text-align:left;border-bottom:1px solid var(--border);white-space:nowrap;padding:.5rem .7rem}th{color:var(--muted);font-size:.8rem;font-weight:600}tbody tr:hover{background:var(--bg)}.badge{border-radius:999px;padding:.1rem .5rem;font-size:.78rem;display:inline-block}.badge.open{background:var(--warn-soft);color:var(--warn)}.badge.done{background:var(--ok-soft);color:var(--ok)}.muted{color:var(--muted)}.error{background:var(--bad-soft);color:#86181d;border-radius:var(--radius);border:1px solid #f0b4b4;margin-bottom:1rem;padding:.6rem .8rem}.pager{align-items:center;gap:.75rem;margin-top:1rem;display:flex}.report table{border-collapse:separate;border-spacing:0}.report th.day{text-align:center;width:24px;padding:.3rem 0;font-size:.7rem}.report td.day{text-align:center;width:24px;padding:2px}.report td.day span{background:var(--bad-soft);border-radius:3px;height:20px;display:block}.report td.day.hit span{background:var(--ok-soft)}.report th.sticky,.report td.sticky{background:var(--surface);z-index:1;position:sticky;left:0}.report tbody tr:hover td.sticky{background:var(--bg)}.legend{align-items:center;gap:1rem;margin-bottom:.75rem;font-size:.85rem;display:flex}.legend .swatch{vertical-align:-2px;border-radius:3px;width:14px;height:14px;margin-right:.35rem;display:inline-block}.legend .swatch.hit{background:var(--ok-soft)}.legend .swatch.miss{background:var(--bad-soft)}.login-wrap{place-items:center;min-height:100vh;padding:1.5rem;display:grid}.login-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);width:100%;max-width:360px;padding:1.5rem}.login-card h1{margin-bottom:.25rem}.login-card .sub{color:var(--muted);margin:0 0 1.25rem;font-size:.9rem}.login-card .field{margin-bottom:.85rem}.login-card input{width:100%}.login-card button{width:100%;margin-top:.5rem}.badge.danger{background:var(--bad-soft);color:#86181d}dialog{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text);width:100%;max-width:min(560px,100vw - 2rem);padding:0}dialog::backdrop{background:#0006}.modal-head{border-bottom:1px solid var(--border);align-items:center;gap:.5rem;padding:.9rem 1rem;display:flex}.modal-head h2{flex:1;margin:0;font-size:1rem}.modal-head button{background:0 0;border:none;padding:0 .3rem;font-size:1.3rem;line-height:1}.modal-body{padding:1rem}.modal-actions{justify-content:flex-end;gap:.5rem;margin-top:1rem;display:flex}.form-grid{grid-template-columns:minmax(7rem,auto) 1fr;align-items:center;gap:.6rem .8rem;display:grid}.form-grid label{color:var(--muted);font-size:.85rem}.form-grid input[type=checkbox]{justify-self:start;width:auto}.form-grid select[multiple]{min-height:8rem}.row-actions{flex-wrap:wrap;justify-content:flex-end;gap:.3rem;display:flex}.row-actions button{padding:.2rem .5rem;font-size:.8rem}button.danger{color:#86181d;border-color:#f0b4b4}button.danger:hover:not(:disabled){color:#86181d;border-color:#86181d}.qr-box{border:1px solid var(--border);border-radius:var(--radius);background:#fff;flex-direction:column;align-items:center;gap:.6rem;margin-bottom:.8rem;padding:1rem;display:flex}.qr-box img{width:220px;height:220px;image-rendering:pixelated}.token{-webkit-user-select:all;user-select:all;word-break:break-all;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);padding:.7rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.95rem}
