*,:after,:before{box-sizing:border-box;font-family:inherit}:root{--scarlet:#c03;--scarlet-hover:#a8002a;--scarlet-subtle:#fff0f3;--sidebar-bg:#1f2128;--sidebar-border:#32363f;--sidebar-text:#f1f5f9;--sidebar-muted:#94a3b8;--sidebar-input-bg:#2a2d35;--sidebar-input-border:#3e424e;--sidebar-width:340px;--bg:#f4f6f9;--white:#fff;--border:#e2e8f0;--text:#0f172a;--muted:#64748b;--subtle:#f8fafc;--radius-sm:6px;--radius:10px;--radius-lg:14px;--shadow-sm:0 1px 2px rgba(0,0,0,.06);--shadow:0 1px 4px rgba(0,0,0,.08),0 4px 12px rgba(0,0,0,.04);--shadow-lg:0 4px 24px rgba(0,0,0,.12);--fall-accent:#d97706;--fall-bg:#fffbeb;--fall-border:#fcd34d;--fall-header:#92400e;--spring-accent:#2563eb;--spring-bg:#eff6ff;--spring-border:#93c5fd;--spring-header:#1e3a8a;--summer-accent:#059669;--summer-bg:#ecfdf5;--summer-border:#6ee7b7;--summer-header:#065f46;--winter-accent:#7c3aed;--winter-bg:#f5f3ff;--winter-border:#c4b5fd;--winter-header:#4c1d95}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,SF Pro Display,SF Pro Text,Helvetica Neue,Arial,sans-serif;background:var(--bg);color:var(--text);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}.app-shell,.sidebar{display:flex;min-height:100vh}.sidebar{width:var(--sidebar-width);min-width:var(--sidebar-width);background:var(--sidebar-bg);border-right:1px solid var(--sidebar-border);flex-direction:column;flex-shrink:0;position:-webkit-sticky;position:sticky;top:0;height:100vh;overflow-y:auto;overflow-x:hidden}.sidebar-logo{display:flex;align-items:center;gap:0;padding:24px 20px 20px;border-bottom:1px solid var(--sidebar-border);margin-bottom:4px}.logo-mark{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;background:var(--scarlet);color:#fff;font-weight:800;font-size:13px;border-radius:var(--radius-sm);letter-spacing:-.02em;flex-shrink:0}.logo-text{font-size:24px;font-weight:700;color:var(--sidebar-text);letter-spacing:-.02em;margin-left:-9.5px}.sidebar-logo-img{height:72px}.sidebar-logo-img,.topbar-logo-img{width:auto;object-fit:contain;display:block}.topbar-logo-img{height:60px}.sidebar-body{flex:1 1;padding:12px 18px 20px;overflow-y:auto;overflow-x:hidden}.sidebar-section{margin-bottom:14px}.main-panel{flex:1 1;min-width:0;display:flex;flex-direction:column}.topbar{display:flex;align-items:center;justify-content:space-between;padding:16px 28px;background:var(--white);border-bottom:1px solid var(--border);position:-webkit-sticky;position:sticky;top:0;z-index:10}.topbar-title{font-size:16px;font-weight:600;color:var(--text);letter-spacing:-.01em}.topbar-right{display:flex;align-items:center;gap:10px;margin-left:auto}.topbar-email{font-size:13px;color:var(--muted)}.topbar-btn{font-size:13px;font-weight:500;color:var(--text);background:var(--white);border:1px solid var(--border);border-radius:var(--radius-sm);padding:6px 14px;cursor:pointer;transition:background .15s,border-color .15s}.topbar-btn:hover{background:var(--subtle);border-color:#c8d0dc}.main-content{flex:1 1;padding:28px}.form{display:grid;grid-gap:14px;gap:14px}.label{font-weight:600;font-size:12px;color:var(--sidebar-muted);text-transform:uppercase;letter-spacing:.05em;display:block;margin-bottom:5px}.label-optional{font-weight:400;color:#4b5563;font-size:11px;text-transform:none;letter-spacing:0;margin-left:4px}.sidebar .input,.sidebar select{width:100%;padding:9px 12px;border:1px solid var(--sidebar-input-border);border-radius:var(--radius-sm);font-size:13px;background:var(--sidebar-input-bg);color:var(--sidebar-text);font-family:inherit;transition:border-color .15s}.sidebar .input:focus,.sidebar select:focus{outline:none;border-color:var(--scarlet)}.sidebar .input::placeholder{color:#4b5563}.input,.text-area,select{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius);font-size:14px;font-family:inherit;background:var(--white);color:var(--text);transition:border-color .15s,box-shadow .15s}.input:focus,.text-area:focus,select:focus{outline:none;border-color:var(--scarlet);box-shadow:0 0 0 3px rgba(204,0,51,.1)}.degree-filter-tabs{display:grid;grid-template-columns:1fr 1fr 1fr;grid-gap:6px;gap:6px}.degree-filter-tab{padding:8px 0;font-size:12px;font-weight:600;border-radius:var(--radius-sm);border:1px solid var(--sidebar-input-border);background:var(--sidebar-input-bg);color:var(--sidebar-muted);cursor:pointer;transition:all .15s;text-align:center}.degree-filter-tab:hover{border-color:#4b5563;color:var(--sidebar-text)}.degree-filter-tab.active{background:#1a2744;border-color:#3b82f6;color:#93c5fd}.season-toggles{display:flex;gap:8px}.season-btn{flex:1 1;padding:7px 0;font-size:12px;font-weight:600;border-radius:var(--radius-sm);border:1px solid var(--sidebar-input-border);background:var(--sidebar-input-bg);color:var(--sidebar-muted);cursor:pointer;transition:all .15s;text-align:center}.season-btn:hover{border-color:#4b5563;color:var(--sidebar-text)}.season-btn.active-fall{background:#422006;border-color:var(--fall-accent);color:#fbbf24}.season-btn.active-spring{background:#1e1b4b;border-color:var(--spring-accent);color:#93c5fd}.season-btn.active-summer{background:#022c22;border-color:var(--summer-accent);color:#6ee7b7}.season-btn.active-winter{background:#2e1065;border-color:var(--winter-accent);color:#c4b5fd}.credit-slider-row{display:flex;align-items:center;gap:10px}.credit-slider{flex:1 1;-webkit-appearance:none;height:4px;border-radius:2px;background:var(--sidebar-input-border);outline:none;cursor:pointer}.credit-slider::-webkit-slider-thumb{-webkit-appearance:none;width:16px;height:16px;border-radius:50%;background:var(--scarlet);cursor:pointer;box-shadow:0 0 0 3px rgba(204,0,51,.2)}.credit-value{font-size:13px;font-weight:700;color:var(--sidebar-text);min-width:28px;text-align:right}.primary-button{width:100%;padding:11px 16px;background:var(--scarlet);color:#fff;border:none;border-radius:var(--radius-sm);cursor:pointer;font-size:14px;font-weight:600;font-family:inherit;transition:background .15s,transform .1s;letter-spacing:-.01em}.primary-button:hover{background:var(--scarlet-hover)}.primary-button:active{transform:scale(.99)}.primary-button:disabled{opacity:.6;cursor:not-allowed}.status-msg{font-size:12px;color:var(--sidebar-muted);text-align:center;margin:0}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:360px;text-align:center;gap:12px}.empty-state-icon{font-size:40px;line-height:1}.empty-state-title{font-size:18px;font-weight:600;color:var(--text);margin:0}.empty-state-sub{font-size:14px;color:var(--muted);margin:0;max-width:280px}.plan-grid{display:grid;grid-gap:16px;gap:16px;grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}.plan-warning{grid-column:1/-1;background:#fffbeb;border:1px solid #fcd34d;border-radius:var(--radius);padding:14px 16px;color:#92400e;font-size:13px}.plan-warning ul{margin:6px 0 0 16px;padding:0}.plan-warning.danger{background:#fff1f2;border-color:#fca5a5;color:#991b1b}.plan-completion{display:flex;align-items:center;gap:10px;background:#f0fdf4;border:1px solid #86efac;border-radius:var(--radius);color:#166534}.plan-completed,.plan-completion{grid-column:1/-1;padding:14px 16px;font-size:13px}.plan-completed{background:var(--white);border:1px solid var(--border);border-radius:var(--radius)}.plan-completed-label{font-weight:600;color:var(--text);margin-bottom:10px}.plan-completed-chips{display:flex;flex-wrap:wrap;gap:6px}.plan-completed-chip{display:inline-flex;align-items:center;background:#f1f5f9;color:var(--text);border-radius:5px;padding:2px 8px;font-size:12px;font-weight:600;border:1px solid var(--border)}.plan-term{background:var(--white);border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-sm)}.plan-term-header{display:flex;justify-content:space-between;align-items:center;padding:11px 14px;font-size:13px}.plan-term-header strong{font-weight:700;font-size:13px}.plan-term-header .credits-badge{font-size:11px;font-weight:600;padding:2px 8px;border-radius:20px}.term-fall .plan-term-header{background:var(--fall-bg);color:var(--fall-header);border-bottom:1px solid var(--fall-border)}.term-fall .plan-term-header .credits-badge{background:#fef3c7;color:var(--fall-header)}.term-spring .plan-term-header{background:var(--spring-bg);color:var(--spring-header);border-bottom:1px solid var(--spring-border)}.term-spring .plan-term-header .credits-badge{background:#dbeafe;color:var(--spring-header)}.term-summer .plan-term-header{background:var(--summer-bg);color:var(--summer-header);border-bottom:1px solid var(--summer-border)}.term-summer .plan-term-header .credits-badge{background:#d1fae5;color:var(--summer-header)}.term-winter .plan-term-header{background:var(--winter-bg);color:var(--winter-header);border-bottom:1px solid var(--winter-border)}.term-winter .plan-term-header .credits-badge{background:#ede9fe;color:var(--winter-header)}.plan-course-list{display:grid;grid-gap:1px;gap:1px;background:var(--border);border-top:none}.plan-course{padding:10px 14px;background:var(--white);position:relative}.plan-course:last-child{border-radius:0 0 var(--radius-lg) var(--radius-lg)}.plan-course.elective{border-left:3px solid #f59e0b}.plan-course-header{display:flex;align-items:center;gap:6px;margin-bottom:2px}.plan-course-code{font-weight:700;font-size:13px;color:var(--text);text-decoration:none;cursor:pointer}.plan-course-code:hover{text-decoration:underline;color:var(--scarlet)}.elective-badge{font-size:10px;font-weight:700;background:#fef3c7;color:#92400e;padding:1px 6px;border-radius:4px;letter-spacing:.04em}.plan-course-meta{color:var(--muted);font-size:12px;line-height:1.4}.elective-swap{margin-top:6px}.elective-swap summary{font-size:11px;color:var(--muted);cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.elective-swap summary:hover{color:var(--text)}.elective-options{font-size:11px;color:var(--muted);margin-top:4px;line-height:1.6}.save-bar{display:flex;align-items:center;gap:14px;margin-top:28px;padding-top:20px;border-top:1px solid var(--border)}.save-button{padding:10px 24px;background:var(--scarlet);color:#fff;border:none;border-radius:var(--radius-sm);font-size:14px;font-weight:600;font-family:inherit;cursor:pointer;transition:background .15s}.save-button:hover{background:var(--scarlet-hover)}.save-hint{font-size:13px;color:var(--muted)}.save-success{font-size:13px;color:#166534;font-weight:600}.chip-input-wrapper{position:relative;display:flex;flex-wrap:wrap;align-items:center;gap:5px;padding:7px 10px;border:1px solid var(--sidebar-input-border);border-radius:var(--radius-sm);min-height:42px;width:100%;background:var(--sidebar-input-bg);cursor:text;font-size:13px;transition:border-color .15s}.chip-input-wrapper:focus-within{border-color:var(--scarlet)}.chip{display:inline-flex;align-items:center;gap:4px;background:#1e1b4b;color:#a5b4fc;border-radius:5px;padding:2px 7px;font-size:12px;font-weight:600;border:1px solid #312e81;max-width:220px}.chip,.chip-label{white-space:nowrap}.chip-label{overflow:hidden;text-overflow:ellipsis}.chip-remove{display:inline-flex;align-items:center;justify-content:center;cursor:pointer;font-size:13px;color:#818cf8;background:none;border:none;padding:0;line-height:1;opacity:.8}.chip-remove:hover{opacity:1}.chip-text-input{border:none;outline:none;font-size:13px;min-width:120px;flex:1 1;background:transparent;font-family:inherit;color:var(--sidebar-text)}.chip-text-input::placeholder{color:#4b5563}.chip-suggestions{position:absolute;top:calc(100% + 4px);left:0;right:0;background:#2a2d35;border:1px solid var(--sidebar-border);border-radius:var(--radius-sm);z-index:200;max-height:240px;overflow-y:auto;box-shadow:var(--shadow-lg)}.chip-suggestion-item{display:flex;flex-direction:column;gap:2px;padding:9px 12px;font-size:12px;cursor:pointer;transition:background .1s}.chip-suggestion-item.chip-suggestion-active,.chip-suggestion-item:hover{background:#363a45}.chip-suggestion-code{font-weight:700;color:var(--sidebar-text);white-space:normal;line-height:1.4}.chip-suggestion-title{color:var(--sidebar-muted);white-space:normal;line-height:1.3}.program-select-wrapper{position:relative}.program-select-dropdown{position:absolute;top:calc(100% + 4px);left:0;right:0;background:#1a1d2e;border:1px solid var(--sidebar-border);border-radius:var(--radius-sm);z-index:200;max-height:220px;overflow-y:auto;box-shadow:var(--shadow-lg)}.program-select-group-header{padding:8px 12px 4px;font-size:10px;font-weight:700;color:#4b5563;text-transform:uppercase;letter-spacing:.06em;border-top:1px solid var(--sidebar-border)}.program-select-group-header:first-child{border-top:none}.program-select-empty{padding:12px;color:var(--sidebar-muted);font-size:13px}.auth-shell{min-height:100vh;background:#111216;display:flex;align-items:center;justify-content:center;padding:24px}.auth-card{background:#1c1f27;border:1px solid #2d3140;border-radius:16px;padding:40px 36px 36px;width:100%;max-width:380px;box-shadow:0 8px 40px rgba(0,0,0,.5);text-align:center}.auth-logo-mark{display:inline-flex;align-items:center;justify-content:center;width:56px;height:56px;background:var(--scarlet);color:#fff;font-weight:900;font-size:20px;border-radius:14px;letter-spacing:-.03em;margin-bottom:20px}.auth-logo-img{height:130px;width:auto;object-fit:contain;display:block;margin:0 auto 20px}.auth-heading{font-size:20px;font-weight:700;color:#f1f5f9;margin:0 0 6px;letter-spacing:-.02em}.auth-sub{color:#64748b;font-size:14px;margin:0 0 28px}.auth-card .input{background:#252830;border:1px solid #3a3f4e;color:#f1f5f9;border-radius:8px;text-align:left}.auth-card .input:focus{border-color:var(--scarlet);box-shadow:0 0 0 3px rgba(204,0,51,.15)}.auth-card .input::placeholder{color:#4b5563}.auth-card .primary-button{border-radius:8px;font-size:15px;padding:12px;letter-spacing:.01em}.auth-field{text-align:left;margin-bottom:14px}.auth-field-label{display:block;font-size:13px;font-weight:600;color:#94a3b8;margin-bottom:6px}.auth-switch{margin-top:20px;font-size:13px;color:#64748b}.auth-switch-btn{background:none;border:none;color:var(--scarlet);font-weight:600;font-size:13px;cursor:pointer;padding:0;font-family:inherit}.auth-switch-btn:hover{text-decoration:underline}.auth-form .label{font-weight:600;font-size:13px;color:var(--text);text-transform:none;letter-spacing:0;margin-bottom:5px}.auth-tabs{display:flex;border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden;margin-bottom:20px}.auth-tab{flex:1 1;padding:10px;font-size:14px;font-weight:500;background:var(--subtle);border:none;cursor:pointer;color:var(--muted);font-family:inherit;transition:background .15s,color .15s}.auth-tab-active{background:var(--scarlet);color:#fff;font-weight:600}.auth-error{font-size:13px;color:#b91c1c;background:#fff1f2;border:1px solid #fca5a5;border-radius:var(--radius-sm);padding:8px 12px;margin:0}.auth-divider{display:flex;align-items:center;gap:12px;margin:18px 0;color:var(--muted);font-size:13px}.auth-divider:after,.auth-divider:before{content:"";flex:1 1;height:1px;background:var(--border)}.schedules-shell{min-height:100vh;background:var(--bg);display:flex;flex-direction:column}.schedules-topbar{display:flex;align-items:center;justify-content:space-between;padding:16px 28px;background:var(--white);border-bottom:1px solid var(--border);flex-shrink:0}.schedules-topbar-logo{display:flex;align-items:center;gap:0}.schedules-master-detail{display:flex;flex:1 1;height:calc(100vh - 57px);overflow:hidden}.schedules-list-panel{width:300px;min-width:260px;flex-shrink:0;background:var(--white);border-right:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden}.schedules-list-header{display:flex;align-items:center;gap:8px;padding:18px 16px 14px;border-bottom:1px solid var(--border);flex-shrink:0}.schedules-list{overflow-y:auto;flex:1 1}.schedule-list-item{display:flex;align-items:flex-start;gap:8px;padding:14px 16px;border-bottom:1px solid var(--border);cursor:pointer;transition:background .12s}.schedule-list-item:hover{background:var(--subtle)}.schedule-list-item.selected{background:var(--scarlet-subtle);border-left:3px solid var(--scarlet);padding-left:13px}.schedules-detail-panel{flex:1 1;display:flex;flex-direction:column;overflow:hidden;background:var(--bg)}.schedules-detail-header{padding:18px 24px 16px;background:var(--white);border-bottom:1px solid var(--border);flex-shrink:0}.schedule-card-name{font-weight:600;font-size:14px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.schedule-card-meta{font-size:11px;color:var(--muted);margin-top:2px}.muted{color:var(--muted)}.start-term-row{display:flex;align-items:center;gap:6px}.start-term-year{width:68px!important;text-align:center;padding:6px 8px!important;flex-shrink:0}.plan-editor-hint{font-size:12px;color:var(--muted);background:var(--subtle);border:1px solid var(--border);border-radius:var(--radius-sm);padding:8px 12px;margin-bottom:16px}.draggable-course{cursor:-webkit-grab;cursor:grab;transition:opacity .15s,box-shadow .15s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.draggable-course:active{cursor:-webkit-grabbing;cursor:grabbing}.drag-handle{color:var(--muted);font-size:14px;margin-right:5px;flex-shrink:0;line-height:1;opacity:.5}.draggable-course:hover .drag-handle{opacity:1}.drop-valid{outline:2px solid #16a34a;outline-offset:-2px;background:#f0fdf4}.drop-valid .plan-term-header{position:relative}.drop-invalid{outline:2px solid #dc2626;outline-offset:-2px;background:#fef2f2}.empty-term-hint{padding:16px 14px;color:var(--muted);font-size:12px;font-style:italic;text-align:center}.drag-error-toast{position:-webkit-sticky;position:sticky;top:8px;z-index:100;background:#fef2f2;border:1px solid #fca5a5;color:#dc2626;border-radius:var(--radius);padding:10px 16px;font-size:13px;font-weight:500;margin-bottom:12px;animation:toast-in .2s ease}@keyframes toast-in{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}.plan-course-prereqs{font-size:11px;color:var(--muted);margin-top:3px}.elective-swap-btn{margin-top:7px;padding:3px 9px;font-size:11px;font-weight:600;color:#b45309;background:#fef3c7;border:1px solid #fcd34d;border-radius:4px;cursor:pointer;font-family:inherit;transition:background .12s}.elective-swap-btn:hover{background:#fde68a}.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:1000;display:flex;align-items:center;justify-content:center;padding:24px;animation:overlay-in .15s ease}@keyframes overlay-in{0%{opacity:0}to{opacity:1}}.elective-modal{background:var(--white);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);width:100%;max-width:500px;max-height:72vh;display:flex;flex-direction:column;overflow:hidden;animation:modal-in .18s ease}@keyframes modal-in{0%{opacity:0;transform:scale(.97) translateY(8px)}to{opacity:1;transform:scale(1) translateY(0)}}.elective-modal-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:18px 20px 14px;border-bottom:1px solid var(--border);flex-shrink:0}.elective-modal-title{font-weight:700;font-size:15px;color:var(--text)}.elective-modal-sub{font-size:12px;color:var(--muted);margin-top:3px}.elective-modal-close{background:none;border:none;cursor:pointer;color:var(--muted);font-size:15px;padding:3px 6px;border-radius:4px;line-height:1;transition:background .12s;flex-shrink:0}.elective-modal-close:hover{background:var(--border);color:var(--text)}.elective-modal-search{padding:10px 16px;border-bottom:1px solid var(--border);flex-shrink:0}.elective-modal-search input{width:100%;padding:8px 10px;border:1px solid var(--border);border-radius:var(--radius-sm);font-size:13px;font-family:inherit;color:var(--text);background:var(--subtle);outline:none;transition:border-color .15s}.elective-modal-search input:focus{border-color:var(--scarlet);background:var(--white)}.elective-options-list{overflow-y:auto;flex:1 1}.elective-option-row{display:flex;flex-direction:column;width:100%;padding:11px 20px;border:none;border-bottom:1px solid var(--border);background:var(--white);cursor:pointer;text-align:left;font-family:inherit;transition:background .1s}.elective-option-row:last-child{border-bottom:none}.elective-option-row:hover{background:var(--scarlet-subtle)}.elective-option-code{font-weight:700;font-size:13px;color:var(--text)}.elective-option-meta{font-size:12px;color:var(--muted);margin-top:2px}@media (max-width:700px){.app-shell{flex-direction:column}.sidebar{width:100%;min-height:unset;height:auto;position:static;border-right:none;border-bottom:1px solid var(--sidebar-border)}.main-content{padding:20px 16px}.topbar{padding:12px 16px}.plan-grid{grid-template-columns:1fr}.schedules-master-detail{flex-direction:column;height:auto}.schedules-list-panel{width:100%;max-height:280px;border-right:none;border-bottom:1px solid var(--border)}.schedules-detail-panel{overflow:visible}}