:root{--font: "Plus Jakarta Sans", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--bg: #f6f7f9;--surface: #ffffff;--surface-2: #f1f3f6;--surface-3: #e6e9ef;--text: #121620;--text-2: #2c3340;--muted: #5a6273;--border: #e3e6ec;--border-strong: #cdd2db;--brand: #283593;--brand-hover: #1f2a7a;--brand-ink: #ffffff;--brand-soft: #eceefb;--focus: #3b4cc0;--accent: var(--brand);--ok: #13724a;--ok-bg: #e4f4ec;--warn: #8a5300;--warn-bg: #fdf0d6;--danger: #b42318;--danger-bg: #fdecea;--graded: #1d4ed8;--graded-bg: #e7eefe;--exam: #a3123b;--exam-bg: #fce8ee;--shadow-sm: 0 1px 2px rgb(16 24 40 / 5%);--shadow: 0 1px 2px rgb(16 24 40 / 4%), 0 2px 8px rgb(16 24 40 / 5%);--shadow-lg: 0 2px 4px rgb(16 24 40 / 4%), 0 12px 32px rgb(16 24 40 / 10%);--radius: 16px;--radius-sm: 10px;--ring: 0 0 0 3px color-mix(in oklab, var(--focus) 28%, transparent);--select-arrow: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M3 4.5l3 3 3-3' fill='none' stroke='%235a6273' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");color-scheme:light}@media(prefers-color-scheme:dark){:root{--bg: #0c0e13;--surface: #14171e;--surface-2: #1b1f28;--surface-3: #252a35;--text: #e9ecf2;--text-2: #cfd4de;--muted: #a0a8b8;--border: #262b36;--border-strong: #363c4a;--brand: #a9b3ff;--brand-hover: #c0c7ff;--brand-ink: #0d1024;--brand-soft: #1d2140;--focus: #a9b3ff;--ok: #5ad19a;--ok-bg: #11291e;--warn: #f2c25b;--warn-bg: #2f240c;--danger: #ff8c7d;--danger-bg: #36130f;--graded: #93b4ff;--graded-bg: #15203d;--exam: #ff8fac;--exam-bg: #3a1221;--shadow-sm: 0 1px 2px rgb(0 0 0 / 30%);--shadow: 0 1px 2px rgb(0 0 0 / 35%), 0 2px 8px rgb(0 0 0 / 25%);--shadow-lg: 0 2px 4px rgb(0 0 0 / 35%), 0 14px 36px rgb(0 0 0 / 45%);--select-arrow: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M3 4.5l3 3 3-3' fill='none' stroke='%23a0a8b8' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");color-scheme:dark}}:root,.accented,.course-card,.course-page,.inst-section,.inst-heading,.todo-item{--accent-ui: var(--accent);--accent-soft: color-mix(in oklab, var(--accent) 9%, var(--surface));--accent-line: color-mix(in oklab, var(--accent) 30%, var(--border));--accent-text: color-mix(in oklab, var(--accent) 55%, var(--text))}@media(prefers-color-scheme:dark){:root,.accented,.course-card,.course-page,.inst-section,.inst-heading,.todo-item{--accent-ui: color-mix(in oklab, var(--accent) 72%, white);--accent-soft: color-mix(in oklab, var(--accent) 16%, var(--surface));--accent-line: color-mix(in oklab, var(--accent) 45%, var(--border));--accent-text: color-mix(in oklab, var(--accent) 45%, var(--text))}}*{box-sizing:border-box}html{scrollbar-gutter:stable;-webkit-text-size-adjust:100%}html,body{margin:0}body{background:var(--bg);color:var(--text);font:400 16px/1.55 var(--font);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;min-height:100vh}a{color:inherit;text-decoration:none}p a:not(.btn),.small a:not(.btn),.muted a:not(.btn),td a:not(.btn),.empty a:not(.btn),.crumbs a,.link-text{color:var(--text);font-weight:600;text-decoration:underline;text-decoration-color:var(--border-strong);text-underline-offset:3px;text-decoration-thickness:1.5px}p a:not(.btn):hover,.small a:not(.btn):hover,.muted a:not(.btn):hover,td a:not(.btn):hover,.empty a:not(.btn):hover,.crumbs a:hover,.link-text:hover{text-decoration-color:currentColor}h1,h2,h3{color:var(--text);font-weight:700;letter-spacing:-.02em}h1{font-size:clamp(1.6rem,3.2vw,2.15rem);line-height:1.15;margin:.15em 0 .45em;font-weight:800;letter-spacing:-.03em}h2{font-size:1.15rem;line-height:1.3;margin:0 0 .75em}h3{font-size:1rem;margin:0}p{margin:0 0 .8em}code{font-family:var(--mono);background:var(--surface-2);border:1px solid var(--border);padding:.05em .35em;border-radius:6px;font-size:.85em}::selection{background:color-mix(in oklab,var(--brand) 25%,transparent)}:focus-visible{outline:2px solid var(--focus);outline-offset:2px;border-radius:6px}input,select,textarea,button{font:inherit;color:inherit}input,select,textarea{background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-sm);padding:.55em .8em;min-width:0;line-height:1.35;transition:border-color .12s ease,box-shadow .12s ease,background-color .12s ease}input:hover,select:hover,textarea:hover{border-color:color-mix(in oklab,var(--muted) 60%,var(--border-strong))}input:focus-visible,select:focus-visible,textarea:focus-visible{outline:none;border-color:var(--focus);box-shadow:var(--ring)}input::placeholder,textarea::placeholder{color:color-mix(in oklab,var(--muted) 85%,var(--surface))}input:disabled,select:disabled,textarea:disabled{background:var(--surface-2);color:var(--muted);cursor:not-allowed}select{-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:var(--select-arrow);background-repeat:no-repeat;background-position:right .7em center;background-size:12px;padding-right:2.1em;cursor:pointer}textarea{width:100%;resize:vertical}input[type=checkbox],input[type=radio]{accent-color:var(--brand);width:1.05em;height:1.05em}input[type=color]{padding:.2rem;height:2.5rem;width:3.5rem;cursor:pointer}input[type=search]{padding-left:2.2em;background:var(--surface) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Ccircle cx='7' cy='7' r='4.5' fill='none' stroke='%238a92a0' stroke-width='1.6'/%3E%3Cpath d='M10.5 10.5l3 3' stroke='%238a92a0' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E") no-repeat .75em center}.field{display:grid;gap:.35rem;font-size:.92rem;align-content:start}.field>span{color:var(--text-2);font-weight:600;font-size:.85rem}.field>small{font-size:.8rem}.field input,.field textarea,.field select{width:100%}.field input[type=color]{width:4rem}.check{display:flex;gap:.5rem;align-items:center;font-size:.92rem}.grid.form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.1rem 1.25rem}.span2{grid-column:1 / -1}input.code{width:100%;font-size:1.8rem;font-weight:700;letter-spacing:.4em;text-indent:.4em;text-align:center;font-variant-numeric:tabular-nums;padding:.45em .5em;border-radius:14px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5em;min-height:2.5rem;padding:.5em 1.05em;border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:var(--surface);color:var(--text);cursor:pointer;font-weight:600;font-size:.93rem;line-height:1.2;white-space:nowrap;box-shadow:var(--shadow-sm);transition:background-color .12s ease,border-color .12s ease,color .12s ease,box-shadow .12s ease,transform .12s ease}.btn:hover{background:var(--surface-2);text-decoration:none}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.45;cursor:not-allowed;transform:none}.btn.primary{background:var(--brand);border-color:var(--brand);color:var(--brand-ink)}.btn.primary:hover:not(:disabled){background:var(--brand-hover);border-color:var(--brand-hover)}.btn.ghost{background:transparent;border-color:transparent;box-shadow:none;color:var(--muted)}.btn.ghost:hover{background:var(--surface-2);color:var(--text)}.btn.sm{min-height:2rem;padding:.3em .75em;font-size:.85rem;border-radius:8px}.btn.big{min-height:3.1rem;font-size:1.05rem;padding:.7em 1.6em;border-radius:12px}.btn.danger{color:var(--danger)}.btn.danger:hover{background:var(--danger-bg);border-color:color-mix(in oklab,var(--danger) 40%,var(--border))}.btn.google{width:100%}.btn .arrow{transition:transform .15s ease}.btn:hover .arrow{transform:translate(3px)}button.link{background:none;border:0;padding:.2em 0;color:var(--text);cursor:pointer;font-weight:600;text-decoration:underline;text-decoration-color:var(--border-strong);text-underline-offset:3px;text-decoration-thickness:1.5px}button.link:hover:not(:disabled){text-decoration-color:currentColor}button.link:disabled{opacity:.5;cursor:default}button.icon{display:inline-grid;place-items:center;min-width:2rem;height:2rem;background:none;border:1px solid transparent;border-radius:8px;padding:0 .4em;cursor:pointer;color:var(--muted);line-height:1;font-size:.95rem}button.icon:hover:not(:disabled){background:var(--surface);border-color:var(--border);color:var(--text)}button.icon:disabled{opacity:.3;cursor:default}button.icon.danger:hover:not(:disabled){color:var(--danger);background:var(--danger-bg);border-color:transparent}.shell{min-height:100vh;display:flex;flex-direction:column}.topbar{position:sticky;top:0;z-index:10;background:color-mix(in oklab,var(--surface) 86%,transparent);backdrop-filter:saturate(1.4) blur(12px);-webkit-backdrop-filter:saturate(1.4) blur(12px);border-bottom:1px solid var(--border)}.topbar-in{max-width:1120px;margin:0 auto;padding:0 20px;height:64px;display:flex;align-items:center;justify-content:space-between;gap:1rem}.topbar.wide .topbar-in{max-width:1320px}.brand{display:inline-flex;align-items:center;gap:.7rem;color:var(--text);min-width:0}.brand:hover{text-decoration:none}.mark{display:inline-grid;place-items:center;flex:none;border-radius:10px;background:linear-gradient(145deg,color-mix(in oklab,var(--brand) 82%,white),var(--brand));color:var(--brand-ink);font-weight:800;letter-spacing:-.02em;box-shadow:inset 0 0 0 1px #ffffff24,var(--shadow-sm)}.brand-text{display:grid;line-height:1.15}.brand-name{white-space:nowrap;font-weight:800;font-size:1rem;letter-spacing:-.02em}.brand-sub{font-size:.75rem;color:var(--muted);font-weight:500}.topnav{display:flex;align-items:center;gap:.25rem;font-size:.92rem}.topnav>a{white-space:nowrap;padding:.45rem .8rem;border-radius:999px;color:var(--muted);font-weight:600;transition:background-color .12s ease,color .12s ease}.topnav>a:hover{color:var(--text);background:var(--surface-2);text-decoration:none}.topnav>a.active{color:var(--text);background:var(--surface-2);box-shadow:inset 0 0 0 1px var(--border)}.who{display:inline-flex;align-items:center;gap:.5rem;color:var(--muted);margin-left:.6rem;min-width:0}.who-name{max-width:16ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.88rem}.avatar{display:inline-grid;place-items:center;flex:none;width:2rem;height:2rem;border-radius:50%;background:var(--brand-soft);color:var(--brand);font-weight:800;font-size:.85rem;box-shadow:inset 0 0 0 1px color-mix(in oklab,var(--brand) 20%,transparent)}@media(prefers-color-scheme:dark){.avatar{color:var(--brand)}}.page{width:100%;max-width:1120px;margin:0 auto;padding:2rem 20px 5rem;flex:1}.page.wide{max-width:1320px}.row{display:flex;align-items:center;gap:.6rem}.row.wrap,.wrap{flex-wrap:wrap}.between{justify-content:space-between}.stack{display:grid;gap:1rem}.grow{flex:1;min-width:0}.muted{color:var(--muted)}.small{font-size:.86rem}.mono{font-family:var(--mono);font-size:.88rem}.mono a:not(.btn){font-weight:500}.dim{opacity:.6}.crumbs{margin:0 0 .6rem;color:var(--muted);font-size:.88rem}.crumbs a:not(.btn){font-weight:600;text-decoration:none;color:var(--muted)}.crumbs a:not(.btn):hover{color:var(--text)}.eyebrow{margin:0;color:var(--accent-text);font-weight:700;font-size:.8rem;letter-spacing:.08em;text-transform:uppercase}.lede{color:var(--muted);font-size:1.08rem;line-height:1.6;margin:0 0 1.5rem;max-width:62ch}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.card,.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.5rem}.panel{margin:1.25rem 0}.panel>h2:first-child{margin-top:0}.panel-head{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;margin-bottom:.9rem}.panel-head h2{margin:0}.card.narrow{max-width:440px;margin:2rem auto}.error{color:var(--danger)}p.error{background:var(--danger-bg);border:1px solid color-mix(in oklab,var(--danger) 25%,transparent);padding:.65em .9em;border-radius:var(--radius-sm);margin:.8rem 0;font-size:.92rem;font-weight:500}.info{display:inline-block;background:var(--ok-bg);color:var(--ok);font-weight:500;font-size:.92rem;border:1px solid color-mix(in oklab,var(--ok) 22%,transparent);padding:.6em .9em;border-radius:var(--radius-sm);margin:.6rem 0}p.info{display:block}.empty{color:var(--muted);text-align:center;padding:2.5rem 1.5rem;margin:1rem 0;border:1.5px dashed var(--border-strong);border-radius:var(--radius);background:color-mix(in oklab,var(--surface) 55%,transparent)}.divider{display:flex;align-items:center;gap:.8rem;color:var(--muted);font-size:.75rem;font-weight:700;margin:1.5rem 0 1rem;text-transform:uppercase;letter-spacing:.1em}.divider:before,.divider:after{content:"";flex:1;height:1px;background:var(--border)}.chip{display:inline-flex;align-items:center;gap:.3em;font-size:.74rem;font-weight:700;line-height:1.3;padding:.22em .65em;border-radius:999px;background:var(--surface-2);color:var(--muted);margin:.1em .3em .1em 0;white-space:nowrap;letter-spacing:.01em;box-shadow:inset 0 0 0 1px var(--border)}.chip.completed{background:var(--ok-bg);color:var(--ok);box-shadow:inset 0 0 0 1px color-mix(in oklab,var(--ok) 22%,transparent)}.chip.started,.chip.in_progress{background:var(--warn-bg);color:var(--warn);box-shadow:inset 0 0 0 1px color-mix(in oklab,var(--warn) 22%,transparent)}.chip.mode-practice{background:transparent}.chip.mode-graded{background:var(--graded-bg);color:var(--graded);box-shadow:inset 0 0 0 1px color-mix(in oklab,var(--graded) 22%,transparent)}.chip.mode-exam{background:var(--exam-bg);color:var(--exam);box-shadow:inset 0 0 0 1px color-mix(in oklab,var(--exam) 22%,transparent)}.chip.locked{background:var(--surface-2);color:var(--muted)}.chip.status-draft{background:var(--warn-bg);color:var(--warn);box-shadow:none}.chip.status-archived{background:var(--surface-3);color:var(--muted);box-shadow:none}.chip .x{background:none;border:0;cursor:pointer;color:inherit;padding:0 0 0 .25em;font-size:1.05em;line-height:1;opacity:.7}.chip .x:hover{opacity:1;color:var(--danger)}.progressbar{position:relative;display:block;height:8px;background:var(--surface-3);border-radius:999px;overflow:hidden}.progressbar>div{position:absolute;inset:0 auto 0 0;border-radius:999px;background:var(--accent-ui);transition:width .4s ease}.progressbar>div[style*="width: 0%"]{display:none}.progressbar.mini{height:6px}.progress-row{display:flex;align-items:center;gap:.6rem;font-size:.8rem;color:var(--muted);font-weight:600;font-variant-numeric:tabular-nums}.progress-row .progressbar{flex:1}.landing{display:grid;gap:4rem}.hero{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);gap:3.5rem;align-items:center;padding:3.5rem 0 1rem}.hero h1{font-size:clamp(2.2rem,5.4vw,3.6rem);line-height:1.04;letter-spacing:-.04em;margin:.35em 0 .4em}.hero h1 em{font-style:normal;color:var(--brand)}.hero .eyebrow{color:var(--brand);display:inline-flex;align-items:center;gap:.55rem}.hero .eyebrow:before{content:"";width:22px;height:2px;border-radius:2px;background:currentColor}.hero .lede{font-size:1.15rem}.hero-cta{display:flex;align-items:center;gap:1rem 1.25rem;flex-wrap:wrap}.hero-cta .muted{margin:0}.hero-art{position:relative;min-height:430px;isolation:isolate}.hero-art:before{content:"";position:absolute;top:-6%;right:-4%;bottom:-6%;left:-4%;z-index:-1;filter:blur(24px);background:radial-gradient(60% 55% at 70% 30%,color-mix(in oklab,var(--brand) 16%,transparent),transparent 70%),radial-gradient(50% 50% at 20% 80%,color-mix(in oklab,#00857c 14%,transparent),transparent 70%)}.preview-card{position:absolute;width:min(320px,82%);padding:1.1rem 1.15rem;border-radius:var(--radius);background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-lg);display:grid;gap:.55rem;border-top:4px solid var(--accent-ui)}.preview-card:nth-child(1){top:0;right:0;transform:rotate(2deg)}.preview-card:nth-child(2){top:132px;left:0;transform:rotate(-2.5deg)}.preview-card:nth-child(3){bottom:0;right:6%;transform:rotate(1deg)}.preview-card .course-name{font-size:1.05rem}.preview-tiles{display:flex;gap:.4rem}.preview-tiles span{display:grid;place-items:center;width:2.2rem;height:2.2rem;border-radius:10px;background:var(--accent-soft);font-size:1.1rem}.features{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1.25rem}.feature{padding:1.4rem;border-radius:var(--radius);background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-sm)}.feature h3{margin:.9rem 0 .35rem;font-size:1.02rem}.feature p{margin:0;color:var(--muted);font-size:.93rem}.feature-icon{display:grid;place-items:center;width:2.6rem;height:2.6rem;border-radius:12px;background:var(--brand-soft);color:var(--brand)}.feature-icon svg{width:1.3rem;height:1.3rem}.institutions-strip{text-align:center}.institutions-strip>p{margin:0 0 1rem;font-size:.78rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}.institutions-strip ul{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;justify-content:center;gap:.6rem .75rem}.institutions-strip li{display:inline-flex;align-items:center;gap:.55rem;padding:.5rem .95rem;border-radius:999px;background:var(--surface);border:1px solid var(--border);font-weight:600;font-size:.92rem;color:var(--text-2)}.swatch{width:.7rem;height:.7rem;border-radius:50%;background:var(--accent-ui);flex:none;box-shadow:inset 0 0 0 1px #0000001a}.site-foot{border-top:1px solid var(--border);padding-top:1.5rem;display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap;color:var(--muted);font-size:.85rem}.auth{min-height:calc(100vh - 64px - 7rem);display:grid;place-items:center}.auth .card.narrow{width:100%;margin:0 auto;padding:2rem;box-shadow:var(--shadow-lg)}.auth-icon{display:grid;place-items:center;width:3rem;height:3rem;border-radius:14px;margin-bottom:1.1rem;background:var(--brand-soft);color:var(--brand)}.auth-icon svg{width:1.5rem;height:1.5rem}.auth h1{margin:0 0 .3rem;font-size:1.65rem}.auth .sub{color:var(--muted);margin:0 0 1.4rem;font-size:.95rem}.auth .sub strong{color:var(--text);font-weight:600;word-break:break-all}.auth form .btn.primary{width:100%;min-height:2.9rem;font-size:1rem}.steps{display:flex;gap:.4rem;margin-bottom:1.4rem}.steps span{flex:1;height:4px;border-radius:4px;background:var(--surface-3)}.steps span.on{background:var(--brand)}.auth-foot{margin:1.25rem auto 0;max-width:440px;text-align:center;color:var(--muted);font-size:.82rem}.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:1rem;flex-wrap:wrap;margin-bottom:1.5rem}.page-head h1{margin:.1em 0}.page-head .muted{margin:0}.page-head .eyebrow{color:var(--muted)}.section{margin-top:2.5rem}.section-head{display:flex;align-items:center;gap:.7rem;margin-bottom:1rem}.section-head h2{margin:0;font-size:1.2rem}.section-head .count{font-size:.78rem;font-weight:700;color:var(--muted);background:var(--surface-2);border-radius:999px;padding:.1em .6em;box-shadow:inset 0 0 0 1px var(--border)}.inst-badge{display:grid;place-items:center;flex:none;min-width:2.25rem;height:2.25rem;padding:0 .4rem;border-radius:10px;background:var(--accent-soft);color:var(--accent-text);font-weight:800;font-size:.78rem;letter-spacing:-.01em;box-shadow:inset 0 0 0 1px var(--accent-line);overflow:hidden}.inst-badge img{width:100%;height:100%;object-fit:contain;padding:4px;background:#fff}.todo-panel{padding:.5rem}.todo-panel .panel-head{padding:.9rem 1rem .2rem;margin-bottom:.4rem}.todo{list-style:none;margin:0;padding:0;display:grid}.todo-item+.todo-item{border-top:1px solid var(--border)}.todo-link{display:flex;align-items:center;gap:.9rem;padding:.8rem 1rem;border-radius:12px;transition:background-color .12s ease}.todo-link:hover{background:var(--surface-2);text-decoration:none}.todo-icon{display:grid;place-items:center;flex:none;width:2.6rem;height:2.6rem;border-radius:12px;background:var(--accent-soft);font-size:1.3rem;box-shadow:inset 0 0 0 1px var(--accent-line)}.todo-body{flex:1;min-width:0;display:grid;gap:.1rem}.todo-title{font-weight:700;line-height:1.3;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.todo-meta{color:var(--muted);font-size:.84rem;display:flex;align-items:center;gap:.4rem;flex-wrap:wrap}.todo-meta .chip{margin:0}.todo-due{flex:none;text-align:right;font-size:.8rem;color:var(--muted);font-weight:600}.todo-due strong{display:block;color:var(--text);font-size:.9rem}.chev{flex:none;color:var(--muted);transition:transform .15s ease,color .15s ease}.todo-link:hover .chev{transform:translate(3px);color:var(--text)}.grid.courses{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:1.1rem}.course-card{position:relative;display:flex;flex-direction:column;gap:.5rem;min-height:150px;padding:1.25rem 1.25rem 1.15rem;border-radius:var(--radius);overflow:hidden;background:linear-gradient(180deg,var(--accent-soft),var(--surface) 92px);color:var(--text);border:1px solid var(--border);box-shadow:var(--shadow);transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease}.course-card:before{content:"";position:absolute;inset:0 0 auto;height:4px;background:var(--accent-ui)}.course-card:hover{text-decoration:none;transform:translateY(-2px);box-shadow:var(--shadow-lg);border-color:var(--accent-line)}.course-top{display:flex;align-items:center;justify-content:space-between;gap:.6rem}.course-meta{font-size:.78rem;font-weight:700;color:var(--accent-text);letter-spacing:.04em;text-transform:uppercase}.course-name{font-weight:800;font-size:1.2rem;line-height:1.25;letter-spacing:-.02em}.course-desc{color:var(--muted);font-size:.88rem;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.course-foot{margin-top:auto;padding-top:.6rem;display:flex;align-items:center;gap:.75rem}.course-foot .progress-row{flex:1}.course-foot .chip{margin:0}.course-go{margin-left:auto;display:grid;place-items:center;flex:none;width:2rem;height:2rem;border-radius:50%;background:var(--surface-2);color:var(--text);transition:transform .15s ease,background-color .15s ease,color .15s ease}.course-card:hover .course-go{transform:translate(2px);background:var(--accent-ui);color:var(--surface)}.course-card.muted-card{background:var(--surface)}.course-card.muted-card:before{opacity:.45}details.section>summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:.6rem;padding:.75rem 1rem;border-radius:12px;border:1px solid var(--border);background:var(--surface);margin-bottom:1rem;box-shadow:var(--shadow-sm)}details.section>summary::-webkit-details-marker{display:none}details.section>summary:hover{background:var(--surface-2)}details.section>summary h2{margin:0;font-size:1rem}details.section>summary .chev{margin-left:auto;transform:rotate(90deg)}details.section[open]>summary .chev{transform:rotate(-90deg)}.feedback{list-style:none;margin:0;padding:0;display:grid;gap:.75rem}.feedback li{padding:1rem 1.1rem;border-radius:12px;background:var(--surface-2);border:1px solid var(--border)}.feedback-head{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}.feedback-head strong{font-weight:700}.feedback-head .chip{margin:0}.feedback p{margin:.5rem 0 0;white-space:pre-line;color:var(--text-2)}.course-hero{position:relative;overflow:hidden;margin-bottom:1rem;padding:1.6rem 1.75rem 1.5rem;border-radius:calc(var(--radius) + 4px);background:linear-gradient(135deg,var(--accent-soft) 0%,var(--surface) 70%);border:1px solid var(--accent-line);box-shadow:var(--shadow)}.course-hero:before{content:"";position:absolute;inset:0 auto 0 0;width:5px;background:var(--accent-ui)}.course-hero .crumbs{margin-bottom:1rem}.course-hero h1{margin:.2em 0 0;font-size:clamp(1.7rem,4vw,2.4rem)}.course-hero .lede{margin:.75rem 0 0;font-size:1rem}.course-hero .info{margin-top:1rem}.hero-title{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;flex-wrap:wrap}.hero-id{display:flex;align-items:center;gap:.9rem;min-width:0}.hero-id .inst-badge{min-width:3rem;height:3rem;font-size:.9rem;border-radius:12px;background:var(--surface)}.inst-logo{height:1.5em;width:auto;vertical-align:middle;margin-right:.5em}.course-progress{margin-top:1.4rem;max-width:520px;display:grid;gap:.45rem}.course-progress .label{display:flex;justify-content:space-between;font-size:.85rem;color:var(--muted);font-weight:600;font-variant-numeric:tabular-nums}.course-progress .label span:last-child{color:var(--text)}.topic{margin-top:2.25rem}.topic-head{display:flex;align-items:baseline;justify-content:space-between;gap:.5rem 1rem;flex-wrap:wrap;padding-bottom:.75rem;margin-bottom:1rem;border-bottom:1px solid var(--border)}.topic-head h2{margin:0;font-size:1.2rem;display:flex;align-items:baseline;gap:.6rem}.topic-head h2:before{content:"";width:10px;height:10px;border-radius:3px;background:var(--accent-ui);flex:none;transform:translateY(-1px)}.topic-head .muted{margin:0}.topic-desc{flex:1 0 100%;color:var(--muted);font-size:.93rem;margin:0;padding-left:calc(10px + .6rem)}.topic.locked .grid.tiles{opacity:.6}.topic.locked .topic-head h2:before{background:var(--border-strong)}.grid.tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:1rem}.tile{position:relative;display:flex;flex-direction:column;gap:.55rem;padding:1.1rem;min-height:170px;background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);transition:transform .15s ease,border-color .15s ease,box-shadow .15s ease}a.tile:hover{text-decoration:none;transform:translateY(-2px);border-color:var(--accent-line);box-shadow:var(--shadow-lg)}.tile-icon{display:grid;place-items:center;width:3rem;height:3rem;border-radius:14px;flex:none;background:var(--accent-soft);box-shadow:inset 0 0 0 1px var(--accent-line);font-size:1.6rem;line-height:1}.tile-body{display:flex;flex-direction:column;gap:.4rem;flex:1;min-width:0}.tile-name{font-weight:700;line-height:1.3;letter-spacing:-.01em}.tile-desc{color:var(--muted);font-size:.85rem;line-height:1.45;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.tile-meta{margin-top:auto;padding-top:.25rem;display:flex;align-items:center;flex-wrap:wrap;gap:.35rem .5rem}.tile-meta .chip{margin:0}.tile-date{font-size:.8rem;color:var(--muted);font-weight:600;display:inline-flex;align-items:center;gap:.3em}.tile-date svg{width:.95em;height:.95em}.tile.dim{opacity:1;background:var(--surface-2);box-shadow:none;cursor:not-allowed}.tile.dim .tile-icon{filter:grayscale(1);opacity:.6}.tile.dim .tile-name{color:var(--muted)}.tile-lock{position:absolute;top:1rem;right:1rem;color:var(--muted)}.tile-lock svg{width:1.1rem;height:1.1rem;display:block}.tile-open{position:absolute;top:1.1rem;right:1.1rem;color:var(--muted);opacity:0;transition:opacity .15s ease,transform .15s ease}a.tile:hover .tile-open{opacity:1;transform:translate(2px,-2px)}.tabs{display:flex;gap:.25rem;margin:-.5rem 0 1.75rem;overflow-x:auto;scrollbar-width:none;padding:.3rem;background:var(--surface);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow-sm);width:max-content;max-width:100%}.tabs::-webkit-scrollbar{display:none}.tabs a{padding:.5rem .95rem;border-radius:10px;color:var(--muted);white-space:nowrap;font-weight:600;font-size:.9rem;transition:background-color .12s ease,color .12s ease}.tabs a:hover{text-decoration:none;color:var(--text);background:var(--surface-2)}.tabs a.active{color:var(--brand-ink);background:var(--brand)}.admin-head{display:flex;align-items:center;justify-content:space-between;gap:.75rem 1rem;flex-wrap:wrap;margin-bottom:.75rem}.admin-head h1{margin:0}.admin-head form{display:flex;gap:.5rem;flex-wrap:wrap}.intro{color:var(--muted);font-size:.92rem;max-width:80ch;margin:0 0 1.25rem}.inst-heading{display:flex;align-items:center;gap:.6rem;margin:2rem 0 .8rem;font-size:1.05rem}.inst-heading:before{content:"";width:.75rem;height:.75rem;border-radius:4px;background:var(--accent-ui);flex:none}.table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow-sm)}.table{width:100%;border-collapse:separate;border-spacing:0;background:var(--surface);font-size:.93rem}.table-wrap>.table{border:0;border-radius:0;box-shadow:none}:not(.table-wrap):not(.scroll-x)>.table:not(.compact){border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);overflow:hidden}.table th,.table td{text-align:left;padding:.75rem 1rem;border-bottom:1px solid var(--border);vertical-align:middle}.table th{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);background:var(--surface-2);white-space:nowrap}.table tbody tr{transition:background-color .1s ease}.table tbody tr:hover{background:color-mix(in oklab,var(--surface-2) 55%,var(--surface))}.table tr:last-child td{border-bottom:0}.table td strong{font-weight:700}.table td a strong{color:var(--text)}.table td>.muted.small{margin-top:.1rem}.table input:not([type=color]){width:100%}.table.compact{margin-top:.6rem;font-size:.85rem;border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden}.table.compact td{padding:.35rem .7rem}.courses-table th:nth-child(1){width:42%}.courses-table th:nth-child(2){width:15%}.courses-table th:nth-child(3),.courses-table th:nth-child(4){width:11%}.num{text-align:right!important;font-variant-numeric:tabular-nums}.actions{text-align:right;white-space:nowrap}.actions .btn{margin-left:.25rem}td.act-icon{font-size:1.5rem;width:3rem;text-align:center!important}select.inline,input.inline{padding:.2em 1.8em .2em .5em;border-style:dashed;background-color:transparent;font-size:.82rem;border-radius:8px;min-height:0}input.inline{padding-right:.5em}.topic-block{border-top:1px solid var(--border);padding:1.1rem 0 .9rem}.topic-block .row.between{gap:.5rem}.topic-title{font-weight:700;font-size:1.02rem;border-color:transparent;background:transparent;padding:.35em .5em;flex:1;margin-left:-.5em}.topic-title:hover{border-color:var(--border-strong)}.topic-desc-input,input.topic-desc{width:100%;border-color:transparent;background:transparent;color:var(--muted);padding:.3em .5em;margin:0 0 .4rem -.5em}input.topic-desc:hover{border-color:var(--border-strong)}.act-list{list-style:none;margin:.5rem 0 0;padding:0;display:grid;gap:.4rem}.act-list li{display:flex;align-items:center;gap:.5rem;padding:.5rem .6rem;flex-wrap:wrap;background:var(--surface-2);border:1px solid var(--border);border-radius:12px}.act-list li>.grow{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap;font-weight:600;font-size:.93rem}.act-list li>.grow input.inline{width:9rem;font-weight:400}.act-list li select{font-size:.85rem;padding-top:.35em;padding-bottom:.35em;background-color:var(--surface)}.act-list li .span-row{flex-basis:100%;padding-left:2.4rem}.act-list li form.span-row{gap:.75rem}.act-list li form.span-row label{display:inline-flex;align-items:center;gap:.4rem;color:var(--muted);font-weight:600}.act-icon{font-size:1.35rem;line-height:1}.add-act{border-top:1px solid var(--border);padding-top:1.1rem;margin-top:.4rem}.add-act select[name=act]{min-width:min(22rem,100%)}.scroll-x{overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);background:var(--surface)}.scroll-x>.table{border:0}.matrix th:not(:first-child),.matrix td:not(:first-child){text-align:center;min-width:104px}.matrix th{vertical-align:bottom;text-transform:none;letter-spacing:0;font-size:.78rem;color:var(--text-2)}.matrix th .act-icon{display:block;font-size:1.3rem;margin-bottom:.25rem}.matrix th:first-child,.matrix td:first-child{position:sticky;left:0;background:var(--surface);z-index:1;min-width:200px;box-shadow:1px 0 0 var(--border)}.matrix th:first-child{background:var(--surface-2);vertical-align:bottom;text-transform:uppercase;letter-spacing:.07em;font-size:.72rem;color:var(--muted)}.matrix td.cell{font-weight:700;color:var(--muted)}.matrix .cell.completed{background:var(--ok-bg);color:var(--ok)}.matrix .cell.started,.matrix .cell.in_progress{background:var(--warn-bg);color:var(--warn)}.matrix .cell .small{font-weight:600;font-variant-numeric:tabular-nums}.dot{display:inline-block;width:.55rem;height:.55rem;border-radius:50%;background:var(--border-strong);margin-right:.5rem;vertical-align:.1em}.dot.on{background:var(--ok);box-shadow:0 0 0 3px var(--ok-bg)}.toolbar{display:flex;align-items:center;justify-content:space-between;gap:.75rem;flex-wrap:wrap;margin:1.5rem 0 .9rem}.toolbar .row{gap:.5rem}.spinner{width:28px;height:28px;margin:4rem auto;border-radius:50%;border:3px solid var(--border);border-top-color:var(--brand);animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media(max-width:900px){.hero{grid-template-columns:1fr;gap:2.5rem;padding-top:1.5rem}.hero-art{min-height:400px;max-width:460px;width:100%;margin:0 auto}.features{grid-template-columns:1fr}}@media(max-width:640px){.topbar-in{height:58px;padding:0 16px}.brand-sub,.who{display:none}.topbar:has(.topnav>a:nth-of-type(2)) .brand-text{display:none}.topic-block>.row.between{flex-wrap:wrap}.topic-title{flex:1 1 100%}.topic-block>.row.between>.row{margin-left:auto}.act-list li>.grow{flex-basis:calc(100% - 2.5rem)}.act-list li select{flex:1 1 8rem}.brand-name{font-size:.95rem}.topnav>a{padding:.4rem .65rem}.topnav .btn.ghost{padding:.3em .5em}.page{padding:1.4rem 16px 4rem}.grid.form{grid-template-columns:1fr}.card,.panel{padding:1.15rem}.landing{gap:2.75rem}.hero{padding-top:.5rem}.hero-cta .btn.big{width:100%}.hero-art{min-height:390px}.preview-card:nth-child(2){top:122px}.preview-card{width:84%}.auth{min-height:0;padding-top:.5rem}.auth .card.narrow{padding:1.5rem 1.25rem;margin-top:0}.todo-panel{padding:.25rem}.todo-link{padding:.75rem;gap:.75rem}.todo-due{display:none}.grid.courses{grid-template-columns:1fr;gap:.85rem}.course-card{min-height:0}.course-hero{padding:1.25rem 1.2rem 1.2rem 1.4rem;margin:-.4rem 0 .5rem}.hero-id .inst-badge{display:none}.topic{margin-top:1.9rem}.grid.tiles{grid-template-columns:1fr;gap:.6rem}.tile{flex-direction:row;align-items:flex-start;gap:.85rem;min-height:0;padding:.9rem .95rem}.tile-icon{width:2.75rem;height:2.75rem;font-size:1.4rem;border-radius:12px}.tile-body{gap:.3rem;padding-right:1.4rem}.tile-desc{-webkit-line-clamp:2}.tile-open{opacity:1;top:50%;transform:translateY(-50%);right:.85rem}a.tile:hover .tile-open{transform:translateY(-50%)}.tile-lock{top:50%;transform:translateY(-50%);right:.85rem}.table th,.table td{padding:.6rem .7rem}.tabs{width:auto}.act-list li .span-row{padding-left:0}}@media(max-width:380px){.topbar:has(.topnav) .brand-text{display:none}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{transition:none!important;animation-duration:.01ms!important}.course-card:hover,a.tile:hover{transform:none}}
