.app{flex-direction:column;min-height:100dvh;display:flex;overflow-x:clip}.app-main{width:min(100% - 2 * var(--s-6), 1200px);padding:var(--s-6) 0 var(--s-9);flex:1;margin:0 auto}.appbar{z-index:4;align-items:center;gap:var(--s-5);height:64px;padding:0 var(--s-6);background:color-mix(in oklab, var(--bg) 92%, transparent);-webkit-backdrop-filter:saturate(1.2)blur(10px);backdrop-filter:saturate(1.2)blur(10px);border-bottom:1px solid var(--border);grid-template-columns:1fr minmax(0,560px) 1fr;display:grid;position:sticky;top:0}.appbar .logo{justify-self:start}.searchbox{align-items:center;gap:var(--s-3);height:var(--touch);width:100%;padding:0 var(--s-2) 0 var(--s-4);border:1px solid var(--border-strong);border-radius:var(--r-pill);background:var(--surface);color:var(--text-muted);font:inherit;font-size:var(--fs-sm);cursor:pointer;text-align:left;transition:border-color var(--t-fast);display:flex}.searchbox .i{width:18px;height:18px}.searchbox-text{white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}.searchbox kbd,.palette kbd{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--text-subtle);border:1px solid var(--border-strong);border-radius:var(--r-sm);padding:2px 8px}.avatar{border:1px solid var(--border-strong);background:var(--surface-high);width:40px;height:40px;color:var(--text);transition:border-color var(--t-fast);border-radius:50%;justify-self:end;place-items:center;font-weight:700;text-decoration:none;display:grid}.avatar .i{width:18px;height:18px}.avatar-lg{width:64px;height:64px;font-size:var(--fs-xl)}.palette{width:min(100% - 2 * var(--s-4), 640px);border:1px solid var(--border-strong);border-radius:var(--r-lg);background:var(--surface);max-height:min(70dvh,560px);color:var(--text);flex-direction:column;margin:12vh auto auto;padding:0;display:none;overflow:hidden}.palette[open]{animation:pop var(--t-base) var(--ease);display:flex}@keyframes pop{0%{opacity:0;transform:translateY(-6px)scale(.99)}to{opacity:1;transform:none}}.palette::backdrop{background:color-mix(in oklab, var(--bg) 70%, transparent);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.palette-input{align-items:center;gap:var(--s-3);padding:var(--s-3) var(--s-4);border-bottom:1px solid var(--border);display:flex}.palette-input .i{width:20px;height:20px;color:var(--text-muted)}.palette-input input{min-width:0;height:40px;color:var(--text);font:inherit;font-size:var(--fs-lg);background:0 0;border:0;outline:none;flex:1}.palette-input input::-webkit-search-cancel-button{display:none}.palette-list{padding:var(--s-2);margin:0;list-style:none;overflow-y:auto}.palette-list [role=option]{column-gap:var(--s-3);padding:var(--s-2) var(--s-3);border-radius:var(--r-md);cursor:pointer;grid-template-columns:76px 1fr;display:grid}.palette-list .is-active{background:var(--surface-high)}.palette-kind{font-size:var(--fs-xs);color:var(--text-subtle);grid-row:span 2;padding-top:3px}.palette-title{font-weight:600}.palette-sub{font-size:var(--fs-sm);color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.palette-empty{color:var(--text-muted);padding:var(--s-5) var(--s-3);cursor:default}.today{gap:var(--s-5);margin-bottom:var(--s-8);grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);display:grid}.today-skeleton{border-radius:var(--r-lg);background:var(--surface);min-height:220px}.today-next,.today-first,.today-week{border:1px solid var(--border);border-radius:var(--r-lg);padding:var(--s-6);background:var(--surface)}.today-next{gap:var(--s-2);color:var(--text);transition:border-color var(--t-fast);text-decoration:none;display:grid;position:relative;overflow:hidden}.today-label{font-size:var(--fs-sm);color:var(--text-muted)}.today-title{letter-spacing:-.035em;text-wrap:balance;margin:0;font-size:clamp(1.75rem,1.4rem + 1.2vw,2.5rem);font-weight:700;line-height:1.02}.today-meta{color:var(--text-muted);margin:0}.today-foot{margin-top:var(--s-5);justify-content:space-between;align-items:center;gap:var(--s-4);flex-wrap:wrap;display:flex}.today-stop{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--text-subtle);font-variant-numeric:tabular-nums}.today-first .today-meta{margin:var(--s-2) 0 var(--s-5);max-width:46ch}.today-picks{gap:var(--s-3);flex-wrap:wrap;display:flex}.today-week{justify-content:space-between;gap:var(--s-4);flex-direction:column;display:flex}.week-head{justify-content:space-between;gap:var(--s-3);font-size:var(--fs-sm);color:var(--text-muted);display:flex}.week-goal{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--text)}.week-days{gap:var(--s-2);grid-template-columns:repeat(7,1fr);margin:0;padding:0;list-style:none;display:grid}.week-days li{gap:var(--s-2);font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--text-subtle);justify-items:center;display:grid}.week-days i{border-radius:var(--r-sm);background:var(--surface-high);width:100%;height:40px}.week-days li.on i{background:var(--accent)}.week-days li.is-today{color:var(--text)}.week-days li.is-today i{box-shadow:inset 0 0 0 1px var(--text-muted)}.week-streak{font-size:var(--fs-sm);color:var(--text);margin:0}.catalog-head{justify-content:space-between;align-items:end;gap:var(--s-4);margin-bottom:var(--s-5);flex-wrap:wrap;display:flex}.catalog-title{letter-spacing:-.04em;margin:0;font-size:clamp(2rem,1.5rem + 2vw,3.25rem);font-weight:700;line-height:1}.catalog-tools{align-items:center;gap:var(--s-3);flex-wrap:wrap;display:flex}fieldset.chips,fieldset.seg{min-width:0;margin:0}fieldset.chips{border:0;padding:0}.chips{gap:var(--s-2);flex-wrap:wrap;display:flex}.chip{height:40px;padding:0 var(--s-4);border-radius:var(--r-pill);border:1px solid var(--border-strong);background:var(--surface);color:var(--text-muted);font:inherit;font-size:var(--fs-sm);cursor:pointer;transition:border-color var(--t-fast), color var(--t-fast)}.chip[aria-pressed=true]{background:var(--text);border-color:var(--text);color:var(--bg)}.select{display:inline-flex;position:relative}.select select{appearance:none;height:40px;padding:0 var(--s-6) 0 var(--s-4);border-radius:var(--r-pill);border:1px solid var(--border-strong);background:var(--surface);color:var(--text);font:inherit;font-size:var(--fs-sm);cursor:pointer}.select:after{content:"";border-right:1.5px solid var(--text-muted);border-bottom:1.5px solid var(--text-muted);pointer-events:none;width:7px;height:7px;margin-top:-6px;position:absolute;top:50%;right:16px;transform:rotate(45deg)}.seg{border:1px solid var(--border-strong);border-radius:var(--r-pill);background:var(--surface);padding:3px;display:inline-flex}.seg button{align-items:center;gap:var(--s-2);height:34px;padding:0 var(--s-4);border-radius:var(--r-pill);color:var(--text-muted);font:inherit;font-size:var(--fs-sm);cursor:pointer;background:0 0;border:0;display:inline-flex}.seg button .i{width:16px;height:16px}.seg button[aria-pressed=true]{background:var(--text);color:var(--bg)}.catalog-empty{padding:var(--s-7) 0;border-top:1px solid var(--border);gap:var(--s-4);color:var(--text-muted);justify-items:start;display:grid}.area{margin-top:var(--s-7)}.area-title{align-items:baseline;gap:var(--s-3);margin:0 0 var(--s-4);font-size:var(--fs-lg);font-weight:600;display:flex}.area-count{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--text-subtle)}.plates{border-top:1px solid var(--border);border-left:1px solid var(--border);grid-template-columns:repeat(auto-fill,minmax(300px,1fr));margin:0;padding:0;list-style:none;display:grid}.plates>li{border-right:1px solid var(--border);border-bottom:1px solid var(--border)}.plates .course{gap:var(--s-2);height:100%;padding:var(--s-5);color:var(--text);transition:background var(--t-fast);grid-template-rows:auto auto 1fr auto auto;text-decoration:none;display:grid}.course-title{font-size:var(--fs-xl);line-height:var(--lh-xl);letter-spacing:-.03em;font-weight:700}.course-level{font-size:var(--fs-sm);color:var(--text-muted)}.course-summary{color:var(--text-muted);font-size:var(--fs-sm);line-height:var(--lh-sm);max-width:40ch}.plates .mline{margin:var(--s-5) 0 var(--s-2)}.course-facts{gap:var(--s-1) var(--s-4);font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--text-subtle);font-variant-numeric:tabular-nums;flex-wrap:wrap;display:flex}.course-status.is-on{color:var(--accent-text)}.is-coming .course-title,.is-coming .course-summary{color:var(--text-muted)}.course-rows{border-top:1px solid var(--border);margin:0;padding:0;list-style:none}.course-rows>li{border-bottom:1px solid var(--border)}.course-rows .course{align-items:center;gap:var(--s-4);padding:var(--s-4) var(--s-2);color:var(--text);transition:background var(--t-fast);grid-template-columns:minmax(0,2.2fr) minmax(0,1.4fr) minmax(0,2.4fr) minmax(0,2.6fr);text-decoration:none;display:grid}.course-rows .course-title{font-size:var(--fs-lg);line-height:var(--lh-lg)}.course-rows .course-facts{justify-content:flex-end}.mline{align-items:center;display:flex}.mline-seg{flex:1;justify-content:flex-end;align-items:center;height:16px;display:flex;position:relative}.mline-seg:first-child{flex:none}.mline-seg:before{content:"";background:var(--border-strong);height:2px;margin-top:-1px;position:absolute;top:50%;left:0;right:8px}.mline-seg:first-child:before{display:none}.mline-seg.is-lit:before{background:var(--accent)}.mline-seg.is-coming:before{border-top:2px dashed var(--border-strong);background:0 0;height:0}.mline-dot{border:2px solid var(--border-strong);background:var(--bg);border-radius:50%;flex:none;width:12px;height:12px;position:relative}.mline-dot.is-done{background:var(--accent);border-color:var(--accent)}.mline-dot.is-started{border-color:var(--accent);box-shadow:0 0 0 3px var(--glow)}.mline-dot.is-coming{border:1.5px solid var(--border-strong);background:0 0;width:8px;height:8px;margin:0 2px}.mline-row .mline-dot{width:10px;height:10px}.crumbs-app{gap:var(--s-2);font-size:var(--fs-sm);color:var(--text-muted);margin-bottom:var(--s-6);display:flex}.crumbs-app a{color:inherit;text-underline-offset:3px}.coursepage-head{gap:var(--s-4);padding-bottom:var(--s-7);border-bottom:1px solid var(--border);display:grid}.coursepage-title{letter-spacing:-.045em;margin:0;font-size:clamp(2.75rem,1.6rem + 4.6vw,5.5rem);font-weight:700;line-height:.92}.coursepage-summary{font-size:var(--fs-read);line-height:var(--lh-read);color:var(--text-muted);max-width:52ch;margin:0}.coursepage-facts{gap:var(--s-6);margin:var(--s-2) 0;flex-wrap:wrap;display:flex}.coursepage-facts dt{font-size:var(--fs-xs);color:var(--text-subtle)}.coursepage-facts dd{font-variant-numeric:tabular-nums;margin:2px 0 0;font-weight:600}.course-action{align-items:center;gap:var(--s-4);flex-wrap:wrap;display:flex}.course-action-note,.course-coming{color:var(--text-muted);font-size:var(--fs-sm);margin:0}.btn-lg{min-height:52px;padding:0 var(--s-6);font-size:var(--fs-base)}.coursepage-body{gap:var(--s-8);padding-top:var(--s-7);grid-template-columns:minmax(0,1.7fr) minmax(0,1fr);display:grid}.coursepage-body h2{margin:0 0 var(--s-4);font-size:var(--fs-sm);color:var(--text-muted);font-weight:600}.coursepage-side{align-content:start;gap:var(--s-7);display:grid}.outcomes,.prereq{gap:var(--s-3);margin:0;padding:0;list-style:none;display:grid}.outcomes li{padding-left:var(--s-5);line-height:var(--lh-base);position:relative}.outcomes li:before{content:"";background:var(--text-muted);width:10px;height:2px;position:absolute;top:.6em;left:0}.side-text{margin:0}.prereq a{text-underline-offset:3px}.mmap{margin:0;padding:0;list-style:none}.mmap-module{column-gap:var(--s-4);padding-bottom:var(--s-4);grid-template-columns:32px 1fr;display:grid;position:relative}.mmap-module:not(:last-child):before{content:"";background:var(--border-strong);width:2px;position:absolute;top:32px;bottom:0;left:15px}.mmap-module.is-done:not(:last-child):before{background:var(--accent)}.mmap-module.is-coming:not(:last-child):before{border-left:2px dotted var(--border-strong);background:0 0;width:0}.mmap-dot{border:2px solid var(--border-strong);background:var(--bg);width:32px;height:32px;font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--text-muted);z-index:1;border-radius:50%;place-items:center;display:grid;position:relative}.mmap-dot .i{stroke-width:2.5px;width:14px;height:14px}.is-done>.mmap-dot{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}.is-started>.mmap-dot{border-color:var(--accent);color:var(--accent-text);box-shadow:0 0 0 5px var(--glow)}.is-coming>.mmap-dot{border-style:dotted}.mmap-head{justify-content:space-between;align-items:baseline;gap:var(--s-1) var(--s-4);min-height:32px;color:var(--text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex-wrap:wrap;width:100%;padding:4px 0;display:flex}.mmap-head.is-static{cursor:default}.mmap-title{font-size:var(--fs-lg);letter-spacing:-.015em;font-weight:600}.is-coming .mmap-title{color:var(--text-muted);font-weight:500}.mmap-meta{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--text-subtle);font-variant-numeric:tabular-nums}.mmap-lessons{margin:var(--s-2) 0 var(--s-3);border-top:1px solid var(--border);grid-column:2;padding:0;list-style:none}.mmap-lessons a{align-items:center;gap:var(--s-3);padding:var(--s-3) var(--s-2);border-bottom:1px solid var(--border);color:var(--text);grid-template-columns:14px 1fr auto;text-decoration:none;display:grid}.mmap-lesson-dot{border:2px solid var(--border-strong);border-radius:50%;width:10px;height:10px}.mmap-lessons>.is-done .mmap-lesson-dot{background:var(--accent);border-color:var(--accent)}.mmap-lessons>.is-started .mmap-lesson-dot,.mmap-lessons>.is-next .mmap-lesson-dot{border-color:var(--accent)}.mmap-lesson-meta{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--text-subtle)}.mmap-lessons>.is-next .mmap-lesson-meta{color:var(--accent-text)}.mmap-lessons>.is-done .mmap-lesson-title{color:var(--text-muted)}.profile{max-width:760px}.profile-head{align-items:center;gap:var(--s-5);padding-bottom:var(--s-6);border-bottom:1px solid var(--border);grid-template-columns:auto 1fr auto;display:grid}.profile-title{font-size:var(--fs-display);line-height:var(--lh-display);letter-spacing:-.04em;margin:0}.profile-note{margin:var(--s-1) 0 0;color:var(--text-muted);font-size:var(--fs-sm);max-width:52ch}.profile-saved{font-size:var(--fs-sm);color:var(--text-muted);text-align:right;min-width:60px}.profile-block{padding:var(--s-6) 0;border-bottom:1px solid var(--border)}.profile-block>h2{margin:0 0 var(--s-4);font-size:var(--fs-sm);color:var(--text-muted);font-weight:600}.numbers{grid-template-columns:repeat(4,1fr);margin:0;display:grid}.numbers div+div{border-left:1px solid var(--border);padding-left:var(--s-4)}.numbers dt{font-size:var(--fs-xs);color:var(--text-subtle)}.numbers dd{margin:var(--s-1) 0 0;font-size:var(--fs-xl);letter-spacing:-.02em;font-variant-numeric:tabular-nums;font-weight:700}.settings{gap:var(--s-6);display:grid}.setting{gap:var(--s-2);border:0;justify-items:start;margin:0;padding:0;display:grid}.setting>label,.setting>legend{margin-bottom:var(--s-2);padding:0;font-weight:600}.setting-note{font-size:var(--fs-sm);color:var(--text-muted);max-width:56ch;margin:0}.field-input{width:min(100%,360px);height:var(--touch);padding:0 var(--s-4);border-radius:var(--r-md);border:1px solid var(--border-input);background:var(--surface);color:var(--text);font:inherit}.field-input:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.seg-days button{width:40px;font-family:var(--font-mono);justify-content:center;padding:0}.data-actions{gap:var(--s-3);flex-wrap:wrap;display:flex}.btn-quiet{color:var(--text-muted)}.btn-danger{border-color:var(--attention);color:var(--attention)}.confirm{max-width:420px;padding:var(--s-6);border:1px solid var(--border-strong);border-radius:var(--r-lg);background:var(--surface);color:var(--text)}.confirm::backdrop{background:color-mix(in oklab, var(--bg) 70%, transparent)}.confirm p{margin:0 0 var(--s-5);line-height:var(--lh-base)}.confirm-actions{justify-content:flex-end;gap:var(--s-3);display:flex}.app-foot{justify-content:space-between;gap:var(--s-3);padding:var(--s-5) var(--s-6);border-top:1px solid var(--border);font-size:var(--fs-xs);color:var(--text-subtle);flex-wrap:wrap;display:flex}@media (hover:hover){.searchbox:hover,.avatar:hover,.today-next:hover,.chip:hover{border-color:var(--text-muted)}.chip[aria-pressed=true]:hover{border-color:var(--text)}.plates .course:hover,.course-rows .course:hover{background:var(--surface)}.plates .course:hover .course-title,.course-rows .course:hover .course-title,.mmap-head:not(.is-static):hover .mmap-title,.mmap-lessons a:hover .mmap-lesson-title{color:var(--accent-text)}.palette-list [role=option]:hover{background:var(--surface-high)}}@media (max-width:900px){.app-main{width:min(100% - 2 * var(--s-4), 1200px);padding-top:var(--s-5)}.appbar{gap:var(--s-3);padding:0 var(--s-4);grid-template-columns:auto 1fr auto;height:60px}.searchbox kbd{display:none}.today{margin-bottom:var(--s-7);grid-template-columns:1fr}.today-next,.today-first,.today-week{padding:var(--s-5)}.catalog-tools{width:100%}.chips{scrollbar-width:none;flex-wrap:nowrap;width:100%;overflow-x:auto}.chip{flex:none}.seg button span{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}.course-rows .course{gap:var(--s-2);padding:var(--s-4) 0;grid-template-columns:1fr}.course-rows .course-facts{justify-content:flex-start}.coursepage-body{gap:var(--s-7);grid-template-columns:1fr}.numbers{gap:var(--s-4) 0;grid-template-columns:1fr 1fr}.numbers div:nth-child(3){border-left:0;padding-left:0}.profile-head{grid-template-columns:auto 1fr}.profile-saved{text-align:left;grid-column:1/-1}}@media (max-width:520px){.searchbox-text{font-size:var(--fs-sm)}.plates{grid-template-columns:1fr}}a.btn{text-decoration:none}.searchbox{min-width:0}.stop-track{margin-top:var(--s-4);align-items:center;display:flex}.stop-track .st{flex:1;justify-content:flex-end;align-items:center;height:14px;display:flex;position:relative}.stop-track .st:first-child{flex:none}.stop-track .st:before{content:"";background:var(--border-strong);height:2px;margin-top:-1px;position:absolute;top:50%;left:0;right:7px}.stop-track .st:first-child:before{display:none}.stop-track .st.is-passed:before,.stop-track .st.is-current:before{background:var(--accent)}.stop-track .st:after{content:"";border:2px solid var(--border-strong);background:var(--surface);box-sizing:border-box;border-radius:50%;width:14px;height:14px;position:relative}.stop-track .st.is-passed:after{background:var(--accent);border-color:var(--accent)}.stop-track .st.is-current:after{border-color:var(--accent);box-shadow:0 0 0 4px var(--glow)}.catalog-note{margin:0 0 var(--s-4);font-size:var(--fs-sm);color:var(--text-muted);max-width:70ch}.plates.cols-1{grid-template-columns:minmax(0,1fr);max-width:400px}.plates.cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.plates.cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.plates.cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.mline-seg.is-coming:before{border-top:2px dotted var(--border-strong)}.coursepage-side{align-self:start;position:sticky;top:96px}@media (max-width:1100px){.plates.cols-3,.plates.cols-4{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:900px){.coursepage-side{position:static}.coursepage-facts{gap:var(--s-4);grid-template-columns:1fr 1fr;display:grid}.mmap-head{flex-direction:column;align-items:flex-start}.chips{padding-right:var(--s-6);-webkit-mask-image:linear-gradient(90deg,#000 85%,#0000);mask-image:linear-gradient(90deg,#000 85%,#0000)}}@media (max-width:600px){.plates.cols-2,.plates.cols-3,.plates.cols-4{grid-template-columns:minmax(0,1fr);max-width:none}}.plates .course-status{flex-basis:100%}.searchbox-short{display:none}@media (max-width:520px){.searchbox-long{display:none}.searchbox-short{display:block}}
