:root{color-scheme:light;font-family:PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI Variable,sans-serif;background:radial-gradient(circle at top,rgba(167,207,249,.55),transparent 34%),linear-gradient(180deg,#edf4fe,#f8fbff 48%,#eef3fb);color:#21314f;line-height:1.45}*{box-sizing:border-box}html,body,#root{min-height:100%}body{margin:0;min-height:100vh;background:transparent}button,input,select{font:inherit}button{-webkit-tap-highlight-color:transparent}a{color:#4f82d0}.app-loading,.auth-screen{min-height:100vh;display:grid;place-items:center;padding:20px}.auth-card,.panel{width:100%;background:#ffffffe6;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid rgba(134,166,215,.22);border-radius:24px;box-shadow:0 16px 40px #7494c224}.auth-card{max-width:420px;padding:24px}.auth-card h1,.panel h2,.panel h3,.app-header h1{margin:0}.muted{color:#7383a1}.stack-form{display:grid;gap:14px;margin-top:18px}.field{display:grid;gap:8px}.field span{font-size:.95rem;color:#41516f}.field input,.field select{width:100%;border:1px solid rgba(127,153,194,.28);border-radius:16px;padding:14px 16px;background:#fffffffa;color:#24324d;outline:none}.field input:focus,.field select:focus{border-color:#73a8ed;box-shadow:0 0 0 3px #73a8ed29}.button{border:none;border-radius:16px;padding:14px 18px;cursor:pointer;transition:transform .18s ease,opacity .18s ease,box-shadow .18s ease}.button:hover{transform:translateY(-1px)}.button:disabled{cursor:default;opacity:.7;transform:none}.button.primary{background:linear-gradient(135deg,#78afe9,#5c8fd5);color:#fff;box-shadow:0 10px 22px #5c8fd547}.button.ghost{background:#edf3fe;color:#325898}.button.compact{min-width:116px;padding:12px 14px}.message{margin-top:14px;border-radius:16px;padding:12px 14px;font-size:.95rem}.message.error{background:#fff0ef;color:#b74e4e}.message.success{background:#edf8f0;color:#2c7a4c}.message.warning{background:#fff6e7;color:#a36b17}.auth-footer{margin-top:18px;display:flex;gap:8px;justify-content:center;color:#667693}.shell{min-height:100vh;padding:0 12px 92px}.app-header{position:sticky;top:0;z-index:20;width:100%;margin:0;padding:18px 20px 16px;border-bottom-left-radius:24px;border-bottom-right-radius:24px;background:linear-gradient(180deg,#78afe9,#679dde);color:#fff;text-align:center;box-shadow:0 14px 28px #588cd43d}.app-main{width:100%;margin-top:0}.page{width:100%;margin:0;padding:0;display:grid;gap:14px}.panel{padding:18px}.panel-row{display:flex;justify-content:space-between;gap:14px;align-items:center}.bottom-nav{position:fixed;left:50%;bottom:12px;z-index:25;transform:translate(-50%);width:calc(100% - 24px);display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;padding:10px;border-radius:22px;background:#6fa4e7f5;box-shadow:0 18px 34px #5281be42;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.nav-item{display:flex;align-items:center;justify-content:center;min-height:46px;color:#ffffffc7;text-decoration:none;text-align:center;border-radius:16px}.nav-item.active{background:#ffffff2e;color:#fff}.status-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:16px}.status-card,.term-card,.grade-card{background:#f8fbff;border-radius:18px;padding:16px;border:1px solid rgba(138,166,210,.18)}.status-card span{display:block;font-size:.85rem;color:#7383a1;margin-bottom:8px}.week-strip::-webkit-scrollbar,.timetable-board::-webkit-scrollbar{height:6px}.week-strip::-webkit-scrollbar-thumb,.timetable-board::-webkit-scrollbar-thumb{border-radius:999px;background:#7396c966}.chip{white-space:nowrap;padding:10px 14px;border:1px solid rgba(129,153,197,.22);background:#fff;border-radius:999px;color:#486288}.chip.active{background:#6ea6e6;border-color:#6ea6e6;color:#fff}.grade-list,.term-stack{display:grid;gap:12px}.grade-card{display:grid;gap:8px}.grade-card p,.grade-card small{margin:4px 0 0;color:#7383a1}.badge,.grade-score{display:inline-flex;align-items:center;justify-content:center;min-width:56px;border-radius:999px;background:#e8f1ff;color:#537fc0;padding:8px 12px;font-weight:700}.toggle-row{display:flex;justify-content:space-between;gap:14px;align-items:center;padding:14px 16px;background:#f8fbff;border:1px solid rgba(138,166,210,.18);border-radius:18px}.toggle-row input{width:24px;height:24px}.empty-state{padding:22px 16px;border-radius:20px;background:#f6f9ff;color:#61718e;text-align:center}.schedule-page{gap:14px}.schedule-toolbar-row{align-items:flex-start}.schedule-updated{margin:6px 0 0;color:#6d7f9d}.schedule-filter-grid{display:grid;gap:12px;margin-top:14px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.schedule-term-field,.schedule-week-field{margin-top:0;max-width:none}.schedule-week-caption{margin:12px 0 0;color:#5f7396;font-size:.92rem}.timetable-panel{padding:14px 10px 16px;overflow:hidden}.desktop-timetable{display:block}.mobile-schedule-shell{display:none}.schedule-view-switch{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-bottom:14px}.mobile-day-strip{display:grid;gap:8px;margin-bottom:14px;grid-template-columns:repeat(4,minmax(0,1fr))}.view-pill,.day-pill{min-height:42px;padding:10px 8px;border:1px solid rgba(129,153,197,.22);border-radius:14px;background:#fff;color:#486288}.view-pill.active,.day-pill.active{background:#6ea6e6;border-color:#6ea6e6;color:#fff}.timetable-board{overflow-x:auto;padding-bottom:4px}.timetable-frame{min-width:100%}.timetable-board.is-compact .timetable-frame,.timetable-board.is-single-day .timetable-frame{width:100%}.timetable-header-row{display:grid;grid-template-columns:46px 1fr;gap:10px;align-items:stretch;margin-bottom:10px}.timetable-corner,.timetable-day-header{display:flex;align-items:center;justify-content:center;min-height:42px;border-radius:14px;background:#f1f6ff;color:#5b6f90;border:1px solid rgba(138,166,210,.18);font-weight:700}.timetable-day-headers,.timetable-grid-columns{display:grid;gap:8px}.timetable-body-row{display:grid;grid-template-columns:46px 1fr;gap:10px;align-items:start}.timetable-time-column{display:grid}.timetable-time-slot{display:flex;align-items:flex-start;justify-content:center;padding-top:7px;color:#8090ae;font-size:.8rem}.timetable-day-column{position:relative;border-radius:18px;overflow:hidden;background:#ffffffeb;border:1px solid rgba(138,166,210,.18)}.timetable-column-grid{position:absolute;top:0;right:0;bottom:0;left:0;display:grid}.timetable-grid-cell{border-top:1px solid #e4edf9}.timetable-grid-cell:first-child{border-top:none}.timetable-course{position:absolute;border:1px solid transparent;border-radius:12px;padding:8px 8px 10px;text-align:left;display:flex;flex-direction:column;align-items:flex-start;gap:4px;overflow:hidden;box-shadow:0 8px 20px #5d7db129;word-break:break-word;white-space:normal}.timetable-course:focus-visible{outline:2px solid rgba(255,255,255,.9);outline-offset:-2px}.timetable-course-section{font-size:.72rem;line-height:1;opacity:.92;font-weight:700}.timetable-course strong{font-size:.88rem;line-height:1.18;display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:3}.timetable-course-meta{font-size:.74rem;line-height:1.22;opacity:.95;display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2}.timetable-course.is-short{padding:6px 7px 8px;gap:3px}.timetable-course.is-short strong,.timetable-course.is-split strong{font-size:.8rem;-webkit-line-clamp:2}.timetable-course.is-medium strong{font-size:.84rem}.timetable-course.is-expanded{padding:10px 12px 12px;gap:6px}.timetable-course.is-expanded strong{font-size:.96rem;-webkit-line-clamp:4}.timetable-course.is-expanded .timetable-course-meta{font-size:.8rem;-webkit-line-clamp:3}.timetable-board.is-compact{overflow:visible}.timetable-board.is-compact .timetable-header-row,.timetable-board.is-compact .timetable-body-row{grid-template-columns:28px 1fr;gap:6px}.timetable-board.is-compact .timetable-day-headers,.timetable-board.is-compact .timetable-grid-columns{gap:4px}.timetable-board.is-compact .timetable-corner,.timetable-board.is-compact .timetable-day-header{min-height:36px;border-radius:10px;font-size:.72rem;padding:0 2px}.timetable-board.is-compact .timetable-time-slot{font-size:.7rem;padding-top:5px}.timetable-board.is-compact .timetable-day-column{border-radius:12px}.timetable-board.is-compact .timetable-course{border-radius:9px;padding:5px 4px 6px;gap:2px;box-shadow:0 6px 14px #5d7db11f}.timetable-board.is-compact .timetable-course strong{font-size:.68rem;line-height:1.1;-webkit-line-clamp:3}.timetable-board.is-compact .timetable-course-section{font-size:.62rem}.timetable-board.is-compact .timetable-course-meta{font-size:.64rem;-webkit-line-clamp:1}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;background:#15244247;display:flex;align-items:flex-end;padding:14px}.modal-sheet{width:min(100%,720px);margin:0 auto;background:#fff;border-radius:24px;padding:20px;display:grid;gap:14px}.detail-list{display:grid;gap:10px}.detail-list div{display:grid;gap:4px;padding:12px 14px;border-radius:16px;background:#f7faff}.detail-list span{color:#7b8aa7;font-size:.82rem}@media (max-width: 520px){.auth-screen{padding:16px}.panel,.auth-card{border-radius:22px}.panel{padding:16px}.schedule-toolbar-row,.panel-row{flex-direction:column;align-items:stretch}.button.compact{width:100%}.schedule-filter-grid{grid-template-columns:1fr}.mobile-day-strip{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (max-width: 720px){.desktop-timetable{display:none}.mobile-schedule-shell{display:block}.timetable-panel{padding:14px}}@media (min-width: 900px){.status-grid,.term-stack{grid-template-columns:repeat(2,minmax(0,1fr))}}
