:root{color-scheme:light dark;--bg: #f4f6fa;--bg-grad: radial-gradient(1100px 520px at 10% -12%, #e6efff 0%, transparent 62%), radial-gradient(900px 480px at 102% -6%, #e6fbf1 0%, transparent 58%);--panel: #ffffff;--panel-soft: #f7f9fc;--text: #1b2430;--text-2: #5b6878;--text-3: #8d99a8;--line: #e7ecf3;--border: #dfe6ef;--accent: #e5484d;--accent-soft: #fdeeee;--today-tint: rgba(229, 72, 77, .035);--past-mask: rgba(100, 116, 139, .13);--shadow: 0 1px 2px rgba(16, 24, 40, .04), 0 16px 40px -20px rgba(16, 24, 40, .25);--radius: 16px;--tag-bg: rgba(255, 255, 255, .72)}@media(prefers-color-scheme:dark){:root{--bg: #0e1116;--bg-grad: radial-gradient(1100px 520px at 10% -12%, #16233a 0%, transparent 62%), radial-gradient(900px 480px at 102% -6%, #10261f 0%, transparent 58%);--panel: #151a21;--panel-soft: #191f28;--text: #e8eff8;--text-2: #9aa8b9;--text-3: #6f7d8f;--line: #232a34;--border: #262e39;--accent: #ff5c61;--accent-soft: #2a1619;--today-tint: rgba(255, 92, 97, .05);--past-mask: rgba(4, 7, 12, .2);--shadow: 0 1px 2px rgba(0, 0, 0, .35), 0 20px 44px -22px rgba(0, 0, 0, .8);--tag-bg: rgba(255, 255, 255, .06)}}.course-card{--card-bg: hsl(var(--h) calc(var(--s) * 1%) 96%);--card-line: hsl(var(--h) calc(var(--s) * 1%) 86%);--card-text: hsl(var(--h) calc(var(--s) * .95%) 27%);--card-sub: hsl(var(--h) calc(var(--s) * .8%) 42%);--card-solid: hsl(var(--h) calc(var(--s) * 1%) 48%);--card-bright: hsl(var(--h) calc(var(--s) * 1%) 54%)}.legend__dot{background:hsl(var(--h) calc(var(--s) * 1%) 55%)}@media(prefers-color-scheme:dark){.course-card{--card-bg: hsl(var(--h) calc(var(--s) * .95%) 23%);--card-line: hsl(var(--h) calc(var(--s) * 1%) 40%);--card-text: hsl(var(--h) calc(var(--s) * .92%) 95%);--card-sub: hsl(var(--h) calc(var(--s) * .88%) 80%);--card-solid: hsl(var(--h) calc(var(--s) * 1%) 68%);--card-bright: hsl(var(--h) calc(var(--s) * 1%) 70%)}.legend__dot{background:hsl(var(--h) calc(var(--s) * 1%) 62%)}}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0;min-height:100%}body{background-color:var(--bg);background-image:var(--bg-grad);background-attachment:fixed;color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Noto Sans SC,system-ui,sans-serif;font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}#app{min-height:100dvh}.app{max-width:900px;margin:0 auto;padding:22px 24px 30px;display:flex;flex-direction:column;gap:14px}.header{position:relative;padding:16px 20px 0;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}.header__top{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:16px;padding-bottom:14px}.header__id{min-width:0}.header__semester{font-size:11.5px;letter-spacing:.14em;color:var(--text-3)}.header__class{margin-top:2px;font-size:19px;font-weight:700;letter-spacing:.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.header__clock{text-align:center}.clock{font-size:clamp(26px,3.2vw,40px);font-weight:750;line-height:1.05;letter-spacing:.03em;font-variant-numeric:tabular-nums}.clock__date{margin-top:3px;font-size:12.5px;color:var(--text-2)}.header__week{justify-self:end;display:flex;align-items:center;gap:8px}.pill{padding:6px 12px;border-radius:999px;font-size:12.5px;font-weight:650;white-space:nowrap}.pill--week{background:var(--accent-soft);color:var(--accent)}.pill--parity{background:var(--panel-soft);border:1px solid var(--border);color:var(--text-2)}.status{position:relative;display:flex;align-items:center;flex-wrap:wrap;gap:4px 10px;margin:0 -20px;padding:10px 20px 12px;min-height:46px;border-top:1px solid var(--line);background:var(--panel-soft);font-size:13px}.status__dot{flex:none;width:8px;height:8px;border-radius:50%;background:var(--text-3)}.status__title{font-weight:650}.status__meta{color:var(--text-2);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status__extra{margin-left:auto;color:var(--text-2);font-variant-numeric:tabular-nums;white-space:nowrap}.header[data-status=in-class] .status__dot{background:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 18%,transparent);animation:dot-pulse 2s ease-in-out infinite}.header[data-status=in-class] .status__extra{color:var(--accent);font-weight:650}.header[data-status=next] .status__dot{background:#2f9e6a}.status__bar{position:absolute;left:0;right:0;bottom:0;height:3px;background:color-mix(in srgb,var(--accent) 14%,transparent)}.status__bar i{display:block;height:100%;background:var(--accent);transition:width .6s linear}@keyframes dot-pulse{0%,to{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 20%,transparent)}50%{box-shadow:0 0 0 6px color-mix(in srgb,var(--accent) 10%,transparent)}}.board{--axis-w: 62px;--slot-inset: 4px;--row-h: clamp(54px, calc((100dvh - 300px) / var(--rows)), 104px);background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}.board__head{display:grid;grid-template-columns:var(--axis-w) repeat(var(--cols),minmax(0,1fr));background:var(--panel-soft);border-bottom:1px solid var(--line)}.head-axis{display:flex;align-items:center;justify-content:center;font-size:11px;letter-spacing:.1em;color:var(--text-3)}.head-day{display:flex;flex-direction:column;align-items:center;gap:1px;padding:9px 4px 8px;border-left:1px solid var(--line)}.head-day__name{font-size:13px;font-weight:650}.head-day__date{font-size:11px;color:var(--text-3);font-variant-numeric:tabular-nums}.head-day.is-today{background:var(--accent-soft)}.head-day.is-today .head-day__name{color:var(--accent)}.head-day.is-today .head-day__date{color:color-mix(in srgb,var(--accent) 70%,var(--text-3))}.board__body{position:relative;display:grid;grid-template-columns:var(--axis-w) repeat(var(--cols),minmax(0,1fr));grid-template-rows:1fr;height:calc(var(--rows) * var(--row-h));background-image:repeating-linear-gradient(to bottom,var(--line) 0 1px,transparent 1px var(--row-h))}.axis{position:relative}.axis__item{position:absolute;left:0;right:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;color:var(--text-3)}.axis__no{font-size:12px;font-weight:700;color:var(--text-2);font-variant-numeric:tabular-nums}.axis__time{font-size:10.5px;font-variant-numeric:tabular-nums}.day-col{position:relative;border-left:1px solid var(--line)}.day-col.is-today{background:var(--today-tint)}.slot{position:absolute;z-index:1}.slot.is-now,.slot:hover{z-index:3}.course-card{container-type:size;position:relative;display:flex;flex-direction:column;height:100%;border-radius:10px;background:var(--card-bg);border:1px solid var(--card-line);border-left:3px solid var(--card-solid);color:var(--card-text);overflow:hidden;transition:transform .18s ease,box-shadow .18s ease}.course-card:hover{z-index:3;transform:translateY(-1px);box-shadow:0 10px 24px -14px #0000008c}.course-card__inner{display:flex;flex:1;flex-direction:column;justify-content:center;gap:1px;min-height:0;padding:7px 7px 8px}.course-card__name{font-size:12.5px;font-weight:700;line-height:1.25;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word;text-wrap:balance}.course-card__room,.course-card__teacher{font-size:11.5px;color:var(--card-sub);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.course-card__time{font-size:10.5px;color:var(--card-sub);font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.course-card__room--short{display:none}.course-card__foot{display:flex;flex-wrap:wrap;align-items:center;gap:4px;padding-top:4px}.tag{font-size:10.5px;line-height:1.5;padding:0 6px;border-radius:6px;border:1px solid var(--card-line);background:var(--tag-bg);color:var(--card-sub);white-space:nowrap}.tag--now{border-color:transparent;background:var(--card-solid);color:#fff;font-weight:650}.course-card.is-now{box-shadow:inset 0 0 0 2px var(--card-solid),0 10px 24px -16px #0009}.course-card__progress{position:absolute;left:0;right:0;bottom:0;height:6px;background:color-mix(in srgb,var(--card-bright) 18%,transparent)}.course-card__progress i{display:block;height:100%;background:var(--card-bright);box-shadow:0 0 8px color-mix(in srgb,var(--card-bright) 55%,transparent);transition:width .6s linear}@container (max-height: 92px){.course-card__teacher{display:none}}@container (max-height: 68px){.course-card__room,.course-card__time,.course-card__foot{display:none}}.now-line{position:absolute;left:var(--axis-w);right:0;height:0;z-index:5;pointer-events:none;transition:top .6s linear}.now-line:before{content:"";position:absolute;left:0;right:0;top:-1px;height:2px;background:var(--accent);box-shadow:0 0 10px color-mix(in srgb,var(--accent) 60%,transparent)}.now-mask{position:absolute;left:var(--axis-w);right:0;top:0;z-index:2;background:var(--past-mask);pointer-events:none;transition:height .6s linear}.now-line__dot{position:absolute;left:-9px;top:-6px;width:0;height:0;border-left:10px solid var(--accent);border-top:6px solid transparent;border-bottom:6px solid transparent;filter:drop-shadow(0 0 5px color-mix(in srgb,var(--accent) 65%,transparent))}.now-line__time{position:absolute;right:8px;top:4px;padding:1px 6px;border-radius:6px;font-size:11px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--accent);background:var(--panel);border:1px solid color-mix(in srgb,var(--accent) 32%,transparent)}.legend{display:grid;grid-template-columns:repeat(auto-fill,minmax(134px,1fr));align-items:center;gap:7px 14px;padding:2px 6px;font-size:12px;color:var(--text-2)}.legend__label{font-size:11px;letter-spacing:.1em;color:var(--text-3)}.legend__item{display:flex;align-items:center;gap:6px;min-width:0}.legend__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.legend__dot{flex:none;display:inline-block;width:10px;height:10px;border-radius:3px}@container (max-width: 70px){.course-card__inner{padding:4px 3px 5px}.course-card__name{font-size:10.5px;line-height:1.25;-webkit-line-clamp:6;text-wrap:normal}.course-card__room--full,.course-card__teacher,.course-card__time,.course-card__foot{display:none}.course-card__room--short{display:block;font-size:9px;letter-spacing:-.02em}.course-card__progress{height:4px}}@media(max-width:900px){.app{padding:16px 14px 24px}.header__semester{letter-spacing:.08em}}@media(max-width:760px){.app{padding:10px 8px 18px;gap:10px}.header{padding:12px 12px 0}.header__top{grid-template-columns:1fr;gap:8px;text-align:center;padding-bottom:10px}.header__week{justify-self:center}.header__semester{font-size:10.5px}.header__class{font-size:16px}.clock{font-size:30px}.clock__date{font-size:11.5px}.pill{padding:5px 10px;font-size:11.5px}.status{margin:0 -12px;padding:9px 12px 11px;font-size:12px}.status__extra{margin-left:0}.board{--axis-w: 34px;--row-h: clamp(46px, calc((100dvh - 330px) / var(--rows)), 92px);--slot-inset: 1px}.course-card{border-radius:6px;border-left-width:2px}.head-axis{font-size:9px;letter-spacing:0}.head-day{padding:7px 0 6px}.head-day__name{font-size:11px}.head-day__date{font-size:9px}.axis__no{font-size:10px}.axis__time{font-size:9px}.now-line__time{right:4px;padding:0 4px;font-size:9.5px}.now-line__dot{left:-7px;top:-5px;border-left-width:8px;border-top-width:5px;border-bottom-width:5px}.legend{display:none}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}
