@font-face{font-family:InterVar;src:url(/fonts/InterVariable.woff2) format("woff2");font-weight:100 900;font-display:swap}@font-face{font-family:LibreBask;src:url(/fonts/LibreBaskerville-Italic.woff2) format("woff2");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:GeistMono;src:url(/fonts/GeistMono.woff2) format("woff2");font-display:swap}:root{--white: oklch(1 0 0);--blue: oklch(.62 .21 260);--blue-2: oklch(.7 .16 254);--gray-1: oklch(.993 0 0);--gray-2: oklch(.982 0 0);--gray-3: oklch(.961 0 0);--gray-4: oklch(.94 0 0);--gray-5: oklch(.918 0 0);--gray-6: oklch(.894 0 0);--gray-7: oklch(.865 0 0);--gray-8: oklch(.818 0 0);--gray-9: oklch(.649 0 0);--gray-10: oklch(.606 0 0);--gray-11: oklch(.503 0 0);--gray-12: oklch(.375 0 0);--gray-13: oklch(.2 0 0);--bg: var(--gray-1);--surface: var(--gray-4);--surface-2: var(--gray-6);--border: oklch(0 0 0 / .1);--faint: var(--gray-9);--muted: var(--gray-11);--accent: var(--blue);--accent-2: var(--blue-2);--ink-soft: var(--gray-12);--ink: var(--gray-13);--on-ink: var(--white);--sans:"InterVar",-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;--display:var(--sans);--quote:"LibreBask",Georgia,"Times New Roman",serif;--mono:"GeistMono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 24px;--space-6: 32px;--space-7: 40px;--space-8: 48px;--space-9: 56px;--space-10: 64px;--space-11: 72px;--text-xs: 12px;--text-sm: 14px;--text-base: 16px;--text-lg: 20px;--text-xl: 24px;--text-2xl: 32px;--text-3xl: 40px;--radius-sm: 8px;--radius-md: 12px;--radius-lg: 16px;--radius-pill: 999px;--measure: 680px;--page: 1040px;--gutter: var(--space-5)}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background-color:var(--bg);background-image:url(/paper.svg);color:var(--ink-soft);font-family:var(--sans);font-size:var(--text-base);line-height:1.55;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;font-feature-settings:"cv01";min-height:100dvh;display:flex;flex-direction:column}a{color:inherit}.topnav{display:flex;align-items:center;gap:var(--space-4);flex-wrap:wrap;padding:var(--space-4) var(--space-5);background:transparent}.brand{font-family:var(--display);font-weight:600;font-size:var(--text-base);color:var(--ink);text-decoration:none;letter-spacing:-.01em}.navlinks{display:flex;gap:var(--space-4);flex-wrap:wrap}.nav-link{font-family:var(--display);font-weight:500;font-size:var(--text-sm);color:var(--muted);text-decoration:none;transition:color .15s}.nav-link:hover,.nav-link.active{color:var(--ink)}.nav-link.signout{margin-left:auto}.nav-auth{margin-left:auto;display:flex;align-items:center;gap:var(--space-5)}.nav-link.nav-buy{color:var(--on-ink);background:var(--ink);padding:var(--space-2) var(--space-4);border-radius:var(--radius-pill);transition:background .15s}.nav-link.nav-buy:hover{color:var(--on-ink);background:var(--ink-soft)}.wrap{width:100%;max-width:calc(var(--measure) + var(--gutter) * 2);margin:0 auto;padding:var(--space-9) var(--gutter) var(--space-7)}.sheet-page{width:100%;max-width:var(--page);margin:0 auto;padding:var(--space-7) var(--gutter) var(--space-11)}.sheet-page .back{margin-bottom:var(--space-5)}.sheet{background:var(--white);border-radius:var(--radius-sm);padding:var(--space-10) var(--space-11);box-shadow:0 1px 3px #0000000d,0 16px 40px #0000000f}.sheet-inner{max-width:var(--measure);margin:0 auto}@media(max-width:640px){.sheet-page{padding:var(--space-5) 0 var(--space-9)}.sheet-page .back{margin:0 var(--space-5) var(--space-5)}.sheet{border-radius:0;padding:var(--space-6) var(--space-5);box-shadow:none}}.tip{display:block;font-family:var(--display);font-weight:500;font-size:var(--text-sm);line-height:1.4;color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,transparent);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);margin:var(--space-4) 0 0}.col-head h1,.article-head h1{font-family:var(--display);font-weight:600;letter-spacing:-.02em;color:var(--ink);font-size:clamp(var(--text-xl),3.5vw,var(--text-2xl));line-height:1.1;margin:0 0 var(--space-4)}.intro{font-size:var(--text-base);line-height:1.55;color:var(--muted);margin:0 0 var(--space-2)}.back{display:inline-block;font-family:var(--display);font-weight:500;color:var(--muted);text-decoration:none;font-size:var(--text-sm);margin-bottom:var(--space-6);transition:color .15s}.back:hover{color:var(--ink)}.entries{display:flex;flex-direction:column;gap:var(--space-1);margin-top:var(--space-4)}.entry{display:flex;align-items:baseline;gap:var(--space-4);padding:var(--space-3) var(--space-4);margin:0 calc(var(--space-4) * -1);border-radius:var(--radius-md);text-decoration:none;transition:background .15s}.entry:hover{background:var(--white);box-shadow:inset 0 0 0 1px var(--border)}.entry-num{font-family:var(--mono);font-size:var(--text-sm);color:var(--faint);flex:none;position:relative;top:-1px}.entry-body{display:flex;flex-direction:column;gap:var(--space-1);flex:1;min-width:0}.entry-title{font-family:var(--display);font-size:var(--text-base);font-weight:500;color:var(--ink)}.entry-desc{font-size:var(--text-sm);color:var(--muted)}.entry{position:relative}.entry.is-done{padding-right:var(--space-10)}.entry-check{display:none;position:absolute;right:var(--space-4);top:50%;transform:translateY(-50%);width:var(--space-5);height:var(--space-5);border-radius:var(--radius-pill);background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent);align-items:center;justify-content:center}.entry.is-done .entry-check{display:flex}.entry-check svg{width:var(--space-3);height:var(--space-3)}.module-label{font-family:var(--display);font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.08em;color:var(--faint);margin:var(--space-6) 0 var(--space-2)}.article-head{margin-bottom:var(--space-5)}.lesson-num{display:block;font-family:var(--mono);font-size:var(--text-xs);color:var(--faint);margin-bottom:var(--space-2)}.prose{color:var(--ink-soft)}.prose h2{font-family:var(--display);font-weight:600;font-size:var(--text-xl);line-height:1.2;margin:var(--space-7) 0 var(--space-3);letter-spacing:-.02em;color:var(--ink)}.prose h3{font-family:var(--display);font-weight:600;font-size:var(--text-base);margin:var(--space-6) 0 var(--space-2);color:var(--ink)}.prose p{margin:0 0 var(--space-4)}.prose strong{color:var(--ink);font-weight:600}.prose ul,.prose ol{margin:0 0 var(--space-4);padding-left:var(--space-5)}.prose li{margin:0 0 var(--space-2)}.prose a{color:var(--ink);text-decoration:underline;text-decoration-color:var(--faint);text-underline-offset:3px;text-decoration-thickness:1px;transition:text-decoration-color .15s,color .15s}.prose a:hover{text-decoration-color:var(--ink)}.prose a[href^=http]{color:var(--accent);text-decoration-color:color-mix(in srgb,var(--accent) 45%,transparent)}.prose a[href^=http]:hover{text-decoration-color:var(--accent)}.prose img{max-width:100%;height:auto;border-radius:var(--radius-md);display:block;margin:0 0 var(--space-4)}.prose blockquote{margin:var(--space-5) 0;padding:0;font-family:var(--quote);font-style:italic;font-size:var(--text-lg);line-height:1.4;color:var(--ink)}.prose blockquote p{margin:0 0 var(--space-2);color:var(--ink)}.prose table{width:100%;border-collapse:collapse;margin:0 0 var(--space-4);font-size:var(--text-sm)}.prose th{font-family:var(--display);font-weight:600;color:var(--ink);text-align:left;padding:var(--space-2) var(--space-3) var(--space-2) 0}.prose td{padding:var(--space-2) var(--space-3) var(--space-2) 0;color:var(--ink-soft);border-top:1px solid var(--border)}.prose :not(pre)>code{font-family:var(--mono);font-size:.88em;background:var(--surface-2);padding:2px 6px;border-radius:var(--radius-sm);color:var(--ink)}.prose pre{margin:0 0 var(--space-4);padding:var(--space-4);background:var(--ink)!important;border-radius:var(--radius-md);overflow-x:auto;font-size:var(--text-sm);line-height:1.55}.prose pre code{font-family:var(--mono);white-space:pre}.btn,button.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);font-family:var(--display);font-weight:500;font-size:var(--text-sm);padding:var(--space-3) var(--space-5);border:0;border-radius:var(--radius-pill);background:var(--ink);color:var(--on-ink);cursor:pointer;text-decoration:none;transition:background .15s,transform .1s}.btn:hover{background:var(--ink-soft)}.btn:active{transform:translateY(1px)}.btn-accent{background:var(--accent)}.btn-accent:hover{background:var(--accent-2)}.demo{margin:var(--space-5) 0;border-radius:var(--radius-lg);padding:var(--space-4);background:var(--surface)}.sheet{container-type:inline-size}.sheet .demo{--breakout:max(0px, (100cqi - var(--measure)) / 2);margin-left:calc(-1 * var(--breakout));margin-right:calc(-1 * var(--breakout))}.demo .demo-note{font-size:var(--text-sm);color:var(--muted);max-width:65ch;margin:0 auto var(--space-3);text-align:center;text-wrap:balance}.demo canvas{width:100%;height:auto;border-radius:var(--radius-md);display:block}.demo-controls{display:grid;grid-template-columns:repeat(auto-fit,minmax(192px,1fr));gap:var(--space-2) var(--space-4);margin-top:var(--space-4)}.demo-controls label{display:flex;align-items:center;gap:var(--space-2);font-size:var(--text-sm);color:var(--ink-soft)}.demo-controls input[type=range]{flex:1;accent-color:var(--accent)}.demo-controls input[type=checkbox]{accent-color:var(--accent)}.demo-controls output{min-width:var(--space-6);text-align:right;font-family:var(--mono);font-size:var(--text-xs);color:var(--muted)}.demo-stage{min-height:120px;display:flex;align-items:center;justify-content:center;background:var(--bg);border-radius:var(--radius-md);padding:var(--space-4);position:relative;overflow:hidden}.lesson-nav{display:flex;justify-content:space-between;gap:var(--space-3);margin-top:var(--space-5)}.lesson-nav-link{display:flex;flex-direction:column;gap:var(--space-1);max-width:48%;padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);text-decoration:none;transition:background .15s,box-shadow .15s}.lesson-nav-link.next{margin-left:auto;text-align:right}.lesson-nav-link:hover{background:var(--white);box-shadow:inset 0 0 0 1px var(--border)}.lesson-nav-label{font-family:var(--display);font-size:var(--text-xs);font-weight:500;color:var(--faint)}.lesson-nav-title{font-family:var(--display);font-size:var(--text-sm);font-weight:500;color:var(--ink)}.site-footer{width:100%;margin-top:auto;padding:var(--space-8) var(--gutter) var(--space-5);text-align:center}.site-footer p{font-size:var(--text-xs);color:var(--faint);margin:0;line-height:1.55}.foot-link{color:var(--muted);text-decoration:none}.foot-link:hover{color:var(--ink)}.cl-timeline{margin-top:var(--space-8)}.cl-group{margin-bottom:var(--space-8)}.cl-date{font-family:var(--display);font-size:var(--text-xs);font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--faint);margin:0 0 var(--space-4);padding-bottom:var(--space-2);border-bottom:1px solid var(--border)}.cl-items{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-5)}.cl-item{display:flex;gap:var(--space-4);align-items:flex-start}.cl-tag{flex:none;width:76px;text-align:center;font-family:var(--display);font-size:var(--text-xs);font-weight:500;color:var(--muted);background:var(--surface-2);border-radius:var(--radius-pill);padding:var(--space-1) 0;letter-spacing:.02em}.cl-tag-new{color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,transparent)}.cl-body{flex:1;min-width:0}.cl-title{font-family:var(--display);font-size:var(--text-base);font-weight:500;color:var(--ink);margin:0 0 var(--space-1);display:flex;align-items:baseline;gap:var(--space-2);flex-wrap:wrap}.cl-detail{font-size:var(--text-sm);line-height:1.55;color:var(--muted);margin:0}.cl-private{font-family:var(--mono);font-size:10px;font-weight:400;color:var(--faint);background:var(--surface-2);border-radius:var(--radius-sm);padding:1px var(--space-1)}@media(max-width:560px){.cl-item{gap:var(--space-3)}.cl-tag{width:64px;font-size:10px}}@media(max-width:640px){.wrap{padding:var(--space-7) var(--gutter) var(--space-6)}.topnav{padding:var(--space-4);gap:var(--space-4)}body{font-size:var(--text-sm);line-height:1.5}.brand{font-size:var(--text-sm)}.col-head h1,.article-head h1{font-size:var(--text-xl);margin:0 0 var(--space-3)}.intro{font-size:var(--text-sm)}.back{font-size:var(--text-xs);margin-bottom:var(--space-5)}.entry-title{font-size:var(--text-sm)}.entry-desc{font-size:var(--text-xs)}.prose h2{font-size:var(--text-lg);margin:var(--space-6) 0 var(--space-2)}.prose h3{font-size:var(--text-sm);margin:var(--space-5) 0 var(--space-2)}.prose p,.prose li{font-size:var(--text-sm)}.prose blockquote{font-size:var(--text-base)}.prose pre{font-size:var(--text-xs)}.prose :not(pre)>code{font-size:.85em}}
