*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--bg:#0f0f13;--bg2:#16161d;--bg3:#1e1e28;--border:#ffffff14;--border2:#ffffff24;--text:#f0eff8;--text2:#9896b0;--text3:#5e5d72;--green:#34d399;--green-bg:#34d3991a;--amber:#fbbf24;--amber-bg:#fbbf241a;--red:#f87171;--red-bg:#f871711a;--accent:#7c6fdf;--accent-bg:#7c6fdf26;--radius:12px;--radius-sm:8px}body{background:var(--bg);color:var(--text);min-height:100vh;font-family:Inter,-apple-system,sans-serif}input,button{font-family:inherit;font-size:14px}input{background:var(--bg3);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);outline:none;width:100%;padding:9px 12px;transition:border-color .15s}input:focus{border-color:var(--accent)}input::placeholder{color:var(--text3)}.auth-page{justify-content:center;align-items:center;min-height:100vh;padding:1.5rem;display:flex}.auth-card{background:var(--bg2);border:1px solid var(--border);border-radius:16px;width:100%;max-width:400px;padding:2.5rem}.auth-logo{margin-bottom:.5rem;font-size:2rem}.auth-card h1{margin-bottom:4px;font-size:24px;font-weight:600}.auth-sub{color:var(--text2);margin-bottom:1.75rem;font-size:14px}.auth-card form{flex-direction:column;gap:12px;display:flex}.auth-card button[type=submit]{background:var(--accent);color:#fff;border-radius:var(--radius-sm);cursor:pointer;border:none;margin-top:4px;padding:10px;font-weight:500;transition:opacity .15s}.auth-card button[type=submit]:hover{opacity:.88}.auth-card button:disabled{opacity:.5;cursor:not-allowed}.auth-switch{color:var(--text2);text-align:center;margin-top:1.25rem;font-size:13px}.auth-switch a{color:var(--accent);text-decoration:none}.error{color:var(--red);font-size:13px}.dashboard{min-height:100vh}.dash-header{background:var(--bg2);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:1rem 1.5rem;display:flex}.dash-logo{font-size:16px;font-weight:600}.dash-user{color:var(--text2);align-items:center;gap:12px;font-size:14px;display:flex}.dash-main{max-width:1100px;margin:0 auto;padding:2rem 1.5rem}.dash-title-row{justify-content:space-between;align-items:center;margin-bottom:1.5rem;display:flex}.dash-title-row h2{font-size:20px;font-weight:600}.alert-banner{background:var(--amber-bg);border-radius:var(--radius-sm);color:var(--amber);border:1px solid #fbbf2440;margin-bottom:1.5rem;padding:10px 16px;font-size:14px}.btn-primary{background:var(--accent);color:#fff;border-radius:var(--radius-sm);cursor:pointer;border:none;padding:9px 18px;font-size:14px;font-weight:500;transition:opacity .15s}.btn-primary:hover{opacity:.88}.btn-primary:disabled{opacity:.5;cursor:not-allowed}.btn-ghost{border:1px solid var(--border2);border-radius:var(--radius-sm);color:var(--text2);cursor:pointer;background:0 0;padding:8px 14px;font-size:13px;transition:background .15s}.btn-ghost:hover{background:var(--bg3)}.btn-icon{cursor:pointer;color:var(--text2);background:0 0;border:none;border-radius:6px;padding:4px 6px;font-size:14px;transition:background .15s}.btn-icon:hover{background:var(--bg3)}.courses-grid{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;display:grid}.course-card{background:var(--bg2);border-radius:var(--radius);border:1px solid var(--border);padding:1.25rem;transition:border-color .15s}.course-card:hover{border-color:var(--border2)}.course-card--green{border-left:3px solid var(--green)}.course-card--amber{border-left:3px solid var(--amber)}.course-card--red{border-left:3px solid var(--red)}.course-card--gray{border-left:3px solid var(--text3)}.course-card-header{justify-content:space-between;align-items:flex-start;margin-bottom:1rem;display:flex}.course-name{font-size:16px;font-weight:600}.course-semester{color:var(--text3);margin-top:2px;font-size:12px;display:block}.course-actions{gap:4px;display:flex}.course-grade-row{align-items:baseline;gap:10px;margin-bottom:10px;display:flex}.grade-big{font-size:36px;font-weight:700;line-height:1}.grade-big--green{color:var(--green)}.grade-big--amber{color:var(--amber)}.grade-big--red{color:var(--red)}.grade-big--gray{color:var(--text3)}.grade-letter{font-size:18px;font-weight:600}.grade-letter--green{color:var(--green)}.grade-letter--amber{color:var(--amber)}.grade-letter--red{color:var(--red)}.progress-track{background:var(--bg3);border-radius:99px;height:4px;margin-bottom:1rem;overflow:hidden}.progress-fill{border-radius:99px;height:100%;transition:width .4s}.progress-fill--green{background:var(--green)}.progress-fill--amber{background:var(--amber)}.progress-fill--red{background:var(--red)}.course-stats{flex-wrap:wrap;gap:16px;display:flex}.stat{flex-direction:column;gap:2px;display:flex}.stat-label{color:var(--text3);text-transform:uppercase;letter-spacing:.05em;font-size:11px}.stat-val{color:var(--text2);font-size:14px;font-weight:500}.stat-val--green{color:var(--green)}.stat-val--amber{color:var(--amber)}.stat-val--red{color:var(--red)}.empty-state{text-align:center;padding:4rem 2rem}.empty-icon{margin-bottom:1rem;font-size:3rem}.empty-state h3{margin-bottom:8px;font-size:18px}.empty-state p{color:var(--text2);margin-bottom:1.5rem;font-size:14px}.muted{color:var(--text2);font-size:14px}.loading-screen{height:100vh;color:var(--text2);justify-content:center;align-items:center;display:flex}.modal-overlay{z-index:50;background:#000000a6;justify-content:center;align-items:center;padding:1rem;display:flex;position:fixed;inset:0}.modal{background:var(--bg2);border:1px solid var(--border);border-radius:16px;flex-direction:column;width:100%;max-width:540px;max-height:90vh;display:flex}.modal-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:1.25rem 1.5rem;display:flex}.modal-header h2{font-size:17px;font-weight:600}.modal-body{flex-direction:column;gap:1.25rem;padding:1.5rem;display:flex;overflow-y:auto}.modal-footer{border-top:1px solid var(--border);justify-content:flex-end;gap:10px;padding:1rem 1.5rem;display:flex}.form-group{flex-direction:column;gap:8px;display:flex}.form-group label{color:var(--text2);font-size:13px;font-weight:500}.comp-header-row{justify-content:space-between;align-items:center;display:flex}.weight-badge{border-radius:99px;padding:3px 10px;font-size:12px;font-weight:500}.weight-badge--ok{background:var(--green-bg);color:var(--green)}.weight-badge--warn{background:var(--amber-bg);color:var(--amber)}.comp-col-labels{grid-template-columns:1fr 80px 80px 32px;gap:8px;display:grid}.comp-col-labels span{color:var(--text3);text-transform:uppercase;letter-spacing:.04em;font-size:11px}.comp-row{grid-template-columns:1fr 80px 80px 32px;align-items:center;gap:8px;margin-bottom:8px;display:grid}.comp-row input{padding:8px 10px}.btn-add-comp{border:1px dashed var(--border2);border-radius:var(--radius-sm);width:100%;color:var(--text2);cursor:pointer;background:0 0;margin-top:4px;padding:9px;font-size:13px;transition:background .15s}.btn-add-comp:hover{background:var(--bg3)}.needed-grid{border-top:1px solid var(--border);grid-template-columns:repeat(3,1fr);gap:8px;margin-top:14px;padding-top:14px;display:grid}.needed-item{flex-direction:column;gap:3px;display:flex}.needed-label{color:var(--text3);text-transform:uppercase;letter-spacing:.05em;font-size:11px}.needed-val{font-size:15px;font-weight:600}.needed-val--green{color:var(--green)}.needed-val--amber{color:var(--amber)}.needed-val--red{color:var(--red)}
