.planner-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:var(--space-3);padding:var(--space-3) var(--gutter);background:var(--surface);border-bottom:1px solid var(--border)}.planner-head h1{font-size:var(--fs-title-2)}.planner-head .meta{margin:2px 0 0;color:var(--text-dim);font-size:var(--fs-small)}.planner>.notice{margin:var(--space-3) var(--gutter) 0}.planner-body{display:flex;flex-wrap:wrap;align-items:flex-start;gap:var(--space-3);padding:var(--space-3) var(--gutter)}.catalog{flex:1 1 280px;max-width:340px;min-width:0;position:sticky;top:calc(var(--topbar-h) + var(--safe-top) + var(--space-3));max-height:calc(100dvh - var(--topbar-h) - var(--safe-top) - 2 * var(--space-3));overflow:auto;padding:var(--space-3);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-m)}.plan-main{flex:999 1 620px;min-width:0;display:grid;gap:var(--space-3)}.bar{height:6px;overflow:hidden;border-radius:var(--radius-pill);background:var(--bg-2)}.bar span{display:block;height:100%;background:var(--brand)}.done .bar span{background:var(--ok)}.tick{color:var(--ok);font-weight:700}.req-bar{padding:var(--space-2) var(--space-3);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-m)}.req-bar-row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-4)}.req-label{font-size:var(--fs-small);white-space:nowrap}.req-total{flex:1 1 200px;display:flex;align-items:center;gap:var(--space-2);font-size:var(--fs-small);white-space:nowrap;font-variant-numeric:tabular-nums}.req-total .bar{flex:1;min-width:80px;height:8px}.req-total-num.done strong{color:var(--ok)}.req-toggle{margin-left:auto}.req-details{margin-top:var(--space-3);padding-top:var(--space-3);border-top:1px solid var(--border)}.req-details .chips{margin-bottom:var(--space-3)}.rc-name{max-width:14ch;overflow:hidden;text-overflow:ellipsis}.rc-num{color:var(--text-dim);font-size:11px;font-variant-numeric:tabular-nums}.req-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:var(--space-3) var(--space-5)}.req-head{margin-bottom:3px;font-size:var(--fs-small);font-weight:500}.req-line{display:grid;grid-template-columns:10ch 1fr;align-items:center;gap:6px}.req-line+.req-line{margin-top:2px}.req-num{color:var(--text-dim);font-size:11px;white-space:nowrap;font-variant-numeric:tabular-nums}.ap-mini{display:inline-flex;flex-wrap:wrap;align-items:center;gap:var(--space-1);font-size:var(--fs-caption)}.ap-title{color:var(--text-dim);font-weight:600}.ap{padding:1px 7px;border-radius:var(--radius-pill);background:var(--bg-2);font-size:11px;white-space:nowrap;font-variant-numeric:tabular-nums}.ap-y{color:var(--text-faint)}.ap.over{background:var(--warn-soft);color:var(--warn)}#tool-next.pulse{animation:pulse 1.2s ease-out}@keyframes pulse{0%{box-shadow:0 0 0 0 var(--brand)}70%{box-shadow:0 0 0 8px transparent}to{box-shadow:none}}.sheet-count{margin-left:var(--space-1);color:var(--text-faint);font-size:var(--fs-small);font-weight:500}.menu{position:relative}.menu>summary{list-style:none}.menu>summary::-webkit-details-marker{display:none}.menu-list{position:absolute;right:0;top:calc(100% + 4px);z-index:40;display:grid;min-width:190px;padding:var(--space-1);background:var(--surface-raised);border:1px solid var(--border);border-radius:var(--radius-m);box-shadow:var(--shadow-2)}.menu-list button{min-height:var(--control-h);padding:0 var(--space-3);border:0;border-radius:var(--radius-s);background:transparent;text-align:left;cursor:pointer}.menu-list button:hover,.menu-list button:focus-visible{background:var(--bg-2)}.issues{display:grid;gap:var(--space-2);margin:0;padding:0;list-style:none}.issue{display:flex;gap:var(--space-2);width:100%;padding:var(--space-2) var(--space-3);border:0;border-radius:var(--radius-s);background:var(--bg-2);text-align:left;font-size:var(--fs-small);line-height:1.4;cursor:pointer}.issue.lv-error{background:var(--err-soft)}.issue.lv-warning,.issue.lv-conditional{background:var(--warn-soft)}.issue.lv-info{background:var(--info-soft)}.next-sub{margin:0 0 var(--space-2);font-size:var(--fs-small)}.next ul{display:grid;gap:var(--space-2);margin:0 0 var(--space-3);padding:0;list-style:none}.next li{display:flex;gap:var(--space-2);font-size:var(--fs-small)}.next small{color:var(--text-dim)}.path-result{margin-top:var(--space-3)}.path-line{display:flex;gap:var(--space-2);font-size:var(--fs-small)}.chain{margin:0;padding-left:20px;font-size:var(--fs-small)}.chain .yr{color:var(--text-faint);font-size:11px;font-variant-numeric:tabular-nums}.chain small{color:var(--text-dim)}.chart-wrap{overflow:auto;max-height:calc(100dvh - var(--topbar-h) - var(--safe-top) - 2 * var(--space-3));background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-m)}.chart{position:relative;isolation:isolate;display:grid}.colhead,.corner{position:sticky;top:0;z-index:5;padding:var(--space-2);background:var(--surface);border-bottom:1px solid var(--border);font-size:var(--fs-small);font-weight:700}.colhead{height:30px;border-left:1px solid var(--border);white-space:nowrap}.colhead.sub{top:30px;height:24px;padding:3px var(--space-2);border-left:1px dashed var(--border);color:var(--text-dim);font-size:11px;font-weight:500}.colhead.su{display:flex;justify-content:center;height:54px;overflow:hidden;padding:var(--space-2) 2px;color:var(--text-faint);font-size:10px;font-weight:600}.colhead.su span{align-self:center}.corner{left:0;z-index:6}.lane-0{--lane: var(--dept-0)}.lane-1{--lane: var(--dept-1)}.lane-2{--lane: var(--dept-2)}.lane-3{--lane: var(--dept-3)}.lane-4{--lane: var(--dept-4)}.lane-5{--lane: var(--dept-5)}.lane-6{--lane: var(--dept-6)}.lane-7{--lane: var(--dept-7)}.lane-label{position:sticky;left:0;z-index:4;padding:var(--space-3) var(--space-2);border-bottom:1px solid var(--border);border-right:1px solid var(--border);background:linear-gradient(color-mix(in srgb,var(--lane) 8%,transparent) 0 0),var(--surface);color:var(--lane);font-size:var(--fs-caption);font-weight:600}.cell{min-height:84px;border-bottom:1px solid var(--border);border-right:1px dashed var(--border);background:color-mix(in srgb,var(--lane) 7%,transparent)}.cell.su{background:repeating-linear-gradient(135deg,color-mix(in srgb,var(--lane) 7%,transparent) 0 6px,transparent 6px 12px)}.cell.year-end{border-right-style:solid}.chart.dragging .cell.drop-ok{outline:2px dashed var(--ok);outline-offset:-3px;background:var(--ok-soft)}.chart.dragging .cell.drop-ok.over{outline-color:var(--brand);background:var(--brand-soft)}.chart.dragging .cell.drop-dim{opacity:.35}.arrows{position:absolute;left:0;top:0;z-index:1;overflow:visible;pointer-events:none}.arrows g path{fill:none;stroke-width:1.6}.arrows g path.met{stroke:var(--ok)}.arrows g path.conditional{stroke:var(--warn);stroke-dasharray:1.5 4;stroke-linecap:round;stroke-width:2}.arrows g path.unmet{stroke:var(--err);stroke-dasharray:6 4}.arrows g path.blocked{stroke:var(--warn);stroke-dasharray:6 4}.ah-met{fill:var(--ok)}.ah-conditional{fill:var(--warn)}.ah-unmet{fill:var(--err)}.ah-blocked{fill:var(--warn)}.course{position:relative;z-index:2;align-self:start;min-width:0;max-width:100%;overflow:hidden;margin:5px 4px;padding:6px 7px;border:1px solid var(--ok);border-radius:var(--radius-s);background:var(--ok-soft);box-shadow:var(--shadow-1);font-size:var(--fs-small);cursor:grab}.course.su,.course.part{padding:5px 4px;font-size:11.5px}.course.su .gl,.course.su .units,.course.part .gl{display:none}.course.su .ss{align-items:flex-start}.course.st-warning,.course.st-conditional{border-color:var(--warn);background:var(--warn-soft)}.course.st-conditional{border-style:dotted}.course.st-error{border-color:var(--err);background:var(--err-soft)}.course.selected{outline:2px solid var(--brand);outline-offset:1px}.course.flash{animation:flash 1.6s ease-out}@keyframes flash{0%,40%{box-shadow:0 0 0 5px var(--warn)}to{box-shadow:var(--shadow-1)}}.course-top{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:5px;padding-right:16px}.course-top .status-icon{width:15px;height:15px;margin-top:1px;font-size:9px}.course .name{min-width:0;overflow-wrap:anywhere;hyphens:auto;font-weight:600;line-height:1.25}.course.part .name{grid-column:1 / -1}.course-remove{position:absolute;top:2px;right:1px;padding:0 5px;border:0;background:transparent;color:var(--text-faint);font-size:15px;line-height:1.2;cursor:pointer}.course-remove:hover{color:var(--err)}.course-meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-1);margin:var(--space-1) 0}.course-meta>*{max-width:100%}.course-meta .prov{overflow:hidden;text-overflow:ellipsis}.units{color:var(--text-dim);font-size:11px;font-variant-numeric:tabular-nums}.term{padding:0 6px;border:1px solid var(--brand);border-radius:5px;background:var(--brand-soft);color:var(--text);font-size:10.5px;cursor:pointer}.grade{display:grid;grid-template-columns:minmax(0,1fr);gap:2px;color:var(--text-dim);font-size:10.5px}.grade select{width:100%;min-width:0;padding:1px 4px;border:1px solid var(--border-strong);border-radius:5px;background:var(--surface);color:var(--text);font-size:12px}.ss{display:flex;align-items:center;gap:var(--space-1);min-width:0;margin-top:3px;color:var(--text-dim);font-size:11px;overflow-wrap:anywhere}.course-issues{display:grid;gap:2px;margin:5px 0 0;padding:0;list-style:none;font-size:11px;font-weight:500;line-height:1.3}.course-issues li{display:flex;gap:var(--space-1);min-width:0;overflow-wrap:anywhere}.ci-error{color:var(--err)}.ci-warning,.ci-conditional{color:var(--warn)}.requires{margin:var(--space-1) 0 0}.requires-title{display:block;color:var(--text-faint);font-size:var(--fs-caption);font-weight:600;letter-spacing:.04em;text-transform:uppercase}.requires ul{display:grid;gap:var(--space-1);margin:2px 0 0;padding:0;list-style:none;font-size:var(--fs-caption);line-height:1.3}.clause{display:grid;grid-template-columns:1.1em minmax(0,1fr);gap:var(--space-1);align-items:start}.clause-icon{font-weight:700;text-align:center}.clause.is-ok .clause-icon{color:var(--ok)}.clause.is-warn .clause-icon{color:var(--warn)}.clause.is-err .clause-icon{color:var(--err)}.clause.is-info .clause-icon{color:var(--info)}.clause-body{min-width:0;overflow-wrap:anywhere;color:var(--text)}.clause-by,.clause-note{display:block;color:var(--text-dim)}.clause-when{color:var(--text-dim)}.clause.is-warn .clause-note{color:var(--warn)}.clause.is-err .clause-note{color:var(--err)}.clause-tag{color:var(--info);font-weight:600}.combo{position:relative;margin-bottom:var(--space-3)}.combo-label{display:block;margin-bottom:var(--space-1);color:var(--text-dim);font-size:var(--fs-caption);font-weight:600}.combo-list{position:absolute;left:0;right:0;top:100%;z-index:30;max-height:320px;overflow:auto;margin:4px 0 0;padding:var(--space-1);list-style:none;background:var(--surface-raised);border:1px solid var(--border);border-radius:var(--radius-m);box-shadow:var(--shadow-2)}.combo-list li[role=option]{display:grid;gap:1px;padding:6px var(--space-2);border-radius:var(--radius-s);cursor:pointer}.combo-list li.active,.combo-list li[role=option]:hover{background:var(--bg-2)}.combo-list li[aria-selected=true] .opt-name{font-weight:600}.combo-list li[aria-selected=true] .opt-name:before{content:"✓ ";color:var(--brand)}.opt-kind{color:var(--text-faint);font-size:11px;white-space:nowrap}.src-name{margin:0 0 var(--space-2);font-weight:700}.src-note{margin:0 0 var(--space-2);padding:var(--space-2);border-radius:var(--radius-s);background:var(--warn-soft);color:var(--text);font-size:var(--fs-caption);line-height:1.4}.catalog .chips{margin-bottom:var(--space-3);gap:var(--space-1)}.grade-group{border-top:1px solid var(--border)}.grade-group>summary{display:flex;justify-content:space-between;align-items:center;min-height:var(--control-h);padding:0 2px;font-weight:700;list-style:none;cursor:pointer}.grade-group>summary::-webkit-details-marker{display:none}.grade-group>summary span:first-child:before{content:"▸ ";color:var(--text-faint)}.grade-group[open]>summary span:first-child:before{content:"▾ "}.all-grades{display:flex;justify-content:space-between;align-items:center;margin:var(--space-1) 0 6px;font-weight:700}.gcount{padding:0 7px;border-radius:var(--radius-pill);background:var(--bg-2);color:var(--text-dim);font-size:11px;font-weight:500;font-variant-numeric:tabular-nums}.tiles{display:grid;gap:var(--space-2);margin:0 0 var(--space-3);padding:0;list-style:none}.tile{padding:var(--space-2);border:1px solid var(--border);border-radius:var(--radius-s);background:var(--bg);font-size:var(--fs-small);cursor:grab}.tile:hover{border-color:var(--border-strong)}.tile.used{opacity:.75}.tile-row{display:flex;align-items:center;gap:6px}.tile-row+.tile-row{margin-top:var(--space-1)}.subj{color:var(--lane);font-size:11px;font-weight:600}.in-plan{margin-left:auto;color:var(--text-faint);font-size:11px}.tile-name{flex:1;font-weight:600;line-height:1.25}.info-btn{flex:none;width:22px;height:22px;padding:0;border:1.5px solid var(--brand);border-radius:50%;background:transparent;color:var(--brand);font-size:12px;font-weight:700;line-height:1;cursor:pointer}.info-btn[aria-expanded=true]{background:var(--brand);color:var(--on-brand)}.tile-info{display:grid;grid-template-columns:auto 1fr;gap:3px var(--space-2);margin:6px 0 2px;padding:6px var(--space-2);border:1px solid var(--border);border-radius:var(--radius-s);background:var(--surface);font-size:var(--fs-caption);cursor:auto}.tile-info dt{color:var(--text-faint);font-weight:600}.tile-info dd{margin:0;overflow-wrap:anywhere}@media(max-width:767px),(orientation:landscape)and (max-width:960px)and (pointer:coarse){.catalog{position:static;max-width:none;max-height:none}.catalog-groups{max-height:50dvh;overflow:auto}.chart-wrap{max-height:75dvh}.planner-head h1{font-size:var(--fs-title-3)}.info-btn{width:30px;height:30px}.course-remove{padding:2px 8px;font-size:18px}}.print-view{display:none}@media print{@page{size:landscape;margin:10mm}body>*:not(.print-view){display:none!important}body{font-size:10px}.print-view{display:block}.pv-head h1{margin:0 0 2px;font-size:16px}.pv-head p{margin:0 0 8px;color:var(--text-dim)}.print-view h2{margin:12px 0 4px;font-size:12px}.print-view table{width:100%;border-collapse:collapse}.print-view th,.print-view td{padding:3px 4px;border:1px solid var(--border-strong);text-align:left;vertical-align:top}.print-view thead th{background:var(--bg-2)}.print-view tbody th{width:11%;background:var(--bg)}.pv-plan{table-layout:fixed}.pv-plan td div+div{margin-top:2px;padding-top:2px;border-top:1px dotted var(--border-strong)}.print-view tr{break-inside:avoid}.print-view cite{color:var(--text-dim)}}
