*,:before,:after{box-sizing:border-box}html,body,#root{height:100%}body,h1,h2,h3,h4,p,figure{margin:0}ul{margin:0;padding:0;list-style:none}button{font:inherit;color:inherit}input,select{font:inherit}img{max-width:100%;display:block}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--page:#f2efe6;--surface:#fcfcfb;--surface-raised:#fff;--ink:#0b0b0b;--ink-secondary:#52514e;--ink-muted:#898781;--grid-line:#e1e0d9;--baseline:#c3c2b7;--border:#0b0b0b1f;--border-strong:#0b0b0b47;--accent-blue:#2a78d6;--accent-red:#d03b3b;--accent-amber:#b3790a;--accent-amber-fill:#fab219;--accent-green:#0a6e0a;--accent-violet:#4a3aa7;--font-display:"Space Grotesk", system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;--font-body:system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--radius:4px;--shadow-card:0 1px 0 var(--border), 0 8px 20px -14px #0b0b0b59}@media (prefers-reduced-motion:no-preference){:root{--transition-fast:.12s ease}}@media (prefers-reduced-motion:reduce){:root{--transition-fast:0s}*{scroll-behavior:auto!important}}body{background:var(--page);background-image:linear-gradient(var(--grid-line) 1px, transparent 1px), linear-gradient(90deg, var(--grid-line) 1px, transparent 1px);color:var(--ink);font-family:var(--font-body);-webkit-font-smoothing:antialiased;background-size:32px 32px;line-height:1.5}:focus-visible{outline:3px solid var(--accent-blue);outline-offset:2px;border-radius:2px}.mono{font-family:var(--font-mono)}.app-shell{max-width:1120px;margin:0 auto;padding:clamp(16px,4vw,40px)}.brand-row{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:clamp(24px,5vw,48px);display:flex}.brand{align-items:baseline;gap:10px;display:flex}.brand-mark{font-family:var(--font-display);letter-spacing:-.01em;font-size:1.15rem;font-weight:700}.brand-tagline{font-family:var(--font-mono);color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;font-size:.72rem}.top-nav-actions{align-items:center;gap:8px;display:flex}.btn{border-radius:var(--radius);border:1px solid var(--border-strong);background:var(--surface-raised);cursor:pointer;transition:background var(--transition-fast), transform var(--transition-fast), border-color var(--transition-fast);align-items:center;gap:8px;padding:10px 16px;font-size:.9rem;font-weight:600;display:inline-flex}.btn:hover{background:var(--page)}.btn:active{transform:translateY(1px)}.btn-primary{background:var(--ink);color:var(--surface);border-color:var(--ink)}.btn-primary:hover{background:#262624}.btn-ghost{background:0 0;border-color:#0000}.btn-ghost:hover{background:var(--surface);border-color:var(--border)}.btn-small{padding:6px 10px;font-size:.78rem}.btn:disabled{opacity:.45;cursor:not-allowed}.hero-copy{max-width:62ch;margin-bottom:clamp(24px,5vw,40px)}.hero-copy h1{font-family:var(--font-display);letter-spacing:-.01em;margin-bottom:12px;font-size:clamp(1.9rem,4vw,2.6rem);font-weight:700;line-height:1.08}.hero-copy p{color:var(--ink-secondary);font-size:1.02rem}.plan-grid{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px;display:grid}.plan-card{text-align:left;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;box-shadow:var(--shadow-card);transition:border-color var(--transition-fast), transform var(--transition-fast);padding:20px;position:relative}.plan-card:hover{border-color:var(--border-strong);transform:translateY(-2px)}.plan-card .level-tag{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);font-size:.68rem}.plan-card h3{font-family:var(--font-display);margin:8px 0 4px;font-size:1.2rem;font-weight:700;line-height:1.2}.plan-card .institution{color:var(--ink-secondary);margin-bottom:14px;font-size:.88rem}.plan-card .meta-row{font-family:var(--font-mono);color:var(--ink-muted);border-top:1px dashed var(--grid-line);gap:14px;padding-top:10px;font-size:.76rem;display:flex}.plan-card.add-program{min-height:168px;color:var(--ink-secondary);border-style:dashed;justify-content:center;align-items:center;font-weight:600;display:flex}.plan-card.add-program:hover{border-color:var(--accent-blue);color:var(--accent-blue)}.state-layout{flex-direction:column;gap:28px;display:flex}.state-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.state-header h2{font-family:var(--font-display);font-size:1.6rem;font-weight:700}.state-header .sub{color:var(--ink-secondary);margin-top:4px;font-size:.92rem}.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-card);padding:20px 22px}.panel h3{font-family:var(--font-display);margin-bottom:4px;font-size:1.02rem;font-weight:700}.panel .panel-hint{color:var(--ink-secondary);margin-bottom:16px;font-size:.84rem}.term-controls{flex-wrap:wrap;gap:20px;display:flex}.field{flex-direction:column;gap:6px;display:flex}.field label{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted);font-size:.72rem}.field select,.field input[type=number]{border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface-raised);font-family:var(--font-mono);min-width:120px;padding:9px 10px}.parity-note{color:var(--accent-amber);align-self:flex-end;padding-bottom:10px;font-size:.78rem;font-weight:600}.course-group{margin-bottom:18px}.course-group:last-child{margin-bottom:0}.course-group-label{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.05em;color:var(--ink-secondary);align-items:center;gap:8px;margin-bottom:10px;font-size:.78rem;display:flex}.chip-grid{flex-wrap:wrap;gap:8px;display:flex}.course-chip{border:1px solid var(--border-strong);background:var(--surface-raised);cursor:pointer;transition:background var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast);border-radius:999px;align-items:center;gap:6px;padding:7px 12px;font-size:.82rem;display:inline-flex}.course-chip .code{font-family:var(--font-mono);font-weight:600}.course-chip[aria-pressed=true]{background:var(--ink);border-color:var(--ink);color:var(--surface)}.course-chip.elective[aria-pressed=true]{background:var(--accent-blue);border-color:var(--accent-blue);color:#fff}.course-chip .unverified-dot{background:var(--accent-amber-fill);border:1px solid var(--accent-amber);border-radius:50%;flex-shrink:0;width:6px;height:6px}.state-footer{justify-content:space-between;align-items:center;gap:12px;display:flex}.verdict-banner{background:var(--ink);color:var(--surface);border-radius:var(--radius);margin-bottom:16px;padding:clamp(22px,4vw,34px) clamp(20px,4vw,32px)}.verdict-eyebrow{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.1em;color:#c3c2b7;margin-bottom:10px;font-size:.72rem}.verdict-headline{font-family:var(--font-display);letter-spacing:-.01em;font-size:clamp(1.7rem,4.4vw,2.75rem);font-weight:700;line-height:1.08}.verdict-headline .term-name{color:var(--accent-amber-fill)}.verdict-sub{color:#d9d8cf;margin-top:10px;font-size:.98rem}.verdict-infeasible{color:var(--accent-red)}.disclaimer{border-radius:var(--radius);color:#6b5217;background:#fdf4e3;border:1px solid #ecd8a8;align-items:flex-start;gap:10px;margin-bottom:24px;padding:12px 14px;font-size:.86rem;display:flex}.disclaimer strong{color:#4a3808}.ranked-list{flex-direction:column;gap:10px;margin-bottom:32px;display:flex}.ranked-item{background:var(--surface);border:1px solid var(--border);border-left:4px solid var(--baseline);border-radius:var(--radius);cursor:pointer;transition:border-color var(--transition-fast), background var(--transition-fast);text-align:left;align-items:flex-start;gap:14px;width:100%;padding:14px 16px;display:flex}.ranked-item:hover{background:var(--page)}.ranked-item.delay-none{border-left-color:var(--accent-green)}.ranked-item.delay-some{border-left-color:var(--accent-amber-fill)}.ranked-item.delay-severe{border-left-color:var(--accent-red)}.ranked-item.skipped{opacity:.6}.ranked-item.skipped .ranked-title{text-decoration:line-through}.ranked-rank{font-family:var(--font-mono);color:var(--ink-muted);flex-shrink:0;width:1.6em;padding-top:3px;font-size:.78rem}.ranked-body{flex:1;min-width:0}.ranked-title-row{flex-wrap:wrap;align-items:baseline;gap:10px;display:flex}.ranked-code{font-family:var(--font-mono);font-weight:600}.ranked-title{color:var(--ink-secondary);font-size:.92rem}.ranked-verdict-line{margin-top:4px;font-size:.94rem;font-weight:600;display:block}.ranked-detail{color:var(--ink-secondary);margin-top:3px;font-size:.84rem;display:block}.scarce-flag{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.05em;border:1px solid var(--accent-amber);color:var(--accent-amber);background:repeating-linear-gradient(45deg,#fdf4e3,#fdf4e3 3px,#f7e5bd 3px 6px);border-radius:3px;align-items:center;gap:4px;padding:2px 6px;font-size:.68rem;display:inline-flex}.skip-toggle-hint{font-family:var(--font-mono);color:var(--ink-muted);flex-shrink:0;align-self:center;font-size:.68rem}.graph-section h3{font-family:var(--font-display);margin-bottom:4px;font-size:1.1rem;font-weight:700}.graph-scroll{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow-card);margin-top:12px;overflow-x:auto}.graph-legend{color:var(--ink-secondary);flex-wrap:wrap;gap:14px;margin-top:12px;font-size:.78rem;display:flex}.legend-item{align-items:center;gap:6px;display:flex}.legend-swatch{border-radius:3px;flex-shrink:0;width:14px;height:14px}.course-node rect{transition:stroke var(--transition-fast), fill var(--transition-fast);cursor:pointer}.course-node text{font-family:var(--font-mono);pointer-events:none}.course-node.completed rect{fill:var(--grid-line);stroke:var(--baseline)}.course-node.completed text{fill:var(--ink-muted)}.course-node.normal rect{fill:var(--surface-raised);stroke:var(--border-strong)}.course-node.critical rect{stroke:var(--accent-red);stroke-width:3px}.course-node.scarce rect{fill:url(#scarce-hatch);stroke:var(--accent-amber)}.course-node.critical.scarce rect{fill:url(#scarce-hatch);stroke:var(--accent-red);stroke-width:4px}.course-node.dimmed rect{opacity:.28}.course-node.dimmed text{opacity:.35}.course-node.hovered rect{stroke:var(--accent-blue);stroke-width:3px}.course-node.skipped rect{stroke-dasharray:4 3;opacity:.5}.graph-edge{stroke:var(--baseline);stroke-width:1.4px;fill:none}.graph-edge.critical{stroke:var(--accent-red);stroke-width:2.4px}.graph-edge.dimmed{opacity:.15}.column-label{font-family:var(--font-mono);fill:var(--ink-muted);text-transform:uppercase;letter-spacing:.05em;font-size:.7rem}.provenance-footer{border-top:1px dashed var(--grid-line);color:var(--ink-muted);flex-direction:column;gap:4px;margin-top:40px;padding-top:18px;font-size:.8rem;display:flex}.provenance-footer a{color:var(--accent-blue)}.unverified-badge{font-family:var(--font-mono);text-transform:uppercase;color:var(--accent-amber);border:1px solid var(--accent-amber);background:#fdf4e3;border-radius:3px;align-items:center;gap:4px;padding:1px 6px;font-size:.62rem;display:inline-flex}.modal-backdrop{z-index:20;background:#0b0b0b80;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.modal-panel{background:var(--surface-raised);border-radius:var(--radius);width:100%;max-width:640px;max-height:88vh;padding:24px;overflow-y:auto}.modal-panel h2{font-family:var(--font-display);margin-bottom:8px;font-size:1.3rem}.modal-panel p{color:var(--ink-secondary);margin-bottom:12px;font-size:.88rem}.modal-panel textarea{width:100%;min-height:220px;font-family:var(--font-mono);border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--page);resize:vertical;padding:12px;font-size:.8rem}.modal-errors{border-radius:var(--radius);color:#7a2320;background:#fdeceb;border:1px solid #f3b6b2;margin-top:10px;padding:10px 12px;font-size:.82rem}.modal-errors ul{margin-top:6px;padding-left:18px;list-style:outside}.modal-actions{justify-content:flex-end;gap:10px;margin-top:16px;display:flex}@media (width<=560px){.term-controls{flex-direction:column}.parity-note{align-self:flex-start;padding-bottom:0}.ranked-item{flex-direction:column}.skip-toggle-hint{align-self:flex-start}}
