:root{--paper: #f2eee4;--paper-2: #e8e1d4;--ink: #1c1814;--muted: #6f675c;--line: #d6cec0;--card: #fbf8f1;--calc: #9a3412;--calc-bg: #f3e4d6;--prog: #1e3a5f;--prog-bg: #dce6f0;--proj: #44403c;--proj-bg: #e7e4de;--exam: #9f1239;--exam-bg: #f8dce4;--holi: #57534e;--holi-bg: #e4e0d8;--done: #3f6212;--today: #1c1814}*{box-sizing:border-box}html,body,#root{margin:0;min-height:100%}body{font-family:IBM Plex Sans,Noto Sans TC,sans-serif;background:var(--paper);color:var(--ink)}button,select,input,textarea{font:inherit}h1,h2,.serif{font-family:"Noto Serif TC",serif}.app{max-width:1440px;margin:0 auto;padding:24px 28px 48px}.topbar{display:flex;justify-content:space-between;gap:24px;align-items:flex-end;border-bottom:1px solid var(--ink);padding-bottom:16px;margin-bottom:20px}.eyebrow{font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-bottom:6px}h1{font-size:32px;margin:0;font-weight:700;letter-spacing:-.03em}.meta{color:var(--muted);font-size:13px;margin-top:6px}.top-actions,.row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}button{background:var(--card);border:1px solid var(--ink);color:var(--ink);padding:7px 12px;cursor:pointer}button:hover{background:var(--paper-2)}button.primary{background:var(--ink);color:var(--paper)}button.ghost{border-color:transparent;background:transparent}nav.tabs{display:flex;gap:0;margin:18px 0 16px;border-bottom:1px solid var(--line)}nav.tabs button{border:0;border-bottom:2px solid transparent;background:transparent;padding:8px 14px;color:var(--muted)}nav.tabs button.active{color:var(--ink);border-bottom-color:var(--ink)}.layout{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:20px}.week-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.week-title{font-size:20px;margin:0}.grid{display:grid;grid-template-columns:72px repeat(7,minmax(0,1fr));gap:6px}.hd,.period-label,.cell{min-height:42px}.hd{font-size:12px;color:var(--muted);padding:6px 4px;text-align:center}.hd.today{color:var(--ink);font-weight:600;box-shadow:inset 0 -2px 0 var(--ink)}.period-label{font-size:12px;color:var(--muted);writing-mode:horizontal-tb;display:flex;align-items:center;justify-content:center;text-align:center;line-height:1.3}.cell{background:var(--card);border:1px dashed var(--line);min-height:168px;padding:6px;display:flex;flex-direction:column;gap:6px}.cell.drop{border-style:solid;border-color:var(--ink)}.event{border:1px solid transparent;padding:8px;cursor:grab;font-size:12px;line-height:1.35}.event:active{cursor:grabbing}.event.calculus{background:var(--calc-bg);color:var(--calc)}.event.programming{background:var(--prog-bg);color:var(--prog)}.event.project{background:var(--proj-bg);color:var(--proj)}.event.exam{background:var(--exam-bg);color:var(--exam)}.event.holiday{background:var(--holi-bg);color:var(--holi)}.event.done{opacity:.55;text-decoration:line-through;text-decoration-thickness:1px}.event .time{font-size:10px;letter-spacing:.04em;opacity:.8}.event .title{font-weight:600;margin-top:2px}.event .sub{opacity:.85;margin-top:3px}.side{display:flex;flex-direction:column;gap:14px}.card{background:var(--card);border:1px solid var(--line);padding:14px 16px}.card h2{font-size:16px;margin:0 0 10px}.countdown{display:grid;gap:8px}.cd{display:flex;justify-content:space-between;gap:8px;font-size:13px;border-bottom:1px solid var(--line);padding-bottom:6px}.cd b{font-variant-numeric:tabular-nums}.task{border-left:3px solid var(--ink);padding:8px 10px;margin-bottom:8px;font-size:13px;background:var(--paper)}.task.calculus{border-color:var(--calc)}.task.programming{border-color:var(--prog)}.task.project{border-color:var(--proj)}.task.exam{border-color:var(--exam)}.bar{height:8px;background:var(--paper-2);margin:6px 0 14px}.bar>span{display:block;height:100%;background:var(--ink)}.table{width:100%;border-collapse:collapse;font-size:13px}.table th,.table td{text-align:left;padding:8px 6px;border-bottom:1px solid var(--line);vertical-align:top}.table a{color:inherit}.filters{display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap}.filters input,.filters select,.editor input,.editor select,.editor textarea{background:var(--card);border:1px solid var(--line);padding:7px 8px;color:var(--ink)}.editor{position:fixed;right:20px;bottom:20px;width:min(380px,calc(100vw - 40px));background:var(--card);border:1px solid var(--ink);padding:16px;z-index:20}.editor h2{margin:0 0 10px;font-size:18px}.editor label{display:block;font-size:12px;color:var(--muted);margin:8px 0 4px}.editor textarea{width:100%;min-height:72px;resize:vertical}.editor .actions{display:flex;gap:8px;margin-top:12px}.hint{font-size:12px;color:var(--muted)}.empty{color:var(--muted);font-size:13px}@media(max-width:1100px){.layout{grid-template-columns:1fr}.cell{min-height:120px}}
