:root{color-scheme:light dark;--paper: #fbfaf7;--surface: #ffffff;--surface-2: #f3f2ee;--ink: #16181d;--ink-soft: #5a5f66;--ink-faint: #6c7178;--rule: #e3e1da;--pen: #2a4a7f;--mark: #b0332a;--ok: #3b7350;--warn: #a86b1d;--radius: 10px;--tap: 44px;--on-accent: #ffffff}:root[data-theme=dark],:root:not([data-theme=light]){--dark-paper: #14161a}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--paper: #14161a;--surface: #1b1e24;--surface-2: #23272e;--ink: #e9e7e1;--ink-soft: #a2a7af;--ink-faint: #8d939c;--rule: #2c313a;--pen: #8fb0e4;--mark: #e58c80;--ok: #7fbf97;--warn: #d8a558;--on-accent: #12151a}}:root[data-theme=dark]{--paper: #14161a;--surface: #1b1e24;--surface-2: #23272e;--ink: #e9e7e1;--ink-soft: #a2a7af;--ink-faint: #8d939c;--rule: #2c313a;--pen: #8fb0e4;--mark: #e58c80;--ok: #7fbf97;--warn: #d8a558;--on-accent: #12151a}:root[data-theme=light]{color-scheme:light}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font:15px/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit;color:inherit}input,select,textarea{font-size:16px}.app{max-width:980px;margin:0 auto;padding:0 14px 96px}.top{position:sticky;top:0;z-index:20;background:var(--paper);border-bottom:1px solid var(--rule);padding:12px 0 10px;display:flex;align-items:center;gap:12px;flex-wrap:wrap}.top h1{font-size:17px;margin:0;font-weight:700;letter-spacing:-.01em}.top .sub{color:var(--ink-faint);font-size:12.5px}.spacer{flex:1}.tabs{display:flex;gap:4px;overflow-x:auto;padding:8px 0;scrollbar-width:none}.tabs::-webkit-scrollbar{display:none}.tab{border:1px solid var(--rule);background:var(--surface);color:var(--ink-soft);padding:7px 13px;border-radius:999px;white-space:nowrap;cursor:pointer}.tab[aria-selected=true]{background:var(--pen);border-color:var(--pen);color:var(--on-accent)}@media(prefers-color-scheme:dark){.tab[aria-selected=true]{color:#12151a}}.card{background:var(--surface);border:1px solid var(--rule);border-radius:var(--radius);padding:16px;margin:12px 0}.card h2{font-size:15px;margin:0 0 12px;letter-spacing:.02em}.muted{color:var(--ink-soft)}.faint{color:var(--ink-faint);font-size:13px}.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.stack{display:flex;flex-direction:column;gap:10px}.grow{flex:1;min-width:0}label.field{display:flex;flex-direction:column;gap:5px;font-size:13px;color:var(--ink-soft)}input,select,textarea{background:var(--surface);border:1px solid var(--rule);color:var(--ink);border-radius:8px;padding:9px 11px;min-height:var(--tap);width:100%}input:not([type=checkbox]):not([type=file]),select{height:var(--tap)}.row>label.field{align-self:stretch}.row>label.field>input,.row>label.field>select{margin-top:auto}.row:has(>label.field)>button{align-self:flex-end}textarea{min-height:84px;resize:vertical}input:focus-visible,select:focus-visible,textarea:focus-visible,button:focus-visible{outline:2px solid var(--pen);outline-offset:1px}button{border:1px solid var(--rule);background:var(--surface);color:var(--ink);border-radius:8px;padding:9px 14px;min-height:var(--tap);cursor:pointer}button:hover{background:var(--surface-2)}button.primary{background:var(--pen);border-color:var(--pen);color:var(--on-accent);font-weight:600}@media(prefers-color-scheme:dark){button.primary{color:#12151a}}button.primary:hover{filter:brightness(1.08)}button.ghost{background:transparent;border-color:transparent;color:var(--pen);min-height:32px;padding:4px 8px}button.small{min-height:32px;padding:4px 10px;font-size:13px}button:disabled{opacity:.5;cursor:default}.err{color:var(--mark);font-size:13.5px}.ok{color:var(--ok);font-size:13.5px}.scroller{overflow:auto;max-height:calc(100dvh - 210px);border:1px solid var(--rule);border-radius:var(--radius);background:var(--surface)}table{--head-2: 0;border-collapse:separate;border-spacing:0;width:100%;font-size:13.5px}th,td{padding:7px 9px;border-bottom:1px solid var(--rule);text-align:center;white-space:nowrap}thead th{position:sticky;top:var(--head-2, 0);background:var(--surface-2);z-index:2;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-faint);font-weight:600}th.name,td.name{text-align:left;position:sticky;left:0;background:var(--surface);z-index:3;min-width:168px;max-width:210px;overflow:hidden;text-overflow:ellipsis}thead th.name{z-index:4;background:var(--surface-2)}tbody tr:last-child td{border-bottom:none}tr.me td{background:color-mix(in srgb,var(--pen) 9%,var(--surface));font-weight:600}tr.me td.name{background:color-mix(in srgb,var(--pen) 12%,var(--surface))}td.num{font-variant-numeric:tabular-nums}.att{display:inline-block;min-width:20px;font-weight:600}.att.present{color:var(--ink-faint)}.att.late{color:var(--warn)}.att.absent{color:var(--mark)}.att.excused{color:var(--pen)}.pill{display:inline-block;padding:1px 8px;border-radius:999px;font-size:12px;font-weight:600;border:1px solid}.pill.g5,.pill.g4{color:var(--ok);border-color:color-mix(in srgb,var(--ok) 45%,transparent)}.pill.g3{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 45%,transparent)}.pill.g2{color:var(--mark);border-color:color-mix(in srgb,var(--mark) 45%,transparent)}td.cell{padding:0}td.cell input{border:none;background:transparent;text-align:center;min-height:36px;border-radius:0;padding:6px 2px;font-variant-numeric:tabular-nums}td.cell input:focus{background:color-mix(in srgb,var(--pen) 12%,var(--surface));outline:1px solid var(--pen)}td.cell.dirty input{background:color-mix(in srgb,var(--ok) 16%,var(--surface))}.list{display:flex;flex-direction:column;gap:8px}.item{display:flex;gap:12px;align-items:center;padding:11px 13px;border:1px solid var(--rule);border-radius:var(--radius);background:var(--surface)}.item .t{font-weight:600}.badge{font-size:11px;letter-spacing:.04em;text-transform:uppercase;padding:2px 7px;border-radius:4px;background:var(--surface-2);color:var(--ink-faint)}.badge.late{color:var(--mark);background:color-mix(in srgb,var(--mark) 14%,transparent)}.badge.new{color:var(--pen);background:color-mix(in srgb,var(--pen) 14%,transparent)}.att-row{display:grid;grid-template-columns:1fr auto auto;gap:10px;align-items:center;padding:8px 12px;border:1px solid var(--rule);border-radius:var(--radius);background:var(--surface)}.att-row .name{font-size:14.5px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.seg{display:flex;gap:4px}.seg button{min-height:var(--tap);min-width:var(--tap);padding:4px 6px;font-weight:600;font-size:13px}.seg button[aria-pressed=true].present{background:var(--ok);border-color:var(--ok);color:var(--on-accent)}.seg button[aria-pressed=true].late{background:var(--warn);border-color:var(--warn);color:var(--on-accent)}.seg button[aria-pressed=true].absent{background:var(--mark);border-color:var(--mark);color:var(--on-accent)}.seg button[aria-pressed=true].excused{background:var(--pen);border-color:var(--pen);color:var(--on-accent)}.sticky-save{position:fixed;left:0;right:0;bottom:0;z-index:30;background:var(--surface);border-top:1px solid var(--rule);padding:10px 14px calc(10px + env(safe-area-inset-bottom));display:flex;gap:10px;align-items:center;justify-content:center}.sticky-save .inner{width:100%;max-width:980px;display:flex;gap:8px;align-items:center}@media(max-width:560px){.sticky-save .inner>.faint{display:none}.sticky-save .inner button{flex:1;padding:9px 6px}}.summary{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(140px,1fr))}.stat{border:1px solid var(--rule);border-radius:var(--radius);padding:12px;background:var(--surface)}.stat .k{font-size:11.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--ink-faint)}.stat .v{font-size:24px;font-weight:700;font-variant-numeric:tabular-nums;margin-top:2px}.stat .n{font-size:12.5px;color:var(--ink-soft)}.empty{text-align:center;color:var(--ink-faint);padding:36px 12px}.hint{font-size:12.5px;color:var(--ink-faint)}@media(prefers-reduced-motion:no-preference){.card,.item{transition:border-color .15s ease}}.att-row .board{min-width:var(--tap);min-height:var(--tap);padding:6px 8px;font-size:13px}.att-row .board[aria-pressed=true]{background:color-mix(in srgb,var(--ok) 18%,var(--surface));border-color:var(--ok);color:var(--ok);font-weight:700}.badge.dup{background:color-mix(in srgb,var(--mark) 16%,var(--surface));color:var(--mark)}thead tr.blocks th{top:0;font-weight:600;font-size:11px;text-transform:uppercase;letter-spacing:.04em;border-bottom:2px solid var(--rule);background:var(--surface-2)}table.has-blocks{--head-2: 27px}td.cell.bad input{background:color-mix(in srgb,var(--mark) 18%,var(--surface));color:var(--mark)}.card.sub.flagged{border-color:var(--mark)}.card.sub input.bad{background:color-mix(in srgb,var(--mark) 18%,var(--surface));color:var(--mark)}.preview{display:block;margin-top:10px;width:100%;max-height:70vh;object-fit:contain;border-radius:var(--radius);background:var(--surface-2)}th.clip{max-width:96px;overflow:hidden;text-overflow:ellipsis}table.plan td{padding:4px 6px;text-align:left}table.plan input,table.plan select{width:100%;min-width:110px;padding:6px 8px}table.plan td.wide,table.plan th.wide{min-width:260px}table.plan td.num,table.plan th.num{text-align:right;min-width:34px}table.plan tr.ahead td{background:color-mix(in srgb,var(--surface-2) 45%,var(--surface))}ol.steps{margin:8px 0 0;padding-left:22px}ol.steps li{margin-bottom:8px;line-height:1.55}ol.steps code{word-break:break-all}.task{margin:6px 0 0;padding:8px 10px;border-left:2px solid var(--rule);background:var(--surface-2);border-radius:0 var(--radius) var(--radius) 0;white-space:pre-wrap;font-size:14px}
