@font-face{font-family:Title KR;src:url(/blog/fonts/title.woff2)format("woff2");font-weight:400 620;font-display:swap}@font-face{font-family:Body KR;src:url(/blog/fonts/body.woff2)format("woff2");font-weight:400 700;font-display:swap}@font-face{font-family:Code UI;src:url(/blog/fonts/code-400-latin.woff2)format("woff2");font-weight:400;font-display:swap}@font-face{font-family:Code UI;src:url(/blog/fonts/code-600-latin.woff2)format("woff2");font-weight:500 700;font-display:swap}@font-face{font-family:Code KR;src:url(/blog/fonts/code-400-latin.woff2)format("woff2");font-weight:400;font-display:swap;unicode-range:U+0-2FF,U+2000-27BF,U+2B??,U+FFFD}@font-face{font-family:Code KR;src:url(/blog/fonts/code-400-hangul.woff2)format("woff2");font-weight:400;font-display:swap;unicode-range:U+11??,U+3000-303F,U+3130-318F,U+AC00-D7A3,U+FF00-FFEF}@font-face{font-family:Code KR;src:url(/blog/fonts/code-600-latin.woff2)format("woff2");font-weight:500 700;font-display:swap;unicode-range:U+0-2FF,U+2000-27BF,U+2B??,U+FFFD}@font-face{font-family:Code KR;src:url(/blog/fonts/code-600-hangul.woff2)format("woff2");font-weight:500 700;font-display:swap;unicode-range:U+11??,U+3000-303F,U+3130-318F,U+AC00-D7A3,U+FF00-FFEF}:root{--bg:#141413;--bg-2:#1c1b19;--fg:#f0eee6;--text:#dddad0;--dim:#a3a19b;--faint:#817e77;--rule:#2b2a27;--claude:#d97757;--ok:#4eba65;--lit:color-mix(in srgb, var(--claude) 13%, transparent);color-scheme:dark;--mono:"Code KR", "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, "Body KR", monospace;--ui:"Code UI", "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, "Body KR", monospace;--sans:"Body KR", -apple-system, BlinkMacSystemFont, "Apple SD Gothic Neo", "Malgun Gothic", system-ui, sans-serif;--serif:"Title KR", "Noto Serif KR", AppleMyungjo, serif;--bar-h:42px;--status-h:30px;--gutter:clamp(18px, 5vw, 40px);--rail-w:13.5rem;--margin-w:17rem;--gap-m:3rem}[data-theme=light]{--bg:#faf9f5;--bg-2:#f0eee6;--fg:#141413;--text:#2a2925;--dim:#625f59;--faint:#75736d;--rule:#e2ded4;--claude:#b25936;--ok:#2c7a39;color-scheme:light}[data-theme=dark]{--bg:#141413;--bg-2:#1c1b19;--fg:#f0eee6;--text:#dddad0;--dim:#a3a19b;--faint:#817e77;--rule:#2b2a27;--claude:#d97757;--ok:#4eba65;color-scheme:dark}@media (prefers-color-scheme:light){:root:not([data-theme=dark]){--bg:#faf9f5;--bg-2:#f0eee6;--fg:#141413;--text:#2a2925;--dim:#625f59;--faint:#75736d;--rule:#e2ded4;--claude:#b25936;--ok:#2c7a39;color-scheme:light}}*,:before,:after{box-sizing:border-box}html{background:var(--bg);-webkit-text-size-adjust:100%}body{min-height:100dvh;font:400 1rem/1.7 var(--sans);color:var(--fg);background:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-synthesis-weight:none;margin:0}:lang(ko){word-break:keep-all;line-break:strict}a{color:inherit}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;padding:0}:focus-visible{outline:2px solid var(--claude);outline-offset:2px;border-radius:2px}::selection{background:color-mix(in srgb, var(--claude) 32%, transparent)}[data-lang=ko] [lang=en]:not(.prose,.prose [lang]),[data-lang=en] [lang=ko]:not(.prose,.prose [lang]){display:none!important}.skip{z-index:20;font:12px var(--ui);background:var(--bg-2);border:1px solid var(--rule);padding:6px 10px;position:absolute;top:-40px;left:8px}.skip:focus{top:8px}.bar{z-index:8;height:var(--bar-h);padding:0 var(--gutter);font:400 12px/1.7 var(--ui);color:var(--dim);background:color-mix(in srgb, var(--bg) 88%, transparent);backdrop-filter:blur(8px);border-bottom:1px solid var(--rule);justify-content:space-between;align-items:center;gap:16px;display:flex;position:sticky;top:0}.bar__path{white-space:nowrap;gap:.15em;min-width:0;display:flex;overflow:hidden}.bar__path a{color:var(--dim);text-decoration:none}.bar__path a:hover{color:var(--fg)}.bar__path .sep{color:var(--faint)}.bar__path>*{flex:none}.bar__path .here{color:var(--fg)}.bar__path .here:last-child{text-overflow:ellipsis;flex:0 auto;min-width:0;overflow:hidden}@media screen and (width<=640px){.bar__path .sep:has(+.here:not(:last-child)),.bar__path .here:not(:last-child){display:none}}.bar__ctl{flex:none;align-items:center;gap:3px;display:flex}.bar__ctl button{color:var(--dim);border:1px solid #0000;border-radius:3px;padding:2px 8px;transition:color .15s,border-color .15s,background-color .15s}.bar__ctl button:hover{color:var(--fg)}.bar__ctl button[aria-pressed=true]{color:var(--fg);border-color:var(--rule);background:var(--bg-2)}.bar__sep{color:var(--faint);padding:0 5px}.home{max-width:54rem;padding:clamp(48px, 9vh, 104px) var(--gutter) 120px;margin:0 auto}.home__cwd{font:400 12.5px/1.7 var(--ui);color:var(--faint);margin:0 0 18px}.home__cwd b{color:var(--claude);font-weight:400}.home__title{max-width:16em;font:560 clamp(2.1rem, 1.3rem + 3.4vw, 3.6rem) / 1.12 var(--serif);letter-spacing:-.025em;text-wrap:balance;margin:0}.home__lede{max-width:36em;color:var(--dim);text-wrap:pretty;margin:22px 0 0;font-size:1.0625rem;line-height:1.75}.home__links{font:400 12.5px/1.7 var(--ui);flex-wrap:wrap;gap:6px 18px;margin:26px 0 0;padding:0;list-style:none;display:flex}.home__links a{color:var(--dim);text-decoration:underline;text-decoration-color:var(--rule);text-underline-offset:3px}.home__links a:hover{color:var(--fg);text-decoration-color:var(--claude)}.tool{font:400 13.5px/1.7 var(--ui);margin:72px 0 0;padding-left:2ch;position:relative}.tool:before{content:"⏺";color:var(--ok);position:absolute;left:0}.tool__name{font-weight:600}.tool__arg{color:var(--dim)}.out{font:400 13px/1.7 var(--ui);color:var(--dim);margin:4px 0 0;padding-left:4ch;position:relative}.out:before{content:"";border-left:1px solid var(--faint);border-bottom:1px solid var(--faint);width:.7ch;height:.78em;position:absolute;top:.38em;left:2ch}.chips{flex-wrap:wrap;gap:6px;margin:14px 0 0 4ch;display:flex}.chip{font:400 12.5px/1.6 var(--ui);color:var(--dim);border:1px solid var(--rule);white-space:nowrap;border-radius:3px;padding:3px 9px;transition:color .15s,border-color .15s,background-color .15s}.chip b{color:var(--faint);font-variant-numeric:tabular-nums;margin-left:7px;font-weight:400}.chip:hover{color:var(--fg);border-color:var(--dim)}.chip[aria-pressed=true]{color:var(--fg);background:var(--bg-2);border-color:var(--dim)}.chip[aria-pressed=true] b{color:var(--claude)}.chip--more{font-variant-numeric:tabular-nums;border-style:dashed}.chip--more[aria-expanded=true] .chip--more__n,.chip--more[aria-expanded=false] .chip--more__less{display:none}.chips .chip.is-in{animation:.2s cubic-bezier(.2,.8,.2,1) both chip-in;animation-delay:calc(var(--i,0) * 30ms)}@keyframes chip-in{0%{opacity:0;transform:translate(-4px)}}.sr-only{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.chip--cal{anchor-name:--post-calendar;align-items:center;gap:7px;display:inline-flex}.chip--date{color:var(--fg);background:var(--bg-2);border-color:var(--claude)}.chip--date b{color:var(--claude)}.cal{width:min(21.5rem,100vw - 24px);color:var(--fg);background:var(--bg-2);border:1px solid var(--rule);opacity:1;transition:opacity .16s, transform .16s, overlay .16s allow-discrete, display .16s allow-discrete;border-radius:8px;margin:auto;padding:14px 16px 12px;transform:none;box-shadow:0 22px 70px #0006}@starting-style{.cal:popover-open{opacity:0;transform:translateY(-6px)}}@supports (anchor-name:--a){.cal{position-anchor:--post-calendar;inset:auto;top:anchor(bottom);left:anchor(left);position-try-fallbacks:flip-block, flip-inline;margin:8px 0 0}}.cal__call{font:400 12.5px/1.6 var(--ui);color:var(--dim);margin:0 0 12px;padding-left:2ch;position:relative}.cal__call:before{content:"⏺";color:var(--ok);position:absolute;left:0}.cal__call .tool__name{color:var(--fg)}.cal__year{border-bottom:1px solid var(--rule);grid-template-columns:repeat(12,1fr);gap:3px;padding-bottom:10px;display:grid}.cal__m{border-radius:3px;align-content:end;justify-items:center;gap:3px;height:46px;padding:0;display:grid}.cal__m i{width:62%;height:calc(2px + var(--h) * 26px);background:var(--rule);border-radius:1.5px;transition:background-color .15s,height .25s cubic-bezier(.2,.8,.2,1)}.cal__m.has i{background:var(--dim)}.cal__m span{font:400 10.5px/1 var(--ui);color:var(--faint);font-variant-numeric:tabular-nums}.cal__m.is-on span{color:var(--fg)}.cal__m.is-on.has i{background:var(--claude)}.cal__m:not(:disabled):hover i{background:var(--fg)}.cal__m:disabled{cursor:default;opacity:.45}.cal__head{justify-content:space-between;align-items:center;margin:10px 0 4px;display:flex}.cal__title{font:560 1.0625rem/1.3 var(--serif);border:1px solid #0000;border-radius:4px;padding:4px 10px}.cal__title:hover,.cal__title[aria-pressed=true]{border-color:var(--rule);background:color-mix(in srgb, var(--fg) 5%, var(--bg-2))}.cal__nav{width:30px;height:30px;font:400 18px/1 var(--ui);color:var(--dim);border-radius:4px}.cal__nav:not(:disabled):hover{color:var(--fg);background:color-mix(in srgb, var(--fg) 6%, var(--bg-2))}.cal__nav:disabled{color:var(--rule);cursor:default}.cal__grid{border-collapse:collapse;table-layout:fixed;width:100%}.cal__grid th{font:400 11px/1 var(--ui);color:var(--faint);padding:6px 0 4px}.cal__grid td{text-align:center;padding:1px}.cal__day{aspect-ratio:1;width:100%;max-width:2.5rem;font:400 12.5px/1 var(--ui);color:color-mix(in srgb, var(--faint) 75%, transparent);font-variant-numeric:tabular-nums;border:1px solid #0000;border-radius:5px;place-items:center;display:inline-grid;position:relative}.cal__day.has{color:var(--fg);background:color-mix(in srgb, var(--fg) 5%, var(--bg-2));font-weight:600;transition:border-color .15s,background-color .15s,transform .15s}.cal__day.has:hover{border-color:var(--dim);transform:translateY(-1px)}.cal__day.has[aria-pressed=true]{border-color:var(--claude);background:color-mix(in srgb, var(--claude) 14%, var(--bg-2))}.cal__day i{width:calc(var(--n) * 5px);background:radial-gradient(circle, var(--claude) 1.4px, transparent 1.9px) 0 50% / 5px 3px repeat-x;height:3px;position:absolute;bottom:5px;left:50%;translate:-50%}.cal__day.is-today{border-color:var(--faint)}.cal__foot{font:400 12px/1.6 var(--sans);color:var(--dim);border-top:1px solid var(--rule);margin:10px 0 0;padding-top:10px}@media screen and (width<=640px){.cal.cal{width:100%;padding-bottom:calc(14px + env(safe-area-inset-bottom));border-width:1px 0 0;border-radius:12px 12px 0 0;margin:0;position:fixed;inset:auto 0 0}@starting-style{.cal.cal:popover-open{transform:translateY(24px)}}.chips{scrollbar-width:none;flex-wrap:nowrap;margin-left:0;overflow-x:auto;mask-image:linear-gradient(90deg,#000 88%,#0000)}}.year{margin:40px 0 0}.year__label{font:500 12.5px/1.7 var(--ui);color:var(--faint);font-variant-numeric:tabular-nums;align-items:center;gap:14px;margin:0 0 6px;display:flex}.year__label:after{content:"";border-top:1px solid var(--rule);flex:1}.entries{margin:0;padding:0;list-style:none}.entry a{color:inherit;border-bottom:1px solid var(--rule);grid-template-columns:4.2rem minmax(0,1fr) 12.5rem;grid-template-areas:"date title cover"".desc cover"".meta cover";align-items:start;gap:6px 24px;padding:24px 0 26px;text-decoration:none;display:grid}.entry__date,.entry__meta{font:400 12.5px/1.7 var(--ui);color:var(--faint);font-variant-numeric:tabular-nums}.entry__date{grid-area:date;padding-top:.55em}.entry__meta{grid-area:meta}.entry__title{font:600 1.55rem/1.3 var(--serif);letter-spacing:-.015em;text-wrap:balance;grid-area:title;margin:0;transition:color .15s}.entry__desc{max-width:40em;color:var(--dim);text-wrap:pretty;grid-area:desc;margin:0;line-height:1.7}.entry .cover{grid-area:cover;transition:border-color .15s}.entry a:hover .entry__title{color:var(--claude)}.entry a:hover .cover{border-color:var(--dim)}.entry__draft{font:500 11px/1.6 var(--ui);color:var(--claude);vertical-align:.35em;border:1px solid;border-radius:3px;margin-left:8px;padding:1px 6px}@media screen and (width<=640px){.entry a{grid-template-columns:minmax(0,1fr) 7.5rem;grid-template-areas:"date cover""title cover""desc desc""meta meta";column-gap:16px}.entry__date{padding-top:0}.entry__title{font-size:1.35rem}}.post{--measure:42rem;grid-template-columns:[full-start] minmax(var(--gutter), 1fr) [text-start] minmax(0, var(--measure)) [text-end] minmax(var(--gutter), 1fr) [full-end];padding-bottom:calc(var(--status-h) + 48px);grid-template-rows:auto 1fr auto;display:grid}.post[lang=en]{--measure:38.5rem}.post>*{grid-column:text}@media screen and (width>=1100px){.post{grid-template-columns:[full-start] minmax(var(--gutter), 1fr) [text-start] minmax(0, var(--measure)) [text-end] var(--gap-m) [margin-start] var(--margin-w) [margin-end] minmax(var(--gutter), 1fr) [full-end]}}@media screen and (width>=1400px){.post{grid-template-columns:[full-start] minmax(var(--gutter), 1fr) [rail-start] var(--rail-w) [rail-end] 3.5rem [text-start] minmax(0, var(--measure)) [text-end] var(--gap-m) [margin-start] var(--margin-w) [margin-end] minmax(var(--gutter), 1fr) [full-end]}}.post__head{padding:clamp(40px,8vh,88px) 0 40px}@media screen and (width>=1100px){.post__head{grid-column:text-start/margin-end}}.post__cwd{font:400 12.5px/1.7 var(--ui);color:var(--faint);margin:0 0 20px}.post__cwd a{color:var(--dim);text-decoration:none}.post__cwd a:hover{color:var(--fg)}.post__title{max-width:19em;font:560 clamp(2rem, 1.25rem + 3vw, 3.25rem) / 1.16 var(--serif);letter-spacing:-.022em;text-wrap:balance;margin:0}.post__dek{max-width:38em;color:var(--dim);text-wrap:pretty;margin:20px 0 0;font-size:1.1875rem;line-height:1.65}.post__meta{font:400 12.5px/1.7 var(--ui);color:var(--faint);font-variant-numeric:tabular-nums;border-top:1px solid var(--rule);flex-wrap:wrap;gap:4px 14px;margin:26px 0 0;padding:14px 0 0;display:flex}.post__meta a{color:var(--dim)}.post__meta a:hover{color:var(--claude)}.prose{color:var(--text);text-wrap:pretty;font-size:1.125rem;line-height:1.85;position:relative}.prose:lang(en){hyphens:auto;line-height:1.72}.prose:lang(ko){letter-spacing:-.005em}@media screen and (width<=600px){.prose{font-size:1.0625rem}}.prose>*,.walk__steps>.step>*{margin-block:0}.prose>*+*,.step>*+*{margin-top:1.15em}.prose h2,.prose h3,.prose h4{color:var(--fg);scroll-margin-top:calc(var(--bar-h) + 24px);text-wrap:balance}.prose>h2{font:600 1.6rem/1.3 var(--serif);letter-spacing:-.015em;margin-top:2.6em;position:relative}.prose>h2:before{content:"§" counter(section);counter-increment:section;font:400 12.5px/1 var(--ui);color:var(--faint);letter-spacing:0;position:absolute;top:.55em;right:calc(100% + 18px)}.prose{counter-reset:section}@media screen and (width<=860px){.prose>h2:before{margin-bottom:10px;display:block;position:static}}.prose>h3{font:700 1.2rem/1.45 var(--sans);letter-spacing:-.01em;margin-top:2em}.prose>h4{font:600 .9375rem/1.6 var(--ui);color:var(--dim);margin-top:1.8em}.prose h2+*,.prose h3+*,.prose h4+*{margin-top:.7em}.prose .heading-link{font:400 .75em var(--ui);color:var(--faint);opacity:0;margin-left:.35em;text-decoration:none;transition:opacity .15s}.prose :is(h2,h3):hover .heading-link,.prose .heading-link:focus-visible{opacity:1}.prose a{color:var(--fg);text-decoration:underline;text-decoration-color:color-mix(in srgb, var(--claude) 55%, transparent);text-underline-offset:.22em;text-decoration-thickness:1px;transition:color .15s,text-decoration-color .15s}.prose a:hover{color:var(--claude);text-decoration-color:var(--claude)}.prose strong{color:var(--fg);font-weight:650}.prose em:lang(ko){font-style:normal;font-weight:600}.prose mark{color:inherit;background:var(--lit);border-radius:2px;padding:0 .15em}.prose ul,.prose ol{padding-left:1.4em}.prose li+li,.prose li>ul,.prose li>ol{margin-top:.4em}.prose ul>li::marker{content:"–  ";color:var(--faint)}.prose ol>li::marker{font:400 .8em var(--ui);color:var(--faint);font-variant-numeric:tabular-nums}.prose blockquote{color:var(--dim);border-left:2px solid var(--rule);margin-inline:0;padding:.1em 0 .1em 1.2em}.prose blockquote>*+*{margin-top:.8em}.prose hr{text-align:center;height:auto;color:var(--faint);font:400 13px/1 var(--ui);letter-spacing:.6em;border:0;margin:2.6em 0}.prose hr:after{content:"···"}.prose :not(pre)>code{font:400 .84em/1 var(--mono);color:var(--fg);background:var(--bg-2);border:1px solid var(--rule);overflow-wrap:anywhere;word-break:normal;border-radius:3px;padding:.12em .36em}.prose kbd{font:500 .8em/1 var(--mono);color:var(--fg);background:var(--bg-2);border:1px solid var(--rule);border-bottom-width:2px;border-radius:4px;padding:.1em .45em}.prose img{cursor:zoom-in;border-radius:6px;max-width:100%;height:auto;display:block}.prose figure{margin-inline:0}.prose video{background:var(--bg-2);border:1px solid var(--rule);border-radius:6px;max-width:100%;height:auto;display:block}.prose figcaption{font:400 12.5px/1.7 var(--ui);color:var(--faint);text-align:center;margin-top:10px}.table-wrap{-webkit-overflow-scrolling:touch;overflow-x:auto}.prose table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;font-size:.9375rem;line-height:1.6}.prose th{font:500 12px/1.6 var(--ui);color:var(--dim);text-align:left;border-bottom:1px solid var(--dim);white-space:nowrap;padding:8px 14px 8px 0}.prose td{border-bottom:1px solid var(--rule);vertical-align:top;padding:9px 14px 9px 0}.prose td[align=right],.prose th[align=right]{text-align:right}.prose .katex{font-size:1.06em}.prose .katex-display{margin-block:1.4em 0;padding:.3em 0;overflow:auto hidden}.prose .katex-display>.katex{font-size:1.12em}.prose .expressive-code figure{position:relative}.expressive-code .copy{z-index:2;font:400 11.5px/1.6 var(--ui);color:var(--dim);background:color-mix(in srgb, var(--bg-2) 88%, transparent);border:1px solid var(--rule);opacity:0;border-radius:3px;padding:2px 8px;transition:opacity .15s,color .15s,border-color .15s;position:absolute;top:7px;right:8px}.expressive-code figure:hover .copy,.expressive-code .copy:focus-visible,.expressive-code .copy.is-done{opacity:1}.expressive-code .copy:hover{color:var(--fg);border-color:var(--dim)}.expressive-code .copy.is-done{color:var(--claude);border-color:color-mix(in srgb, var(--claude) 45%, transparent)}@media (hover:none){.expressive-code .copy{opacity:.85}}.prose .expressive-code{margin-top:1.5em}.prose .expressive-code+p,.prose .diagram+p{margin-top:1.4em}.prose sup a[data-footnote-ref]{font:500 .7em var(--ui);color:var(--claude);padding:0 .15em;text-decoration:none}.prose .footnotes{color:var(--dim);border-top:1px solid var(--rule);margin-top:4em;padding-top:18px;font-size:.9375rem;line-height:1.7}.prose .footnotes h2{font:500 12px/1.7 var(--ui);color:var(--faint);margin:0 0 10px}.prose .footnotes h2:before{content:none}.prose .footnotes ol{padding-left:1.2em}.sidenote{display:none}@media screen and (width>=1100px){.has-sidenotes .footnotes{display:none}.sidenote{left:calc(100% + var(--gap-m));width:var(--margin-w);color:var(--dim);letter-spacing:0;font-size:.84rem;line-height:1.65;display:block;position:absolute}.sidenote>p{margin:0}.sidenote>p:first-of-type{display:inline}.sidenote__n{font:500 11px var(--ui);color:var(--claude);margin-right:6px}.sidenote [data-footnote-backref]{display:none}.sidenote.is-on{color:var(--fg)}.sidenote--inline{border-top:1px solid var(--rule);width:auto;margin-top:.9em;padding-top:.6em;position:static}}.walk,.walk+*{margin-top:2em}.walk__fig{top:var(--bar-h);z-index:2;background:var(--bg);padding:10px 0;position:sticky}.walk__fig>*{max-height:44vh;overflow:auto;margin:0!important}.walk__fig>.diagram{padding:10px}.walk__fig:after{content:"";background:linear-gradient(var(--bg), transparent);pointer-events:none;height:14px;position:absolute;inset:auto 0 -14px}.walk__steps{padding:8px 0 0}.step{border-left:2px solid var(--rule);color:var(--dim);padding:1.1em 0 1.1em 1.1em;transition:color .3s,border-color .3s;position:relative}.step.is-on{color:var(--text);border-left-color:var(--claude)}.step+.step{margin-top:.5em}@media screen and (width>=1100px){.walk{margin-right:calc(-1 * (var(--gap-m) + var(--margin-w)));grid-template-columns:minmax(0,.8fr) minmax(0,1.4fr);gap:0 2.5rem;display:grid}.walk__fig{top:calc(var(--bar-h) + 28px);order:2;align-self:start;padding:0}.walk__fig:after{content:none}.walk__fig>*{max-height:calc(100dvh - var(--bar-h) - var(--status-h) - 56px)}.walk__steps{padding:8vh 0 20vh}.step+.step{margin-top:9vh}.walk--wide{display:block}.walk--wide .walk__fig{top:var(--bar-h);padding:12px 0}.walk--wide .walk__fig:after{content:""}.walk--wide .walk__fig>*{max-height:46vh}.walk--wide .walk__steps{max-width:var(--measure);padding:3vh 0 34vh}.walk--wide .step+.step{margin-top:7vh}}.walk[data-lit] .diagram :is(.node,.edge,.edge-label,.actor,.message,.class-node,.entity,.er-relationship,.class-relationship,.lifeline){opacity:.38;transition:opacity .35s}.walk[data-lit] .diagram .is-lit{opacity:1}.walk .diagram .node.is-lit>:is(rect,polygon,circle,ellipse,path),.walk .diagram .actor.is-lit>rect,.walk .diagram :is(.class-node,.entity).is-lit>rect{stroke:var(--claude);stroke-width:1.5px}.walk[data-lit] .ec-line{opacity:.5;transition:opacity .3s,background-color .3s}.walk[data-lit] .ec-line.is-lit{opacity:1;background:var(--lit);box-shadow:inset 2px 0 var(--claude)}.toc{display:none}@media screen and (width>=1400px){.toc{top:calc(var(--bar-h) + 32px);max-height:calc(100dvh - var(--bar-h) - var(--status-h) - 64px);grid-area:2/rail/span 2;align-self:start;padding-top:6px;display:block;position:sticky;overflow:auto}}.toc__label{font:400 12px/1.7 var(--ui);color:var(--faint);margin:0 0 12px}.toc ol{margin:0;padding:0;list-style:none}.toc li+li{margin-top:12px}.toc a{color:var(--dim);grid-template-columns:1.9rem minmax(0,1fr);gap:0 4px;font-size:.8125rem;line-height:1.5;text-decoration:none;transition:color .2s;display:grid}.toc a:hover,.toc a[aria-current=true]{color:var(--fg)}.toc__n{font:400 11.5px/1.75 var(--ui);color:var(--faint)}.toc__len{width:calc(var(--share,1) * 100%);background:linear-gradient(to right, var(--dim) calc(var(--read,0) * 100%), var(--rule) calc(var(--read,0) * 100%));border-radius:1px;grid-column:2;height:2px;margin-top:6px;display:block}.toc a[aria-current=true] .toc__len{background:linear-gradient(to right, var(--claude) calc(var(--read,0) * 100%), var(--rule) calc(var(--read,0) * 100%))}.status{z-index:8;height:var(--status-h);padding:0 var(--gutter) env(safe-area-inset-bottom);font:400 12px/1 var(--ui);color:var(--dim);background:color-mix(in srgb, var(--bg) 92%, transparent);backdrop-filter:blur(8px);border-top:1px solid var(--rule);font-variant-numeric:tabular-nums;align-items:center;gap:14px;display:flex;position:fixed;inset:auto 0 0}.status:before{content:"";background:var(--claude);transform-origin:0;height:1px;transform:scaleX(var(--progress,0));position:absolute;inset:-1px 0 auto}.status__file{color:var(--fg);background:var(--bg-2);border:1px solid var(--rule);border-radius:3px;flex:none;padding:3px 7px;text-decoration:none}.status__file:hover{border-color:var(--dim)}.status__sec{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.status__sec b{color:var(--faint);margin-right:8px;font-weight:400}.status__left{flex:none}.status__toc{color:var(--dim);border:1px solid var(--rule);border-radius:3px;flex:none;padding:3px 8px}.status__toc:hover{color:var(--fg)}@media screen and (width>=1400px){.status__toc{display:none}}@media screen and (width<=520px){.status__file{display:none}}.sheet{width:min(32rem,100vw - 24px);max-height:min(70dvh,36rem);margin:auto auto calc(var(--status-h) + 10px);color:var(--fg);background:var(--bg-2);border:1px solid var(--rule);border-radius:6px;padding:18px 20px;box-shadow:0 18px 50px #00000059}.sheet::backdrop{background:#00000059}.sheet .toc{display:block}.sheet__close{float:right;font:400 12px var(--ui);color:var(--faint)}.keys{font:400 13px/1.6 var(--ui);grid-template-columns:auto 1fr;gap:8px 18px;margin:0;display:grid}.keys dt kbd{color:var(--fg);border:1px solid var(--rule);border-bottom-width:2px;border-radius:4px;padding:1px 7px}.keys dd{color:var(--dim);margin:0}.bar__search{align-items:center;gap:7px;display:inline-flex}.bar__search kbd{font:400 11px/1.5 var(--ui);color:var(--faint);border:1px solid var(--rule);border-radius:3px;padding:0 5px}@media screen and (width<=640px){.bar__search-label,.bar__search kbd{display:none}}.search{width:min(44rem,100vw - 24px);max-height:min(74dvh,42rem);color:var(--fg);background:var(--bg-2);border:1px solid var(--rule);opacity:1;transition:opacity .16s, transform .16s, overlay .16s allow-discrete, display .16s allow-discrete;border-radius:8px;margin:11vh auto auto;padding:0;overflow:hidden;transform:none;box-shadow:0 28px 90px #00000073}.search[open]{flex-direction:column;display:flex}@starting-style{.search[open]{opacity:0;transform:translateY(-6px)scale(.99)}}.search::backdrop{background:color-mix(in srgb, var(--bg) 60%, transparent);backdrop-filter:blur(3px)}.search__line{border-bottom:1px solid var(--rule);font:400 15px/1 var(--ui);align-items:center;gap:12px;padding:15px 20px;display:flex}.search__caret{color:var(--claude)}.search input{min-width:0;font:400 16px/1.5 var(--sans);color:var(--fg);background:0 0;border:0;outline:0;flex:1;padding:0}.search input::placeholder{color:var(--faint)}.search input::-webkit-search-cancel-button{display:none}.search__status{font:400 12.5px/1.7 var(--ui);color:var(--dim);margin:0;padding:12px 20px 6px calc(20px + 2ch);position:relative}.search__status:before{content:"⏺";color:var(--ok);position:absolute;left:20px}.search__status .tool__name{color:var(--fg)}.search__count{color:var(--faint);font-variant-numeric:tabular-nums;margin-left:8px}.search__results{overscroll-behavior:contain;flex:1;margin:0;padding:2px 10px 10px;list-style:none;position:relative;overflow-y:auto}.search__results a{color:inherit;border-radius:4px;gap:2px 14px;padding:9px 12px;text-decoration:none;display:grid;position:relative}.search__cursor{opacity:0;pointer-events:none;background:color-mix(in srgb, var(--fg) 6%, var(--bg-2));height:0;box-shadow:inset 2px 0 var(--claude);border-radius:4px;transition:transform .16s cubic-bezier(.2,.8,.2,1),height .16s cubic-bezier(.2,.8,.2,1),opacity .12s;position:absolute;top:0;left:10px;right:10px}.search__results mark{color:var(--claude);background:linear-gradient(currentColor,currentColor) 0 100%/100% 1px no-repeat;font-weight:600}.search__results .is-new{animation:.18s cubic-bezier(.2,.8,.2,1) both sr-in;animation-delay:calc(var(--i,0) * 16ms)}.search__results .is-new mark{animation:.36s cubic-bezier(.2,.8,.2,1) both sr-sweep;animation-delay:calc(var(--i,0) * 16ms + 90ms)}@keyframes sr-in{0%{opacity:0;transform:translateY(5px)}}@keyframes sr-sweep{0%{background-size:0% 1px}}.search__count{display:inline-block}.sr-post{margin-top:6px}.sr-post a{grid-template-columns:minmax(0,1fr) auto;align-items:baseline}.sr-post__title{font:600 1.06rem/1.4 var(--serif);letter-spacing:-.01em}.sr-post__date{font:400 12px/1.6 var(--ui);color:var(--faint);font-variant-numeric:tabular-nums}.sr-sec a{padding-left:calc(12px + 3ch);position:relative}.sr-sec a:before{content:"";border-left:1px solid var(--faint);border-bottom:1px solid var(--faint);width:6px;height:9px;position:absolute;top:13px;left:calc(12px + .8ch)}.sr-sec__head{font:400 12.5px/1.6 var(--ui);color:var(--dim)}.sr-sec__head b{color:var(--faint);margin-right:8px;font-weight:400}.sr-sec__snip{-webkit-line-clamp:2;color:var(--dim);-webkit-box-orient:vertical;font-size:.875rem;line-height:1.6;display:-webkit-box;overflow:hidden}.sr-404{color:var(--dim);padding:14px 12px 10px;font-size:.9375rem}.sr-404.is-new{animation:.22s cubic-bezier(.2,.8,.2,1) both sr-in}.sr-404__fig{width:min(100%,330px);height:auto;margin-bottom:12px;display:block;overflow:visible}.sr-404__box{fill:color-mix(in srgb, var(--fg) 4%, var(--bg-2));stroke:var(--dim)}.sr-404__q{font:500 13px var(--mono);fill:var(--fg)}.sr-404__arrow{fill:none;stroke:var(--claude);stroke-width:1.5px;stroke-dasharray:5 5;animation:.9s linear infinite sr-march}.sr-404__head{fill:none;stroke:var(--claude);stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.sr-404__void{fill:none;stroke:var(--faint);stroke-dasharray:4 4}.sr-404__mark{font:600 18px var(--mono);fill:var(--claude);animation:1.1s step-end infinite sr-blink}@keyframes sr-march{to{stroke-dashoffset:-10px}}@keyframes sr-blink{50%{opacity:.15}}.sr-404 p{margin:0}.sr-404__msg{color:var(--fg)}.sr-404__fix{font:400 12.5px/2 var(--ui);margin-top:6px!important}.sr-404__fix .chip{color:var(--claude);border-color:color-mix(in srgb, var(--claude) 45%, transparent);margin-left:6px}.sr-404 .chips{flex-wrap:wrap;margin:12px 0 0;mask-image:none}.sr-404 .chip{text-decoration:none}.search__keys{font:400 11.5px/1.6 var(--ui);color:var(--faint);border-top:1px solid var(--rule);gap:16px;margin:0;padding:10px 20px;display:flex}.search__keys kbd{border:1px solid var(--rule);border-radius:3px;margin-right:3px;padding:0 5px}@media (pointer:coarse){.search__keys{display:none}}@media screen and (width<=640px){.search{width:calc(100vw - 16px);max-height:calc(100dvh - 16px);margin-top:8px}}::highlight(search-hit){color:inherit;background-color:color-mix(in srgb, var(--claude) 32%, transparent)}.zoom{background:color-mix(in srgb, var(--bg) 96%, transparent);cursor:zoom-out;border:0;width:100vw;max-width:none;height:100dvh;max-height:none;margin:0;padding:4vmin;display:none}.zoom[open]{place-items:center;display:grid}.zoom>*{max-width:100%;max-height:100%;overflow:auto;margin:0!important}.zoom svg{width:min(100%,1400px);height:auto;max-height:92dvh}.post__end{border-top:1px solid var(--rule);margin-top:5em;padding-top:18px}.post__source{font:400 12.5px/1.7 var(--ui);color:var(--faint);margin:0}.post__source a{color:var(--dim)}.post__nav{grid-template-columns:1fr 1fr;gap:24px;margin-top:32px;display:grid}.post__nav a{color:inherit;text-decoration:none;display:block}.post__nav .newer{text-align:right;grid-column:2}.post__nav .cover{margin-bottom:12px;transition:border-color .15s}.post__nav small{font:400 12px/1.7 var(--ui);color:var(--faint);display:block}.post__nav-title{font:600 1.125rem/1.4 var(--serif);text-wrap:balance;margin-top:2px;transition:color .15s;display:block}.post__nav a:hover .post__nav-title{color:var(--claude)}.post__nav a:hover .cover{border-color:var(--dim)}@media screen and (width<=640px){.post__nav{grid-template-columns:minmax(0,1fr);gap:18px}.post__nav a,.post__nav .newer{text-align:left;grid-column:auto;grid-template-rows:auto auto;grid-template-columns:7.5rem minmax(0,1fr);align-content:center;column-gap:14px;display:grid}.post__nav .cover{grid-row:1/span 2;margin:0}.post__nav small{align-self:end}}.missing{font:400 13px/1.7 var(--ui);color:var(--dim);border:1px dashed var(--rule);border-radius:6px;padding:18px 20px}@view-transition{navigation:auto}::view-transition-group(*){animation-duration:.32s;animation-timing-function:cubic-bezier(.2,.8,.2,1)}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}}@media print{.bar,.status,.toc,.sheet,.post__nav,.heading-link,.sidenote{display:none!important}.post{padding:0;display:block}.has-sidenotes .footnotes{display:block}.walk{margin:0;display:block}.walk__fig{position:static}.step{color:var(--text)}}.diagram{--dg-line:color-mix(in srgb, var(--fg) 42%, var(--bg));--dg-accent:color-mix(in srgb, var(--fg) 78%, var(--bg));text-align:center;border:1px solid var(--rule);cursor:zoom-in;border-radius:6px;margin:1.6em 0 0;padding:18px;overflow-x:auto}@media screen and (width>=1100px){.prose>.diagram{min-width:100%;width:min(calc(var(--w,0px) * 1.2 + 38px), calc(100% + var(--gap-m) + var(--margin-w)))}}.diagram svg{width:min(100%, calc(var(--w,100%) * 1.2));vertical-align:top;max-width:100%;height:auto}:is(.diagram,.cover) svg{--line:var(--dg-line,color-mix(in srgb, var(--fg) 42%, var(--bg)));--accent:var(--dg-accent,color-mix(in srgb, var(--fg) 78%, var(--bg)));--muted:var(--dim);--_text:var(--fg);--_text-sec:var(--muted);--_text-muted:var(--muted);--_text-faint:color-mix(in srgb, var(--fg) 25%, var(--bg));--_line:var(--line);--_arrow:var(--accent);--_node-fill:color-mix(in srgb, var(--fg) 4%, var(--bg));--_node-stroke:color-mix(in srgb, var(--fg) 24%, var(--bg));--_group-fill:var(--bg);--_group-hdr:color-mix(in srgb, var(--fg) 6%, var(--bg));--_inner-stroke:color-mix(in srgb, var(--fg) 13%, var(--bg));--_key-badge:color-mix(in srgb, var(--fg) 10%, var(--bg));--xychart-color-0:var(--claude);--xychart-bar-fill-0:color-mix(in srgb, var(--bg) 75%, var(--xychart-color-0) 25%);--xychart-color-1:var(--dim);--xychart-bar-fill-1:color-mix(in srgb, var(--bg) 75%, var(--xychart-color-1) 25%);--xychart-color-2:var(--faint);--xychart-bar-fill-2:color-mix(in srgb, var(--bg) 75%, var(--xychart-color-2) 25%)}@media screen and (width<=760px){.diagram{text-align:left}.diagram svg{width:calc(var(--w,100%) * .9);min-width:min(100%, var(--w,100%));max-width:none}}.diagram text{font-family:var(--sans)}.diagram .mono{font-family:var(--mono)}:is(.diagram,.cover) .xychart-grid{fill:var(--_inner-stroke);stroke:none;opacity:.65}:is(.diagram,.cover) .xychart-bar{stroke-width:1.5px}:is(.diagram,.cover) .xychart-line{fill:none;stroke-width:2.5px;stroke-linecap:round;stroke-linejoin:round}:is(.diagram,.cover) .xychart-line-shadow{fill:none;stroke-width:5px;stroke-linecap:round;stroke-linejoin:round;opacity:.12}:is(.diagram,.cover) .xychart-dot{stroke:var(--bg);stroke-width:2px}:is(.diagram,.cover) .xychart-label{fill:var(--_text-muted)}:is(.diagram,.cover) .xychart-axis-title{fill:var(--_text-sec)}:is(.diagram,.cover) .xychart-title{fill:var(--_text)}:is(.diagram,.cover) .xychart-bar.xychart-color-0{stroke:var(--xychart-color-0);fill:var(--xychart-bar-fill-0)}:is(.diagram,.cover) :is(path,line).xychart-color-0{stroke:var(--xychart-color-0)}:is(.diagram,.cover) circle.xychart-color-0{fill:var(--xychart-color-0)}:is(.diagram,.cover) .xychart-bar.xychart-color-1{stroke:var(--xychart-color-1);fill:var(--xychart-bar-fill-1)}:is(.diagram,.cover) :is(path,line).xychart-color-1{stroke:var(--xychart-color-1)}:is(.diagram,.cover) circle.xychart-color-1{fill:var(--xychart-color-1)}:is(.diagram,.cover) .xychart-bar.xychart-color-2{stroke:var(--xychart-color-2);fill:var(--xychart-bar-fill-2)}:is(.diagram,.cover) :is(path,line).xychart-color-2{stroke:var(--xychart-color-2)}:is(.diagram,.cover) circle.xychart-color-2{fill:var(--xychart-color-2)}.dg-legend{font:400 12.5px/1.6 var(--sans);color:var(--dim);flex-wrap:wrap;justify-content:center;gap:6px 20px;margin-top:6px;display:flex}.dg-legend span{align-items:center;gap:8px;display:inline-flex}.dg-legend [data-i="0"]{--c:var(--claude)}.dg-legend [data-i="1"]{--c:var(--dim)}.dg-legend [data-i="2"]{--c:var(--faint)}.dg-legend [data-kind=bar] i{border:1.5px solid var(--c);background:color-mix(in srgb, var(--bg) 75%, var(--c) 25%);border-radius:3px;width:12px;height:12px}.dg-legend [data-kind=line] i{background:var(--c);border-radius:2px;width:16px;height:2.5px}.diagram--deferred .mermaid-src{font:400 12px/1.6 var(--mono);color:var(--faint);text-align:left;white-space:pre-wrap;margin:0}.diagram--deferred[data-state=drawn] .mermaid-src{display:none}.diagram--deferred[data-state=failed] .mermaid-src{color:var(--claude)}.cover{aspect-ratio:1200/630;background:var(--bg-2);border:1px solid var(--rule);border-radius:6px;padding:5% 6%;display:block;overflow:hidden}.cover svg{width:100%;height:100%;display:block}.cover svg *{vector-effect:non-scaling-stroke}.cover svg{--_line:color-mix(in srgb, var(--fg) 45%, var(--bg-2));--_node-stroke:color-mix(in srgb, var(--fg) 50%, var(--bg-2));--_node-fill:color-mix(in srgb, var(--fg) 7%, var(--bg-2));--_inner-stroke:color-mix(in srgb, var(--fg) 30%, var(--bg-2))}.cover svg :is(rect,polygon,circle,ellipse,path,line,polyline){stroke-width:1.4px}.cover .is-hub>:is(rect,polygon,circle,ellipse,path){stroke:var(--claude);stroke-width:2px;fill:color-mix(in srgb, var(--claude) 14%, var(--bg-2))}.cover-bars rect{fill:color-mix(in srgb, var(--fg) 16%, var(--bg-2))}.cover-bars .is-hub{fill:var(--claude)}.cover-bars line{stroke:var(--rule)}
