.ludium-paper.ludium-paper-course{--ludium-paper:oklch(0.975 0.006 82);--ludium-paper-2:oklch(0.955 0.008 82);--ludium-paper-3:oklch(0.915 0.010 82);--ludium-ink:oklch(0.20 0.010 250);--ludium-ink-2:oklch(0.34 0.012 250);--ludium-ink-3:oklch(0.50 0.012 250);--ludium-ink-4:oklch(0.70 0.010 250);--ludium-rule:oklch(0.84 0.010 82);--ludium-rule-2:oklch(0.74 0.012 82);--ludium-accent:oklch(0.40 0.08 30);--ludium-ok:oklch(0.45 0.08 150);--ludium-err:oklch(0.50 0.14 30);--font-serif:"Source Serif 4",Georgia,"Times New Roman",serif;--font-sans:"Inter",system-ui,-apple-system,sans-serif;--font-mono:"JetBrains Mono",ui-monospace,monospace;background:var(--ludium-paper);color:var(--ludium-ink);font-family:var(--font-serif);font-feature-settings:"onum","liga"}.ludium-paper.ludium-paper-course:before{content:"";position:fixed;inset:0;pointer-events:none;z-index:1;background-image:radial-gradient(oklch(.75 .01 82/.1) 1px,transparent 1.4px),radial-gradient(oklch(.7 .015 82/.06) 1px,transparent 0);background-size:3px 3px,7px 7px;background-position:0 0,1px 2px;mix-blend-mode:multiply;opacity:.7}.lp-shell{position:relative;z-index:2;min-height:100vh;display:grid;grid-template-columns:var(--sb-w,308px) 1fr}.lp-header{grid-column:1/-1;justify-content:space-between;padding:14px 24px 12px;border-bottom:1px solid var(--ludium-ink);background:var(--ludium-paper);position:sticky;top:0;z-index:10}.lp-brand,.lp-header{display:flex;align-items:center}.lp-brand{font-family:var(--font-serif);font-weight:500;font-size:18px;letter-spacing:-.015em;line-height:1;gap:12px}.lp-brand em{font-style:italic;font-weight:400}.lp-brand em,.lp-crumbs{color:var(--ludium-ink-3)}.lp-crumbs{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.18em;text-transform:uppercase;display:flex;gap:10px;align-items:center;flex-wrap:wrap}.lp-crumbs .sep{color:var(--ludium-ink-4)}.lp-crumbs a{color:var(--ludium-ink-2);border-bottom:1px solid transparent}.lp-crumbs a:hover{border-bottom-color:var(--ludium-ink-3)}.lp-user{width:32px;height:32px;border:1px solid var(--ludium-ink);border-radius:999px;display:grid;place-items:center;font-family:var(--font-serif);font-weight:500;font-size:13px;color:var(--ludium-ink)}.lp-sb{border-right:1px solid var(--ludium-ink);background:var(--ludium-paper);position:relative;min-height:calc(100vh - 48px)}.lp-sb .sb-inner{padding:22px 22px 28px;position:sticky;top:48px;display:flex;flex-direction:column;gap:0}.sb-mast{padding:0 0 14px;border-bottom:2px double var(--ludium-ink);margin-bottom:12px;display:grid;gap:6px}.sb-mast .overline{font-family:var(--font-mono);font-size:9.5px;letter-spacing:.3em;text-transform:uppercase;color:var(--ludium-ink-3);display:flex;justify-content:space-between;align-items:baseline}.sb-mast .title{font-family:var(--font-serif);font-weight:500;font-size:28px;letter-spacing:-.028em;line-height:1;margin-top:2px}.sb-mast .title em{font-style:italic;font-weight:400;color:var(--ludium-ink-2)}.sb-mast .sub{font-family:var(--font-serif);font-style:italic;font-size:13px;color:var(--ludium-ink-3);line-height:1.35;margin-top:4px}.sb-mast .issue{font-family:var(--font-mono);font-size:9.5px;letter-spacing:.25em;text-transform:uppercase;color:var(--ludium-ink-3);display:flex;align-items:center;gap:10px;padding-top:10px}.sb-mast .issue .tick{flex:1;height:1px;background:var(--ludium-rule-2)}.sb-meter{padding:10px 0 14px;border-bottom:1px solid var(--ludium-rule);margin-bottom:8px}.sb-meter .lbl{font-family:var(--font-mono);font-size:9.5px;letter-spacing:.22em;text-transform:uppercase;color:var(--ludium-ink-3);display:flex;justify-content:space-between;margin-bottom:6px}.sb-meter .lbl b{font-family:var(--font-serif);font-size:13px;font-weight:500;color:var(--ludium-ink);letter-spacing:-.01em;text-transform:none}.sb-meter .bar{height:5px;background:var(--ludium-paper-3);position:relative;overflow:hidden}.sb-meter .bar i{position:absolute;left:0;top:0;height:100%;background:var(--ludium-ink);transition:width .3s}.sb-section{font-family:var(--font-mono);font-size:9.5px;letter-spacing:.28em;text-transform:uppercase;color:var(--ludium-ink-3);padding:8px 0 4px;display:flex;align-items:baseline;gap:10px}.sb-section .fold{flex:1;height:1px;background:var(--ludium-rule-2)}.lp-week{padding:0}.lp-week.active{background:var(--ludium-paper-2)}.lp-week-head{display:grid;grid-template-columns:34px 1fr auto;align-items:baseline;gap:10px;width:100%;padding:12px 6px 10px 2px;text-align:left;transition:background .12s}.lp-week-head:hover{background:var(--ludium-paper-2)}.lp-week.active .lp-week-head:hover{background:var(--ludium-paper-3)}.lp-week-head .roman{font-family:var(--font-serif);font-size:24px;font-weight:500;letter-spacing:-.02em;line-height:1;color:var(--ludium-ink-3);font-feature-settings:"lnum";align-self:start;padding-top:2px}.lp-week.active .lp-week-head .roman,.lp-week.current .lp-week-head .roman{color:var(--ludium-ink)}.lp-week-head .title-block{min-width:0}.lp-week-head .overline{font-family:var(--font-mono);font-size:9px;letter-spacing:.22em;text-transform:uppercase;color:var(--ludium-ink-3);display:block;margin-bottom:2px}.lp-week-head .t{font-family:var(--font-serif);font-weight:500;font-size:15px;letter-spacing:-.01em;line-height:1.2;color:var(--ludium-ink);display:block}.lp-week-head .t em{font-style:italic;font-weight:400;color:var(--ludium-ink-2)}.lp-week-head .meta{display:flex;flex-direction:column;align-items:flex-end;gap:4px;font-family:var(--font-mono);font-size:9.5px;letter-spacing:.1em;color:var(--ludium-ink-3);padding-top:3px}.lp-week-head .meta .frac{font-feature-settings:"tnum"}.lp-week-head .meta .frac b{color:var(--ludium-ink);font-weight:500}.lp-week-head .meta .chev{font-size:10px;color:var(--ludium-ink-4);transition:transform .15s}.lp-week.open .lp-week-head .meta .chev{transform:rotate(90deg)}.lp-week-head .meta .done{color:var(--ludium-ok);font-family:var(--font-serif);font-style:italic;font-size:12px;letter-spacing:0;text-transform:none}.lp-week-body{display:none;padding:2px 0 12px 40px;position:relative}.lp-week.open .lp-week-body{display:block}.lp-week-body:before{content:"";position:absolute;left:30px;top:0;bottom:8px;width:1px;background:var(--ludium-rule)}.lp-week.current .lp-week-body:before{background:var(--ludium-accent);opacity:.35}.lp-vlink{display:grid;grid-template-columns:22px 1fr auto;align-items:baseline;gap:10px;padding:5px 6px 5px 0;position:relative;font-family:var(--font-serif);font-size:13.5px;color:var(--ludium-ink-3);line-height:1.3}.lp-vlink:hover{color:var(--ludium-ink)}.lp-vlink .ix{font-family:var(--font-mono);font-size:9.5px;color:var(--ludium-ink-4);text-align:right;letter-spacing:.05em;font-feature-settings:"tnum"}.lp-vlink .t{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lp-vlink .dots{font-family:var(--font-mono);font-size:9.5px;color:var(--ludium-rule-2);letter-spacing:.05em}.lp-vlink.done{color:var(--ludium-ink-4)}.lp-vlink.done .t{text-decoration:line-through;text-decoration-thickness:.5px;text-decoration-color:var(--ludium-ink-4)}.lp-vlink.done .ix:before{content:"✓";color:var(--ludium-ok);margin-right:4px;text-decoration:none;font-family:var(--font-serif);font-style:normal}.lp-vlink.done .ix{text-decoration:none}.lp-vlink.current{color:var(--ludium-ink);font-weight:500}.lp-vlink.current:before{content:"";position:absolute;left:-15px;top:50%;transform:translateY(-50%);width:0;height:0;border-left:6px solid var(--ludium-accent);border-top:4px solid transparent;border-bottom:4px solid transparent}.lp-vlink.current .ix{color:var(--ludium-accent)}.lp-vlink.problems{margin-top:8px;padding-top:10px;border-top:1px dashed var(--ludium-rule-2);color:var(--ludium-ink-2);font-style:italic}.lp-vlink.problems .ix{font-style:normal}.lp-vlink.problems .t{font-style:italic}.lp-vlink.problems .dots:before{content:"§";color:var(--ludium-ink-3);margin-right:6px;font-style:normal;font-family:var(--font-serif)}.sb-foot{margin-top:auto;padding-top:16px;padding-bottom:4px;border-top:1px solid var(--ludium-rule);font-family:var(--font-mono);font-size:9px;letter-spacing:.22em;text-transform:uppercase;display:flex;justify-content:space-between;line-height:1.6}.sb-foot,.sb-foot .l em{color:var(--ludium-ink-3)}.sb-foot .l em{font-family:var(--font-serif);font-style:italic;font-size:11px;letter-spacing:0;text-transform:none;display:block;margin-top:2px}.lp-resize{right:-3px;width:6px;cursor:col-resize;z-index:5}.lp-resize,.lp-resize:after{position:absolute;top:0;height:100%}.lp-resize:after{content:"";right:2px;width:1px;background:transparent;transition:background .15s}.lp-resize.active:after,.lp-resize:hover:after{background:var(--ludium-ink-4)}.lp-main{padding:32px 56px 100px;max-width:920px;width:100%;margin:0 auto}.lp-plate{padding-bottom:22px;margin-bottom:24px;border-bottom:1px solid var(--ludium-ink)}.lp-plate .kicker{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.22em;text-transform:uppercase;color:var(--ludium-ink-3);margin-bottom:10px;display:flex;gap:14px;align-items:center;flex-wrap:wrap}.lp-plate .kicker .tick{width:20px;height:1px;background:var(--ludium-rule-2)}.lp-plate h1{font-family:var(--font-serif);font-weight:500;font-size:clamp(32px,5vw,52px);letter-spacing:-.03em;line-height:1.02;margin:0 0 10px}.lp-plate h1 em{font-style:italic;font-weight:400;color:var(--ludium-ink-2)}.lp-plate .sub{font-family:var(--font-serif);font-style:italic;font-size:17px;color:var(--ludium-ink-3);line-height:1.45;margin:0;max-width:58ch}.lp-plate .run{display:flex;justify-content:space-between;align-items:baseline;margin-top:14px;font-family:var(--font-mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--ludium-ink-3);flex-wrap:wrap;gap:8px}.lp-plate .run .l{display:flex;gap:14px;flex-wrap:wrap}.lp-guide{display:grid;grid-template-columns:auto 1fr auto;gap:18px;align-items:center;padding:14px 0;margin-bottom:24px;border-bottom:1px solid var(--ludium-rule)}.lp-guide .label{font-family:var(--font-mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--ludium-ink-3)}.lp-guide .files{display:flex;gap:12px;flex-wrap:wrap}.lp-guide .file{font-family:var(--font-serif);font-style:italic;font-size:14px;color:var(--ludium-ink-2);padding-bottom:1px;border-bottom:1px solid var(--ludium-ink-4);display:inline-flex;gap:8px;align-items:baseline}.lp-guide .file .ext{font-family:var(--font-mono);font-style:normal;font-size:9.5px;letter-spacing:.18em;color:var(--ludium-ink-4)}.lp-guide .file:hover{color:var(--ludium-ink);border-bottom-color:var(--ludium-ink)}.lp-video{position:relative;width:100%;aspect-ratio:16/9;background:oklch(.15 .01 250);border:1px solid var(--ludium-ink);overflow:hidden}.lp-video .thumb{position:absolute;inset:0;background:radial-gradient(ellipse at 30% 30%,oklch(.35 .04 250) 0,transparent 55%),radial-gradient(ellipse at 70% 70%,oklch(.28 .06 30) 0,transparent 55%),linear-gradient(135deg,oklch(.18 .01 250),oklch(.12 .005 250))}.lp-video .play{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:2;width:72px;height:72px;border-radius:999px;background:hsla(0,0%,100%,.92);display:grid;place-items:center;box-shadow:0 8px 24px rgba(0,0,0,.35)}.lp-video .play:after{content:"";display:block;width:0;height:0;border-left:18px solid #111;border-top:12px solid transparent;border-bottom:12px solid transparent;margin-left:4px}.lp-video .chips{position:absolute;top:14px;left:16px;z-index:2;display:flex;gap:8px;font-family:var(--font-mono);font-size:10px;letter-spacing:.15em;text-transform:uppercase;color:#fff}.lp-video .chip{padding:4px 8px;background:rgba(0,0,0,.5);backdrop-filter:blur(4px);border:1px solid hsla(0,0%,100%,.15)}.lp-video .dur{position:absolute;bottom:14px;right:16px;z-index:2;font-family:var(--font-mono);font-size:11px;color:#fff;padding:2px 8px;background:rgba(0,0,0,.6)}.lp-vmeta{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.15em;text-transform:uppercase;color:var(--ludium-ink-3);padding:10px 0 0;margin-bottom:30px}.lp-nb-head,.lp-vmeta{display:flex;justify-content:space-between}.lp-nb-head{align-items:baseline;gap:16px;padding:18px 0 12px;margin-top:10px;border-top:1px solid var(--ludium-ink)}.lp-nb-head h2{font-family:var(--font-serif);font-weight:500;font-size:26px;letter-spacing:-.02em;margin:0}.lp-nb-head h2 em{font-style:italic;font-weight:400;color:var(--ludium-ink-3)}.lp-nb-head .tag{font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--ludium-ink-3)}.lp-nb,.lp-nb-head .tag{font-family:var(--font-mono)}.lp-nb{border:1px solid var(--ludium-ink);background:var(--ludium-paper-2);font-size:13.5px;color:var(--ludium-ink);line-height:1.55;display:grid;grid-template-columns:38px 1fr;min-height:380px}.lp-nb-frame,.lp-nb-frame>*{display:block;width:100%}.lp-nb .gutter{border-right:1px solid var(--ludium-rule);padding:12px 0;display:flex;flex-direction:column;align-items:center;gap:12px}.lp-nb .gutter .cell-num{font-size:10px;color:var(--ludium-ink-4);letter-spacing:.1em}.lp-nb .cells{padding:8px 0}.lp-nb .cell{padding:8px 18px;border-bottom:1px dashed var(--ludium-rule)}.lp-nb .cell:last-child{border-bottom:0}.lp-nb .cell.md{font-family:var(--font-serif);font-size:15.5px;color:var(--ludium-ink-2);line-height:1.55}.lp-nb .cell.md h3{font-family:var(--font-serif);font-weight:500;font-size:18px;margin:0 0 4px;letter-spacing:-.01em;color:var(--ludium-ink)}.lp-nb .cell.code{background:var(--ludium-paper)}.lp-nb .cell.code .kw{color:var(--ludium-accent)}.lp-nb .cell.code .str{color:var(--ludium-ok)}.lp-nb .cell.code .com{color:var(--ludium-ink-4);font-style:italic}.lp-nb .cell.out{background:var(--ludium-paper-3);font-family:var(--font-serif);font-size:15px;color:var(--ludium-ink-2);font-style:italic}.lp-nb .cell.out .plot{margin-top:10px;height:140px;background:var(--ludium-paper);border:1px solid var(--ludium-rule);position:relative;overflow:hidden}.lp-nb .cell.out .plot svg{width:100%;height:100%;display:block}.lp-foot{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:22px 0;margin-top:28px;border-top:1px solid var(--ludium-ink);flex-wrap:wrap}.lp-complete{font-family:var(--font-serif);font-size:15px;color:var(--ludium-ink);padding:9px 20px;border:1px solid var(--ludium-ink);background:var(--ludium-paper);display:inline-flex;align-items:center;gap:10px;transition:background .15s}.lp-complete:hover{background:var(--ludium-paper-2)}.lp-complete.done{background:var(--ludium-ink);color:var(--ludium-paper)}.lp-complete .glyph{font-family:var(--font-mono);font-size:12px}.lp-nav{display:flex;gap:24px;font-family:var(--font-serif);font-size:15px;flex-wrap:wrap}.lp-nav .link{color:var(--ludium-ink-2);display:inline-flex;align-items:baseline;gap:10px;padding-bottom:2px;border-bottom:1px solid transparent;transition:border .15s,color .15s}.lp-nav .link:hover{color:var(--ludium-ink);border-bottom-color:var(--ludium-ink)}.lp-nav .link em{font-style:italic;color:var(--ludium-ink-3)}.lp-nav .link.next{font-weight:500;color:var(--ludium-ink)}.lp-nav .link .arr{font-size:13px}.lp-nav .link .arr,.lp-prog{font-family:var(--font-mono);color:var(--ludium-ink-3)}.lp-prog{font-size:10.5px;letter-spacing:.18em;text-transform:uppercase;display:flex;align-items:baseline;gap:8px}.lp-prog .big{font-family:var(--font-serif);font-size:22px;font-weight:500;letter-spacing:-.02em;color:var(--ludium-ink)}.lp-prog .bar{width:90px;height:3px;background:var(--ludium-rule);position:relative;margin-left:6px;align-self:center}.lp-prog .bar i{position:absolute;left:0;top:0;height:100%;background:var(--ludium-ink)}.lp-index{padding:18px 0;margin-bottom:24px;border-top:1px solid var(--ludium-rule);border-bottom:1px solid var(--ludium-rule)}.lp-index-head{font-family:var(--font-mono);font-size:10px;letter-spacing:.22em;text-transform:uppercase;margin-bottom:12px;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:8px}.lp-index-head,.lp-index-head .legend{color:var(--ludium-ink-3);display:flex}.lp-index-head .legend{gap:12px;font-family:var(--font-serif);font-style:italic;font-size:12px;letter-spacing:0;text-transform:none}.lp-index-head .legend span{display:inline-flex;align-items:center;gap:5px}.lp-index-head .legend i{width:6px;height:6px;border-radius:999px;display:inline-block}.lp-plist{display:flex;flex-wrap:wrap;gap:0;margin:0 -14px}.lp-pitem{display:flex;align-items:baseline;gap:10px;padding:6px 14px;border-right:1px solid var(--ludium-rule);font-family:var(--font-serif);font-size:14.5px;color:var(--ludium-ink-2);line-height:1.3;white-space:nowrap;transition:background .12s;cursor:pointer}.lp-pitem:last-child{border-right:0}.lp-pitem:hover{background:var(--ludium-paper-2)}.lp-pitem .pn{font-family:var(--font-mono);font-size:10px;letter-spacing:.05em;color:var(--ludium-ink-3);min-width:18px;text-align:right}.lp-pitem .pt{flex:1}.lp-pitem .d{display:inline-block;width:6px;height:6px;border-radius:999px;margin-left:4px}.d-l1{background:oklch(.6 .1 140)}.d-l2{background:oklch(.55 .12 230)}.d-l3{background:oklch(.6 .13 60)}.d-l4{background:oklch(.5 .14 30)}.lp-pitem.current{background:var(--ludium-paper-3);color:var(--ludium-ink);font-weight:500}.lp-pitem.current .pn{color:var(--ludium-accent)}.lp-pitem.done{color:var(--ludium-ink-4);text-decoration:line-through;text-decoration-thickness:.5px;text-decoration-color:var(--ludium-ink-4)}.lp-pitem.done .pn{color:var(--ludium-ok);text-decoration:none}.lp-pitem.done:before{content:"✓ ";font-family:var(--font-mono);font-size:10px;color:var(--ludium-ok);margin-right:-2px}.lp-problem{padding-top:8px}.lp-problem .topline{display:flex;align-items:baseline;justify-content:space-between;gap:16px;font-family:var(--font-mono);font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--ludium-ink-3);margin-bottom:14px}.lp-problem .topline .left{display:flex;gap:14px;align-items:baseline;flex-wrap:wrap}.lp-problem .topline .diff{display:inline-flex;gap:4px;align-items:center}.lp-problem .topline .diff .bar{width:16px;height:3px;background:var(--ludium-rule)}.lp-problem .topline .diff .bar.on{background:var(--ludium-ink)}.lp-problem h2.ptitle{font-family:var(--font-serif);font-weight:500;font-size:32px;letter-spacing:-.025em;line-height:1.08;margin:0 0 22px}.lp-problem h2.ptitle em{font-style:italic;font-weight:400;color:var(--ludium-ink-2)}.lp-problem .stmt{font-family:var(--font-serif);font-size:18px;line-height:1.6;color:var(--ludium-ink-2);max-width:64ch;margin-bottom:28px}.lp-problem .stmt .math{display:block;padding:14px 0;margin:18px 0;border-top:1px solid var(--ludium-rule);border-bottom:1px solid var(--ludium-rule);text-align:center;font-size:22px;font-style:italic;color:var(--ludium-ink)}.lp-answerwrap{margin-bottom:20px}.lp-alabel{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:10px;gap:12px;flex-wrap:wrap}.lp-alabel .l{font-family:var(--font-mono);font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--ludium-ink-3);display:inline-flex;align-items:baseline;gap:10px}.lp-alabel .l .big{font-weight:500;font-size:16px;color:var(--ludium-ink);letter-spacing:-.01em}.lp-alabel .l .big,.lp-alabel .l .type{font-family:var(--font-serif);text-transform:none}.lp-alabel .l .type{font-style:italic;font-size:13px;color:var(--ludium-ink-3);letter-spacing:0}.lp-toggle{display:inline-flex;border:1px solid var(--ludium-ink);background:var(--ludium-paper)}.lp-toggle button{padding:5px 12px;font-family:var(--font-mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--ludium-ink-3);display:inline-flex;align-items:center;gap:6px;border-right:1px solid var(--ludium-ink);transition:background .12s,color .12s}.lp-toggle button:last-child{border-right:0}.lp-toggle button:hover{color:var(--ludium-ink)}.lp-toggle button.on{background:var(--ludium-ink);color:var(--ludium-paper)}.lp-toggle .ic{width:11px;height:11px}.lp-preview,.lp-textarea{width:100%;min-height:200px;padding:16px 18px;background:var(--ludium-paper-2);border:1px solid var(--ludium-ink);font-family:var(--font-mono);font-size:14px;line-height:1.6;color:var(--ludium-ink);resize:vertical;outline:0}.lp-textarea::-moz-placeholder{color:var(--ludium-ink-4);font-style:italic;font-family:var(--font-serif);font-size:15px}.lp-textarea::placeholder{color:var(--ludium-ink-4);font-style:italic;font-family:var(--font-serif);font-size:15px}.lp-preview,.lp-textarea:focus{background:var(--ludium-paper)}.lp-preview{font-family:var(--font-serif);font-size:16px;line-height:1.6;color:var(--ludium-ink-2);overflow:auto}.lp-preview .math-inline{font-style:italic;padding:0 2px}.lp-preview .empty{color:var(--ludium-ink-4);font-style:italic}.lp-helper{font-family:var(--font-serif);font-style:italic;font-size:14px;color:var(--ludium-ink-3);margin-top:8px;line-height:1.4}.lp-helper.warn{color:var(--ludium-accent)}.lp-helper.err{color:var(--ludium-err);font-style:normal;font-family:var(--font-sans);font-size:13px}.lp-tools{margin-top:14px;display:flex;flex-direction:column;gap:8px}.lp-tool{border:1px solid var(--ludium-rule-2);background:var(--ludium-paper)}.lp-tool.open{background:var(--ludium-paper-2)}.lp-tool-head{display:flex;align-items:center;justify-content:space-between;width:100%;padding:10px 14px;text-align:left;font-family:var(--font-mono);font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--ludium-ink-2);transition:background .12s}.lp-tool-head:hover{background:var(--ludium-paper-3)}.lp-tool.open .lp-tool-head{border-bottom:1px solid var(--ludium-rule-2)}.lp-tool-head .left{display:inline-flex;align-items:center;gap:10px}.lp-tool-head .glyph{font-family:var(--font-serif);font-size:18px;font-style:italic;line-height:1;color:var(--ludium-accent);width:20px;text-align:center}.lp-tool-head .chev{font-size:11px;color:var(--ludium-ink-3)}.lp-tool-body{padding:12px 14px 14px}.lp-tool-body .desc{font-family:var(--font-serif);font-style:italic;font-size:13px;color:var(--ludium-ink-3);margin-bottom:10px;line-height:1.4}.lp-formula-row{display:flex;gap:10px;align-items:stretch;flex-wrap:wrap}.lp-formula-field{flex:1;min-width:240px;padding:10px 12px;background:var(--ludium-paper);border:1px solid var(--ludium-ink);font-family:var(--font-mono);font-size:14px;color:var(--ludium-ink);min-height:42px;outline:0}.lp-formula-field::-moz-placeholder{color:var(--ludium-ink-4);font-style:italic;font-family:var(--font-serif);font-size:14px}.lp-formula-field::placeholder{color:var(--ludium-ink-4);font-style:italic;font-family:var(--font-serif);font-size:14px}.lp-formula-field:focus{background:var(--ludium-paper-2)}.lp-formula-insert{padding:0 18px;font-family:var(--font-serif);font-size:14px;color:var(--ludium-paper);background:var(--ludium-ink);border:1px solid var(--ludium-ink);transition:background .15s;display:inline-flex;align-items:center;gap:6px}.lp-formula-insert:hover{background:var(--ludium-ink-2)}.lp-formula-insert[disabled]{opacity:.4;cursor:not-allowed}.lp-formula-palette{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}.lp-formula-palette button{padding:4px 10px;border:1px solid var(--ludium-rule-2);background:var(--ludium-paper);font-family:var(--font-serif);font-size:14px;color:var(--ludium-ink-2);min-width:34px}.lp-formula-palette button:hover{background:var(--ludium-paper-2);color:var(--ludium-ink);border-color:var(--ludium-ink-4)}.lp-calc{display:grid;grid-template-columns:1fr auto;gap:10px;align-items:stretch}.lp-calc .screen{background:var(--ludium-paper);border:1px solid var(--ludium-ink);padding:10px 14px;font-family:var(--font-mono);font-size:22px;color:var(--ludium-ink);text-align:right;min-height:52px;display:flex;align-items:center;justify-content:flex-end;letter-spacing:.01em}.lp-calc-insert{align-self:stretch}.lp-calc-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:4px;margin-top:10px}.lp-calc-grid button{padding:10px 0;border:1px solid var(--ludium-rule-2);background:var(--ludium-paper);font-family:var(--font-mono);font-size:14px;color:var(--ludium-ink);transition:background .12s}.lp-calc-grid button:hover{background:var(--ludium-paper-3)}.lp-calc-grid button.op{color:var(--ludium-accent);font-family:var(--font-serif);font-style:italic;font-size:15px}.lp-calc-grid button.eq{background:var(--ludium-ink);color:var(--ludium-paper);border-color:var(--ludium-ink)}.lp-calc-grid button.eq:hover{background:var(--ludium-ink-2)}.lp-drop{border:1px dashed var(--ludium-ink-4);padding:26px 18px;text-align:center;background:var(--ludium-paper);font-family:var(--font-serif);font-style:italic;font-size:14px;color:var(--ludium-ink-3);display:flex;flex-direction:column;align-items:center;gap:8px}.lp-drop.has{background:var(--ludium-paper-2);padding:14px}.lp-drop .glyph{font-family:var(--font-serif);font-size:22px;color:var(--ludium-ink-3);font-style:italic}.lp-drop .cta{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.22em;text-transform:uppercase;color:var(--ludium-ink);font-style:normal;padding-bottom:1px;border-bottom:1px solid var(--ludium-ink)}.lp-drop .or{font-size:12px;color:var(--ludium-ink-4)}.lp-imglist{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;margin-top:8px}.lp-imgcard{border:1px solid var(--ludium-ink);background:var(--ludium-paper);padding:4px;display:inline-flex;gap:8px;align-items:center;font-family:var(--font-mono);font-size:10px;letter-spacing:.1em;color:var(--ludium-ink-3)}.lp-imgcard .thumb{width:48px;height:48px;background:linear-gradient(135deg,var(--ludium-paper-3),var(--ludium-paper-2));display:grid;place-items:center;color:var(--ludium-ink-3);font-style:italic;font-family:var(--font-serif);font-size:12px}.lp-imgcard .rm{padding:2px 6px;color:var(--ludium-err)}.lp-imgcard .rm:hover{background:var(--ludium-err);color:var(--ludium-paper)}.lp-actions{display:flex;justify-content:space-between;align-items:center;margin-top:8px;margin-bottom:28px;flex-wrap:wrap;gap:12px}.lp-actions .attempts{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--ludium-ink-3);display:flex;gap:8px;align-items:center}.lp-actions .attempts .slot{width:10px;height:10px;border:1px solid var(--ludium-ink-3);display:inline-block}.lp-actions .attempts .slot.ok{background:var(--ludium-ok);border-color:var(--ludium-ok)}.lp-actions .attempts .slot.bad{background:var(--ludium-err);border-color:var(--ludium-err)}.lp-actions .btns{display:flex;gap:12px}.lp-btn{font-family:var(--font-serif);font-size:14px;padding:8px 18px;border:1px solid var(--ludium-ink);background:var(--ludium-paper);color:var(--ludium-ink);transition:background .15s;display:inline-flex;align-items:center;gap:8px}.lp-btn:hover{background:var(--ludium-paper-2)}.lp-btn.primary{background:var(--ludium-ink);color:var(--ludium-paper)}.lp-btn.primary:hover{background:var(--ludium-ink-2)}.lp-btn.ghost{border-color:var(--ludium-ink-4);color:var(--ludium-ink-2)}.lp-btn[disabled]{opacity:.45;cursor:not-allowed}.lp-feedback{margin:8px 0 24px;padding:18px 22px;background:var(--ludium-paper-2);border-left:3px solid var(--ludium-accent);position:relative}.lp-feedback.ok{border-left-color:var(--ludium-ok)}.lp-feedback.bad{border-left-color:var(--ludium-err)}.lp-feedback .fh{font-family:var(--font-mono);font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--ludium-accent);margin-bottom:8px;display:flex;gap:12px;align-items:baseline}.lp-feedback.ok .fh{color:var(--ludium-ok)}.lp-feedback.bad .fh{color:var(--ludium-err)}.lp-feedback .fh .reader{font-family:var(--font-serif);font-style:italic;font-size:12px;text-transform:none;letter-spacing:0;color:var(--ludium-ink-3)}.lp-feedback p{font-family:var(--font-serif);font-size:16px;line-height:1.55;color:var(--ludium-ink);margin:0 0 10px}.lp-feedback p:last-child{margin-bottom:0}.lp-solution{margin:8px 0 24px;border-top:1px solid var(--ludium-ink);padding-top:20px}.lp-solution h3{font-family:var(--font-mono);font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--ludium-ink-3);margin:0 0 14px;display:flex;align-items:baseline;gap:10px}.lp-solution h3 .br{flex:1;height:1px;background:var(--ludium-rule)}.lp-solution ol{list-style:none;padding:0;margin:0;counter-reset:step}.lp-solution li{counter-increment:step;padding:8px 0 8px 44px;position:relative;font-family:var(--font-serif);font-size:16px;line-height:1.55;color:var(--ludium-ink-2)}.lp-solution li:before{content:counter(step,lower-roman) ".";position:absolute;left:0;top:8px;font-family:var(--font-serif);font-style:italic;font-size:15px;color:var(--ludium-accent);width:34px;text-align:right}.lp-pnav{display:flex;justify-content:space-between;padding:18px 0;margin-top:28px;border-top:1px solid var(--ludium-ink);font-family:var(--font-serif);font-size:14.5px}.lp-pnav .l{color:var(--ludium-ink-2)}.lp-pnav .r{color:var(--ludium-ink);font-weight:500}.lp-practice-settings{border-top:1px solid var(--ludium-rule);border-bottom:1px solid var(--ludium-rule);padding:20px 0;margin-bottom:28px;display:grid;grid-template-columns:140px 1fr;gap:22px 28px;align-items:start}.lp-practice-settings .row-label{font-family:var(--font-mono);font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--ludium-ink-3);padding-top:10px}.lp-practice-settings .row-body{min-width:0}.lp-practice-row{border-bottom:1px dashed var(--ludium-rule);padding-bottom:18px;margin-bottom:18px}.lp-practice-row:last-child{border-bottom:0;padding-bottom:0;margin-bottom:0}.lp-topic-pills{display:flex;flex-wrap:wrap;gap:6px}.lp-topic-pill{padding:7px 14px;border:1px solid var(--ludium-rule-2);background:var(--ludium-paper);font-family:var(--font-serif);font-size:14px;color:var(--ludium-ink-2);transition:background .12s,border-color .12s;min-height:36px}.lp-topic-pill:hover{background:var(--ludium-paper-2);border-color:var(--ludium-ink-4)}.lp-topic-pill.on{background:var(--ludium-ink);color:var(--ludium-paper);border-color:var(--ludium-ink)}.lp-topic-pill em{font-style:italic}.lp-diff-choice{display:flex;gap:8px}.lp-diff-choice button{flex:1;padding:12px 10px;border:1px solid var(--ludium-rule-2);background:var(--ludium-paper);display:flex;flex-direction:column;align-items:center;gap:6px;font-family:var(--font-serif);font-size:15px;color:var(--ludium-ink-2);transition:background .12s,border-color .12s;min-height:64px}.lp-diff-choice button:hover{background:var(--ludium-paper-2);border-color:var(--ludium-ink-4)}.lp-diff-choice button.on{border-color:var(--ludium-ink);background:var(--ludium-paper-2)}.lp-diff-choice .stars{font-family:var(--font-serif);font-size:13px;letter-spacing:.1em;color:var(--ludium-accent)}.lp-diff-choice button.on .stars{color:var(--ludium-ink)}.lp-diff-choice .lbl{font-family:var(--font-mono);font-size:9.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--ludium-ink-3)}.lp-diff-choice button.on .lbl{color:var(--ludium-ink)}.lp-diff-desc{font-family:var(--font-serif);font-style:italic;font-size:13px;color:var(--ludium-ink-3);margin-top:10px;line-height:1.4}.lp-generate{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap}.lp-generate .btn-big{font-family:var(--font-serif);font-size:16px;padding:12px 26px;background:var(--ludium-ink);color:var(--ludium-paper);border:1px solid var(--ludium-ink);display:inline-flex;align-items:center;gap:10px;transition:background .15s;min-height:48px}.lp-generate .btn-big:hover{background:var(--ludium-ink-2)}.lp-generate .btn-big[disabled]{opacity:.45;cursor:not-allowed}.lp-generate .btn-big .die{font-size:18px;line-height:1}.lp-generate .aside,.lp-generate .btn-big .die{font-family:var(--font-serif);font-style:italic}.lp-generate .aside{font-size:14px;color:var(--ludium-ink-3);max-width:42ch}.lp-practice-empty{border:1px solid var(--ludium-ink);padding:60px 30px;text-align:center;background:var(--ludium-paper);position:relative}.lp-practice-empty:before{content:"";position:absolute;inset:6px;border:1px solid var(--ludium-rule-2);pointer-events:none}.lp-practice-empty .glyph{font-family:var(--font-serif);font-style:italic;font-size:56px;color:var(--ludium-ink-4);line-height:1;margin-bottom:18px}.lp-practice-empty h3{font-family:var(--font-serif);font-weight:500;font-size:26px;letter-spacing:-.02em;margin:0 0 10px}.lp-practice-empty h3 em{font-style:italic;color:var(--ludium-ink-2)}.lp-practice-empty p{font-family:var(--font-serif);font-style:italic;font-size:15px;color:var(--ludium-ink-3);margin:0 auto;max-width:48ch;line-height:1.5}.lp-practice-loading{border:1px solid var(--ludium-ink);padding:70px 30px;text-align:center;background:var(--ludium-paper)}.lp-practice-loading .dots{font-family:var(--font-serif);font-style:italic;font-size:40px;color:var(--ludium-ink);letter-spacing:.2em;line-height:1}.lp-practice-loading .dots span{animation:bob 1.2s ease-in-out infinite;display:inline-block}.lp-practice-loading .dots span:nth-child(2){animation-delay:.15s}.lp-practice-loading .dots span:nth-child(3){animation-delay:.3s}@keyframes bob{0%,60%,to{transform:translateY(0);opacity:.35}30%{transform:translateY(-6px);opacity:1}}.lp-practice-loading h3{font-family:var(--font-serif);font-weight:500;font-size:22px;letter-spacing:-.02em;margin:20px 0 6px}.lp-practice-loading h3 em{font-style:italic;color:var(--ludium-ink-2)}.lp-practice-loading p{font-family:var(--font-serif);font-style:italic;font-size:13.5px;color:var(--ludium-ink-3);margin:0}.lp-practice-history-link{font-family:var(--font-mono);font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--ludium-ink-3);display:inline-flex;align-items:center;gap:8px;padding:6px 10px;border:1px solid var(--ludium-rule-2)}.lp-practice-history-link:hover{color:var(--ludium-ink);border-color:var(--ludium-ink)}.lp-menu{display:none;width:40px;height:40px;align-items:center;justify-content:center;border:1px solid var(--ludium-ink);background:var(--ludium-paper);color:var(--ludium-ink)}.lp-menu svg{width:18px;height:18px}.lp-drawer-backdrop{display:none;position:fixed;inset:0;background:rgba(30,25,20,.4);z-index:50}.lp-drawer-backdrop.open{display:block}@media (max-width:960px){.lp-shell{grid-template-columns:1fr}.lp-header{padding:12px 16px 10px}.lp-brand{font-size:16px}.lp-crumbs{display:none}.lp-menu{display:inline-flex}.lp-sb{position:fixed!important;left:0;top:0;bottom:0;z-index:60;width:min(86vw,340px)!important;transform:translateX(-100%);transition:transform .25s ease;border-right:1px solid var(--ludium-ink);overflow-y:auto}.lp-sb.open{transform:translateX(0);box-shadow:8px 0 24px rgba(0,0,0,.18)}.lp-sb .sb-inner{position:static;padding:20px 18px 24px}.lp-resize{display:none}.lp-main{padding:22px 18px 80px;max-width:100%}.lp-plate{padding-bottom:18px;margin-bottom:20px}.lp-plate h1{font-size:32px}.lp-plate .sub{font-size:15.5px}.lp-plate .kicker{font-size:9.5px;gap:10px}.lp-guide{grid-template-columns:1fr;gap:10px;padding:12px 0}.lp-guide .label:last-child{display:none}.lp-vmeta{flex-direction:column;gap:4px;align-items:flex-start}.lp-nb-head h2{font-size:22px}.lp-foot{gap:12px}.lp-complete{width:100%;justify-content:center}.lp-nav{width:100%;justify-content:space-between;gap:12px;font-size:14px}.lp-nav .link em{display:none}.lp-problem .topline{flex-direction:column;align-items:flex-start;gap:6px}.lp-problem h2.ptitle{font-size:26px}.lp-problem .stmt{font-size:16.5px}.lp-problem .stmt .math{font-size:18px}.lp-plist{margin:0}.lp-pitem{width:100%;border-right:0;border-bottom:1px solid var(--ludium-rule);padding:10px 4px}.lp-pitem:last-child{border-bottom:0}.lp-alabel{flex-direction:column;align-items:flex-start;gap:10px}.lp-toggle{align-self:flex-start}.lp-actions{flex-direction:column;align-items:stretch}.lp-actions .attempts{justify-content:center}.lp-actions .btns{width:100%}.lp-actions .btns .lp-btn{flex:1;min-height:44px;justify-content:center;font-size:15px}.lp-pnav{font-size:14px;padding:14px 0}.lp-preview,.lp-textarea{min-height:160px;font-size:14.5px}.lp-calc-grid button{padding:14px 0;font-size:15px}.lp-formula-row{flex-direction:column}.lp-formula-insert{min-height:44px;justify-content:center}.lp-calc{grid-template-columns:1fr}.lp-calc-insert{min-height:44px;justify-content:center}.lp-practice-settings{grid-template-columns:1fr;gap:16px;padding:16px 0}.lp-practice-settings .row-label{padding-top:0}.lp-practice-row{padding-bottom:14px;margin-bottom:14px}.lp-diff-choice{gap:6px}.lp-diff-choice button{padding:10px 4px;min-height:72px}.lp-generate{flex-direction:column;align-items:stretch}.lp-generate .btn-big{width:100%;justify-content:center;min-height:52px;font-size:16px}.lp-generate .aside{text-align:center}.lp-practice-empty{padding:40px 20px}.lp-practice-empty h3{font-size:22px}.lp-practice-loading{padding:50px 20px}}@media (max-width:520px){.lp-plate h1{font-size:28px}.lp-plate .sub{font-size:14.5px}.lp-video .play{width:54px;height:54px}.lp-video .play:after{border-left-width:14px;border-top-width:10px;border-bottom-width:10px}.picker{top:auto;bottom:12px;font-size:10.5px}.picker button{padding:6px 10px}}