.blog-root{--blog-measure:720px;--blog-red:#f0524f;--blog-blue:#0078ff;width:min(100% - 40px, var(--blog-measure));font-family:var(--pt-text);color:var(--pt-ink);margin:0 auto;padding:72px 0 96px}.blog-root.is-book{padding-top:var(--pt-title-clear)}.blog-crumb{font-size:var(--pt-t-meta);line-height:var(--pt-t-meta-lh);color:var(--pt-titanium);margin:0 0 14px}.blog-crumb a{color:inherit;text-decoration:none}.blog-crumb a:hover{color:var(--pt-ink)}.blog-root h1{font-size:var(--pt-d1);line-height:var(--pt-d1-lh);letter-spacing:var(--pt-d1-track);margin:0}.blog-lead{max-width:var(--pt-measure-lead);font-size:var(--pt-t-lead);line-height:var(--pt-t-lead-lh);color:var(--pt-ink-2);margin:16px 0 0}.blog-lead a,.blog-body a,.blog-article-foot a{color:var(--pt-ink);text-decoration:underline;-webkit-text-decoration-color:var(--pt-hair);text-decoration-color:var(--pt-hair);text-underline-offset:3px}.blog-lead a:hover,.blog-body a:hover,.blog-article-foot a:hover{-webkit-text-decoration-color:var(--pt-ink);text-decoration-color:var(--pt-ink)}.blog-byline{color:var(--pt-ink-2);align-items:center;gap:10px;margin:18px 0 0;font-size:14px;display:flex}.blog-byline-avatars{flex-shrink:0;display:flex}.blog-byline-avatars img{border-radius:var(--pt-radius-round);object-fit:cover;width:22px;height:22px;box-shadow:0 0 0 2px var(--pt-paper);position:relative}.blog-byline-avatars img+img{margin-left:-6px}.blog-byline-dot{color:var(--pt-titanium)}.blog-list{flex-direction:column;gap:36px;display:flex}@media (max-width:900px){.blog-list{gap:24px}}.blog-index{gap:40px;margin:0;padding:0;list-style:none;display:grid}.blog-card-cover{border-radius:var(--pt-radius-card);background:var(--pt-plate);aspect-ratio:16/9;display:block;overflow:hidden}.blog-card-copy{margin-top:18px}.blog-card-copy h2{font-size:var(--pt-d3);line-height:var(--pt-d3-lh);letter-spacing:var(--pt-d3-track);margin:0}.blog-card-copy h2 a{color:inherit;text-decoration:none}.blog-card-copy h2 a:hover{text-decoration:underline;-webkit-text-decoration-color:var(--pt-hair);text-decoration-color:var(--pt-hair);text-underline-offset:3px}.blog-card-copy>p{color:var(--pt-ink-2);margin:8px 0 0;font-size:15px;line-height:1.5}.blog-cover{border-radius:var(--pt-radius-card);width:100%;height:auto;display:block}.blog-article-head .blog-cover{margin-top:32px}.blog-card-cover .blog-cover{border-radius:inherit;object-fit:cover;height:100%}.blog-cover-dark{display:none}:root[data-theme=dark] .blog-cover-dark{display:block}:root[data-theme=dark] .blog-cover-light{display:none}.blog-body{margin-top:40px;font-size:16.5px;line-height:1.65}.blog-body>*+*{margin-top:1.1em}.blog-body h2{font-size:var(--pt-d3);line-height:var(--pt-d3-lh);letter-spacing:var(--pt-d3-track);margin-top:2.2em}.blog-body h3{font-size:var(--pt-t-title);line-height:var(--pt-t-title-lh);font-weight:var(--pt-w-label);letter-spacing:var(--pt-track-label);margin-top:1.8em}.blog-body ul,.blog-body ol{padding-left:1.3em}.blog-body li+li{margin-top:.45em}.blog-body code{border-radius:var(--pt-radius-chip);background:var(--pt-plate);font-family:var(--pt-mono);padding:.1em .35em;font-size:.88em}.blog-body strong{font-weight:var(--pt-w-strong)}.blog-body em{font-style:italic}.blog-image,.blog-video{border-radius:var(--pt-radius-card);width:100%;height:auto;margin:2em 0;display:block}.blog-body p:has(>.blog-image:only-child){margin:0}.blog-body .lucide{vertical-align:-3px;display:inline-block}.blog-article-foot{border-top:1px solid var(--pt-hair-soft);border-image:linear-gradient(var(--pt-hair-soft) 0 0) var(--pt-bleed-top);margin-top:64px;padding-top:24px;font-size:15px}.blog-callout{border-radius:var(--pt-radius-card);background:var(--pt-plate);margin:2em 0;padding:20px 22px;font-size:15.5px}.blog-callout>*+*{margin-top:.8em}.blog-callout-title{font-weight:var(--pt-w-strong)}.blog-github{margin:2em 0}.blog-github a{border:1px solid var(--pt-hair);border-radius:var(--pt-radius-control);align-items:center;gap:10px;padding:9px 14px;font-size:14px;font-weight:500;text-decoration:none;display:inline-flex}.blog-github a:hover{border-color:var(--pt-edge)}.blog-github-meta{color:var(--pt-titanium);font-weight:400}.blog-spotlight{border:1px solid var(--pt-hair);border-radius:var(--pt-radius-card);grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);min-height:280px;margin:2em 0;display:grid;overflow:hidden}.blog-spotlight-portrait{background:var(--pt-plate);display:block}.blog-spotlight-portrait img{object-fit:cover;filter:saturate(.9)contrast(1.04);width:100%;height:100%;display:block}.blog-spotlight-copy{flex-direction:column;justify-content:center;gap:10px;padding:24px;display:flex}.blog-spotlight-copy h3{letter-spacing:-.015em;margin:0;font-size:18px;font-weight:500}.blog-spotlight-copy p{color:var(--pt-ink-2);margin:0;font-size:15px;line-height:1.55}.blog-spotlight-links{flex-wrap:wrap;gap:8px;margin-top:6px;display:flex}.blog-spotlight-links a{border:1px solid var(--pt-hair);border-radius:var(--pt-radius-control);color:var(--pt-ink);align-items:center;gap:8px;padding:6px 10px;font-size:13px;text-decoration:none;display:inline-flex}.blog-spotlight-links a:hover{border-color:var(--pt-edge)}.blog-spotlight-links img{border-radius:var(--pt-radius-chip)}@media (max-width:640px){.blog-spotlight{grid-template-columns:1fr}.blog-spotlight-portrait{aspect-ratio:16/10}}.blog-hit-list{gap:14px 40px;margin:1.6em 0;padding:0;list-style:none;display:grid}@media (min-width:640px){.blog-hit-list{grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-flow:column;grid-template-rows:repeat(var(--rows), auto)}}.blog-hit-list li{align-items:flex-start;gap:12px;font-size:15px;line-height:1.5;display:flex}.blog-hit-mark{border-radius:var(--pt-radius-round);background:color-mix(in srgb, var(--blog-red) 16%, transparent);width:18px;height:18px;color:var(--blog-red);flex-shrink:0;place-items:center;margin-top:2px;display:grid}.blog-carousel{margin:2em 0}.blog-carousel-frame{border-radius:var(--pt-radius-card);position:relative;overflow:hidden}.blog-carousel-frame.is-multiple{cursor:pointer}.blog-carousel-track{scroll-snap-type:x mandatory;scrollbar-width:none;display:flex;overflow-x:auto}.blog-carousel-track::-webkit-scrollbar{display:none}.blog-carousel-track:focus-visible{outline:2px solid var(--pt-ink);outline-offset:2px;border-radius:var(--pt-radius-card)}.blog-carousel-slide{scroll-snap-align:start;flex:0 0 100%}.blog-carousel-slide img{width:100%;height:auto;display:block}.blog-carousel-edge{opacity:0;pointer-events:none;width:16%;transition:opacity .3s ease-out;position:absolute;top:0;bottom:0}.blog-carousel-edge.is-left{background:linear-gradient(90deg,#00000080,#00000024 60%,#0000);left:0}.blog-carousel-edge.is-right{background:linear-gradient(270deg,#00000080,#00000024 60%,#0000);right:0}.blog-carousel-edge.is-shown{opacity:1}.blog-carousel-arrow{color:#ffffffeb;filter:drop-shadow(0 2px 10px #000000b3);opacity:0;pointer-events:none;cursor:pointer;background:0 0;border:0;padding:12px;transition:translate .3s ease-out,opacity .3s ease-out;position:absolute;top:50%;transform:translateY(-50%)}.blog-carousel-edge.is-left .blog-carousel-arrow{left:12px;translate:-8px}.blog-carousel-edge.is-right .blog-carousel-arrow{right:12px;translate:8px}.blog-carousel-edge.is-shown .blog-carousel-arrow{opacity:1;pointer-events:auto;translate:0}.blog-carousel-arrow:focus-visible{outline-offset:2px;border-radius:var(--pt-radius-control);outline:2px solid #ffffffe6}.blog-carousel-dots{justify-content:center;gap:8px;margin-top:12px;display:flex}.blog-carousel-dot{border-radius:var(--pt-radius-round);background:var(--pt-cross);cursor:pointer;border:0;width:6px;height:6px;padding:0;transition:background-color .2s ease-out,transform .2s ease-out}.blog-carousel-dot:hover{background:var(--pt-edge)}.blog-carousel-dot.is-current{background:var(--pt-ink);transform:scale(1.25)}.blog-sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}@media (prefers-reduced-motion:reduce){.blog-carousel-edge,.blog-carousel-arrow,.blog-carousel-dot{transition:none}}.blog-fumadocs-architecture{--fda-fg:var(--pt-ink);--fda-muted-fg:var(--pt-ink-2);--fda-card:var(--pt-plate);--fda-popover:var(--pt-paper);--fda-secondary:var(--pt-plate);--fda-border:var(--pt-hair);--fda-accent:var(--pt-hair-soft);--fda-dash:var(--pt-cross);margin:2em 0}.blog-fumadocs-architecture svg{width:100%;height:auto;display:block}.blog-fumadocs-architecture .ft{font:500 13px var(--pt-text);fill:var(--fda-fg)}.blog-fumadocs-architecture .fl{font:500 13.5px var(--pt-text);fill:var(--fda-fg)}.blog-fumadocs-architecture .fs{font:400 11.5px var(--pt-text);fill:var(--fda-muted-fg)}.blog-fumadocs-architecture .fm{font:500 12px var(--pt-mono);fill:var(--fda-fg)}.blog-fumadocs-architecture .cardbox,.blog-fumadocs-architecture .cardband{fill:var(--fda-card);stroke:var(--fda-border);stroke-width:1px}.blog-fumadocs-architecture .popbox{fill:var(--fda-popover);stroke:var(--fda-border);stroke-width:1px}.blog-fumadocs-architecture .secband{fill:var(--fda-secondary);stroke:var(--fda-border);stroke-width:1px}.blog-fumadocs-architecture .secband.core{fill:color-mix(in oklab, var(--blog-blue) 7%, var(--fda-secondary));stroke:color-mix(in oklab, var(--blog-blue) 55%, transparent);stroke-width:1.25px}.blog-fumadocs-architecture .core-label{fill:var(--blog-blue)}.blog-fumadocs-architecture .chip.core-chip{fill:color-mix(in oklab, var(--blog-blue) 16%, transparent)}.blog-fumadocs-architecture .dashband{fill:none;stroke:var(--fda-dash);stroke-width:1px;stroke-dasharray:4 4}.blog-fumadocs-architecture .chip{fill:var(--fda-accent)}.blog-fumadocs-architecture .logo{fill:var(--fda-fg)}.blog-fumadocs-architecture .lst{stroke:var(--fda-fg);stroke-width:1.5px;fill:none}.blog-fumadocs-architecture .arr{stroke:var(--fda-muted-fg);stroke-width:1.5px}.blog-fumadocs-architecture .alg,.blog-fumadocs-architecture .tan,.blog-fumadocs-architecture .wak{fill:var(--fda-fg)}.blog-fumadocs-architecture .stopP{stop-color:var(--fda-fg)}.blog-fumadocs-architecture .stopPT{stop-color:var(--fda-fg);stop-opacity:0}.blog-fumadocs-architecture .brand-flexsearch-b{fill:#30a4dc}.blog-fumadocs-architecture .brand-vite{fill:#7c3aed}.blog-fumadocs-architecture .brand-react-router{fill:#ca4245}.blog-fumadocs-architecture .brand-graphql{fill:#e10098}.blog-fumadocs-architecture .brand-flexsearch-a{fill:#f4641d}
