:root{--bg-top:#fdfbfb;--bg-bottom:#ebedee;--card-top:#fff;--card-bottom:#f8fafc;--text-main:#1f2937;--text-subtle:#4b5563;--accent:#2f80ed;--accent-hover:#2368be;--accent-soft:#56ccf2;--button-primary-start:#2f80ed;--button-primary-mid:#4598f1;--button-primary-end:#56ccf2;--border:#dbe2ea;--surface:#fff;--surface-alt:#f7f9fc;--surface-soft:#f4f9ff;--surface-hover:#eef4ff;--surface-chip:#e2e8f0;--surface-chip-soft:#f1f5f9;--button-primary-shadow:0 8px 18px #2f80ed42;--button-primary-shadow-hover:0 10px 20px #2f80ed4d;--button-primary-shadow-active:0 6px 14px #2f80ed3d;--button-secondary-start:#d7dce3;--button-secondary-end:#c0c7d2;--button-secondary-shadow:0 8px 18px #37415129;--button-danger-start:#d46666;--button-danger-end:#bb4b4b;--button-danger-shadow:0 8px 18px #b9424247;--button-danger-shadow-hover:0 10px 20px #b9424257;--button-review-start:#0f766e;--button-review-end:#22c55e;--button-review-shadow:0 8px 18px #0f766e3d;--surface-muted:#ffffffb8;--text-strong-accent:#163a70;--success-text:#1c8f3a;--warning-bg:#fff8ec;--warning-border:#f2d4a8;--overlay-bg:#0f172a6b;--table-row-odd:#fbfdff;--table-row-even:#f4f8fc;--table-time-odd:#f7fbff;--table-time-even:#edf4fb;--tt-occupied-bg:#dfeafc;--tt-occupied-text:#163a70;--tt-occupied-lifted-bg:#d3e4fb;--tt-occupied-ring:#0b5cab;--theme-toggle-bg:#ffffffd1;--theme-toggle-border:#dbe2eae6;--soft-shadow:0 12px 28px #1f29371a;--input-shadow:0 6px 16px #1f293714}html[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg-top:#08101c;--bg-bottom:#111c2b;--card-top:#101b2a;--card-bottom:#0d1624;--text-main:#e8eef8;--text-subtle:#9eb1c8;--accent:#3f78b7;--accent-hover:#5c90c7;--accent-soft:#5d8fbe;--button-primary-start:#264461;--button-primary-mid:#315575;--button-primary-end:#3f6a8f;--border:#263649;--surface:#101a28;--surface-alt:#162232;--surface-soft:#18273a;--surface-hover:#20334b;--surface-chip:#243548;--surface-chip-soft:#1d2a3b;--button-primary-shadow:0 10px 22px #0a1c3452;--button-primary-shadow-hover:0 12px 26px #0a1c3461;--button-primary-shadow-active:0 7px 16px #0a1c3447;--button-secondary-start:#2a3b50;--button-secondary-end:#1f2c3d;--button-secondary-shadow:0 10px 20px #0000003d;--button-danger-start:#b95e72;--button-danger-end:#883d4f;--button-danger-shadow:0 10px 22px #52132257;--button-danger-shadow-hover:0 12px 26px #52132266;--button-review-start:#1c7b75;--button-review-end:#2ca17d;--button-review-shadow:0 10px 22px #0a3f374d;--surface-muted:#101a28d6;--text-strong-accent:#d7e8ff;--success-text:#87d8a5;--warning-bg:#3b2c11;--warning-border:#7e5c20;--overlay-bg:#020814b8;--table-row-odd:#121d2c;--table-row-even:#162233;--table-time-odd:#182638;--table-time-even:#1d2d42;--tt-occupied-bg:#17304f;--tt-occupied-text:#dcecff;--tt-occupied-lifted-bg:#1d3b5e;--tt-occupied-ring:#6bb2ff;--theme-toggle-bg:#101a28e0;--theme-toggle-border:#263649f2;--soft-shadow:0 18px 38px #0000005c;--input-shadow:0 8px 18px #00000038}*{box-sizing:border-box}html,body{-webkit-text-size-adjust:100%;width:100%;min-height:100%;margin:0;overflow-x:hidden}#root{width:100%;min-height:100dvh}body{min-height:100dvh;color:var(--text-main);background:linear-gradient(145deg, var(--bg-top), var(--bg-bottom));font-family:Avenir Next,Segoe UI,sans-serif;transition:background .18s,color .18s}a{color:var(--accent)}.theme-toggle{z-index:1;border:1px solid var(--theme-toggle-border);background:var(--theme-toggle-bg);width:2.7rem;min-width:2.7rem;height:2.7rem;color:var(--text-main);box-shadow:var(--soft-shadow);-webkit-backdrop-filter:blur(12px);border-radius:999px;justify-content:center;align-items:center;padding:0;font-size:1.15rem;line-height:1;display:inline-flex;position:static}.card-header-row{justify-content:space-between;align-items:flex-start;gap:1rem;display:flex}.card-header-row h1{flex:auto;min-width:0}.theme-toggle:hover,.theme-toggle:active{color:var(--text-main);filter:none}body.no-vertical-scroll{overscroll-behavior:none;overflow:hidden}.page-shell{place-items:center;width:100%;min-height:100dvh;padding:2rem 1.25rem;display:grid;overflow-x:hidden}.keywords-page.page-center{overscroll-behavior-y:contain;-webkit-overflow-scrolling:touch;align-items:center;height:100dvh;overflow-y:auto}.keywords-page.page-top{overscroll-behavior-y:contain;-webkit-overflow-scrolling:touch;align-items:start;height:100dvh;overflow-y:auto}.coursecode-page.page-center{overscroll-behavior-y:contain;-webkit-overflow-scrolling:touch;align-items:center;height:100dvh;overflow-y:auto}.coursecode-page.page-top{overscroll-behavior-y:contain;-webkit-overflow-scrolling:touch;align-items:start;height:100dvh;overflow-y:auto}.home-page{height:100dvh}.card{border:1px solid var(--border);background:linear-gradient(160deg, var(--card-top), var(--card-bottom));width:100%;min-width:0;max-width:560px;box-shadow:var(--soft-shadow);border-radius:18px;flex-direction:column;gap:1rem;padding:2rem;display:flex}h1{letter-spacing:-.02em;margin:0;font-size:clamp(1.8rem,3.8vw,2.4rem)}p{color:var(--text-subtle);margin:0;line-height:1.55}input{border:1px solid var(--border);background:var(--surface);width:100%;color:var(--text-main);box-shadow:var(--input-shadow);border-radius:10px;outline:none;padding:.82rem .95rem;font-size:1rem;transition:border-color .18s,box-shadow .18s}textarea{border:1px solid var(--border);background:var(--surface);width:100%;color:var(--text-main);box-shadow:var(--input-shadow);resize:vertical;border-radius:10px;outline:none;padding:.82rem .95rem;font-family:inherit;font-size:1rem;transition:border-color .18s,box-shadow .18s}select{border:1px solid var(--border);background:var(--surface);width:100%;height:2.5rem;color:var(--text-main);box-shadow:var(--input-shadow);border-radius:10px;outline:none;padding:.82rem .95rem;font-size:1rem;transition:border-color .18s,box-shadow .18s}input:focus,textarea:focus{border-color:#9ec5ff;box-shadow:0 0 0 4px #2f80ed2e}.suggestion-input-wrap{width:100%;position:relative}.suggestion-input-dropdown{z-index:40;border:1px solid var(--border);background:var(--surface);max-height:16.75rem;box-shadow:var(--soft-shadow);font-size:inherit;border-radius:12px;flex-direction:column;display:flex;position:absolute;top:calc(100% + .35rem);left:0;right:0;overflow-y:auto}.suggestion-input-item{border:none;border-bottom:1px solid var(--border);background:var(--surface);width:100%;color:var(--text-main);box-shadow:none;text-align:left;font-size:1em;line-height:inherit;border-radius:0;flex-direction:column;align-items:flex-start;gap:.18rem;padding:.75rem .9rem;display:flex}.suggestion-input-item:last-child{border-bottom:none}.suggestion-input-item:hover,.suggestion-input-item.active{filter:none;background:var(--surface-hover);box-shadow:none;transform:none}.suggestion-input-code{letter-spacing:.02em;font-size:1em;font-weight:700}.suggestion-input-title{color:var(--text-subtle);font-size:1em;line-height:1.35}select:focus{border-color:#9ec5ff;box-shadow:0 0 0 4px #2f80ed2e}#term-select{appearance:menulist;height:2.5rem;min-height:2.5rem;padding-top:.82rem;padding-bottom:.82rem;line-height:1}button{background:linear-gradient(145deg, var(--button-primary-start) 0%, var(--button-primary-mid) 52%, var(--button-primary-end) 100%);color:#fff;letter-spacing:.01em;cursor:pointer;box-shadow:var(--button-primary-shadow);border:none;border-radius:10px;padding:.78rem 1.05rem;font-size:.98rem;font-weight:600;transition:transform .14s,box-shadow .14s,filter .14s}button:hover{box-shadow:var(--button-primary-shadow-hover);filter:brightness(1.03);transform:translateY(-1px)}button:active{box-shadow:var(--button-primary-shadow-active);transform:translateY(0)}button.secondary{background:linear-gradient(135deg, var(--button-secondary-start), var(--button-secondary-end));color:var(--text-main);box-shadow:var(--button-secondary-shadow)}button.danger{background:linear-gradient(135deg, var(--button-danger-start), var(--button-danger-end));color:#fff;box-shadow:var(--button-danger-shadow)}button.danger:hover{box-shadow:var(--button-danger-shadow-hover);filter:brightness(1.02)}.button-group,.action-row{flex-wrap:wrap;gap:.8rem;display:flex}.button-group button,.action-row button{flex:210px}.section-divider{background:var(--border);opacity:.85;width:100%;height:1px;margin:.1rem 0}.exchange-launch-row{grid-template-columns:minmax(0,3fr) minmax(0,7fr);align-items:stretch;gap:.8rem;display:grid}.exchange-launch-row select,.exchange-launch-row button{width:100%;min-width:0}.coursecode-result-actions{--coursecode-result-gap:.8rem;align-items:stretch;gap:var(--coursecode-result-gap);grid-template-columns:minmax(0,5fr) minmax(0,4fr) minmax(0,1fr);display:grid}.coursecode-result-actions button{white-space:normal;width:100%;min-width:0;line-height:1.25}.coursecode-timetable-btn{flex:unset}.coursecode-review-btn{flex:unset;background:linear-gradient(135deg, var(--button-review-start), var(--button-review-end));box-shadow:var(--button-review-shadow)}.coursecode-share-btn{flex:unset;background:linear-gradient(145deg, var(--button-primary-start) 0%, var(--button-primary-mid) 52%, var(--button-primary-end) 100%);color:#fff;justify-content:center;align-items:center;gap:.45rem;padding-inline:.85rem;display:inline-flex}.coursecode-share-btn:hover,.coursecode-share-btn:active{color:#fff}.coursecode-share-icon{flex:none;width:1.3rem;height:1.3rem}.coursecode-share-btn span{white-space:nowrap;font-size:.94rem;font-weight:600;line-height:1}.course-review-wrap{flex-direction:column;gap:.85rem;margin-top:1rem;display:flex}.course-review-header{justify-content:space-between;align-items:center;gap:.75rem;display:flex}.course-review-header h3{color:var(--text-main);margin:0;font-size:1rem}.course-review-header span{color:var(--text-subtle);white-space:nowrap;font-size:.92rem}.course-review-slider{grid-template-columns:auto minmax(0,1fr) auto;align-items:stretch;gap:.7rem;display:grid}.course-review-viewport{touch-action:pan-y;min-width:0;overflow:hidden}.course-review-track{will-change:transform;transition:transform .52s;display:flex}.course-review-card{background:linear-gradient(155deg, var(--surface), var(--surface-soft));border:1px solid #0f172a14;border-radius:16px;flex-direction:column;flex:0 0 100%;gap:.85rem;min-width:0;padding:1rem;display:flex;box-shadow:0 12px 28px #1f293714}.course-review-card-top{justify-content:space-between;align-items:flex-start;gap:.9rem;display:flex}.course-review-card-top h4{color:var(--text-main);margin:0 0 .2rem;font-size:1rem}.course-review-card-top p,.course-review-card-top span{color:var(--text-subtle);font-size:.92rem}.course-review-stars{align-items:center;gap:.18rem;display:flex}.course-review-star{color:#cbd5e1;font-size:1.1rem;line-height:1}.course-review-star.filled{color:#f59e0b}.course-review-text{white-space:pre-wrap;overflow-wrap:anywhere}.course-review-nav{background:linear-gradient(135deg, var(--surface-hover), var(--surface-soft));color:#1e3a8a;width:2.55rem;min-width:2.55rem;height:2.55rem;box-shadow:none;border-radius:999px;align-self:center;padding:0;font-size:1.4rem}.course-review-nav:disabled{cursor:default;opacity:.45;filter:none;box-shadow:none;transform:none}.course-review-nav:hover,.course-review-nav:active,.course-review-dot:hover,.course-review-dot:active,.course-review-sheet-backdrop:hover,.course-review-sheet-backdrop:active{filter:none;box-shadow:none;transform:none}.course-review-dots{justify-content:center;align-items:center;gap:.45rem;display:flex}.course-review-dot{width:.72rem;min-width:.72rem;height:.72rem;box-shadow:none;background:#cbd5e1;border-radius:999px;padding:0}.course-review-dot.active{background:#2f80ed}.course-review-empty{border:1px dashed var(--border);background:var(--surface-muted);border-radius:16px;padding:1rem}.course-review-sheet-backdrop{z-index:70;background:var(--overlay-bg);box-shadow:none;border-radius:0;position:fixed;inset:0}.course-review-sheet{z-index:80;padding:.85rem 1.1rem calc(1.2rem + env(safe-area-inset-bottom));overscroll-behavior:contain;-webkit-overflow-scrolling:touch;background:linear-gradient(180deg, var(--surface), var(--surface-soft));border-radius:24px 24px 0 0;flex-direction:column;gap:1rem;max-height:min(92dvh,44rem);animation:.2s ease-out course-review-sheet-rise;display:flex;position:fixed;bottom:0;left:0;right:0;overflow-y:auto;box-shadow:0 -20px 40px #0f172a2e}.course-review-sheet-handle{background:var(--border);border-radius:999px;width:3rem;height:.3rem;margin:0 auto}.course-review-sheet h2{margin:0;font-size:1.2rem}.course-review-form-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:.9rem;display:grid}.course-review-field{flex-direction:column;gap:.38rem;min-width:0;display:flex}.course-review-field span{color:var(--text-main);font-size:.9rem;font-weight:600}.course-review-field-full{width:100%}.course-review-name-bar{border:1px solid var(--border);background:var(--surface);min-height:3rem;box-shadow:var(--input-shadow);border-radius:10px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.4rem;padding:.22rem;display:grid}.course-review-name-input{width:100%;min-width:0;box-shadow:none;background:0 0;border:none;border-radius:8px;padding:.6rem .72rem}.course-review-name-input:focus{box-shadow:none}.course-review-meta-row{grid-template-columns:minmax(0,1fr);align-items:end;gap:.9rem;display:grid}.course-review-checkbox{border:1px solid var(--border);background:var(--surface);min-height:3rem;box-shadow:var(--input-shadow);color:var(--text-main);border-radius:10px;align-items:center;gap:.55rem;padding:.82rem .95rem;font-size:.95rem;font-weight:600;display:inline-flex}.course-review-name-checkbox{background:var(--surface-soft);min-height:2.56rem;box-shadow:none;white-space:nowrap;border:none;border-radius:8px;padding:.6rem .8rem}.course-review-checkbox input{width:1rem;min-width:1rem;height:1rem;box-shadow:none;margin:0}.course-review-checkbox span{color:var(--text-main)}.course-review-field select{height:3rem;min-height:3rem;padding-top:.6rem;padding-bottom:.6rem}.course-review-rating-input{align-items:center;gap:.3rem;min-height:3rem;padding:0;display:flex}.course-review-rating-button{color:#cbd5e1;min-width:0;box-shadow:none;background:0 0;border-radius:8px;padding:.15rem;font-size:1.6rem;line-height:1}.course-review-rating-button.filled,.course-review-rating-button:hover,.course-review-rating-button:active{color:#f59e0b}.course-review-rating-field{min-width:0}.course-review-sheet-actions{justify-content:space-between;gap:.8rem;display:flex}.course-review-sheet-actions button{flex:1 1 0}@keyframes course-review-sheet-rise{0%{transform:translateY(100%)}to{transform:translateY(0)}}.timetable-card .action-row{--tt-top-action-gap:calc(clamp(.6rem, 1.9vw, 1rem) * var(--tt-ui-scale,1));justify-content:flex-start;gap:var(--tt-top-action-gap);padding-inline:var(--tt-top-action-gap);flex-wrap:nowrap}.timetable-card .action-row button{flex:0 0 calc((100% - (var(--tt-top-action-gap) * 3)) / 2);white-space:nowrap;min-width:0}.course-table-wrap{width:100%;min-width:0;max-width:100%;margin-top:1rem}.course-table-scroll{-webkit-overflow-scrolling:touch;width:100%;min-width:0;max-width:100%;overflow:auto hidden}.course-table-wrap h3{color:var(--text-main);margin:0 0 .6rem;font-size:1rem}.course-table th.sortable-header{cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color .14s,color .14s}.sortable-header-label{align-items:center;gap:.22rem;max-width:100%;display:inline-flex}.sortable-header-icon{color:#8aa2c7;flex:0 0 .7rem;justify-content:center;align-items:center;width:.7rem;height:.7rem;display:inline-flex}.sortable-header-icon svg{width:100%;height:100%;display:block}.course-table th.sortable-header:hover{background:var(--surface-hover)}.course-table th.sortable-header.active{background:var(--surface-hover);color:var(--text-strong-accent);box-shadow:inset 0 -2px #2f80ed59}.course-table th.sortable-header.active .sortable-header-icon{color:currentColor}.course-table{border-collapse:collapse;border:1px solid var(--border);width:max-content;min-width:100%;box-shadow:var(--soft-shadow);background:var(--surface);border-radius:10px}.course-table th,.course-table td{text-align:left;border-bottom:1px solid var(--border);vertical-align:top;color:var(--text-subtle);padding:.3rem .25rem;font-size:.98rem;line-height:1.35}.course-table th{color:var(--text-main);background:var(--surface-alt);font-weight:600}.course-table tbody tr:last-child td{border-bottom:none}.message-box{border:1px solid var(--border);background:var(--surface);box-shadow:var(--input-shadow);border-radius:12px;padding:1rem}.message-box h2{margin:0 0 .35rem;font-size:1.2rem}.course-title-symbol-lines{color:var(--success-text);margin-top:.1rem;margin-bottom:.1rem;line-height:1.4}.warning-message{border-color:var(--warning-border);background:var(--warning-bg)}.timetable-page{--tt-ui-scale:var(--tt-browser-ui-scale,1);--tt-row-scale:var(--tt-browser-row-scale,1);--tt-time-col-width:10%;--tt-shell-pad-y:calc(clamp(.3rem, .8vh, .55rem) * var(--tt-ui-scale));--tt-shell-pad-x:calc(clamp(.28rem, .9vw, .65rem) * var(--tt-ui-scale));--tt-card-pad-y:calc(clamp(.36rem, .95vh, .72rem) * var(--tt-ui-scale));--tt-card-pad-x:calc(clamp(.3rem, .9vw, .56rem) * var(--tt-ui-scale));--tt-main-gap:calc(clamp(.3rem, .78vh, .54rem) * var(--tt-ui-scale));--tt-row-font-size:calc(clamp(.42rem, .62vw, .56rem) * var(--tt-ui-scale));--tt-control-height:calc(clamp(1.2rem, 2.2vh, 1.55rem) * var(--tt-ui-scale));--tt-control-font-size:calc(clamp(.45rem, .62vw, .62rem) * var(--tt-ui-scale));--tt-card-title-size:calc(clamp(.44rem, .68vw, .62rem) * var(--tt-ui-scale));--tt-card-meta-size:calc(clamp(.4rem, .6vw, .56rem) * var(--tt-ui-scale));--tt-cell-min-height:calc(clamp(9px, 1.3vh, 14px) * var(--tt-ui-scale));--tt-grid-row-height-base:calc(15px * var(--tt-row-scale));--tt-grid-row-height:var(--tt-grid-row-height-base);padding:var(--tt-shell-pad-y) var(--tt-shell-pad-x);align-items:stretch;height:auto;min-height:100dvh;overflow:visible}.timetable-card>h1{font-size:clamp(1.26rem,2.66vw,1.68rem);line-height:1.08}.timetable-card>p{font-size:clamp(.7rem,1.1vw,.8rem);line-height:1.28}.timetable-card>.action-row button{padding:.55rem .74rem;font-size:clamp(.66rem,.98vw,.72rem)}.timetable-card{width:100%;max-width:none;height:auto;min-height:auto;padding:var(--tt-card-pad-y) var(--tt-card-pad-x);gap:var(--tt-main-gap);flex-direction:column;display:flex}.timetable-fit-shell{width:100%}.timetable-fit-content{transform-origin:0 0;width:100%}.timetable-scroll-wrap{width:100%;min-height:auto;margin-top:calc(.24rem * var(--tt-ui-scale,1));border:1px solid var(--border);border-radius:calc(.5rem * var(--tt-ui-scale,1));background:var(--surface);flex:none;overflow:hidden}.timetable-grid{border-collapse:collapse;table-layout:fixed;width:100%;min-width:0}.timetable-grid th,.timetable-grid td{border-bottom:1px solid var(--border);border-right:1px solid var(--border);font-size:var(--tt-row-font-size);text-align:center;vertical-align:middle;padding:clamp(.04rem,.26vh,.09rem) clamp(.04rem,.22vw,.1rem);line-height:1}.timetable-grid tbody tr{height:var(--tt-grid-row-height)!important}.timetable-grid tbody td{z-index:0;position:relative;height:var(--tt-grid-row-height)!important}.timetable-grid tbody tr:nth-child(odd){background:var(--table-row-odd)}.timetable-grid tbody tr:nth-child(2n){background:var(--table-row-even)}.timetable-grid tbody td:not(.occupied){background:0 0}.timetable-grid tbody tr:nth-child(odd) .time-col{background:var(--table-time-odd)}.timetable-grid tbody tr:nth-child(2n) .time-col{background:var(--table-time-even)}.timetable-grid th:last-child,.timetable-grid td:last-child{border-right:none}.timetable-grid thead th{background:var(--surface-alt);color:var(--text-main);z-index:1;font-weight:700;position:sticky;top:0}.timetable-grid .time-col{color:var(--text-main);background:var(--surface-alt);white-space:nowrap;font-weight:400}.timetable-grid thead th:first-child,.timetable-grid .time-col{width:var(--tt-time-col-width)}.timetable-grid thead th:not(:first-child){width:15%}.tt-cell{min-height:var(--tt-cell-min-height);white-space:normal;overflow-wrap:anywhere;height:auto;line-height:1.1;transition:background-color .12s;position:relative;overflow:visible}.tt-cell.has-suggestion-block{isolation:isolate;z-index:6}.tt-suggestion-block{height:calc((var(--tt-grid-row-height) * var(--tt-suggestion-row-span,1)) - .16rem);pointer-events:none;z-index:7;border:2px dashed #9ec5ff;border-radius:10px;justify-content:center;align-items:center;display:flex;position:absolute;top:.08rem;left:.08rem;overflow:hidden;box-shadow:inset 0 0 0 1px #2f80ed14}.tt-suggestion-fill{left:0;right:0;top:calc(var(--tt-grid-row-height) * var(--tt-suggestion-fill-offset-rows,0));height:calc(var(--tt-grid-row-height) * var(--tt-suggestion-fill-row-span,1));z-index:0;background:#f3f8ffeb;position:absolute}.tt-suggestion-overlap{left:0;right:0;top:calc(var(--tt-grid-row-height) * var(--tt-suggestion-overlap-offset-rows,0));height:calc(var(--tt-grid-row-height) * var(--tt-suggestion-overlap-row-span,1));z-index:1;background:#fae8e8e6;border-radius:8px;position:absolute;transform:scale(1.02,1.08)}.tt-suggestion-label{color:#2368be;font-size:clamp(.38rem, calc((var(--tt-row-font-size) * 1.36) / (1 + ((var(--tt-suggestion-index-count,1) - 1) * .09) + ((var(--tt-suggestion-lane-count,1) - 1) * .24))), .72rem);letter-spacing:.01em;text-align:center;text-shadow:0 0 1px #fffffff2,0 0 3px #ffffffbf;z-index:9;border-radius:999px;flex-wrap:wrap;justify-content:center;align-items:center;gap:.08rem .14rem;padding:.12rem .42rem;font-weight:500;line-height:1;display:inline-flex;position:relative}.tt-suggestion-label.has-overlap{color:#db5151}.tt-suggestion-label-part{white-space:nowrap}.tt-cell.occupied{z-index:8;background:var(--tt-occupied-bg);color:var(--tt-occupied-text);cursor:grab;height:calc(var(--tt-grid-row-height) * var(--tt-row-span,1));max-height:none;padding:.08rem .1rem;font-weight:700;position:relative;overflow:visible}@media (pointer:coarse){.tt-cell.occupied{touch-action:none}}.tt-cell.occupied.active{box-shadow:inset 0 0 0 1px #2f80ed}.tt-cell.occupied.lifted{background:var(--tt-occupied-lifted-bg);box-shadow:inset 0 0 0 1.5px var(--tt-occupied-ring)}.tt-cell.occupied:active{cursor:grabbing}.tt-cell.occupied>div{margin-bottom:.08rem}.tt-cell.occupied>div:last-child{margin-bottom:0}.tt-occupied-content{flex-direction:column;justify-content:center;align-items:center;height:100%;padding:.04rem .06rem .05rem;line-height:1;display:flex;position:static;overflow:visible}.tt-course-line,.tt-detail-line{text-align:center;flex-wrap:wrap;justify-content:center;align-items:center;gap:0;display:flex}.tt-inline-sep{font-weight:400}.tt-cell.occupied .tt-course-code,.tt-grid-card-preview .tt-course-code{font-weight:700}.tt-cell.occupied .tt-type,.tt-cell.occupied .tt-index,.tt-cell.occupied .tt-time,.tt-grid-card-preview .tt-type,.tt-grid-card-preview .tt-index,.tt-grid-card-preview .tt-time{font-weight:400}.tt-cell.occupied .tt-venue,.tt-grid-card-preview .tt-venue{font-weight:600}.tt-grid-remove{background:var(--surface-chip-soft);width:.6rem;min-width:0;height:.6rem;color:var(--text-main);box-shadow:none;border-radius:999px;padding:0;font-size:.38rem;line-height:1;position:absolute;top:.08rem;right:.08rem}.timetable-main-stack{gap:var(--tt-main-gap);flex-direction:column;flex:none;min-height:auto;display:flex}.timetable-summary-exams-row{flex-direction:column;gap:.4rem;display:flex}.timetable-right-column{flex-direction:column;gap:.4rem;min-width:0;display:flex}.timetable-exams-panel{border:1px solid var(--border);background:var(--surface);border-radius:8px;width:100%;overflow:hidden}.timetable-exams-table{border-collapse:collapse;table-layout:fixed;width:100%}.timetable-exams-table th,.timetable-exams-table td{border-bottom:1px solid var(--border);color:var(--text-subtle);font-size:var(--tt-control-font-size);vertical-align:top;text-align:left;overflow-wrap:anywhere;padding:.18rem .12rem;line-height:1.2}.timetable-exams-table th{background:var(--surface-alt);color:var(--text-main);font-weight:700}.timetable-exams-table tbody tr:last-child td{border-bottom:none}.timetable-exams-table th:first-child,.timetable-exams-table td:first-child{width:14%;color:var(--text-main)}.timetable-exams-table td:first-child{font-weight:600}.timetable-exams-table th:nth-child(2),.timetable-exams-table td:nth-child(2){width:38%}.timetable-exams-table th:nth-child(3),.timetable-exams-table td:nth-child(3){width:18%}.timetable-exams-table th:nth-child(4),.timetable-exams-table td:nth-child(4){white-space:nowrap;overflow-wrap:normal;width:30%}.timetable-cards-viewport{width:100%;min-width:0}.timetable-cards{grid-template-columns:repeat(auto-fill,minmax(118px,1fr));align-content:start;gap:.34rem;max-height:none;display:grid;overflow:visible}.timetable-summary-row{flex-direction:column;align-items:stretch;gap:.35rem;margin:0;display:flex}.timetable-summary-top{align-items:stretch;width:100%;display:flex}.timetable-summary-bottom{justify-content:space-between;align-items:center;gap:.35rem;width:100%;display:flex}.timetable-summary-controls{flex-wrap:nowrap;align-items:center;gap:.28rem;min-width:0;display:flex}.timetable-clear-btn{min-width:0;height:var(--tt-control-height);background:var(--surface-chip);color:var(--text-main);box-shadow:none;font-size:var(--tt-control-font-size);border-radius:7px;margin-left:.2rem;padding:.12rem .28rem;font-weight:600;line-height:1.2}.timetable-plan-picker{color:var(--text-main);font-size:var(--tt-control-font-size);align-items:center;gap:.22rem;font-weight:600;display:inline-flex}.timetable-plan-picker select{width:auto;min-width:4.6rem;height:var(--tt-control-height);min-height:var(--tt-control-height);border:1px solid var(--border);box-shadow:none;font-size:var(--tt-control-font-size);background:var(--surface);border-radius:7px;padding:.1rem .15rem;line-height:1.2}.timetable-quick-add-wrap{grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:.2rem;width:100%;min-width:0;display:grid}.timetable-quick-add-input-wrap{min-width:0}.timetable-quick-add-input{width:100%;min-width:0;max-width:none;height:var(--tt-control-height);border:1px solid var(--border);box-shadow:none;font-size:var(--tt-control-font-size);border-radius:7px;padding:.12rem .48rem;line-height:1.2}.timetable-quick-add-btn{min-width:0;height:var(--tt-control-height);background:var(--surface-hover);color:var(--text-strong-accent);box-shadow:none;font-size:var(--tt-control-font-size);border-radius:7px;padding:.12rem .54rem;font-weight:600;line-height:1.2}.timetable-total-au{font-size:var(--tt-control-font-size);color:var(--text-strong-accent);text-align:right;white-space:nowrap;margin-left:0;margin-right:.2rem;font-weight:600}.timetable-course-card{border:1px solid var(--border);background:var(--surface);box-shadow:var(--input-shadow);cursor:grab;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;border-radius:6px;flex-direction:column;gap:.08rem;padding:.22rem .24rem;display:flex;position:relative}.timetable-course-card.selected{border-color:#0b5cab;box-shadow:0 0 0 1.5px #0b5cab2e}.timetable-course-card.placed{border-color:#a7dca3;box-shadow:0 0 0 1.5px #a7dca347}.timetable-course-card:active{cursor:grabbing}@media (pointer:coarse){.timetable-course-card{touch-action:none}}.timetable-course-card span{color:var(--text-subtle);font-size:var(--tt-card-meta-size);margin:0;line-height:1.05}.timetable-course-card strong{font-size:var(--tt-card-title-size);margin:0;line-height:1.05}.timetable-course-card .course-title{line-height:1.05}.meta-row{white-space:nowrap;justify-content:space-between;align-items:center;gap:.2rem;display:flex}.meta-row span{white-space:nowrap}.remove-chip{background:var(--surface-chip);width:12px;height:12px;color:var(--text-main);box-shadow:none;border-radius:999px;padding:0;font-size:.45rem;line-height:1;position:absolute;top:.175rem;right:.175rem}.tt-touch-drag-preview{background:color-mix(in srgb, var(--surface) 96%, transparent);pointer-events:none;z-index:30;border:1px solid #95bde8;border-radius:10px;flex-direction:column;gap:.08rem;width:min(46vw,220px);padding:.42rem .48rem;display:flex;position:fixed;transform:translate(-50%,-64%)rotate(-1.5deg);box-shadow:0 12px 26px #0f172a38}.tt-grid-card-preview{color:#163a70;box-sizing:border-box;background:#dfeafc;min-width:0;max-width:none;max-height:none;padding:.08rem .1rem;font-weight:700;display:block;overflow:visible}.tt-touch-drag-preview-grid,.tt-grid-drag-image{min-width:0;max-width:none;max-height:none;box-shadow:none;border-radius:0;overflow:visible}.tt-touch-drag-preview-grid{pointer-events:none;z-index:30;position:fixed;transform:translate(-50%,-50%)}.tt-grid-drag-image{pointer-events:none;position:fixed;top:-10000px;left:-10000px;overflow:hidden}.tt-touch-drag-preview-grid .tt-occupied-content,.tt-grid-drag-image .tt-occupied-content{height:100%}.tt-touch-drag-preview strong{font-size:.62rem;line-height:1.12}.tt-touch-drag-preview span{color:var(--text-subtle);font-size:.54rem;line-height:1.1}.index-picker-backdrop{background:var(--overlay-bg);z-index:20;place-items:center;padding:1rem;display:grid;position:fixed;inset:0}.index-picker-modal{border:1px solid var(--border);background:var(--surface);width:min(460px,100%);box-shadow:var(--soft-shadow);border-radius:14px;padding:1rem}.index-picker-modal h3{margin:0 0 .4rem}.index-picker-actions{flex-wrap:wrap;gap:.5rem;margin-top:.7rem;display:flex}.index-picker-actions button{flex:none;min-width:86px}@media (width<=640px){.timetable-page{--tt-row-font-size:clamp(.4rem, .95vw, .52rem);--tt-control-font-size:clamp(.44rem, 1vw, .56rem);--tt-control-height:clamp(1.12rem, 2.15vh, 1.42rem);--tt-card-title-size:clamp(.42rem, .95vw, .52rem);--tt-card-meta-size:clamp(.38rem, .84vw, .49rem);--tt-cell-min-height:9px;--tt-grid-row-height-base:14px;--tt-grid-row-height:var(--tt-grid-row-height-base)}.card{padding:1.4rem}.button-group,.action-row{flex-direction:column}.button-group button,.action-row button{flex:auto;width:100%}.timetable-card .action-row{--tt-top-action-gap:clamp(.45rem, 2.8vw, .72rem);justify-content:flex-start;gap:var(--tt-top-action-gap);padding-inline:var(--tt-top-action-gap);flex-direction:row}.timetable-card .action-row button{width:calc((100% - (var(--tt-top-action-gap) * 3)) / 2)}.course-table th,.course-table td{padding:.3rem;font-size:.55rem}.timetable-grid th,.timetable-grid td{font-size:var(--tt-row-font-size);padding:clamp(.03rem,.16vh,.07rem) clamp(.03rem,.16vw,.07rem);line-height:1}.tt-cell{min-height:var(--tt-cell-min-height)}.tt-cell.has-suggestion-block{z-index:6}.tt-suggestion-block{z-index:7}.tt-suggestion-fill{background:#f3f8ffeb}.tt-suggestion-overlap{background:#fae8e8e6}.tt-suggestion-label{font-size:clamp(.32rem, calc((var(--tt-row-font-size) * 1.08) / (1 + ((var(--tt-suggestion-index-count,1) - 1) * .1) + ((var(--tt-suggestion-lane-count,1) - 1) * .28))), .56rem);color:#2368be;letter-spacing:0;gap:.04rem .08rem;padding:.08rem .22rem}.tt-suggestion-label.has-overlap{color:#db5151}.timetable-page{padding:var(--tt-shell-pad-y) var(--tt-shell-pad-x) calc(var(--tt-shell-pad-y) + .25rem) var(--tt-shell-pad-x)}.timetable-card{height:auto;padding:var(--tt-card-pad-y) var(--tt-card-pad-x);border-radius:10px;margin-bottom:.4rem}.timetable-summary-row{align-items:stretch}.timetable-summary-top,.timetable-summary-bottom{width:100%}.timetable-summary-bottom{gap:.45rem}.timetable-quick-add-wrap{grid-template-columns:minmax(0,1fr) auto;min-width:0}.timetable-quick-add-input{padding-inline:.55rem;font-size:16px}.timetable-quick-add-input::placeholder{letter-spacing:-.01em;font-size:.84em}.timetable-summary-controls{flex:none}.timetable-total-au{margin-right:.35rem}.timetable-cards{grid-template-columns:repeat(3,minmax(0,1fr));max-height:none}.course-review-slider{grid-template-columns:minmax(0,1fr)}.course-review-nav{display:none}.course-review-card-top,.course-review-header,.course-review-form-grid,.course-review-sheet-actions,.course-review-meta-row{flex-direction:column;grid-template-columns:1fr;align-items:stretch}.course-review-card-top{display:flex}.course-review-name-checkbox{white-space:nowrap;justify-content:center}.coursecode-result-actions{grid-template-columns:1fr}.coursecode-timetable-btn,.coursecode-review-btn,.coursecode-share-btn{flex:unset}.exchange-launch-row{grid-template-columns:1fr;gap:.55rem}.exchange-launch-row select,.exchange-launch-row button{width:100%;min-height:3rem}.exchange-launch-row select{font-size:16px}.exchange-launch-row button{white-space:normal;padding-inline:.75rem;line-height:1.2}}@media (orientation:landscape){html.standalone .coursecode-page{padding-inline:1.5rem}html.standalone .coursecode-page .card{width:100%;max-width:none}}@media (width>=1024px){html.browser .page-shell{padding:2.5rem 2rem}html.browser .timetable-page.page-shell{--tt-ui-scale:var(--tt-browser-ui-scale,1);--tt-row-scale:var(--tt-browser-row-scale,1);--tt-row-font-size:calc(clamp(.46rem, .58vw, .57rem) * var(--tt-ui-scale));--tt-control-font-size:calc(clamp(.42rem, .58vw, .56rem) * var(--tt-ui-scale));--tt-control-height:calc(clamp(1.05rem, 1.95vh, 1.28rem) * var(--tt-ui-scale));--tt-card-title-size:calc(clamp(.62rem, .82vw, .84rem) * var(--tt-ui-scale));--tt-card-meta-size:calc(clamp(.54rem, .68vw, .72rem) * var(--tt-ui-scale));--tt-cell-min-height:calc(11px * var(--tt-ui-scale));--tt-grid-row-height-base:calc(16.5px * var(--tt-row-scale));place-items:stretch stretch;height:100dvh;min-height:100dvh;padding:clamp(.56rem,1.2vh,.82rem) clamp(.75rem,1.5vw,1.2rem);overflow:hidden}html.browser .timetable-page .timetable-card{height:100%;min-height:100%;padding:var(--tt-card-pad-y) var(--tt-card-pad-x);flex-direction:column;display:flex}html.browser .timetable-page .timetable-fit-shell{height:var(--tt-fit-shell-height,100%);overflow:hidden}html.browser .timetable-page .timetable-main-stack{gap:var(--tt-main-gap);flex:none;min-height:auto}html.browser .timetable-page .timetable-scroll-wrap{flex:none;min-height:auto;display:flex;overflow:hidden}html.browser .timetable-page .timetable-grid{height:auto}html.browser .timetable-page .timetable-grid thead th{font-size:calc(var(--tt-row-font-size) * 1.5);line-height:1.05}html.browser .timetable-page .timetable-grid .time-col{font-size:calc(var(--tt-row-font-size) * 1.36);padding:.01rem .03rem;line-height:1.05}html.browser .timetable-page .tt-cell.occupied,html.browser .timetable-page .tt-grid-card-preview{font-size:calc(var(--tt-row-font-size) * 1.25);line-height:1.15}html.browser .timetable-page .tt-cell.has-suggestion-block{z-index:6}html.browser .timetable-page .tt-suggestion-block{z-index:7}html.browser .timetable-page .tt-cell.occupied .tt-course-code,html.browser .timetable-page .tt-grid-card-preview .tt-course-code{font-size:1.08em}html.browser .timetable-page .tt-suggestion-label{font-size:clamp(.42rem, calc((var(--tt-row-font-size) * 1.56) / (1 + ((var(--tt-suggestion-index-count,1) - 1) * .09) + ((var(--tt-suggestion-lane-count,1) - 1) * .22))), .82rem)}html.browser .timetable-page .tt-occupied-content{padding:.01rem .03rem;line-height:.98}html.browser .timetable-page .tt-course-line,html.browser .timetable-page .tt-detail-line{line-height:.98}html.browser .timetable-page .tt-cell.occupied>div,html.browser .timetable-page .tt-grid-card-preview>div{margin-bottom:.01rem}html.browser .timetable-page .tt-grid-remove{width:1rem;height:1rem;font-size:.62rem;top:.14rem;right:.14rem}html.browser .timetable-page .timetable-cards{grid-template-columns:repeat(6,minmax(0,1fr));align-content:start;gap:clamp(.36rem,.78vh,.58rem);width:100%;max-height:none;margin-left:0;padding-right:0;overflow:visible}html.browser .timetable-page .timetable-cards-viewport.is-slider-active{overscroll-behavior-x:contain;scroll-snap-type:x proximity;scrollbar-gutter:stable;scrollbar-width:thin;-webkit-overflow-scrolling:touch;padding-bottom:clamp(.3rem,.7vh,.48rem);overflow:auto hidden}html.browser .timetable-page .timetable-cards.is-slider-active{grid-template-columns:none;grid-auto-columns:minmax(var(--tt-slider-card-width), var(--tt-slider-card-width));grid-auto-flow:column;align-content:stretch;width:max-content;min-width:100%;display:grid}html.browser .timetable-page .timetable-cards.is-slider-active .timetable-course-card{width:var(--tt-slider-card-width);min-width:var(--tt-slider-card-width);scroll-snap-align:end}html.browser .timetable-page .timetable-summary-exams-row{grid-template-columns:calc(var(--tt-time-col-width) + 15%) minmax(0, 1fr);align-items:start;gap:clamp(.36rem,.78vh,.58rem);display:grid}html.browser .timetable-page .timetable-right-column{grid-column:2;min-width:0}html.browser .timetable-page .timetable-exams-panel{grid-column:1}html.browser .timetable-page .timetable-exams-table th,html.browser .timetable-page .timetable-exams-table td{font-size:calc(var(--tt-control-font-size) * 1.05);padding:.3rem .18rem .2rem .1rem}html.browser .timetable-page .timetable-summary-row{flex-direction:row;justify-content:space-between;align-items:center;gap:.5rem;min-width:0}html.browser .timetable-page .timetable-summary-top{flex:clamp(20rem,42vw,34rem);width:auto;min-width:0}html.browser .timetable-page .timetable-summary-bottom{flex:auto;min-width:0}html.browser .timetable-page .timetable-summary-controls{flex-wrap:nowrap;gap:.35rem}html.browser .timetable-page .timetable-card .action-row button{flex:0 0 calc((((100% - (var(--tt-top-action-gap) * 3)) / 2)) * .46);width:calc((((100% - (var(--tt-top-action-gap) * 3)) / 2)) * .46);font-size:calc(var(--tt-control-font-size) * 1.22);padding:.5rem .68rem}html.browser .timetable-page .timetable-quick-add-wrap{grid-template-columns:minmax(0,1fr) auto;justify-content:stretch;gap:.35rem;width:100%;max-width:clamp(20rem,42vw,34rem)}html.browser .timetable-page .timetable-quick-add-input{width:100%;min-width:0;max-width:none;height:calc(var(--tt-control-height) * 1.5);font-size:calc(var(--tt-control-font-size) * 1.5);padding-inline:1.08rem}html.browser .timetable-page .timetable-quick-add-btn{height:calc(var(--tt-control-height) * 1.5);font-size:calc(var(--tt-control-font-size) * 1.5);padding-inline:1.08rem}html.browser .timetable-page .timetable-clear-btn{height:calc(var(--tt-control-height) * 1.5);font-size:calc(var(--tt-control-font-size) * 1.5);margin-left:0;padding-inline:.78rem}html.browser .timetable-page .timetable-plan-picker select{min-width:7.8rem;height:calc(var(--tt-control-height) * 1.5);min-height:calc(var(--tt-control-height) * 1.5);font-size:calc(var(--tt-control-font-size) * 1.5);padding-inline:.52rem}html.browser .timetable-page .timetable-total-au{font-size:calc(var(--tt-control-font-size) * 1.5);flex:none;margin-left:auto;margin-right:.5rem}html.browser .timetable-page .timetable-course-card{border-radius:9px;height:auto;min-height:0;padding:clamp(.38rem,.75vh,.58rem) clamp(.42rem,.84vw,.62rem)}html.browser .timetable-page .timetable-course-card .meta-row{white-space:normal;flex-wrap:wrap;align-items:flex-start;row-gap:.08rem}html.browser .timetable-page .timetable-course-card .meta-row span{white-space:normal}html.browser .timetable-page .remove-chip{width:16px;height:16px;font-size:.58rem}html.browser .coursecode-page.page-top,html.browser .keywords-page.page-top{align-items:start}html.browser .keywords-page.page-center{align-items:center}html.browser .coursecode-page .card,html.browser .keywords-page .card{max-width:min(1040px,100vw - 4rem);padding:2.25rem}html.browser .course-table th,html.browser .course-table td{padding:.55rem .65rem;font-size:.95rem}}
