:root{--bg: #f3eee4;--surface: #fbf8f2;--surface-2: #ece5d8;--text: #2b2a28;--muted: #756e64;--border: #e3dacb;--brand: #3e5c6b;--brand-ink: #fbf8f2;--brand-soft: #dee6e8;--warn: #8f6a1f;--gold: #c79a3b;--warn-soft: #f2e5c8;--ok: #4f7a5a;--ok-soft: #e0eadf;--danger: #a9402a;--seal: #b5432b;--danger-soft: #f3ddd4;--course-1: #4f7a5a;--course-2: #4a5d8c;--course-3: #a0643b;--course-4: #8e6a8e;--course-5: #5f7f86;--course-6: #8c7f3a;--radius: 10px;--card-border: rgba(110, 90, 60, .08);--shadow: 0 1px 2px rgba(70, 50, 25, .06), 0 6px 16px -8px rgba(70, 50, 25, .12);--font-serif: "Noto Serif SC", "Songti SC", "STSong", "Source Han Serif SC", Georgia, serif;color-scheme:light}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg: #1b1a18;--surface: #252320;--surface-2: #2e2b27;--text: #ece6da;--muted: #a39b8e;--border: #3a3631;--brand: #93b3c0;--brand-ink: #16191b;--brand-soft: #27353b;--warn: #ddb06a;--gold: #d9a55b;--warn-soft: #3a3020;--ok: #8dbf97;--ok-soft: #22332a;--danger: #e48468;--seal: #c4513a;--danger-soft: #3e2620;--course-1: #8dbf97;--course-2: #93a6d6;--course-3: #d49a6e;--course-4: #c4a0c4;--course-5: #93b8bf;--course-6: #c9bb73;--shadow: 0 1px 2px rgba(0, 0, 0, .3);--card-border: var(--border);color-scheme:dark}}:root[data-theme=dark]{--bg: #1b1a18;--surface: #252320;--surface-2: #2e2b27;--text: #ece6da;--muted: #a39b8e;--border: #3a3631;--brand: #93b3c0;--brand-ink: #16191b;--brand-soft: #27353b;--warn: #ddb06a;--gold: #d9a55b;--warn-soft: #3a3020;--ok: #8dbf97;--ok-soft: #22332a;--danger: #e48468;--seal: #c4513a;--danger-soft: #3e2620;--course-1: #8dbf97;--course-2: #93a6d6;--course-3: #d49a6e;--course-4: #c4a0c4;--course-5: #93b8bf;--course-6: #c9bb73;--shadow: 0 1px 2px rgba(0, 0, 0, .3);--card-border: var(--border);color-scheme:dark}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:15px/1.55 -apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased;transition:background-color .3s}.page-title,.section-title,.status-greet,.tcard-title,.widget-title,.brand,.state-title,.login-lead{font-family:var(--font-serif);font-weight:600;letter-spacing:.01em}a{color:var(--brand);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3{margin:0;line-height:1.3}.muted{color:var(--muted)}.small{font-size:13px}.topbar{background:color-mix(in srgb,var(--bg) 88%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:10}.topbar-inner{max-width:1040px;margin:0 auto;padding:10px 16px;display:flex;align-items:center;justify-content:space-between;gap:12px}.topbar-right{display:flex;align-items:center;gap:12px}.brand{display:inline-flex;align-items:center;gap:8px;font-weight:700;font-size:17px;color:var(--text)}.brand:hover{text-decoration:none}.brand{gap:10px}.logo{flex:none;display:block}.theme-toggle{font-size:16px;width:30px;height:30px;display:grid;place-items:center}.login-top{display:flex;justify-content:space-between;align-items:center}.login-split{width:100%;max-width:940px;display:grid;grid-template-columns:minmax(0,1fr) 440px;gap:28px;align-items:center}.login-art{margin:0;position:relative;border-radius:18px;overflow:hidden;box-shadow:var(--shadow);aspect-ratio:1000 / 1123;max-height:82vh;background:#2d5f8e}.login-art img{display:block;width:100%;height:100%;object-fit:cover;object-position:50% 30%}.login-art figcaption{position:absolute;left:0;right:0;bottom:0;padding:18px 20px;font-family:var(--font-serif);font-size:15px;color:#f5efe2;background:linear-gradient(transparent,#0a192db3);text-shadow:0 1px 2px rgba(0,0,0,.4)}@media(max-width:860px){.login-split{grid-template-columns:1fr;max-width:440px;gap:14px}.login-art{aspect-ratio:auto;height:200px}.login-art img{object-position:45% 62%}}.brand-lg{font-size:24px}.page{max-width:1040px;margin:0 auto;padding:24px 16px 64px}.page-wide{max-width:1280px;padding-top:16px;padding-bottom:16px}.page-title{font-size:24px;margin:4px 0 20px}.section{margin-bottom:32px}.section-title{font-size:17px;margin-bottom:12px}.back{display:inline-block;margin-bottom:8px;font-size:14px}.btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:8px;padding:9px 16px;font:inherit;font-weight:600;cursor:pointer;white-space:nowrap}.btn:hover{background:var(--surface-2);text-decoration:none}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--brand);border-color:var(--brand);color:var(--brand-ink)}.btn-primary:hover:not(:disabled){background:var(--brand);filter:brightness(1.08)}.btn-ghost{background:transparent;border-color:transparent;color:var(--muted);font-weight:500}.btn-small{padding:5px 11px;font-size:13px}.input{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text);font:inherit}.input:focus{outline:2px solid var(--brand);outline-offset:-1px}.label{font-weight:600;font-size:14px}.login{min-height:100vh;display:grid;place-items:center;padding:24px 16px}.login-card{width:100%;max-width:440px;background:var(--surface);border:1px solid var(--card-border);border-radius:14px;padding:32px 28px;box-shadow:var(--shadow)}.login-lead{color:var(--muted);margin:10px 0 24px}.login-form{display:grid;gap:10px}.form-error{color:var(--danger);background:var(--danger-soft);padding:8px 12px;border-radius:8px;font-size:14px}.help{margin-top:20px;font-size:14px}.help summary{cursor:pointer;color:var(--brand);font-weight:600}.help ol{padding-left:20px;margin:10px 0 0}.privacy{margin-top:18px;padding:12px 14px;background:var(--surface-2);border-radius:10px;font-size:13px;color:var(--muted)}.privacy b{color:var(--text)}.demo-note{padding:12px 14px;background:var(--brand-soft);border-radius:10px;font-size:13px;color:var(--muted)}.demo-note b{color:var(--text)}.demo-note p{margin:4px 0 0}.privacy ul{padding-left:18px;margin:6px 0 0}.course-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px}.course-card{display:block;background:var(--surface);border:1px solid var(--card-border);border-radius:var(--radius);padding:16px;color:var(--text);box-shadow:var(--shadow);transition:border-color .15s,transform .15s}.course-card:hover{border-color:var(--brand);text-decoration:none;transform:translateY(-1px)}.course-code{display:inline-block;font-weight:700;color:var(--brand);background:var(--brand-soft);padding:1px 8px;border-radius:6px;font-size:14px}.page-title .course-code{font-size:18px;vertical-align:3px;margin-right:4px}.course-name{font-weight:600;margin:10px 0 4px}.course-meta{font-size:12px}.list{list-style:none;margin:0;padding:0;background:var(--surface);border:1px solid var(--card-border);border-radius:var(--radius);overflow:hidden}.list-row{display:flex;align-items:center;gap:12px;padding:12px 14px;border-top:1px solid var(--border)}.list-row:first-child{border-top:0}.list-main{flex:1;min-width:0}.list-title{font-weight:600;color:var(--text);overflow-wrap:anywhere}a.list-title:hover{color:var(--brand)}.list-side{text-align:right;display:grid;gap:2px;justify-items:end}.list-actions{display:flex;gap:6px;align-items:center}.kind{flex:none;width:52px;text-align:center;font-size:11px;font-weight:700;color:var(--muted);background:var(--surface-2);border-radius:6px;padding:4px 0}.pill{display:inline-block;font-size:12px;font-weight:600;padding:2px 9px;border-radius:999px;background:var(--surface-2);color:var(--muted);white-space:nowrap}.pill-warn{background:var(--warn-soft);color:var(--warn)}.pill-ok{background:var(--ok-soft);color:var(--ok)}.pill-link{color:var(--brand)}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin-bottom:20px;overflow-x:auto;scrollbar-width:none}.tab{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-bottom:2px solid transparent;padding:10px 14px;font:inherit;font-weight:600;color:var(--muted);cursor:pointer;white-space:nowrap;margin-bottom:-1px}.tab:hover{color:var(--text)}.tab-active{color:var(--brand);border-bottom-color:var(--brand)}.search{margin-bottom:16px}.folder{margin-bottom:20px}.folder-title{font-size:14px;margin-bottom:8px}.stack{display:grid;gap:10px}.card{background:var(--surface);border:1px solid var(--card-border);border-radius:var(--radius);padding:12px 16px}.card-summary{cursor:pointer;display:flex;justify-content:space-between;gap:12px;align-items:baseline;flex-wrap:wrap}.ann-text{white-space:pre-wrap;margin:12px 0;overflow-wrap:anywhere}.attachments{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}.notice{margin:0 0 12px}.state{display:flex;align-items:center;justify-content:center;gap:10px;padding:36px 16px;text-align:center;color:var(--muted);background:var(--surface);border:1px dashed var(--border);border-radius:var(--radius)}.state-title{color:var(--text);font-weight:600;margin-bottom:4px}.state-error{color:var(--danger);background:var(--danger-soft);border-style:solid;border-color:transparent;padding:14px 16px;margin-bottom:12px}.spinner{width:16px;height:16px;border:2px solid var(--border);border-top-color:var(--brand);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media(max-width:600px){.page-title{font-size:20px}.list-row{flex-wrap:wrap}.list-actions,.list-side{width:100%;justify-content:flex-start;justify-items:start;text-align:left;padding-left:64px}.list-row:not(:has(.kind)) .list-side{padding-left:0}.login-card{padding:24px 18px}}.reader-bar{max-width:1040px;margin:0 auto;padding:12px 16px 0;display:flex;gap:16px;align-items:baseline}.reader-bar .back{margin:0;flex:none}.reader-name{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.reader-tools{position:sticky;top:49px;z-index:5;display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:8px 16px;background:var(--bg);border-bottom:1px solid var(--border)}.reader-jump{display:flex;align-items:center;gap:6px;font-size:14px}.input-page{width:56px;padding:4px 8px;text-align:center}.reader-zoom,.reader-links{display:flex;align-items:center;gap:4px}.reader-scroll{height:calc(100vh - 150px);overflow:auto;padding:16px;display:flex;flex-direction:column;align-items:center;gap:12px;background:var(--surface-2)}.pdf-page{position:relative;flex:none;background:#fff;box-shadow:0 1px 4px #0000002e}.pdf-page canvas{display:block}.pdf-page .textLayer{position:absolute;top:0;right:0;bottom:0;left:0}.pdf-page-no{position:absolute;right:-36px;bottom:0;font-size:12px;color:var(--muted)}.reader-fallback{display:flex;gap:8px;justify-content:center;margin-top:14px}@media(max-width:600px){.reader-scroll{padding:8px;height:calc(100vh - 190px)}.pdf-page-no{display:none}}.course-search{margin-bottom:18px}.search-big{font-size:16px;padding:12px 14px}.index-bar{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin:8px 2px 0;font-size:13px}.skipped{flex-basis:100%;margin:4px 0 0;padding-left:18px}.search-results{margin-top:14px}.results-meta{margin-bottom:8px}.hit{padding:0}.hit-link{display:block;padding:12px 14px;color:var(--text);width:100%}.hit-link:hover{background:var(--surface-2);text-decoration:none}.hit-head{display:flex;justify-content:space-between;gap:10px;align-items:baseline}.snippet{margin-top:4px;font-size:14px;color:var(--muted);overflow-wrap:anywhere}.snippet mark{background:var(--warn-soft);color:var(--text);border-radius:3px;padding:0 2px}.text-view .notice{margin-bottom:12px}.text-page{margin-bottom:10px;scroll-margin-top:70px}.text-page-hit{border-color:var(--brand)}.review-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px;margin-bottom:28px}.review-card{background:var(--surface);border:1px solid var(--card-border);border-radius:var(--radius);padding:14px 16px;display:grid;gap:6px;align-content:start}.review-card-label{font-size:12px;font-weight:700;color:var(--muted);letter-spacing:.04em}.review-big{font-size:20px;font-weight:700}.input-date{max-width:200px;padding:6px 10px}.bar{height:8px;background:var(--surface-2);border-radius:999px;overflow:hidden}.bar-fill{height:100%;background:var(--brand);border-radius:999px;transition:width .3s}.today{margin:0;padding-left:18px;display:grid;gap:2px}.unit{padding:12px 14px;scroll-margin-top:70px}.unit-done{opacity:.6}.unit-head{display:flex;gap:10px;align-items:flex-start}.unit-check input{width:18px;height:18px;margin-top:2px;accent-color:var(--brand);cursor:pointer}.unit-main{flex:1;min-width:0}.glimpse{margin-top:4px;font-size:13px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.points{list-style:none;margin:10px 0 0;padding:0 0 0 28px;display:grid;gap:2px}.point{display:flex;gap:10px;align-items:baseline;padding:6px 8px;border-radius:8px;color:var(--text)}.point:hover{background:var(--surface-2);text-decoration:none}.point-type{flex:none;font-size:12px;font-weight:700;padding:1px 7px;border-radius:6px;background:var(--surface-2);color:var(--muted)}.point-definition{background:var(--brand-soft);color:var(--brand)}.point-theorem{background:var(--warn-soft);color:var(--warn)}.point-body{flex:1;min-width:0;font-size:14px;overflow-wrap:anywhere}.point-page{flex:none}.other-files summary{cursor:pointer}.other-files .list{margin-top:10px}@media(max-width:600px){.points{padding-left:0}.point{flex-wrap:wrap}}.panel{background:var(--surface);border:1px solid var(--card-border);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow);min-width:0}.panel>.section-title{margin-bottom:8px}.icon-btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;background:transparent;color:var(--muted);font:inherit;font-size:15px;line-height:1;padding:3px 6px;border-radius:6px;cursor:pointer}.icon-btn:hover{background:var(--surface-2);color:var(--text)}.center{text-align:center}.status-strip{display:grid;grid-template-columns:1.4fr 1fr 1.2fr;gap:16px;align-items:center;background:var(--surface);border:1px solid var(--card-border);box-shadow:var(--shadow);border-radius:14px;padding:12px 18px;margin-bottom:14px}.status-greet{font-size:20px;font-weight:700}.status-item{display:grid;gap:3px}.status-value{font-weight:700;display:flex;align-items:center;gap:6px}.status-today .bar{height:6px}.target{display:inline-flex;margin-left:auto}.dash{display:grid;grid-template-columns:264px minmax(0,1fr);gap:14px;align-items:start}.dash-side{display:grid;gap:12px}.dash-main{display:grid;gap:14px;min-width:0}.dash-bottom{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px;align-items:start}.dash-bottom .panel{padding:12px 14px}.dash-bottom .list-row{padding:9px 12px}.dash-bottom .heat-col{grid-template-rows:repeat(7,10px)}.dash-bottom .heat-cell{height:10px}.dash-section-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:8px}.dash-section-head .section-title{margin:0}.widget{background:var(--surface);border:1px solid var(--card-border);border-radius:12px;padding:12px 14px;display:grid;gap:8px;box-shadow:var(--shadow)}.dash-side .widget{background:var(--surface-2);box-shadow:none;border-color:transparent}.widget-head{display:flex;justify-content:space-between;align-items:center}.widget-title{font-weight:700;font-size:14px}.week{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}.week-day{display:grid;justify-items:center;gap:1px;padding:5px 0 4px;border-radius:8px;cursor:default}.week-name{font-size:11px;color:var(--muted)}.week-date{font-size:15px;font-weight:700}.week-today{background:var(--brand)}.week-today .week-name,.week-today .week-date{color:var(--brand-ink)}.week-dots{display:flex;gap:2px;height:6px}.dot{display:inline-block;width:6px;height:6px;border-radius:50%;flex:none}.dot-exam{background:var(--danger)}.dot-deadline{background:var(--warn)}.week-today .dot{box-shadow:0 0 0 1.5px var(--brand-ink)}.week-events{list-style:none;margin:0;padding:0;display:grid;gap:3px;font-size:12px}.week-events li{display:flex;gap:6px;align-items:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.pomo-ring{position:relative;width:132px;height:132px;margin:0 auto}.pomo-ring svg{width:100%;height:100%;transform:rotate(-90deg)}.ring-track{fill:none;stroke:var(--border);stroke-width:8}.ring-fill{fill:none;stroke:var(--gold);stroke-width:8;stroke-linecap:round;transition:stroke-dashoffset .9s linear}.ring-break{stroke:var(--ok)}.pomo-running .ring-fill{animation:breathe 4s ease-in-out infinite}@keyframes breathe{0%,to{opacity:1}50%{opacity:.55}}.task-text{transition:color .3s,opacity .3s}.task-done{opacity:.6;transition:opacity .3s}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}.pomo-ring-text{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-content:center;text-align:center}.pomo-time{font-size:28px;font-weight:700;font-variant-numeric:tabular-nums}.input-select{padding:6px 10px}.pomo-actions{display:flex;gap:4px;justify-content:center}.pomo-actions .btn-primary{min-width:72px}.pomo-presets{display:flex;gap:4px;flex-wrap:wrap;justify-content:center}.chip{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid var(--border);background:var(--surface);color:var(--muted);border-radius:999px;padding:2px 9px;font:inherit;font-size:12px;cursor:pointer}.chip-on{border-color:var(--brand);color:var(--brand);background:var(--brand-soft)}.chip:disabled{opacity:.5;cursor:not-allowed}.topbar-timer{font-weight:700;font-variant-numeric:tabular-nums;color:var(--warn);background:var(--warn-soft);padding:3px 10px;border-radius:999px;font-size:14px;white-space:nowrap}.topbar-timer:hover{text-decoration:none}.topbar-timer-break{color:var(--ok);background:var(--ok-soft)}.heat{display:flex;gap:3px}.heat-col{display:grid;grid-template-rows:repeat(7,14px);gap:3px;flex:1}.heat-cell{display:block;width:100%;height:14px;border-radius:3px;background:var(--surface-2)}.heat-1{background:color-mix(in srgb,var(--brand) 30%,var(--surface-2))}.heat-2{background:color-mix(in srgb,var(--brand) 55%,var(--surface-2))}.heat-3{background:color-mix(in srgb,var(--brand) 80%,var(--surface-2))}.heat-4{background:var(--brand)}.heat-future{opacity:.3}.recent-files{list-style:none;margin:0;padding:0;display:grid;gap:2px}.recent-file{display:flex;align-items:baseline;gap:10px;padding:5px 6px;border-radius:8px;color:var(--text);min-width:0}.recent-file>.muted{flex:none;white-space:nowrap}.recent-file:hover{background:var(--surface-2);text-decoration:none}.recent-name{flex:1;min-width:0;font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.course-strip{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px}.cchip{display:grid;gap:4px;padding:8px 12px;background:var(--surface);border:1px solid var(--card-border);border-radius:10px;color:var(--text);min-width:0;box-shadow:var(--shadow)}.cchip:hover{border-color:var(--c, var(--brand));text-decoration:none}.cchip{border-top:3px solid var(--c, var(--brand))}.cchip .course-code{color:var(--c, var(--brand));background:color-mix(in srgb,var(--c, var(--brand)) 14%,var(--surface))}.cchip .bar-fill{background:var(--c, var(--brand))}.tag-course{color:var(--c, var(--brand));background:color-mix(in srgb,var(--c, var(--brand)) 14%,var(--surface))}.cdot{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:5px;vertical-align:1px}.cchip-top{display:flex;justify-content:space-between;align-items:center;gap:6px}.cchip-top .course-code{font-size:12px}.cchip-name{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cchip-progress{display:grid;grid-template-columns:1fr auto;gap:6px;align-items:center}.cchip-progress .bar{height:5px;display:block}.cchip-progress .bar-fill{display:block}.ccard-exam{font-size:11px;color:var(--muted);white-space:nowrap}.ccard-exam-soon{color:var(--danger);font-weight:700}.todo-add{display:flex;gap:4px;align-items:center}.todo-row{display:flex;gap:10px;overflow-x:auto;scroll-snap-type:x proximity;padding-bottom:4px}.tcard{flex:0 0 calc((100% - 30px)/4);min-width:220px;height:clamp(190px,calc(100vh - 524px),320px);scroll-snap-align:start;display:flex;flex-direction:column;gap:6px;background:var(--surface);border:1px solid var(--card-border);border-radius:12px;padding:10px 12px;box-shadow:var(--shadow)}.tcard-auto{background:var(--surface-2)}.tcard-head{display:flex;align-items:center;gap:6px;min-height:26px}.tcard-title{font-weight:700;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:text}.tcard-title-input{flex:1;padding:3px 6px;font-weight:700}.tcard-menu{position:relative}.menu{position:absolute;right:0;top:100%;z-index:20;display:grid;min-width:120px;background:var(--surface);border:1px solid var(--border);border-radius:8px;box-shadow:0 6px 20px #00000040;padding:4px}.menu button{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;background:none;color:var(--text);font:inherit;font-size:13px;text-align:left;padding:6px 10px;border-radius:6px;cursor:pointer}.menu button:hover{background:var(--surface-2)}.menu .menu-danger{color:var(--danger)}.tasks{list-style:none;margin:0;padding:0;flex:1;overflow-y:auto;display:grid;align-content:start;gap:1px}.tasks-empty{padding:6px 2px}.task,.deadline{display:flex;align-items:flex-start;gap:7px;padding:5px 4px;border-radius:7px}.task:hover{background:var(--surface-2)}.task input[type=checkbox]{margin-top:3px;accent-color:var(--brand);flex:none;cursor:pointer}.task-dragging{opacity:.4}.drag-handle{flex:none;width:10px;margin-top:1px;color:var(--muted);font-size:11px;letter-spacing:-2px;cursor:grab;opacity:0;-webkit-user-select:none;user-select:none}.task:hover .drag-handle{opacity:.7}@media(hover:none){.drag-handle{display:none}}.task-main{flex:1;min-width:0;display:grid;gap:2px}.task-text{font-size:13px;overflow-wrap:anywhere;cursor:text}.task-done .task-text{color:var(--muted);text-decoration:line-through}.task-edit{padding:2px 6px;font-size:13px}.task-meta{display:flex;gap:4px;flex-wrap:wrap}.tag{font-size:11px;padding:0 6px;border-radius:4px;background:var(--brand-soft);color:var(--brand);white-space:nowrap}.tag-danger{background:var(--danger-soft);color:var(--danger)}.tag-warn{background:var(--warn-soft);color:var(--warn)}.task-actions{display:flex;flex:none;opacity:0;transition:opacity .1s}.task:hover .task-actions,.task:focus-within .task-actions{opacity:1}@media(hover:none){.task-actions{opacity:1}}.task-actions .icon-btn{padding:1px 4px;font-size:13px}.task-add{display:grid;gap:4px}.task-input{padding:6px 8px;font-size:13px}.task-opts{display:grid;grid-template-columns:1fr 1fr;gap:4px}.task-opts .input{padding:3px 6px;font-size:12px}.tcard-foot{display:flex;align-items:center;gap:8px}.tcard-foot .bar{flex:1;height:5px}.memo-text{flex:1;resize:none;border:0;background:transparent;color:var(--text);font:inherit;font-size:13px;line-height:1.6;padding:2px;outline:none}.deadline-title{color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.deadline .chip{flex:none}.pomo-task{display:flex;align-items:center;gap:4px;background:var(--surface-2);border-radius:8px;padding:4px 4px 4px 8px;font-size:12px}.pomo-task-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.topbar-task{display:inline-block;max-width:180px;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.dot-todo{background:var(--brand)}@media(max-width:960px){.dash{grid-template-columns:1fr}.dash-side{grid-template-columns:repeat(2,minmax(0,1fr));order:2}.dash-main{order:1}}@media(max-width:600px){.status-strip{grid-template-columns:1fr 1fr}.status-hello{grid-column:1 / -1}.dash{display:flex;flex-direction:column;gap:12px;align-items:stretch}.todo-section,.dash-courses{min-width:0}.topbar-task{display:none}.dash-main,.dash-side,.dash-bottom{display:contents}.dash-courses{order:1}.todo-section{order:2}.pomodoro{order:3}.widget-week{order:4}.widget-recent{order:5}.widget-heat{order:6}.course-strip{grid-template-columns:repeat(2,minmax(0,1fr))}.tcard{flex-basis:82%;height:280px}.topbar-user{display:none}}.paper-filters{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:16px}.paper-filters .chip{padding:4px 12px;font-size:13px}.paper-filters .num{margin-left:2px;opacity:.75}.paper-year{margin-bottom:20px}.paper-year .section-title{margin-bottom:8px}.paper-kind{width:44px}.paper-final{background:var(--danger-soft);color:var(--danger)}.paper-midterm{background:var(--warn-soft);color:var(--warn)}.paper-quiz{background:var(--brand-soft);color:var(--brand)}.paper-homework{background:var(--ok-soft);color:var(--ok)}.paper-actions{display:flex;gap:6px;flex:none}.paper-answer{color:var(--ok);border-color:color-mix(in srgb,var(--ok) 40%,var(--border))}.topbar-link{font-size:14px;color:var(--muted);white-space:nowrap}.topbar-link:hover{color:var(--brand);text-decoration:none}.page-head{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}.page-head .page-title{margin-bottom:8px}.contribute-lead{margin:0 0 16px}.contribute-form,.admin-gate{display:grid;gap:14px;padding:20px}.admin-gate{max-width:400px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px}.field{display:grid;gap:6px}.check-row{display:flex;gap:8px;align-items:flex-start;font-size:14px}.check-row input{margin-top:3px;flex:none}.contribute-done{padding:24px;display:grid;gap:12px;justify-items:start}.paper-head{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}.paper-head .notice{margin:0}.paper-head+*{margin-top:12px}.login-links{margin:14px 0 0;text-align:center}.contributors{list-style:none;margin:0;padding:0;display:grid;gap:10px}.contributor{display:flex;align-items:center;gap:14px}.contributor-rank{width:28px;text-align:center;font-weight:700;color:var(--gold);font-size:18px}.contributor-main{flex:1;min-width:0;display:grid;gap:4px}.contributor-courses{display:flex;flex-wrap:wrap;gap:4px}.contributor-count{color:var(--muted);white-space:nowrap}.contributor-count b{color:var(--text);font-size:18px}.review-card-admin{display:grid;gap:8px;margin-bottom:12px}.review-head{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}.review-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.review-fields{grid-template-columns:repeat(4,minmax(0,1fr))}.review-reason{flex:1;min-width:160px;padding:5px 10px}@media(max-width:600px){.form-grid,.review-fields{grid-template-columns:1fr}.topbar-link{display:none}}:root{--decor-sky-filter: invert(1) grayscale(1);--decor-sky-blend: multiply;--decor-sky-opacity: .34;--decor-side: url(/decor/decor-megalosaurus.jpg);--decor-side-blend: multiply;--decor-side-opacity: .5;--decor-side-filter: none}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--decor-sky-filter: none;--decor-sky-blend: screen;--decor-sky-opacity: .5;--decor-side: url(/decor/decor-iguanodon.jpg);--decor-side-blend: screen;--decor-side-opacity: .6;--decor-side-filter: invert(1) sepia(.25)}}:root[data-theme=dark]{--decor-sky-filter: none;--decor-sky-blend: screen;--decor-sky-opacity: .5;--decor-side: url(/decor/decor-iguanodon.jpg);--decor-side-blend: screen;--decor-side-opacity: .6;--decor-side-filter: invert(1) sepia(.25)}.status-strip{position:relative;overflow:hidden;isolation:isolate}.status-strip:before{content:"";position:absolute;inset:0 0 0 auto;width:62%;z-index:-1;pointer-events:none;background:url(/decor/decor-meteors.jpg) 50% 30% / cover;filter:var(--decor-sky-filter);mix-blend-mode:var(--decor-sky-blend);opacity:var(--decor-sky-opacity);-webkit-mask-image:linear-gradient(to right,transparent,#000 55%);mask-image:linear-gradient(to right,transparent,#000 55%)}@media(min-width:961px){.dash-side{align-self:stretch;grid-template-rows:auto auto minmax(0,1fr)}.dash-side:after{content:"";min-height:0;pointer-events:none;background:var(--decor-side) 50% 100% / contain no-repeat;filter:var(--decor-side-filter);mix-blend-mode:var(--decor-side-blend);opacity:var(--decor-side-opacity)}}
