@import "https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap";:root{--radius:.625rem;--bg:#f8f9fa;--fg:#00293a;--card:#fff;--muted:#e9ecef;--muted-fg:#6c757d;--primary:#028d93;--primary-fg:#fff;--accent:#20b2aa;--border:#dee2e6;--brand:#028d93;--shadow:0 4px 12px #0000000d;--shadow-lg:0 12px 32px #00000014;--shadow-xl:0 20px 48px #00293a1f;--sheet-bg:linear-gradient(180deg, #f8f9faf2 0%, #e9eceff2 100%);--glass-bg:#ffffffbf;--glass-border:#fff6}*{box-sizing:border-box;border-color:var(--border);margin:0;padding:0}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--fg);-webkit-font-smoothing:antialiased;min-height:100vh;font-family:Inter,system-ui,-apple-system,sans-serif}.header{z-index:100;background:var(--glass-bg);-webkit-backdrop-filter:blur(16px);border-bottom:1px solid var(--glass-border);max-width:100%;padding:1rem 1.5rem;position:sticky;top:0}.header-container{justify-content:space-between;align-items:center;width:100%;max-width:80rem;margin:0 auto;display:flex}.brand{align-items:center;gap:.6rem;transition:transform .2s;display:flex}.brand:hover{transform:scale(1.02)}.brand-icon{background:var(--brand);border-radius:9999px;place-items:center;width:2.25rem;height:2.25rem;display:grid}.brand-icon svg{width:1.25rem;height:1.25rem;color:var(--primary)}.brand-text{letter-spacing:-.02em;font-size:1.125rem;font-weight:600}.brand-text span{color:var(--brand)}.badge-pill{border:1px solid var(--border);color:var(--muted-fg);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#fff9;border-radius:9999px;padding:.375rem .75rem;font-size:.75rem}.hero{text-align:center;max-width:64rem;margin:0 auto;padding:5rem 1.5rem 3.5rem;position:relative}.hero:before{content:"";z-index:-1;pointer-events:none;background:radial-gradient(circle,#028d9326 0%,#0000 70%);width:600px;max-width:100%;height:400px;position:absolute;top:-10%;left:50%;transform:translate(-50%)}.hero-pill{color:#1a2e2acc;background:#3cb3714d;border-radius:9999px;padding:.375rem 1rem;font-size:.75rem;font-weight:500;display:inline-block}.hero h1{letter-spacing:-.03em;margin-top:1.5rem;font-size:clamp(2.5rem,5vw,4rem);font-weight:800;line-height:1.05}.hero h1 .grad{color:var(--brand);background:linear-gradient(135deg, var(--brand) 0%, var(--accent) 100%);-webkit-text-fill-color:transparent;-webkit-background-clip:text}.hero h1 .grad .accent{background:linear-gradient(135deg, var(--primary) 0%, #00d2ff 100%);-webkit-text-fill-color:transparent;-webkit-background-clip:text}.hero p{max-width:36rem;color:var(--muted-fg);margin:1.25rem auto 0;font-size:1.05rem;line-height:1.6}.stats-grid{grid-template-columns:repeat(3,1fr);gap:1rem;max-width:48rem;margin:2.5rem auto 0;display:grid}.stat-card{border:1px solid var(--glass-border);background:var(--glass-bg);-webkit-backdrop-filter:blur(8px);text-align:center;box-shadow:var(--shadow);border-radius:1rem;padding:1.25rem;transition:transform .3s,box-shadow .3s}.stat-card:hover{box-shadow:var(--shadow-lg);transform:translateY(-4px)}.stat-card svg{width:1.25rem;height:1.25rem;color:var(--primary);margin:0 auto}.stat-value{margin-top:.5rem;font-size:1.875rem;font-weight:700}.stat-label{color:var(--muted-fg);font-size:.875rem}.filters{max-width:80rem;margin:0 auto;padding:0 1.5rem 5rem}.filter-bar{border:1px solid var(--glass-border);background:var(--glass-bg);-webkit-backdrop-filter:blur(12px);box-shadow:var(--shadow);border-radius:1rem;flex-wrap:wrap;align-items:center;gap:.75rem;padding:.75rem;display:flex}.search-wrap{flex:280px;position:relative}.search-wrap svg{width:1rem;height:1rem;color:var(--muted-fg);pointer-events:none;position:absolute;top:50%;left:.75rem;transform:translateY(-50%)}.search-wrap input{width:100%;color:var(--fg);background:0 0;border:1px solid #0000;border-radius:.75rem;outline:none;padding:.625rem .75rem .625rem 2.25rem;font-family:inherit;font-size:.875rem}.search-wrap input:focus{border-color:var(--primary);box-shadow:0 0 0 3px #028d9326}.filter-bar select{border:1px solid var(--border);background:var(--card);cursor:pointer;color:var(--fg);border-radius:.75rem;outline:none;padding:.625rem .75rem;font-family:inherit;font-size:.875rem;transition:all .2s}.filter-bar select:focus{border-color:var(--primary);box-shadow:0 0 0 3px #028d9326}.request-link-wrap{text-align:right;margin-top:.5rem;font-size:.8125rem}.request-text{color:var(--muted-fg)}.request-btn-link{color:var(--brand);cursor:pointer;background:0 0;border:none;font-weight:600}.request-btn-link:hover{text-decoration:underline}.request-form-card{border:1px solid var(--border);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#ffffffb3;border-radius:1rem;margin-top:.75rem;padding:1rem}.request-form-header{justify-content:space-between;align-items:center;margin-bottom:.75rem;display:flex}.request-form-header h4{font-size:.9375rem;font-weight:600}.request-form-header .close-btn{cursor:pointer;color:var(--muted-fg);background:0 0;border:none;display:flex}.request-form-header .close-btn:hover{color:var(--fg)}.request-form-header .close-btn svg{width:1rem;height:1rem}.request-form-body{gap:.5rem;display:flex}.request-form-body input{border:1px solid var(--border);border-radius:.5rem;flex:1;padding:.625rem .75rem;font-family:inherit;font-size:.875rem}.request-form-body input:focus{border-color:var(--primary);outline:none}@media (width<=600px){.request-form-body{flex-direction:column}}.course-grid{grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:1.25rem;margin-top:1.5rem;display:grid}.course-card{background:var(--card);cursor:pointer;border:1px solid #028d931f;border-radius:1.25rem;flex-direction:column;height:100%;padding:1.5rem;transition:all .3s cubic-bezier(.25,.8,.25,1);display:flex;box-shadow:0 4px 16px #00293a0a,inset 0 2px 4px #ffffff80}.course-card:hover{box-shadow:var(--shadow-xl);border-color:#028d9366;transform:translateY(-4px)scale(1.01)}.course-card .meta{color:var(--muted-fg);justify-content:space-between;align-items:flex-start;gap:.75rem;font-size:.75rem;display:flex}.course-card .meta .code{color:var(--fg);font-weight:500}.course-card .dept-pill{color:var(--primary);white-space:nowrap;background:#028d931a;border-radius:9999px;padding:.125rem .625rem;font-size:.6875rem;font-weight:600}.course-card h3{margin-top:.5rem;font-size:1.125rem;font-weight:600}.course-card .desc{height:2.8em;color:var(--muted-fg);-webkit-line-clamp:2;text-overflow:ellipsis;-webkit-box-orient:vertical;margin-top:.375rem;font-size:.875rem;line-height:1.4;display:-webkit-box;overflow:hidden}.stars{align-items:center;gap:.125rem;display:flex}.stars svg{width:1rem;height:1rem}.stars .filled{fill:var(--primary);color:var(--primary)}.stars .empty{color:#6b8a7e4d}.course-card .rating-row{align-items:center;gap:.5rem;margin-top:auto;padding-top:1rem;display:flex}.rating-row .score{font-size:.875rem;font-weight:600}.rating-row .count{color:var(--muted-fg);font-size:.75rem}.metrics{grid-template-columns:repeat(3,1fr);gap:.5rem;margin-top:1rem;display:grid}.metric{background:#028d930a;border:1px solid #028d9314;border-radius:.75rem;padding:.5rem .625rem}.metric .label{color:var(--muted-fg);align-items:center;gap:.25rem;font-size:.625rem;display:flex}.metric .label svg{width:.75rem;height:.75rem}.metric .val{margin-top:.125rem;font-size:.875rem;font-weight:600}.sheet-overlay{opacity:0;pointer-events:none;z-index:40;background:#00000059;transition:opacity .25s;position:fixed;inset:0}.sheet-overlay.open{opacity:1;pointer-events:auto}.sheet{background:var(--sheet-bg);z-index:50;border-left:1px solid var(--glass-border);-webkit-backdrop-filter:blur(24px);width:min(100vw,36rem);padding:1.5rem;transition:transform .3s cubic-bezier(.32,.72,.42,1);position:fixed;top:0;bottom:0;right:0;overflow-y:auto;transform:translate(100%);box-shadow:-8px 0 32px #0000001a}.sheet.open{transform:translate(0)}.sheet-close{width:2rem;height:2rem;color:var(--muted-fg);cursor:pointer;background:0 0;border:none;border-radius:9999px;place-items:center;display:grid;position:absolute;top:1rem;right:1rem}.sheet-close:hover{background:var(--muted)}.sheet-close svg{width:1rem;height:1rem}.sheet-header .meta{color:var(--muted-fg);align-items:center;gap:.5rem;font-size:.75rem;display:flex}.sheet-header .meta .code{color:var(--fg);font-weight:500}.sheet-header .meta .dept-pill{color:#1a2e2acc;background:#3cb3714d;border-radius:9999px;padding:.125rem .5rem;font-size:.625rem;font-weight:600}.sheet-header h2{letter-spacing:-.02em;margin-top:.5rem;font-size:1.875rem;font-weight:700}.sheet-header p{color:var(--muted-fg);margin-top:.5rem;font-size:.875rem}.stats-card{border:1px solid var(--border);background:var(--card);border-radius:1rem;margin-top:1rem;padding:1.25rem}.stats-card .big-rating{align-items:center;gap:.75rem;display:flex}.stats-card .big-rating .score{font-size:2.25rem;font-weight:700}.stats-card .big-rating .sub{color:var(--muted-fg);margin-top:.125rem;font-size:.75rem}.bar-grid{grid-template-columns:repeat(2,1fr);gap:.75rem 1.5rem;margin-top:1rem;display:grid}.bar .bar-labels{justify-content:space-between;font-size:.75rem;display:flex}.bar .bar-labels .l{color:var(--muted-fg)}.bar .bar-labels .v{font-weight:600}.bar-track{background:var(--muted);border-radius:9999px;height:.375rem;margin-top:.375rem;overflow:hidden}.bar-fill{background:var(--primary);border-radius:9999px;height:100%;transition:width .4s}.recommend-row{align-items:center;gap:.5rem;margin-top:1rem;font-size:.875rem;display:flex}.recommend-row svg{width:1rem;height:1rem;color:var(--primary)}.recommend-row strong{font-weight:600}.tabs{background:#0000000a;border-radius:1rem;grid-template-columns:1fr 1fr;gap:.25rem;margin-top:1.25rem;padding:.25rem;display:grid}.tab-btn{color:var(--muted-fg);cursor:pointer;background:0 0;border:none;border-radius:.875rem;padding:.5rem 1rem;font-family:inherit;font-size:.875rem;font-weight:500;transition:all .2s}.tab-btn.active{background:var(--card);color:var(--fg);box-shadow:0 1px 4px #0000000f}.role-btn svg{width:1rem;height:1rem}.role-btn:hover{background:var(--muted)}.role-btn.active{background:var(--card);color:var(--brand);border-color:var(--border);box-shadow:0 1px 3px #0000000d}.auth-block{align-items:center;display:flex}.auth-btn{background:linear-gradient(135deg, var(--brand) 0%, var(--accent) 100%);color:var(--primary-fg);cursor:pointer;border:none;border-radius:9999px;padding:.625rem 1.25rem;font-size:.875rem;font-weight:600;transition:all .3s;box-shadow:0 4px 12px #028d9340}.auth-btn:hover{transform:translateY(-2px);box-shadow:0 6px 16px #028d9359}.auth-btn:active{transform:translateY(0)}.auth-btn.outline{color:var(--primary);border:2px solid var(--primary);box-shadow:none;background:0 0;padding:.5rem 1.125rem}.auth-btn.outline:hover{background:#028d930d;box-shadow:0 4px 12px #028d9326}.user-controls{align-items:center;gap:1rem;display:flex}.user-name{white-space:nowrap;text-overflow:ellipsis;max-width:250px;font-size:.875rem;font-weight:500;overflow:hidden}@media (width<=600px){.user-controls{gap:.4rem}.user-name{max-width:120px}}.filter-chips{gap:.5rem;margin-top:1.25rem;display:flex}.chip{border:1px solid var(--border);background:var(--card);cursor:pointer;color:var(--fg);border-radius:9999px;padding:.375rem 1rem;font-size:.75rem;font-weight:500;transition:all .2s}.chip.active{background:var(--fg);color:var(--bg);border-color:var(--fg)}.review-list{flex-direction:column;gap:.75rem;margin-top:1rem;display:flex}.review-card{background:linear-gradient(145deg,#fff 0%,#f4fafa 100%);border:1px solid #028d9326;border-radius:1rem;padding:1.25rem;box-shadow:0 2px 8px #00293a0a}.review-header{justify-content:space-between;align-items:flex-start;display:flex}.review-author{align-items:center;gap:.5rem;display:flex}.review-author .name{color:var(--brand);font-size:.875rem;font-weight:600}.review-author .yr{background:var(--muted);border-radius:9999px;padding:.0625rem .5rem;font-size:.625rem;font-weight:500}.recommend-badge{color:var(--primary);align-items:center;gap:.25rem;font-size:.75rem;font-weight:500;display:flex}.recommend-badge svg{width:.875rem;height:.875rem}.review-meta{color:var(--muted-fg);align-items:center;gap:.5rem;margin-top:.375rem;font-size:.75rem;display:flex}.review-text{margin-top:.5rem;font-size:.875rem;line-height:1.5}.mini-metrics{grid-template-columns:repeat(2,1fr);gap:.5rem;margin-top:.75rem;display:grid}.mini-m{background:#028d930a;border:1px solid #028d9314;border-radius:.75rem;padding:.5rem .75rem}.mini-m .k{color:var(--muted-fg);font-size:.625rem}.mini-m .v{color:var(--fg);font-size:.875rem;font-weight:600}.tags{flex-wrap:wrap;gap:.5rem;margin-top:.75rem;display:flex}.tag{color:var(--primary);background:#028d931a;border-radius:9999px;padding:.125rem .625rem;font-size:.6875rem;font-weight:600}.review-footer{color:var(--muted-fg);justify-content:space-between;align-items:center;margin-top:.75rem;font-size:.75rem;display:flex}.review-footer button{color:var(--muted-fg);cursor:pointer;background:0 0;border:none;align-items:center;gap:.25rem;font-family:inherit;font-size:.75rem;display:flex}.review-footer button:hover{color:var(--primary)}.review-footer svg{width:.875rem;height:.875rem}.form{flex-direction:column;gap:1.5rem;margin-top:1rem;display:flex}.form-section{border:1px solid var(--border);background:#fff;border-radius:1rem;flex-direction:column;gap:1rem;padding:1.25rem;display:flex;box-shadow:0 2px 8px #00000005}.form-section-title{color:var(--primary);text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid var(--muted);margin-bottom:.25rem;padding-bottom:.75rem;font-size:.875rem;font-weight:700}.form-row{grid-template-columns:1fr 1fr;gap:1rem;display:grid}.field{flex-direction:column;gap:.375rem;display:flex}.field label{font-size:.875rem;font-weight:600}.field input,.field select,.field textarea{border:1px solid var(--border);background:var(--card);color:var(--fg);border-radius:.75rem;outline:none;padding:.5rem .75rem;font-family:inherit;font-size:.875rem}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--primary)}.field textarea{resize:none}.char-count{color:var(--muted-fg);text-align:right;margin-top:.25rem;font-size:.625rem}.star-input{gap:.25rem;display:flex}.star-input button{cursor:pointer;background:0 0;border:none;padding:0}.star-input svg{color:#6b8a7e4d;width:1.25rem;height:1.25rem}.star-input button.active svg{fill:var(--primary);color:var(--primary)}.slider-wrap{flex-direction:column;gap:.25rem;display:flex}.slider-labels{justify-content:space-between;font-size:.875rem;display:flex}.slider-labels .sl{font-weight:600}.slider-labels .hint{color:var(--muted-fg);font-size:.75rem}.slider-control{flex-direction:column;gap:.125rem;display:flex;position:relative}.slider-ticks{color:var(--muted-fg);justify-content:space-between;padding:0 .125rem;font-size:.625rem;font-weight:500;display:flex}input[type=range]{-webkit-appearance:none;background:var(--muted);cursor:pointer;border-radius:9999px;outline:none;width:100%;height:.5rem;margin-top:.25rem}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background:var(--primary);cursor:pointer;border:3px solid var(--card);border-radius:50%;width:1.25rem;height:1.25rem;transition:transform .1s;box-shadow:0 2px 6px #0003}input[type=range]::-webkit-slider-thumb:hover{transform:scale(1.15)}.submit-btn{background:var(--brand);color:#fff;cursor:pointer;border:none;border-radius:.75rem;width:100%;padding:.75rem;font-family:inherit;font-size:.875rem;font-weight:600;transition:opacity .2s}.submit-btn:hover{opacity:.9}footer{text-align:center;color:var(--muted-fg);border-top:1px solid #0000000f;padding:2rem;font-size:.75rem}.empty-state{text-align:center;color:var(--muted-fg);padding:3rem;font-size:.875rem}.role-toggle{background:var(--muted);border-radius:9999px;gap:.125rem;padding:.25rem;display:flex}.role-btn{color:var(--muted-fg);cursor:pointer;background:0 0;border:none;border-radius:9999px;align-items:center;gap:.375rem;padding:.5rem 1rem;font-family:inherit;font-size:.8125rem;font-weight:500;transition:all .2s;display:flex}.role-btn.active{background:var(--card);color:var(--fg);box-shadow:0 1px 4px #00000014}.form-error{color:#b91c1c;background:#fef2f2;border:1px solid #fecaca;border-radius:.75rem;padding:.625rem .875rem;font-size:.8125rem;font-weight:500}.form-success{color:#15803d;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:.75rem;padding:.625rem .875rem;font-size:.8125rem;font-weight:500}.admin-panel{max-width:80rem;margin:0 auto;padding:2rem 1.5rem 5rem}.admin-header{margin-bottom:2rem}.admin-header h1{letter-spacing:-.02em;font-size:2rem;font-weight:800}.admin-header p{color:var(--muted-fg);margin-top:.5rem;font-size:.9375rem}.admin-grid{grid-template-columns:1fr 1fr;align-items:start;gap:1.5rem;display:grid}.admin-card{border:1px solid var(--border);background:var(--card);border-radius:1rem;padding:1.5rem}.admin-card h2{align-items:center;gap:.5rem;margin-bottom:1rem;font-size:1.125rem;font-weight:700;display:flex}.admin-course-list{flex-direction:column;gap:.625rem;max-height:32rem;display:flex;overflow-y:auto}.admin-course-item{border:1px solid var(--border);border-radius:.875rem;justify-content:space-between;align-items:center;padding:.875rem;transition:border-color .2s;display:flex}.admin-course-item:hover{border-color:#3cb37166}.dept-pill{color:#1a2e2acc;white-space:nowrap;background:#3cb37140;border-radius:9999px;padding:.125rem .625rem;font-size:.6875rem;font-weight:500}.delete-btn{width:2rem;height:2rem;color:var(--muted-fg);cursor:pointer;background:0 0;border:none;border-radius:.5rem;place-items:center;transition:all .2s;display:grid}.delete-btn:hover{color:#b91c1c;background:#fef2f2}.submit-btn{justify-content:center;align-items:center;gap:.375rem;display:flex}@media (width<=768px){.header{padding:1rem}.hero{padding:2rem 1rem 1.5rem}.hero h1{font-size:2.2rem}.stats-grid{grid-template-columns:repeat(3,1fr);gap:.5rem}.stat-card{padding:.75rem}.stat-value{font-size:1.25rem}.stat-label{font-size:.7rem}.course-grid{grid-template-columns:1fr}.filter-bar{flex-flow:wrap}.search-wrap{flex:100%}.filter-bar select{flex:calc(33.333% - .5rem);padding:.625rem .5rem;font-size:.75rem}.form-row,.bar-grid{grid-template-columns:1fr}.mini-metrics{grid-template-columns:1fr 1fr;gap:.5rem}.sheet{width:100vw;padding:1rem}.sheet-header h2{padding-right:2rem;font-size:1.5rem}.admin-grid{grid-template-columns:1fr}.metrics{gap:.25rem}.metric{padding:.5rem .25rem}.metric .val{font-size:.75rem}}@media (width<=480px){.brand-text{font-size:1rem}.brand-icon{width:2rem;height:2rem}.auth-btn{padding:.5rem 1rem;font-size:.8rem}.header{padding:.75rem 1rem}}.course-page-layout{grid-template-columns:1fr;align-items:start;gap:2rem;max-width:1200px;margin:0 auto;padding:2rem 1.5rem;display:grid}@media (width>=1000px){.course-page-layout{grid-template-columns:1fr 320px}}.course-page-main{background:var(--card);border-radius:1rem;min-height:100vh;padding:2rem 1.5rem;box-shadow:0 4px 20px #00000008}.course-page-sidebar{flex-direction:column;align-self:start;gap:1rem;display:flex;position:sticky;top:6rem}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.skeleton-card{background:var(--card);border:1px solid var(--border);border-radius:.75rem;flex-direction:column;padding:1.5rem;display:flex}.skeleton-line{background:#e2e8f0 linear-gradient(90deg,#f1f5f9 0,#e2e8f0 40px,#f1f5f9 80px) 0 0/1000px 100%;border-radius:.25rem;animation:2s linear infinite shimmer}.skeleton-page-header{border-bottom:1px solid var(--border);background:#fff;padding:2.5rem 5% 3.5rem}.skeleton-page-content{grid-template-columns:2fr 1fr;align-items:start;gap:2rem;max-width:1400px;margin:0 auto;padding:2rem 5%;display:grid}@media (width<=900px){.skeleton-page-content{grid-template-columns:1fr}}
