:root{--text:#6b6375;--text-h:#08060d;--bg:#fff;--border:#e5e4e7;--code-bg:#f4f3ec;--accent:#aa3bff;--accent-bg:#aa3bff1a;--accent-border:#aa3bff80;--social-bg:#f4f3ec80;--shadow:#0000001a 0 10px 15px -3px, #0000000d 0 4px 6px -2px;--sans:system-ui, "Segoe UI", Roboto, sans-serif;--heading:system-ui, "Segoe UI", Roboto, sans-serif;--mono:ui-monospace, Consolas, monospace;font:18px/145% var(--sans);letter-spacing:.18px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;color:var(--text);background:var(--bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}@media (width<=1024px){:root{font-size:16px}}@media (prefers-color-scheme:dark){:root{--text:#9ca3af;--text-h:#f3f4f6;--bg:#16171d;--border:#2e303a;--code-bg:#1f2028;--accent:#c084fc;--accent-bg:#c084fc26;--accent-border:#c084fc80;--social-bg:#2f303a80;--shadow:#0006 0 10px 15px -3px, #00000040 0 4px 6px -2px}#social .button-icon{filter:invert()brightness(2)}}body{margin:0}#root{text-align:center;border-inline:1px solid var(--border);box-sizing:border-box;flex-direction:column;width:1126px;max-width:100%;min-height:100svh;margin:0 auto;display:flex}h1,h2{font-family:var(--heading);color:var(--text-h);font-weight:500}h1{letter-spacing:-1.68px;margin:32px 0;font-size:56px}@media (width<=1024px){h1{margin:20px 0;font-size:36px}}h2{letter-spacing:-.24px;margin:0 0 8px;font-size:24px;line-height:118%}@media (width<=1024px){h2{font-size:20px}}p{margin:0}code,.counter{font-family:var(--mono);color:var(--text-h);border-radius:4px;display:inline-flex}code{background:var(--code-bg);padding:4px 8px;font-size:15px;line-height:135%}@font-face{font-family:Computer Modern Sans;src:url(/fonts/cmunss.ttf)format("truetype");font-weight:400;font-style:normal}@font-face{font-family:Computer Modern Sans;src:url(/fonts/cmunsi.ttf)format("truetype");font-weight:400;font-style:italic}@font-face{font-family:Computer Modern Sans;src:url(/fonts/cmunsx.ttf)format("truetype");font-weight:700;font-style:normal}@font-face{font-family:Computer Modern Sans;src:url(/fonts/cmunso.ttf)format("truetype");font-weight:700;font-style:italic}*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--primary:#00205b;--primary-light:#1a3a7a;--primary-dark:#001540;--bg-primary:#001a47;--bg-secondary:#002858;--bg-tertiary:#036;--text-primary:#fff;--text-secondary:#e8e8e8;--text-tertiary:#d0d0d0;--border:#1a4a7a;--success:#10b981;--error:#ef4444;--warning:#f59e0b}html,body{width:100%;overflow-x:hidden}body{background:var(--bg-primary);color:var(--text-primary);font-family:Computer Modern Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.app{background:linear-gradient(135deg, var(--bg-primary) 0%, #1a2f4e 100%);max-width:100%;min-height:100vh;padding:20px;overflow-x:hidden}.header{z-index:3;max-width:100%;margin-bottom:40px;padding:28px 20px 18px;position:relative;overflow:hidden}.header-top{grid-template-columns:1fr auto 1fr;align-items:start;column-gap:20px;display:grid}.header-copy{text-align:center;grid-column:2;justify-self:center;min-width:0}.header h1{background:linear-gradient(135deg, var(--primary-light) 0%, #7c3aed 100%);-webkit-text-fill-color:transparent;word-wrap:break-word;overflow-wrap:break-word;white-space:normal;-webkit-background-clip:text;background-clip:text;margin-bottom:8px;font-family:inherit;font-size:2.5rem;font-weight:700;line-height:1.2}.header .tagline{color:var(--text-secondary);font-size:1rem;font-weight:400}.esther-auth-panel{flex-direction:column;grid-column:3;justify-content:flex-start;justify-self:end;align-items:flex-end;gap:6px;margin-top:6px;display:flex}.esther-auth-btn{color:#1d1b14;letter-spacing:.25px;cursor:pointer;background:linear-gradient(135deg,#ffcc4d 0%,#f59e0b 100%);border:1px solid #ffffff29;border-radius:999px;padding:8px 12px;font-family:inherit;font-size:.84rem;font-weight:800;transition:transform .2s,box-shadow .2s,filter .2s}.esther-auth-btn:hover{filter:brightness(1.02);transform:translateY(-1px);box-shadow:0 12px 24px #f59e0b3d}.esther-auth-btn:focus-visible{outline-offset:3px;outline:2px solid #f8e3a1}.esther-auth-status{color:var(--text-secondary);white-space:nowrap;font-size:.8rem;font-weight:700;line-height:1.1}.esther-auth-status.active{color:#86efac}.esther-auth-status.inactive{color:#fde68a}.esther-auth-disclaimer{border-left:3px solid var(--warning);max-width:760px;color:var(--text-secondary);text-align:left;background:#f59e0b14;border-radius:10px;margin-top:10px;margin-left:auto;padding:8px 10px;font-size:.82rem;line-height:1.35}@media (width<=760px){.header-top{flex-direction:column;align-items:stretch;display:flex}.header-copy{text-align:center}.esther-auth-panel{align-items:center;width:100%}.esther-auth-disclaimer{max-width:none;margin-left:0}}.auth-modal-overlay{z-index:1000;background:#000000b8;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.auth-modal-content{color:#1f2937;background:#fff;border-radius:18px;width:min(92vw,460px);max-width:460px;padding:1.75rem;box-shadow:0 24px 60px #00000059}.auth-modal-title{color:var(--primary);margin:0 0 .75rem}.auth-modal-disclaimer{border-left:4px solid var(--warning);color:#4b5563;background:#f59e0b1f;border-radius:12px;margin-bottom:1rem;padding:12px 14px;font-size:.9rem;line-height:1.45}.auth-modal-copy{color:#4b5563;margin-bottom:1.25rem;font-size:.95rem}.auth-field{margin-bottom:1rem}.auth-field label{color:#374151;margin-bottom:6px;font-size:.9rem;font-weight:700;display:block}.auth-field input{box-sizing:border-box;color:#111827;background:#f8fafc;border:1px solid #cbd5e1;border-radius:10px;width:100%;padding:10px 12px;font-family:inherit;font-size:1rem}.auth-field input:focus{border-color:var(--primary-light);outline:none;box-shadow:0 0 0 3px #00205b1f}.auth-error{color:var(--error);margin:0 0 1rem;font-size:.9rem}.auth-actions{flex-wrap:wrap;justify-content:flex-end;gap:10px;display:flex}.auth-cancel-btn,.auth-submit-btn{cursor:pointer;border:none;border-radius:10px;padding:10px 16px;font-family:inherit;font-weight:700}.auth-cancel-btn{color:#111827;background:#e5e7eb}.auth-submit-btn{background:var(--primary);color:#fff}.auth-submit-btn:disabled{opacity:.7;cursor:wait}.container{max-width:1200px;margin:0 auto}.search-section{background:var(--bg-secondary);border:1px solid var(--border);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:1;border-radius:16px;margin-bottom:32px;padding:32px;position:relative;box-shadow:0 8px 32px #0000004d}.search-inputs{grid-template-columns:1fr 1fr;align-items:flex-end;gap:16px;display:grid}.input-group{flex-direction:column;gap:8px;display:flex}.term-range{grid-template-columns:1fr 1fr;gap:12px;display:grid}.term-range.term-range-single{grid-template-columns:1fr}.term-range-field{flex-direction:column;gap:6px;display:flex}.term-range-label{color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.4px;font-size:.75rem;font-weight:600}.input-group label{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;font-size:.9rem;font-weight:600}.label-with-tooltip{align-items:center;gap:8px;display:flex}.tooltip-wrap{align-items:center;padding-bottom:10px;display:inline-flex;position:relative}.tooltip-wrap:before{display:none}.tooltip-trigger{border:1px solid var(--border);background:var(--bg-tertiary);width:18px;height:18px;color:var(--text-secondary);cursor:help;border-radius:50%;justify-content:center;align-items:center;padding:0;font-size:.72rem;font-weight:700;line-height:1;display:inline-flex}.tooltip-trigger:focus-visible{outline:2px solid var(--primary-light);outline-offset:2px}.tooltip-text{border:1px solid var(--border);background:var(--bg-secondary);width:280px;max-width:min(280px,80vw);color:var(--text-primary);text-transform:none;letter-spacing:normal;opacity:0;visibility:hidden;pointer-events:none;z-index:50;border-radius:8px;padding:8px 10px;font-size:.78rem;font-weight:500;line-height:1.35;transition:opacity .16s,transform .16s;position:absolute;bottom:calc(100% + 10px);left:50%;transform:translate(-50%)translateY(4px)}.tooltip-wrap:hover .tooltip-text,.tooltip-wrap:focus-within .tooltip-text{opacity:1;visibility:visible;pointer-events:auto;transform:translate(-50%)translateY(0)}.input-group input,.input-group select{border:2px solid var(--border);background:var(--bg-tertiary);color:var(--text-primary);border-radius:8px;padding:12px 16px;font-family:Computer Modern Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:1rem;transition:all .2s}.input-group input{border-color:var(--success);background:linear-gradient(135deg,#10b9810a 0%,#10b98105 100%)}.input-group input:hover:not(:focus){background:linear-gradient(135deg,#10b98114 0%,#10b9810a 100%)}.input-group input::placeholder{color:var(--text-tertiary)}.input-group input:focus,.input-group select:focus{border-color:var(--primary-light);background:var(--bg-primary);outline:none;box-shadow:0 0 0 3px #14b8a61a}.input-group select{cursor:pointer;border:2px solid var(--success);background:linear-gradient(135deg,#10b98114 0%,#10b9810a 100%)}.input-group select:hover:not(:focus){background:linear-gradient(135deg,#10b9811f 0%,#10b98114 100%)}.input-group select option{background:var(--bg-secondary);color:var(--text-primary)}.checkbox-group{align-items:center;padding:0 12px;display:flex}.checkbox-label{cursor:pointer;color:var(--text-secondary);-webkit-user-select:none;user-select:none;align-items:center;gap:8px;font-size:.9rem;transition:color .2s;display:flex}.checkbox-label:hover{color:var(--text-primary)}.checkbox-label input[type=checkbox]{cursor:pointer;accent-color:#a855f7;width:18px;height:18px}.search-btn{background:linear-gradient(135deg, var(--primary) 0%, var(--primary-light) 100%);color:#fff;cursor:pointer;text-transform:uppercase;letter-spacing:.5px;border:none;border-radius:8px;padding:12px 28px;font-size:1rem;font-weight:600;transition:all .2s}.search-btn:hover{transform:translateY(-2px);box-shadow:0 8px 16px #14b8a633}.search-btn:active{transform:translateY(0)}.status{border-radius:8px;margin-top:16px;padding:12px 16px;font-size:.95rem}.status.loading{color:var(--primary-light);text-align:center;background:#14b8a61a}.status.empty{color:var(--text-tertiary);text-align:center;background:#94a3b81a}.status.error{color:var(--error);background:#ef44441a}.results-section{padding:20px 0}.courses-grid{gap:16px;display:grid}.course-group{background:var(--bg-secondary);border:1px solid var(--border);border-radius:12px;transition:all .2s;overflow:hidden}.course-group:hover{border-color:var(--primary-light);box-shadow:0 4px 12px #14b8a61a}.course-header{border-bottom:1px solid var(--border);cursor:pointer;color:inherit;background:linear-gradient(135deg,#0f766e14 0%,#0f766e0a 100%);grid-template-columns:1fr auto;align-items:center;gap:20px;padding:14px 16px;text-decoration:none;transition:background .2s;display:grid}.course-header:hover{background:linear-gradient(135deg,#0f766e1f 0%,#0f766e14 100%)}.header-left{text-align:center;flex:1;min-width:0}.header-left h3{color:var(--text-primary);margin:0;font-size:1.15rem;font-weight:700;line-height:1.2}.course-title{color:var(--text-secondary);margin:2px 0 0;font-size:.88rem;font-weight:400;line-height:1.3}.expand-indicator{align-items:center;gap:8px;display:flex}.expand-indicator .badge{background:var(--success);color:#001a47;border-radius:20px;padding:4px 12px;font-size:.8rem;font-weight:700}.expand-indicator .chevron{color:var(--success);font-size:1.4rem;font-weight:700;transition:transform .2s;display:inline-block}.expand-indicator .chevron.open{transform:rotate(90deg)}.course-instances{flex-direction:column;gap:8px;padding:10px;display:flex}.course-card{background:var(--bg-primary);border:1px solid var(--border);color:inherit;border-radius:6px;padding:12px;text-decoration:none;transition:all .2s;display:block}.course-card:hover{border-color:var(--primary-light);transform:translateY(-2px);box-shadow:0 4px 12px #14b8a614}.card-meta{flex-wrap:wrap;gap:8px;margin-bottom:8px;display:flex}.card-meta>span{background:var(--bg-tertiary);color:var(--text-secondary);border-radius:6px;justify-content:center;align-items:center;height:28px;padding:4px 10px;font-size:.78rem;display:inline-flex}.card-meta .term{color:#fff;background:#1a3a7a4d;font-weight:600}.card-meta .crn{color:var(--text-tertiary);cursor:pointer;font-weight:600}.card-meta .credits{color:var(--success);font-weight:700}.course-details{margin-bottom:4px}.detail-row{align-items:flex-start;gap:12px;margin-bottom:6px;font-size:.88rem;line-height:1.3;display:flex}.detail-row strong{color:var(--text-secondary);text-align:right;flex-shrink:0;width:90px;font-weight:600}.detail-row span{color:var(--text-primary);text-align:left;flex:1}.detail-items{color:var(--text-primary);flex-direction:column;flex:1;gap:2px;display:flex}.detail-item{text-align:left}.instructor-link{color:#9dd6ff;text-underline-offset:2px;cursor:pointer;font-weight:600;text-decoration:underline;transition:color .2s,text-decoration-color .2s}.instructor-link:hover{color:#fff;text-decoration-color:#ffffffbf}.instructor-link:focus-visible{outline-offset:2px;border-radius:2px;outline:2px solid #9dd6ffb3}.instructor-text.muted{color:var(--text-tertiary);font-weight:500}.card-actions{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-top:10px;display:flex}.course-page-link{color:#fff;cursor:pointer;border:1px solid var(--border);background:#14b8a61f;border-radius:6px;justify-content:center;align-items:center;height:40px;padding:0 16px;font-size:.88rem;font-weight:700;line-height:1;text-decoration:none;transition:all .2s;display:inline-flex}.course-page-link:hover{border-color:var(--primary-light);background:#14b8a633}.syllabus-btn{border:1px solid var(--border);color:#fff;cursor:pointer;background:#14b8a61f;border-radius:6px;justify-content:center;align-items:center;height:40px;padding:0 16px;font-size:.88rem;font-weight:700;line-height:1;transition:all .2s;display:inline-flex}.syllabus-btn:hover:not(:disabled){border-color:var(--primary-light);background:#14b8a633}.syllabus-btn:disabled{opacity:.65;cursor:not-allowed}.evaluation-btn{border:1px solid var(--border);color:#fff;cursor:pointer;background:#a855f71f;border-radius:6px;justify-content:center;align-items:center;height:40px;padding:0 16px;font-size:.88rem;font-weight:700;line-height:1;transition:all .2s;display:inline-flex}.evaluation-btn:hover:not(:disabled){background:#a855f733;border-color:#a855f7}.evaluation-btn:disabled{opacity:.65;cursor:not-allowed}.collapse-eval-btn{color:var(--text-secondary);cursor:pointer;text-align:left;background:#a855f714;border:1px solid #a855f766;border-radius:4px;width:100%;margin-top:8px;padding:8px 12px;font-size:.85rem;font-weight:600;transition:all .2s}.collapse-eval-btn:hover{color:var(--text-primary);background:#a855f726;border-color:#a855f799}.evaluation-results{background:#a855f714;border:1px solid #a855f74d;border-radius:6px;max-height:600px;margin-top:12px;padding:12px;overflow-y:auto}.evaluation-status{margin-top:6px;font-size:.78rem;line-height:1.3}.evaluation-status.neutral{color:var(--text-tertiary)}.evaluation-status.error{color:var(--error)}.instructor-eval-btn{color:#fff;cursor:pointer;background:#f59e0b1f;border:1px solid #f59e0b66;border-radius:6px;justify-content:center;align-items:center;height:40px;padding:0 16px;font-size:.88rem;font-weight:700;line-height:1;transition:all .2s;display:inline-flex}.instructor-eval-btn:hover:not(:disabled){background:#f59e0b33;border-color:#f59e0b}.instructor-eval-btn:disabled{opacity:.65;cursor:not-allowed}.collapse-instructor-eval-btn{color:var(--text-secondary);cursor:pointer;text-align:left;background:#f59e0b14;border:1px solid #f59e0b66;border-radius:4px;width:100%;margin-top:8px;padding:8px 12px;font-size:.85rem;font-weight:600;transition:all .2s}.collapse-instructor-eval-btn:hover{color:var(--text-primary);background:#f59e0b26;border-color:#f59e0b99}.instructor-eval-results{background:#f59e0b0f;border:1px solid #f59e0b4d;border-radius:6px;margin-top:12px;padding:12px}.instructor-eval-card{margin-bottom:8px}.collapse-instructor-btn{color:var(--text-secondary);cursor:pointer;text-align:left;background:#f59e0b14;border:1px solid #f59e0b38;border-radius:6px;width:100%;padding:8px 10px;font-size:.85rem;font-weight:600;transition:all .2s}.collapse-instructor-btn:hover{color:var(--text-primary);background:#f59e0b29;border-color:#f59e0b99}.instructor-eval-sections{flex-direction:column;gap:10px;margin-top:10px;display:flex}.instructor-eval-section{padding:2px 0 0}.instructor-eval-header{flex-direction:column;gap:4px;margin-bottom:8px;display:flex}.instructor-eval-header .eval-course{color:var(--text-primary);font-size:.95rem;font-weight:700}.instructor-eval-header .eval-meta{color:var(--text-tertiary);flex-wrap:wrap;gap:8px;font-size:.78rem;display:flex}.instructor-eval-header .eval-meta span{background:#f59e0b26;border-radius:999px;padding:2px 8px}.syllabus-status{margin-top:6px;font-size:.78rem;line-height:1.3}.syllabus-status.success a{color:var(--success);text-decoration:underline}.syllabus-link{color:#fff;margin-top:4px;font-size:.88rem;text-decoration:underline;display:inline-block}.syllabus-link:hover{opacity:.8}.syllabus-status.neutral{color:var(--text-tertiary)}.syllabus-status.error{color:var(--error)}.syllabus-viewer{border:1px solid var(--border);background:#1a1a1a;border-radius:6px;margin-top:12px;overflow:hidden}.toggle-syllabus-btn{background:var(--secondary-bg);color:var(--text-primary);border:1px solid var(--border);cursor:pointer;border-radius:4px;margin-top:8px;padding:6px 12px;font-size:.9rem;transition:all .2s;display:inline-block}.toggle-syllabus-btn:hover{background:var(--hover-bg);border-color:var(--accent)}.syllabus-iframe{background:#fff;border:none;width:100%;height:600px;display:block}.course-link{color:inherit;font-size:inherit;font-weight:inherit;cursor:pointer;background:0 0;border:none;border-radius:0;padding:0;text-decoration:none;transition:none;display:block}.course-link:hover{background:0 0;transform:none}.subjects-info-btn{font-size:1rem;font-weight:700}.subjects-tooltip{width:min(320px,90vw);max-width:90vw;max-height:200px;padding:12px 10px;overflow-y:auto}.subject-codes-list{flex-direction:column;gap:6px;margin-top:8px;display:flex}.subject-code-item{cursor:pointer;border-radius:4px;align-items:center;gap:8px;padding:6px 8px;transition:all .15s;display:flex}.subject-code-item:hover{background:var(--bg-tertiary);padding-left:12px}.subject-code-item .code{color:var(--success);text-transform:uppercase;letter-spacing:.5px;min-width:45px;font-weight:700}.subject-code-item .meaning{color:var(--text-secondary);flex:1;font-size:.85rem}.load-more-container{justify-content:center;margin-top:24px;padding:20px 0;display:flex}.load-more-btn{border:2px solid var(--success);color:var(--success);cursor:pointer;background:#10b9811f;border-radius:6px;padding:10px 24px;font-size:.95rem;font-weight:700;transition:all .2s}.load-more-btn:hover:not(:disabled){background:#10b98133;transform:scale(1.02)}.load-more-btn:disabled{opacity:.7;cursor:not-allowed}.app-footer{text-align:center;color:var(--text-tertiary);border-top:1px solid var(--border);margin-top:10px;padding:5px;font-size:.85rem}.app-footer p{margin:0}.charts-section{border-bottom:2px solid #a855f74d;margin-bottom:20px;padding-bottom:20px}.charts-title{color:var(--text-primary);text-transform:uppercase;letter-spacing:.5px;margin-bottom:16px;font-size:1.1rem;font-weight:700}.charts-grid{grid-template-columns:1fr 1fr;gap:16px;display:grid}.chart-container{background:#1a3a7a4d;border:1px solid #a855f733;border-radius:6px;padding:12px}.chart-title{color:var(--text-primary);margin-bottom:8px;font-size:.9rem;font-weight:600;line-height:1.3}.chart-meta{color:var(--text-secondary);margin-bottom:8px;font-size:.75rem;font-weight:500}.chart-wrapper{background:#010a1e66;border-radius:4px;padding:8px}.comments-section{margin-top:16px}@media (width<=768px){.header h1{font-size:1.8rem}.search-inputs{grid-template-columns:1fr;gap:12px}.term-range{grid-template-columns:1fr}.search-btn{width:100%}.tooltip-text{width:230px;max-width:85vw;left:0;transform:translateY(4px)}.tooltip-wrap:hover .tooltip-text,.tooltip-wrap:focus-within .tooltip-text{transform:translateY(0)}.course-header,.card-actions{flex-direction:column;align-items:flex-start}.expand-indicator{justify-content:space-between;width:100%;margin-top:8px}.course-group{border-radius:8px}.search-section{padding:20px}.charts-grid{grid-template-columns:1fr}}
