:root{--bg: #f2f5f3;--surface: #ffffff;--sunk: #e8edea;--ink: #15201b;--muted: #5a6862;--line: #d8e0dc;--accent: #1d5a46;--accent-ink: #ffffff;--accent-soft: #dfece5;--sami-top: #2b7a5f;--warn: #a65f0a;--warn-soft: #faebd5;--bad: #ae3434;--bad-soft: #f6e0de;--ok: #2c7a4c;--lesson-bar: #9aa8a2;--c0: #2e6fb0;--c1: #b0472e;--c2: #2c8a62;--c3: #8a5ab0;--c4: #b08a1f;--c5: #2b8a9a;--f-display: "Frank Ruhl Libre", "David Libre", Georgia, serif;--f-body: "Assistant", "Segoe UI", Arial, sans-serif;--r: 14px;--shadow: 0 1px 2px rgb(20 40 30 / .06), 0 4px 14px rgb(20 40 30 / .05);--nav-h: 66px;color-scheme:light}@media(prefers-color-scheme:dark){:root{--bg: #0e1412;--surface: #161f1b;--sunk: #1c2723;--ink: #e5ece8;--muted: #97a59f;--line: #2a3631;--accent: #6fc4a2;--accent-ink: #0e1412;--accent-soft: #1d3229;--sami-top: #8fd6b9;--warn: #e5a653;--warn-soft: #3a2c17;--bad: #e88181;--bad-soft: #3c2020;--ok: #71c690;--lesson-bar: #4d5a55;--c0: #6fa6de;--c1: #e08b72;--c2: #6cc49a;--c3: #b996de;--c4: #d9b95a;--c5: #66c2d0;--shadow: 0 1px 2px rgb(0 0 0 / .3);color-scheme:dark}}*{box-sizing:border-box}html,body{margin:0}body{background:var(--bg);color:var(--ink);font-family:var(--f-body);font-size:15px;line-height:1.5;-webkit-tap-highlight-color:transparent}a{color:var(--accent)}[hidden]{display:none!important}.ltr{direction:ltr;unicode-bidi:isolate}.num{font-variant-numeric:tabular-nums}.muted{color:var(--muted)}.small{font-size:13px}.app{min-height:100dvh}main.screen{max-width:760px;margin:0 auto;padding:20px 16px calc(var(--nav-h) + 28px + env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:16px}.screen-head{display:flex;justify-content:space-between;align-items:flex-end;gap:12px}.screen-head .kicker{font-size:13px;color:var(--muted);font-weight:600}h1{font-family:var(--f-display);font-weight:700;font-size:30px;line-height:1.1;margin:0}h2{font-family:var(--f-display);font-weight:700;font-size:20px;margin:0}h3{font-size:13px;font-weight:700;color:var(--muted);letter-spacing:.04em;margin:0 0 6px}nav.tabs{position:fixed;bottom:0;inset-inline:0;z-index:20;height:calc(var(--nav-h) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);background:var(--surface);border-top:1px solid var(--line);display:grid;grid-template-columns:repeat(4,minmax(0,1fr))}nav.tabs a{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;text-decoration:none;color:var(--muted);font-size:12px;font-weight:600;position:relative}nav.tabs a.on{color:var(--accent);font-weight:700}nav.tabs .badge{position:absolute;top:6px;inset-inline-end:calc(50% - 22px);background:var(--bad);color:#fff;font-size:10.5px;font-weight:700;border-radius:9px;min-width:18px;height:18px;padding:0 4px;display:flex;align-items:center;justify-content:center}.topbar{display:none}@media(min-width:820px){:root{--nav-h: 0px}.topbar{display:flex;position:sticky;top:0;z-index:20;background:var(--surface);border-bottom:1px solid var(--line)}.topbar .in{max-width:1080px;margin:0 auto;width:100%;padding:0 16px;display:flex;align-items:center;gap:22px;height:60px}.topbar .brand{display:flex;align-items:center;gap:8px;font-family:var(--f-display);font-weight:700;font-size:22px;text-decoration:none;color:var(--ink)}nav.tabs{position:static;height:60px;background:none;border:0;display:flex;gap:4px;padding:0;flex:1}nav.tabs a{flex-direction:row;font-size:15px;padding:0 12px;gap:6px;border-bottom:2.5px solid transparent}nav.tabs a.on{border-bottom-color:var(--accent)}nav.tabs a svg{width:18px;height:18px}nav.tabs .badge{position:static}.mobile-only{display:none!important}}@media(max-width:819px){.desktop-only{display:none!important}}button,.btn{font:inherit;font-weight:600;border:1px solid var(--line);background:var(--surface);color:var(--ink);border-radius:10px;padding:8px 14px;min-height:40px;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;justify-content:center;gap:6px;line-height:1.2}button:hover,.btn:hover{border-color:var(--muted)}button.primary,.btn.primary{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}button.ghost,.btn.ghost{border-color:transparent;background:transparent;color:var(--muted)}button.ghost:hover{color:var(--ink);background:var(--sunk)}button.danger{color:var(--bad)}button.small,.btn.small{min-height:34px;padding:5px 11px;font-size:13.5px}button.icon{width:44px;height:44px;padding:0;border-radius:22px}button.fab{width:44px;height:44px;padding:0;border-radius:22px;background:var(--accent);color:var(--accent-ink);border:0}button:disabled{opacity:.5;cursor:default}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}input,select,textarea{font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:9px 11px;width:100%;min-height:42px}textarea{resize:vertical;min-height:80px}input[type=checkbox],input[type=radio]{width:auto;min-height:0;accent-color:var(--accent)}label.f{display:flex;flex-direction:column;gap:4px;font-size:13px;font-weight:600;color:var(--muted);min-width:0}label.row-check{display:flex;gap:8px;align-items:center;font-weight:600}.fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px}form.stack,.stack{display:flex;flex-direction:column;gap:14px}.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.spread{display:flex;justify-content:space-between;align-items:center;gap:10px}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:14px}.card.tight{padding:4px 14px}.list>*+*{border-top:1px solid var(--line)}.empty{border:1.5px dashed var(--line);border-radius:var(--r);padding:20px;text-align:center;color:var(--muted)}.tag{font-size:12px;font-weight:700;padding:1px 8px;border-radius:6px;background:var(--accent-soft);color:var(--accent);white-space:nowrap}.tag.warn{background:var(--warn-soft);color:var(--warn)}.tag.bad{background:var(--bad-soft);color:var(--bad)}.tag.gray{background:var(--sunk);color:var(--muted)}.dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex:none}.stripe{width:4px;align-self:stretch;border-radius:2px;flex:none}.chip{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600;padding:2px 9px;border-radius:99px;background:var(--sunk);color:var(--ink);white-space:nowrap;text-decoration:none}.meta{font-size:12.5px;color:var(--muted)}.sami{display:flex;gap:10px;align-items:flex-start}.sami-face{flex:none}.sami .bubble{background:var(--surface);border:1px solid var(--line);border-radius:14px;border-start-start-radius:4px;padding:10px 14px;font-size:14.5px;min-width:0}.check{width:30px;height:30px;min-height:30px;padding:0;border-radius:9px;border:2px solid var(--line);background:var(--surface);color:transparent;flex:none}.check.on{background:var(--ok);border-color:var(--ok);color:#fff}.next{background:var(--accent);color:var(--accent-ink);border-radius:16px;padding:16px;display:flex;flex-direction:column;gap:8px}.next .k{font-size:12.5px;font-weight:700;opacity:.85}.next .t{font-family:var(--f-display);font-size:21px;font-weight:700;line-height:1.2}.next .s{font-size:13.5px;opacity:.92}.next .acts{display:flex;gap:8px}.next .acts button{flex:1;min-height:44px}.next .acts .solid{background:var(--accent-ink);color:var(--accent);border:0}.next .acts .line{background:transparent;color:var(--accent-ink);border:1px solid color-mix(in srgb,var(--accent-ink) 50%,transparent)}.tl-row{display:grid;grid-template-columns:50px 1fr auto;gap:10px;padding:10px 0;align-items:center}.tl-row .tm{font-weight:700;font-size:14px;font-variant-numeric:tabular-nums}.tl-row .tm small{display:block;font-weight:500;color:var(--muted);font-size:12px}.tl-row .body{display:flex;gap:10px;align-items:center;min-width:0}.tl-row .body>div{min-width:0}.tl-row .t{font-weight:600}.tl-row.lesson .body{background:var(--accent-soft);border-radius:10px;padding:7px 10px}.tl-row.lesson .t{font-weight:700}.tl-row.due .t,.tl-row.due .tm{color:var(--bad)}.tl-row.past{opacity:.5}.tl-row.done .t{text-decoration:line-through;color:var(--muted)}.tl-row.skipped{opacity:.45}.load{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px;align-items:end;height:120px;position:relative}.load .col{display:flex;flex-direction:column;justify-content:flex-end;height:100%;gap:2px;border:0;background:none;padding:0;min-height:0;border-radius:4px}.load .col.sel{outline:2px solid var(--accent);outline-offset:3px}.load .col.past{opacity:.45}.load .seg{border-radius:3px;min-height:0}.load .cap{position:absolute;inset-inline:0;border-top:1.5px dashed var(--warn);pointer-events:none}.load .cap span{position:absolute;inset-inline-start:0;top:-18px;font-size:11px;font-weight:700;color:var(--warn)}.loadx{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px;margin-top:8px;text-align:center;font-size:12px;color:var(--muted)}.loadx .today{color:var(--accent);font-weight:700}.legend{display:flex;gap:14px;margin-top:10px;font-size:12px;color:var(--muted);flex-wrap:wrap}.legend span{display:inline-flex;align-items:center;gap:5px}.legend i{width:10px;height:10px;border-radius:2px;display:inline-block}.course-head{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:16px;display:flex;gap:12px}.course-head h1{font-size:26px}.countdown{text-align:center;flex:none}.countdown b{display:block;font-family:var(--f-display);font-size:32px;line-height:1;color:var(--accent)}.bar{display:flex;height:12px;border-radius:6px;overflow:hidden;gap:2px;background:var(--sunk)}.track{height:10px;border-radius:5px;background:var(--sunk);overflow:hidden}.track>div{height:100%;background:var(--accent);border-radius:5px}.att{display:grid;grid-template-columns:repeat(auto-fill,minmax(26px,1fr));gap:4px;margin-top:8px}.att button{min-height:26px;height:26px;padding:0;border-radius:6px;border:0;font-size:10.5px;font-weight:700;background:var(--accent-soft);color:var(--accent)}.att button.miss{background:var(--bad-soft);color:var(--bad)}.att button.future{background:var(--sunk);color:var(--muted);cursor:default}.pill{font-size:12.5px;font-weight:700;padding:4px 12px;border-radius:99px;border:0;min-height:32px}.pill.s0{background:var(--sunk);color:var(--muted)}.pill.s1{background:var(--warn-soft);color:var(--warn)}.pill.s2{background:var(--accent-soft);color:var(--accent)}.exam-hero{border-radius:var(--r);padding:16px;color:#fff;display:flex;justify-content:space-between;align-items:flex-end;gap:12px}.exam-hero .countdown b{color:#fff;font-size:40px}.update{display:flex;flex-direction:column;gap:6px}.update.unseen{border-inline-start:4px solid var(--accent)}.strike{text-decoration:line-through;color:var(--muted)}.scrim{position:fixed;top:0;right:0;bottom:0;left:0;background:#0a140f73;z-index:40;display:flex;align-items:flex-end;justify-content:center}.sheet{background:var(--surface);width:100%;max-width:640px;max-height:92dvh;border-radius:18px 18px 0 0;display:flex;flex-direction:column;padding-bottom:env(safe-area-inset-bottom)}.sheet header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px 4px}.sheet-body{padding:8px 16px 20px;overflow-y:auto;flex:1 1 auto;min-height:0}.sheet-foot{flex:none;display:flex;gap:8px;flex-wrap:wrap;align-items:center;padding:10px 16px 12px;border-top:1px solid var(--line);background:var(--surface)}.sheet-foot .end{margin-inline-start:auto}@media(min-width:820px){.scrim{align-items:center}.sheet{border-radius:18px}}.swatches{display:flex;gap:10px;flex-wrap:wrap}.swatches button{width:32px;height:32px;min-height:32px;padding:0;border-radius:50%;border:3px solid transparent}.swatches button.on{border-color:var(--ink)}.lesson-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:8px;padding:10px;border:1px solid var(--line);border-radius:10px;align-items:end}.toast{position:fixed;bottom:calc(var(--nav-h) + 16px + env(safe-area-inset-bottom));left:50%;transform:translate(-50%);background:var(--ink);color:var(--bg);padding:10px 16px;border-radius:10px;font-weight:600;z-index:50;max-width:calc(100% - 32px)}.banner{border-radius:10px;padding:10px 14px;font-weight:600;background:var(--warn-soft);color:var(--warn)}.banner.bad{background:var(--bad-soft);color:var(--bad)}.banner.ok{background:var(--accent-soft);color:var(--accent)}.auth{max-width:420px;margin:7vh auto;padding:0 16px 40px;display:flex;flex-direction:column;gap:18px}.auth .logo{display:flex;flex-direction:column;align-items:center;gap:4px}.auth h1{font-size:36px}.seg{display:inline-flex;background:var(--sunk);border-radius:12px;padding:3px;gap:3px;width:100%}.seg button{flex:1;border:0;background:transparent;color:var(--muted);min-height:40px}.seg button.on{background:var(--surface);color:var(--ink);box-shadow:var(--shadow)}.skel{height:120px;border-radius:var(--r);background:linear-gradient(90deg,var(--surface) 0%,var(--sunk) 50%,var(--surface) 100%);background-size:200% 100%}@media(prefers-reduced-motion:no-preference){.skel{animation:shimmer 1.2s linear infinite}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.toast{animation:up .2s ease-out}@keyframes up{0%{opacity:0;transform:translate(-50%,8px)}}}table.simple{width:100%;border-collapse:collapse}table.simple td,table.simple th{text-align:start;padding:8px 4px;border-top:1px solid var(--line);vertical-align:middle}table.simple th{font-size:13px;color:var(--muted);border-top:0}button.open{border:0;background:none;padding:0;min-height:0;border-radius:0;justify-content:flex-start;text-align:start;font-weight:inherit;color:inherit;width:100%}button.open:hover .t{text-decoration:underline;text-underline-offset:3px}dl.facts{display:grid;grid-template-columns:auto 1fr;gap:6px 14px;margin:0}dl.facts dt{color:var(--muted);font-size:13.5px}dl.facts dd{margin:0;font-weight:600}ul.plain{list-style:none;padding:0;margin:0;display:grid;gap:4px}button.linkcard{display:grid;gap:2px;justify-items:start;text-align:start;font-weight:400;width:100%}.update .acts{display:flex;gap:6px;flex-wrap:wrap}
