:root{color-scheme:light;--font-ui: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", "Noto Sans CJK SC", sans-serif, "Apple Color Emoji", "Segoe UI Emoji";--font-display: ui-serif, "Songti SC", STSong, "Hiragino Mincho ProN", "Yu Mincho", "Noto Serif CJK SC", SimSun, serif;--bg: #f2dfe2;--bg-accent-1: rgba(202, 91, 120, .25);--bg-accent-2: rgba(145, 174, 135, .11);--surface: rgba(255, 253, 249, .86);--surface-solid: #fffdfa;--surface-subtle: #f1ebe4;--schedule-surface-rest: rgba(255, 255, 252, .18);--schedule-surface-soft: rgba(255, 255, 252, .32);--schedule-surface-near: rgba(255, 255, 252, .6);--schedule-surface-today: rgba(255, 255, 252, .96);--block-warm: #f1dddc;--block-green: #e5ead8;--block-blue: #dfe7ef;--block-violet: #e8e1ee;--fiddler-bg: #35414b;--fiddler-bg-previous: #4a3d48;--fiddler-fg: #fffaf5;--text-strong: #292a27;--text: #464640;--text-muted: #77746d;--text-faint: #96928a;--border-soft: rgba(68, 62, 55, .08);--accent: #b9777d;--accent-on: #ffffff;--danger: #a43f4b;--scrim: rgba(42, 38, 34, .18);--toast-bg: rgba(42, 41, 37, .94);--toast-text: #ffffff;--shadow-1: 0 7px 20px rgba(62, 51, 40, .055);--shadow-2: 0 14px 38px rgba(62, 51, 40, .085);--shadow-3: 0 24px 68px rgba(50, 43, 36, .18);--shadow-bar: 0 -12px 34px rgba(62, 51, 40, .1);--time-w: 24px;--grid-gap: 4px;--bottom-bar-h: 72px;--course-row-h: 152px;--ease-standard: cubic-bezier(.2, .8, .2, 1);--duration-fast: .15s;--duration-base: .22s}:root[data-theme=dark]{color-scheme:dark;--bg: #1a1116;--bg-accent-1: rgba(184, 76, 108, .21);--bg-accent-2: rgba(116, 151, 104, .09);--surface: rgba(31, 32, 30, .86);--surface-solid: #20211f;--surface-subtle: #292a27;--schedule-surface-rest: rgba(4, 4, 4, .18);--schedule-surface-soft: rgba(4, 4, 4, .34);--schedule-surface-near: rgba(4, 4, 4, .64);--schedule-surface-today: rgba(4, 4, 4, .96);--block-warm: #3d3031;--block-green: #30372c;--block-blue: #2c343c;--block-violet: #35303b;--fiddler-bg: #7f898f;--fiddler-bg-previous: #8d8189;--fiddler-fg: #171616;--text-strong: #f1eee8;--text: #d1cec8;--text-muted: #aaa69e;--text-faint: #817e77;--border-soft: rgba(255, 247, 238, .07);--accent: #d19aa0;--accent-on: #241a1c;--danger: #e18a94;--scrim: rgba(0, 0, 0, .38);--toast-bg: rgba(238, 235, 228, .94);--toast-text: #262724;--shadow-1: 0 7px 20px rgba(0, 0, 0, .14);--shadow-2: 0 14px 38px rgba(0, 0, 0, .22);--shadow-3: 0 24px 68px rgba(0, 0, 0, .42);--shadow-bar: 0 -12px 34px rgba(0, 0, 0, .26)}*{box-sizing:border-box}html,body,#app{height:100%}html{background:var(--bg);-webkit-text-size-adjust:100%;text-size-adjust:100%}body{width:100%;max-width:100vw;min-width:0;margin:0;overflow:hidden;-webkit-user-select:none;user-select:none;color:var(--text);background:radial-gradient(circle at 8% 4%,var(--bg-accent-1),transparent 28%),radial-gradient(circle at 92% 84%,var(--bg-accent-2),transparent 28%),var(--bg);font-family:var(--font-ui);transition:background-color var(--duration-base) var(--ease-standard),color var(--duration-base) var(--ease-standard)}button,select,input{font:inherit}select,input{-webkit-user-select:auto;user-select:auto}button{-webkit-tap-highlight-color:transparent}button:disabled{cursor:default;opacity:.42}button:focus-visible,select:focus-visible,input:focus-visible,[tabindex]:focus-visible{outline:0;box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 28%,transparent)}.application-layer,.app{width:100vw;max-width:100vw;min-width:0;height:100vh;height:100dvh;overflow:hidden}.page{width:100%;max-width:100vw;min-width:0;height:100vh;height:100dvh;overflow-x:hidden;overflow-x:clip;overflow-y:auto;overscroll-behavior-y:contain;padding:14px 0 calc(32px + var(--bottom-bar-h) + env(safe-area-inset-bottom))}.shell{width:100%;max-width:100%;min-width:0;min-height:100%;display:flex;flex-direction:column;margin:0 auto}.topline{display:flex;align-items:center;justify-content:center;padding:8px 16px 12px;text-align:center}.class-summary{color:var(--text-strong);font-family:var(--font-display);font-size:16px;line-height:1.35;letter-spacing:.055em;font-weight:600}.date-nav{display:flex;align-items:center;justify-content:center;padding:8px 16px 16px}.date-button{width:40px;height:40px;flex:0 0 40px;display:grid;place-items:center;border:0;border-radius:14px;color:var(--fiddler-fg);background:var(--fiddler-bg);box-shadow:var(--shadow-1);cursor:pointer;transition:transform var(--duration-fast) var(--ease-standard),filter var(--duration-fast) var(--ease-standard)}.date-button.previous-button{background:var(--fiddler-bg-previous)}.date-button:hover:not(:disabled){filter:brightness(1.04)}.date-button:active:not(:disabled){transform:translateY(1px) scale(.985)}.date-button svg{width:20px;height:20px;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.date-text{width:160px;min-width:160px;max-width:160px;flex:0 0 160px;border-radius:16px;text-align:center;overflow:hidden;cursor:pointer;touch-action:manipulation}.date-main{color:var(--text-strong);font-family:var(--font-display);font-size:30px;letter-spacing:.04em;white-space:nowrap;font-weight:650}.date-week{margin-top:4px;color:var(--text-muted);font-size:12px;letter-spacing:.025em;white-space:nowrap}.week-stage{position:relative;width:100%;min-width:0;flex:1 0 auto;display:flex;align-items:stretch;overflow:visible;touch-action:pan-y pinch-zoom;perspective:1200px}.week-card{width:100%;min-width:0;min-height:100%;transform-origin:center 72%;will-change:transform}.week-card-current{position:relative;flex:1 0 auto;z-index:2}.week-card-target{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:none}.week-stage.is-animating .week-card{transition:transform var(--duration-base) var(--ease-standard),opacity var(--duration-base) var(--ease-standard)}.week-stage.is-dragging{cursor:grabbing;-webkit-user-select:none;user-select:none}.timetable{width:100%;min-width:0;min-height:100%;display:flex;flex-direction:column}.notice-strip{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin:0 12px 10px}.notice-strip span{padding:6px 11px;border-radius:999px;background:var(--block-warm);color:var(--text);font-size:12px;box-shadow:var(--shadow-1)}.schedule-card{min-height:0;flex:1 0 auto;display:flex;flex-direction:column;background:var(--schedule-surface-rest);box-shadow:var(--shadow-2);overflow:hidden;animation:schedule-card-enter .3s var(--ease-standard) both;backdrop-filter:blur(18px) saturate(1.02);-webkit-backdrop-filter:blur(18px) saturate(1.02)}@keyframes schedule-card-enter{0%{opacity:0;transform:translateY(5px) scale(.995)}to{opacity:1;transform:translateY(0) scale(1)}}.schedule-grid{width:100%;min-width:0;display:grid;grid-template-columns:var(--time-w) repeat(var(--day-count),minmax(0,1fr));grid-template-rows:42px repeat(var(--session-count),var(--course-row-h));gap:var(--grid-gap);padding:6px 0;position:relative}.corner{grid-column:1;grid-row:1;background:transparent}.day-head,.time-cell{display:flex;align-items:center;justify-content:center;background:transparent;color:var(--text);font-family:var(--font-display);font-weight:500}.day-head{position:relative;z-index:1;min-width:0;flex-direction:column;color:var(--text-strong);font-size:15px;font-weight:600;letter-spacing:.035em;white-space:nowrap}.day-head small{margin-top:2px;color:var(--text-muted);font-family:var(--font-ui);font-size:11px;font-weight:500;letter-spacing:0}.time-cell{color:var(--text);font-size:14px;font-weight:560;line-height:1;letter-spacing:.055em;writing-mode:vertical-rl;text-orientation:upright;white-space:nowrap}.course-cell{position:relative;z-index:1;min-width:0;min-height:0;display:grid;grid-auto-rows:minmax(0,1fr);gap:3px}.course-tile{--course-bg-1: #eadfda;--course-bg-2: #e2d4ce;--course-ink: #211f1c;--course-meta: #45413b;--course-pattern: #625b53;--course-bg-1: color-mix(in oklab, var(--course-base) 25%, #fffdf8);--course-bg-2: color-mix(in oklab, var(--course-base) 34%, #fff8f1);--course-ink: color-mix(in oklab, var(--course-base) 14%, #171714);--course-meta: color-mix(in oklab, var(--course-base) 20%, #34322e);--course-pattern: color-mix(in oklab, var(--course-base) 42%, #3f3b36);position:relative;min-width:0;overflow:hidden;padding:8px 6px 7px;border:0;border-radius:11px;color:var(--course-ink);background:linear-gradient(145deg,var(--course-bg-1),var(--course-bg-2));isolation:isolate;cursor:pointer;transition:transform var(--duration-fast) var(--ease-standard),background var(--duration-base) var(--ease-standard),color var(--duration-base) var(--ease-standard)}.course-tile:focus-visible{outline:0;box-shadow:inset 0 0 0 3px color-mix(in srgb,var(--course-ink) 24%,transparent)}.course-tile:active{transform:scale(.985)}.course-tile:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;pointer-events:none;background:var(--course-pattern);opacity:.115;-webkit-mask-image:var(--pattern-mask);mask-image:var(--pattern-mask);-webkit-mask-size:var(--pattern-size);mask-size:var(--pattern-size);-webkit-mask-repeat:repeat;mask-repeat:repeat}:root[data-theme=dark] .course-tile{--course-bg-1: #30312d;--course-bg-2: #252622;--course-ink: #f5f0e8;--course-meta: #ddd7ce;--course-pattern: #c7c0b7;--course-bg-1: color-mix(in oklab, var(--course-base) 24%, #252622);--course-bg-2: color-mix(in oklab, var(--course-base) 32%, #1c1d1a);--course-ink: color-mix(in oklab, var(--course-base) 10%, #f8f4ed);--course-meta: color-mix(in oklab, var(--course-base) 16%, #e1dbd2);--course-pattern: color-mix(in oklab, var(--course-base) 42%, #f3ede5)}.course-content{position:relative;z-index:1;width:100%;min-width:0;display:flex;flex-direction:column;align-items:stretch}.course-field-scroll{width:100%;min-width:0;overflow:hidden;contain:paint}.course-field-track{width:100%;min-width:100%;transform:translateZ(0);transform-origin:left top}.course-field-scroll.is-marquee .course-field-track{will-change:transform}.course-field-scroll.has-hidden-left{-webkit-mask-image:linear-gradient(to right,transparent 0,#000 10px,#000 100%);mask-image:linear-gradient(to right,transparent 0,#000 10px,#000 100%)}.course-field-scroll.has-hidden-right{-webkit-mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 10px),transparent 100%);mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 10px),transparent 100%)}.course-field-scroll.has-hidden-left.has-hidden-right{-webkit-mask-image:linear-gradient(to right,transparent 0,#000 10px,#000 calc(100% - 10px),transparent 100%);mask-image:linear-gradient(to right,transparent 0,#000 10px,#000 calc(100% - 10px),transparent 100%)}.course-teacher-scroll{margin-top:6px}.course-title,.course-teacher,.course-room{display:block;overflow-wrap:anywhere;word-break:normal;white-space:normal}.course-title{color:var(--course-ink);font-size:16px;font-weight:720;line-height:1.3;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}.course-teacher,.course-room{color:var(--course-meta);font-size:14px;font-weight:540;line-height:1.32}.course-teacher{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.course-room{margin-top:5px;overflow:hidden;font-weight:650;font-variant-numeric:tabular-nums;white-space:nowrap;text-overflow:ellipsis}.holiday-column{z-index:4;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;margin:0;color:var(--text-strong);font-family:var(--font-display);font-size:26px;font-weight:650;pointer-events:none}.exam-week-state,.state-card{min-height:360px;display:flex;align-items:center;justify-content:center}.exam-week-state{flex:1 0 auto;gap:8px;color:var(--text-strong);font-family:var(--font-display);font-size:64px}.exam-week-state strong{color:var(--accent)}.state-card{flex:1 0 auto;flex-direction:column;gap:10px;margin:0 12px;border-radius:22px;color:var(--text-muted);background:var(--surface);box-shadow:var(--shadow-2)}.state-card strong{color:var(--text-strong);font-family:var(--font-display);font-size:20px}.error-state span{color:var(--danger)}.bottom-bar{position:fixed;right:0;bottom:0;left:0;width:100vw;max-width:100vw;min-width:0;height:calc(var(--bottom-bar-h) + env(safe-area-inset-bottom));overflow:visible;z-index:20;background:color-mix(in srgb,var(--surface-solid) 90%,transparent);box-shadow:var(--shadow-bar);backdrop-filter:blur(22px) saturate(1.04);-webkit-backdrop-filter:blur(22px) saturate(1.04)}.bottom-bar-items{position:absolute;top:calc(var(--bottom-bar-h) / 2);left:50%;width:max-content;display:flex;align-items:center;justify-content:center;gap:8px;transform:translate(-50%,-50%)}.course-field-scroll.is-manual-scroll{overflow-x:auto;overflow-y:hidden;scrollbar-width:none;touch-action:pan-x}.course-field-scroll.is-manual-scroll::-webkit-scrollbar{display:none}.nav-item{width:max-content;min-width:0;height:42px;flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:0 14px;border:0;border-radius:999px;color:var(--text);font-size:12px;font-weight:600;line-height:1;white-space:nowrap;cursor:pointer;transition:filter var(--duration-fast) var(--ease-standard),transform var(--duration-fast) var(--ease-standard)}.nav-item svg{width:18px;height:18px;flex:0 0 18px;stroke-width:1.75}.nav-item span{min-width:0;overflow:hidden;text-overflow:ellipsis}.nav-item:hover:not(:disabled){filter:brightness(1.03)}.nav-item:active:not(:disabled){transform:translateY(1px) scale(.99)}.nav-item.tone-warm{background:var(--block-warm)}.nav-item.tone-green{background:var(--block-green)}.nav-item.tone-blue{background:var(--block-blue)}.dialog-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;display:flex;align-items:center;justify-content:center;padding:16px 16px calc(16px + env(safe-area-inset-bottom));background:var(--scrim);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}.dialog-sheet{width:min(calc(100% - 32px),620px);max-height:calc(100vh - 32px - env(safe-area-inset-top) - env(safe-area-inset-bottom));max-height:calc(100dvh - 32px - env(safe-area-inset-top) - env(safe-area-inset-bottom));overflow:auto;padding:18px;border-radius:26px;color:var(--text);background:color-mix(in srgb,var(--surface-solid) 97%,transparent);box-shadow:var(--shadow-3)}.dialog-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.dialog-head h2{margin:0;color:var(--text-strong);font-family:var(--font-display);font-size:21px;font-weight:600}.dialog-close{width:38px;height:38px;flex:0 0 38px;border:0;border-radius:50%;color:var(--text);background:var(--block-warm);cursor:pointer}.dialog-enter-active,.dialog-leave-active{transition:opacity var(--duration-base) var(--ease-standard)}.dialog-enter-active .dialog-sheet,.dialog-leave-active .dialog-sheet{transition:transform var(--duration-base) var(--ease-standard),opacity var(--duration-base) var(--ease-standard)}.dialog-enter-from,.dialog-leave-to{opacity:0}.dialog-enter-from .dialog-sheet,.dialog-leave-to .dialog-sheet{opacity:0;transform:scale(.975)}.settings-form{display:grid;gap:24px;margin-top:18px}.settings-group{min-width:0;margin:0;padding:0;border:0}.settings-group legend{margin-bottom:13px;padding:0 2px;color:var(--text-strong);font-family:var(--font-display);font-size:20px;font-weight:650;letter-spacing:.035em}.settings-fields{display:grid;grid-template-columns:1fr;gap:12px}.settings-hint{margin:0;padding:12px 13px;border-radius:15px;color:var(--text-muted);background:var(--surface-subtle);font-size:12px;line-height:1.6}.field{min-width:0;display:grid;gap:7px;color:var(--text-muted);font-size:12px;font-weight:560;letter-spacing:.025em}.field select{width:100%;min-width:0;padding:12px 13px;border:0;border-radius:15px;outline:0;color:var(--text-strong);background:var(--block-blue)}.field.tone-green select,.field.tone-green.checkbox-field{background:var(--block-green)}.field.tone-blue select,.field.tone-blue.checkbox-field{background:var(--block-blue)}.field.tone-violet select,.field.tone-violet.checkbox-field{background:var(--block-violet)}.field.tone-warm select,.field.tone-warm.checkbox-field{background:var(--block-warm)}.checkbox-field{min-height:43px;display:flex;align-items:center;justify-content:space-between;align-self:auto;padding:0 13px;border-radius:15px;color:var(--text-strong)}.checkbox-field input{width:18px;height:18px;accent-color:var(--accent)}.theme-choice{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;padding:4px;border-radius:16px;background:var(--surface-subtle)}.theme-option{min-height:39px;border:0;border-radius:12px;color:var(--text-muted);background:transparent;cursor:pointer}.theme-option[aria-pressed=true]{color:var(--text-strong);background:var(--block-warm);box-shadow:var(--shadow-1)}.layer-choice{display:flex;flex-wrap:wrap;gap:8px}.layer-choice label{display:inline-flex;align-items:center;gap:6px;padding:8px 11px;border-radius:999px;color:var(--text);background:var(--surface-subtle);font-size:12px}.layer-choice input{accent-color:var(--accent)}.danger-button{margin-top:10px;padding:9px 12px;border:0;border-radius:13px;color:var(--danger);background:var(--block-warm);cursor:pointer}.dialog-actions{display:flex;justify-content:flex-end;gap:9px}.secondary-button,.primary-button{padding:11px 15px;border:0;border-radius:14px;cursor:pointer}.secondary-button{color:var(--text);background:var(--surface-subtle)}.primary-button{color:var(--accent-on);background:var(--accent);box-shadow:var(--shadow-1)}.about-copy{margin:18px 2px 4px;color:var(--text-muted);font-size:14px;line-height:1.8}.about-copy p{margin:0}.about-copy p+p{margin-top:12px}.course-detail-list{display:grid;gap:10px;margin:4px 0 0}.course-detail-list>div{display:grid;grid-template-columns:92px minmax(0,1fr);gap:14px;padding:13px 14px;border-radius:16px;background:var(--surface-subtle);cursor:copy;transition:filter var(--duration-fast) var(--ease-standard),transform var(--duration-fast) var(--ease-standard)}.course-detail-row:hover{filter:brightness(1.025)}.course-detail-row:active{transform:scale(.992)}.course-detail-list dt{color:var(--text-muted);font-size:14px;font-weight:600}.course-detail-list dd{min-width:0;margin:0;color:var(--text-strong);font-size:15px;font-weight:600;overflow-wrap:anywhere}.course-detail-actions{margin-top:20px}@media(max-width:420px){.course-detail-list>div{grid-template-columns:1fr;gap:5px}}.toast{position:fixed;left:50%;bottom:calc(var(--bottom-bar-h) + env(safe-area-inset-bottom) + 16px);z-index:100;padding:10px 14px;border-radius:999px;color:var(--toast-text);background:var(--toast-bg);box-shadow:var(--shadow-2);font-size:12px;white-space:nowrap;opacity:0;pointer-events:none;transform:translate(-50%) translateY(8px);transition:opacity var(--duration-fast) var(--ease-standard),transform var(--duration-fast) var(--ease-standard)}.toast.show{opacity:1;transform:translate(-50%) translateY(0)}.measure-copy{position:fixed;inset:auto auto -10000px -10000px;visibility:hidden;pointer-events:none;contain:layout style paint}@media(min-width:700px){:root{--time-w: 64px;--grid-gap: 10px;--course-row-h: 158px}.page{padding:22px 22px calc(32px + var(--bottom-bar-h) + env(safe-area-inset-bottom));scrollbar-gutter:stable}.shell{max-width:1180px}.topline,.date-nav{padding-left:4px;padding-right:4px}.schedule-card{border-radius:24px}.schedule-grid{grid-template-rows:54px repeat(var(--session-count),var(--course-row-h));padding:12px}.course-tile{padding:14px 12px 12px;border-radius:16px}.course-teacher-scroll{margin-top:8px}}@media(max-width:560px){.dialog-sheet{width:min(calc(100% - 16px),620px);padding:16px;border-radius:22px}}@media(max-width:379px){:root{--time-w: 22px;--grid-gap: 3px;--course-row-h: 152px}.date-nav{padding-left:10px;padding-right:10px}.date-button{width:36px;height:36px;flex-basis:36px;border-radius:13px}.course-tile{padding-left:5px;padding-right:5px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}
