*,:before,:after{box-sizing:border-box}html,body{margin:0;padding:0}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:none;padding:0}ul{margin:0;padding:0;list-style:none}h1,h2,h3,p{margin:0}:root{--surface:#fbf3f5;--surface-card:#fff;--surface-card-soft:#fcf6f8;--surface-overlay:#2b24306b;--ink:#2b2430;--ink-muted:#8a7b85;--ink-faint:#b9acb3;--border:#f0dee3;--border-soft:#f5e7eb;--accent:#c6577a;--accent-ink:#fff;--accent-soft:#f6dce3;--accent-shadow:#c6577a29;--course-epibio:#8d7fbf;--course-epibio-soft:#e9e5f6;--status-todo:#b9adb2;--status-todo-soft:#efe7e9;--status-doing:#db9a3e;--status-doing-soft:#fbead2;--status-done:#5fa06e;--status-done-soft:#deeee1;--ring-track:var(--border);--radius-card:20px;--radius-chip:999px;--radius-input:12px}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--surface:#201a23;--surface-card:#2a222e;--surface-card-soft:#302731;--surface-overlay:#0a080c9e;--ink:#f5edf0;--ink-muted:#b4a5ad;--ink-faint:#75676f;--border:#3c333f;--border-soft:#362e39;--accent:#e38aa6;--accent-ink:#2b1620;--accent-soft:#4a2e38;--accent-shadow:#e38aa62e;--course-epibio:#b0a4e0;--course-epibio-soft:#38314e;--status-todo:#8f8388;--status-todo-soft:#362e33;--status-doing:#efb36e;--status-doing-soft:#493a26;--status-done:#86c293;--status-done-soft:#29392d;--ring-track:var(--border)}}@media (prefers-reduced-motion:reduce){*{transition-duration:.001ms!important;animation-duration:.001ms!important}}body{background:var(--surface);color:var(--ink);-webkit-font-smoothing:antialiased;min-height:100dvh;font-family:Work Sans,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}.display{font-family:Fredoka,Work Sans,sans-serif}.wrap{max-width:640px;margin:0 auto;padding:20px 16px 64px}#lock{z-index:50;background:radial-gradient(60% 50% at 15% 8%, var(--accent-soft), transparent 60%), radial-gradient(50% 45% at 90% 92%, var(--course-epibio-soft), transparent 60%), var(--surface);justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}#lock.hidden{display:none}.lock-card{background:var(--surface-card);border:1px solid var(--border-soft);border-radius:var(--radius-card);text-align:center;width:100%;max-width:360px;box-shadow:0 24px 60px -20px var(--accent-shadow);padding:32px 28px 28px}.lock-mark{background:linear-gradient(145deg, var(--accent), var(--course-epibio));border-radius:14px;width:44px;height:44px;margin:0 auto 16px}.lock-card h1{letter-spacing:-.01em;font-size:21px;font-weight:600}.lock-card p.sub{color:var(--ink-muted);margin-top:6px;font-size:14px}.lock-form{flex-direction:column;gap:10px;margin-top:22px;display:flex}.lock-form label{text-align:left;color:var(--ink-muted);font-size:12px;font-weight:600}.lock-form input{border-radius:var(--radius-input);border:1.5px solid var(--border);background:var(--surface);width:100%;color:var(--ink);padding:12px 14px;font-size:15px}.lock-form input::placeholder{color:var(--ink-faint)}.lock-form input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none}.btn-primary{border-radius:var(--radius-chip);background:var(--accent);color:var(--accent-ink);margin-top:4px;padding:12px 18px;font-size:15px;font-weight:600;transition:transform .15s}.btn-primary:active{transform:scale(.98)}.btn-primary:disabled{opacity:.6}.lock-error{color:var(--accent);margin-top:12px;font-size:12.5px;font-weight:600;display:none}.lock-error.show{display:block}.lock-note{color:var(--ink-faint);margin-top:18px;font-size:12px;line-height:1.5}header.top{flex-direction:column;gap:18px;margin-bottom:22px;display:flex}.brand-row{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:12px;display:flex}.brand-heading{color:var(--ink);letter-spacing:-.01em;font-family:Fredoka,sans-serif;font-size:22px;font-weight:700}.stats-row{gap:10px;display:flex}.stat-chip{background:var(--surface-card);border:1px solid var(--border-soft);border-radius:16px;flex:1;align-items:center;gap:10px;padding:10px 12px;display:flex}.ring{--pct:0;background:conic-gradient(var(--ring-color) calc(var(--pct) * 1%), var(--ring-track) 0);border-radius:50%;flex:none;justify-content:center;align-items:center;width:40px;height:40px;display:flex}.ring:after{content:"";background:var(--surface-card);border-radius:50%;width:30px;height:30px}.ring span{font-variant-numeric:tabular-nums;color:var(--ring-color);font-size:11px;font-weight:700;position:relative}.stat-chip .stat-label{color:var(--ink);font-size:13px;font-weight:700}.controls{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;display:flex}.segmented{background:var(--surface-card-soft);border:1px solid var(--border-soft);border-radius:var(--radius-chip);padding:3px;display:inline-flex}.segmented button{border-radius:var(--radius-chip);color:var(--ink-muted);padding:7px 14px;font-size:13px;font-weight:600}.segmented button.active{background:var(--surface-card);color:var(--ink);box-shadow:0 1px 3px #00000014}.week-nav{align-items:center;gap:8px;display:flex}.week-nav button{border:1px solid var(--border);width:30px;height:30px;color:var(--ink-muted);border-radius:50%;justify-content:center;align-items:center;display:flex}.week-nav button:disabled{opacity:.35;cursor:default}.week-nav .week-label{text-align:center;min-width:118px;font-size:13px;font-weight:600}.week-nav .week-range{color:var(--ink-muted);font-size:11px;font-weight:400;display:block}.week-divider{align-items:baseline;gap:8px;margin:28px 0 12px;font-family:Fredoka,sans-serif;font-size:15px;font-weight:600;display:flex}.week-divider .rng{color:var(--ink-muted);font-family:Work Sans,sans-serif;font-size:12px;font-weight:400}.week-divider:after{content:"";background:var(--border);flex:1;height:1px}.list>.week-divider:first-child{margin-top:4px}.cards{flex-direction:column;gap:10px;margin-top:4px;display:flex}.card{background:var(--surface-card);border:1px solid var(--border-soft);border-radius:var(--radius-card);border-left:3px solid var(--card-accent,var(--accent));padding:16px}.card-head{justify-content:space-between;align-items:center;gap:10px;margin-bottom:6px;display:flex}.tag{letter-spacing:.03em;border-radius:var(--radius-chip);padding:3px 9px;font-size:11px;font-weight:700}.tag.inco{background:var(--accent-soft);color:var(--accent)}.tag.epibio{background:var(--course-epibio-soft);color:var(--course-epibio)}.tag.other{background:var(--status-todo-soft);color:var(--ink-muted)}.card-date{color:var(--ink-muted);font-variant-numeric:tabular-nums;font-size:12px}.card h3.topic{font-family:Fredoka,sans-serif;font-size:16px;font-weight:600;line-height:1.3}.card .meta{color:var(--ink-muted);margin-top:2px;font-size:12px}.item-list{flex-direction:column;gap:9px;margin-top:12px;display:flex}.item-row{align-items:center;gap:10px;display:flex}.item-label{flex:1;font-size:13.5px}.item-row .expand-toggle{color:var(--ink-muted);font-variant-numeric:tabular-nums;white-space:nowrap;align-items:center;gap:4px;font-size:11.5px;display:flex}.item-row .expand-toggle .chevron{transition:transform .15s}.item-row .expand-toggle .chevron.open{transform:rotate(90deg)}.detail-list{flex-direction:column;gap:8px;max-height:0;margin-left:34px;transition:max-height .22s;display:flex;overflow:hidden}.detail-list.open{max-height:600px;margin-top:9px}.detail-row{align-items:center;gap:9px;display:flex}.detail-row .item-label{color:var(--ink-muted);font-size:12.5px}.status-pill{border:2px solid var(--status-todo);border-radius:50%;flex:none;justify-content:center;align-items:center;width:24px;height:24px;transition:background-color .15s,border-color .15s,transform .1s;display:flex}.status-pill:active{transform:scale(.9)}.status-pill.small{border-width:1.5px;width:18px;height:18px}.status-pill svg{width:12px;height:12px}.status-pill.small svg{width:9px;height:9px}.status-pill .dot{background:var(--status-doing);border-radius:50%;width:8px;height:8px}.status-pill.small .dot{width:6px;height:6px}.status-pill[data-status=todo]{border-color:var(--status-todo);background:0 0}.status-pill[data-status=doing]{border-color:var(--status-doing);background:var(--status-doing-soft)}.status-pill[data-status=done]{border-color:var(--status-done);background:var(--status-done-soft);color:var(--status-done)}.empty-state{text-align:center;color:var(--ink-muted);padding:40px 20px;font-size:13.5px}footer.note{border-top:1px solid var(--border);color:var(--ink-faint);margin-top:36px;padding-top:18px;font-size:12px;line-height:1.6}
