@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-slate-400:#90a1b9;--spacing:.25rem;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}@supports (color:lab(0% 0 0)){:root,:host{--color-slate-400:lab(65.5349% -2.25151 -14.5072)}}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.grid{display:grid}.hidden{display:none}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.shrink-0{flex-shrink:0}.text-slate-400{color:var(--color-slate-400)}}:root{--background:#f5f7f6;--surface:#fff;--surface-soft:#f0f4f2;--line:#dfe7e2;--line-strong:#b6c9bf;--text:#1a2d26;--muted:#5e7168;--brand:#27634e;--brand-strong:#194b39;--brand-soft:#e8f2ec;--live:#23684b;--danger:#a63232;--danger-soft:#fff1ef;--shadow:0 12px 40px #15231f14}*{box-sizing:border-box}html{background:var(--background);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}body{min-width:320px;min-height:100dvh;color:var(--text);background:var(--background);-webkit-font-smoothing:antialiased;margin:0;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}button,select,input{font:inherit}button,select,summary,a{-webkit-tap-highlight-color:transparent}button{cursor:pointer}button:disabled,select:disabled{cursor:wait;opacity:.6}button,input,select,summary,a{touch-action:manipulation}:focus-visible{outline-offset:3px;outline:3px solid #508e73}.app-shell{min-height:100dvh}.topbar{z-index:30;padding-top:env(safe-area-inset-top);background:var(--surface);border-bottom:1px solid var(--line);flex-shrink:0;position:sticky;top:0}.topbar__inner{justify-content:space-between;align-items:center;gap:12px;max-width:1920px;min-height:68px;margin:0 auto;padding:10px 28px;display:flex}.brand{align-items:center;gap:10px;min-width:0;display:flex}.brand>span:last-child{flex-direction:column;gap:2px;display:flex}.brand strong{letter-spacing:-.025em;white-space:nowrap;font-size:1rem;line-height:1.2}.brand small{color:var(--muted);font-size:.72rem}.brand .brand__warning{color:#88601f}.brand__mark{color:#fff;background:var(--brand-strong);border-radius:12px;place-items:center;width:38px;height:38px;display:grid}.topbar__actions{align-items:center;display:flex}.group-select select{border:1px solid var(--line);background:var(--surface-soft);max-width:220px;min-height:44px;color:var(--text);cursor:pointer;border-radius:12px;padding:0 10px;font-size:.875rem;font-weight:650}.main-content{width:100%;max-width:1920px;margin:0 auto;padding:24px 28px 36px}.schedule-section{min-width:0}.schedule-toolbar{flex-shrink:0;align-items:center;gap:24px;padding-bottom:20px;display:flex}.period-heading{min-width:0;margin-right:auto}.period-heading>p{color:var(--muted);margin:0 0 3px;font-size:.75rem}.date-picker{cursor:pointer;align-items:center;gap:10px;min-height:34px;display:inline-flex;position:relative}.date-picker h1,.date-picker h2{letter-spacing:-.04em;text-transform:capitalize;margin:0;font-size:clamp(1.2rem,2vw,1.65rem);font-weight:720;line-height:1.2}.date-picker>svg{color:var(--muted);flex-shrink:0}.date-picker input{opacity:0;cursor:pointer;border:0;width:100%;height:100%;padding:0;position:absolute;inset:0}.date-picker input::-webkit-calendar-picker-indicator{cursor:pointer;width:100%;height:100%;margin:0;padding:0;position:absolute;inset:0}.date-picker:focus-within{outline-offset:4px;border-radius:4px;outline:3px solid #508e73}.period-month--short{display:none}.date-navigation{align-items:center;gap:2px;display:flex}.icon-button{border:1px solid var(--line);background:var(--surface);width:44px;height:44px;color:var(--text);border-radius:12px;flex-shrink:0;justify-content:center;align-items:center;padding:0;transition:background .15s,border-color .15s;display:inline-flex}.icon-button:hover{background:var(--surface-soft);border-color:var(--line-strong)}.date-navigation .icon-button{background:0 0;border-color:#0000}.date-navigation .icon-button:hover{background:#e6ede8}.today-button{border:1px solid var(--line);background:var(--surface);min-height:44px;color:var(--text);border-radius:11px;padding:0 12px;font-size:.8rem;font-weight:650}.today-button:hover{border-color:var(--line-strong)}.view-switch{border:1px solid var(--line);background:#eaf0ec;border-radius:14px;gap:3px;padding:4px;display:flex}.view-switch button{min-height:40px;color:var(--muted);background:0 0;border:0;border-radius:10px;justify-content:center;align-items:center;gap:7px;padding:0 13px;font-size:.8rem;font-weight:650;display:flex}.view-switch button:hover{color:var(--text)}.view-switch .active{background:var(--surface);color:var(--brand-strong);box-shadow:0 1px 5px #192d2610}.schedule-view{min-width:0}.schedule-footer{flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;padding-top:14px;display:flex}.schedule-freshness{min-width:0;color:var(--muted);flex-wrap:wrap;align-items:center;gap:8px 14px;font-size:.75rem;display:flex}.schedule-freshness p{margin:0}.schedule-freshness time{font-weight:650}.schedule-freshness small{margin-top:2px;font-size:.72rem;display:block}.schedule-freshness--warning{color:#75531d;background:#fff7e7;border:1px solid #ecdcbd;border-radius:10px;padding:8px 12px}.info-menu{flex-shrink:0;position:relative}.info-menu summary{border:1px solid var(--line);background:var(--surface);min-height:44px;color:var(--brand);cursor:pointer;border-radius:12px;justify-content:center;align-items:center;gap:8px;padding:0 12px;font-size:.8rem;font-weight:700;list-style:none;display:flex}.info-menu summary::-webkit-details-marker{display:none}.info-menu[open] summary{background:var(--brand-soft);border-color:var(--line-strong)}.info-menu__panel{z-index:35;border:1px solid var(--line);background:var(--surface);width:min(370px,100vw - 32px);box-shadow:var(--shadow);border-radius:18px;padding:16px;position:absolute;bottom:calc(100% + 10px);right:0}.summary-card__label{color:var(--muted);margin-bottom:12px;font-size:.75rem;font-weight:700}.info-menu__date{color:var(--text);margin:-6px 0 12px;font-size:.875rem;font-weight:600}.summary-card__empty{color:var(--muted);font-size:.875rem}.pulse-dot,.quiet-dot{background:var(--live);border-radius:50%;width:7px;height:7px}.pulse-dot{box-shadow:0 0 0 4px #23684b15}.quiet-dot{background:#809c8d}.day-view{max-width:760px;margin:0 auto}.day-strip{border:1px solid var(--line);background:var(--surface);border-radius:18px;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;padding:6px;display:grid}.day-strip button{min-width:0;min-height:74px;color:var(--muted);background:0 0;border:1px solid #0000;border-radius:12px;flex-direction:column;align-items:center;gap:3px;padding:8px 2px 6px;display:flex}.day-strip button:hover{background:var(--surface-soft)}.day-strip button>span{font-size:.72rem;font-weight:550}.day-strip button strong{color:var(--text);font-size:1.15rem;font-weight:650;line-height:1.4}.day-strip button i{border-radius:50%;width:4px;height:4px}.day-strip__marker{background:#64967e}.day-strip button[aria-current=date]{border-color:var(--line-strong)}.day-strip button[aria-pressed=true]{background:var(--brand-strong);color:#e1eee6;border-color:var(--brand-strong)}.day-strip button[aria-pressed=true] strong{color:#fff}.day-strip button[aria-pressed=true] .day-strip__marker{background:#bddccb}.day-heading{padding:26px 0 22px;position:relative}.day-heading>p{color:var(--brand);text-transform:capitalize;margin:0 0 2px;font-size:.8rem;font-weight:600}.day-heading h1{letter-spacing:-.055em;margin:0;font-size:2rem;font-weight:720;line-height:1.2}.day-summary{color:var(--muted);align-items:center;gap:10px;margin-top:10px;font-size:.8rem;display:flex}.day-summary>span+span:before{content:"";background:var(--line-strong);border-radius:50%;width:3px;height:3px;margin:0 10px 3px 0;display:inline-block}.event-list{gap:14px;margin:0;padding:0;list-style:none;display:grid}.event-list>li{min-width:0}[data-tone]{--course-accent:#659e7b;--course-soft:#edf5ee}[data-tone="1"]{--course-accent:#7f95ba;--course-soft:#edf2fa}[data-tone="2"]{--course-accent:#ad90b8;--course-soft:#f4eef7}[data-tone="3"]{--course-accent:#be9b61;--course-soft:#faf3e6}[data-tone="4"]{--course-accent:#71a4a7;--course-soft:#eaf4f4}.schedule-card{border:1px solid var(--line);background:var(--surface);width:100%;min-height:96px;color:var(--text);text-align:left;border-radius:15px;grid-template-columns:52px minmax(0,1fr);gap:14px;padding:14px;transition:border-color .15s,box-shadow .15s;display:grid}.schedule-card:hover{border-color:var(--line-strong);box-shadow:0 4px 16px #192d2608}.schedule-card__time{color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;flex-direction:column;gap:4px;padding-top:1px;font-size:.78rem;display:flex}.schedule-card__time strong{color:var(--text);font-size:.95rem;font-weight:700}.schedule-card__content{overflow-wrap:anywhere;flex-direction:column;gap:8px;min-width:0;display:flex}.schedule-card__eyebrow{color:var(--muted);justify-content:space-between;align-items:center;gap:8px;font-size:.68rem;font-weight:600;display:flex}.schedule-card__eyebrow>span{flex-shrink:0;font-weight:450}.schedule-card__heading{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.schedule-card__heading>strong{font-size:1rem;font-weight:650;line-height:1.35}.schedule-card__meta{color:var(--muted);align-items:center;gap:6px;font-size:.8rem;line-height:1.4;display:flex}.schedule-card__rooms{color:var(--brand-strong);font-weight:650}.schedule-card__groups{color:var(--muted);align-self:flex-start;font-size:.7rem}.schedule-card--current .schedule-card__time strong{color:var(--brand)}.schedule-card--cancelled{background:var(--danger-soft);border-color:#e8c6c1}.schedule-card--cancelled .schedule-card__heading>strong{text-decoration:line-through}.status-badge{color:#50665a;white-space:nowrap;background:#edf1ee;border-radius:6px;align-items:center;padding:3px 7px;font-size:.65rem;font-weight:650;display:inline-flex}.status-badge--live{color:var(--live);background:#dceee0}.status-badge--cancelled{color:var(--danger);background:#ffe1dc}.schedule-card--compact{gap:10px;min-height:76px;padding:12px}.schedule-card--compact .schedule-card__heading>strong{font-size:.875rem}.schedule-card--compact .schedule-card__eyebrow{display:none}.app-shell--month{flex-direction:column;height:100dvh;display:flex}.main-content--month{flex-direction:column;flex:1;min-height:0;padding-block:20px 16px;display:flex}.schedule-section--month,.schedule-section--month .schedule-view,.month-view{flex-direction:column;flex:1;min-height:0;display:flex}.month-caption{color:var(--muted);flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;padding:0 2px 10px;font-size:.75rem;display:flex}.month-grid{grid-template-columns:repeat(7,minmax(0,1fr));grid-template-rows:30px repeat(var(--week-count), minmax(0, 1fr));border:1px solid var(--line);background:var(--line);border-radius:16px;flex:1;gap:1px;min-height:0;display:grid;overflow:hidden}.month-row{display:contents}.month-cell{min-width:0;min-height:0}.month-weekday{background:var(--surface-soft);color:var(--muted);place-items:center;font-size:.7rem;font-weight:600;display:grid}.month-day{background:var(--surface);width:100%;height:100%;min-height:0;color:var(--text);text-align:left;border:0;flex-direction:column;align-items:stretch;gap:3px;padding:6px 7px;transition:background .12s;display:flex;overflow:hidden}.month-day--weekend{background:#f8faf8}.month-day--outside{color:#6f7e75;background:#f1f4f2}.month-day--outside .month-day__events{opacity:.6}.month-day:hover{box-shadow:inset 0 0 0 1px var(--line-strong);background:#f0f6f1}.month-day:focus-visible{z-index:2;outline-offset:-3px;position:relative}.month-day--today{background:#f6faf6}.month-day__heading{flex-shrink:0;justify-content:space-between;align-items:center;height:28px;margin-bottom:2px;display:flex}.month-day__heading strong{border-radius:8px;place-items:center;width:26px;height:26px;font-size:.8rem;font-weight:650;display:grid}.month-day--today .month-day__heading strong{background:var(--brand-strong);color:#fff}.month-day__heading>span{color:var(--muted);padding-right:4px;font-size:.65rem}.month-day__events{flex-shrink:0;gap:3px;display:grid}.month-event{border-left:3px solid var(--course-accent);background:var(--course-soft);border-radius:4px;align-items:center;gap:6px;min-width:0;height:24px;padding:0 5px;display:flex}.month-event>span{font-variant-numeric:tabular-nums;flex-shrink:0;font-size:.68rem}.month-event strong{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:.78rem;font-weight:550;overflow:hidden}.month-event--cancelled{border-color:var(--danger);background:var(--danger-soft)}.month-event--cancelled strong{text-decoration:line-through}.month-day__more{color:var(--brand);flex-shrink:0;padding:0 3px;font-size:.7rem;font-weight:600;line-height:18px;display:block}.month-grid--dense .month-day__more{display:none}.week-view{--week-axis-width:60px;--week-min-day-width:140px;--week-hour-height:80px;padding:2px 0 0}.week-caption{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:6px 16px;margin-bottom:14px;display:flex}.week-caption h2{letter-spacing:-.02em;margin:0;font-size:1rem;font-weight:650}.week-caption>span{color:var(--muted);font-variant-numeric:tabular-nums;font-size:.75rem}.week-mobile-hint{display:none}.week-scroll{isolation:isolate;border:1px solid var(--line);background:var(--surface);max-height:max(360px,100dvh - 240px);scroll-padding:80px 8px 16px calc(var(--week-axis-width) + 8px);scrollbar-width:thin;scrollbar-color:var(--line-strong) var(--surface-soft);border-radius:18px;overflow:auto}.week-scroll:focus-visible{outline-offset:3px}.week-canvas{min-width:calc(var(--week-axis-width) + var(--week-day-count) * var(--week-min-day-width))}.week-columns{grid-template-columns:var(--week-axis-width) repeat(var(--week-day-count), minmax(0, 1fr));display:grid}.week-headers{z-index:12;border-bottom:1px solid var(--line);background:var(--surface);min-height:70px;position:sticky;top:0;box-shadow:0 2px 5px #192d2605}.week-corner{z-index:2;background:var(--surface);color:var(--muted);text-align:center;border-right:1px solid var(--line);place-content:center;padding:8px 4px;font-size:.7rem;line-height:1.4;display:grid;position:sticky;left:0}.week-date{border:0;border-right:1px solid var(--line);background:var(--surface);min-width:0;min-height:70px;color:var(--muted);flex-direction:column;justify-content:center;align-items:center;gap:3px;padding:8px;display:flex}.week-date:last-child{border-right:0}.week-date>span{text-transform:capitalize;font-size:.8rem}.week-date>strong{width:30px;height:30px;color:var(--text);border-radius:10px;place-items:center;font-size:1rem;font-weight:650;display:grid}.week-date:hover{background:var(--surface-soft)}.week-date--today{color:var(--brand-strong);background:#f3f8f4}.week-date--today>strong{background:var(--brand-strong);color:#fff}.week-date:focus-visible{outline-offset:-3px}.week-all-day{border-bottom:1px solid var(--line);background:#fafcfb}.week-all-day__events{border-right:1px solid var(--line);flex-direction:column;gap:4px;min-width:0;padding:7px 4px;display:flex}.week-all-day__event{border:0;border-left:3px solid var(--course-accent);background:var(--course-soft);min-height:36px;color:var(--text);text-align:left;overflow-wrap:anywhere;border-radius:6px;padding:6px 8px;font-size:.8rem;line-height:1.4}.week-all-day__event--cancelled{border-color:var(--danger);background:var(--danger-soft);text-decoration:line-through}.week-time-grid{padding-block:12px}.week-timed{height:calc(var(--week-hours) * var(--week-hour-height));position:relative}.week-hours{z-index:4;background:var(--surface);border-right:1px solid var(--line);position:sticky;left:0}.week-hours>span{color:var(--muted);font-variant-numeric:tabular-nums;font-size:.75rem;line-height:20px;position:absolute;right:10px;transform:translateY(-50%)}.week-day-track{border-right:1px solid var(--line);border-bottom:1px solid var(--line);background-image:linear-gradient(to bottom, var(--line) 1px, transparent 1px), linear-gradient(to bottom, #edf2ee 1px, transparent 1px);background-size:100% var(--week-hour-height), 100% calc(var(--week-hour-height) / 2);min-width:0;position:relative}.week-day-track:last-of-type{border-right:0}.week-day-track--today{background-color:#f8fbf8}.week-track-empty{color:var(--muted);text-align:center;margin-top:18px;font-size:.75rem;display:block}.week-course{z-index:1;border:1px solid var(--course-accent);flex-direction:column;align-items:stretch;gap:3px;min-height:2px;margin:0;padding:7px 8px;display:flex;position:absolute}@supports (color:color-mix(in lab, red, red)){.week-course{border:1px solid color-mix(in srgb, var(--course-accent) 40%, white)}}.week-course{border-left:3px solid var(--course-accent);background:var(--course-soft);color:var(--text);text-align:left;border-radius:7px;transition:box-shadow .15s,border-color .15s;overflow:hidden}.week-course:hover,.week-course:focus-visible{z-index:3;border-color:var(--course-accent);box-shadow:0 3px 12px #192d2620}.week-course:focus-visible{outline-offset:-3px}.week-course>*{flex-shrink:0;min-width:0}.week-course__time{white-space:nowrap;text-overflow:ellipsis;font-variant-numeric:tabular-nums;font-size:.75rem;font-weight:650;line-height:1.4;overflow:hidden}.week-course>strong{-webkit-line-clamp:3;overflow-wrap:anywhere;-webkit-box-orient:vertical;font-size:.875rem;font-weight:650;line-height:1.3;display:-webkit-box;overflow:hidden}.week-course__room{overflow-wrap:anywhere;font-size:.8rem;font-weight:550;line-height:1.4}.week-course__groups{color:var(--muted);font-size:.75rem;line-height:1.4}.week-course--short{gap:1px;padding-block:3px}.week-course--short>strong{-webkit-line-clamp:1}.week-course--short .week-course__room,.week-course--short .week-course__groups,.week-course--short .week-course__live{display:none}.week-course--live{border-color:var(--brand);box-shadow:inset 0 0 0 1px var(--brand)}.week-course__live{background:var(--brand-strong);color:#fff;border-radius:4px;align-self:flex-start;padding:2px 5px;font-size:.7rem}.week-course--cancelled{background:var(--danger-soft);border-color:#d6a5a0}.week-course--cancelled>strong{text-decoration:line-through}.week-overview .week-course{gap:2px;padding:0 5px}.week-overview .week-course>strong{-webkit-line-clamp:2}.week-overview .week-course__room,.week-overview .week-course__groups{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.week-overview .week-course[data-density=compact]>strong,.week-overview .week-course[data-density=tiny]>strong{-webkit-line-clamp:1}.week-overview .week-course:not([data-density=full]) .week-course__room,.week-overview .week-course:not([data-density=full]) .week-course__groups,.week-overview .week-course:not([data-density=full]) .week-course__live,.week-overview .week-course[data-density=tiny] .week-course__time{display:none}.week-now{z-index:8;pointer-events:none;color:#bb3c37;height:0;position:absolute;left:0;right:0}.week-now:before{content:"";left:var(--week-axis-width);border-top:1px solid #bb3c3770;position:absolute;top:-1px;right:0}.week-now__time{width:calc(var(--week-axis-width) - 7px);color:#fff;text-align:center;font-variant-numeric:tabular-nums;background:#bb3c37;border-radius:5px;padding:2px 3px;font-size:.75rem;font-weight:650;line-height:18px;display:block;position:sticky;left:2px;transform:translateY(-50%)}.week-now__day{left:calc(var(--week-axis-width) + (100% - var(--week-axis-width)) / var(--week-day-count) * var(--current-day));width:calc((100% - var(--week-axis-width)) / var(--week-day-count));background:currentColor;height:2px;position:absolute;top:-1px}.week-now__day:before{content:"";background:currentColor;border-radius:50%;width:8px;height:8px;position:absolute;top:-3px;left:-3px}.day-calendar.week-view{--week-axis-width:56px;--week-hour-height:128px}.day-calendar .week-canvas{border:1px solid var(--line);background:var(--surface);isolation:isolate;border-radius:16px;min-width:0;overflow:hidden}.day-grid-caption{color:var(--muted);font-variant-numeric:tabular-nums;justify-content:space-between;gap:12px;margin-bottom:12px;font-size:.8rem;display:flex}.day-calendar .week-course{border-radius:10px;gap:4px;padding:9px 10px}.day-calendar .week-course>strong{font-size:1rem;line-height:1.3}.day-calendar .week-course__time,.day-calendar .week-course__room{font-size:.875rem}.day-calendar .week-course__groups,.day-course__teachers,.day-course__code{color:var(--muted);overflow-wrap:anywhere;font-size:.8rem;line-height:1.4}.day-calendar .day-course--compact>strong{-webkit-line-clamp:2}.day-calendar .week-course--short{gap:1px;padding:3px 6px}.day-calendar .week-course--short>strong{-webkit-line-clamp:1}.day-calendar .week-course--short .day-course__next{display:none}.day-calendar .day-course--past:not(.week-course--cancelled){background:var(--course-soft)}@supports (color:color-mix(in lab, red, red)){.day-calendar .day-course--past:not(.week-course--cancelled){background:color-mix(in srgb, var(--course-soft) 45%, white)}}.day-course__next{color:var(--brand-strong);background:#fff;border-radius:5px;align-self:flex-start;padding:2px 6px;font-size:.75rem;font-weight:650}.day-grid-pause{pointer-events:none;justify-content:center;align-items:center;padding:8px;display:flex;position:absolute;left:0;right:0;overflow:hidden}.day-grid-pause>span{border:1px dashed var(--line-strong);color:var(--muted);background:var(--surface);border-radius:8px;padding:6px 12px;font-size:.875rem;line-height:1.4}.day-all-day{gap:10px;margin-bottom:20px;display:grid}.day-all-day h2{color:var(--muted);margin:0;font-size:.875rem;font-weight:600}.details-panel,.changes-dialog{background:var(--surface);width:100%;max-width:none;height:min(78dvh,740px);max-height:88dvh;color:var(--text);border:0;border-radius:24px 24px 0 0;margin:0;padding:0;position:fixed;inset:auto 0 0;overflow:hidden;box-shadow:0 -12px 50px #0b201d18}.details-panel[open]{flex-direction:column;display:flex}.details-panel::backdrop,.changes-dialog::backdrop{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);background:#12221b59}.details-panel[open],.changes-dialog[open]{animation:.2s ease-out sheet-in}.details-handle{background:var(--line-strong);border-radius:99px;flex-shrink:0;width:36px;height:4px;margin:10px auto 0}.details-navigation{border-bottom:1px solid var(--line);flex-shrink:0;justify-content:space-between;align-items:center;min-height:62px;padding:8px 20px;display:flex}.details-navigation>span{color:var(--muted);font-size:.8rem;font-weight:600}.details-navigation .icon-button{border-color:#0000}.details-back{min-height:44px;color:var(--brand);background:0 0;border:0;align-items:center;gap:5px;padding:0 8px 0 0;font-size:.875rem;font-weight:650;display:inline-flex}.details-body{overscroll-behavior:contain;min-height:0;padding:24px 22px calc(28px + env(safe-area-inset-bottom));scrollbar-width:thin;scrollbar-color:var(--line-strong) transparent;flex:1;overflow:auto}.details-header{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.details-header p{color:var(--muted);margin:0 0 5px;font-size:.8rem}.details-header h2{letter-spacing:-.035em;outline:none;margin:0;font-size:1.5rem;font-weight:700;line-height:1.25}.details-time{border:1px solid var(--line);background:var(--surface-soft);font-variant-numeric:tabular-nums;border-radius:14px;flex-wrap:wrap;align-items:center;gap:10px;margin:24px 0 12px;padding:16px;display:flex}.details-time>span{color:var(--muted);font-size:.875rem}.details-time .status-badge{margin-left:auto}.details-list{margin:0}.details-list>div{border-bottom:1px solid var(--line);grid-template-columns:105px minmax(0,1fr);gap:14px;padding:16px 0;display:grid}.details-list dt{color:var(--muted);align-items:center;gap:6px;font-size:.8rem;display:flex}.details-list dd{color:var(--text);overflow-wrap:anywhere;white-space:pre-line;margin:0;font-size:.9rem;font-weight:550}.day-details__count{color:var(--muted);margin:10px 0 22px;font-size:.875rem}.day-details__list{gap:12px;display:grid}.day-details__content--event{animation:.18s ease-out details-forward}.day-details__content--list{animation:.18s ease-out details-back}.changes-button{border:1px solid var(--line-strong);background:var(--brand-soft);min-height:40px;color:var(--brand-strong);border-radius:10px;padding:6px 12px;font-size:.8rem;font-weight:650}.changes-dialog{overscroll-behavior:contain;height:auto;overflow-y:auto}.changes-header{z-index:1;background:var(--surface);border-bottom:1px solid var(--line);align-items:flex-start;gap:12px;padding:22px;display:flex;position:sticky;top:0}.changes-header>div{flex:1;min-width:0}.changes-header h2{letter-spacing:-.025em;margin:0;font-size:1.25rem;font-weight:700}.changes-header p{color:var(--muted);margin:6px 0 0;font-size:.875rem}.changes-list{gap:14px;margin:0;padding:20px;list-style:none;display:grid}.changes-list>li{border:1px solid var(--line);overflow-wrap:anywhere;border-radius:14px;padding:16px}.change-label{color:var(--brand);font-size:.8rem;font-weight:700;display:inline-block}.change-label--cancelled{color:var(--danger)}.changes-list h3{margin:6px 0;font-size:1rem;font-weight:650}.change-date,.change-caution{color:var(--muted);margin:6px 0 0;font-size:.875rem}.change-caution{color:#75531d}.change-values{gap:12px;margin:12px 0 0;display:grid}.change-values dt{margin-bottom:4px;font-size:.875rem;font-weight:650}.change-values dd{margin:0;padding:4px 0;font-size:.875rem}.change-values dd span{min-width:86px;color:var(--muted);display:inline-block}.changes-footer{padding:14px 20px calc(14px + env(safe-area-inset-bottom));background:var(--surface);border-top:1px solid var(--line);position:sticky;bottom:0}.changes-footer .primary-button{width:100%}.empty-state{min-height:220px;color:var(--muted);text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:30px 20px;display:flex}.empty-state>svg{color:#749481;margin-bottom:6px}.empty-state>span{background:var(--brand-soft);color:var(--brand);border-radius:8px;padding:4px 10px;font-size:.75rem;font-weight:650}.empty-state h1,.empty-state h2{color:var(--text);letter-spacing:-.02em;margin:0;font-size:1.15rem;font-weight:650}.empty-state p{max-width:400px;margin:0;font-size:.875rem;line-height:1.6}.empty-state--error{min-height:65dvh}.empty-state--error .primary-button{margin-top:14px}.day-empty{border:1px dashed var(--line-strong);border-radius:18px;min-height:0;margin-bottom:22px;padding:20px}.primary-button{background:var(--brand-strong);color:#fff;border:0;border-radius:12px;justify-content:center;align-items:center;gap:8px;min-height:44px;padding:0 18px;font-weight:650;text-decoration:none;display:inline-flex}.text-button{min-height:44px;color:var(--brand);background:0 0;border:0;justify-content:center;align-items:center;gap:4px;margin-top:4px;padding:4px 0;font-size:.8rem;font-weight:700;display:inline-flex}.offline-page{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:12px;min-height:100dvh;padding:24px;display:flex}.offline-page h1{margin:8px 0 0;font-size:1.4rem;font-weight:650}.offline-page p{max-width:420px;color:var(--muted);margin:0 0 10px}@media (min-width:1024px){.month-grid{grid-template-columns:repeat(5,minmax(0,1fr)) repeat(2,minmax(0,.72fr))}}@media (min-width:720px){.app-shell--week{flex-direction:column;height:100dvh;min-height:540px;display:flex}.main-content--week{flex-direction:column;flex:1;min-height:0;padding-block:16px 12px;display:flex}.schedule-section--week,.schedule-section--week .schedule-view,.week-overview{flex-direction:column;flex:1;min-height:0;display:flex}.schedule-section--week .schedule-toolbar{padding-bottom:12px}.week-overview .week-caption{flex-shrink:0;margin-bottom:10px}.week-overview .week-scroll{flex-direction:column;flex:1;min-height:0;max-height:none;display:flex;overflow:hidden}.week-overview .week-canvas{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.week-overview .week-headers{flex-shrink:0;min-height:52px}.week-overview .week-date{flex-direction:row;gap:8px;min-height:52px;padding:6px}.week-overview .week-all-day{flex-shrink:0;max-height:25%;overflow:auto}.week-overview .week-all-day__event{white-space:nowrap;text-overflow:ellipsis;min-height:30px;padding-block:5px;overflow:hidden}.week-overview .week-time-grid{flex-direction:column;flex:1;min-height:0;display:flex}.week-overview .week-timed{flex:1;height:auto;min-height:0}.week-overview .week-hours,.week-overview .week-day-track{min-height:0}.week-overview .week-day-track{background-size:100% calc(100% / var(--week-hours)), 100% calc(100% / (var(--week-hours) * 2))}.details-panel,.changes-dialog{border-radius:22px 0 0 22px;width:min(490px,100vw - 80px);height:100dvh;max-height:100dvh;inset:0 0 0 auto}.details-panel[open],.changes-dialog[open]{animation-name:sheet-in-side}.details-handle{display:none}.details-navigation{min-height:76px;padding-inline:24px}.details-body{padding:28px}}@media (min-width:720px) and (max-width:1100px){.main-content{padding-inline:20px}.schedule-toolbar{gap:12px}.view-switch button{padding-inline:11px}.view-switch svg{display:none}}@media (max-width:719px){:root{--mobile-gutter:16px;--mobile-inset-left:max(var(--mobile-gutter), env(safe-area-inset-left,0px));--mobile-inset-right:max(var(--mobile-gutter), env(safe-area-inset-right,0px));--mobile-nav-height:72px;--mobile-nav-bottom:max(12px, calc(env(safe-area-inset-bottom,0px) + 8px));--mobile-nav-clearance:calc(var(--mobile-nav-height) + var(--mobile-nav-bottom) + 16px)}html{scroll-padding-top:calc(82px + env(safe-area-inset-top,0px));scroll-padding-bottom:var(--mobile-nav-clearance)}.topbar__inner{min-height:66px;padding-left:var(--mobile-inset-left);padding-right:var(--mobile-inset-right);gap:8px}.brand strong{font-size:.94rem}.brand small{font-size:.66rem}.brand__mark{border-radius:11px;width:34px;height:36px}.brand{gap:8px}.group-select select{max-width:180px;padding-inline:7px;font-size:1rem}.date-picker input{font-size:1rem}.main-content{padding:12px var(--mobile-inset-right) var(--mobile-nav-clearance) var(--mobile-inset-left)}.schedule-toolbar{gap:6px;padding-bottom:14px}.period-heading>p{display:none}.date-picker{gap:5px;min-height:44px}.date-picker h1,.date-picker h2{letter-spacing:-.025em;white-space:nowrap;font-size:1rem}.date-picker>svg{width:13px}.period-month--long{display:none}.period-month--short{display:inline}.date-navigation{gap:0}.date-navigation .icon-button{width:40px}.today-button{padding-inline:9px;font-size:.72rem}.view-switch{inset:auto var(--mobile-inset-right) var(--mobile-nav-bottom) var(--mobile-inset-left);z-index:40;height:var(--mobile-nav-height);border:1px solid var(--line);background:var(--surface);-webkit-user-select:none;user-select:none;border-radius:22px;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px;max-width:420px;margin-inline:auto;padding:5px;display:grid;position:fixed;box-shadow:0 8px 30px #192d261a,0 2px 6px #192d2608}.view-switch button{border-radius:17px;flex-direction:column;gap:3px;min-width:0;min-height:60px;padding:6px;font-size:.8125rem;font-weight:650;line-height:1.2;transition:background-color .18s,color .18s,transform .15s}.view-switch button>svg{flex-shrink:0;width:22px;height:22px}.view-switch button:active{background:var(--surface-soft);transform:scale(.96)}.view-switch button:focus-visible{outline-offset:-3px}.view-switch .active,.view-switch .active:active{background:var(--brand-soft);color:var(--brand-strong);box-shadow:none}.view-switch .active svg{stroke-width:2.2px}.day-strip{border-radius:16px;gap:2px;padding:4px}.day-strip button{border-radius:11px;gap:2px;min-height:66px;padding:6px 0 5px}.day-strip button>span{font-size:.66rem}.day-strip button strong{font-size:1.05rem}.day-heading{padding:22px 0 20px}.day-heading h1{font-size:1.85rem}.day-calendar.week-view{--week-axis-width:48px}.day-calendar .week-hours>span{right:5px}.day-calendar .week-now__time{width:calc(var(--week-axis-width) - 3px);padding-inline:1px;left:0}.day-calendar .week-course:not([data-lanes="1"]){padding-inline:5px}.day-empty{padding-inline:16px}.schedule-footer{align-items:flex-start;padding-top:18px}.schedule-freshness{padding-block:4px;font-size:.7rem}.schedule-freshness small{font-size:.68rem}.schedule-freshness--warning{padding:8px}.info-menu summary{padding-inline:10px;font-size:.75rem}.info-menu__panel{bottom:calc(100% + 8px)}.main-content--month{padding-top:12px;padding-bottom:var(--mobile-nav-clearance)}.month-caption{padding-bottom:12px;font-size:.72rem;display:block}.month-caption>span{display:block}.month-caption>span+span{margin-top:3px;font-size:.68rem}.month-grid{grid-template-rows:30px repeat(var(--week-count), minmax(0, 1fr));border-radius:14px}.month-day{align-items:center;gap:4px;padding:7px 3px}.month-day__heading{flex-direction:column;gap:7px;height:auto;margin:0}.month-day__heading strong{width:28px;height:28px;font-size:.8rem}.month-day__heading>span{color:#496654;background:#e7eee8;border-radius:6px;min-width:20px;padding:2px 5px;font-size:.63rem}.month-day__events,.month-day__more{display:none}.week-view{--week-axis-width:52px;--week-min-day-width:160px}.week-caption{gap:5px;margin-bottom:8px}.week-caption h2{font-size:.875rem}.week-caption>span{font-size:.72rem}.week-mobile-hint{color:var(--muted);margin:0 0 12px;font-size:.75rem;display:block}.week-scroll{max-height:max(320px, calc(100dvh - var(--mobile-nav-clearance) - 225px - env(safe-area-inset-top,0px)));border-radius:14px}.week-hours>span{right:7px}}@media (display-mode:standalone){html,body,.details-body,.changes-dialog,.week-scroll{touch-action:pan-x pan-y}}@media (max-width:719px) and (display-mode:standalone){:root{--mobile-nav-bottom:max(24px, calc(env(safe-area-inset-bottom,0px) + 8px))}html,body{overscroll-behavior-y:none}}@media (max-width:359px){:root{--mobile-gutter:12px}.brand__mark{display:none}.group-select select{max-width:168px}.date-picker>svg{display:none}.date-picker h1,.date-picker h2{font-size:.88rem}.date-navigation .icon-button{width:36px}.today-button{padding-inline:7px}.day-strip button>span{font-size:.62rem}}@media (max-width:719px) and (max-height:620px){.app-shell--month{height:auto;min-height:620px}.month-grid{min-height:310px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@keyframes sheet-in{0%{opacity:.85;transform:translateY(20px)}}@keyframes sheet-in-side{0%{opacity:.85;transform:translate(20px)}}@keyframes details-forward{0%{opacity:.3;transform:translate(7px)}}@keyframes details-back{0%{opacity:.3;transform:translate(-7px)}}
