.blog-root{--tb-flash:var(--color-emphasis);--blog-label-fs:13px;--blog-label-lh:1.35;--blog-body-fs:16px;--blog-body-lh:1.78;--blog-h2-fs:clamp(1.4rem, 2vw, 1.7rem);--blog-h3-fs:clamp(1.15rem, 1.5vw, 1.35rem);--blog-heading-lh:1.06;--blog-cap-ratio:.72;--blog-heading-cap-ratio:.65;--blog-first-line-trim-body:.4px;--blog-first-line-trim-heading:1px;--blog-label-overlead:calc(var(--blog-label-fs) * (var(--blog-label-lh) - var(--blog-cap-ratio)) / 2);min-height:100vh}.blog-root .blog-index,.blog-root .blog-article{min-height:calc(100svh - 3.5rem)}.blog-root .blog-hero{display:block}.blog-root .blog-hero-board{position:relative;overflow:hidden}.blog-root .blog-hero-ticker{z-index:1;pointer-events:none;width:100%;height:88px;display:block;position:relative}.blog-root .blog-hero-mast{align-items:center;min-height:clamp(88px,8.5vw,116px);display:flex}.blog-root .blog-hero-copy{z-index:1;padding:10px var(--tc-gut);position:relative}.blog-root .tb-ch{display:inline-block;position:relative}.blog-root .tb-ch-g{visibility:hidden}.blog-root .tb-ch-f{white-space:nowrap;transform-origin:50% 54%;justify-content:center;display:flex;position:absolute;inset:0}.blog-root .tb-word{white-space:nowrap}.blog-root .tb-sr{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.blog-root .blog-hero-copy h1 .tb-ch:before{content:"";pointer-events:none;box-shadow:inset 0 0 0 1px color-mix(in srgb, currentColor 3.5%, transparent);background:linear-gradient(to bottom, color-mix(in srgb, currentColor 1.8%, transparent) 0, color-mix(in srgb, currentColor 1.8%, transparent) calc(54% - 1px), color-mix(in srgb, currentColor 6.5%, transparent) calc(54% - 1px), color-mix(in srgb, currentColor 6.5%, transparent) 54%, color-mix(in srgb, currentColor 3%, transparent) 54%, color-mix(in srgb, currentColor 3%, transparent) 100%);border-radius:.05em;position:absolute;inset:.03em .014em}.blog-root .blog-hero h1{letter-spacing:-.045em;text-wrap:balance;max-width:min(100%,20ch);font-size:clamp(2.3rem,3.4vw,3.4rem);font-weight:500;line-height:.96}.blog-root .blog-hero h1:is(:lang(ja),:lang(zh),:lang(ko),:lang(th),:lang(lo),:lang(km),:lang(my)) .tb-word{white-space:normal}.blog-root .blog-article-grid{grid-template-columns:220px minmax(0,1fr);gap:clamp(28px,4vw,56px);padding-inline:clamp(28px,5vw,64px);display:grid}.blog-root .blog-article-main{min-width:0}.blog-root .blog-article-header{padding:clamp(48px,6vw,76px) clamp(28px,5vw,64px) calc(clamp(28px,4vw,56px) - 8px)}.blog-root .blog-article-lead{grid-template-columns:220px minmax(0,1fr);gap:clamp(28px,4vw,56px);display:grid}.blog-root .blog-article-copy h1{letter-spacing:-.04em;max-width:22ch;font-size:clamp(1.9rem,3.4vw,3rem);font-weight:500;line-height:1.06}.blog-root .blog-article-summary{max-width:58ch;color:var(--tc-ink-2);margin-top:22px;font-size:clamp(1rem,1.5vw,1.16rem);line-height:1.58}.blog-root .blog-prose{width:100%;font-family:var(--font-sans), Inter, system-ui, sans-serif;margin-inline:0;padding:30px 0 clamp(76px,8vw,112px)}.blog-root .blog-prose :is(h2,h3){font-family:var(--tc-disp);letter-spacing:-.025em;font-weight:500;line-height:var(--blog-heading-lh);margin-bottom:.8em;scroll-margin-top:96px}.blog-root .blog-prose h2{font-size:var(--blog-h2-fs);margin-top:1.6em}.blog-root .blog-prose h3{font-size:var(--blog-h3-fs);margin-top:1.5em}.blog-root .blog-prose :is(p,li){font-size:var(--blog-body-fs);line-height:var(--blog-body-lh)}.blog-root .blog-prose p{margin-block:1.25em}.blog-root .blog-prose>:first-child{margin-top:0}.blog-root .blog-prose>:last-child{margin-bottom:0}.blog-root .blog-prose :is(pre,img,video){border-radius:0}.blog-root .blog-tweet-embed :is(a[href^="https://x.com/intent/follow"],a[class*=tweet-in-reply-to-module__],a[class*=tweet-replies-module__][class*=link]){color:var(--color-link)}.blog-root .blog-sidebar{min-width:0}.blog-root .blog-sidebar-sticky{position:sticky;top:76px}.blog-root .blog-toc,.blog-root .blog-share{padding:30px 26px 30px 0}.blog-root .blog-share{border-top:1px solid var(--tc-hair)}.blog-root .blog-share h2,.blog-root .blog-toc h2{font-family:var(--tc-sans);font-size:var(--blog-label-fs);letter-spacing:0;font-weight:500;line-height:var(--blog-label-lh);color:var(--tc-ink-2)}.blog-root .blog-toc h2{margin-bottom:18px}.blog-root .blog-prose>p:first-child{margin-top:calc(var(--blog-label-overlead) - var(--blog-body-fs) * (var(--blog-body-lh) - var(--blog-cap-ratio)) / 2 - var(--blog-first-line-trim-body))}.blog-root .blog-prose>h2:first-child{margin-top:calc(var(--blog-label-overlead) - var(--blog-h2-fs) * (var(--blog-heading-lh) - var(--blog-heading-cap-ratio)) / 2 - var(--blog-first-line-trim-heading))}.blog-root .blog-prose>h3:first-child{margin-top:calc(var(--blog-label-overlead) - var(--blog-h3-fs) * (var(--blog-heading-lh) - var(--blog-heading-cap-ratio)) / 2 - var(--blog-first-line-trim-heading))}.blog-root .blog-share-actions{align-items:center;gap:6px;margin-top:12px;display:flex}.blog-root .blog-share-actions.is-bar{margin-top:0}@media (min-width:981px){.blog-root .blog-share-actions.is-bar{display:none}}.blog-root .blog-share-actions>a,.blog-root .blog-copy-link{border:1px solid var(--tc-hair);border-radius:var(--radius-md);width:32px;height:32px;color:var(--tc-ink-2);place-items:center;display:grid}.blog-root .blog-share-actions>a:hover,.blog-root .blog-copy-link:hover{color:var(--tc-ink)}.blog-root .blog-share-actions svg{width:14px;height:14px}.blog-root .blog-post-footer{border-top:1px solid var(--tc-hair)}.blog-root .blog-post-navigation{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.blog-root .blog-post-nav-link{min-height:150px;padding:30px var(--tc-gut);border-right:1px solid var(--tc-hair);color:inherit;flex-direction:column;justify-content:space-between;gap:24px;display:flex}.blog-root .blog-post-nav-link.is-next{text-align:right;border-right:0;align-items:flex-end}.blog-root .blog-post-nav-link>span{color:var(--tc-ink-3);align-items:center;gap:8px;font-size:12px;display:inline-flex}.blog-root .blog-post-nav-link strong{max-width:30ch;font-family:var(--tc-disp);letter-spacing:-.02em;font-size:clamp(1.15rem,2vw,1.55rem);font-weight:500;line-height:1.2}.blog-root .blog-post-nav-link svg{width:14px;height:14px}.blog-root .blog-explore-head{letter-spacing:-.015em;align-items:center;gap:8px;padding-bottom:32px;font-size:16px;font-weight:500;line-height:1.35;display:flex}.blog-root .blog-explore-head svg{color:var(--tc-ink-2)}@media (max-width:980px){.blog-root .blog-article-grid{grid-template-columns:minmax(0,1fr);padding-inline:0}.blog-root .blog-sidebar{z-index:30;border-block:1px solid var(--tc-hair);background:var(--tc-paper);order:-1;position:sticky;top:3.5rem}.blog-root .blog-prose{padding-inline:clamp(28px,5vw,64px)}.blog-root .blog-prose h2,.blog-root .blog-prose h3{scroll-margin-top:112px}.blog-root .blog-article-lead{grid-template-columns:minmax(0,1fr);gap:22px}.blog-root .blog-article-header{padding-bottom:14px}}@media (max-width:700px){.blog-root .blog-hero-mast{min-height:84px}.blog-root .blog-post-navigation{grid-template-columns:minmax(0,1fr)}.blog-root .blog-post-nav-link.is-next{border-top:1px solid var(--tc-hair)}}.blog-root .blog-updates-head{padding:16px var(--tc-gut) 0;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px 16px;display:flex}.blog-root .blog-updates-head h2{letter-spacing:-.015em;font-size:16px;font-weight:500}.blog-root .blog-updates-arrows{gap:6px;display:flex}.blog-root .blog-updates-arrows button{border:1px solid var(--tc-hair);width:30px;height:30px;color:var(--tc-ink-2);cursor:pointer;background:0 0;border-radius:999px;place-items:center;transition:color .16s,opacity .16s;display:grid}.blog-root .blog-updates-arrows button:hover:not([aria-disabled=true]){color:var(--tc-ink)}.blog-root .blog-updates-arrows button[aria-disabled=true]{opacity:.35;cursor:default}.blog-root .blog-updates-board{border-bottom:1px solid var(--tc-hair);background:color-mix(in srgb, var(--tc-ink) 2.5%, var(--tc-panel));overflow:hidden}.blog-root .blog-updates-track{padding:14px var(--tc-gut) 18px;scroll-snap-type:x proximity;scroll-padding-left:var(--tc-gut);scrollbar-width:none;cursor:grab;gap:10px;display:flex;overflow-x:auto;mask-image:linear-gradient(90deg,#000 0 calc(100% - 44px),#0000 100%)}.blog-root .blog-updates-track.is-dragging{cursor:grabbing;-webkit-user-select:none;user-select:none;scroll-snap-type:none}.blog-root .blog-updates-track::-webkit-scrollbar{display:none}.blog-root .blog-updates-cell{z-index:0;box-sizing:border-box;border:1px solid var(--tc-hair);background:var(--tc-paper);scroll-snap-align:start;border-radius:4px;flex:0 0 calc(20% - 8px);grid-template-rows:auto auto 1fr auto;gap:11px;min-width:0;padding:13px 15px 15px;text-decoration:none;transition:border-color .16s;display:grid;position:relative}.blog-root .blog-updates-go{color:var(--tc-ink-3);opacity:0;transition:opacity .16s,transform .16s;position:absolute;top:14px;right:15px;transform:translate(-3px,3px)}.blog-root .blog-updates-cell:hover .blog-updates-go,.blog-root .blog-updates-cell:focus-visible .blog-updates-go{opacity:1;transform:none}.blog-root .blog-updates-mark{z-index:-1;color:var(--tc-ink);opacity:.2;display:flex;position:absolute;bottom:15px;right:15px}.blog-root .blog-updates-cell:hover{border-color:var(--tc-ink-3)}.blog-root .blog-updates-meta{justify-content:space-between;align-items:baseline;gap:14px;display:flex}.blog-root .blog-updates-meta time{color:var(--tc-ink-3);white-space:nowrap;font-size:11.5px}.blog-root .blog-updates-cell strong{color:var(--tc-ink);letter-spacing:-.015em;white-space:nowrap;text-overflow:ellipsis;font-size:14.5px;font-weight:500;line-height:1.3;display:block;overflow:hidden}.blog-root .blog-updates-headline{color:var(--tc-ink-3);margin-top:-5px;font-size:12px;line-height:1.45;display:block}.blog-root .blog-updates-ver{height:21px;color:color-mix(in srgb, var(--tc-ink) 82%, transparent);background:linear-gradient(to bottom, color-mix(in srgb, var(--tc-ink) 6%, transparent) 0 calc(54% - 1px), color-mix(in srgb, var(--tc-ink) 12%, transparent) calc(54% - 1px) 54%, color-mix(in srgb, var(--tc-ink) 4%, transparent) 54% 100%);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--tc-ink) 5%, transparent);border-radius:3px;justify-self:start;align-items:center;padding:0 8px;font-size:12px;font-weight:500;transition:color .2s;display:inline-flex}.blog-root .blog-updates-cell:hover .blog-updates-ver{color:#2563eb}[data-theme=dark] .blog-root .blog-updates-cell:hover .blog-updates-ver{color:#86a8ff}.blog-root .blog-essays{padding-bottom:clamp(56px,7vw,92px)}.blog-root .blog-feature-dither text{font-family:inherit;font-weight:600}.blog-root .blog-dither-cover.blog-feature-dither pattern path{fill:#2563eb}[data-theme=dark] .blog-root .blog-dither-cover.blog-feature-dither pattern path{fill:#86a8ff}.blog-root .blog-dither-cover{background:color-mix(in srgb, var(--tc-ink) 4%, transparent);display:block;overflow:hidden}.blog-root .blog-dither-cover svg{width:100%;height:100%;display:block}.blog-root .blog-dither-cover pattern path{fill:color-mix(in srgb, var(--tc-ink) 74%, transparent)}@media (max-width:1250px){.blog-root .blog-updates-cell{flex-basis:236px}}.blog-root .blog-article-cover{border-radius:6px;margin-top:22px;overflow:hidden}.blog-root .blog-post-cover{object-fit:cover;width:100%}.blog-root .blog-article-cover .blog-feature-dither{aspect-ratio:2}.blog-root .blog-article-cover .blog-post-cover{aspect-ratio:auto;object-fit:contain}.blog-root .fumadocs-architecture{--fda-fg:#0a0a0a;--fda-muted-fg:#737373;--fda-card:#f1f1f1;--fda-popover:#fafafa;--fda-secondary:#ededed;--fda-border:#cccccc80;--fda-accent:#d1d1d180;--fda-dash:#9e9e9e99}.dark .blog-root .fumadocs-architecture{--fda-fg:#ebebeb;--fda-muted-fg:#b3b3b3cc;--fda-card:#191919;--fda-popover:#1e1e1e;--fda-secondary:#212121;--fda-border:#66666640;--fda-accent:#6868684d;--fda-dash:#8c8c8c66}.blog-root .fumadocs-architecture svg{width:100%;height:auto;display:block}.blog-root .fumadocs-architecture .ft{fill:var(--fda-fg);font:600 13px Inter,ui-sans-serif,system-ui,sans-serif}.blog-root .fumadocs-architecture .fl{fill:var(--fda-fg);font:600 13.5px Inter,ui-sans-serif,system-ui,sans-serif}.blog-root .fumadocs-architecture .fs{fill:var(--fda-muted-fg);font:400 11.5px Inter,ui-sans-serif,system-ui,sans-serif}.blog-root .fumadocs-architecture .fm{fill:var(--fda-fg);font:500 12px ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.blog-root .fumadocs-architecture .cardbox{fill:var(--fda-card);stroke:var(--fda-border);stroke-width:1px}.blog-root .fumadocs-architecture .popbox{fill:var(--fda-popover);stroke:var(--fda-border);stroke-width:1px}.blog-root .fumadocs-architecture .secband{fill:var(--fda-secondary);stroke:var(--fda-border);stroke-width:1px}.blog-root .fumadocs-architecture .secband.core{fill:color-mix(in oklab, var(--tc-accent) 7%, var(--fda-secondary));stroke:color-mix(in oklab, var(--tc-accent) 55%, transparent);stroke-width:1.25px}.blog-root .fumadocs-architecture .core-label{fill:var(--tc-accent)}.blog-root .fumadocs-architecture .chip.core-chip{fill:color-mix(in oklab, var(--tc-accent) 16%, transparent)}.blog-root .fumadocs-architecture .cardband{fill:var(--fda-card);stroke:var(--fda-border);stroke-width:1px}.blog-root .fumadocs-architecture .dashband{fill:none;stroke:var(--fda-dash);stroke-width:1px;stroke-dasharray:4 4}.blog-root .fumadocs-architecture .chip{fill:var(--fda-accent)}.blog-root .fumadocs-architecture .logo{fill:var(--fda-fg)}.blog-root .fumadocs-architecture .lst{fill:none;stroke:var(--fda-fg);stroke-width:1.8px;stroke-linecap:round}.blog-root .fumadocs-architecture .alg{fill:#003dff}.dark .blog-root .fumadocs-architecture .alg{fill:#5468ff}.blog-root .fumadocs-architecture .wak{fill:#be132d}.dark .blog-root .fumadocs-architecture .wak{fill:#e92543}.blog-root .fumadocs-architecture .tan{fill:#3a3a38}.dark .blog-root .fumadocs-architecture .tan{fill:#ece8d1}.blog-root .fumadocs-architecture .stopP{stop-color:var(--fda-popover)}.blog-root .fumadocs-architecture .stopPT{stop-color:var(--fda-popover);stop-opacity:0}.blog-root .fumadocs-architecture .arr{fill:none;stroke:var(--fda-muted-fg);stroke-width:1.25px}.blog-root .blog-article-header-intro .blog-prose{width:100%;padding:0}.blog-root .blog-article-header-intro [role=none]{display:none}.blog-root .blog-article-header-intro .not-prose{margin-block:.75rem}.blog-root .blog-article-header-intro .prose-no-margin>:first-child{margin-top:0}.blog-root .blog-article-header-intro .prose-no-margin>:first-child em{color:var(--tc-ink)}.blog-root .blog-article-header-intro .prose-no-margin>:last-child{margin-bottom:0}.blog-root .blog-hero-figure-slot{z-index:0;pointer-events:none;position:absolute;inset:0;overflow:hidden;mask-image:linear-gradient(#0000 0 88px,#000 88px calc(100% - 88px),#0000 calc(100% - 88px) 100%)}.blog-root .blog-hero-figure{top:50%;right:var(--tc-gut);width:auto;height:105%;position:absolute;transform:translateY(-50%)}.blog-root .blog-hero-figure path{fill:none;stroke:var(--tc-ink-3);stroke-width:1.25px;stroke-dasharray:2 5;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}@media (max-width:720px){.blog-root .blog-hero-figure{display:none}}.blog-root .author-spotlight{border:1px solid var(--tc-hair);background:var(--tc-paper);border-radius:6px;grid-template-columns:minmax(0,.92fr) minmax(0,1.08fr);min-height:300px;display:grid;overflow:hidden}.blog-root .author-spotlight-portrait{background:color-mix(in srgb, var(--tc-ink) 7%, var(--tc-paper));min-height:300px;position:relative;overflow:hidden}.blog-root .author-spotlight-portrait:after{z-index:2;background:var(--tc-paper);content:"";pointer-events:none;width:3px;position:absolute;top:0;bottom:0;right:-1px}.blog-root .author-spotlight-image{object-fit:cover;filter:saturate(.9)contrast(1.04);transition:transform .3s}.blog-root .author-spotlight-portrait:hover .author-spotlight-image{transform:scale(1.025)}.blog-root .author-spotlight-dither{pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.blog-root .author-spotlight-dither path,.blog-root .author-spotlight-dither-seal{fill:var(--tc-paper)}.blog-root .author-spotlight-copy{flex-direction:column;justify-content:center;gap:10px;min-width:0;padding:24px;display:flex}.blog-root .author-spotlight h3{font-family:var(--tc-sans);letter-spacing:-.015em;color:var(--tc-ink);margin:0;font-size:18px;font-weight:500;line-height:1.3}.blog-root .author-spotlight-description{max-width:44ch;color:var(--tc-ink-2);margin-top:0;font-size:15px;line-height:1.55}.blog-root .author-spotlight-description>:first-child{margin-top:0}.blog-root .author-spotlight-description>:last-child{margin-bottom:0}.blog-root .blog-prose .author-spotlight-description :is(p,li){font-size:inherit;line-height:inherit}.blog-root .author-spotlight-description a{color:var(--tc-ink);text-underline-offset:2px;text-decoration:underline}.blog-root .author-spotlight-links{flex-wrap:wrap;gap:8px;margin-top:6px;padding-top:0;display:flex}.blog-root .author-spotlight-links a{border:1px solid var(--tc-hair);border-radius:var(--radius-md);color:var(--tc-ink);align-items:center;gap:9px;padding:5px 9px 5px 5px;font-size:14px;font-weight:500;line-height:1;text-decoration:none;transition:border-color .16s;display:inline-flex}.blog-root .author-spotlight-links a:hover{border-color:var(--tc-ink-3)}.blog-root .author-spotlight-links img{border-radius:calc(var(--radius-md) - 2px);object-fit:cover}.blog-root .author-spotlight-github-icon{border-radius:calc(var(--radius-md) - 2px);background:var(--tc-ink);width:28px;height:28px;color:var(--tc-paper);justify-content:center;align-items:center;display:flex}.blog-root .author-spotlight-github-icon svg{fill:currentColor;width:17px;height:17px}@media (max-width:720px){.blog-root .author-spotlight{grid-template-columns:minmax(0,1fr)}.blog-root .author-spotlight-portrait{min-height:240px}.blog-root .author-spotlight-copy{min-height:0}}
