:root{color-scheme:light;--bg: #f6f6f3;--surface: #ffffff;--surface-2: #fbfbf9;--surface-3: #f1f1ee;--border: #e8e8e3;--border-strong: #dadad3;--text: #1b1b19;--text-2: #67675f;--text-3: #9a9a90;--accent: #4f46e5;--accent-hover: #4338ca;--accent-soft: #eef0fe;--accent-border: #d8dafb;--overdue: #d4322b;--overdue-soft: #fdeceb;--soon: #c2710a;--soon-soft: #fdf2e2;--ok: #16895a;--ok-soft: #e8f5ee;--todo: #8b8b82;--doing: #4f46e5;--done: #16895a;--r-sm: 7px;--r-md: 10px;--r-lg: 14px;--r-xl: 20px;--shadow-sm: 0 1px 2px rgba(20,20,18,.05), 0 1px 1px rgba(20,20,18,.04);--shadow-md: 0 4px 14px rgba(20,20,18,.07), 0 1px 3px rgba(20,20,18,.05);--shadow-lg: 0 18px 50px rgba(20,20,18,.16), 0 4px 14px rgba(20,20,18,.08);--font: "Hanken Grotesk", system-ui, -apple-system, sans-serif;--mono: "JetBrains Mono", ui-monospace, "SF Mono", monospace;--toast-bg: #1b1b19;--toast-fg: #ffffff;--cal-ev-fg: #1b1b19;--maxw: 1180px}:root[data-theme=dark]{color-scheme:dark;--bg: #131419;--surface: #1c1d23;--surface-2: #212228;--surface-3: #2b2c34;--border: #2c2d35;--border-strong: #3c3d46;--text: #ecebe7;--text-2: #a4a39b;--text-3: #74746c;--accent: #8b85f5;--accent-hover: #9c97f7;--accent-soft: #26264a;--accent-border: #393a68;--overdue: #f1665e;--overdue-soft: #3a1f1e;--soon: #e2974c;--soon-soft: #38260f;--ok: #4dbf8c;--ok-soft: #14291f;--todo: #8b8b82;--doing: #8b85f5;--done: #4dbf8c;--toast-bg: #2f3039;--toast-fg: #f4f3f0;--cal-ev-fg: #f4f3f0;--shadow-sm: 0 1px 2px rgba(0,0,0,.35), 0 1px 1px rgba(0,0,0,.25);--shadow-md: 0 4px 14px rgba(0,0,0,.45), 0 1px 3px rgba(0,0,0,.3);--shadow-lg: 0 18px 50px rgba(0,0,0,.6), 0 4px 14px rgba(0,0,0,.4)}:root[data-theme=dark] .badge-subject{background:color-mix(in oklab,var(--sb-color) 22%,var(--surface));color:color-mix(in oklab,var(--sb-color) 70%,white)}:root[data-theme=dark] .cal-event{background:color-mix(in oklab,var(--ev-color) 24%,var(--surface));color:var(--text);border-left-color:var(--ev-color)}:root[data-theme=dark] .selectbox{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M2 4l4 4 4-4' stroke='%23a4a39b' stroke-width='1.6' fill='none' stroke-linecap='round'/%3E%3C/svg%3E")}:root[data-theme=dark] .sem-select:after{border-color:var(--text-2)}:root[data-theme=dark] ::-webkit-scrollbar-thumb{background:#3c3d46}*{box-sizing:border-box}html,body{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:var(--font);font-size:15px;line-height:1.45;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}button{cursor:pointer}::selection{background:var(--accent-soft)}::-webkit-scrollbar{width:11px;height:11px}::-webkit-scrollbar-thumb{background:#d4d4cc;border-radius:20px;border:3px solid var(--bg)}::-webkit-scrollbar-thumb:hover{background:#c2c2b8}.mono{font-family:var(--mono);font-feature-settings:"tnum" 1}#root{min-height:100vh}.app{display:flex;flex-direction:column;min-height:100vh}.topbar{position:sticky;top:0;z-index:40;background:#f6f6f3d1;-webkit-backdrop-filter:saturate(160%) blur(12px);backdrop-filter:saturate(160%) blur(12px);border-bottom:1px solid var(--border)}:root[data-theme=dark] .topbar{background:#131419d9}.topbar-inner{max-width:var(--maxw);margin:0 auto;padding:13px 22px;display:flex;align-items:center;gap:16px}.brand{display:flex;align-items:center;gap:11px;flex-shrink:0}.brand-mark{width:30px;height:30px;border-radius:8px;background:var(--accent);display:grid;place-items:center;color:#fff;box-shadow:var(--shadow-sm)}.brand-mark svg{width:17px;height:17px}.brand-title{font-weight:700;font-size:16px;letter-spacing:-.01em;white-space:nowrap}.brand-sub{font-size:11.5px;color:var(--text-3);margin-top:-2px;letter-spacing:.02em;white-space:nowrap}.topbar-spacer{flex:1}.sem-select{position:relative}.sem-select select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--r-md);padding:8px 32px 8px 13px;font-weight:600;font-size:13.5px;min-width:172px;box-shadow:var(--shadow-sm);cursor:pointer}.sem-select:after{content:"";position:absolute;right:12px;top:50%;width:7px;height:7px;border-right:1.8px solid var(--text-2);border-bottom:1.8px solid var(--text-2);transform:translateY(-65%) rotate(45deg);pointer-events:none}.btn{display:inline-flex;align-items:center;gap:7px;border:1px solid transparent;border-radius:var(--r-md);padding:8px 14px;font-weight:600;font-size:13.5px;white-space:nowrap;transition:background .14s,border-color .14s,transform .05s}.btn:active{transform:translateY(1px)}.btn-primary{background:var(--accent);color:#fff;box-shadow:var(--shadow-sm)}.btn-primary:hover{background:var(--accent-hover)}.btn-ghost{background:var(--surface);border-color:var(--border-strong);color:var(--text);box-shadow:var(--shadow-sm)}.btn-ghost:hover{background:var(--surface-2);border-color:var(--text-3)}.btn-subtle{background:transparent;color:var(--text-2)}.btn-subtle:hover{background:var(--surface-3);color:var(--text)}.btn svg{width:15px;height:15px}.btn-sm{padding:5px 10px;font-size:12.5px}.btn-icon{padding:7px}.btn-icon svg{width:16px;height:16px}.viewnav{border-bottom:1px solid var(--border);background:var(--surface)}.viewnav-inner{max-width:var(--maxw);margin:0 auto;padding:0 22px;display:flex;gap:2px;overflow-x:auto;scrollbar-width:none}.viewnav-inner::-webkit-scrollbar{display:none}.tab{position:relative;background:none;border:none;padding:13px 14px 12px;font-weight:600;font-size:13.5px;color:var(--text-2);white-space:nowrap;display:flex;align-items:center;gap:7px;transition:color .12s}.tab svg{width:16px;height:16px;opacity:.8}.tab:hover{color:var(--text)}.tab.active{color:var(--accent)}.tab.active:after{content:"";position:absolute;left:8px;right:8px;bottom:-1px;height:2px;background:var(--accent);border-radius:2px 2px 0 0}.tab .pill{font-family:var(--mono);font-size:10.5px;background:var(--surface-3);color:var(--text-2);padding:1px 6px;border-radius:20px;font-weight:600}.tab.active .pill{background:var(--accent-soft);color:var(--accent)}.main{flex:1;max-width:var(--maxw);margin:0 auto;width:100%;padding:24px 22px 96px}.view-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:18px;flex-wrap:wrap}.view-head>div{flex:1;min-width:0}.view-title{font-size:22px;font-weight:700;letter-spacing:-.02em}.view-desc{font-size:13.5px;color:var(--text-2);margin-top:2px}.filterbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:18px}.chip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--border-strong);background:var(--surface);border-radius:20px;padding:5px 11px;font-size:12.5px;font-weight:600;color:var(--text-2);transition:all .12s}.chip:hover{border-color:var(--text-3)}.chip.active{background:var(--accent);color:#fff;border-color:var(--accent)}.chip .dot{width:8px;height:8px;border-radius:50%}.chip-x{margin-left:2px;opacity:.6}.spacer-grow{flex:1}.search{display:flex;align-items:center;gap:7px;background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--r-md);padding:6px 11px;min-width:180px}.search svg{width:15px;height:15px;color:var(--text-3);flex-shrink:0}.search input{border:none;background:none;outline:none;width:100%;font-size:13.5px}.task{position:relative;display:flex;align-items:flex-start;gap:13px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:14px 15px;box-shadow:var(--shadow-sm);transition:box-shadow .14s,border-color .14s,transform .05s}.task:hover{box-shadow:var(--shadow-md);border-color:var(--border-strong)}.task:before{content:"";position:absolute;left:0;top:13px;bottom:13px;width:3px;border-radius:3px;background:var(--subject-color, var(--border-strong))}.task.done{opacity:.62}.task.done .task-title{text-decoration:line-through;text-decoration-color:var(--text-3)}.check{flex-shrink:0;width:21px;height:21px;border-radius:7px;border:1.8px solid var(--border-strong);background:var(--surface);margin-top:1px;display:grid;place-items:center;transition:all .13s}.check:hover{border-color:var(--accent)}.check svg{width:13px;height:13px;color:#fff;opacity:0;transform:scale(.6);transition:all .13s}.check.checked{background:var(--ok);border-color:var(--ok)}.check.checked svg{opacity:1;transform:scale(1)}.check.doing{border-color:var(--doing);background:var(--accent-soft)}.check.doing:after{content:"";width:8px;height:8px;border-radius:50%;background:var(--doing)}.task-body{flex:1;min-width:0}.task-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.task-title{font-weight:600;font-size:14.5px;letter-spacing:-.005em}.task-desc{font-size:13px;color:var(--text-2);margin-top:3px}.task-meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:9px;font-size:12px;color:var(--text-2)}.task-meta .m{display:inline-flex;align-items:center;gap:5px}.task-meta svg{width:13px;height:13px;opacity:.75}.task-links{display:flex;gap:8px;margin-top:9px;flex-wrap:wrap}.task-actions{display:flex;gap:2px;flex-shrink:0;opacity:0;transition:opacity .12s}.task:hover .task-actions{opacity:1}@media (hover: none){.task-actions{opacity:1}}.badge{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:700;letter-spacing:.02em;padding:2.5px 8px;border-radius:20px;text-transform:uppercase}.badge .dot{width:7px;height:7px;border-radius:50%}.badge-subject{background:var(--sb-soft);color:var(--sb-color)}.badge-type{background:var(--surface-3);color:var(--text-2)}.badge-prio-high{background:var(--overdue-soft);color:var(--overdue)}.badge-prio-medium{background:var(--soon-soft);color:var(--soon)}.badge-prio-low{background:var(--surface-3);color:var(--text-2)}.due{display:inline-flex;align-items:center;gap:5px;font-family:var(--mono);font-size:11.5px;font-weight:600;padding:2px 8px;border-radius:20px}.due svg{width:12px;height:12px}.due-overdue{background:var(--overdue-soft);color:var(--overdue)}.due-soon{background:var(--soon-soft);color:var(--soon)}.due-normal{background:var(--surface-3);color:var(--text-2)}.due-done{background:var(--ok-soft);color:var(--ok)}.linkpill{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:600;white-space:nowrap;color:var(--accent);background:var(--accent-soft);border:1px solid var(--accent-border);border-radius:var(--r-sm);padding:3px 9px;text-decoration:none}.linkpill:hover{background:#e4e7fd}.linkpill svg{width:12px;height:12px}.tasklist{display:flex;flex-direction:column;gap:9px}.group{margin-bottom:26px}.group-head{display:flex;align-items:center;gap:10px;margin-bottom:11px}.group-title{font-weight:700;font-size:14px;letter-spacing:-.01em}.group-count{font-family:var(--mono);font-size:11.5px;color:var(--text-3)}.group-line{flex:1;height:1px;background:var(--border)}.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:13px;margin-bottom:26px}.stat{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:16px 17px;box-shadow:var(--shadow-sm)}.stat-num{font-size:30px;font-weight:700;letter-spacing:-.03em;line-height:1}.stat-label{font-size:12.5px;color:var(--text-2);margin-top:7px;font-weight:600}.stat.accent .stat-num{color:var(--accent)}.stat.danger .stat-num{color:var(--overdue)}.stat.warn .stat-num{color:var(--soon)}.stat.ok .stat-num{color:var(--ok)}.dash-grid{display:grid;grid-template-columns:1.3fr 1fr;gap:20px;align-items:start}.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow-sm);overflow:hidden}.panel-head{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid var(--border)}.panel-title{font-weight:700;font-size:14px}.panel-body{padding:12px;display:flex;flex-direction:column;gap:8px}.mini{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:var(--r-md);transition:background .12s;cursor:pointer}.mini:hover{background:var(--surface-2)}.mini-bar{width:3px;align-self:stretch;border-radius:3px;background:var(--subject-color, var(--border-strong))}.mini-body{flex:1;min-width:0}.mini-title{font-weight:600;font-size:13.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mini-sub{font-size:11.5px;color:var(--text-2);margin-top:1px}.progress-row{display:flex;flex-direction:column;gap:13px}.prog-top{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:6px}.prog-name{font-weight:600;font-size:13px;display:flex;align-items:center;gap:7px}.prog-val{font-family:var(--mono);font-size:11.5px;color:var(--text-2)}.prog-track{height:7px;border-radius:20px;background:var(--surface-3);overflow:hidden}.prog-fill{height:100%;border-radius:20px;transition:width .4s ease}.cal-head{display:flex;align-items:center;gap:12px;margin-bottom:14px}.cal-month{font-size:18px;font-weight:700;letter-spacing:-.01em;min-width:180px}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:var(--border);border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden}.cal-dow{background:var(--surface-2);text-align:center;padding:9px 0;font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--text-3)}.cal-cell{background:var(--surface);min-height:104px;padding:7px;display:flex;flex-direction:column;gap:4px}.cal-cell.other{background:var(--surface-2)}.cal-cell.other .cal-date{color:var(--text-3)}.cal-date{font-family:var(--mono);font-size:12px;font-weight:600;color:var(--text-2);align-self:flex-start;padding:1px 5px;border-radius:6px}.cal-cell.today .cal-date{background:var(--accent);color:#fff}.cal-event{font-size:11px;font-weight:600;padding:2px 6px;border-radius:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;border-left:3px solid var(--ev-color, var(--accent));background:var(--ev-soft, var(--accent-soft));color:var(--cal-ev-fg)}.cal-event.done{opacity:.5;text-decoration:line-through}.cal-more{font-size:10.5px;color:var(--text-3);font-weight:600;padding-left:4px}.cal-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-left:auto}.cal-legend{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin:14px 0 0;font-size:12px;color:var(--text-2)}.cal-legend .li{display:inline-flex;align-items:center;gap:6px}.legend-task{width:13px;height:13px;border-radius:3px;border-left:3px solid var(--accent);background:var(--accent-soft)}.legend-class{width:13px;height:13px;border-radius:50%;background:var(--text-2)}.cal-class{display:flex;align-items:center;gap:5px;font-size:10.5px;font-weight:600;padding:2px 6px;border-radius:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;background:color-mix(in oklab,var(--ev-color) 14%,var(--surface));color:var(--text)}.cal-class .cdot{width:7px;height:7px;border-radius:50%;background:var(--ev-color);flex-shrink:0}.cal-class .ctime{font-family:var(--mono);color:var(--text-2);font-weight:600}.board{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;align-items:start}.col{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-lg);display:flex;flex-direction:column;min-height:120px}.col.dragover{border-color:var(--accent);background:var(--accent-soft)}.col-head{display:flex;align-items:center;gap:8px;padding:12px 14px;font-weight:700;font-size:13.5px}.col-head .dot{width:9px;height:9px;border-radius:50%}.col-count{font-family:var(--mono);font-size:11px;color:var(--text-3);margin-left:auto}.col-body{padding:0 10px 12px;display:flex;flex-direction:column;gap:8px}.kcard{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);padding:11px 12px;box-shadow:var(--shadow-sm);cursor:grab;border-left:3px solid var(--subject-color, var(--border-strong))}.kcard:active{cursor:grabbing}.kcard.dragging{opacity:.4}.kcard-title{font-weight:600;font-size:13.5px}.kcard-meta{display:flex;align-items:center;gap:7px;margin-top:8px;flex-wrap:wrap}.empty{text-align:center;padding:64px 20px;color:var(--text-3)}.empty-icon{width:52px;height:52px;margin:0 auto 16px;color:var(--border-strong)}.empty-title{font-size:16px;font-weight:700;color:var(--text-2)}.empty-sub{font-size:13.5px;margin-top:5px}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;background:#1b1b1966;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);display:grid;place-items:center;padding:20px;animation:fade .15s ease}@keyframes fade{0%{opacity:0}}.modal{background:var(--surface);border-radius:var(--r-xl);box-shadow:var(--shadow-lg);width:100%;max-width:560px;max-height:90vh;display:flex;flex-direction:column;animation:pop .18s cubic-bezier(.2,.8,.3,1)}@keyframes pop{0%{opacity:0;transform:translateY(10px) scale(.98)}}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:18px 20px 14px;border-bottom:1px solid var(--border)}.modal-title{font-weight:700;font-size:17px;letter-spacing:-.01em}.modal-body{padding:18px 20px;overflow-y:auto}.modal-foot{display:flex;align-items:center;gap:10px;padding:14px 20px;border-top:1px solid var(--border)}.field{margin-bottom:15px}.field-row{display:grid;grid-template-columns:1fr 1fr;gap:13px}.field-row-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:13px}label.lbl{display:block;font-size:12px;font-weight:700;color:var(--text-2);margin-bottom:6px;letter-spacing:.01em}.input,.textarea,.selectbox{width:100%;background:var(--surface-2);border:1px solid var(--border-strong);border-radius:var(--r-md);padding:9px 11px;font-size:14px;outline:none;transition:border-color .12s,box-shadow .12s}.input:focus,.textarea:focus,.selectbox:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);background:var(--surface)}.textarea{resize:vertical;min-height:62px;line-height:1.5}.selectbox{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M2 4l4 4 4-4' stroke='%2367675f' stroke-width='1.6' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 11px center;padding-right:30px}.seg{display:inline-flex;background:var(--surface-3);border-radius:var(--r-md);padding:3px;gap:2px}.seg button{border:none;background:none;padding:6px 13px;border-radius:7px;font-weight:600;font-size:13px;color:var(--text-2);transition:all .12s}.seg button.on{background:var(--surface);color:var(--text);box-shadow:var(--shadow-sm)}.seg button.on[data-v=high]{color:var(--overdue)}.seg button.on[data-v=low]{color:var(--ok)}.help{font-size:11.5px;color:var(--text-3);margin-top:6px}.toggle{display:inline-flex;align-items:center;gap:9px;cursor:pointer;font-size:13px;font-weight:600;color:var(--text-2)}.toggle input{display:none}.toggle-track{width:38px;height:22px;border-radius:20px;background:var(--border-strong);position:relative;transition:background .15s;flex-shrink:0}.toggle-track:after{content:"";position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:var(--shadow-sm);transition:transform .15s}.toggle input:checked+.toggle-track{background:var(--accent)}.toggle input:checked+.toggle-track:after{transform:translate(16px)}.form-divider{display:flex;align-items:center;gap:10px;margin:20px 0 15px}.form-divider:after{content:"";flex:1;height:1px;background:var(--border)}.form-divider span{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-3)}.day-picker{display:flex;gap:6px}.day-btn{width:38px;height:38px;border-radius:9px;border:1px solid var(--border-strong);background:var(--surface-2);font-weight:700;font-size:13px;color:var(--text-2);transition:all .12s}.day-btn:hover{border-color:var(--text-3)}.day-btn.on{background:var(--accent);border-color:var(--accent);color:#fff}.swatches{display:flex;gap:8px;flex-wrap:wrap}.swatch{width:26px;height:26px;border-radius:8px;border:2px solid transparent;box-shadow:var(--shadow-sm);transition:transform .1s}.swatch:hover{transform:scale(1.08)}.swatch.on{border-color:var(--text);box-shadow:0 0 0 2px var(--surface),0 0 0 4px var(--text)}.toasts{position:fixed;bottom:22px;left:50%;transform:translate(-50%);z-index:80;display:flex;flex-direction:column;gap:9px;align-items:center;pointer-events:none}.toast{pointer-events:auto;display:flex;align-items:center;gap:11px;background:var(--toast-bg);color:var(--toast-fg);border-radius:var(--r-md);padding:11px 14px;box-shadow:var(--shadow-lg);font-size:13.5px;font-weight:600;animation:toastin .25s cubic-bezier(.2,.8,.3,1);max-width:420px}@keyframes toastin{0%{opacity:0;transform:translateY(14px)}}.toast svg{width:17px;height:17px;flex-shrink:0}.toast a,.toast button.tlink{color:#c7d2fe;font-weight:700;text-decoration:none;background:none;border:none;padding:0;white-space:nowrap;cursor:pointer}.toast a:hover{text-decoration:underline}.fab{display:none;position:fixed;right:18px;bottom:18px;z-index:50;width:54px;height:54px;border-radius:50%;background:var(--accent);color:#fff;border:none;box-shadow:var(--shadow-lg)}.fab svg{width:24px;height:24px}.course-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px}.course-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow-sm);overflow:hidden;display:flex;flex-direction:column;border-top:3px solid var(--subject-color, var(--accent));transition:box-shadow .14s}.course-card:hover{box-shadow:var(--shadow-md)}.course-top{padding:15px 16px 14px;flex:1;position:relative}.course-head{margin-bottom:13px;padding-right:52px}.course-code{display:inline-flex;align-items:center;gap:3px;font-size:11px;font-weight:600;color:var(--text-3);letter-spacing:.02em}.course-code svg{width:11px;height:11px;margin-right:-1px}.course-name{font-size:16.5px;font-weight:700;letter-spacing:-.015em;margin-top:2px}.credit-badge{position:absolute;top:15px;right:16px;display:inline-flex;align-items:baseline;gap:2px;background:var(--sb-soft);color:var(--sb-color);font-size:16px;font-weight:700;padding:5px 10px;border-radius:var(--r-md)}.credit-badge small{font-size:9.5px;font-weight:700;opacity:.8}.course-rows{display:flex;flex-direction:column;gap:8px;width:100%}.course-row{display:flex;align-items:flex-start;gap:9px;font-size:13px;color:var(--text);width:100%}.course-row svg{width:15px;height:15px;color:var(--text-3);flex-shrink:0;margin-top:2px}.course-row span{flex:1;min-width:0}.course-row .muted{color:var(--text-3);font-style:italic}.course-foot{display:flex;align-items:center;justify-content:space-between;padding:10px 12px 10px 16px;border-top:1px solid var(--border);background:var(--surface-2)}.course-stats{display:flex;gap:14px;font-size:12.5px;color:var(--text-2)}.course-stats b{color:var(--text);font-family:var(--mono)}.cstat{display:inline-flex;align-items:center;gap:4px}.course-meta-strip{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}.course-links{display:flex;flex-wrap:wrap;gap:7px;margin-top:12px}.course-note{font-size:11.5px;color:var(--text-3);margin-top:10px;display:flex;gap:7px;align-items:flex-start}.course-note svg{width:13px;height:13px;flex-shrink:0;margin-top:1px}.join-pill{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;white-space:nowrap;color:#fff;background:var(--subject-color, var(--accent));border-radius:var(--r-sm);padding:5px 10px;text-decoration:none}.join-pill:hover{filter:brightness(1.06)}.join-pill svg{width:13px;height:13px}.date-pill{display:inline-flex;align-items:center;gap:5px;white-space:nowrap;font-size:11.5px;font-weight:600;font-family:var(--mono);color:var(--text-2);background:var(--surface-3);border-radius:20px;padding:3px 9px}.date-pill svg{width:12px;height:12px;opacity:.7}.section-head{display:flex;align-items:center;gap:10px;margin:34px 0 14px}.section-head>svg{width:19px;height:19px;color:var(--text-2);flex-shrink:0}.section-head .ttl{font-size:17px;font-weight:700;letter-spacing:-.01em;white-space:nowrap}.section-head .ln{flex:1;height:1px;background:var(--border)}.updated{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--text-3);padding:5px 10px;border-radius:20px;background:var(--surface-3);white-space:nowrap;flex-shrink:0}.updated svg{width:13px;height:13px}.updated .mono{color:var(--text-2);font-weight:600}.app-footer{max-width:var(--maxw);margin:0 auto;width:100%;padding:0 22px 26px;display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12px;color:var(--text-3)}.app-footer .sep{width:3px;height:3px;border-radius:50%;background:var(--text-3);opacity:.6}.menu-wrap{position:relative}.menu{position:absolute;right:0;top:calc(100% + 6px);background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--r-md);box-shadow:var(--shadow-lg);padding:6px;min-width:240px;z-index:70}.menu-item{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:none;border:none;padding:9px 10px;border-radius:var(--r-sm);font-size:13.5px;font-weight:600;color:var(--text)}.menu-item:hover{background:var(--surface-3)}.menu-item svg{width:16px;height:16px;color:var(--text-2)}.menu-item.danger{color:var(--overdue)}.menu-sep{height:1px;background:var(--border);margin:5px 4px}.menu-label{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--text-3);padding:8px 10px 4px}.login-screen{min-height:100vh;display:grid;place-items:center;background:var(--bg);padding:24px}.login-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-xl);box-shadow:var(--shadow-lg);padding:40px;width:100%;max-width:400px;display:flex;flex-direction:column;gap:20px}.login-brand{display:flex;align-items:center;gap:14px}.login-brand .brand-mark{width:40px;height:40px;border-radius:11px}.login-brand .brand-mark svg{width:22px;height:22px}.login-brand .brand-title{font-size:19px}.login-desc{font-size:14px;color:var(--text-2);line-height:1.6;margin:0}.btn-google{display:flex;align-items:center;justify-content:center;gap:12px;width:100%;padding:12px 20px;background:var(--surface);border:1.5px solid var(--border-strong);border-radius:var(--r-md);font-size:14.5px;font-weight:600;color:var(--text);box-shadow:var(--shadow-sm);transition:background .14s,box-shadow .14s;cursor:pointer}.btn-google:hover{background:var(--surface-2);box-shadow:var(--shadow-md)}.btn-google:disabled{opacity:.6;cursor:not-allowed}.btn-google svg{width:20px;height:20px;flex-shrink:0}.login-error{font-size:13px;color:var(--overdue);background:var(--overdue-soft);border-radius:var(--r-sm);padding:10px 12px;margin:0}.login-hint{font-size:12px;color:var(--text-3);text-align:center;margin:0}.login-spinner{display:inline-block;width:18px;height:18px;border:2px solid var(--border-strong);border-top-color:var(--accent);border-radius:50%;animation:spin .7s linear infinite;flex-shrink:0}@keyframes spin{to{transform:rotate(360deg)}}@media (max-width: 860px){.stat-grid{grid-template-columns:repeat(2,1fr)}.dash-grid,.board,.field-row,.field-row-3{grid-template-columns:1fr}}@media (max-width: 620px){body{font-size:14.5px}.topbar-inner{padding:11px 15px;gap:10px}.brand-sub{display:none}.main{padding:18px 15px 90px}.add-btn-text{display:none}.btn-primary.add-main{padding:8px}.fab{display:grid;place-items:center}.cal-cell{min-height:70px}.cal-event{font-size:10px}.stat-num{font-size:25px}.viewnav-inner{padding:0 15px}.updated{display:none}}
