@font-face{font-family:Onest Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/onest-cyrillic-ext-wght-normal-DOFToQv1.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Onest Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/onest-cyrillic-wght-normal-DayYxulF.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Onest Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/onest-math-wght-normal-Bl4ZGkZl.woff2) format("woff2-variations");unicode-range:U+0302-0303,U+0305,U+0307-0308,U+0310,U+0312,U+0315,U+031A,U+0326-0327,U+032C,U+032F-0330,U+0332-0333,U+0338,U+033A,U+0346,U+034D,U+0391-03A1,U+03A3-03A9,U+03B1-03C9,U+03D1,U+03D5-03D6,U+03F0-03F1,U+03F4-03F5,U+2016-2017,U+2034-2038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE00-1EEFF}@font-face{font-family:Onest Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/onest-symbols-wght-normal-DxQzqQfC.woff2) format("woff2-variations");unicode-range:U+0001-000C,U+000E-001F,U+007F-009F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+2800-28FF,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B00-2BFF,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F000-1F0FF,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F700-1F7FF,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB00-1FBFF}@font-face{font-family:Onest Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/onest-vietnamese-wght-normal-BBxOatbv.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Onest Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/onest-latin-ext-wght-normal-QAhDxQuo.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Onest Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/onest-latin-wght-normal-Dun_Rd-l.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{color-scheme:light;--bg: #F6F3EE;--surface: #FFFFFF;--surface-2: #EFEAE2;--surface-sunk: #F9F7F3;--line: #E3DCD0;--line-strong: #CBBFAE;--ink: #1C1A17;--ink-2: #57514A;--ink-3: #6B6359;--ink-inverse: #FFFFFF;--accent: #C8521A;--accent-btn: #BF4E18;--accent-btn-hover: #A8430F;--accent-text: #A8430F;--accent-soft: #F7E7DC;--danger: #B3261E;--danger-hover: #8F1E17;--ok-bg: #E4F0E7;--ok-fg: #1F6237;--info-bg: #E5EDF6;--info-fg: #28588A;--warn-bg: #FBEFD3;--warn-fg: #77510A;--danger-bg: #FBE5E1;--danger-fg: #A12B1E;--neutral-bg: #ECE7DF;--neutral-fg: #57514A;--video-bg: #121110;--video-ink: #EDE7DD;--font: "Onest Variable", system-ui, -apple-system, "Segoe UI", sans-serif;--mono: ui-monospace, SFMono-Regular, Menlo, monospace;--fs-xs: .75rem;--fs-sm: .875rem;--fs-md: 1rem;--fs-lg: 1.125rem;--fs-xl: 1.375rem;--fs-2xl: 1.75rem;--lh-tight: 1.25;--lh: 1.5;--lh-prose: 1.65;--measure: 68ch;--s1: 4px;--s2: 8px;--s3: 12px;--s4: 16px;--s5: 24px;--s6: 32px;--s7: 48px;--s8: 64px;--r-sm: 6px;--r: 10px;--r-lg: 14px;--r-pill: 999px;--shadow-pop: 0 8px 28px rgba(28, 26, 23, .14);--ring: 0 0 0 3px rgba(200, 82, 26, .35);--backdrop: rgba(28, 26, 23, .38);--t-fast: .15s;--ease: cubic-bezier(.2, .7, .2, 1)}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--ink);font:400 var(--fs-md)/var(--lh) var(--font);-webkit-font-smoothing:antialiased}h1,h2,h3,h4,p,ol,ul,dl,dd,figure,fieldset{margin:0}ol,ul{padding:0;list-style:none}fieldset{border:0;padding:0;min-width:0}button,input,select,textarea{font:inherit;color:inherit}img,video{max-width:100%;display:block}a{color:var(--accent-text);text-underline-offset:2px}a:hover{color:var(--accent-btn-hover)}:focus-visible{outline:none;box-shadow:var(--ring);border-radius:var(--r-sm)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.meta{color:var(--ink-3);font-size:var(--fs-sm)}.num{font-variant-numeric:tabular-nums}.pre{white-space:pre-wrap;overflow-wrap:anywhere}.stack{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--s4);align-content:start}.stack-lg{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--s5);align-content:start}.cluster{display:flex;flex-wrap:wrap;gap:var(--s2);align-items:center}.page-title{font-size:var(--fs-2xl);line-height:var(--lh-tight);font-weight:650;letter-spacing:-.015em;text-wrap:balance}.section-title{font-size:var(--fs-xl);line-height:var(--lh-tight);font-weight:620;letter-spacing:-.01em}.page-head{display:flex;flex-wrap:wrap;gap:var(--s3);align-items:center;justify-content:space-between;margin-bottom:var(--s5)}.section-head{display:flex;flex-wrap:wrap;gap:var(--s3);align-items:center;justify-content:space-between}.lead{color:var(--ink-2);max-width:var(--measure)}.back{display:inline-flex;gap:var(--s1);align-items:center;min-height:44px;color:var(--ink-2);font-size:var(--fs-sm);font-weight:500;text-decoration:none}.back:hover{color:var(--ink)}.page-skel{display:grid;gap:var(--s4);padding-block:var(--s6)}.brand{display:inline-flex;align-items:center;gap:var(--s2);color:var(--ink);font-weight:700;font-size:var(--fs-md);letter-spacing:-.01em;text-decoration:none}.brand:before{content:"";width:10px;height:10px;border-radius:2px;background:var(--accent);transform:rotate(45deg)}.brand:hover{color:var(--ink)}@media (pointer: coarse){.topbar .brand,.topbar .btn{min-height:44px}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--s2);min-height:40px;padding:0 var(--s4);border:1px solid transparent;border-radius:var(--r);font-size:var(--fs-sm);font-weight:600;line-height:1;text-decoration:none;white-space:nowrap;cursor:pointer;transition:background-color var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease),color var(--t-fast) var(--ease)}.btn-sm{min-height:32px;padding:0 var(--s3);font-size:.8125rem}.btn-lg{min-height:48px;padding:0 var(--s5);font-size:var(--fs-md)}.btn-primary{background:var(--accent-btn);color:var(--ink-inverse)}.btn-primary:hover{background:var(--accent-btn-hover);color:var(--ink-inverse)}.btn-secondary{background:var(--surface);border-color:var(--line-strong);color:var(--ink)}.btn-secondary:hover{background:var(--surface-2);color:var(--ink)}.btn-ghost{background:transparent;color:var(--ink-2)}.btn-ghost:hover{background:var(--surface-2);color:var(--ink)}.btn-danger{background:var(--danger);color:var(--ink-inverse)}.btn-danger:hover{background:var(--danger-hover);color:var(--ink-inverse)}.btn:active:not(:disabled){transform:translateY(1px)}.btn:disabled,.btn.is-disabled{opacity:.55;cursor:not-allowed}.btn:has(input:focus-visible){box-shadow:var(--ring)}.icon-btn{display:inline-grid;place-items:center;width:32px;height:32px;padding:0;border:0;border-radius:var(--r-sm);background:transparent;color:var(--ink-2);cursor:pointer}.icon-btn:hover:not(:disabled){background:var(--surface-2);color:var(--ink)}.icon-btn:disabled{opacity:.35;cursor:default}@media (pointer: coarse){.btn{min-height:44px}.btn-sm{min-height:40px}.icon-btn{width:44px;height:44px}}.spin{animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.field{display:grid;gap:6px}.field-label{font-size:var(--fs-sm);font-weight:600;color:var(--ink)}.field-hint{font-size:var(--fs-sm);color:var(--ink-3)}.field-error{font-size:var(--fs-sm);font-weight:500;color:var(--danger-fg)}.input,.textarea,.select{width:100%;min-height:44px;padding:10px 12px;border:1px solid var(--line-strong);border-radius:var(--r);background:var(--surface);color:var(--ink);font-size:var(--fs-md);transition:border-color var(--t-fast) var(--ease)}.input-sm{min-height:36px;padding:6px 10px;font-size:var(--fs-sm)}.textarea{min-height:120px;resize:vertical;line-height:var(--lh)}.input:hover,.textarea:hover,.select:hover{border-color:var(--ink-3)}.input:focus-visible,.textarea:focus-visible,.select:focus-visible{border-color:var(--accent);border-radius:var(--r);box-shadow:var(--ring)}[aria-invalid=true]{border-color:var(--danger-fg)}.w-num{width:96px}@media (pointer: coarse){.input-sm{min-height:44px;font-size:var(--fs-md)}}.check{display:inline-flex;align-items:center;gap:var(--s2);min-height:44px;font-size:var(--fs-sm);font-weight:500;cursor:pointer}.check input{width:18px;height:18px;margin:0;accent-color:var(--accent-btn)}.indent{margin-left:26px}.add-inline{display:flex;gap:var(--s2);align-items:center}.add-inline>.input{flex:1;min-width:0}.toolbar{display:flex;flex-wrap:wrap;gap:var(--s3);align-items:center;margin-bottom:var(--s4)}.search{position:relative;flex:1;max-width:360px}.search>svg{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--ink-3)}.search>.input{padding-left:36px}.pill{display:inline-flex;align-items:center;gap:6px;padding:3px 10px 3px 8px;border-radius:var(--r-pill);font-size:var(--fs-xs);font-weight:600;line-height:1.35;white-space:nowrap}.pill:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}.pill-ok{background:var(--ok-bg);color:var(--ok-fg)}.pill-info{background:var(--info-bg);color:var(--info-fg)}.pill-warn{background:var(--warn-bg);color:var(--warn-fg)}.pill-danger{background:var(--danger-bg);color:var(--danger-fg)}.pill-neutral{background:var(--neutral-bg);color:var(--neutral-fg)}.pill-accent{background:var(--accent-soft);color:var(--accent-text)}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--s5)}@media (max-width: 479px){.card{padding:var(--s4)}}.progress{height:6px;overflow:hidden;border-radius:var(--r-pill);background:var(--surface-2)}.progress>span{display:block;height:100%;border-radius:inherit;background:var(--accent);transition:width .25s var(--ease)}.progress.is-busy>span{animation:pulse 1.2s ease-in-out infinite}@keyframes pulse{50%{opacity:.45}}.tabs{display:flex;gap:var(--s1);margin-bottom:var(--s5);overflow-x:auto;border-bottom:1px solid var(--line);scrollbar-width:none}.tab{display:inline-flex;align-items:center;gap:var(--s2);min-height:44px;margin-bottom:-1px;padding:0 var(--s3);border:0;border-bottom:2px solid transparent;background:none;color:var(--ink-2);font-size:var(--fs-sm);font-weight:600;white-space:nowrap;cursor:pointer}.tab:hover{color:var(--ink)}.tab[aria-selected=true]{color:var(--ink);border-bottom-color:var(--accent)}.tab-count{min-width:22px;padding:1px 7px;border-radius:var(--r-pill);background:var(--surface-2);color:var(--ink-2);font-size:var(--fs-xs);text-align:center;font-variant-numeric:tabular-nums}.tab[aria-selected=true] .tab-count{background:var(--accent-soft);color:var(--accent-text)}.modal{width:min(520px,calc(100vw - 32px));padding:0;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);color:var(--ink);box-shadow:var(--shadow-pop)}.modal[open]{animation:rise .18s var(--ease)}.modal::backdrop{background:var(--backdrop)}.modal-inner{display:grid}.modal-head{display:flex;align-items:center;justify-content:space-between;gap:var(--s3);padding:var(--s4) var(--s5);border-bottom:1px solid var(--line)}.modal-head h2{font-size:var(--fs-lg);font-weight:650}.modal-body{display:grid;gap:var(--s4);padding:var(--s5)}.modal-actions{display:flex;justify-content:flex-end;gap:var(--s2);padding-top:var(--s2)}@media (max-width: 479px){.modal{width:100vw;max-width:100vw;margin:auto 0 0;border-radius:var(--r-lg) var(--r-lg) 0 0}.modal-actions{flex-direction:column-reverse}.modal-actions .btn{width:100%}}@keyframes rise{0%{opacity:0;transform:translateY(8px)}}.toasts{position:fixed;z-index:50;left:50%;bottom:var(--s5);display:grid;gap:var(--s2);width:min(420px,calc(100vw - 32px));transform:translate(-50%);pointer-events:none}.toast{padding:var(--s3) var(--s4);border-radius:var(--r);background:var(--ink);color:var(--ink-inverse);font-size:var(--fs-sm);font-weight:500;box-shadow:var(--shadow-pop);animation:rise .18s var(--ease)}.toast-error{background:var(--danger-fg)}.empty,.error-state{display:grid;justify-items:center;gap:var(--s3);padding:var(--s7) var(--s4);text-align:center;color:var(--ink-2)}.empty-icon{display:grid;place-items:center;width:48px;height:48px;border-radius:50%;background:var(--surface-2);color:var(--ink-2)}.error-state .empty-icon{background:var(--danger-bg);color:var(--danger-fg)}.empty h2,.error-state h2{font-size:var(--fs-lg);font-weight:650;color:var(--ink)}.empty p,.error-state p{max-width:46ch}.notice{display:flex;gap:var(--s3);align-items:flex-start;padding:var(--s4);border-radius:var(--r);background:var(--surface-2);color:var(--ink)}.notice>svg{flex:none;margin-top:2px}.notice p{margin-top:var(--s1);color:var(--ink-2)}.notice-info{background:var(--info-bg)}.notice-info>svg{color:var(--info-fg)}.notice-warn{background:var(--warn-bg)}.notice-warn>svg{color:var(--warn-fg)}.notice-danger{background:var(--danger-bg)}.notice-danger>svg,.notice-danger strong{color:var(--danger-fg)}.skel{display:block;border-radius:var(--r-sm);background:linear-gradient(90deg,var(--surface-2) 0%,var(--surface-sunk) 50%,var(--surface-2) 100%);background-size:200% 100%;animation:shimmer 1.4s linear infinite}@keyframes shimmer{to{background-position:-200% 0}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.video{aspect-ratio:16 / 9;overflow:hidden;border-radius:var(--r-lg);background:var(--video-bg)}.video video{width:100%;height:100%}.video-error{display:grid;place-content:center;justify-items:center;gap:var(--s3);height:100%;padding:var(--s5);color:var(--video-ink);text-align:center}.file-row{display:flex;align-items:center;gap:var(--s2);min-height:48px;padding:0 var(--s1) 0 var(--s3);border:1px solid var(--line);border-radius:var(--r);background:var(--surface)}.file-row:hover{border-color:var(--line-strong)}.file-inner{display:flex;flex:1;align-items:center;gap:var(--s3);min-width:0;min-height:46px;color:var(--ink);text-decoration:none}a.file-inner:hover{color:var(--ink)}a.file-inner:hover .file-name{text-decoration:underline}.file-inner>svg{flex:none;color:var(--ink-3)}.file-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-inner .meta{margin-left:auto;padding-right:var(--s2);white-space:nowrap}.files{display:grid;gap:var(--s2)}.upload{display:grid;gap:var(--s2);padding:var(--s3);border:1px dashed var(--line-strong);border-radius:var(--r)}.upload-row{display:flex;justify-content:space-between;gap:var(--s3);font-size:var(--fs-sm)}.upload-row>span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.prose{max-width:var(--measure);font-size:var(--fs-lg);line-height:var(--lh-prose);overflow-wrap:anywhere}.prose>*+*{margin-top:.9em}.prose h1,.prose h2{margin-top:1.6em;font-size:1.375rem;line-height:1.3;font-weight:650}.prose h3,.prose h4{margin-top:1.4em;font-size:1.15rem;line-height:1.35;font-weight:650}.prose ul{padding-left:1.3em;list-style:disc}.prose ol{padding-left:1.4em;list-style:decimal}.prose li+li{margin-top:.3em}.prose blockquote{margin-left:0;padding:.1em 0 .1em 1em;border-left:3px solid var(--accent);color:var(--ink-2)}.prose img{height:auto;border-radius:var(--r)}.prose pre{overflow-x:auto;padding:var(--s3);border-radius:var(--r);background:var(--surface-2);font-size:.9em}.prose code{font-family:var(--mono);font-size:.9em}.prose table{display:block;overflow-x:auto;border-collapse:collapse;font-size:var(--fs-md)}.prose th,.prose td{padding:6px 10px;border:1px solid var(--line);text-align:left}.login{display:grid;place-items:center;min-height:100dvh;padding:var(--s4)}.login-card{display:grid;gap:var(--s5);width:min(400px,100%)}.login-card form{display:grid;gap:var(--s4)}.login-card .btn{width:100%}.student{--gutter: var(--s4);min-height:100dvh}@media (min-width: 768px){.student{--gutter: var(--s5)}}.container{width:100%;max-width:1180px;margin:0 auto;padding-inline:var(--gutter, var(--s4))}.topbar{position:sticky;top:0;z-index:10;background:var(--bg);border-bottom:1px solid var(--line)}.topbar-in{display:flex;align-items:center;justify-content:space-between;gap:var(--s3);min-height:56px}.topbar-user{max-width:24ch;overflow:hidden;color:var(--ink-3);font-size:var(--fs-sm);text-overflow:ellipsis;white-space:nowrap}@media (max-width: 599px){.topbar-user{display:none}}.student-main{padding-block:var(--s5) var(--s8)}.course-grid{display:grid;grid-template-columns:1fr;gap:var(--s4)}@media (min-width: 720px){.course-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 1100px){.course-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}.course-card{display:flex;flex-direction:column;gap:var(--s3)}.course-card-title{font-size:var(--fs-lg);line-height:1.3;font-weight:650}.course-card-title a{color:var(--ink);text-decoration:none}.course-card-title a:hover{text-decoration:underline}.course-card.is-locked .course-card-title a{color:var(--ink-2)}.course-card-desc{display:-webkit-box;overflow:hidden;color:var(--ink-2);font-size:var(--fs-sm);-webkit-line-clamp:3;-webkit-box-orient:vertical}.course-card-progress{display:grid;gap:6px;margin-top:auto;padding-top:var(--s2)}.course-card-foot{display:grid;gap:var(--s2)}.course-card-foot .btn{width:100%}@media (min-width: 720px){.course-card-foot .btn{justify-self:start;width:auto}}.course-head{display:flex;flex-wrap:wrap;gap:var(--s3);align-items:center;margin:var(--s2) 0 var(--s3)}.course-progress{display:grid;grid-template-columns:1fr auto;gap:var(--s3) var(--s4);align-items:center;max-width:640px;margin:var(--s5) 0}.course-progress .progress{grid-column:1 / -1}.tree{display:grid;gap:var(--s5)}.tree-module-title{margin-bottom:var(--s2);color:var(--ink-3);font-size:var(--fs-xs);font-weight:700;letter-spacing:.06em;text-transform:uppercase}.tree ol{display:grid;gap:2px}.tree-item{display:grid;grid-template-columns:28px minmax(0,1fr) auto;gap:var(--s3);align-items:center;min-height:48px;padding:6px var(--s2);border-radius:var(--r);color:var(--ink);text-decoration:none}a.tree-item:hover{background:var(--surface-2);color:var(--ink)}.tree-item.is-current{background:var(--accent-soft)}.tree-item.is-current .tree-title{font-weight:650}.tree-item.is-locked{color:var(--ink-3)}.tree-mark{display:grid;place-items:center;width:26px;height:26px;border:1.5px solid var(--line-strong);border-radius:50%;color:var(--ink-3);font-size:var(--fs-xs);font-weight:600;font-variant-numeric:tabular-nums}.tree-mark.is-done{border-color:var(--ok-fg);background:var(--ok-fg);color:var(--ink-inverse)}.tree-title{font-size:.9375rem;line-height:1.35}.tree-meta{display:flex;gap:6px;align-items:center;color:var(--ink-3)}.lesson-layout{display:grid;gap:var(--s5)}.toc-desktop{display:none}.toc-mobile{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface)}.toc-mobile>summary{display:flex;align-items:center;gap:var(--s2);min-height:48px;padding:0 var(--s4);font-weight:600;list-style:none;cursor:pointer}.toc-mobile>summary::-webkit-details-marker{display:none}.toc-mobile[open]>summary{border-bottom:1px solid var(--line)}.toc-mobile>.tree{padding:var(--s3)}@media (min-width: 1024px){.lesson-layout{grid-template-columns:300px minmax(0,1fr);gap:var(--s7);align-items:start}.toc-mobile{display:none}.toc-desktop{display:block;position:sticky;top:72px;max-height:calc(100dvh - 88px);overflow-y:auto;padding-right:var(--s2)}}.lesson-main{display:grid;gap:var(--s5);min-width:0}.crumbs a{color:var(--ink-3);font-size:var(--fs-sm);text-decoration:none}.crumbs a:hover{color:var(--ink)}.lesson-title{font-size:var(--fs-2xl);line-height:1.2;font-weight:650;letter-spacing:-.015em;text-wrap:balance}@media (max-width: 599px){.student .video{margin-inline:calc(-1 * var(--gutter));border-radius:0}}.lesson-foot{display:flex;flex-wrap:wrap;gap:var(--s3);align-items:center;justify-content:space-between;padding-top:var(--s5);border-top:1px solid var(--line)}@media (max-width: 599px){.lesson-foot>.btn,.lesson-foot .cluster,.lesson-foot .cluster .btn{width:100%}}.homework{display:grid;gap:var(--s4)}.homework-head{display:flex;flex-wrap:wrap;gap:var(--s3);align-items:center;justify-content:space-between}.hw-prompt{padding-left:var(--s3);border-left:3px solid var(--line-strong);white-space:pre-wrap}.attempt{display:grid;gap:var(--s2);padding-top:var(--s3);border-top:1px solid var(--line)}.comment{padding:var(--s3);border-radius:var(--r);background:var(--surface-sunk)}.comment-label{color:var(--ink-3);font-size:var(--fs-xs);font-weight:700;letter-spacing:.05em;text-transform:uppercase}.history>summary{display:flex;align-items:center;min-height:44px;font-weight:600;cursor:pointer}.history[open]>summary{margin-bottom:var(--s2)}.counter{color:var(--ink-3);font-size:var(--fs-xs);text-align:right;font-variant-numeric:tabular-nums}.actions{display:flex;flex-wrap:wrap;gap:var(--s2);align-items:center}@media (max-width: 599px){.actions>.btn{flex:1 1 100%}}.admin{display:grid;grid-template-rows:auto 1fr;min-height:100dvh;font-size:var(--fs-sm)}.admin-nav{display:flex;align-items:center;gap:var(--s4);min-height:56px;padding:0 var(--s4);overflow-x:auto;background:var(--surface-2);border-bottom:1px solid var(--line)}.admin-nav nav{display:flex;gap:var(--s1)}.brand-tag{color:var(--ink-3);font-size:var(--fs-xs);font-weight:600;letter-spacing:.06em;text-transform:uppercase}.nav-item{display:inline-flex;align-items:center;gap:var(--s2);min-height:40px;padding:0 var(--s3);border:0;border-radius:var(--r);background:none;color:var(--ink-2);font-size:var(--fs-sm);font-weight:600;text-decoration:none;white-space:nowrap;cursor:pointer}.nav-item:hover{background:var(--surface);color:var(--ink)}.nav-item.active{background:var(--surface);color:var(--ink);box-shadow:inset 0 -2px 0 var(--accent)}.admin-nav-foot{display:flex;margin-left:auto}.admin-main{min-width:0;padding:var(--s5) var(--s4) var(--s8)}@media (min-width: 1024px){.admin{grid-template-columns:232px minmax(0,1fr);grid-template-rows:none}.admin-nav{position:sticky;top:0;flex-direction:column;align-items:stretch;gap:var(--s5);height:100dvh;padding:var(--s5) var(--s3);overflow:visible;border-bottom:0;border-right:1px solid var(--line)}.admin-nav .brand{padding:0 var(--s3)}.admin-nav nav{flex-direction:column}.nav-item.active{box-shadow:inset 3px 0 0 var(--accent)}.admin-nav-foot{flex-direction:column;margin:auto 0 0}.admin-main{padding:var(--s6) var(--s6) var(--s8)}}.admin .card{padding:var(--s4) var(--s5)}.table-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface)}.table{width:100%;border-collapse:collapse;font-size:var(--fs-sm)}.table th{padding:10px var(--s4);border-bottom:1px solid var(--line);background:var(--surface-sunk);color:var(--ink-3);font-size:var(--fs-xs);font-weight:700;letter-spacing:.05em;text-align:left;text-transform:uppercase;white-space:nowrap}.table td{padding:10px var(--s4);border-bottom:1px solid var(--line);vertical-align:middle}.table tr:last-child td{border-bottom:0}.table .num{text-align:right}.row-link{position:relative}.row-link:hover td{background:var(--surface-sunk)}.row-main{color:var(--ink);font-weight:600;text-decoration:none}.row-main:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0}.row-link :is(a:not(.row-main),button){position:relative;z-index:1}.split{display:grid;gap:var(--s5)}@media (min-width: 1100px){.split{grid-template-columns:minmax(0,1fr) 340px;align-items:start}.split>aside{position:sticky;top:var(--s5)}}.editor{display:grid;gap:var(--s5)}@media (min-width: 1100px){.editor{grid-template-columns:360px minmax(0,1fr);align-items:start}.editor-tree{position:sticky;top:var(--s5);max-height:calc(100dvh - 48px);overflow-y:auto;padding-right:var(--s1)}}.etree{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--s3)}.etree-module{padding:var(--s2);border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface)}.etree-row{display:flex;align-items:center;gap:2px;min-height:40px;border-radius:var(--r-sm)}.etree-row[aria-current=true]{background:var(--accent-soft)}.etree-title{flex:1;min-width:0;padding:6px var(--s2);overflow:hidden;border:0;border-radius:var(--r-sm);background:none;color:var(--ink);font-size:var(--fs-sm);text-align:left;text-overflow:ellipsis;white-space:nowrap}button.etree-title{cursor:pointer}button.etree-title:hover{background:var(--surface-2)}.etree-module-head .etree-title{font-weight:650}.etree-flags{display:flex;gap:var(--s1);color:var(--ink-3)}.etree-tools{display:flex;opacity:.6;transition:opacity var(--t-fast)}.etree-row:hover .etree-tools,.etree-row:focus-within .etree-tools{opacity:1}@media (pointer: coarse){.etree-tools{opacity:1}}.etree-lessons{display:grid;grid-template-columns:minmax(0,1fr);gap:1px;margin:var(--s1) 0 var(--s2) var(--s3)}.ed-section{display:grid;gap:var(--s3)}.ed-section h3{font-size:var(--fs-md);font-weight:650}.save-bar{position:sticky;bottom:0;display:flex;gap:var(--s3);align-items:center;justify-content:flex-end;padding:var(--s3) 0 0;background:var(--surface)}.rte{border:1px solid var(--line-strong);border-radius:var(--r);background:var(--surface)}.rte:focus-within{border-color:var(--accent);box-shadow:var(--ring)}.rte-bar{position:sticky;top:0;z-index:1;display:flex;flex-wrap:wrap;gap:2px;padding:var(--s1);border-bottom:1px solid var(--line);border-radius:var(--r) var(--r) 0 0;background:var(--surface-sunk)}.rte-btn{display:grid;place-items:center;width:34px;height:34px;border:0;border-radius:var(--r-sm);background:none;color:var(--ink-2);cursor:pointer}.rte-btn:hover:not(:disabled){background:var(--surface-2);color:var(--ink)}.rte-btn[aria-pressed=true]{background:var(--accent-soft);color:var(--accent-text)}.rte-btn:disabled{opacity:.35;cursor:default}.rte-sep{width:1px;margin:6px var(--s1);background:var(--line)}.rte-content{min-height:280px;max-width:none;padding:var(--s4);font-size:var(--fs-md);outline:none}.rte-content:focus-visible{box-shadow:none}.grant{display:grid;gap:var(--s3);padding-top:var(--s4);border-top:1px solid var(--line)}.grant-head{display:flex;flex-wrap:wrap;gap:var(--s2) var(--s3);align-items:center}.grant-title{color:var(--ink);font-size:var(--fs-md);font-weight:650;text-decoration:none}.grant-title:hover{color:var(--ink);text-decoration:underline}.grant-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--s3)}.fact dt{color:var(--ink-3);font-size:var(--fs-xs);font-weight:600}.fact dd{display:grid;gap:4px;margin-top:2px;font-variant-numeric:tabular-nums}.journal>summary{display:inline-flex;align-items:center;min-height:32px;color:var(--ink-2);font-weight:600;cursor:pointer}.events{display:grid;gap:6px;margin-top:var(--s2);padding-left:var(--s3);border-left:2px solid var(--line)}.events li{display:grid;grid-template-columns:130px 1fr;gap:var(--s3)}.events time{color:var(--ink-3);font-variant-numeric:tabular-nums}.sub-list{display:grid}.sub-item{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:var(--s3);align-items:center;min-height:44px;padding:var(--s2) 0;border-top:1px solid var(--line);color:var(--ink);text-decoration:none}.sub-item:hover{color:var(--ink)}.sub-item:hover strong{text-decoration:underline}@media (max-width: 599px){.sub-item{grid-template-columns:1fr auto}.sub-item>.meta:last-child{display:none}}
