.app-shell.app-shell--schedule{color:#101722;background:#c9d5e7}.app-shell--schedule .app-shell__content{padding-bottom:0}.schedule-page{height:100dvh;min-height:0;padding-top:calc(4px + env(safe-area-inset-top));flex-direction:column;display:flex}.schedule-header{justify-content:space-between;align-items:center;display:flex}.schedule-header h1{letter-spacing:-.5px;margin:0;font-size:clamp(23px,5.5vw,26px);font-weight:500;line-height:1}.schedule-header p{gap:12px;margin:7px 0 0;font-size:17px;line-height:1.1;display:flex}.schedule-header p strong{font-weight:500}.schedule-week-select{align-items:center;min-height:32px;margin:-7px 0;display:inline-flex;position:relative}.schedule-week-select select{min-height:32px;color:inherit;appearance:none;-webkit-tap-highlight-color:transparent;background:0 0;border:0;border-radius:8px;padding:0 18px 0 0;font-weight:500;line-height:1.1}.schedule-week-select select:active,.schedule-week-select select:disabled{opacity:.62}.schedule-week-select select:focus,.schedule-week-select select:focus-visible{box-shadow:none;outline:0}.schedule-week-select svg{pointer-events:none;fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5px;width:12px;height:12px;position:absolute;right:1px}.schedule-header__actions{align-items:center;gap:4px;display:flex}.schedule-header__actions button{color:#080d13;background:0 0;border:0;border-radius:12px;place-items:center;width:44px;height:44px;padding:0;font-size:31px;line-height:1;transition:transform .14s cubic-bezier(.23,1,.32,1);display:grid;position:relative}.schedule-header__actions button:active{transform:scale(.95)}.schedule-header__actions button:disabled{cursor:wait;opacity:.42}.schedule-header__actions svg{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.8px;width:26px;height:26px}.schedule-header__actions .round-action,.schedule-header__actions .more-button{letter-spacing:1px;border-radius:50%;font-size:13px}.schedule-header__actions .round-action:before,.schedule-header__actions .more-button:before{pointer-events:none;content:"";border:1.7px solid;border-radius:50%;width:29px;height:29px;position:absolute}.schedule-header__actions .round-action svg{width:20px;height:20px}.schedule-more{display:flex;position:relative}.schedule-more-menu{z-index:20;transform-origin:calc(100% - 22px) 0;-webkit-backdrop-filter:blur(22px)saturate(150%);backdrop-filter:blur(22px)saturate(150%);background:#ebf1f8e0;border:0;border-radius:18px;width:min(238px,100vw - 44px);padding:6px;position:absolute;top:calc(100% + 3px);right:0;box-shadow:0 18px 44px #1f2c3d33,0 2px 8px #1f2c3d14}.schedule-semester-option{border-radius:13px;justify-content:space-between;align-items:center;min-height:58px;padding:9px 36px 9px 12px;display:flex;position:relative}.schedule-semester-option:active{background:#ffffff80}.schedule-semester-option span{flex-direction:column;gap:3px;min-width:0;display:flex}.schedule-semester-option strong{color:#101722;font-size:15px;font-weight:650;line-height:1.2}.schedule-semester-option small{color:#1017229e;text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:1.25;overflow:hidden}.schedule-header__actions .schedule-semester-option svg{pointer-events:none;stroke-width:1.6px;width:12px;height:12px;position:absolute;right:13px}.schedule-semester-option select{cursor:pointer;opacity:0;width:100%;height:100%;position:absolute;inset:0}.schedule-semester-option select:focus-visible{outline:0}.schedule-more-menu-enter-active,.schedule-more-menu-leave-active{transition:opacity .15s ease, transform .18s var(--ease-out)}.schedule-more-menu-enter-from,.schedule-more-menu-leave-to{opacity:0;transform:translateY(-4px)scale(.94)}.week-strip{grid-template-columns:46px repeat(7,minmax(0,1fr));margin:12px -16px 16px;display:grid}.week-strip__month,.week-strip button{color:#68717e;background:0 0;border:0;flex-direction:column;justify-content:center;align-items:center;gap:4px;min-width:0;padding:0;display:flex}.week-strip__month{color:#0b1119;font-size:13px;font-weight:650}.week-strip__month strong,.week-strip__month span{line-height:1}.week-strip button span{font-size:15px;line-height:1}.week-strip button strong{font-size:14px;font-weight:400;line-height:1}.week-strip button{min-height:44px}.week-strip button.is-active{color:#111925;font-weight:650}.week-strip button.is-active strong{font-weight:650}.schedule-offline-status{color:#101722ad;background:#ffffff6b;border:.5px solid #ffffffb3;border-radius:14px;align-self:flex-start;align-items:center;gap:7px;min-height:28px;margin:-8px 0 8px;padding:5px 10px;font-size:12px;display:flex}.schedule-offline-status strong{color:#101722;font-weight:650}.schedule-board{flex:1;min-height:0;margin-left:-16px;margin-right:-16px;position:relative;overflow:hidden}.schedule-state{z-index:4;color:#101722ad;text-align:center;flex-direction:column;justify-content:center;align-items:center;padding:28px;display:flex;position:absolute;inset:0}.schedule-state strong{color:#101722;font-size:17px}.schedule-state p{max-width:280px;margin:8px 0 0;font-size:13px;line-height:1.5}.schedule-state button{color:#101722;background:#ffffff7a;border:0;border-radius:18px;min-height:36px;margin-top:16px;padding:0 17px;font-weight:600;box-shadow:0 5px 16px #27364a1f}.schedule-state__spinner{border:2px solid #10172229;border-top-color:#101722b8;border-radius:50%;width:25px;height:25px;animation:.72s linear infinite schedule-spin}.schedule-state--error p{color:#5d2626b8}.schedule-grid{grid-template-rows:repeat(11,minmax(0,1fr));grid-template-columns:46px repeat(7,minmax(0,1fr));min-width:0;height:100%;display:grid}.schedule-grid__time{z-index:1;color:#111925;background:0 0;flex-direction:column;grid-column:1;justify-content:center;align-items:center;display:flex}.schedule-grid__time strong{margin-bottom:3px;font-size:17px;font-weight:500;line-height:1}.schedule-grid__time span{font-size:11px;line-height:1.3}.schedule-grid__cell{min-width:0}.course-block{z-index:2;color:#26343d;text-align:center;border:2px solid #ffffff9e;border-radius:7px;flex-direction:column;justify-content:center;align-items:center;min-width:0;margin:3px 1px;padding:4px 2px;display:flex;position:relative;overflow:hidden;box-shadow:0 0 0 1px #fff3}.course-block strong,.course-block span{overflow-wrap:anywhere;max-width:100%;font-size:clamp(11px,3vw,14px);font-weight:650;line-height:1.25}.course-block--haze-blue{background:#829bb9}.course-block--sage{background:#829a82}.course-block--terracotta{background:#be8067}.course-block--mustard{background:#b99a4f}.course-block--dusty-purple{background:#9585ad}.course-block--blue-gray{background:#709a94}.course-block--rose-brown{background:#b37782}.course-block--caramel{background:#b68a62}.course-block.is-muted{z-index:1;opacity:.48}.course-block__status{color:#26343d;text-overflow:ellipsis;white-space:nowrap;background:#ffffff85;border-radius:4px;font-size:8px;font-weight:650;line-height:12px;position:absolute;bottom:2px;left:3px;right:3px;overflow:hidden}.add-course-sheet-backdrop{z-index:100;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#141d2947;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}.add-course-sheet{width:min(100%,480px);max-height:calc(100dvh - env(safe-area-inset-top) - 12px);color:#101722;background:#ebf1f8fa;border-radius:24px 24px 0 0;flex-direction:column;display:flex;overflow:hidden;box-shadow:0 -20px 60px #18233238,0 -2px 12px #18233214}.add-course-sheet__grabber{background:#3c3c4347;border-radius:3px;flex:none;align-self:center;width:36px;height:5px;margin-top:7px}.add-course-sheet__header{grid-template-columns:80px 1fr 80px;align-items:center;min-height:52px;padding:0 6px;display:grid}.add-course-sheet__header h2{text-align:center;margin:0;font-size:17px;font-weight:650}.add-course-sheet__header button{color:#101722b3;background:0 0;border:0;border-radius:12px;min-width:44px;min-height:44px;padding:0 10px}.add-course-sheet__header button:first-child{justify-self:start}.add-course-sheet__header button:last-child{justify-self:end}.add-course-sheet__header button.is-primary{color:#0878e8;font-weight:650}.add-course-sheet__header button:active,.add-course-form__repeat button:active{opacity:.58}.add-course-sheet__header button:disabled{opacity:.42}.add-course-form{padding:4px 16px calc(18px + env(safe-area-inset-bottom));overscroll-behavior:contain;overflow-y:auto}.add-course-form__group{background:#ffffff9e;border-radius:16px;margin-bottom:14px;overflow:hidden;box-shadow:0 7px 22px #2836480d,inset 0 0 0 .5px #ffffffb8}.add-course-form__group>label{grid-template-columns:94px minmax(0,1fr);align-items:center;min-height:52px;padding:4px 12px;display:grid;position:relative}.add-course-form__group>label+label:before{content:"";background:#3c3c4329;height:.5px;position:absolute;top:0;left:12px;right:0}.add-course-form label>span{font-size:15px;font-weight:500}.add-course-form input,.add-course-form select{color:#101722;text-align:right;width:100%;min-width:0;min-height:44px;box-shadow:none;background:0 0;border:0;border-radius:10px;outline:0;padding:0}.add-course-form input::placeholder{color:#3c3c4370}.add-course-form input:focus,.add-course-form select:focus,.add-course-form select:focus-visible{box-shadow:none;outline:0}.add-course-form__split-row{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.add-course-form__split-row+.add-course-form__split-row,.add-course-form__group>.add-course-form__repeat{position:relative}.add-course-form__split-row+.add-course-form__split-row:before,.add-course-form__group>.add-course-form__repeat:before{content:"";background:#3c3c4329;height:.5px;position:absolute;top:0;left:12px;right:12px}.add-course-form__split-row label{flex-direction:column;gap:2px;min-width:0;min-height:70px;padding:10px 12px 6px;display:flex}.add-course-form__split-row label+label{box-shadow:inset .5px 0 #3c3c4321}.add-course-form__split-row select{text-align:left}.add-course-form__repeat{grid-template-columns:repeat(3,1fr);gap:2px;margin:0 10px;padding:9px 0 10px;display:grid}.add-course-form__repeat button{color:#1017229e;background:#7676801f;border:0;border-radius:9px;min-height:34px;padding:0 10px;font-size:13px;font-weight:600}.add-course-form__repeat button.is-active{color:#101722;background:#fffffff0;box-shadow:0 2px 7px #1e28361f,0 0 0 .5px #3c3c4312}.add-course-form__error,.add-course-form__note{margin:-3px 4px 0;font-size:12px;line-height:1.4}.add-course-form__error{color:#b4232a;margin-bottom:8px}.add-course-form__note{color:#1017228a;text-align:center}.add-course-sheet-enter-active,.add-course-sheet-leave-active{transition:opacity .2s}.add-course-sheet-enter-active .add-course-sheet,.add-course-sheet-leave-active .add-course-sheet{transition:transform .36s cubic-bezier(.32,.72,0,1)}.add-course-sheet-enter-from,.add-course-sheet-leave-to{opacity:0}.add-course-sheet-enter-from .add-course-sheet,.add-course-sheet-leave-to .add-course-sheet{transform:translateY(100%)}@keyframes schedule-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.schedule-state__spinner{animation-duration:1.5s}.schedule-more-menu-enter-active,.schedule-more-menu-leave-active{transition:opacity .12s}.schedule-more-menu-enter-from,.schedule-more-menu-leave-to{transform:none}.add-course-sheet-enter-active,.add-course-sheet-leave-active{transition:opacity .12s}.add-course-sheet-enter-active .add-course-sheet,.add-course-sheet-leave-active .add-course-sheet{transition:none}.add-course-sheet-enter-from .add-course-sheet,.add-course-sheet-leave-to .add-course-sheet{transform:none}}@media (prefers-reduced-transparency:reduce){.schedule-more-menu{-webkit-backdrop-filter:none;backdrop-filter:none;background:#eaf0f7}.add-course-sheet-backdrop{-webkit-backdrop-filter:none;backdrop-filter:none;background:#141d2975}.add-course-sheet{background:#ebf1f8}}@media (width<=380px){.schedule-page{padding-left:16px;padding-right:16px}.schedule-header__actions{gap:0}.week-strip,.schedule-board{margin-left:-10px;margin-right:-10px}.course-block{margin:2px 1px}}@media (height<=740px){.schedule-page{padding-top:env(safe-area-inset-top)}.schedule-header p{margin-top:4px;font-size:15px}.week-strip{margin-top:7px;margin-bottom:9px}.course-block strong,.course-block span{font-size:9px}}.app-shell.app-shell--tools{background:#f2f2f7}.tools-page{padding-top:calc(8px + env(safe-area-inset-top))}.tool-search{-webkit-backdrop-filter:blur(22px)saturate(140%);backdrop-filter:blur(22px)saturate(140%);background:#ffffff94;border:.5px solid #ffffffd1;border-radius:28px;align-items:center;height:52px;margin-top:0;padding:0 18px;display:flex;box-shadow:0 .5px #00000017,0 8px 24px #262a300f}.tool-search>span{border:1.7px solid #8e8e93;border-radius:50%;width:18px;height:18px;margin-right:14px;position:relative}.tool-search>span:after{content:"";background:#8e8e93;border-radius:2px;width:7px;height:2px;position:absolute;bottom:-4px;right:-6px;transform:rotate(45deg)}.tool-search input{color:#1f1f23;background:0 0;border:0;outline:0;width:100%;font-size:16px}.tool-search input::placeholder{color:#a0a0a6}.tool-search:focus-within{border-color:var(--focus-ring);box-shadow:0 0 0 3px var(--focus-ring-soft), 0 8px 24px #262a300f}.tools-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:20px;display:grid}.tools-grid button{color:#242428;-webkit-backdrop-filter:blur(22px)saturate(140%);backdrop-filter:blur(22px)saturate(140%);background:#ffffff94;border:.5px solid #ffffffd1;border-radius:22px;flex-direction:column;justify-content:center;align-items:center;gap:9px;min-height:128px;padding:16px 10px 14px;transition:transform .16s,background-color .16s;display:flex;box-shadow:0 .5px #00000017,0 12px 30px #262a3011}.tools-grid button:not(:disabled):active{background:#f5f5f7d1;transform:scale(.985)}.tools-grid button:disabled{cursor:default;opacity:1}.tools-grid img{object-fit:contain;width:66px;height:66px}.tools-grid .tool-copy{justify-items:center;gap:2px;display:grid}.tools-grid .tool-label{font-size:17px;font-weight:590}.tools-grid small{color:#8e8e93;letter-spacing:.04em;font-size:11px;font-weight:500}body:has(.classroom-page){background:#f2f2f7;min-width:0}.classroom-page{width:100%;max-width:480px;min-height:100dvh;padding-bottom:calc(32px + env(safe-area-inset-bottom));color:#1c1c1e;background:#f2f2f7;margin:0 auto}.classroom-topbar{z-index:20;min-height:calc(60px + env(safe-area-inset-top));padding:calc(8px + env(safe-area-inset-top)) 22px 8px;-webkit-backdrop-filter:blur(18px)saturate(150%);backdrop-filter:blur(18px)saturate(150%);background:#f2f2f7e0;grid-template-columns:44px minmax(0,1fr) 44px;align-items:center;display:grid;position:sticky;top:0}.classroom-topbar h1{text-align:center;margin:0;font-size:18px;font-weight:650;line-height:1.2}.classroom-icon-button{color:#1c1c1e;width:44px;height:44px;transition:transform .14s var(--ease-out);background:#ffffffdb;border:0;border-radius:50%;place-items:center;padding:0;display:grid;box-shadow:0 .5px 1px #1c1c1e0f}.classroom-icon-button:active{transform:scale(.96)}.classroom-icon-button svg{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.8px;width:21px;height:21px}.classroom-content{padding:16px 22px 0}.classroom-state{color:#636366;text-align:center;flex-direction:column;justify-content:center;align-items:center;min-height:calc(100dvh - 100px);padding:32px 20px;display:flex}.classroom-state h2{color:#1c1c1e;margin:13px 0 0;font-size:18px;font-weight:650}.classroom-state p{max-width:290px;margin:10px 0 0;font-size:14px;line-height:1.5}.classroom-spinner,.classroom-button-spinner{border:2px solid #d1d1d6;border-top-color:#636366;border-radius:50%;animation:.72s linear infinite classroom-spin}.classroom-spinner{width:28px;height:28px}.classroom-button-spinner{border-color:#fff #ffffff6b #ffffff6b;width:17px;height:17px}.classroom-state__icon{color:#ff383c;background:#ff383c17;border-radius:50%;place-items:center;width:42px;height:42px;font-size:22px;font-weight:650;display:grid}.classroom-state__empty-mark{color:#8e8e93;background:#e5e5ea;border-radius:50%;place-items:center;width:46px;height:46px;font-size:24px;display:grid}.classroom-state>button,.classroom-result-state>button{color:#08f;min-height:44px;transition:transform .14s var(--ease-out);background:#fffffff0;border:0;border-radius:22px;margin-top:18px;padding:0 20px;font-weight:600}.classroom-state>button:active,.classroom-result-state>button:active{transform:scale(.97)}.classroom-filter-card{background:#fffffff0;border-radius:20px;padding:16px;box-shadow:0 .5px 1px #1c1c1e06}.classroom-sheet__fields>label,.classroom-sheet__pair>label{display:block}.classroom-sheet__fields label>span:first-child{color:#636366;margin:0 0 7px 2px;font-size:13px;display:block}.classroom-select-control{display:block;position:relative}.classroom-select-control select{appearance:none;color:#1c1c1e;text-overflow:ellipsis;white-space:nowrap;background:#f2f2f7;border:0;border-radius:14px;outline:0;width:100%;height:48px;padding:0 38px 0 14px;font-size:15px;font-weight:560;overflow:hidden}.classroom-select-control select:disabled{color:#8e8e93;opacity:.72}.classroom-select-control svg{pointer-events:none;fill:none;stroke:#8e8e93;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.7px;width:12px;height:12px;position:absolute;top:50%;right:14px;transform:translateY(-50%)}.classroom-weekday-picker,.classroom-section-picker{border:0;min-width:0;margin:16px 0 0;padding:0}.classroom-filter-card>.classroom-section-picker{margin-top:0}.classroom-weekday-picker legend,.classroom-section-picker legend{color:#636366;width:100%;padding:0 2px;font-size:13px}.classroom-section-picker legend{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.classroom-section-picker legend small{color:#8e8e93;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:400;overflow:hidden}.classroom-weekday-picker>div{grid-template-columns:repeat(8,minmax(0,1fr));gap:8px;margin-top:8px;display:grid}.classroom-weekday-picker button{grid-column:span 2}.classroom-weekday-picker button:nth-child(5){grid-column:2/span 2}.classroom-weekday-picker button,.classroom-section-picker button{color:#636366;min-width:0;height:44px;transition:color .14s ease, background-color .14s ease, transform .12s var(--ease-out);background:#f2f2f7;border:0;padding:0;font-size:14px;font-weight:600}.classroom-weekday-picker button{border-radius:13px}.classroom-weekday-picker button.is-selected,.classroom-section-picker button.is-selected{color:#fff;background:#08f}.classroom-weekday-picker button:active,.classroom-section-picker button:active{transform:scale(.95)}.classroom-section-picker>div{grid-template-columns:repeat(3,minmax(0,1fr));gap:7px;margin-top:7px;display:grid}.classroom-section-picker button{border-radius:14px}.classroom-advanced-trigger{text-align:left;background:0 0;border:0;border-top:.5px solid #3c3c432e;justify-content:space-between;align-items:center;gap:12px;width:100%;min-height:50px;margin-top:12px;padding:6px 2px;display:flex}.classroom-advanced-trigger>span{min-width:0}.classroom-advanced-trigger strong,.classroom-advanced-trigger small{display:block}.classroom-advanced-trigger strong{font-size:15px;font-weight:600}.classroom-advanced-trigger small{color:#8e8e93;text-overflow:ellipsis;white-space:nowrap;margin-top:3px;font-size:12px;font-weight:400;overflow:hidden}.classroom-advanced-trigger>svg{fill:none;stroke:#8e8e93;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.8px;flex:none;width:12px;height:12px}.classroom-inline-error{color:#a6232b;margin:10px 0 0;font-size:13px;line-height:1.45}.classroom-inline-error button{color:#08f;background:0 0;border:0;min-height:32px;padding:0 8px;font-weight:600}.classroom-search-button{color:#fff;width:100%;min-height:46px;transition:transform .14s var(--ease-out), opacity .12s ease;background:#08f;border:0;border-radius:14px;justify-content:center;align-items:center;gap:9px;margin-top:8px;font-size:16px;font-weight:650;display:flex}.classroom-search-button:active:not(:disabled){transform:scale(.98)}.classroom-search-button:disabled{opacity:.42}.classroom-results{margin-top:22px}.classroom-results-heading{justify-content:space-between;align-items:flex-start;gap:12px;min-height:44px;padding:0 2px 10px;display:flex}.classroom-results-heading h2{letter-spacing:-.02em;margin:0;font-size:20px;font-weight:650}.classroom-results-heading p{color:#8e8e93;margin:5px 0 0;font-size:12px;line-height:1.4}.classroom-results-heading__status{justify-content:flex-end;align-items:center;gap:4px;min-height:32px;display:flex}.classroom-results-heading__status span{color:#8e8e93;white-space:nowrap;font-size:12px}.classroom-results-heading__status button{color:#08f;background:0 0;border:0;min-width:44px;min-height:44px;padding:0 4px;font-size:12px;font-weight:600}.classroom-results-heading__status button:disabled{color:#8e8e93}.classroom-result-notice{color:#636366;margin:-2px 2px 10px;font-size:12px;line-height:1.45}.classroom-result-notice.is-error{color:#a6232b}.classroom-skeleton-list,.classroom-groups{gap:16px;display:grid}.classroom-skeleton-list{background:#fffffff0;border-radius:22px;overflow:hidden}.classroom-skeleton-list>div{min-height:72px;padding:17px;position:relative}.classroom-skeleton-list>div+div:before{content:"";background:#3c3c431f;height:.5px;position:absolute;top:0;left:17px;right:0}.classroom-skeleton-list span{background:#e5e5ea;border-radius:6px;height:12px;animation:1.1s ease-in-out infinite alternate classroom-skeleton;display:block}.classroom-skeleton-list span:first-child{width:42%}.classroom-skeleton-list span:last-child{width:28%;height:9px;margin-top:9px}.classroom-group>header{justify-content:space-between;align-items:baseline;gap:12px;min-height:34px;padding:0 3px 8px;display:flex}.classroom-group>header h3{text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:15px;font-weight:600;overflow:hidden}.classroom-group>header span{color:#8e8e93;white-space:nowrap;font-size:12px}.classroom-list{background:#fffffff0;border-radius:22px;overflow:hidden;box-shadow:0 .5px 1px #1c1c1e06}.classroom-row{justify-content:space-between;align-items:center;gap:14px;min-height:72px;padding:14px 17px;display:flex;position:relative}.classroom-row+.classroom-row:before{content:"";background:#3c3c432e;height:.5px;position:absolute;top:0;left:17px;right:0}.classroom-row>div{min-width:0}.classroom-row h4{text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:17px;font-weight:620;line-height:1.25;overflow:hidden}.classroom-row>div>p{color:#8e8e93;margin:5px 0 0;font-size:13px}.classroom-capacity{color:#8e8e93;flex:none;align-items:baseline;gap:3px;margin:0;display:flex}.classroom-capacity strong{color:#1c1c1e;font-size:20px;font-weight:650}.classroom-capacity span{font-size:12px}.classroom-result-state{color:#636366;text-align:center;background:#fffffff0;border-radius:22px;flex-direction:column;justify-content:center;align-items:center;min-height:220px;padding:28px 20px;display:flex}.classroom-result-state--error>span{color:#ff383c;background:#ff383c17;border-radius:50%;place-items:center;width:40px;height:40px;font-size:20px;font-weight:650;display:grid}.classroom-result-state h3{color:#1c1c1e;margin:13px 0 0;font-size:17px;font-weight:650}.classroom-result-state p{max-width:290px;margin:8px 0 0;font-size:13px;line-height:1.5}.classroom-result-state__lines{gap:6px;width:48px;display:grid}.classroom-result-state__lines i{background:#c7c7cc;border-radius:3px;height:5px;display:block}.classroom-result-state__lines i:nth-child(2){width:72%}.classroom-result-state__lines i:nth-child(3){width:88%}.classroom-sheet-overlay{z-index:100;background:#1c1c1e38;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}.classroom-sheet{width:min(100%,480px);max-height:min(88dvh,760px);padding:8px 22px calc(22px + env(safe-area-inset-bottom));background:#f2f2f7;border-radius:28px 28px 0 0;outline:0;flex-direction:column;display:flex;overflow:hidden;box-shadow:0 -18px 46px #1c1c1e24}.classroom-sheet__handle{background:#c7c7cc;border-radius:3px;width:36px;height:5px;margin:0 auto 3px}.classroom-sheet>header{grid-template-columns:64px minmax(0,1fr) 64px;align-items:center;min-height:52px;display:grid}.classroom-sheet>header h2{text-align:center;margin:0;font-size:17px;font-weight:650}.classroom-sheet>header button{color:#636366;background:0 0;border:0;min-height:44px;padding:0;font-size:15px}.classroom-sheet>header button:first-child{text-align:left}.classroom-sheet>header button:last-child{text-align:right}.classroom-sheet>header button.is-primary{color:#08f;font-weight:650}.classroom-sheet__fields{background:#fffffff5;border-radius:22px;padding:0 17px;overflow:hidden}.classroom-sheet__body{overscroll-behavior:contain;scrollbar-width:none;min-height:0;padding:0 1px 2px;overflow-y:auto}.classroom-sheet__body::-webkit-scrollbar{display:none}.classroom-sheet__section-title{color:#8e8e93;margin:10px 3px 7px;font-size:12px;font-weight:500}.classroom-sheet__fields>label{padding:12px 0;position:relative}.classroom-sheet__fields>label+label:before{content:"";background:#3c3c432e;height:.5px;position:absolute;top:0;left:0;right:0}.classroom-sheet__pair{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;padding:12px 0;display:grid;position:relative}.classroom-sheet__pair:before,.classroom-sheet__weekday:before{content:"";background:#3c3c432e;height:.5px;position:absolute;top:0;left:0;right:0}.classroom-sheet__weekday{margin:0;padding:12px 0 14px;position:relative}.classroom-sheet__weekday>div{margin-top:8px}.classroom-sheet__fields .classroom-select-control select,.classroom-capacity-input{background:#f2f2f7;height:48px}.classroom-capacity-input{border-radius:14px;align-items:center;padding:0 14px;display:flex}.classroom-capacity-input input{color:#1c1c1e;background:0 0;border:0;outline:0;width:100%;height:100%;padding:0;font-size:15px;font-weight:560}.classroom-capacity-input input::placeholder{color:#8e8e93}.classroom-capacity-input small{color:#8e8e93;font-size:13px}.classroom-sheet__note{color:#8e8e93;margin:11px 3px 2px;font-size:12px;line-height:1.5}.classroom-sheet-enter-active{transition:opacity .22s var(--ease-out)}.classroom-sheet-leave-active{transition:opacity .16s var(--ease-out)}.classroom-sheet-enter-active .classroom-sheet{transition:transform .24s cubic-bezier(.32,.72,0,1)}.classroom-sheet-leave-active .classroom-sheet{transition:transform .18s cubic-bezier(.32,.72,0,1)}.classroom-sheet-enter-from,.classroom-sheet-leave-to{opacity:0}.classroom-sheet-enter-from .classroom-sheet,.classroom-sheet-leave-to .classroom-sheet{transform:translateY(100%)}@keyframes classroom-spin{to{transform:rotate(360deg)}}@keyframes classroom-skeleton{0%{opacity:.56}to{opacity:1}}@media (width<=370px){.classroom-topbar,.classroom-content{padding-left:16px;padding-right:16px}.classroom-filter-card{padding:16px}.classroom-weekday-picker>div{gap:7px}.classroom-weekday-picker button{font-size:13px}.classroom-sheet{max-height:92dvh;padding-left:16px;padding-right:16px}}@media (prefers-reduced-motion:reduce){.classroom-spinner,.classroom-button-spinner{animation-duration:1.4s}.classroom-skeleton-list span{animation:none}.classroom-icon-button,.classroom-weekday-picker button,.classroom-section-picker button,.classroom-search-button,.classroom-state>button,.classroom-result-state>button{transition:opacity .12s}.classroom-icon-button:active,.classroom-weekday-picker button:active,.classroom-section-picker button:active,.classroom-search-button:active,.classroom-state>button:active,.classroom-result-state>button:active{transform:none}.classroom-sheet-enter-active,.classroom-sheet-leave-active{transition:opacity .12s}.classroom-sheet-enter-active .classroom-sheet,.classroom-sheet-leave-active .classroom-sheet{transition:none}.classroom-sheet-enter-from .classroom-sheet,.classroom-sheet-leave-to .classroom-sheet{transform:none}}@media (prefers-reduced-transparency:reduce){.classroom-topbar{-webkit-backdrop-filter:none;backdrop-filter:none;background:#f2f2f7}}@media (prefers-contrast:more){.classroom-filter-card,.classroom-list,.classroom-result-state,.classroom-skeleton-list,.classroom-sheet__fields{border:1px solid #1c1c1e4d}.classroom-weekday-picker button,.classroom-section-picker button,.classroom-select-control select,.classroom-capacity-input{border:1px solid #1c1c1e38}}body:has(.exam-page){background:#f2f2f7;min-width:0}.exam-page{width:100%;max-width:480px;min-height:100dvh;padding-bottom:calc(34px + env(safe-area-inset-bottom));color:#1c1c1e;background:#f2f2f7;margin:0 auto}.exam-topbar{z-index:20;min-height:calc(60px + env(safe-area-inset-top));padding:calc(8px + env(safe-area-inset-top)) 22px 8px;-webkit-backdrop-filter:blur(18px)saturate(150%);backdrop-filter:blur(18px)saturate(150%);background:#f2f2f7e0;grid-template-columns:44px minmax(0,1fr) 44px;align-items:center;display:grid;position:sticky;top:0}.exam-topbar h1{text-align:center;letter-spacing:-.012em;margin:0;font-size:18px;font-weight:650;line-height:1.2}.exam-icon-button{color:#1c1c1e;width:44px;height:44px;transition:transform .14s var(--ease-out), opacity .12s ease;background:#ffffffdb;border:0;border-radius:50%;place-items:center;padding:0;display:grid;box-shadow:0 .5px 1px #1c1c1e0f}.exam-icon-button:active:not(:disabled){transform:scale(.96)}.exam-icon-button:disabled{opacity:.54}.exam-icon-button svg{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.8px;width:21px;height:21px}.exam-icon-button svg.is-spinning{animation:.72s linear infinite exam-spin}.exam-content{padding:12px 22px 0}.exam-page-state{color:#636366;text-align:center;flex-direction:column;justify-content:center;align-items:center;min-height:calc(100dvh - 100px);padding:32px 20px;display:flex}.exam-page-state h2,.exam-result-state h3{color:#1c1c1e;margin:13px 0 0;font-size:18px;font-weight:650;line-height:1.3}.exam-page-state p,.exam-result-state>p{max-width:290px;margin:9px 0 0;font-size:14px;line-height:1.5}.exam-spinner{border:2px solid #d1d1d6;border-top-color:#636366;border-radius:50%;width:28px;height:28px;animation:.72s linear infinite exam-spin}.exam-state-icon,.exam-empty-mark{border-radius:50%;place-items:center;width:44px;height:44px;display:grid}.exam-state-icon{color:#ff383c;background:#ff383c17;font-size:21px;font-weight:650}.exam-empty-mark{color:#8e8e93;background:#e5e5ea;font-size:23px}.exam-page-state>button,.exam-result-state>button{color:#08f;min-height:44px;transition:transform .14s var(--ease-out);background:#fffffff0;border:0;border-radius:22px;margin-top:18px;padding:0 20px;font-weight:600}.exam-page-state>button:active,.exam-result-state>button:active{transform:scale(.97)}.exam-filter-card{background:#fffffff0;border-radius:20px;padding:16px;box-shadow:0 .5px 1px #1c1c1e06}.exam-semester-field{display:block}.exam-semester-field>span:first-child{color:#636366;margin:0 0 7px 2px;font-size:13px;display:block}.exam-select-control{display:block;position:relative}.exam-select-control select{appearance:none;color:#1c1c1e;text-overflow:ellipsis;white-space:nowrap;background:#f2f2f7;border:0;border-radius:13px;outline:0;width:100%;height:44px;padding:0 38px 0 14px;font-size:15px;font-weight:560;overflow:hidden}.exam-select-control select:disabled{color:#8e8e93;opacity:.72}.exam-select-control svg{pointer-events:none;fill:none;stroke:#8e8e93;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.7px;width:12px;height:12px;position:absolute;top:50%;right:14px;transform:translateY(-50%)}.exam-batch-picker{border:0;min-width:0;margin:14px 0 0;padding:0}.exam-batch-picker legend{color:#636366;justify-content:space-between;align-items:baseline;gap:12px;width:100%;padding:0 2px;font-size:13px;display:flex}.exam-batch-picker legend small{color:#8e8e93;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:400;overflow:hidden}.exam-batch-options,.exam-batch-skeleton{flex-wrap:wrap;gap:7px;margin-top:7px;display:flex}.exam-batch-options button{color:#636366;min-height:44px;transition:color .14s ease, background-color .14s ease, transform .12s var(--ease-out);background:#f2f2f7;border:0;border-radius:13px;padding:0 14px;font-size:14px;font-weight:600}.exam-batch-options button.is-selected{color:#fff;background:#08f}.exam-batch-options button:active:not(:disabled){transform:scale(.96)}.exam-batch-options button:disabled{opacity:.7}.exam-batch-skeleton span{background:#e5e5ea;border-radius:14px;width:96px;height:44px;animation:1.1s ease-in-out infinite alternate exam-skeleton}.exam-batch-skeleton span:last-child{width:78px}.exam-inline-error,.exam-refresh-error{color:#a6232b;font-size:13px;line-height:1.45}.exam-inline-error{margin:10px 0 0}.exam-inline-error button,.exam-refresh-error button{color:#08f;background:0 0;border:0;min-height:32px;padding:0 7px;font-weight:600}.exam-no-batches{color:#636366;background:#f2f2f7;border-radius:15px;align-items:center;gap:12px;min-height:74px;margin-top:9px;padding:13px 14px;display:flex}.exam-no-batches>span{color:#8e8e93;background:#e5e5ea;border-radius:50%;flex:none;place-items:center;width:34px;height:34px;display:grid}.exam-no-batches strong{color:#1c1c1e;font-size:14px;font-weight:600}.exam-no-batches p{margin:4px 0 0;font-size:12px;line-height:1.4}.exam-today-card{background:#fffffff0;border-radius:20px;margin-top:16px;padding:14px 16px;box-shadow:0 .5px 1px #1c1c1e06}.exam-today-card>header{justify-content:space-between;align-items:center;gap:12px;min-height:40px;display:flex}.exam-today-card>header span{color:#8e8e93;font-size:11px;line-height:1.2;display:block}.exam-today-card>header h2{letter-spacing:-.015em;margin:3px 0 0;font-size:17px;font-weight:650;line-height:1.2}.exam-today-card>header>strong{color:#8e8e93;white-space:nowrap;font-size:12px;font-weight:500}.exam-today-list{border-top:.5px solid #3c3c4329;margin-top:8px}.exam-today-list article{grid-template-columns:60px minmax(0,1fr);align-items:center;gap:12px;min-height:62px;padding:11px 0;display:grid;position:relative}.exam-today-list article+article:before{content:"";background:#3c3c4324;height:.5px;position:absolute;top:0;left:72px;right:0}.exam-today-time{font-variant-numeric:tabular-nums;background:#f2f2f7;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;min-height:48px;padding:6px 4px;display:flex}.exam-today-time strong{font-size:15px;font-weight:680;line-height:1.1}.exam-today-time span{color:#8e8e93;margin-top:4px;font-size:10px;line-height:1.1}.exam-today-list h3{margin:0;font-size:15px;font-weight:650;line-height:1.25}.exam-today-list p{color:#636366;align-items:center;gap:4px;margin:5px 0 0;font-size:12px;line-height:1.3;display:flex}.exam-today-list p svg{fill:none;stroke:#8e8e93;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.25px;flex:none;width:13px;height:13px}.exam-today-empty{background:#f2f2f7;border-radius:14px;align-items:center;gap:11px;min-height:58px;margin-top:8px;padding:10px 12px;display:flex}.exam-today-empty>span{color:#636366;background:#e5e5ea;border-radius:50%;flex:none;place-items:center;width:32px;height:32px;font-size:15px;font-weight:650;display:grid}.exam-today-empty strong{font-size:14px;font-weight:620}.exam-today-empty p{color:#8e8e93;margin:3px 0 0;font-size:11px;line-height:1.35}.exam-results{margin-top:20px}.exam-results-heading{justify-content:space-between;align-items:flex-start;gap:12px;min-height:44px;padding:0 2px 9px;display:flex}.exam-results-heading>div{min-width:0}.exam-results-heading h2{letter-spacing:-.02em;margin:0;font-size:20px;font-weight:650;line-height:1.2}.exam-results-heading p{color:#8e8e93;text-overflow:ellipsis;white-space:nowrap;margin:5px 0 0;font-size:12px;line-height:1.4;overflow:hidden}.exam-results-heading>span{color:#8e8e93;white-space:nowrap;flex:none;font-size:12px}.exam-refresh-error{background:#ff383c12;border-radius:12px;margin:-2px 2px 10px;padding:10px 12px}.exam-skeleton-list,.exam-list{background:#fffffff0;border-radius:20px;overflow:hidden;box-shadow:0 .5px 1px #1c1c1e06}.exam-skeleton-list>div{grid-template-columns:62px minmax(0,1fr);gap:12px;min-height:90px;padding:14px 15px;display:grid;position:relative}.exam-skeleton-list>div+div:before{content:"";background:#3c3c431f;height:.5px;position:absolute;top:0;left:89px;right:0}.exam-skeleton-list span{background:#e5e5ea;border-radius:6px;height:12px;animation:1.1s ease-in-out infinite alternate exam-skeleton;display:block}.exam-skeleton-list>div>span{border-radius:12px;height:38px}.exam-skeleton-list div div span:first-child{width:72%}.exam-skeleton-list div div span:last-child{width:48%;height:9px;margin-top:12px}.exam-result-state{color:#636366;text-align:center;background:#fffffff0;border-radius:22px;flex-direction:column;justify-content:center;align-items:center;min-height:210px;padding:26px 20px;display:flex}.exam-groups{animation:exam-content-in .14s var(--ease-out) both;gap:16px;display:grid}.exam-group>header{justify-content:space-between;align-items:baseline;gap:12px;min-height:30px;padding:0 3px 6px;display:flex}.exam-group>header h3{margin:0;font-size:15px;font-weight:650;line-height:1.25}.exam-group>header span{color:#8e8e93;white-space:nowrap;font-size:12px}.exam-group--pending>header h3{color:#636366}.exam-row{grid-template-columns:64px minmax(0,1fr);align-items:start;gap:12px;min-height:96px;padding:14px 15px;display:grid;position:relative}.exam-row+.exam-row:before{content:"";background:#3c3c432e;height:.5px;position:absolute;top:0;left:91px;right:0}.exam-time{color:#1c1c1e;font-variant-numeric:tabular-nums;background:#f2f2f7;border-radius:13px;flex-direction:column;justify-content:center;align-items:center;min-height:52px;padding:7px 4px;display:flex}.exam-time strong{letter-spacing:-.015em;font-size:16px;font-weight:680;line-height:1.1}.exam-time span{color:#8e8e93;margin-top:5px;font-size:11px;line-height:1.1}.exam-time--pending{color:#636366}.exam-details{min-width:0}.exam-details h4{color:#1c1c1e;letter-spacing:-.012em;margin:0;font-size:16px;font-weight:650;line-height:1.3}.exam-location{color:#636366;align-items:flex-start;gap:5px;margin:4px 0 0;font-size:13px;line-height:1.35;display:flex}.exam-location svg{fill:none;stroke:#8e8e93;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.25px;flex:none;width:14px;height:14px;margin-top:1px}.exam-meta{flex-wrap:wrap;gap:5px;margin-top:7px;display:flex}.exam-meta span{color:#636366;background:#f2f2f7;border-radius:8px;min-height:22px;padding:3px 7px;font-size:11px;line-height:15px}.exam-meta span.is-danger{color:#c1242c;background:#ff383c17}.exam-remark{color:#636366;background:#f2f2f7;border-radius:10px;margin:8px 0 0;padding:7px 9px;font-size:12px;line-height:1.45}.exam-remark span{color:#8e8e93;margin-right:6px}.exam-page button:focus-visible,.exam-page select:focus-visible{outline-color:#0088ff8c}@keyframes exam-spin{to{transform:rotate(360deg)}}@keyframes exam-skeleton{0%{opacity:.55}to{opacity:1}}@keyframes exam-content-in{0%{opacity:0}to{opacity:1}}@media (width<=370px){.exam-topbar,.exam-content{padding-left:16px;padding-right:16px}.exam-filter-card{border-radius:20px;padding:14px}.exam-row{grid-template-columns:60px minmax(0,1fr);gap:10px;padding:13px 14px}.exam-row+.exam-row:before{left:84px}.exam-time strong{font-size:15px}}@media (prefers-reduced-motion:reduce){.exam-page *,.exam-page :before,.exam-page :after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@media (prefers-reduced-transparency:reduce){.exam-topbar,.exam-filter-card,.exam-today-card,.exam-list,.exam-result-state,.exam-skeleton-list{-webkit-backdrop-filter:none;backdrop-filter:none;background:#fff}}@media (prefers-contrast:more){.exam-topbar,.exam-filter-card,.exam-today-card,.exam-list,.exam-result-state,.exam-skeleton-list{background:#fff;border:1px solid #636366}}.calendar-page{width:100%;max-width:480px;height:100dvh;padding-top:calc(8px + env(safe-area-inset-top));padding-bottom:calc(10px + env(safe-area-inset-bottom));color:#1c1c1e;background:radial-gradient(circle at 88% 1%,#ffffffb8,#0000 27%),linear-gradient(#e9ebee 0%,#e6e8eb 58%,#eceef0 100%);flex-direction:column;margin:0 auto;display:flex;overflow:hidden}.calendar-topbar{grid-template-columns:44px 1fr 44px;align-items:center;min-height:48px;display:grid}.calendar-topbar>div{text-align:center;min-width:0}.calendar-topbar h1{letter-spacing:-.2px;margin:0;font-size:18px;font-weight:650;line-height:1.15}.calendar-topbar p{color:#777a80;margin:2px 0 0;font-size:11px;line-height:1.2}.calendar-icon-button{color:#34343a;-webkit-backdrop-filter:blur(20px)saturate(145%);backdrop-filter:blur(20px)saturate(145%);width:44px;height:44px;transition:transform .14s var(--ease-out);background:#ffffff9e;border:0;border-radius:50%;place-items:center;padding:0;text-decoration:none;display:grid;box-shadow:0 .5px #00000012,0 5px 16px #23272d0d}.calendar-icon-button:active{transform:scale(.96)}.calendar-icon-button:focus,.calendar-icon-button:focus-visible,.calendar-toolbar button:focus,.calendar-toolbar button:focus-visible,.calendar-toolbar a:focus,.calendar-toolbar a:focus-visible{outline:0}.calendar-icon-button svg{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.7px;width:21px;height:21px}.calendar-viewer{-webkit-overflow-scrolling:touch;overscroll-behavior:contain;background:#ffffff9e;border-radius:18px;flex:1;width:100%;min-width:0;min-height:0;margin-top:12px;position:relative;overflow:auto;box-shadow:0 .5px #00000014,0 14px 36px #262a3012}.calendar-image-stage{background:#76768014;place-items:center;min-width:100%;min-height:100%;display:grid}.calendar-image-stage img{-webkit-user-select:none;user-select:none;-webkit-user-drag:none;background:#fff;width:100%;height:auto;display:block;box-shadow:0 3px 14px #1e222a14}.calendar-viewer.is-zoomed .calendar-image-stage,.calendar-viewer.is-zoomed .calendar-image-stage img{width:780px;max-width:none}.calendar-state{z-index:2;color:#777a80;text-align:center;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#eceef1e0;flex-direction:column;justify-content:center;align-items:center;padding:30px;display:flex;position:absolute;inset:0}.calendar-state p{max-width:270px;margin:8px 0 0;font-size:13px;line-height:1.5}.calendar-state strong{color:#2d2e33;font-size:16px}.calendar-state button{color:#0878e8;background:#ffffffdb;border:0;border-radius:19px;min-height:38px;margin-top:16px;padding:0 18px;font-weight:620;box-shadow:0 5px 16px #23272d12}.calendar-spinner{border:2px solid #3c3c4326;border-top-color:#3c3c43a8;border-radius:50%;width:26px;height:26px;animation:.72s linear infinite calendar-spin}.calendar-toolbar{-webkit-backdrop-filter:blur(20px)saturate(145%);backdrop-filter:blur(20px)saturate(145%);background:#ffffff8f;border-radius:27px;grid-template-columns:repeat(2,1fr);min-height:54px;margin-top:12px;padding:4px;display:grid;box-shadow:0 .5px #00000014,0 9px 24px #262a300e}.calendar-toolbar button,.calendar-toolbar a{color:#34343a;background:0 0;border:0;border-radius:23px;justify-content:center;align-items:center;gap:7px;min-width:0;min-height:46px;padding:0 12px;font-size:13px;font-weight:600;text-decoration:none;display:flex}.calendar-toolbar button[aria-pressed=true]{background:#ffffffeb;box-shadow:0 2px 8px #1e222a1a}.calendar-toolbar button:active,.calendar-toolbar a:active{background:#7676801a}.calendar-toolbar svg{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.7px;flex:none;width:20px;height:20px}.calendar-source{color:#8e8e93;text-align:center;margin:8px 0 0;font-size:10px}@keyframes calendar-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.calendar-icon-button{transition:none}.calendar-spinner{animation-duration:1.5s}}@media (prefers-reduced-transparency:reduce){.calendar-icon-button,.calendar-toolbar{-webkit-backdrop-filter:none;backdrop-filter:none;background:#f8f8fa}.calendar-state{-webkit-backdrop-filter:none;backdrop-filter:none;background:#eceef1}}.campus-map-page{width:100%;max-width:480px;height:100dvh;padding:calc(8px + env(safe-area-inset-top)) 16px calc(9px + env(safe-area-inset-bottom));color:#1c1c1e;background:radial-gradient(circle at 88% 0,#ffffffc7,#0000 28%),#f2f2f7;flex-direction:column;margin:0 auto;display:flex;overflow:hidden}.campus-map-topbar{grid-template-columns:44px 1fr 44px;align-items:center;min-height:48px;display:grid}.campus-map-topbar>div{text-align:center;min-width:0}.campus-map-topbar h1{letter-spacing:-.2px;margin:0;font-size:18px;font-weight:650;line-height:1.15}.campus-map-topbar p{color:#8e8e93;margin:2px 0 0;font-size:11px;line-height:1.2}.campus-map-icon-button{color:#34343a;-webkit-backdrop-filter:blur(20px)saturate(145%);backdrop-filter:blur(20px)saturate(145%);width:44px;height:44px;transition:transform .14s var(--ease-out);background:#ffffffa8;border:0;border-radius:50%;place-items:center;padding:0;text-decoration:none;display:grid;box-shadow:0 .5px #00000012,0 5px 16px #23272d0d}.campus-map-icon-button:active{transform:scale(.96)}.campus-map-icon-button svg{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.7px;width:21px;height:21px}.campus-map-page button:focus-visible,.campus-map-page a:focus-visible{outline-color:#007aff94}.campus-map-selector{background:#7676801f;border-radius:24px;grid-template-columns:repeat(2,1fr);min-height:48px;margin-top:10px;padding:4px;display:grid;position:relative}.campus-map-selector__selection{pointer-events:none;width:calc(50% - 4px);transition:transform .18s var(--ease-out);background:#fffffff0;border-radius:20px;position:absolute;top:4px;bottom:4px;left:4px;box-shadow:0 .5px #00000014,0 3px 10px #262a3012}.campus-map-selector__selection.is-longquan{transform:translate(100%)}.campus-map-selector button{z-index:1;color:#636366;background:0 0;border:0;border-radius:20px;min-width:0;min-height:40px;padding:0 12px;font-size:15px;font-weight:620;position:relative}.campus-map-selector button[aria-pressed=true]{color:#1c1c1e}.campus-map-selector button:active{transform:scale(.98)}.campus-map-viewer{-webkit-overflow-scrolling:touch;overscroll-behavior:contain;scrollbar-color:#3c3c433d transparent;scrollbar-width:thin;background:#e5e5ea;border:.5px solid #3c3c431f;border-radius:22px;flex:1;width:100%;min-width:0;min-height:0;margin-top:12px;position:relative;overflow:auto;box-shadow:0 .5px #00000014,0 14px 34px #262a3012}.campus-map-image-stage{isolation:isolate;place-items:center;min-width:100%;min-height:100%;display:grid;position:relative;overflow:hidden}.campus-map-image-backdrop{z-index:-1;filter:blur(28px)saturate(.7);opacity:.13;pointer-events:none;background-position:50%;background-size:cover;position:absolute;inset:-32px;transform:scale(1.08)}.campus-map-image-link{z-index:1;max-width:none;color:inherit;cursor:zoom-in;transition:transform .12s var(--ease-out);background:#fff;text-decoration:none;display:block;position:relative;box-shadow:0 2px 12px #1c1c1e14}.campus-map-image-link:active{transform:scale(.995)}.campus-map-image-link img{-webkit-user-select:none;user-select:none;-webkit-user-drag:none;width:100%;height:auto;display:block}.campus-map-viewer.is-zoomed .campus-map-image-stage{place-items:start;overflow:visible}.campus-map-viewer.is-zoomed .campus-map-image-backdrop{opacity:.07}.campus-map-state{z-index:2;color:#777a80;text-align:center;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#e5e5eae6;flex-direction:column;justify-content:center;align-items:center;padding:30px;display:flex;position:absolute;inset:0}.campus-map-state p{max-width:270px;margin:8px 0 0;font-size:13px;line-height:1.5}.campus-map-state strong{color:#2d2e33;font-size:16px}.campus-map-state button{color:#0878e8;background:#ffffffe0;border:0;border-radius:20px;min-height:40px;margin-top:16px;padding:0 18px;font-weight:620;box-shadow:0 5px 16px #23272d12}.campus-map-spinner{border:2px solid #3c3c4326;border-top-color:#3c3c43a8;border-radius:50%;width:26px;height:26px;animation:.72s linear infinite campus-map-spin}.campus-map-controls{align-items:stretch;gap:8px;width:100%;margin-top:10px;display:flex}.campus-map-zoom{-webkit-backdrop-filter:blur(20px)saturate(145%);backdrop-filter:blur(20px)saturate(145%);background:#ffffffad;border-radius:26px;flex:1;grid-template-columns:44px minmax(112px,1fr) 44px;width:auto;min-height:52px;margin:0;padding:4px;display:grid;box-shadow:0 .5px #00000014,0 8px 22px #262a300e}.campus-map-zoom button{color:#34343a;background:0 0;border:0;border-radius:22px;place-items:center;min-width:44px;min-height:44px;padding:0;display:grid}.campus-map-zoom button:active:not(:disabled){background:#7676801a;transform:scale(.96)}.campus-map-zoom button:disabled{color:#c7c7cc}.campus-map-zoom svg{fill:none;stroke:currentColor;stroke-linecap:round;stroke-width:1.8px;width:21px;height:21px}.campus-map-zoom .campus-map-zoom__value{color:#34343a;flex-direction:column;gap:1px;min-width:112px;line-height:1.1;display:flex}.campus-map-zoom__value strong{font-size:13px;font-weight:650}.campus-map-zoom__value span{color:#8e8e93;font-size:10px;font-weight:520}.campus-map-save-button{color:#34343a;-webkit-backdrop-filter:blur(20px)saturate(145%);backdrop-filter:blur(20px)saturate(145%);width:76px;min-height:52px;transition:transform .14s var(--ease-out);background:#ffffffad;border:0;border-radius:26px;flex:0 0 76px;justify-content:center;align-items:center;gap:6px;padding:0 11px;font-size:12px;font-weight:620;display:flex;box-shadow:0 .5px #00000014,0 8px 22px #262a300e}.campus-map-save-button:active:not(:disabled){transform:scale(.96)}.campus-map-save-button:disabled{color:#c7c7cc}.campus-map-save-button svg{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.7px;flex:none;width:19px;height:19px}.campus-map-note{color:#8e8e93;text-align:center;margin:6px 0 0;font-size:10px;line-height:1.3}@keyframes campus-map-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.campus-map-icon-button,.campus-map-selector__selection,.campus-map-image-link,.campus-map-save-button{transition:none}.campus-map-spinner{animation-duration:1.5s}.campus-map-viewer{scroll-behavior:auto}}@media (prefers-reduced-transparency:reduce){.campus-map-icon-button,.campus-map-zoom,.campus-map-save-button{-webkit-backdrop-filter:none;backdrop-filter:none;background:#fff}.campus-map-state{-webkit-backdrop-filter:none;backdrop-filter:none;background:#e5e5ea}}@media (orientation:landscape) and (height<=600px){.campus-map-page{max-width:900px;padding:calc(7px + env(safe-area-inset-top)) calc(14px + env(safe-area-inset-right)) calc(7px + env(safe-area-inset-bottom)) calc(14px + env(safe-area-inset-left));grid-template-rows:48px 48px 52px minmax(0,1fr);grid-template-columns:minmax(250px,.78fr) minmax(0,1.22fr);gap:9px 12px;display:grid}.campus-map-topbar{grid-area:1/1}.campus-map-selector{grid-area:2/1;margin-top:0}.campus-map-viewer{grid-area:1/2/-1;margin-top:0}.campus-map-controls{grid-area:3/1;width:100%;margin-top:0}.campus-map-note{grid-area:4/1;align-self:start;margin:0}}.app-shell.app-shell--profile{--profile-background:#f2f2f7;--profile-surface:#ffffffd1;--profile-label:#1c1c1e;--profile-secondary-label:#636366;--profile-tertiary-label:#8e8e93;--profile-control:#e5e5ea;--profile-accent:#007aff;--profile-danger:#ff383c;color:var(--profile-label);background:var(--profile-background)}.app-shell--profile .surface-card{background:#fffffff0;border:0;border-radius:22px;overflow:hidden;box-shadow:0 .5px 1px #1c1c1e06}.profile-page{padding-top:calc(22px + env(safe-area-inset-top))}.profile-hero{text-align:center;flex-direction:column;justify-content:center;align-items:center;min-height:204px;display:flex}.profile-avatar{background:var(--profile-control);border:1px solid #ffffffeb;border-radius:50%;flex:none;place-items:center;width:96px;height:96px;display:grid;overflow:hidden;box-shadow:0 0 0 .5px #3c3c431f}.profile-avatar img{object-fit:contain;filter:grayscale();opacity:.72;width:68px;height:68px}.profile-hero__identity{min-width:0;margin-top:14px}.profile-hero__identity h1{letter-spacing:-.02em;margin:0 0 5px;font-size:28px;font-weight:700;line-height:1.08}.profile-hero__identity p{color:var(--profile-tertiary-label);margin:0;font-size:15px;line-height:1.35}.student-card{min-height:0;margin-top:24px;padding:0}.student-card__rows{width:100%}.student-card__row{grid-template-columns:40px minmax(0,1fr);align-items:center;gap:13px;min-height:68px;padding:9px 18px;display:grid;position:relative}.student-card__row:not(:last-child):after{content:"";background:#3c3c432e;height:.5px;position:absolute;bottom:0;left:71px;right:0}.student-card__icon{color:#5f6065;background:linear-gradient(#d1d1d6,#aeaeb2);border-radius:10px;place-items:center;width:36px;height:36px;display:grid;box-shadow:inset 0 0 0 .5px #3c3c431f}.student-card__icon img{width:24px;height:24px}.student-card__icon svg{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.65px;width:23px;height:23px}.profile-graduation-icon{filter:grayscale()brightness(0)invert();opacity:.96}.student-card__copy{min-width:0}.student-card h2{margin:0 0 2px;font-size:17px;font-weight:560;line-height:1.25}.student-card p{color:var(--profile-tertiary-label);text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:14px;line-height:1.35;overflow:hidden}.profile-status{min-width:0;min-height:116px;padding:22px}.profile-status--error{flex:1}.profile-status--error p{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.profile-status--error button{min-height:44px;color:var(--profile-accent);font:inherit;transition:transform .14s var(--ease-out);background:0 0;border:0;margin:3px 0 -8px;padding:0 10px 0 0}.profile-status--error button:active{transform:scale(.97)}.profile-menu{margin-top:24px;padding:0}.profile-menu button{text-align:left;background:0 0;border:0;border-bottom:.5px solid #3c3c4329;grid-template-columns:40px 1fr 18px;align-items:center;gap:13px;width:100%;min-height:64px;padding:0 18px;transition:background-color .12s,opacity .12s;display:grid}.profile-menu button:active{background:#7474801a}.profile-menu button:last-child{border-bottom:0}.profile-menu button:disabled{cursor:wait;opacity:.55}.profile-menu img{object-fit:contain;filter:grayscale();opacity:.66;width:34px;height:34px}.profile-menu__leading-icon{color:#fff;fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.75px;background:linear-gradient(#d1d1d6,#aeaeb2);border-radius:10px;width:34px;height:34px;padding:7px}.profile-menu span{font-size:17px;font-weight:560}.profile-menu__chevron{width:18px;height:18px;color:var(--profile-tertiary-label);fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.8px}.profile-logout{margin-top:24px}.profile-logout button{width:100%;min-height:58px;color:var(--profile-danger);background:0 0;border:0;place-items:center;padding:0 18px;font-size:17px;font-weight:560;transition:background-color .12s,opacity .12s;display:grid}.profile-logout button:active{background:#ff383c14}.profile-logout button:disabled{cursor:wait;opacity:.55}.profile-page button:focus-visible{outline-color:#007aff7a}@media (width<=370px){.profile-avatar{width:88px;height:88px}.profile-avatar img{width:62px;height:62px}.profile-hero{min-height:190px}.student-card__row,.profile-menu button{padding-left:16px;padding-right:16px}.student-card__row:not(:last-child):after{left:69px}}@media (prefers-reduced-transparency:reduce){.app-shell--profile .surface-card{background:#fff}}@media (prefers-reduced-motion:reduce){.profile-status--error button{transition:none}.profile-status--error button:active{transform:none}}.completion-page{width:100%;max-width:480px;min-height:100dvh;padding-bottom:calc(28px + env(safe-area-inset-bottom));color:#1c1c1e;background:#f2f2f7;margin:0 auto}.completion-topbar{z-index:20;min-height:calc(60px + env(safe-area-inset-top));padding:calc(8px + env(safe-area-inset-top)) 22px 8px;-webkit-backdrop-filter:blur(18px)saturate(150%);backdrop-filter:blur(18px)saturate(150%);background:#f2f2f7db;grid-template-columns:44px minmax(0,1fr) 44px;align-items:center;display:grid;position:sticky;top:0}.completion-topbar h1{text-align:center;text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:18px;font-weight:650;line-height:1.2;overflow:hidden}.completion-icon-button{color:#1c1c1e;width:44px;height:44px;transition:transform .14s var(--ease-out), opacity .12s ease;background:#ffffffd6;border:0;border-radius:50%;place-items:center;padding:0;display:grid;box-shadow:0 .5px 1px #1c1c1e0f}.completion-icon-button:active{transform:scale(.96)}.completion-icon-button:disabled{opacity:.42}.completion-icon-button:focus-visible,.completion-state button:focus-visible{outline-color:#0088ff7a}.completion-icon-button svg{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.8px;width:21px;height:21px}.completion-content{padding:16px 22px 0}.completion-state{color:#636366;text-align:center;flex-direction:column;justify-content:center;align-items:center;min-height:calc(100dvh - 100px);padding:32px 20px;display:flex}.completion-spinner{border:2px solid #d1d1d6;border-top-color:#636366;border-radius:50%;width:28px;height:28px;animation:.72s linear infinite completion-spin}.completion-state p{max-width:290px;margin:12px 0 0;font-size:14px;line-height:1.5}.completion-state h2{color:#1c1c1e;margin:13px 0 0;font-size:18px;font-weight:650}.completion-state__icon{color:#ff383c;background:#ff383c17;border-radius:50%;place-items:center;width:42px;height:42px;font-size:22px;font-weight:650;display:grid}.completion-state button{color:#08f;min-height:44px;transition:transform .14s var(--ease-out);background:#fffffff0;border:0;border-radius:22px;margin-top:18px;padding:0 20px;font-weight:600}.completion-state button:active{transform:scale(.97)}.completion-error{color:#a6232b;background:#ff383c14;border-radius:14px;margin:0 0 14px;padding:11px 14px;font-size:13px;line-height:1.45}.completion-summary-card{background:#fffffff0;border-radius:24px;padding:20px;box-shadow:0 .5px 1px #1c1c1e06}.completion-summary-card__headline{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.completion-summary-card__headline>div>span,.completion-summary-card__metrics span{color:#8e8e93;font-size:13px}.completion-summary-card__headline p{color:#636366;margin:6px 0 0;font-size:14px}.completion-summary-card__headline p strong{color:#1c1c1e;font-size:24px;font-weight:650}.completion-summary-card__headline p small{color:#8e8e93;font-size:13px}.completion-summary-card__headline>strong{color:#1c1c1e;letter-spacing:-.03em;font-size:34px;font-weight:650;line-height:1}.completion-progress{background:#e5e5ea;border-radius:4px;height:8px;margin-top:18px;overflow:hidden}.completion-progress span{border-radius:inherit;height:100%;transition:width .22s var(--ease-out);background:#08f;display:block}.completion-summary-card__metrics{border-top:.5px solid #3c3c432e;grid-template-columns:repeat(2,minmax(0,1fr));margin-top:20px;padding-top:18px;display:grid}.completion-summary-card__metrics article{min-width:0}.completion-summary-card__metrics article+article{border-left:.5px solid #3c3c432e;padding-left:18px}.completion-summary-card__metrics strong{text-overflow:ellipsis;white-space:nowrap;margin-top:6px;font-size:17px;font-weight:600;line-height:1.3;display:block;overflow:hidden}.completion-summary-card__remark{color:#636366;border-top:.5px solid #3c3c432e;margin:16px 0 0;padding-top:14px;font-size:13px;line-height:1.5}.completion-section-heading{justify-content:space-between;align-items:baseline;gap:12px;margin:26px 2px 10px;display:flex}.completion-section-heading h2{letter-spacing:-.02em;margin:0;font-size:20px;font-weight:650}.completion-section-heading span{color:#8e8e93;font-size:12px}.completion-groups{gap:16px;display:grid}.completion-group{background:#fffffff0;border-radius:22px;overflow:hidden;box-shadow:0 .5px 1px #1c1c1e06}.completion-group__header{justify-content:space-between;align-items:center;gap:14px;min-height:72px;padding:14px 17px;display:flex}.completion-group__header>div{min-width:0}.completion-group__header h2{margin:0;font-size:16px;font-weight:650;line-height:1.35}.completion-group__header p{color:#8e8e93;margin:4px 0 0;font-size:12px;line-height:1.35}.completion-status{text-overflow:ellipsis;white-space:nowrap;background:#7474801a;border-radius:9px;flex:none;max-width:116px;padding:5px 8px;font-size:11px;font-weight:600;line-height:1.2;overflow:hidden}.completion-status--incomplete{color:#c92730;background:#ff383c17}.completion-status--complete,.completion-status--neutral{color:#636366}.completion-course-list{border-top:.5px solid #3c3c432e}.completion-course-row{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:14px;min-height:68px;padding:12px 17px;display:grid;position:relative}.completion-course-row+.completion-course-row:before{content:"";background:#3c3c4324;height:.5px;position:absolute;top:0;left:17px;right:17px}.completion-course-row>div:first-child{min-width:0}.completion-course-row h3{text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:15px;font-weight:560;line-height:1.35;overflow:hidden}.completion-course-row p{color:#8e8e93;text-overflow:ellipsis;white-space:nowrap;margin:3px 0 0;font-size:11px;line-height:1.35;overflow:hidden}.completion-course-row small{color:#636366;margin-top:4px;font-size:11px;line-height:1.35;display:block}.completion-course-row__result{flex-direction:column;align-items:flex-end;min-width:48px;display:flex}.completion-course-row__result>strong{font-size:20px;font-weight:600;line-height:1}.completion-course-row__result>span{margin-top:6px;font-size:11px;font-weight:560}.status-text--complete,.status-text--neutral{color:#636366}.status-text--incomplete{color:#c92730}.completion-group__empty{color:#8e8e93;text-align:center;border-top:.5px solid #3c3c432e;margin:0;padding:20px 17px;font-size:13px}.completion-empty{color:#8e8e93;text-align:center;background:#fffffff0;border-radius:22px;padding:44px 20px}.completion-empty>span{font-size:32px;font-weight:300}.completion-empty h2{color:#1c1c1e;margin:8px 0 5px;font-size:17px;font-weight:650}.completion-empty p{margin:0;font-size:13px}.completion-footnote{color:#8e8e93;text-align:center;margin:20px 8px 0;font-size:11px;line-height:1.5}@keyframes completion-spin{to{transform:rotate(360deg)}}@media (width<=370px){.completion-topbar,.completion-content{padding-left:16px;padding-right:16px}.completion-summary-card{padding:18px}.completion-summary-card__headline>strong{font-size:30px}}@media (prefers-reduced-motion:reduce){.completion-icon-button,.completion-state button,.completion-progress span{transition:none}.completion-icon-button:active,.completion-state button:active{transform:none}}@media (prefers-reduced-transparency:reduce){.completion-topbar{-webkit-backdrop-filter:none;backdrop-filter:none;background:#f2f2f7}}@media (prefers-contrast:more){.completion-summary-card,.completion-group,.completion-empty{border:1px solid #1c1c1e47}}.grade-page{padding-bottom:calc(30px + env(safe-area-inset-bottom));color:#1c1c1e;background:radial-gradient(circle at 88% 3%,#ffffffdb,#0000 27%),linear-gradient(155deg,#f6f6f8 0%,#f0f1f4 48%,#f4f4f6 100%)}.grade-results{padding-top:calc(8px + env(safe-area-inset-top))}.grade-topbar{justify-content:space-between;align-items:center;display:flex}.grade-topbar__actions{gap:9px;display:flex}.grade-icon-button{color:#34343a;-webkit-backdrop-filter:blur(22px)saturate(145%);backdrop-filter:blur(22px)saturate(145%);background:#ffffffad;border:.5px solid #fffffff0;border-radius:50%;place-items:center;width:44px;height:44px;padding:0;transition:transform .14s cubic-bezier(.23,1,.32,1);display:grid;box-shadow:0 .5px #00000014,0 5px 16px #23272d0e}.grade-icon-button:active{transform:scale(.96)}.grade-icon-button:disabled{opacity:.45}.grade-icon-button svg{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.7px;width:21px;height:21px}.grade-icon-button span{letter-spacing:1px;margin-top:-4px;font-size:13px}.semester-select{margin-top:24px;display:block;position:relative}.semester-select:after{pointer-events:none;content:"";border-bottom:1.8px solid #5e6066;border-right:1.8px solid #5e6066;width:8px;height:8px;position:absolute;bottom:22px;right:21px;transform:rotate(45deg)}.semester-select>span{color:#7b838b;letter-spacing:.4px;margin:0 0 8px 3px;font-size:12px;display:block}.semester-select select{appearance:none;color:#25252a;-webkit-backdrop-filter:blur(24px)saturate(150%);backdrop-filter:blur(24px)saturate(150%);background:#ffffffb3;border:.5px solid #fffffff5;border-radius:18px;outline:0;width:100%;height:52px;padding:0 46px 0 17px;font-size:16px;font-weight:540;box-shadow:0 .5px #0000001a,0 8px 24px #282b310e}.semester-select select:focus{border-color:#78788047;box-shadow:0 0 0 3px #76768014,0 8px 24px #282b310e}.grade-summary{-webkit-backdrop-filter:blur(26px)saturate(155%);backdrop-filter:blur(26px)saturate(155%);background:#ffffffb3;border:.5px solid #fffffff5;border-radius:22px;grid-template-columns:repeat(2,1fr);margin-top:18px;display:grid;overflow:hidden;box-shadow:0 .5px #0000001a,0 12px 32px #262a3011}.grade-summary article{padding:21px 20px 19px;position:relative}.grade-summary article+article:before{content:"";background:#3c3c4321;width:1px;position:absolute;top:20px;bottom:20px;left:0}.grade-summary article>span{color:#8e8e93;font-size:13px}.grade-summary p{align-items:baseline;gap:5px;margin:7px 0 0;display:flex}.grade-summary strong{color:#26262b;font-size:32px;font-weight:560;line-height:1}.grade-summary small{color:#98989d;font-size:12px}.grade-summary .has-failed strong{color:#c4413d}.result-error{color:#85494c;margin:14px 2px 0;font-size:13px;line-height:1.5}.grade-section-heading{justify-content:space-between;align-items:center;margin-top:27px;display:flex}.grade-section-heading h2{letter-spacing:-.3px;margin:0;font-size:20px;font-weight:570}.grade-section-heading span{color:#8a9197;font-size:12px}.grade-loading{color:#7d858b;flex-direction:column;justify-content:center;align-items:center;min-height:100dvh;display:flex}.grade-loading--inline{min-height:260px}.loading-spinner{border:2px solid #dcdedb;border-top-color:#66727d;border-radius:50%;width:30px;height:30px;animation:.7s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.grade-loading p{margin:13px 0 0;font-size:13px}.grade-unavailable strong{color:#3e4852;font-size:18px}.grade-unavailable p{text-align:center;max-width:280px;line-height:1.5}.grade-unavailable button{color:#34343a;background:#ffffffb8;border:.5px solid #fffffff5;border-radius:20px;min-height:40px;margin-top:18px;padding:0 18px;font-weight:600;box-shadow:0 6px 18px #262a3014}.grade-list{-webkit-backdrop-filter:blur(26px)saturate(155%);backdrop-filter:blur(26px)saturate(155%);background:#ffffffb8;border:.5px solid #fffffff5;border-radius:22px;margin-top:14px;overflow:hidden;box-shadow:0 .5px #0000001a,0 14px 36px #262a3011}.grade-row{align-items:center;gap:15px;padding:10px 17px;display:flex;position:relative}.grade-row+.grade-row{border-top:0}.grade-row+.grade-row:before{content:"";background:#3c3c4324;height:.5px;position:absolute;top:0;left:17px;right:17px}.grade-row.is-failed{background:linear-gradient(90deg,#d94b450e,#0000 58%)}.grade-row__main{flex:1;min-width:0}.grade-row__main>span{color:#a0a0a6;text-overflow:ellipsis;white-space:nowrap;font-size:10px;display:block;overflow:hidden}.grade-row h3{color:#232328;text-overflow:ellipsis;white-space:nowrap;margin:3px 0 5px;font-size:16px;font-weight:570;overflow:hidden}.grade-row__details{color:#85858b;flex-wrap:wrap;gap:5px 11px;font-size:10px;display:flex}.grade-row>strong{text-align:right;min-width:48px;font-size:29px;font-weight:540;line-height:1}.score--normal{color:#333338}.score--failed{color:#d94b45}.empty-grade{color:#7e858b;text-align:center;-webkit-backdrop-filter:blur(24px)saturate(150%);backdrop-filter:blur(24px)saturate(150%);background:#ffffffad;border:.5px solid #fffffff2;border-radius:22px;margin-top:14px;padding:52px 20px;box-shadow:0 12px 32px #262a300e}.empty-grade>span{font-size:35px;font-weight:260}.empty-grade h2{color:#3e4852;margin:8px 0 5px;font-size:18px}.empty-grade p{margin:0;font-size:12px}@media (width<=380px){.grade-results{padding-left:16px;padding-right:16px}.grade-row{padding:9px 14px}.grade-row__details{gap:4px 8px}}.login-page{--ios-danger:#ff383c;--ios-icon-primary:#1c1c1e;--ios-icon-secondary:#8e8e93;--ios-icon-disabled:#c7c7cc;--ios-control-background:#e5e5ea;--ios-control-pressed:#d1d1d6;--ios-page-background:#f2f2f7;--ios-control-active:#48484a;--ios-link:#636366;--ios-button-primary:#2c2c2e;--ios-button-pressed:#1c1c1e;--login-ink:var(--ios-icon-primary);--login-muted:#6e6e73;--login-line:#3c3c431f;isolation:isolate;width:100%;max-width:480px;min-height:100dvh;color:var(--login-ink);background:linear-gradient(158deg, #ffffff94, transparent 46%), var(--ios-page-background);margin:0 auto;position:relative;overflow:hidden}.login-page:before,.login-page:after{z-index:-1;content:"";pointer-events:none;filter:blur(4px);border-radius:50%;position:absolute}.login-page:before{background:radial-gradient(circle at 38% 58%,#ffffffeb,#e5e5ea2e 52%,#0000 70%);width:340px;height:340px;top:-112px;right:-126px}.login-page:after{filter:blur(12px);background:radial-gradient(circle at 62%,#d1d1d64d,#e5e5ea14 54%,#0000 72%);width:330px;height:330px;bottom:58px;left:-156px}.login-content{z-index:1;padding:calc(52px + env(safe-area-inset-top)) 28px calc(24px + env(safe-area-inset-bottom));position:relative}.login-brand{text-align:center;flex-direction:column;align-items:center;display:flex}.login-logo{-webkit-backdrop-filter:blur(22px)saturate(145%);backdrop-filter:blur(22px)saturate(145%);background:linear-gradient(145deg,#fffffff0,#f2f2f7ad);border:1px solid #ffffffe0;border-radius:22px;place-items:center;width:68px;height:68px;display:grid;box-shadow:0 18px 42px #1c1c1e1c,inset 0 1px #fffffff2,inset 0 -1px #3c3c4312}.login-logo-mark{width:40px;height:40px;overflow:visible}.login-logo-cap{fill:var(--ios-icon-primary)}.login-logo-base,.login-logo-tassel{fill:none;stroke:var(--ios-icon-primary);stroke-linecap:round;stroke-linejoin:round;stroke-width:2px}.login-logo-dot{fill:var(--ios-icon-primary)}.login-brand-copy{margin-top:14px}.login-brand h1{letter-spacing:-.01em;margin:0;font-size:32px;font-weight:700;line-height:1.05}.login-panel{-webkit-backdrop-filter:blur(30px)saturate(145%);backdrop-filter:blur(30px)saturate(145%);background:linear-gradient(145deg,#ffffffd1,#f2f2f78f);border:1px solid #ffffffc2;border-radius:30px;margin-top:28px;padding:23px 22px 18px;box-shadow:0 30px 80px #1c1c1e21,0 5px 18px #1c1c1e0d,inset 0 1px #ffffffe6,inset 0 -1px #3c3c430d}.login-panel-heading{text-align:center;margin-bottom:18px}.login-panel-heading h2{letter-spacing:-.01em;margin:0;font-size:23px;font-weight:700;line-height:1.2}.login-panel-heading p{color:var(--login-muted);margin:6px 0 0;font-size:13px;line-height:1.45}.login-input-group{border:1px solid var(--login-line);background:#ffffffbd;border-radius:18px;overflow:hidden}.login-field{position:relative}.login-field+.login-field:before{z-index:2;content:"";background:var(--login-line);height:1px;position:absolute;top:0;left:48px;right:14px}.login-field>label{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.login-field:focus-within{z-index:1;background:#ffffffeb;box-shadow:inset 0 0 0 2px #2c2c2e52}.login-input{align-items:center;height:58px;padding:0 12px 0 15px;display:flex}.login-input>svg{fill:none;width:21px;height:21px;stroke:var(--ios-icon-secondary);stroke-linecap:round;stroke-linejoin:round;stroke-width:1.7px;flex:none;margin-right:13px}.login-input input{min-width:0;height:100%;color:var(--login-ink);background:0 0;border:0;outline:0;flex:1;font-size:16px}.login-input input::placeholder{color:#3c3c436b}.password-toggle{width:44px;height:44px;color:var(--ios-icon-secondary);transition:background-color .12s ease, transform .12s var(--ease-out);background:0 0;border:0;border-radius:12px;place-items:center;margin-right:-7px;padding:0;display:grid}.password-toggle:active{background:var(--ios-control-background);transform:scale(.96)}.password-toggle svg{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.7px;width:22px;height:22px}.password-toggle-slash{opacity:0;transition:opacity .12s}.password-toggle.is-visible .password-toggle-slash{opacity:1}.login-error-slot{min-height:26px;margin:4px 5px 0}.login-error{color:var(--ios-danger);text-align:center;margin:0;font-size:12px;line-height:1.45}.login-error-enter-active{transition:opacity .16s var(--ease-out), transform .16s var(--ease-out)}.login-error-leave-active{transition:opacity .12s var(--ease-out), transform .12s var(--ease-out)}.login-error-enter-from,.login-error-leave-to{opacity:0;transform:translateY(-4px)}.login-submit{color:#fff;background:var(--ios-button-primary);width:100%;height:53px;transition:background-color .12s ease, transform .12s var(--ease-out), opacity .12s ease;border:1px solid #1c1c1e75;border-radius:999px;margin-top:4px;padding:0 20px;font-size:17px;font-weight:700;box-shadow:0 14px 28px #1c1c1e33,inset 0 1px #ffffff3b,inset 0 -1px #0000003d}.login-submit:not(:disabled):active{background:var(--ios-button-pressed);transform:scale(.98);box-shadow:0 8px 18px #1c1c1e29,inset 0 1px #fff3}.login-submit:disabled{cursor:wait;opacity:.7}.login-submit-state,.login-submit-label,.login-submit-loading{place-items:center;display:grid}.login-submit-label,.login-submit-loading{transition:opacity .12s var(--ease-out), transform .12s var(--ease-out);grid-area:1/1}.login-submit-label.is-hidden{opacity:0;transform:translateY(-3px)}.login-submit-loading{opacity:0;grid-auto-flow:column;gap:8px;transform:translateY(3px)}.login-submit-loading.is-visible{opacity:1;transform:translateY(0)}.login-spinner{fill:none;stroke:currentColor;stroke-dasharray:42 16;stroke-linecap:round;stroke-width:2.5px;width:17px;height:17px;animation:.7s linear infinite login-spin}@keyframes login-spin{to{transform:rotate(360deg)}}.login-help{min-height:44px;color:var(--ios-link);background:0 0;border:0;border-radius:10px;margin:4px auto 0;padding:0 10px;font-size:13px;font-weight:500;display:block}.secure-login-note{min-height:30px;color:var(--login-muted);justify-content:center;align-items:center;margin-top:5px;font-size:12px;display:flex}.secure-login-note svg{fill:none;width:16px;height:16px;stroke:var(--ios-icon-secondary);stroke-linecap:round;stroke-linejoin:round;stroke-width:1.6px;flex:none;margin-right:6px}.login-legal{color:var(--login-muted);text-align:center;place-items:center;margin:15px 0 0;font-size:12px;line-height:1.45;display:grid}.login-legal-actions{align-items:center;gap:7px;min-height:44px;display:inline-flex}.login-legal button{min-height:44px;color:var(--ios-link);font-size:inherit;background:0 0;border:0;border-radius:7px;padding:0 2px;font-weight:500}.login-toast{bottom:calc(20px + env(safe-area-inset-bottom));white-space:normal;text-align:center;max-width:calc(100% - 36px)}@media (hover:hover) and (pointer:fine){.login-help:hover,.login-legal button:hover{color:var(--ios-icon-primary)}}@media (height<=720px){.login-content{padding-top:calc(26px + env(safe-area-inset-top));padding-bottom:calc(12px + env(safe-area-inset-bottom))}.login-logo{border-radius:18px;width:55px;height:55px}.login-logo-mark{width:34px;height:34px}.login-brand-copy{margin-top:10px}.login-brand h1{font-size:29px}.login-panel{border-radius:26px;margin-top:27px;padding:18px 20px 12px}.login-panel-heading{margin-bottom:14px}.login-panel-heading h2{font-size:20px}.login-panel-heading p{margin-top:3px;font-size:12px}.login-input{height:52px}.login-error-slot{min-height:26px;margin-top:2px}.login-submit{height:49px;margin-top:4px}.login-help{min-height:44px;margin-top:2px}.secure-login-note{min-height:25px;margin-top:0}.login-legal{margin-top:9px}}@media (width<=360px){.login-content{padding-left:20px;padding-right:20px}.login-panel{padding-left:18px;padding-right:18px}}@media (prefers-reduced-motion:reduce){.login-error-enter-from,.login-error-leave-to,.login-submit-label.is-hidden,.login-submit-loading{transform:none}.login-spinner{animation:none}}@media (prefers-reduced-transparency:reduce){.login-panel,.login-logo,.login-input-group{background:var(--ios-page-background);-webkit-backdrop-filter:none;backdrop-filter:none}}@media (prefers-contrast:more){.login-panel,.login-input-group{border-color:#1c1c1e6b}}.pwa-install-promotion{z-index:70;right:max(14px,50vw - 226px);bottom:max(14px, env(safe-area-inset-bottom));color:#1c1c1e;-webkit-backdrop-filter:blur(20px)saturate(165%);backdrop-filter:blur(20px)saturate(165%);background:#fffffff0;border:.5px solid #3c3c4329;border-radius:22px;grid-template-columns:48px minmax(0,1fr) auto;align-items:center;gap:12px;min-height:76px;padding:12px 14px;display:grid;position:fixed;left:max(14px,50vw - 226px);box-shadow:0 18px 46px #1c1c1e29,0 3px 12px #1c1c1e12}.pwa-install-promotion--above-navigation{bottom:calc(84px + env(safe-area-inset-bottom))}.pwa-install-promotion>img{border-radius:12px;width:48px;height:48px}.pwa-install-promotion__copy{gap:3px;min-width:0;display:grid}.pwa-install-promotion__copy strong{font-size:16px;font-weight:650;line-height:1.2}.pwa-install-promotion__copy span{color:#636366;text-overflow:ellipsis;white-space:nowrap;font-size:13px;line-height:1.35;overflow:hidden}.pwa-install-promotion__install{color:#fff;min-width:58px;min-height:44px;transition:transform .14s var(--ease-out), opacity .12s ease;background:#08f;border:0;border-radius:22px;padding:0 15px;font-size:15px;font-weight:650}.pwa-install-promotion__install:active{transform:scale(.97)}.pwa-install-promotion__install:disabled{cursor:wait;opacity:.58}.pwa-install-promotion__dismiss{color:#636366;background:0 0;border:0;place-items:center;width:44px;height:44px;padding:10px;display:grid;position:absolute;top:-9px;right:-9px}.pwa-install-promotion__dismiss:before{z-index:-1;content:"";background:#e5e5ea;border-radius:50%;width:24px;height:24px;position:absolute;box-shadow:0 1px 4px #1c1c1e1f}.pwa-install-promotion__dismiss svg{fill:none;stroke:currentColor;stroke-linecap:round;stroke-width:1.8px;width:14px;height:14px}.pwa-install-guide-backdrop{z-index:120;padding-top:env(safe-area-inset-top);background:#0000003d;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}.pwa-install-guide{width:100%;max-width:480px;padding:10px 22px calc(18px + env(safe-area-inset-bottom));color:#1c1c1e;background:#f2f2f7;border-radius:28px 28px 0 0;outline:none;box-shadow:0 -16px 44px #1c1c1e2e}.pwa-install-guide__handle{background:#c7c7cc;border-radius:3px;width:36px;height:5px;margin:0 auto 18px}.pwa-install-guide header{align-items:center;gap:14px;display:flex}.pwa-install-guide header img{border-radius:14px;width:56px;height:56px}.pwa-install-guide header p,.pwa-install-guide header h2{margin:0}.pwa-install-guide header p{color:#8e8e93;margin-bottom:3px;font-size:13px;line-height:1.3}.pwa-install-guide header h2{letter-spacing:-.02em;font-size:22px;font-weight:700;line-height:1.15}.pwa-install-guide__description{color:#636366;margin:18px 0 14px;font-size:15px;line-height:1.45}.pwa-install-guide ol{background:#fffffff0;border-radius:22px;margin:0;padding:0;list-style:none;overflow:hidden}.pwa-install-guide li{grid-template-columns:28px minmax(0,1fr);align-items:center;gap:12px;min-height:58px;padding:8px 16px;display:grid;position:relative}.pwa-install-guide li:not(:last-child):after{content:"";background:#3c3c432e;height:.5px;position:absolute;bottom:0;left:56px;right:0}.pwa-install-guide li>span{color:#fff;background:#08f;border-radius:50%;place-items:center;width:28px;height:28px;font-size:14px;font-weight:650;display:grid}.pwa-install-guide li p{margin:0;font-size:16px;line-height:1.35}.pwa-install-guide__done{color:#fff;width:100%;min-height:50px;transition:transform .14s var(--ease-out);background:#08f;border:0;border-radius:25px;margin-top:18px;font-size:17px;font-weight:650}.pwa-install-guide__done:active{transform:scale(.97)}.install-promotion-enter-active{transition:opacity .18s var(--ease-out), transform .22s var(--ease-out)}.install-promotion-leave-active{transition:opacity .12s var(--ease-out), transform .16s var(--ease-out)}.install-promotion-enter-from,.install-promotion-leave-to{opacity:0;transform:translateY(12px)}.install-guide-enter-active{transition:opacity .22s var(--ease-out)}.install-guide-leave-active{transition:opacity .16s var(--ease-out)}.install-guide-enter-active .pwa-install-guide{transition:transform .26s var(--ease-out)}.install-guide-leave-active .pwa-install-guide{transition:transform .18s var(--ease-out)}.install-guide-enter-from,.install-guide-leave-to{opacity:0}.install-guide-enter-from .pwa-install-guide,.install-guide-leave-to .pwa-install-guide{transform:translateY(100%)}@media (width<=370px){.pwa-install-promotion{grid-template-columns:44px minmax(0,1fr) auto;gap:10px;padding-left:12px;padding-right:12px;left:10px;right:10px}.pwa-install-promotion>img{width:44px;height:44px}.pwa-install-promotion__copy span{max-width:132px}.pwa-install-guide{padding-left:16px;padding-right:16px}}@media (prefers-reduced-transparency:reduce){.pwa-install-promotion{-webkit-backdrop-filter:none;backdrop-filter:none;background:#fff}}@media (prefers-reduced-motion:reduce){.pwa-install-promotion__install,.pwa-install-guide__done,.install-promotion-enter-active,.install-promotion-leave-active,.install-guide-enter-active,.install-guide-leave-active,.install-guide-enter-active .pwa-install-guide,.install-guide-leave-active .pwa-install-guide{transition:none}.pwa-install-promotion__install:active,.pwa-install-guide__done:active{transform:none}}:root{color:#191b1b;font-synthesis:none;text-rendering:optimizelegibility;--green:#72b629;--green-deep:#54a714;--green-soft:#f3f9e9;--muted:#777a7c;--line:#e8ebe7;--surface:#ffffffed;--shadow:0 10px 30px #1d281917;--focus-ring:#2f6f1f;--focus-ring-soft:#2f6f1f2e;--ease-out:cubic-bezier(.23, 1, .32, 1);background:#fbfcf9;font-family:Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif}*{box-sizing:border-box}html{touch-action:pan-y;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;background:#fbfcf9}body{overscroll-behavior-x:none;touch-action:pan-y;background:#fbfcf9;min-width:320px;min-height:100dvh;margin:0}button,input,select{font:inherit}button,a{-webkit-tap-highlight-color:transparent}button{color:inherit}button:focus-visible,a:focus-visible,select:focus-visible{outline:3px solid var(--focus-ring);outline-offset:3px}#app{min-height:100dvh}.app-shell,.grade-page{width:100%;max-width:480px;min-height:100dvh;margin:0 auto;position:relative}.app-shell{background:radial-gradient(circle at 93% 0,#c6e69f1f,#0000 25%),#fbfcf9}.app-shell__content{min-height:100vh;padding-bottom:calc(84px + env(safe-area-inset-bottom))}.page-padding{padding-left:22px;padding-right:22px}.surface-card{background:var(--surface);box-shadow:var(--shadow);border:1px solid #e8ebe7cc;border-radius:24px}.bottom-navigation{--bottom-navigation-outer-radius:32px;--bottom-navigation-inner-radius:27px;z-index:50;bottom:max(8px, calc(env(safe-area-inset-bottom) - 2px));border-radius:var(--bottom-navigation-outer-radius);-webkit-backdrop-filter:blur(18px)saturate(165%);backdrop-filter:blur(18px)saturate(165%);background:#ffffff70;border:0;grid-template-columns:repeat(3,1fr);width:calc(100% - 56px);max-width:396px;min-height:64px;padding:5px;display:grid;position:fixed;left:50%;overflow:hidden;transform:translate(-50%);box-shadow:0 20px 46px #1c1c1e21,0 3px 10px #1c1c1e0f}.bottom-navigation__item{z-index:1;color:#1c1c1e;border-radius:var(--bottom-navigation-inner-radius);background:0 0;flex-direction:column;justify-content:center;align-items:center;gap:1px;min-width:0;font-size:12px;font-weight:600;line-height:1.15;text-decoration:none;display:flex;position:relative}.bottom-navigation__selection{pointer-events:none;border-radius:var(--bottom-navigation-inner-radius);width:calc(33.3333% - 7.33333px);transform:translateX(calc(var(--active-index) * (100% + 4px)));transition:transform .18s var(--ease-out);will-change:transform;background:#7474801f;border:0;position:absolute;top:5px;bottom:5px;left:7px;box-shadow:0 2px 8px #1c1c1e0d}.bottom-navigation__icon{width:30px;height:30px;color:inherit;-webkit-mask:var(--nav-icon) center / contain no-repeat;-webkit-mask:var(--nav-icon) center / contain no-repeat;mask:var(--nav-icon) center / contain no-repeat;background:currentColor;flex:none;display:block}.bottom-navigation__item.is-active{color:#007aff;box-shadow:none;background:0 0}.bottom-navigation__item:focus-visible{outline-offset:-3px;outline-color:#007aff75}.bottom-navigation__item:focus-visible:not(.is-active){background:#007aff12}@media (prefers-reduced-motion:reduce){.bottom-navigation__selection{transition:none}}@media (prefers-reduced-transparency:reduce){.bottom-navigation{-webkit-backdrop-filter:none;backdrop-filter:none;background:#fff}}@media (prefers-contrast:more){.bottom-navigation{background:#fff;border:1px solid #1c1c1e47}.bottom-navigation__selection{background:#e5e5ea;border:1px solid #1c1c1e2e}.bottom-navigation__item.is-active{color:#06c}}.toast-message{z-index:80;bottom:calc(80px + env(safe-area-inset-bottom));color:#fff;white-space:nowrap;background:#1e221ee0;border-radius:24px;padding:11px 18px;font-size:14px;position:fixed;left:50%;transform:translate(-50%);box-shadow:0 8px 24px #0000002e}.toast-enter-active{transition:opacity .18s var(--ease-out), transform .18s var(--ease-out)}.toast-leave-active{transition:opacity .12s var(--ease-out), transform .12s var(--ease-out)}.toast-enter-from,.toast-leave-to{opacity:0;transform:translate(-50%,8px)}.empty-message{color:var(--muted);text-align:center;padding:40px 0}@media (width>=560px){.app-shell,.grade-page{box-shadow:0 0 50px #212d1c1c}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important}.login-submit,.password-toggle{transition:opacity .12s!important}.login-submit:active,.password-toggle:active{transform:none!important}.password-toggle-slash,.login-error-enter-active,.login-error-leave-active,.login-submit-label,.login-submit-loading,.login-page .toast-enter-active,.login-page .toast-leave-active{transition:opacity .12s!important}.login-page .toast-enter-from,.login-page .toast-leave-to{transform:translate(-50%)}}
