:root{color-scheme:light dark;--bg: #f7f7f5;--surface: #ffffff;--surface-2: #efefec;--text: #1a1a1a;--muted: #62666e;--border: #dbdbd7;--accent: #c00027;--accent-contrast: #ffffff;--accent-soft: #f9e2e7;--ok: #7a5c00;--ok-soft: #faf0d2;--warn: #8e001d;--warn-soft: #f9e0e5;--radius: 10px;--radius-sm: 7px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 24px;--font: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--shadow: 0 1px 3px rgba(20, 20, 20, .12);--focus: 2px solid #c00027}@media (prefers-color-scheme: dark){:root{--bg: #050506;--surface: #141416;--surface-2: #1d1d20;--text: #f0f0ed;--muted: #9da1a8;--border: #2b2c30;--accent: #ff6473;--accent-contrast: #0a0a0b;--accent-soft: #38121b;--ok: #f4bd47;--ok-soft: #2c2310;--warn: #ff8fa0;--warn-soft: #3a141d;--shadow: 0 1px 4px rgba(0, 0, 0, .6);--focus: 2px solid #ff6473}}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:var(--font);font-size:15px;line-height:1.45}h1,h2,h3{margin:0;font-weight:650;line-height:1.2}h1{font-size:1.45rem}h2{font-size:1.05rem}h3{font-size:.95rem}ul{list-style:none;margin:0;padding:0}button{font:inherit;color:inherit}:focus-visible{outline:var(--focus);outline-offset:1px}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.btn{border:1px solid var(--border);background:var(--surface);border-radius:var(--radius-sm);padding:6px 12px;cursor:pointer}.btn:hover:not(:disabled){background:var(--surface-2)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-contrast);font-weight:600;padding:10px 22px}.btn-primary:hover:not(:disabled){filter:brightness(1.08);background:var(--accent)}.btn-danger{color:var(--warn)}.linklike{background:none;border:none;padding:0;color:var(--accent);text-decoration:underline;cursor:pointer;font-size:.85rem}.pill,.badge{display:inline-block;font-size:.72rem;font-weight:600;border-radius:999px;padding:1px 8px;border:1px solid var(--border);white-space:nowrap}.badge-unreviewed{background:var(--warn-soft);color:var(--warn);border-color:transparent}.badge-review{background:var(--accent-soft);color:var(--accent);border-color:transparent}.badge-elective{background:var(--surface-2);color:var(--muted);border-color:transparent}.field{display:flex;flex-direction:column;gap:var(--space-1);margin:0 0 var(--space-3);flex:1}.field>span{font-size:.85rem;font-weight:600}.field input,.field select,.picker-search,.course-search input[type=search]{font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);padding:7px 10px}.field-row{display:flex;gap:var(--space-3)}.field-hint{color:var(--muted);font-size:.82rem;margin:2px 0 var(--space-3)}.loading{text-align:center;padding:var(--space-5);color:var(--muted)}.setup{max-width:760px;margin:0 auto;padding:var(--space-5) var(--space-4);display:flex;flex-direction:column;gap:var(--space-4)}.setup-header{text-align:center}.setup-sub{color:var(--muted);margin:var(--space-1) 0 0}.setup-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:var(--space-4);box-shadow:var(--shadow)}.setup-card h2{margin-bottom:var(--space-3)}.setup-actions{display:flex;flex-direction:column;align-items:center;gap:var(--space-2);padding-bottom:var(--space-5)}.setup-error{color:var(--warn);margin:0;font-weight:600}.lac-note{margin-top:var(--space-3);background:var(--ok-soft);border-radius:var(--radius-sm);padding:var(--space-2) var(--space-3);font-size:.9rem}.picker{margin-bottom:var(--space-4)}.picker-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);margin-bottom:var(--space-2)}.picker-search{flex:1;max-width:240px}.picker-empty{color:var(--muted);margin:var(--space-2) 0}.picker-list{max-height:260px;overflow-y:auto;border:1px solid var(--border);border-radius:var(--radius-sm)}.picker-row{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);cursor:pointer}.picker-row+.picker-row,.picker-list li+li .picker-row{border-top:1px solid var(--border)}.picker-row:hover{background:var(--surface-2)}.picker-row.selected{background:var(--accent-soft)}.picker-row input{accent-color:var(--accent);width:16px;height:16px}.picker-name{flex:1;display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap}.picker-credits{color:var(--muted);font-size:.82rem;white-space:nowrap}.planner{display:flex;flex-direction:column;height:100vh;height:100dvh}.planner-body{flex:1;display:flex;min-height:0;overflow-y:auto}.print-title{display:none}.topbar{display:flex;align-items:center;gap:var(--space-4);padding:var(--space-2) var(--space-4);background:var(--surface);border-bottom:1px solid var(--border);flex-wrap:wrap}.topbar-left{display:flex;align-items:baseline;gap:var(--space-2)}.topbar-catalog{color:var(--muted);font-size:.8rem;white-space:nowrap}.topbar-progress{display:flex;gap:var(--space-4);flex:1;flex-wrap:wrap;min-width:200px}.program-progress{display:grid;grid-template-columns:auto auto;grid-template-rows:auto auto;gap:0 var(--space-2);align-items:center;min-width:150px}.program-progress-name{font-size:.78rem;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px}.program-progress-count{font-size:.75rem;color:var(--muted);text-align:right;font-variant-numeric:tabular-nums}.progressbar{grid-column:1 / -1;height:7px;background:var(--surface-2);border-radius:999px;overflow:hidden;border:1px solid var(--border)}.progressbar-fill{height:100%;background:var(--accent);min-width:0;transition:width .15s ease}.progressbar-fill.done{background:var(--ok)}.topbar-total{font-size:.9rem;white-space:nowrap;font-variant-numeric:tabular-nums}.topbar-total strong{font-size:1.05rem}.prior-note{color:var(--muted);font-size:.78rem}.topbar-actions{display:flex;gap:var(--space-2);flex-wrap:wrap}.banner{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);padding:var(--space-2) var(--space-4);font-size:.88rem}.banner-info{background:var(--ok-soft);border-bottom:1px solid var(--border)}.banner-error{background:var(--warn-soft);border-bottom:1px solid var(--border)}.banner-close{background:none;border:none;font-size:1.1rem;cursor:pointer;line-height:1;padding:2px 6px}.rail{width:380px;flex-shrink:0;overflow-y:auto;border-right:1px solid var(--border);background:var(--bg);padding:var(--space-3)}.rail-program{margin-bottom:var(--space-5)}.rail-program-head{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;border-bottom:2px solid var(--border);padding-bottom:var(--space-2);margin-bottom:var(--space-3)}.rail-program-progress{margin-left:auto;color:var(--muted);font-size:.8rem;white-space:nowrap}.rail-program-credits{color:var(--muted);font-size:.8rem;margin:-6px 0 var(--space-3)}.course-search{position:sticky;top:calc(-1 * var(--space-3));background:var(--bg);padding:var(--space-2) 0 var(--space-3);z-index:5}.course-search-label{display:block;font-size:.82rem;font-weight:600;margin-bottom:var(--space-1)}.course-search input[type=search]{width:100%}.search-results{overscroll-behavior:contain;margin-top:var(--space-2);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);max-height:240px;overflow-y:auto}.search-row{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-2);border-bottom:1px solid var(--border)}.search-row:last-child{border-bottom:none}.search-row-body{display:flex;align-items:baseline;gap:var(--space-2);flex:1;min-width:0;cursor:grab;padding:2px 0;touch-action:none}.search-empty{color:var(--muted);padding:var(--space-2)}.search-hint{color:var(--muted);font-size:.78rem;margin:var(--space-1) 0 0}.group{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:var(--space-3);margin-bottom:var(--space-3)}.group-nested{background:var(--surface-2)}.group-done{border-color:var(--ok)}.group-head{display:flex;align-items:baseline;gap:var(--space-2);flex-wrap:wrap;margin-bottom:var(--space-2)}.group-rule{color:var(--muted);font-size:.8rem}.ok-text{color:var(--ok);font-weight:600}.group-credits{margin-left:auto;font-size:.8rem;color:var(--muted);white-space:nowrap}.group-note{color:var(--muted);font-size:.8rem;margin:0 0 var(--space-2);font-style:italic}.group-items,.track-chooser{display:flex;flex-direction:column;gap:var(--space-2)}.track-chooser-hint{margin:0;color:var(--warn);font-weight:600;font-size:.88rem}.track-choice{text-align:left}.track-change{margin-bottom:var(--space-2);display:inline-block}.chip{display:flex;align-items:stretch;gap:var(--space-2);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);padding:var(--space-1) var(--space-2)}.group-nested .chip{background:var(--bg)}.chip-body{display:flex;align-items:center;gap:var(--space-2);flex:1;min-width:0;cursor:grab;padding:2px 0;touch-action:none}.chip-dragging{opacity:.45}.chip-over{border-color:var(--accent);outline:2px dashed var(--accent);outline-offset:1px}.chip-inactive{opacity:.55}.chip-check{font-size:.95rem;color:var(--muted);width:1em;text-align:center}.chip-done{border-color:var(--ok)}.chip-done .chip-check{color:var(--ok);font-weight:700}.chip-done .chip-label{color:var(--text)}.chip-main{flex:1;min-width:0;display:flex;flex-direction:column}.chip-label{font-weight:600;font-size:.88rem;overflow-wrap:anywhere}.chip-sub{color:var(--muted);font-size:.78rem;overflow-wrap:anywhere}.chip-where{font-size:.72rem;background:var(--ok-soft);color:var(--ok);border-radius:999px;padding:1px 8px;white-space:nowrap;align-self:center}.text-item{font-size:.82rem;color:var(--muted);background:var(--surface-2);border-radius:var(--radius-sm);padding:var(--space-2);display:flex;gap:var(--space-2);align-items:baseline;flex-wrap:wrap}.needs-review{border-left:3px solid var(--warn)}.place-menu{position:relative;display:inline-flex;align-items:center}.place-menu-btn{border:1px solid var(--border);background:var(--surface-2);border-radius:var(--radius-sm);font-size:.72rem;padding:3px 7px;cursor:pointer;white-space:nowrap}.place-menu-popover{overscroll-behavior:contain;position:absolute;right:0;top:calc(100% + 4px);max-height:240px;overflow-y:auto;z-index:40;display:flex;flex-direction:column;min-width:150px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);box-shadow:var(--shadow)}.place-menu-popover button{background:none;border:none;border-bottom:1px solid var(--border);text-align:left;padding:var(--space-2);cursor:pointer;font-size:.85rem}.place-menu-popover button:last-child{border-bottom:none}.place-menu-popover button:hover{background:var(--surface-2)}.place-menu-popover button.danger{color:var(--warn)}.semester-grid{flex:1;display:flex;gap:var(--space-3);overflow-x:auto;padding:var(--space-3);align-items:stretch}.semester{display:flex;flex-direction:column;min-width:235px;width:235px;flex-shrink:0;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius)}.semester-over{border-color:var(--accent);outline:2px dashed var(--accent);outline-offset:2px}.semester-head{position:sticky;top:0;z-index:1;background:var(--surface);display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-2);padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--border)}.semester-term{font-size:.9rem}.semester-credits{font-size:.85rem;font-weight:700;white-space:nowrap;font-variant-numeric:tabular-nums}.load-ok{color:var(--ok)}.load-over{color:var(--warn)}.load-under{color:var(--muted);font-weight:600}.load-word{font-weight:400;font-size:.72rem}.semester-body{flex:1;display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-2);min-height:60px}.course-card{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2);background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);padding:var(--space-2);cursor:grab;touch-action:none}.course-card.selected{background:var(--accent-soft);border-color:var(--accent)}.course-card.dragging{opacity:.45}.course-card-main{flex:1 1 100%;min-width:0;display:flex;flex-direction:column}.course-code{font-weight:700;font-size:.88rem}.course-title{color:var(--muted);font-size:.78rem;white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.course-credits{font-size:.78rem;color:var(--muted);white-space:nowrap}.card-actions{display:flex;gap:2px}.card-btn{border:1px solid var(--border);background:var(--surface);border-radius:var(--radius-sm);cursor:pointer;font-size:.78rem;line-height:1;padding:3px 6px}.card-remove{font-size:.95rem}.detail{position:sticky;top:var(--space-3);align-self:flex-start;flex-shrink:0;width:320px;max-height:calc(100vh - var(--space-5));overflow-y:auto;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 6px 24px #0000002e;padding:var(--space-3);z-index:50}.detail-head{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-2);margin-bottom:var(--space-3)}.detail-title{color:var(--muted);margin:var(--space-1) 0 0;font-size:.9rem}.detail-facts{margin:0 0 var(--space-3);display:flex;flex-direction:column;gap:var(--space-1)}.detail-facts>div{display:flex;gap:var(--space-2);font-size:.88rem}.detail-facts dt{color:var(--muted);min-width:96px}.detail-facts dd{margin:0;flex:1}.detail input[type=number]{font:inherit;width:70px;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);padding:3px 6px}.detail-hint{color:var(--muted);font-size:.75rem}.detail h3{margin:var(--space-2) 0}.detail-fulfills{display:flex;flex-direction:column;gap:var(--space-2);font-size:.85rem;margin-bottom:var(--space-3)}.detail-fulfills li{border-left:3px solid var(--ok);padding-left:var(--space-2)}.detail-elective{color:var(--muted);font-size:.85rem}.drag-preview{z-index:100;pointer-events:none;display:flex;gap:var(--space-2);align-items:baseline;background:var(--surface);border:1px solid var(--accent);border-radius:var(--radius-sm);padding:var(--space-2) var(--space-3);box-shadow:0 4px 16px #00000040;font-size:.9rem}.drag-preview span{color:var(--muted);font-size:.8rem}@media (max-width: 900px){.planner-body{flex-direction:column;overflow-y:auto}.rail{width:100%;border-right:none;border-bottom:1px solid var(--border);max-height:45vh}.detail{left:var(--space-2);right:var(--space-2);width:auto;top:auto;bottom:var(--space-2);max-height:60vh}.topbar{gap:var(--space-2)}.topbar-progress{order:3;width:100%}}@media (min-width: 901px) and (max-width: 1100px){.rail{width:320px}}@media (prefers-reduced-motion: reduce){*{transition:none!important}}@media print{@page{size:letter landscape;margin:8mm}:root{--bg: #ffffff;--surface: #ffffff;--surface-2: #f1f1ee;--text: #000000;--muted: #494b4f;--border: #999999;--accent: #c00027;--accent-contrast: #ffffff;--accent-soft: #f9e2e7;--ok: #7a5c00;--ok-soft: #faf0d2;--warn: #8e001d;--warn-soft: #f9e0e5}body{background:#fff;color:#000;font-size:10px}.no-print,.rail,.detail,.banner,.place-menu,.card-actions,.card-remove{display:none!important}.planner{display:block;height:auto}.planner-body{display:block}.print-title{display:block;font-weight:700;margin-bottom:4mm}.semester-grid{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-flow:row;gap:3mm;overflow:visible;padding:0}.semester{min-width:0;width:auto;border:1px solid #999;break-inside:avoid}.semester-head{border-bottom:1px solid #999;padding:1mm 2mm}.semester-body{gap:1.5mm;padding:2mm}.course-card{padding:1mm 2mm;break-inside:avoid}.course-title{white-space:normal;overflow:visible;display:block;-webkit-line-clamp:unset}}.chip-body.chip-static{cursor:default}.card-btn,.place-menu-btn,.banner-close{min-width:24px;min-height:24px}.rail-open-items{color:var(--muted);font-size:.78rem;margin:-4px 0 var(--space-3)}.data-quality-note{color:var(--muted);font-size:.82rem;margin:var(--space-2) 0 0;line-height:1.5}.login{min-height:100vh;display:flex;align-items:center;justify-content:center;color-scheme:dark;--bg: #000000;--surface: #131315;--surface-2: #1c1c1f;--text: #f0f0ed;--muted: #8e9298;--border: #26262a;--accent: #c00027;--accent-contrast: #ffffff;--accent-soft: #38121b;--focus: 2px solid #f0f0ed;background:var(--bg);color:var(--text);font-family:var(--font)}.login-card{width:300px;display:flex;flex-direction:column;gap:var(--space-3);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:var(--space-5);box-shadow:0 8px 30px #00000073}.login-title{font-size:1.15rem;font-weight:600}.login-card input{font:inherit;color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);padding:9px 11px}.login-card .btn-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-contrast);padding:9px 0}.login-error{margin:0;color:#f0a35e;font-size:.85rem}.topbar-total strong{font-size:1.35rem;letter-spacing:-.01em}.topbar{border-bottom:2px solid var(--text)}.progressbar{background:var(--accent-soft);border-color:transparent}.chip.chip-done{background:var(--ok-soft);border-color:var(--ok)}.load-over{background:var(--warn-soft);border-radius:999px;padding:1px 8px;font-weight:700}.badge-unreviewed{background:transparent;border-color:var(--warn)}.login-card input{background:#000;border-color:#26262a}.login-error{color:#ff8fa0}.detail-title{color:var(--text);font-weight:700;font-size:.95rem}.rail-program-head{border-bottom-color:var(--text)}.print-title{border-bottom:2px solid #000000;padding-bottom:2mm}.btn-primary:hover:not(:disabled){filter:none;background:#a80021}@media (prefers-color-scheme: dark){.btn-primary:hover:not(:disabled){background:#ff7d8b}}
