@font-face{font-family:Archivo Expanded;font-style:normal;font-weight:700;font-display:swap;src:url(/assets/fonts/archivo-expanded/ArchivoExpanded-Bold.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:D-DIN Condensed;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/d-din-condensed/DDINCondensed-Regular.subset.woff2) format("woff2");unicode-range:U+0020,U+0030-0039}@font-face{font-family:Abril Fatface;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/abril-fatface/AbrilFatface-Regular.subset.woff2) format("woff2");unicode-range:U+0000-00FF}@font-face{font-family:"Noto Serif SC";font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/noto-serif-sc/NotoSerifSC-Regular.subset.woff2) format("woff2")}@font-face{font-family:"Noto Serif SC";font-style:normal;font-weight:600;font-display:swap;src:url(/assets/fonts/noto-serif-sc/NotoSerifSC-SemiBold.subset.woff2) format("woff2")}.dev-community{color-scheme:light;color:var(--ink);background:var(--bg);font-family:var(--display);letter-spacing:0;-webkit-font-smoothing:antialiased}:root.dark .dev-community{color-scheme:dark}:root[lang|=en] .dev-community .hero-copy h1{text-transform:uppercase}.dev-community *,.dev-community *:before,.dev-community *:after{box-sizing:border-box}.dev-community a{color:inherit;text-decoration:none}.dev-community button{background:none;border:0;font:inherit;cursor:pointer}.dev-community input{font:inherit}.dev-community a:focus-visible,.dev-community button:focus-visible,.dev-community input:focus-visible{outline:2px solid var(--ink);outline-offset:4px}.dev-community .eyebrow,.dev-community .section-index,.dev-community .meta,.dev-community .mono{font-family:var(--mono);font-size:9px;letter-spacing:0;text-transform:uppercase;font-variant-numeric:tabular-nums}.dev-community .home-hero{position:relative;display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:56px;min-height:362px;max-height:366px;padding:0 max(var(--list-pad),calc((100vw - var(--list-max)) / 2));overflow:hidden}.dev-community .home-hero{--hero-visual-w: 500px;--hero-fade: 120px}.dev-community .cover:before{position:absolute;inset:0;content:"";pointer-events:none;background-image:linear-gradient(rgba(var(--grid),.12) 1px,transparent 1px),linear-gradient(90deg,rgba(var(--grid),.12) 1px,transparent 1px);background-size:48px 48px}.dev-community .hero-grid{position:absolute;inset:0;z-index:0;pointer-events:none}.dev-community .hero-grid--static{background-image:linear-gradient(rgba(var(--grid),.12) 1px,transparent 1px),linear-gradient(90deg,rgba(var(--grid),.12) 1px,transparent 1px);background-size:48px 48px}.dev-community .hero-fade-veil{position:absolute;left:0;right:0;bottom:0;z-index:2;height:var(--hero-fade);background:linear-gradient(to bottom,transparent,var(--bg));pointer-events:none}.dev-community .hero-copy{position:relative;z-index:3;flex:0 1 auto;min-width:0;align-self:flex-start;margin-top:64px}.dev-community .hero-copy .eyebrow{position:relative;margin:0 0 30px;padding-top:24px;color:var(--muted);font-family:var(--mono);font-size:12px}.dev-community .hero-copy .eyebrow:before{position:absolute;top:0;left:0;content:"";width:32px;height:1px;background:var(--ink);transform:scaleX(var(--enter-tick, 1));transform-origin:left center}.dev-community .hero-copy .eyebrow__sep{margin:0 14px;opacity:.45}.dev-community .hero-copy h1{max-width:880px;margin:0;font-family:"Archivo Expanded",var(--display);font-size:132px;font-weight:700;line-height:.88;letter-spacing:0}.dev-community .hero-copy h1 span{color:var(--muted)}.dev-community .home-hero[data-branch=blog] .hero-copy h1{font-size:120px;line-height:.78;letter-spacing:0}:root[lang|=en] .dev-community .home-hero[data-branch=blog] .hero-copy h1{font-family:"Abril Fatface",var(--display);font-size:120px;font-weight:400;text-transform:none;letter-spacing:0}.dev-community .home-hero[data-branch=cookbook] .hero-copy h1,.dev-community .home-hero[data-branch=showcase] .hero-copy h1{font-size:clamp(56px,10vw,120px);line-height:.84}:root[lang|=en] .dev-community .home-hero[data-branch=cookbook] .hero-copy h1,:root[lang|=en] .dev-community .home-hero[data-branch=showcase] .hero-copy h1{font-family:"Abril Fatface",var(--display);font-weight:400;text-transform:none;font-size:clamp(48px,7.5vw,120px);letter-spacing:0}.dev-community .hero-status{display:flex;align-items:center;flex-wrap:wrap;gap:16px;margin:30px 0 0;padding:16px 0;color:var(--ink);font-family:var(--mono);font-size:14px}.dev-community .hero-status__item{display:inline-flex;align-items:center;gap:8px}.dev-community .hero-status__icon{flex:0 0 auto;width:16px;height:16px}.dev-community .hero-status__divider{width:1px;height:12px;background:var(--line)}.dev-community .hero-visual{position:relative;z-index:1;display:flex;flex-direction:column;justify-content:flex-end;flex:0 0 auto;align-self:stretch;width:var(--hero-visual-w);overflow:hidden;pointer-events:none}.dev-community .hero-visual__img{display:block;width:100%;height:auto}.dev-community .hero-visual__img--dark{display:none}:root.dark .dev-community .hero-visual__img--light{display:none}:root.dark .dev-community .hero-visual__img--dark{display:block}.dev-community .hero-rule{position:relative;z-index:4;width:min(calc(100% - 2 * var(--list-pad)),var(--list-max));height:1px;margin:0 auto 44px;background:var(--line)}.dev-community .hero-rule:before{content:"";position:absolute;top:50%;left:0;width:8px;height:8px;border-radius:50%;background:var(--ink);transform:translateY(-50%) scale(var(--enter-dot, 1));transform-origin:center}.dev-community .section{width:min(calc(100% - 2 * var(--list-pad)),var(--list-max));margin:0 auto;padding:112px 0}.dev-community #latest.section{margin:0 auto 120px;padding:0}.dev-community .section-head{display:grid;grid-template-columns:1fr minmax(260px,420px);gap:48px;align-items:end;margin-bottom:44px;padding-top:18px;border-top:1px solid var(--ink)}.dev-community .section-head h2{margin:18px 0 0;font-size:clamp(40px,5vw,70px);font-weight:560;line-height:1;letter-spacing:0}.dev-community .section-head p{margin:0;color:var(--muted);font-family:var(--body);line-height:1.75}.dev-community .section-index{color:var(--muted)}.dev-community .cat-bar{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;grid-template-rows:1fr;height:64px;margin:0 0 44px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.dev-community .cat-tab{display:flex;align-items:center;justify-content:center;gap:16px;min-width:0;min-height:0;padding:20px 22px;text-align:left;color:var(--ink);background:transparent;border-left:1px solid var(--line);cursor:pointer;transition:color .18s var(--ease),background .18s var(--ease)}.dev-community .cat-tab:first-child{border-left:0}.dev-community .cat-tab__num{flex:0 0 auto;font-family:"D-DIN Condensed",var(--mono);font-size:32px;font-weight:100;color:var(--ink);font-variant-numeric:tabular-nums;transition:color .18s var(--ease)}.dev-community .cat-tab__text{display:flex;flex-direction:column;gap:8px;min-width:0}.dev-community .cat-tab__label{font-size:15px;font-weight:560;line-height:1}.dev-community .cat-tab__tagline{font-family:var(--mono);font-size:9px;line-height:1;color:var(--muted);text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dev-community .cat-tab:hover:not(.is-active){background:color-mix(in srgb,var(--ink) 5%,transparent)}.dev-community .cat-tab.is-active{color:var(--panel-ink);background:var(--panel)}.dev-community .cat-tab.is-active .cat-tab__num{color:inherit}.dev-community .cat-tab.is-active .cat-tab__tagline{color:color-mix(in srgb,var(--panel-ink) 60%,transparent)}:root.dark .dev-community .cat-tab.is-active{color:var(--panel);background:var(--panel-ink)}:root.dark .dev-community .cat-tab.is-active .cat-tab__tagline{color:color-mix(in srgb,var(--panel) 55%,transparent)}.dev-community .pagination{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin:80px 0 88px}.dev-community .page-btn{display:inline-flex;align-items:center;justify-content:center;min-width:40px;height:40px;padding:0 12px;color:var(--muted);font-family:var(--mono);font-size:11px;letter-spacing:0;font-variant-numeric:tabular-nums;border:1px solid var(--line);transition:color .18s var(--ease),border-color .18s var(--ease),background .18s var(--ease)}.dev-community .page-btn:hover:not(:disabled){color:var(--ink);border-color:var(--ink)}.dev-community .page-btn.is-active{color:var(--panel-ink);background:var(--panel);border-color:var(--panel)}.dev-community .page-btn:disabled{opacity:.4;cursor:not-allowed}.dev-community .card-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:68px 28px}.dev-community .content-card{display:flex;flex-direction:column;min-width:0}.dev-community .cover{position:relative;display:grid;place-items:center;aspect-ratio:16/10;overflow:hidden;background:var(--surface);border:1px solid var(--line)}.dev-community .cover i{position:relative;z-index:2;width:34%;aspect-ratio:1;border:1px solid var(--ink);transform:rotate(45deg);transition:transform .26s var(--ease)}.dev-community .cover--orbit i{border-radius:50%;transform:none;box-shadow:0 0 0 28px transparent,0 0 0 29px var(--ink)}.dev-community .cover--stack i{transform:rotate(0);box-shadow:24px 24px 0 -1px var(--surface),24px 24px 0 0 var(--ink)}.dev-community .cover--wave i{width:46%;height:22%;aspect-ratio:auto;border-radius:50%;transform:rotate(-18deg)}.dev-community .cover--stage i{width:52%;height:42%;aspect-ratio:auto;transform:none}.dev-community .content-card:hover .cover i{transform:rotate(45deg) scale(1.05)}.dev-community .content-card:hover .cover--orbit i,.dev-community .content-card:hover .cover--wave i,.dev-community .content-card:hover .cover--stage i{transform:scale(1.05)}.dev-community .cover span{position:absolute;z-index:3;right:12px;bottom:10px;left:12px;color:var(--muted);font-family:var(--mono);font-size:8px;letter-spacing:0}.dev-community .cover img{position:absolute;inset:0;z-index:1;width:100%;height:100%;-o-object-fit:cover;object-fit:cover;transition:transform .32s var(--ease)}.dev-community .content-card:hover .cover img{transform:scale(1.04)}.dev-community .cover--image:after{position:absolute;inset:auto 0 0;z-index:2;height:56%;content:"";background:linear-gradient(to top,rgba(17,18,16,.72),transparent);pointer-events:none}.dev-community .cover--image span{color:#f3f3ef}.dev-community .card-meta{display:flex;justify-content:space-between;margin-top:18px;padding-top:12px;color:var(--muted);border-top:1px solid var(--line)}.dev-community .content-card h3{margin:18px 0 14px;font-size:clamp(18px,1.6vw,22px);font-weight:570;line-height:1.26;letter-spacing:0}.dev-community .content-card>p{margin:0;color:var(--muted);font-family:var(--body);font-size:14px;line-height:1.75}.dev-community .content-card footer{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:auto;padding-top:26px;color:var(--muted);font-family:var(--mono);font-size:8px}.dev-community .card-byline{display:flex;flex-direction:column;gap:5px;min-width:0}.dev-community .card-author{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--display);font-size:10px;font-weight:500;color:var(--ink)}.dev-community .card-arrow{display:grid;place-items:center;width:34px;height:34px;color:var(--panel-ink);background:var(--panel);border:1px solid var(--panel);transition:color .22s var(--ease),background .22s var(--ease),border-color .22s var(--ease),transform .22s var(--ease)}:root.dark .dev-community .card-arrow{color:var(--panel);background:var(--panel-ink);border-color:var(--panel-ink)}@media(hover:hover)and (pointer:fine){.dev-community .card-arrow:hover{color:var(--ink);background:transparent;border-color:var(--ink);transform:translate(2px,-2px)}:root.dark .dev-community .card-arrow:hover{color:var(--ink);background:transparent;border-color:var(--ink)}}@media(prefers-reduced-motion:reduce){.dev-community .card-arrow:hover{transform:none}}.dev-community .showcase-shot{position:relative;aspect-ratio:16/10;overflow:hidden;background:var(--surface);border:1px solid var(--line)}.dev-community .showcase-shot img{position:absolute;inset:0;width:100%;height:100%;-o-object-fit:cover;object-fit:cover;transition:transform .32s var(--ease)}.dev-community .content-card:hover .showcase-shot img{transform:scale(1.04)}.dev-community .card-grid[data-branch=showcase] .content-card h3{display:block;margin:20px 0 10px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.dev-community .card-grid[data-branch=showcase] .content-card>p{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.dev-community .card-grid[data-branch=showcase] .content-card .card-byline{flex-direction:row;align-items:center;gap:10px}.dev-community .card-grid[data-branch=showcase] .content-card .card-author{font-size:12px}.dev-community .card-avatar{flex:0 0 auto;display:grid;place-items:center;width:24px;height:24px;border-radius:50%;-o-object-fit:cover;object-fit:cover;border:1px solid var(--line)}.dev-community .card-avatar--letter{color:var(--ink);background:var(--surface);font-family:var(--display);font-size:11px;font-weight:570;line-height:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}.dev-community .card-grid[data-branch=cookbook]{grid-template-columns:repeat(2,minmax(0,1fr));gap:28px}.dev-community .card-grid[data-branch=cookbook] .content-card{display:grid;grid-template-columns:8fr 7fr;grid-template-rows:auto auto 1fr auto;-moz-column-gap:24px;column-gap:24px;min-height:200px}.dev-community .card-grid[data-branch=cookbook] .content-card .cover{grid-column:1;grid-row:1 / -1;aspect-ratio:auto;height:100%;min-height:0}.dev-community .card-grid[data-branch=cookbook] .content-card .card-meta{grid-column:2;grid-row:3;align-self:start;justify-content:flex-start;margin-top:12px;border-top:0;padding-top:0}.dev-community .card-grid[data-branch=cookbook] .content-card .card-meta span{display:inline-flex;align-items:center;padding:4px 10px;color:var(--muted);font-size:11px;line-height:1;text-transform:none;border:1px solid var(--line);border-radius:0}.dev-community .card-grid[data-branch=cookbook] .content-card .card-meta span:before{content:"#"}.dev-community .card-grid[data-branch=cookbook] .content-card .card-meta time{display:none}.dev-community .card-grid[data-branch=cookbook] .content-card .card-author,.dev-community .card-grid[data-branch=cookbook] .content-card .cover span{display:none}.dev-community .card-grid[data-branch=cookbook] .content-card h3{grid-column:2;grid-row:1;margin:0 0 8px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.dev-community .card-grid[data-branch=cookbook] .content-card>p{grid-column:2;grid-row:2;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.dev-community .card-grid[data-branch=cookbook] .content-card footer{grid-column:2;grid-row:4;padding-top:10px}.dev-community .card-grid[data-branch=events]{grid-template-columns:1fr;gap:28px}.dev-community .event-row{flex-direction:row;gap:32px;padding:24px;border:1px solid var(--line);transition:border-color .22s var(--ease)}.dev-community .event-row:hover{border-color:var(--ink)}.dev-community .event-row__media{position:relative;flex:0 0 38%;aspect-ratio:16/10;overflow:hidden}.dev-community .event-row__media:not(.cover){background:var(--surface);border:1px solid var(--line)}.dev-community .event-row__media img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;transition:transform .32s var(--ease)}.dev-community .event-row:hover .event-row__media img{transform:scale(1.04)}.dev-community .event-row__body{flex:1;min-width:0;display:flex;flex-direction:column;align-items:flex-start;gap:12px;padding:4px 0}.dev-community .event-row__meta{display:flex;align-items:center;gap:14px;font-family:var(--mono);font-size:11px;color:var(--muted)}.dev-community .event-badge{display:inline-flex;align-items:center;padding:3px 8px;font-family:var(--mono);font-size:10px;text-transform:uppercase;letter-spacing:0;color:var(--bg);background:var(--ink)}.dev-community .event-badge--upcoming{color:var(--ink);background:transparent;border:1px solid var(--ink)}.dev-community .event-badge--ended{color:var(--muted);background:transparent;border:1px solid var(--line)}.dev-community .event-row h3{margin:2px 0 0;font-size:26px;font-weight:570;line-height:1.25;letter-spacing:0;color:var(--ink)}.dev-community .event-row>.event-row__body>p{margin:0;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;color:var(--ink-soft);font-family:var(--body);font-size:15px;line-height:1.8}.dev-community .event-row__host{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font-family:var(--body);font-size:13px}.dev-community .event-row__host svg{flex:none;width:14px;height:14px}.dev-community .event-row__cta{display:inline-flex;align-items:center;gap:6px;margin-top:auto;padding:10px 18px;border:1px solid var(--ink);background:var(--ink);font-family:var(--mono);font-size:12px;text-transform:uppercase;letter-spacing:0;color:var(--bg);transition:background .18s var(--ease),color .18s var(--ease)}.dev-community .event-row__cta svg{width:12px;height:12px;transition:translate .18s var(--ease)}@media(hover:hover)and (pointer:fine){.dev-community .event-row__cta:hover{background:transparent;color:var(--ink)}.dev-community .event-row__cta:hover svg{translate:2px -2px}}@media(prefers-reduced-motion:reduce){.dev-community .event-row__cta:hover svg{translate:none}}.dev-community .event-empty{display:grid;place-items:center;gap:14px;padding:96px 24px;border:1px dashed var(--line);text-align:center}.dev-community .event-empty__mark{color:var(--muted)}.dev-community .event-empty p{margin:0;color:var(--muted);font-family:var(--body);font-size:15px}@media(max-width:820px){.dev-community .event-row{flex-direction:column;gap:18px;padding:18px}.dev-community .event-row__media{flex:none;width:100%}.dev-community .event-row h3{font-size:22px}}.dev-community .read-progress{position:sticky;top:0;z-index:40;opacity:0;visibility:hidden;transition:opacity .3s var(--ease)}.dev-community .read-progress.is-visible{opacity:1;visibility:visible}.dev-community .read-progress-track{position:relative;display:flex;justify-content:flex-start;width:100%;height:2px;background:rgba(var(--grid),.12)}.dev-community .read-progress-bar{flex:none;width:0;height:100%;background:var(--ink);transition:width .12s linear}.dev-community .detail-hero{position:relative;display:flex;flex-direction:column;justify-content:flex-start;min-height:320px;padding:32px max(var(--list-pad),calc((100vw - var(--list-max)) / 2));border-bottom:1px solid var(--line);overflow:hidden}.dev-community .detail-hero:before{position:absolute;inset:0;content:"";background-image:linear-gradient(rgba(var(--grid),.1) 1px,transparent 1px),linear-gradient(90deg,rgba(var(--grid),.1) 1px,transparent 1px);background-size:64px 64px}.dev-community .detail-hero>*{position:relative;z-index:1}.dev-community .detail-hero .detail-back{align-self:flex-start;margin:0 0 16px;display:inline-flex;align-items:center;justify-content:center;gap:8px;height:32px;padding:0 14px;color:var(--ink);background:#e4e4e2;font-family:var(--mono);font-size:11px;text-transform:uppercase;letter-spacing:0;border:none;transition:color .18s var(--ease),background .18s var(--ease)}:root.dark .dev-community .detail-hero .detail-back{background:#3d3d3d}.dev-community .detail-back__icon{font-size:13px;line-height:1}.dev-community .detail-hero .detail-back:hover,:root.dark .dev-community .detail-hero .detail-back:hover{color:var(--bg);background:color-mix(in srgb,var(--ink) 90%,transparent)}.dev-community .detail-hero h1{max-width:1120px;margin:20px 0 16px;font-size:56px;font-weight:620;line-height:1.2;letter-spacing:0}.dev-community .detail-meta{display:flex;flex-wrap:wrap;gap:28px;margin-top:20px;color:var(--muted);font-family:var(--mono);font-size:12px;font-variant-numeric:tabular-nums}.dev-community .content-figure{margin:10px 0 82px}.dev-community .content-figure img,.dev-community .content-figure video{display:block;width:100%;height:auto;-o-object-fit:cover;object-fit:cover;border:1px solid var(--line)}.dev-community .content-figure video.is-portrait{width:auto;max-width:100%;max-height:560px;margin:0 auto}.dev-community .content-figure figcaption{margin-top:14px;text-align:center;font-style:italic;color:var(--muted);font-family:var(--body);font-size:13px;line-height:1.65}.dev-community .content-figure figcaption .credit{display:block;margin-top:4px;font-size:12px}.dev-community .detail-shell{display:grid;grid-template-columns:250px minmax(0,var(--reading)) 210px;gap:56px;align-items:start;width:min(calc(100% - 2 * var(--list-pad)),var(--list-max));margin:0 auto;padding:100px 0 130px}.dev-community .detail-shell[data-branch=cookbook]{grid-template-columns:minmax(0,var(--reading)) 210px;justify-content:center}.dev-community .detail-rail{position:sticky;top:40px}.dev-community .detail-rail p{margin:0 0 15px;padding-bottom:12px;color:var(--muted);border-bottom:1px solid var(--line)}.dev-community .detail-rail nav{display:grid}.dev-community .detail-rail nav a{padding:11px 0;color:var(--muted);font-size:11px;border-bottom:1px solid transparent;cursor:pointer}.dev-community .detail-rail nav a:hover,.dev-community .detail-rail nav a.active{color:var(--ink);border-bottom-color:var(--ink)}.dev-community .detail-body section{padding-bottom:72px;scroll-margin-top:82px}.dev-community .detail-body .section-index{margin:0 0 18px;color:var(--muted)}.dev-community .detail-body h2{margin:0 0 28px;font-size:32px;font-weight:570;line-height:1.12;letter-spacing:0}.dev-community .detail-body p{margin:0 0 1.55em;color:var(--ink-soft);font-family:var(--body);font-size:16px;line-height:1.95}.dev-community .detail-body .section-bullets{margin:0 0 1.55em;padding:0;list-style:none}.dev-community .detail-body .section-bullets li{position:relative;margin:0 0 12px;padding-left:22px;color:var(--ink-soft);font-family:var(--body);font-size:16px;line-height:1.85}.dev-community .detail-body .section-bullets li:before{content:"";position:absolute;left:2px;top:.74em;width:6px;height:6px;background:var(--ink)}.dev-community .detail-body code{padding:2px 6px;color:var(--ink);background:var(--surface);border:1px solid var(--line);font-family:var(--mono);font-size:.85em}.dev-community .detail-body section .content-figure{margin:34px 0 44px}.dev-community .detail-body section .content-figure:last-child{margin-bottom:0}.dev-community .detail-body .section-file-link{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-top:34px;padding:18px 20px;color:var(--ink);border:1px solid var(--line);font-family:var(--mono);font-size:13px;transition:color .22s var(--ease),background .22s var(--ease),border-color .22s var(--ease)}.dev-community .detail-body .section-file-link:hover{color:var(--panel-ink);background:var(--panel);border-color:var(--panel)}:root.dark .dev-community .detail-body .section-file-link:hover{color:var(--panel);background:var(--panel-ink);border-color:var(--panel-ink)}.dev-community .detail-body .section-file-link+.section-file-link{margin-top:-1px}.dev-community .detail-body .content-code{margin:28px 0 40px}.dev-community .detail-body .content-code:last-child{margin-bottom:0}.dev-community .detail-body .content-code figcaption{margin:0 0 10px;color:var(--muted);font-family:var(--mono);font-size:12px;letter-spacing:.04em}.dev-community .detail-body .content-code pre{margin:0;padding:20px 22px;color:var(--ink);background:var(--surface);border:1px solid var(--line);font-family:var(--mono);font-size:13px;line-height:1.8;white-space:pre-wrap;overflow-wrap:anywhere;-moz-tab-size:2;-o-tab-size:2;tab-size:2}.dev-community .detail-body blockquote{margin:10px 0 82px;padding:44px;color:var(--panel-ink);background:var(--panel);font-family:var(--body);font-size:clamp(28px,4vw,44px);line-height:1.45}.dev-community .detail-side{position:sticky;top:40px;padding:24px;color:var(--ink);background:var(--surface);border:0}.dev-community .detail-side>span{color:var(--muted)}.dev-community .detail-side dl{margin:28px 0 0}.dev-community .detail-side dl div{display:grid;grid-template-columns:78px 1fr;gap:12px;padding:12px 0;border-top:1px solid var(--line)}.dev-community .detail-side dt,.dev-community .detail-side dd{margin:0;font-size:11px}.dev-community .detail-side dt{color:var(--muted)}.dev-community .detail-side p{margin:18px 0 0;color:var(--muted);font-size:11px;line-height:1.7}:root.dark .dev-community .detail-side{color:var(--panel-ink);background:var(--panel);border:0}:root.dark .dev-community .detail-side>span,:root.dark .dev-community .detail-side dt,:root.dark .dev-community .detail-side p{color:var(--panel-muted)}:root.dark .dev-community .detail-side dl div{border-top-color:color-mix(in srgb,var(--panel-ink) 24%,transparent)}.dev-community .metric-strip{display:grid;grid-template-columns:repeat(3,1fr);margin:12px 0 82px;background:#fff}.dev-community .metric-strip div{padding:26px}.dev-community .metric-strip strong{display:block;font-size:36px;font-weight:480;font-variant-numeric:tabular-nums}.dev-community .metric-strip span{color:var(--muted);font-size:10px}:root.dark .dev-community .metric-strip{background:var(--surface)}.dev-community .key-takeaways{margin:0 0 82px;padding:32px;border:1px solid var(--ink)}.dev-community .key-takeaways h2{margin:0 0 28px;font-size:32px;font-weight:570;letter-spacing:0}.dev-community .key-takeaways ul{margin:0;padding:0 0 0 1.1em;list-style:disc}.dev-community .key-takeaways li{padding:9px 0;color:var(--ink-soft);font-family:var(--body);font-size:16px;line-height:1.75}.dev-community .key-takeaways li strong{display:block;margin-bottom:2px;color:var(--ink);font-weight:600}.dev-community .detail-body blockquote.pull-quote{color:var(--ink);background:#fff}:root.dark .dev-community .detail-body blockquote.pull-quote{color:var(--panel-ink);background:var(--panel)}.dev-community .pull-quote p{margin:0;color:inherit;font-size:inherit;line-height:inherit}.dev-community .pull-quote footer{display:flex;align-items:flex-start;gap:16px;margin-top:32px;color:var(--muted);font-family:var(--body);font-style:italic;font-size:15px;line-height:1.6}:root.dark .dev-community .pull-quote footer{color:var(--panel-muted)}.dev-community .pull-quote footer:before{content:"";flex:0 0 auto;width:40px;height:1px;margin-top:.75em;background:currentColor;opacity:.55}.dev-community .source-link{display:block;margin-top:24px;padding:16px 0 4px;color:var(--ink);font-size:11px;border-top:1px solid var(--line);cursor:pointer;transition:border-color .18s var(--ease)}.dev-community .source-link+.source-link{margin-top:12px}.dev-community .source-link:hover{border-top-color:var(--ink)}.dev-community .source-link__label{display:inline-block;transition:transform .18s var(--ease)}@media(hover:hover)and (pointer:fine){.dev-community .source-link:hover .source-link__label{transform:translate(2px,-2px)}}@media(prefers-reduced-motion:reduce){.dev-community .source-link:hover .source-link__label{transform:none}}:root.dark .dev-community .source-link{color:var(--panel-ink);border-top-color:color-mix(in srgb,var(--panel-ink) 24%,transparent)}:root.dark .dev-community .source-link:hover{border-top-color:var(--panel-ink)}.dev-community .article-cta{margin-top:20px;padding:42px;color:var(--panel-ink);background:var(--panel)}:root:not(.dark) .dev-community .article-cta{--panel: #fff;--panel-ink: var(--ink);--panel-muted: var(--muted)}.dev-community .detail-body .article-cta h2{max-width:560px;margin-top:18px;font-size:32px}.dev-community .detail-body .article-cta p{color:var(--panel-muted)}.dev-community .article-cta__links{display:flex;flex-wrap:wrap;gap:12px;margin-top:30px}.dev-community .article-cta__links a{display:inline-flex;align-items:center;min-height:44px;padding:12px 16px;font-size:11px;border:1px solid color-mix(in srgb,var(--panel-ink) 32%,transparent);transition:color .18s var(--ease),background .18s var(--ease),border-color .18s var(--ease)}.dev-community .article-cta .article-cta__links a:first-child,.dev-community .article-cta__links a:hover{color:var(--panel);background:var(--panel-ink);border-color:var(--panel-ink)}.dev-community .article-cta .article-cta__links a:first-child:hover{color:var(--panel-ink);background:transparent;border-color:var(--panel-ink)}.dev-community .detail-hero .project-intro{margin:8px 0 0;color:var(--ink-soft);font-family:var(--body);font-size:18px;line-height:1.8}.dev-community .detail-meta__author{display:inline-flex;align-items:center;gap:10px}.dev-community .detail-meta__author .card-avatar{width:26px;height:26px}.dev-community .detail-meta__author .card-avatar--letter{font-size:12px}.dev-community .detail-meta__link{display:inline-flex;align-items:center;gap:5px;color:inherit;text-decoration:underline;text-underline-offset:3px;font-style:italic;transition:color .18s var(--ease)}.dev-community .detail-meta__link:hover{color:var(--ink)}.dev-community .detail-hero.project-hero{flex-direction:row;align-items:center;gap:64px}.dev-community .project-hero .detail-hero__main{flex:1;min-width:0;display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start}.dev-community .detail-hero .detail-live-btn{flex:none;display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:12px 22px;color:var(--bg);background:var(--ink);font-family:var(--mono);font-size:11px;text-transform:uppercase;letter-spacing:0;border:1px solid var(--ink);cursor:pointer;transition:color .18s var(--ease),background .18s var(--ease),translate .18s var(--ease)}.dev-community .detail-hero .detail-live-btn:hover{color:var(--ink);background:transparent}.dev-community .detail-shell.project-shell{grid-template-columns:250px minmax(0,1fr);padding-bottom:96px}.dev-community .project-main{--module-gap: 96px;min-width:0}.dev-community .project-shell .detail-side dl div{grid-template-columns:86px 1fr}.dev-community .project-shell .detail-side dd{line-height:1.7}.dev-community .project-shot{position:relative;margin:0;border:1px solid var(--line);overflow:hidden}.dev-community .project-shot img{display:block;width:100%;height:auto;transition:filter .25s var(--ease),transform .5s var(--ease)}.dev-community .project-shot:hover img,.dev-community .project-shot:focus-within img{filter:brightness(.45);transform:scale(1.03)}.dev-community .project-live-btn{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:12px 22px;color:#111210;background:#efefea;font-family:var(--mono);font-size:11px;text-transform:uppercase;letter-spacing:0;border:1px solid #efefea;cursor:pointer;opacity:0;pointer-events:none;transition:opacity .22s var(--ease),color .18s var(--ease),background .18s var(--ease),translate .18s var(--ease)}.dev-community .project-shot:hover .project-live-btn,.dev-community .project-shot:focus-within .project-live-btn{opacity:1;pointer-events:auto}.dev-community .project-live-btn:hover{color:#efefea;background:transparent;border-color:#efefea}@media(hover:hover)and (pointer:fine){.dev-community .detail-hero .detail-live-btn:hover,.dev-community .project-live-btn:hover{translate:2px -2px}}@media(prefers-reduced-motion:reduce){.dev-community .detail-hero .detail-live-btn:hover,.dev-community .project-live-btn:hover{translate:none}}.dev-community .project-body{padding:var(--module-gap) 0 0}.dev-community .project-body>*+*{margin-top:var(--module-gap)}.dev-community .project-body h2{margin:0 0 24px;font-size:32px;font-weight:570;line-height:1.12;letter-spacing:0}.dev-community .project-body p{margin:0 0 1.55em;color:var(--ink-soft);font-family:var(--body);font-size:16px;line-height:1.95}.dev-community .project-body section ul{margin:0 0 1.55em;padding:0;list-style:none;display:grid;gap:10px}.dev-community .project-body section ul li{position:relative;padding-left:24px;color:var(--ink-soft);font-family:var(--body);font-size:16px;line-height:1.95}.dev-community .project-body section ul li:before{content:"—";position:absolute;left:0;top:0;color:var(--muted)}.dev-community .project-highlights h2,.dev-community .project-devlog h2,.dev-community .project-video h2,.dev-community .project-related h2{margin:0;font-size:32px;font-weight:570;line-height:1.12;letter-spacing:0}:root[lang|=en] .dev-community .project-body h2,:root[lang|=en] .dev-community .project-highlights h2,:root[lang|=en] .dev-community .project-devlog h2,:root[lang|=en] .dev-community .project-video h2,:root[lang|=en] .dev-community .project-related h2{text-transform:uppercase}.dev-community .project-quote{position:relative;padding:52px 56px 56px;color:var(--ink);background:#fff;font-family:"Noto Serif SC",Songti SC,serif;clip-path:polygon(0 -60px,100% -60px,100% 100%,36px 100%,0 calc(100% - 36px))}:root.dark .dev-community .project-quote{color:var(--panel-ink);background:var(--panel)}.dev-community .project-quote__mark{position:absolute;top:-22px;right:56px;width:84px;height:auto;fill:currentColor}.dev-community .project-quote__tag{display:inline-block;padding:5px 10px;color:color-mix(in srgb,var(--ink) 82%,transparent);background:color-mix(in srgb,var(--ink) 10%,transparent);font-size:12px;text-transform:uppercase;letter-spacing:.04em}:root.dark .dev-community .project-quote__tag{color:color-mix(in srgb,var(--panel-ink) 82%,transparent);background:color-mix(in srgb,var(--panel-ink) 14%,transparent)}.dev-community .project-quote .project-quote__line{margin:24px 0 0;color:inherit;font-family:inherit;font-size:19px;font-weight:600;line-height:1.6}.dev-community .project-quote .project-quote__body{margin:18px 0 0;color:var(--ink-soft);font-family:inherit;font-size:15px;line-height:2}:root.dark .dev-community .project-quote .project-quote__body{color:var(--panel-muted)}.dev-community .project-gallery{display:flex;flex-wrap:wrap;gap:10px;margin-top:10px}.dev-community .project-gallery button{flex:0 0 auto;width:calc((100% - 50px) / 6);padding:0;border:1px solid var(--line);background:none;cursor:pointer;opacity:.55;transition:opacity .18s var(--ease),border-color .18s var(--ease)}.dev-community .project-gallery button:hover{opacity:.85}.dev-community .project-gallery button.is-active{border-color:var(--ink);opacity:1}.dev-community .project-gallery img{display:block;width:100%;aspect-ratio:16 / 9;-o-object-fit:cover;object-fit:cover}.dev-community .project-video{margin:var(--module-gap) 0 0}.dev-community .project-video h2{margin-bottom:22px}.dev-community .project-video video{display:block;width:100%;border:1px solid var(--line);background:var(--panel)}.dev-community .project-video__placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;aspect-ratio:16 / 9;padding:24px;border:1px solid var(--line);background:var(--surface);text-align:center}.dev-community .project-video__placeholder svg{width:48px;height:48px;fill:none;stroke:var(--muted);stroke-width:2}.dev-community .project-video__placeholder svg path{fill:var(--muted);stroke:none}.dev-community .project-video__placeholder p{margin:0;color:var(--ink-soft);font-family:var(--body);font-size:14px;line-height:1.7}.dev-community .project-video__placeholder a{color:var(--ink);font-family:var(--mono);font-size:11px;text-transform:uppercase;border-bottom:1px solid var(--ink);padding-bottom:2px}.dev-community .project-highlights{margin:var(--module-gap) 0 0}.dev-community .project-highlights h2{margin-bottom:22px}.dev-community .project-highlights ol{margin:0;padding:0;list-style:none}.dev-community .project-highlights li{display:grid;grid-template-columns:34px 1fr;gap:16px;align-items:baseline;padding:15px 0;color:var(--ink-soft);font-family:var(--body);font-size:15.5px;line-height:1.75;border-top:1px solid var(--line)}.dev-community .project-highlights li>.mono{color:var(--muted);font-size:10px}.dev-community .project-devlog{margin:var(--module-gap) 0 0}.dev-community .project-devlog h2{margin-bottom:22px}.dev-community .project-devlog ul{margin:0;padding:0;list-style:none}.dev-community .project-devlog li{display:grid;grid-template-columns:34px 1fr;gap:16px;padding:26px 0 28px;border-top:1px solid var(--line)}.dev-community .project-devlog li:before{content:"";width:7px;height:7px;margin-top:9px;background:var(--muted)}.dev-community .project-devlog h3{margin:0 0 12px;font-family:var(--body);font-size:19px;font-weight:570;line-height:1.3;letter-spacing:0}.dev-community .project-devlog__content p{margin:0 0 1.1em;color:var(--ink-soft);font-family:var(--body);font-size:15.5px;line-height:1.9}.dev-community .project-devlog__content p:last-of-type{margin-bottom:0}.dev-community .project-devlog__meta{display:flex;flex-wrap:wrap;align-items:baseline;gap:10px 22px;margin-top:16px}.dev-community .project-devlog__stack{color:var(--muted);font-size:10px;letter-spacing:.02em}.dev-community .project-devlog__stack a{color:inherit;text-decoration:none;padding-bottom:1px;border-bottom:1px solid color-mix(in srgb,var(--muted) 55%,transparent);transition:color .18s var(--ease),border-color .18s var(--ease)}.dev-community .project-devlog__stack a:hover{color:var(--ink);border-bottom-color:var(--ink)}.dev-community .project-devlog__docs{display:inline-flex;flex-wrap:wrap;align-items:baseline;gap:10px 14px}.dev-community .project-devlog__docs-label{color:var(--muted);font-size:10px}.dev-community .project-devlog__doc{color:var(--ink);font-size:10px;text-decoration:none;padding-bottom:2px;border-bottom:1px solid color-mix(in srgb,var(--ink) 35%,transparent);transition:color .18s var(--ease),border-color .18s var(--ease)}.dev-community .project-devlog__doc:hover{border-bottom-color:var(--ink)}.dev-community .project-prompt{margin:var(--module-gap) 0 0;padding:28px 30px;background:var(--surface);border:1px solid var(--line)}.dev-community .project-prompt header{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:0 0 20px}.dev-community .project-prompt h3{margin:0;font-family:var(--body);font-size:19px;font-weight:570;line-height:1.3;letter-spacing:0}:root[lang|=en] .dev-community .project-prompt h3{text-transform:uppercase}.dev-community .project-prompt button{padding:8px 14px;color:var(--ink);background:transparent;font-family:var(--mono);font-size:10px;text-transform:uppercase;letter-spacing:0;border:1px solid var(--ink);cursor:pointer;transition:color .18s var(--ease),background .18s var(--ease)}.dev-community .project-prompt button:hover{color:var(--bg);background:var(--ink)}.dev-community .project-prompt pre{margin:0;color:var(--ink-soft);font-family:var(--mono);font-size:12px;line-height:1.9;white-space:pre-wrap;word-break:break-word}.dev-community .project-prompt__note{margin:18px 0 0;color:var(--muted);font-family:var(--body);font-style:italic;font-size:12px}.dev-community .project-related{width:min(calc(100% - 2 * var(--list-pad)),var(--list-max));margin:0 auto;padding:48px 0 130px;border-top:1px solid var(--line)}.dev-community .project-related h2{margin-bottom:40px}.dev-community .not-found{width:min(calc(100% - 48px),760px);margin:120px auto;padding:50px;border:1px solid var(--line)}.dev-community .not-found h1{font-size:48px}.dev-community .not-found a{display:inline-block;margin-top:24px;padding-bottom:6px;border-bottom:1px solid;transition:color .18s var(--ease)}.dev-community .not-found a:hover{color:var(--muted)}@media(max-width:1100px){.dev-community .card-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.dev-community .detail-shell{display:block;width:min(calc(100% - 2 * var(--list-pad)),var(--reading))}.dev-community .detail-rail,.dev-community .detail-side{display:none}}@media(max-width:1099px){.dev-community .hero-visual{display:none}}@media(max-width:1024px){.dev-community .cat-tab{padding:16px;gap:12px}.dev-community .cat-tab__num{font-size:20px}.dev-community .cat-tab__tagline{display:none}}@media(max-width:820px){.dev-community .section{padding:88px 0}.dev-community .section-head{grid-template-columns:1fr;gap:24px}.dev-community .detail-shell{width:min(calc(100% - 48px),var(--reading));padding-top:72px}.dev-community .project-related{width:calc(100% - 48px)}.dev-community .detail-hero.project-hero{flex-direction:column;align-items:stretch;gap:0}.dev-community .detail-hero .detail-live-btn{align-self:flex-start;margin-top:24px}}@media(max-width:768px){.dev-community .card-grid[data-branch=cookbook]{grid-template-columns:1fr}}@media(max-width:720px){.dev-community .cat-tab{justify-content:center;gap:0;padding:15px 8px;text-align:center}.dev-community .cat-tab__num{display:none}.dev-community .cat-tab__label{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}}@media(max-width:600px){.dev-community .home-hero{flex-direction:column;align-items:stretch;justify-content:flex-start;--hero-fade: 132px}.dev-community .hero-visual{display:none}.dev-community .hero-copy h1,.dev-community .home-hero[data-branch=blog] .hero-copy h1{font-size:80px}.dev-community .hero-status{margin-top:24px}.dev-community .section{padding:72px 0}.dev-community .card-grid{grid-template-columns:1fr;gap:56px}.dev-community .card-grid[data-branch=cookbook] .content-card{display:flex;flex-direction:column;min-height:0}.dev-community .card-grid[data-branch=cookbook] .content-card .cover{aspect-ratio:16 / 10;height:auto}.dev-community .card-grid[data-branch=cookbook] .content-card .card-meta{order:1;margin-top:14px;border-top:0;padding-top:0}.dev-community .card-grid[data-branch=cookbook] .content-card h3{margin:18px 0 14px}.dev-community .card-grid[data-branch=cookbook] .content-card footer{order:2;padding-top:20px}.dev-community .detail-hero{padding:72px 18px 62px}.dev-community .detail-hero h1{font-size:48px}.dev-community .detail-shell{width:calc(100% - 36px)}.dev-community .detail-body p{font-size:16px}.dev-community .detail-body .section-bullets li{font-size:15px;padding-left:20px}.dev-community .detail-body .content-code pre{padding:16px;font-size:12.5px}.dev-community .key-takeaways{padding:24px}.dev-community .key-takeaways h2{font-size:32px}.dev-community .key-takeaways li{font-size:15px}.dev-community .detail-body blockquote{padding:28px 24px}.dev-community .metric-strip{grid-template-columns:1fr}.dev-community .article-cta{padding:32px 24px}.dev-community .article-cta__links{display:grid}.dev-community .article-cta__links a{justify-content:center}.dev-community .detail-hero .project-intro{font-size:16px}.dev-community .project-shot:hover img,.dev-community .project-shot:focus-within img{filter:none;transform:none}.dev-community .project-live-btn{position:static;transform:none;display:flex;justify-content:center;width:100%;margin-top:16px;opacity:1;pointer-events:auto;color:var(--bg);background:var(--ink);border-color:var(--ink)}.dev-community .project-live-btn:hover{color:var(--ink);background:transparent;border-color:var(--ink)}.dev-community .project-main{--module-gap: 56px}.dev-community .project-gallery{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch}.dev-community .project-gallery button{width:96px}.dev-community .project-highlights li{grid-template-columns:28px 1fr;gap:12px;font-size:15px}.dev-community .project-devlog li{grid-template-columns:28px 1fr;gap:12px;padding:22px 0 24px}.dev-community .project-devlog li:before{margin-top:8px}.dev-community .project-devlog h3{font-size:17px}.dev-community .project-devlog__content p{font-size:15px}.dev-community .project-prompt{padding:22px 20px}.dev-community .project-quote{padding:36px 26px 40px;clip-path:polygon(0 -40px,100% -40px,100% 100%,26px 100%,0 calc(100% - 26px))}.dev-community .project-quote__mark{width:56px;right:22px;top:-15px}.dev-community .project-quote .project-quote__line{font-size:17px}.dev-community .project-related{width:calc(100% - 36px);padding-top:40px}}@media(max-width:480px){.dev-community .cat-tab{padding:13px 6px}.dev-community .cat-tab__label{font-size:13px}}@media(prefers-reduced-motion:reduce){.dev-community *,.dev-community *:before,.dev-community *:after{transition-duration:.001ms!important}}
