:root{--w-space-xxs:.3125rem;--w-space-xs:.625rem;--w-space-s:.9375rem;--w-space-m:1.25rem;--w-space-l:1.875rem;--w-radius-xs:.25rem;--w-radius-s:.5rem;--w-radius-m:.75rem;--w-radius-l:1.2rem;--w-shadow-s:0 .5px 1px oklch(20% .02 265/.04), 0 2px 4px oklch(20% .02 265/.06);--w-shadow-m:0 2px 6px oklch(20% .02 265/.05), 0 8px 24px oklch(20% .02 265/.08)}:root.dark{--w-shadow-s:0 .5px 1px oklch(0% 0 0/.25), 0 2px 4px oklch(0% 0 0/.3);--w-shadow-m:0 2px 6px oklch(0% 0 0/.25), 0 8px 24px oklch(0% 0 0/.35)}.ledger{border-radius:var(--w-radius-l);corner-shape:squircle;background:color-mix(in oklch, var(--c-text) 4%, transparent);padding:1.25rem}.dark .ledger{background:color-mix(in oklch, var(--c-dark-text) 5%, transparent)}.ledger dl,.ledger dd{margin:0}.ledger-facts{gap:.35rem;display:grid}.ledger-facts dt{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.ledger-facts div{display:contents}.ledger-facts dt{color:var(--c-muted);font-size:.8125rem}.ledger-facts dd{color:var(--c-text);font-size:.9375rem;line-height:1.4}.dark .ledger-facts dt{color:var(--c-dark-muted)}.dark .ledger-facts dd{color:var(--c-dark-text)}.cs-stack{display:grid}.cs-stack>*{visibility:hidden;grid-area:1/1;min-width:0}.cs-stack>[data-active]{visibility:visible;animation:cs-in var(--dur-base) var(--ease-out-sharp)}@keyframes cs-in{0%{opacity:0;transform:translateY(.25rem)}}article.project-body .figure pre{border-radius:var(--w-radius-l);corner-shape:squircle;background:color-mix(in oklch, var(--c-accent) 6%, var(--c-bg));color:var(--c-text);margin:0;padding:1rem 1.1rem;font-size:.8125rem;line-height:1.6;overflow-x:auto}.dark article.project-body .figure pre{background:color-mix(in oklch, var(--c-accent) 8%, var(--c-dark-bg));color:var(--c-dark-text)}article.project-body .figure del{border-radius:var(--w-radius-xs);corner-shape:squircle;opacity:.75;background:oklch(65% .2 25/.16);text-decoration:line-through oklch(65% .2 25)}article.project-body .figure ins{border-radius:var(--w-radius-xs);corner-shape:squircle;background:oklch(72% .17 150/.2);text-decoration:none}article.project-body{--c-card:oklch(98.5% .006 265);--c-card-inset:oklch(92.5% .02 265);--c-shadow-card:0 6px 28px oklch(50% .04 275/.1)}.dark article.project-body{--c-card:oklch(29% .035 250);--c-card-inset:oklch(34% .035 250);--c-shadow-card:0 8px 28px oklch(8% .025 275/.28)}.cs-seg{max-width:100%;padding:var(--w-space-xxs);border-radius:var(--w-radius-m);corner-shape:squircle;background:var(--c-card-inset);isolation:isolate;grid-auto-columns:1fr;grid-auto-flow:column;display:inline-grid;position:relative}.cs-seg:before{content:"";inset:var(--w-space-xxs);width:calc((100% - 2 * var(--w-space-xxs)) / var(--n,2));border-radius:var(--w-radius-s);corner-shape:squircle;background:var(--c-card);box-shadow:var(--w-shadow-s);transform:translateX(calc(var(--i,0) * 100%));transition:transform var(--dur-mid) var(--ease-out-sharp), scale var(--dur-fast) var(--ease-out-sharp);z-index:-1;position:absolute}.cs-seg:has(button:active):before{scale:.97}.cs-seg button{padding:var(--w-space-xxs) var(--w-space-s);color:var(--c-muted);font:inherit;white-space:nowrap;cursor:pointer;transition:color var(--dur-mid) var(--ease-out-sharp);-webkit-tap-highlight-color:transparent;background:0 0;border:none;font-size:.8125rem}@media (hover:hover){.cs-seg button:not([aria-selected=true]):not([aria-checked=true]):hover{color:var(--c-text)}.dark .cs-seg button:not([aria-selected=true]):not([aria-checked=true]):hover{color:var(--c-dark-text)}}.dark .cs-seg button{color:var(--c-dark-muted)}.cs-seg button[aria-selected=true],.cs-seg button[aria-checked=true]{color:var(--c-text)}.dark .cs-seg button[aria-selected=true],.dark .cs-seg button[aria-checked=true]{color:var(--c-dark-text)}.cs-seg button:disabled{opacity:.4;cursor:default}cs-toggle{display:block}cs-toggle>.cs-seg{margin-bottom:1rem}.cs-stats{grid-template-columns:repeat(auto-fit,minmax(8.5rem,1fr));gap:.75rem;margin:0;display:grid}.cs-stats div{padding:var(--w-space-m);border-radius:var(--w-radius-l);corner-shape:squircle;background:color-mix(in oklch, var(--c-accent) 6%, var(--c-bg))}.dark .cs-stats div{background:color-mix(in oklch, var(--c-accent) 8%, var(--c-dark-bg))}.cs-stats dt{color:var(--c-muted);font-size:.75rem}.dark .cs-stats dt{color:var(--c-dark-muted)}.cs-stats dd{font-family:var(--font-display);font-variant-numeric:tabular-nums;color:var(--c-text);margin:.25rem 0 0;font-size:1.5rem;line-height:1.1}.dark .cs-stats dd{color:var(--c-dark-text)}.cs-stats dd small{font-family:var(--font-sans);color:var(--c-muted);margin-top:.3rem;font-size:.75rem;display:block}.dark .cs-stats dd small{color:var(--c-dark-muted)}.cs-chat{align-content:start;gap:.5rem;display:grid}.cs-chat .bubble{border-radius:var(--w-radius-l) var(--w-radius-l) var(--w-radius-l) var(--w-radius-xs);background:color-mix(in oklch, var(--c-accent) 6%, var(--c-bg));max-width:34rem;color:var(--c-text);padding:.75rem 1rem;font-size:.9375rem;line-height:1.55}.dark .cs-chat .bubble{background:color-mix(in oklch, var(--c-accent) 8%, var(--c-dark-bg));color:var(--c-dark-text)}.cs-chat .who{color:var(--c-muted);font-size:.75rem}.dark .cs-chat .who{color:var(--c-dark-muted)}.cs-chat .bubble.dense{font-size:.8125rem;line-height:1.5}article.project-body .cs-chat .bubble.dense p{font-size:inherit;color:inherit;margin:0 0 .6rem}.cs-chat .bubble .ui-block{border-radius:var(--w-radius-m);corner-shape:squircle;background:color-mix(in oklch, var(--c-accent) 10%, transparent);color:var(--c-muted);margin:.4rem 0 .6rem;padding:.35rem .6rem;font-size:.75rem;font-style:normal;display:block}.dark .cs-chat .bubble .ui-block{color:var(--c-dark-muted)}@media (prefers-reduced-motion:reduce){.cs-stack>[data-active]{animation:none}.cs-seg:before{transition:none}}.dark article.project-body .cs-chat .bubble.dense p{color:inherit}cs-reel{aspect-ratio:var(--ratio,8 / 5);border-radius:var(--w-radius-l);corner-shape:squircle;background:var(--c-card-inset);cursor:pointer;-webkit-tap-highlight-color:transparent;display:block;position:relative;overflow:hidden}cs-reel:focus-visible{outline:2px solid var(--c-accent);outline-offset:3px}cs-reel>figure{opacity:0;transition:opacity var(--dur-slow) var(--ease-out-sharp);margin:0;position:absolute;inset:0}cs-reel>figure[data-active]{opacity:1}cs-reel video,cs-reel img{object-fit:cover;width:100%;height:100%;display:block}.cs-reel-label{left:var(--w-space-s);bottom:var(--w-space-s);padding:var(--w-space-xxs) var(--w-space-xs);border-radius:var(--w-radius-s);corner-shape:squircle;background:var(--c-card);box-shadow:var(--w-shadow-s);color:var(--c-text);font-variant-numeric:tabular-nums;font-size:.8125rem;position:absolute}.dark .cs-reel-label{color:var(--c-dark-text)}@media (prefers-reduced-motion:reduce){cs-reel>figure{transition:none}}.cards{grid-template-columns:repeat(var(--cols,4), minmax(0, 1fr));gap:.75rem;display:grid}@media (width<=639px){.cards{grid-template-columns:minmax(0,1fr)}}.card{min-width:0;padding:var(--w-space-m);border-radius:var(--w-radius-l);corner-shape:squircle;background:color-mix(in oklch, var(--c-accent) 6%, var(--c-bg));align-content:start;gap:.35rem;display:grid}.dark .card{background:color-mix(in oklch, var(--c-accent) 8%, var(--c-dark-bg))}.card .glyph{border-radius:var(--w-radius-m);corner-shape:squircle;background:color-mix(in oklch, var(--c-accent) 16%, transparent);width:2.25rem;height:2.25rem;color:var(--c-accent);place-items:center;margin-bottom:.4rem;font-size:1.05rem;line-height:1;display:grid}.card b{font-family:var(--font-display);color:var(--c-text);font-size:.9375rem;font-weight:500}.dark .card b{color:var(--c-dark-text)}.card span,.card small{color:var(--c-muted);font-size:.75rem;line-height:1.45}.dark .card span,.dark .card small{color:var(--c-dark-muted)}.card .num{font-variant-numeric:tabular-nums;color:var(--c-accent)}.flow{flex-wrap:wrap;align-items:stretch;gap:.5rem;display:flex}.flow>div{min-width:0;padding:var(--w-space-m);border-radius:var(--w-radius-l);corner-shape:squircle;background:color-mix(in oklch, var(--c-accent) 6%, var(--c-bg));flex:5.5rem;align-content:start;gap:.3rem;display:grid}.dark .flow>div{background:color-mix(in oklch, var(--c-accent) 8%, var(--c-dark-bg))}.flow>i{color:var(--c-accent);flex:none;align-self:center;font-style:normal}.flow>i:before{content:"";vertical-align:-.15em;background:currentColor;width:1em;height:1em;margin-right:0;display:inline-block;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 20 20%22%3E%3Cline x1=%223%22 y1=%2210%22 x2=%2217%22 y2=%2210%22 fill=%22none%22 stroke=%22%23000%22 stroke-linecap=%22round%22 stroke-width=%222%22/%3E%3Cpolyline points=%2212 15 17 10 12 5%22 fill=%22none%22 stroke=%22%23000%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22 stroke-width=%222%22/%3E%3C/svg%3E") 50%/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 20 20%22%3E%3Cline x1=%223%22 y1=%2210%22 x2=%2217%22 y2=%2210%22 fill=%22none%22 stroke=%22%23000%22 stroke-linecap=%22round%22 stroke-width=%222%22/%3E%3Cpolyline points=%2212 15 17 10 12 5%22 fill=%22none%22 stroke=%22%23000%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22 stroke-width=%222%22/%3E%3C/svg%3E") 50%/contain no-repeat}.flow b{color:var(--c-text);font-size:.8125rem;font-weight:500}.dark .flow b{color:var(--c-dark-text)}.flow span{color:var(--c-muted);font-size:.75rem;line-height:1.45}.dark .flow span{color:var(--c-dark-muted)}.flow .accent{background:color-mix(in oklch, var(--c-accent) 16%, var(--c-bg))}.dark .flow .accent{background:color-mix(in oklch, var(--c-accent) 20%, var(--c-dark-bg))}.rows{gap:.6rem;display:grid}.rows>p{margin:.4rem 0 -.2rem!important;font-size:.75rem!important}.checklist{gap:var(--w-space-xs) var(--w-space-l);border-radius:var(--w-radius-l);corner-shape:squircle;background:color-mix(in oklch, var(--c-accent) 6%, var(--c-bg));color:var(--c-text);grid-template-columns:repeat(2,minmax(0,1fr));font-size:.875rem;list-style:none;display:grid;padding:var(--w-space-m)!important;margin:0!important}.dark .checklist{background:color-mix(in oklch, var(--c-accent) 8%, var(--c-dark-bg));color:var(--c-dark-text)}.checklist li{align-items:baseline;gap:.55rem;display:flex;margin:0!important;padding:0!important}.checklist li:before{content:"";background:var(--c-accent);flex:none;width:.95em;height:.95em;translate:0 .15em;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 20 20%22%3E%3Cpolyline points=%224 11 8 15 16 5%22 fill=%22none%22 stroke=%22%23000%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22 stroke-width=%222%22/%3E%3C/svg%3E") 50%/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 20 20%22%3E%3Cpolyline points=%224 11 8 15 16 5%22 fill=%22none%22 stroke=%22%23000%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22 stroke-width=%222%22/%3E%3C/svg%3E") 50%/contain no-repeat}@media (width<=560px){.checklist{grid-template-columns:1fr}}.hbars{color:var(--c-muted);grid-template-columns:max-content 1fr max-content;align-items:center;gap:.55rem .9rem;font-size:.8125rem;display:grid}.dark .hbars{color:var(--c-dark-muted)}.hbars .bar{height:.55rem;width:calc(var(--v) * 100%);background:var(--c-accent);border-radius:999px;min-width:.25rem}.hbars .val{font-variant-numeric:tabular-nums;color:var(--c-text)}.dark .hbars .val{color:var(--c-dark-text)}.split{grid-template-columns:1fr 1fr;gap:.75rem;display:grid}@media (width<=479px){.split{grid-template-columns:1fr}}.pane{min-width:0;padding:var(--w-space-m);border-radius:var(--w-radius-l);corner-shape:squircle;background:color-mix(in oklch, var(--c-accent) 6%, var(--c-bg));align-content:start;gap:.5rem;display:grid}.dark .pane{background:color-mix(in oklch, var(--c-accent) 8%, var(--c-dark-bg))}.pane>b{color:var(--c-muted);justify-content:space-between;gap:.5rem;font-size:.75rem;font-weight:500;display:flex}.pane>b em{font-style:normal}.pane .good{color:var(--c-accent)}.pane img{border-radius:var(--w-radius-m);corner-shape:squircle;width:100%;height:auto;display:block}.layers{gap:.45rem;display:grid}.layers>div{padding:var(--w-space-m);border-radius:var(--w-radius-l);corner-shape:squircle;background:color-mix(in oklch, var(--c-accent) 6%, var(--c-bg));color:var(--c-text);justify-content:space-between;align-items:center;font-size:.8125rem;display:flex}.dark .layers>div{background:color-mix(in oklch, var(--c-accent) 8%, var(--c-dark-bg));color:var(--c-dark-text)}.layers>div small{color:var(--c-muted)}.layers>.result{background:var(--c-accent);color:var(--c-bg);box-shadow:none;margin-top:.4rem}.dark .layers>.result{background:var(--c-accent);color:var(--c-dark-bg)}.layers>.result small{color:inherit;opacity:.8}.mock{padding:var(--w-space-m);border-radius:var(--w-radius-l);corner-shape:squircle;background:color-mix(in oklch, var(--c-accent) 6%, var(--c-bg));color:var(--c-text);gap:.5rem;font-size:.8125rem;display:grid}.dark .mock{background:color-mix(in oklch, var(--c-accent) 8%, var(--c-dark-bg));color:var(--c-dark-text)}.mock .label{letter-spacing:.02em;color:var(--c-muted);font-size:.6875rem}.mock .row b{font-family:var(--font-display);font-size:1.75rem;font-weight:500}.mock .row{align-items:center;gap:.5rem;display:flex}.mock .track{background:color-mix(in oklch, var(--c-muted) 25%, transparent);border-radius:999px;flex:1;height:.45rem;overflow:hidden}.mock .track i{height:100%;width:calc(var(--v) * 100%);border-radius:inherit;background:var(--c-accent);display:block}.mock .track.was i{background:var(--c-muted)}.mock .check:before{content:"";vertical-align:-.15em;width:.95em;height:.95em;color:var(--c-accent);background:currentColor;margin-right:.4rem;display:inline-block;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 20 20%22%3E%3Cpolyline points=%224 11 8 15 16 5%22 fill=%22none%22 stroke=%22%23000%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22 stroke-width=%222%22/%3E%3C/svg%3E") 50%/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 20 20%22%3E%3Cpolyline points=%224 11 8 15 16 5%22 fill=%22none%22 stroke=%22%23000%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22 stroke-width=%222%22/%3E%3C/svg%3E") 50%/contain no-repeat}.mock .open:before{content:"";vertical-align:-.15em;width:.95em;height:.95em;color:var(--c-muted);background:currentColor;margin-right:.4rem;display:inline-block;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 20 20%22%3E%3Ccircle cx=%2210%22 cy=%2210%22 r=%226.5%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22/%3E%3C/svg%3E") 50%/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 20 20%22%3E%3Ccircle cx=%2210%22 cy=%2210%22 r=%226.5%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%222%22/%3E%3C/svg%3E") 50%/contain no-repeat}.mock .choices{gap:.4rem;display:flex}.mock .choices span{padding:var(--w-space-xxs) var(--w-space-xs);border-radius:var(--w-radius-s);corner-shape:squircle;background:color-mix(in oklch, var(--c-accent) 16%, transparent);color:var(--c-accent)}.pane>span{color:var(--c-text);font-size:.875rem}.dark .pane>span{color:var(--c-dark-text)}cs-gvrnr-scene{gap:1.25rem;display:grid}.cs-gv-controls{z-index:5;color:var(--c-muted);justify-self:center;align-items:center;gap:.25rem;font-size:.8125rem;display:flex;position:sticky;top:1rem}.dark .cs-gv-controls{color:var(--c-dark-muted)}.cs-gv-controls:has(>button){padding:var(--w-space-xxs);border-radius:var(--w-radius-m);corner-shape:squircle;background:var(--c-card-inset)}.cs-gv-controls>span{padding:0 .4rem 0 .6rem}.cs-gv-controls>button{padding:var(--w-space-xxs) var(--w-space-s);border-radius:var(--w-radius-s);corner-shape:squircle;color:var(--c-muted);font:inherit;cursor:pointer;transition:background-color var(--dur-fast) ease-out, color var(--dur-fast) ease-out, box-shadow var(--dur-fast) ease-out;background:0 0;border:none}.cs-gv-controls>button[aria-pressed=true]{background:var(--c-card);color:var(--c-text);box-shadow:var(--w-shadow-s)}.dark .cs-gv-controls>button{color:var(--c-dark-muted)}.dark .cs-gv-controls>button[aria-pressed=true]{color:var(--c-dark-text)}.cs-gv-stage{position:relative}.dark .cs-gv-stage{background:0 0}.cs-gv-host{position:relative}cs-toggle .pane img{width:auto;max-width:100%;max-height:30rem;margin-inline:auto}cs-jev-watch>*,cs-hue-blend>*,cs-gvrnr-scene>*,cs-crew-cards>*,cs-linter>*,cs-ittybitty-stack>*,cs-blend-flood>*,cs-flavour>*{min-width:0}.cs-gv-controls{max-width:100%}@media (width<=479px){.cs-seg{width:100%;display:grid}.cs-gv-controls:has(>.cs-seg){width:100%}.cs-seg button{padding:var(--w-space-xxs) var(--w-space-s);white-space:normal;font-size:.75rem;line-height:1.25}article.project-body .figure pre{padding:.85rem .9rem;font-size:.6875rem}}.cs-linter-goal{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.ico{vertical-align:-.15em;background:currentColor;width:1em;height:1em;display:inline-block}.ico-check{-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 20 20%22%3E%3Cpolyline points=%224 11 8 15 16 5%22 fill=%22none%22 stroke=%22%23000%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22 stroke-width=%222%22/%3E%3C/svg%3E") 50%/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 20 20%22%3E%3Cpolyline points=%224 11 8 15 16 5%22 fill=%22none%22 stroke=%22%23000%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22 stroke-width=%222%22/%3E%3C/svg%3E") 50%/contain no-repeat}.ico-x{-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 20 20%22%3E%3Cline x1=%225%22 y1=%225%22 x2=%2215%22 y2=%2215%22 fill=%22none%22 stroke=%22%23000%22 stroke-linecap=%22round%22 stroke-width=%222%22/%3E%3Cline x1=%225%22 y1=%2215%22 x2=%2215%22 y2=%225%22 fill=%22none%22 stroke=%22%23000%22 stroke-linecap=%22round%22 stroke-width=%222%22/%3E%3C/svg%3E") 50%/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 20 20%22%3E%3Cline x1=%225%22 y1=%225%22 x2=%2215%22 y2=%2215%22 fill=%22none%22 stroke=%22%23000%22 stroke-linecap=%22round%22 stroke-width=%222%22/%3E%3Cline x1=%225%22 y1=%2215%22 x2=%2215%22 y2=%225%22 fill=%22none%22 stroke=%22%23000%22 stroke-linecap=%22round%22 stroke-width=%222%22/%3E%3C/svg%3E") 50%/contain no-repeat}.ico-plus{-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 20 20%22%3E%3Cline x1=%2210%22 y1=%2216.5%22 x2=%2210%22 y2=%223.5%22 fill=%22none%22 stroke=%22%23000%22 stroke-linecap=%22round%22 stroke-width=%222%22/%3E%3Cline x1=%223.5%22 y1=%2210%22 x2=%2216.5%22 y2=%2210%22 fill=%22none%22 stroke=%22%23000%22 stroke-linecap=%22round%22 stroke-width=%222%22/%3E%3C/svg%3E") 50%/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 20 20%22%3E%3Cline x1=%2210%22 y1=%2216.5%22 x2=%2210%22 y2=%223.5%22 fill=%22none%22 stroke=%22%23000%22 stroke-linecap=%22round%22 stroke-width=%222%22/%3E%3Cline x1=%223.5%22 y1=%2210%22 x2=%2216.5%22 y2=%2210%22 fill=%22none%22 stroke=%22%23000%22 stroke-linecap=%22round%22 stroke-width=%222%22/%3E%3C/svg%3E") 50%/contain no-repeat}.ico-minus{-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 20 20%22%3E%3Cline x1=%223.5%22 y1=%2210%22 x2=%2216.5%22 y2=%2210%22 fill=%22none%22 stroke=%22%23000%22 stroke-linecap=%22round%22 stroke-width=%222%22/%3E%3C/svg%3E") 50%/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 20 20%22%3E%3Cline x1=%223.5%22 y1=%2210%22 x2=%2216.5%22 y2=%2210%22 fill=%22none%22 stroke=%22%23000%22 stroke-linecap=%22round%22 stroke-width=%222%22/%3E%3C/svg%3E") 50%/contain no-repeat}article.project-body .project-video-wrap.wide,article.project-body .project-img-wrap.wide{width:min(100cqw,44rem)}@media (prefers-reduced-motion:reduce){.cs-seg:before{transition:none}.cs-seg:has(button:active):before{scale:1}}.back-link[data-astro-cid-yq2gsstb]{transition:color var(--dur-fast) ease-out, transform var(--dur-fast) ease-out}.back-link[data-astro-cid-yq2gsstb]:hover{transform:scale(1.05)}.back-link[data-astro-cid-yq2gsstb]:active{transform:scale(.98)}.back-arrow[data-astro-cid-yq2gsstb]{width:1.125rem;height:1.125rem;transition:transform var(--dur-fast) ease-out;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.back-arrow[data-astro-cid-yq2gsstb] svg[data-astro-cid-yq2gsstb]{width:100%;height:100%}.back-link[data-astro-cid-yq2gsstb]:hover .back-arrow[data-astro-cid-yq2gsstb]{transform:translate(-2px)}.project-title-link[data-astro-cid-yq2gsstb]{padding-left:1.25em}.project-title-icon-wrap[data-astro-cid-yq2gsstb]{color:currentColor;width:.9em;height:.9em;position:absolute;top:50%;left:0;transform:translateY(-50%)}.project-title-icon[data-astro-cid-yq2gsstb],.project-title-icon-wrap[data-astro-cid-yq2gsstb]:after{transition:transform var(--dur-fast) var(--ease-pop), opacity var(--dur-quick) ease-out, filter var(--dur-quick) ease-out;will-change:transform, opacity, filter;background-color:currentColor;position:absolute;inset:0}.project-title-icon[data-astro-cid-yq2gsstb]{-webkit-mask:url(/_astro/project-title-external.-XPAy4-l.svg) 50%/contain no-repeat;mask:url(/_astro/project-title-external.-XPAy4-l.svg) 50%/contain no-repeat}.project-title-icon[data-astro-cid-yq2gsstb].is-avatone{-webkit-mask-image:url(/_astro/inline-link-avatone.BhV4H6kE.svg);mask-image:url(/_astro/inline-link-avatone.BhV4H6kE.svg)}.project-title-icon-wrap[data-astro-cid-yq2gsstb]:after{content:"";opacity:0;transform:translate(-.11em,.12em)scale(.74);-webkit-mask:url(/_astro/project-title-arrow.ETUYN2Lg.svg) 50%/contain no-repeat;mask:url(/_astro/project-title-arrow.ETUYN2Lg.svg) 50%/contain no-repeat}@media (hover:hover) and (pointer:fine){.project-title-link[data-astro-cid-yq2gsstb]:hover .project-title-icon[data-astro-cid-yq2gsstb]{opacity:0;animation:project-title-icon-swap var(--dur-fast) var(--ease-out-sharp);transform:translate(.1em,.1em)scale(.74)}.project-title-link[data-astro-cid-yq2gsstb]:hover .project-title-icon-wrap[data-astro-cid-yq2gsstb]:after{opacity:1;animation:project-title-icon-swap var(--dur-fast) var(--ease-out-sharp);transform:translateY(-.04em)scale(1)}}@keyframes project-title-icon-swap{45%{filter:blur(.65px)}}.project-divider[data-astro-cid-yq2gsstb]{background:var(--c-border);border:none;height:1px}.dark .project-divider[data-astro-cid-yq2gsstb]{background:var(--c-dark-border)}.project-body[data-astro-cid-yq2gsstb] a{color:var(--c-accent);text-decoration-color:color-mix(in srgb, var(--c-accent) 35%, transparent)}.dark .project-body[data-astro-cid-yq2gsstb] a{color:var(--c-accent)}.project-body[data-astro-cid-yq2gsstb] a:hover{color:var(--c-text);text-decoration-color:var(--c-border)}.dark .project-body[data-astro-cid-yq2gsstb] a:hover{color:var(--c-dark-text);text-decoration-color:var(--c-dark-border)}.project-body[data-astro-cid-yq2gsstb] .case-study{corner-shape:squircle;background:color-mix(in srgb, var(--c-accent) 5%, transparent);border-radius:2rem;width:100%;margin-top:3.5rem;margin-bottom:3.5rem;padding:1.5rem 1.5rem 1.25rem}@supports not (corner-shape:squircle){.project-body[data-astro-cid-yq2gsstb] .case-study{border-radius:1.25rem}}.project-body[data-astro-cid-yq2gsstb] .case-study-header{flex-direction:column;gap:.125rem;margin-bottom:1.5rem;display:flex}.project-body[data-astro-cid-yq2gsstb] .case-study-kicker{letter-spacing:.08em;text-transform:uppercase;color:var(--c-muted);font-size:.6875rem;font-weight:500}.project-body[data-astro-cid-yq2gsstb] .case-study-title{font-family:var(--font-display);color:var(--c-text);font-size:1.125rem;font-weight:500;line-height:1.3}.dark .project-body[data-astro-cid-yq2gsstb] .case-study-kicker{color:var(--c-dark-muted)}.dark .project-body[data-astro-cid-yq2gsstb] .case-study-title{color:var(--c-dark-text)}.project-body[data-astro-cid-yq2gsstb] .case-study h3{font-family:var(--font-display);color:var(--c-text);margin-top:1.25rem;margin-bottom:.5rem;font-size:1rem;font-weight:500}.project-body[data-astro-cid-yq2gsstb] .case-study h3:first-of-type{margin-top:0}.dark .project-body[data-astro-cid-yq2gsstb] .case-study h3{color:var(--c-dark-text)}.project-body[data-astro-cid-yq2gsstb] .case-study p{color:var(--c-muted);margin-bottom:1rem;font-size:1rem;line-height:1.7}.project-body[data-astro-cid-yq2gsstb] .case-study p:last-child{margin-bottom:0}.dark .project-body[data-astro-cid-yq2gsstb] .case-study p{color:var(--c-dark-muted)}.project-body[data-astro-cid-yq2gsstb] .code-demo,.project-body[data-astro-cid-yq2gsstb] .prose-demo{corner-shape:squircle;background:color-mix(in srgb, var(--c-accent) 5%, transparent);border-radius:2rem;width:100%;margin-top:3.5rem;margin-bottom:3.5rem;padding:1.25rem 1.5rem}@supports not (corner-shape:squircle){.project-body[data-astro-cid-yq2gsstb] .code-demo,.project-body[data-astro-cid-yq2gsstb] .prose-demo{border-radius:1.25rem}}.project-body[data-astro-cid-yq2gsstb] .code-demo-bar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.5rem;margin-bottom:1rem;display:flex}.project-body[data-astro-cid-yq2gsstb] .code-demo-label{letter-spacing:.08em;text-transform:uppercase;color:var(--c-muted);font-size:.6875rem;font-weight:500}.dark .project-body[data-astro-cid-yq2gsstb] .code-demo-label{color:var(--c-dark-muted)}.project-body[data-astro-cid-yq2gsstb] .demo-toggle-row{margin:3.5rem 0 -2.75rem .75rem;display:flex}.project-body[data-astro-cid-yq2gsstb] .demo-toggle{cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:none;align-items:center;gap:.5rem;padding:.375rem 0;font-family:inherit;display:inline-flex}.project-body[data-astro-cid-yq2gsstb] .demo-toggle:focus-visible{outline:none}.project-body[data-astro-cid-yq2gsstb] .demo-toggle:focus-visible .demo-toggle-box{outline:2px solid var(--c-accent);outline-offset:2px}.project-body[data-astro-cid-yq2gsstb] .demo-toggle-label{color:var(--c-text);user-select:none;opacity:.8;transition:opacity var(--dur-quick) ease-out;font-size:.875rem;font-weight:500;line-height:1}.project-body[data-astro-cid-yq2gsstb] .demo-toggle:hover .demo-toggle-label{opacity:1}.dark .project-body[data-astro-cid-yq2gsstb] .demo-toggle-label{color:var(--c-dark-text)}.project-body[data-astro-cid-yq2gsstb] .demo-toggle-box{corner-shape:squircle;border:1.5px solid color-mix(in srgb, var(--c-text) 20%, transparent);width:.875em;height:.875em;transition:transform var(--dur-quick) var(--ease-out-sharp), border-color var(--dur-quick) ease-out;background:0 0;border-radius:1rem;flex-shrink:0;justify-content:center;align-items:center;display:flex;position:relative;overflow:hidden}.dark .project-body[data-astro-cid-yq2gsstb] .demo-toggle-box{border-color:color-mix(in srgb, var(--c-dark-text) 20%, transparent)}.project-body[data-astro-cid-yq2gsstb] .demo-toggle:hover .demo-toggle-box{border-color:var(--c-accent);transform:scale(1.08)}.project-body[data-astro-cid-yq2gsstb] .demo-toggle[aria-checked=true] .demo-toggle-box{border-color:var(--c-accent)}.project-body[data-astro-cid-yq2gsstb] .demo-toggle-box:after{content:"";background:var(--c-accent);transition:transform var(--dur-quick) var(--ease-out-sharp), border-radius var(--dur-quick) var(--ease-out-sharp);border-radius:100%;position:absolute;inset:0;transform:scale(0)}.project-body[data-astro-cid-yq2gsstb] .demo-toggle[aria-checked=true] .demo-toggle-box:after{border-radius:0%;transform:scale(1)}.project-body[data-astro-cid-yq2gsstb] .demo-toggle-check{z-index:1;color:#fff;opacity:0;width:9px;height:9px;transition:transform var(--dur-quick) var(--ease-out-sharp), opacity var(--dur-quick) ease-out;position:relative;transform:scale(0)}.project-body[data-astro-cid-yq2gsstb] .demo-toggle[aria-checked=true] .demo-toggle-check{opacity:1;transition:transform var(--dur-fast) var(--ease-pop) 40ms, opacity var(--dur-quick) ease-out 40ms;transform:scale(1)}@keyframes toggle-press{0%{transform:scale(1)}50%{transform:scale(.75)}to{transform:scale(1)}}.project-body[data-astro-cid-yq2gsstb] .demo-toggle-box.pressing{animation:toggle-press var(--dur-fast) var(--ease-out-sharp) forwards}@supports not (corner-shape:squircle){.project-body[data-astro-cid-yq2gsstb] .demo-toggle-box{border-radius:.5rem}}.project-body[data-astro-cid-yq2gsstb] [data-state=before] [data-panel=after],.project-body[data-astro-cid-yq2gsstb] [data-state=after] [data-panel=before]{display:none}.project-body[data-astro-cid-yq2gsstb] .astro-code{white-space:normal;margin:0;padding:0;font-size:.8125rem;line-height:1.6;background:0 0!important}.project-body[data-astro-cid-yq2gsstb] .astro-code .line{white-space:pre-wrap;overflow-wrap:break-word;display:block}.project-body[data-astro-cid-yq2gsstb] .astro-code,.project-body[data-astro-cid-yq2gsstb] .astro-code span{color:var(--shiki-light)}.dark .project-body[data-astro-cid-yq2gsstb] .astro-code,.dark .project-body[data-astro-cid-yq2gsstb] .astro-code span{color:var(--shiki-dark)}@media (width<=639px){.project-body[data-astro-cid-yq2gsstb] .astro-code{font-size:.75rem}}.project-body[data-astro-cid-yq2gsstb] .prose-demo .code-demo-panel p{color:var(--c-muted);margin-bottom:0;font-size:1rem;line-height:1.7}.dark .project-body[data-astro-cid-yq2gsstb] .prose-demo .code-demo-panel p{color:var(--c-dark-muted)}.project-body[data-astro-cid-yq2gsstb] .prose-demo [data-panel=after] p{color:var(--c-text)}.dark .project-body[data-astro-cid-yq2gsstb] .prose-demo [data-panel=after] p{color:var(--c-dark-text)}.project-body[data-astro-cid-yq2gsstb]{min-width:0;padding-bottom:2rem}.back-to-top-wrap[data-astro-cid-yq2gsstb]{opacity:0;transition:opacity var(--dur-slow) ease-out, transform var(--dur-slow) var(--ease-out-sharp);justify-content:center;margin-top:6rem;padding-bottom:5rem;display:flex;transform:translateY(8px)}.back-to-top-wrap[data-astro-cid-yq2gsstb].is-visible{opacity:1;transform:translateY(0)}.back-to-top[data-astro-cid-yq2gsstb]{color:var(--c-muted);letter-spacing:.02em;transition:color var(--dur-fast) ease-out;flex-direction:column;align-items:center;gap:.4rem;font-size:.8125rem;font-weight:500;text-decoration:none;display:inline-flex}.dark .back-to-top[data-astro-cid-yq2gsstb]{color:var(--c-dark-muted)}.back-to-top[data-astro-cid-yq2gsstb]:hover{color:var(--c-accent)}@media (prefers-reduced-motion:reduce){.back-to-top-wrap[data-astro-cid-yq2gsstb]{transition:none}}.project-hero-live[data-astro-cid-yq2gsstb]{place-items:center;height:15rem;margin-bottom:1.5rem;display:grid;overflow-x:clip}.project-hero-live[data-astro-cid-yq2gsstb]>.stage{overflow-x:visible;translate:0 -1.75rem;scale:.86}@media (width<=639px){.project-hero-live[data-astro-cid-yq2gsstb]{height:10rem;margin-bottom:1rem}.project-hero-live[data-astro-cid-yq2gsstb]>.stage{translate:0 -1.25rem;scale:.88}}.project-poster-video[data-astro-cid-yq2gsstb]{object-fit:cover;width:100%;height:100%;position:absolute;inset:0}@media (prefers-reduced-motion:reduce){.project-poster-video[data-astro-cid-yq2gsstb]{display:none}}.project-poster[data-astro-cid-yq2gsstb]{width:min(100cqw,44rem);margin-left:calc(50% - min(50cqw,22rem));position:relative}main:has(#project-detail){container-type:inline-size}.project-body[data-astro-cid-yq2gsstb] .project-img-wrap,.project-body[data-astro-cid-yq2gsstb] .image-placeholder,.project-body[data-astro-cid-yq2gsstb] .wide{width:min(100cqw,44rem);margin-left:calc(50% - min(50cqw,22rem))}.draft-banner[data-astro-cid-yq2gsstb]{background:color-mix(in oklch, var(--c-accent) 14%, transparent);color:var(--c-text);border-radius:1rem;margin:0;padding:.75rem 1rem;font-size:.875rem}.dark .draft-banner[data-astro-cid-yq2gsstb]{color:var(--c-dark-text)}.project-body[data-astro-cid-yq2gsstb] h2{color:var(--c-text);margin-top:4rem;margin-bottom:1.25rem;font-size:1.125rem}.project-body[data-astro-cid-yq2gsstb]>h3{font-family:var(--font-display);color:var(--c-text);margin-top:2.5rem;margin-bottom:.75rem;font-size:.9375rem;font-weight:500}.dark .project-body[data-astro-cid-yq2gsstb]>h3{color:var(--c-dark-text)}.project-body[data-astro-cid-yq2gsstb] h2:first-child{margin-top:0}.dark .project-body[data-astro-cid-yq2gsstb] h2{color:var(--c-dark-text)}.project-body[data-astro-cid-yq2gsstb] p{color:var(--c-muted);margin-bottom:1.75rem;font-size:1rem;line-height:1.7}.dark .project-body[data-astro-cid-yq2gsstb] p{color:var(--c-dark-muted)}.project-body[data-astro-cid-yq2gsstb] strong{font-weight:inherit}.project-body[data-astro-cid-yq2gsstb] .image-placeholder{border:2px dashed var(--c-border);background:var(--c-border);border-radius:1.5rem;justify-content:center;align-items:center;min-height:12rem;margin-top:6rem;margin-bottom:2rem;padding:1.5rem;display:flex}.dark .project-body[data-astro-cid-yq2gsstb] .image-placeholder{border-color:var(--c-dark-border);background:var(--c-dark-border)}.project-body[data-astro-cid-yq2gsstb] .image-placeholder p{text-align:center;color:var(--c-muted);margin:0;font-size:.8125rem}.dark .project-body[data-astro-cid-yq2gsstb] .image-placeholder p{color:var(--c-dark-muted)}.project-body[data-astro-cid-yq2gsstb] .image-placeholder.is-blue{aspect-ratio:4/3;background:var(--c-accent);border:0;min-height:0;margin-top:3.5rem;margin-bottom:3.5rem}.project-body[data-astro-cid-yq2gsstb] .image-placeholder.is-blue p,.dark .project-body[data-astro-cid-yq2gsstb] .image-placeholder.is-blue p{max-width:26rem;color:var(--c-bg)}.project-body[data-astro-cid-yq2gsstb] .cs-video{corner-shape:squircle;background:var(--c-border);border-radius:2rem;margin-top:3.5rem;margin-bottom:3.5rem;overflow:hidden}.dark .project-body[data-astro-cid-yq2gsstb] .cs-video{background:var(--c-dark-border)}.project-body[data-astro-cid-yq2gsstb] .cs-video.alpha,.dark .project-body[data-astro-cid-yq2gsstb] .cs-video.alpha{background:0 0}.project-body[data-astro-cid-yq2gsstb] .cs-video video{width:100%;height:auto;display:block}.project-body[data-astro-cid-yq2gsstb] .figure{margin-top:3.5rem;margin-bottom:3.5rem}.project-body[data-astro-cid-yq2gsstb] .figure-caption{color:var(--c-muted);margin:1rem 0 0;font-size:.8125rem}.dark .project-body[data-astro-cid-yq2gsstb] .figure-caption{color:var(--c-dark-muted)}.project-body[data-astro-cid-yq2gsstb] .compare{grid-template-columns:1fr 1fr;gap:1rem;display:grid}@media (width<=639px){.project-body[data-astro-cid-yq2gsstb] .compare{grid-template-columns:1fr}}.project-body[data-astro-cid-yq2gsstb] .compare-side{background:var(--c-bg);border-radius:1.25rem;flex-direction:column;gap:.75rem;min-width:0;padding:1.25rem;display:flex}.dark .project-body[data-astro-cid-yq2gsstb] .compare-side{background:var(--c-dark-bg)}.project-body[data-astro-cid-yq2gsstb] .compare-label{color:var(--c-muted);justify-content:space-between;gap:1rem;font-size:.8125rem;display:flex}.project-body[data-astro-cid-yq2gsstb] .compare-label strong{color:var(--c-accent)}.project-body[data-astro-cid-yq2gsstb] .compare-side p{margin:0;font-size:.9375rem}.project-body[data-astro-cid-yq2gsstb] .compare-side pre{color:var(--c-text);margin:0;font-size:.8125rem;line-height:1.6;overflow-x:auto}.dark .project-body[data-astro-cid-yq2gsstb] .compare-side pre{color:var(--c-dark-text)}.project-body[data-astro-cid-yq2gsstb] mark.tell{color:inherit;text-decoration:underline wavy var(--c-accent);text-underline-offset:.25em;background:0 0}.project-body[data-astro-cid-yq2gsstb] .bars{color:var(--c-muted);grid-template-columns:max-content 1fr max-content;align-items:center;gap:.6rem 1rem;font-size:.875rem;display:grid}.project-body[data-astro-cid-yq2gsstb] .bar{background:var(--c-accent);border-radius:999px;height:.6rem}.project-body[data-astro-cid-yq2gsstb] .swatches{grid-template-columns:repeat(4,1fr);gap:.75rem;display:grid}@media (width<=639px){.project-body[data-astro-cid-yq2gsstb] .swatches{grid-template-columns:repeat(2,1fr)}}.project-body[data-astro-cid-yq2gsstb] .swatch{border-radius:1rem;gap:.35rem;padding:.9rem 1rem;font-size:.75rem;line-height:1.3;display:grid}.project-body[data-astro-cid-yq2gsstb] .swatch b{font-size:1.25rem;font-weight:500}.project-body[data-astro-cid-yq2gsstb] .project-img-wrap{corner-shape:squircle;aspect-ratio:4/3;border-radius:2rem;margin-top:3.5rem;margin-bottom:3.5rem;position:relative;overflow:hidden}.project-body[data-astro-cid-yq2gsstb] .project-img-lqip{object-fit:cover;filter:blur(20px);z-index:1;width:100%;height:100%;transition:opacity var(--dur-slow) ease-out;position:absolute;inset:0;transform:scale(1.1)}.project-body[data-astro-cid-yq2gsstb] .project-img-wrap.loaded .project-img-lqip{opacity:0;pointer-events:none}.project-body[data-astro-cid-yq2gsstb] .project-img{object-fit:cover;z-index:2;opacity:0;width:100%;height:100%;transition:opacity var(--dur-slow) ease-out;position:absolute;inset:0}.project-body[data-astro-cid-yq2gsstb] .project-img-wrap.loaded .project-img{opacity:1}.project-body[data-astro-cid-yq2gsstb] .project-video-wrap{corner-shape:squircle;aspect-ratio:4/3;background:var(--c-border);border-radius:2rem;width:100%;margin-top:3.5rem;margin-bottom:3.5rem;position:relative;overflow:hidden}.dark .project-body[data-astro-cid-yq2gsstb] .project-video-wrap{background:var(--c-dark-border)}.project-body[data-astro-cid-yq2gsstb] .project-video-lqip{object-fit:cover;filter:blur(20px);z-index:1;width:100%;height:100%;transition:opacity var(--dur-slow) ease-out;position:absolute;inset:0;transform:scale(1.1)}.project-body[data-astro-cid-yq2gsstb] .project-video-wrap.loaded .project-video-lqip{opacity:0;pointer-events:none}.project-body[data-astro-cid-yq2gsstb] .project-video{object-fit:cover;z-index:2;opacity:0;width:100%;height:100%;transition:opacity var(--dur-slow) ease-out;position:absolute;inset:0}.project-body[data-astro-cid-yq2gsstb] .project-video-wrap.loaded .project-video{opacity:1}@supports not (corner-shape:squircle){.project-poster[data-astro-cid-yq2gsstb],.project-body[data-astro-cid-yq2gsstb] .project-img-wrap,.project-body[data-astro-cid-yq2gsstb] .project-video-wrap,.project-body[data-astro-cid-yq2gsstb] .cs-video{border-radius:1.25rem}}[data-astro-cid-yq2gsstb][data-reveal]{transition:filter var(--dur-mid) var(--ease-out-sharp), opacity var(--dur-mid) var(--ease-out-sharp)}.reveal-pending[data-astro-cid-yq2gsstb] [data-astro-cid-yq2gsstb][data-reveal]{filter:blur(12px);opacity:.6;will-change:filter, opacity}.reveal-pending[data-astro-cid-yq2gsstb] [data-astro-cid-yq2gsstb][data-reveal].revealed{filter:blur();opacity:1;will-change:auto}@media (prefers-reduced-motion:reduce){.reveal-pending[data-astro-cid-yq2gsstb] [data-astro-cid-yq2gsstb][data-reveal]{filter:none;opacity:1}}[data-hero-morphing] #project-hero[data-astro-cid-yq2gsstb]{filter:none;opacity:1}
