.caps:where(.astro-F6FVB6BX){padding:var(--section-space) var(--gutter);background:var(--paper-sunk)}.caps__head:where(.astro-F6FVB6BX),.caps__body:where(.astro-F6FVB6BX){max-width:var(--page);margin-inline:auto}.caps__body:where(.astro-F6FVB6BX){display:grid;gap:3rem;margin-top:clamp(3rem,2rem + 4vw,6rem);align-items:center}@media (min-width: 1000px){.caps__body:where(.astro-F6FVB6BX){grid-template-columns:minmax(0,7fr) minmax(0,4fr);gap:clamp(3rem,6vw,7rem)}}.caps__map:where(.astro-F6FVB6BX){position:relative;margin:0 auto;padding:0;border:0;min-width:0;width:100%;max-width:34rem;aspect-ratio:1 / 1;container-type:inline-size}.caps__ring:where(.astro-F6FVB6BX){position:absolute;inset:0;width:100%;height:100%;overflow:visible}.caps__track:where(.astro-F6FVB6BX){fill:none;stroke:var(--rule);stroke-width:1}.caps__band:where(.astro-F6FVB6BX){fill:none;stroke:color-mix(in srgb,var(--ink) 14%,transparent);stroke-width:18;stroke-linecap:round;transition:stroke var(--dur-base) ease,stroke-width var(--dur-base) var(--ease-emph)}.caps__label:where(.astro-F6FVB6BX){fill:var(--stone);font-family:var(--font-sans);font-size:15px;font-weight:600;letter-spacing:.01em;transition:fill var(--dur-base) ease}.caps__link:where(.astro-F6FVB6BX){opacity:.45;transition:opacity var(--dur-base) ease}.caps__chord:where(.astro-F6FVB6BX),.caps__flow:where(.astro-F6FVB6BX){fill:none;stroke-linecap:round}.caps__chord:where(.astro-F6FVB6BX){stroke:var(--rule-strong);stroke-width:1.25;transition:stroke var(--dur-base) ease}.caps__flow:where(.astro-F6FVB6BX){stroke:var(--accent);stroke-width:2;stroke-dasharray:.012 .03;opacity:0;transition:opacity var(--dur-base) ease}.caps__center:where(.astro-F6FVB6BX){position:absolute;left:50%;top:50%;translate:-50% -50%;padding:0 .3em;background:var(--paper-sunk);border-radius:var(--radius-s);color:var(--ink);font-size:7cqi;font-weight:600;font-stretch:82%;letter-spacing:-.02em;line-height:1.15;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity var(--dur-base) ease}.caps__hit:where(.astro-F6FVB6BX){position:absolute;width:30%;height:22%;translate:-50% -50%;border-radius:50%}.caps__hit:where(.astro-F6FVB6BX) input:where(.astro-F6FVB6BX){position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:0;cursor:pointer}.caps__panel:where(.astro-F6FVB6BX){display:none}.caps__panel:where(.astro-F6FVB6BX) h3:where(.astro-F6FVB6BX){font-size:var(--step-4);font-stretch:80%;letter-spacing:-.03em;line-height:1}.caps__line:where(.astro-F6FVB6BX){margin-top:1rem;font-size:var(--step-1);line-height:1.45;color:var(--ink-soft);max-width:30ch}.caps__links:where(.astro-F6FVB6BX){margin-top:2rem;display:grid;gap:.875rem}.caps__links:where(.astro-F6FVB6BX) li:where(.astro-F6FVB6BX){padding-left:1rem;border-left:2px solid var(--accent);color:var(--ink-soft);max-width:40ch}.caps__links:where(.astro-F6FVB6BX) span:where(.astro-F6FVB6BX){display:block;font-weight:600;color:var(--ink)}.caps__tools:where(.astro-F6FVB6BX){margin-top:2rem;font-family:var(--font-mono);font-size:var(--step--1);color:var(--ink-soft)}.caps__more:where(.astro-F6FVB6BX){margin-top:2rem}@media (prefers-reduced-motion: no-preference){@keyframes caps-flow{to{stroke-dashoffset:-.042}}.caps__flow:where(.astro-F6FVB6BX){animation:caps-flow .9s linear infinite}.caps__panel:where(.astro-F6FVB6BX){animation:enter-rise .52s var(--ease-emph) both}.js .caps__band:where(.astro-F6FVB6BX){stroke-dasharray:1;stroke-dashoffset:1;transition:stroke-dashoffset .9s var(--ease-emph) calc(.2s + var(--i) * .11s),stroke var(--dur-base) ease,stroke-width var(--dur-base) var(--ease-emph)}.js .caps__chord:where(.astro-F6FVB6BX){stroke-dasharray:1;stroke-dashoffset:1;transition:stroke-dashoffset 1s var(--ease-emph) calc(.7s + var(--i) * 70ms),stroke var(--dur-base) ease}.js .caps__map:where(.astro-F6FVB6BX).is-in .caps__band:where(.astro-F6FVB6BX),.js .caps__map:where(.astro-F6FVB6BX).is-in .caps__chord:where(.astro-F6FVB6BX){stroke-dashoffset:0}}.contact:where(.astro-T5FF57NS){--ink: var(--deep-ink);--ink-soft: var(--deep-soft);--stone: var(--deep-soft);--paper: var(--deep);--paper-raised: color-mix(in srgb, var(--deep-ink) 5%, var(--deep));--rule: var(--deep-rule);--rule-strong: color-mix(in srgb, var(--deep-ink) 26%, transparent);--focus: var(--accent);--accent-ink: var(--accent);--error: #f2a097;--success: #a9cfb0;position:relative;overflow:clip;padding:var(--section-space) var(--gutter) clamp(4rem,3rem + 4vw,7rem);background:var(--deep);color:var(--ink)}.contact__inner:where(.astro-T5FF57NS){position:relative;display:grid;gap:clamp(3rem,2rem + 4vw,5rem);max-width:var(--page);margin-inline:auto}@media (min-width: 1000px){.contact__inner:where(.astro-T5FF57NS){grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:clamp(3rem,7vw,8rem);align-items:start}}.contact__title:where(.astro-T5FF57NS){font-size:var(--step-4);font-weight:600;font-stretch:78%;letter-spacing:-.03em;line-height:1;max-width:12ch}.contact__body:where(.astro-T5FF57NS){margin-top:1.5rem;max-width:38ch;color:var(--ink-soft)}.contact__email:where(.astro-T5FF57NS){display:inline-block;margin-top:2.25rem;padding-bottom:.15em;font-size:var(--step-2);font-weight:500;letter-spacing:-.01em;overflow-wrap:anywhere;color:var(--ink);text-decoration:none;background:linear-gradient(var(--accent),var(--accent)) no-repeat 0 100% / 100% 2px;transition:background-size .7s var(--ease-emph),color var(--dur-base) ease,opacity var(--dur-slow) var(--ease-emph),translate var(--dur-slow) var(--ease-emph)}.js .contact__email:where(.astro-T5FF57NS):not(.is-in){background-size:0 2px}.contact__email:where(.astro-T5FF57NS):hover{color:var(--accent);background-size:0 2px;background-position:100% 100%}.contact__links:where(.astro-T5FF57NS){display:flex;flex-wrap:wrap;gap:.75rem 1.75rem;margin-top:2rem;font-weight:500}.contact__links:where(.astro-T5FF57NS) a:where(.astro-T5FF57NS){color:var(--ink-soft);text-decoration:none}.contact__links:where(.astro-T5FF57NS) a:where(.astro-T5FF57NS):hover{color:var(--ink)}.contact__form:where(.astro-T5FF57NS){padding-top:.5rem}.contact__form:where(.astro-T5FF57NS) .button:hover{background:var(--deep-soft);border-color:var(--deep-soft);color:var(--deep)}.contact__noscript:where(.astro-T5FF57NS){color:var(--ink-soft)}@media (prefers-reduced-motion: no-preference){.contact:where(.astro-T5FF57NS):before{content:"";position:absolute;width:70vmax;height:70vmax;right:-25vmax;top:-20vmax;border-radius:50%;background:radial-gradient(closest-side,color-mix(in srgb,var(--accent) 12%,transparent),transparent);animation:contact-drift 26s var(--ease-in-out) infinite alternate;pointer-events:none}@keyframes contact-drift{to{translate:-12vmax 14vmax}}@supports (animation-timeline: view()){@keyframes contact-open{0%{clip-path:inset(0 4% 0 4% round 2rem 2rem 0 0)}to{clip-path:inset(0 0 0 0 round 0)}}.contact:where(.astro-T5FF57NS){animation:contact-open linear both;animation-timeline:view();animation-range:entry 0% entry 70%}}}.stack:where(.astro-5MFM2ERP) text:where(.astro-5MFM2ERP){font-family:var(--font-mono);font-size:7px;fill:var(--stone)}.stack:where(.astro-5MFM2ERP) polygon:where(.astro-5MFM2ERP),.stack:where(.astro-5MFM2ERP) path:where(.astro-5MFM2ERP){stroke:color-mix(in srgb,var(--ink) 40%,transparent);stroke-width:.5;stroke-linejoin:round}.arch:where(.astro-XGDRDVH7){display:grid;gap:1.5rem}.arch__stage:where(.astro-XGDRDVH7){position:relative;aspect-ratio:1 / .82;width:100%}@media (min-width: 1040px){.arch__stage:where(.astro-XGDRDVH7){aspect-ratio:auto;height:clamp(380px,calc(100svh - 15rem),660px)}}.arch__stage:where(.astro-XGDRDVH7) .arch__drawing,.arch__canvas:where(.astro-XGDRDVH7){position:absolute;inset:0;width:100%;height:100%}.arch__stage:where(.astro-XGDRDVH7) .arch__drawing{transition:opacity .4s ease}.arch__stage:where(.astro-XGDRDVH7) .stack__layer{transition:transform .5s var(--ease-out),opacity .3s ease}.arch:where(.astro-XGDRDVH7) .stack__layer[data-layer=interface],.arch:where(.astro-XGDRDVH7) .stack__layer[data-layer=application]{transform:translateY(var(--open))}.arch:where(.astro-XGDRDVH7):has(#arch-application:checked) .stack__layer[data-layer=interface],.arch:where(.astro-XGDRDVH7):has(#arch-infrastructure:checked) .stack__layer[data-layer=interface],.arch:where(.astro-XGDRDVH7):has(#arch-infrastructure:checked) .stack__layer[data-layer=application]{transform:none}.arch:where(.astro-XGDRDVH7):has(#arch-interface:checked) .stack__layer:not([data-layer=interface]),.arch:where(.astro-XGDRDVH7):has(#arch-application:checked) .stack__layer:not([data-layer=application]),.arch:where(.astro-XGDRDVH7):has(#arch-infrastructure:checked) .stack__layer:not([data-layer=infrastructure]){opacity:.4}.arch:where(.astro-XGDRDVH7):has(#arch-interface:checked) [data-layer=interface] :is(polygon,path),.arch:where(.astro-XGDRDVH7):has(#arch-application:checked) [data-layer=application] :is(polygon,path),.arch:where(.astro-XGDRDVH7):has(#arch-infrastructure:checked) [data-layer=infrastructure] :is(polygon,path){stroke:var(--accent)}.arch__canvas:where(.astro-XGDRDVH7){opacity:0;transition:opacity .5s ease;touch-action:pan-y}.arch:where(.astro-XGDRDVH7).is-live .arch__canvas:where(.astro-XGDRDVH7){opacity:1}.arch:where(.astro-XGDRDVH7).is-live .arch__drawing{opacity:0;visibility:hidden}.arch__labels:where(.astro-XGDRDVH7){position:absolute;inset:0;pointer-events:none;display:none}.arch:where(.astro-XGDRDVH7).is-live .arch__labels:where(.astro-XGDRDVH7){display:block}.arch__label:where(.astro-XGDRDVH7){position:absolute;left:0;top:0;translate:calc(-100% - .5rem) -50%;font-family:var(--font-mono);font-size:.75rem;white-space:nowrap;color:var(--stone);transition:color .2s ease}.arch__label:where(.astro-XGDRDVH7)[data-active=true]{color:var(--accent-ink)}.arch__dock:where(.astro-XGDRDVH7){display:grid;gap:.875rem;padding-left:clamp(0rem,6%,4rem)}.arch__controls:where(.astro-XGDRDVH7){display:flex;flex-wrap:wrap;gap:.25rem 1.5rem;border:0;margin:0;padding:0;min-width:0}.arch__option:where(.astro-XGDRDVH7){position:relative}.arch__option:where(.astro-XGDRDVH7) input:where(.astro-XGDRDVH7){position:absolute;z-index:1;inset:0;opacity:0;margin:0;cursor:pointer}.arch__option:where(.astro-XGDRDVH7) span:where(.astro-XGDRDVH7){position:relative;display:inline-block;padding-block:.5rem;font-size:.9375rem;font-weight:500;color:var(--stone);transition:color var(--dur-fast) ease}.arch__option:where(.astro-XGDRDVH7) span:where(.astro-XGDRDVH7):after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--accent);scale:0 1;transform-origin:left center;transition:scale var(--dur-base) var(--ease-emph)}.arch__option:where(.astro-XGDRDVH7):hover span:where(.astro-XGDRDVH7){color:var(--ink)}.arch__option:where(.astro-XGDRDVH7) input:where(.astro-XGDRDVH7):checked+span:where(.astro-XGDRDVH7){color:var(--ink)}.arch__option:where(.astro-XGDRDVH7) input:where(.astro-XGDRDVH7):checked+span:where(.astro-XGDRDVH7):after{scale:1 1}.arch__option:where(.astro-XGDRDVH7) input:where(.astro-XGDRDVH7):focus-visible+span:where(.astro-XGDRDVH7){outline:2px solid var(--focus);outline-offset:2px}.arch__caption:where(.astro-XGDRDVH7){display:none;max-width:46ch;color:var(--ink-soft)}.arch__caption:where(.astro-XGDRDVH7) span:where(.astro-XGDRDVH7){display:block;margin-top:.25rem;font-family:var(--font-mono);font-size:var(--step--1);color:var(--stone)}.arch:where(.astro-XGDRDVH7):has(#arch-interface:checked) :where(.astro-XGDRDVH7)[data-panel=interface],.arch:where(.astro-XGDRDVH7):has(#arch-application:checked) :where(.astro-XGDRDVH7)[data-panel=application],.arch:where(.astro-XGDRDVH7):has(#arch-infrastructure:checked) :where(.astro-XGDRDVH7)[data-panel=infrastructure]{display:block}.arch__parts:where(.astro-XGDRDVH7){display:none;gap:.625rem}.js .arch__parts:where(.astro-XGDRDVH7){display:grid}.arch__parts-group:where(.astro-XGDRDVH7){display:none;flex-wrap:wrap;align-items:center;gap:.375rem}.arch:where(.astro-XGDRDVH7):has(#arch-interface:checked) .arch__parts-group:where(.astro-XGDRDVH7)[data-panel=interface],.arch:where(.astro-XGDRDVH7):has(#arch-application:checked) .arch__parts-group:where(.astro-XGDRDVH7)[data-panel=application],.arch:where(.astro-XGDRDVH7):has(#arch-infrastructure:checked) .arch__parts-group:where(.astro-XGDRDVH7)[data-panel=infrastructure]{display:flex}.arch__parts-label:where(.astro-XGDRDVH7){font-size:var(--step--1);color:var(--stone);margin-right:.25rem}.arch__parts:where(.astro-XGDRDVH7) button:where(.astro-XGDRDVH7){min-height:2.25rem;padding:.25rem .75rem;border:1px solid var(--rule-strong);border-radius:999px;background:transparent;font-size:.8125rem;cursor:pointer;transition:background-color var(--dur-fast) ease,border-color var(--dur-fast) ease,color var(--dur-fast) ease}.arch__parts:where(.astro-XGDRDVH7) button:where(.astro-XGDRDVH7):hover{border-color:var(--ink)}.arch__parts:where(.astro-XGDRDVH7) button:where(.astro-XGDRDVH7)[aria-pressed=true]{background:var(--accent-ink);border-color:var(--accent-ink);color:var(--paper)}.arch__node-text:where(.astro-XGDRDVH7){max-width:46ch;min-height:1.6em;color:var(--ink)}@media (max-width: 720px){.arch:where(.astro-XGDRDVH7).is-live .arch__labels:where(.astro-XGDRDVH7),.arch:where(.astro-XGDRDVH7) .arch__drawing text{display:none}}@media (prefers-reduced-motion: no-preference){@keyframes arch-layer-in{0%{opacity:0;translate:0 -56px}}.arch:where(.astro-XGDRDVH7) .stack__layer{animation:arch-layer-in 1.1s var(--ease-emph) both}.arch:where(.astro-XGDRDVH7) .stack__layer[data-layer=infrastructure]{animation-delay:.45s}.arch:where(.astro-XGDRDVH7) .stack__layer[data-layer=application]{animation-delay:.62s}.arch:where(.astro-XGDRDVH7) .stack__layer[data-layer=interface]{animation-delay:.79s}.arch__caption:where(.astro-XGDRDVH7){animation:enter-rise .52s var(--ease-emph) both}}@media (prefers-reduced-motion: reduce){.arch__stage:where(.astro-XGDRDVH7) .stack__layer,.arch__stage:where(.astro-XGDRDVH7) .arch__drawing,.arch__canvas:where(.astro-XGDRDVH7){transition:none}}.hero:where(.astro-EWXIRVLT){display:grid;gap:2.5rem;padding:clamp(1.75rem,1rem + 1.5vw,3rem) var(--gutter) clamp(4rem,2rem + 6vw,8rem)}.hero__byline:where(.astro-EWXIRVLT){display:flex;flex-wrap:wrap;align-items:baseline;gap:.25rem 1rem;color:var(--stone)}.hero__name:where(.astro-EWXIRVLT){color:var(--ink);font-weight:600}.hero__title:where(.astro-EWXIRVLT){margin-top:1.5rem;font-size:var(--step-display);font-weight:600;font-stretch:76%;line-height:.96;letter-spacing:-.035em;max-width:11ch}.hero__summary:where(.astro-EWXIRVLT){margin-top:1.75rem;max-width:34ch;font-size:var(--step-1);line-height:1.45;color:var(--ink-soft)}.hero__actions:where(.astro-EWXIRVLT){margin-top:2.25rem;display:flex;flex-wrap:wrap;align-items:center;gap:1rem 2rem;font-weight:500}.hero__actions:where(.astro-EWXIRVLT) a:where(.astro-EWXIRVLT):not(.button){text-decoration:none}@media (min-width: 1040px){.hero:where(.astro-EWXIRVLT){grid-template-columns:minmax(0,5fr) minmax(0,7fr);align-items:start;padding-right:0;gap:0}.hero__text:where(.astro-EWXIRVLT){padding-top:clamp(.5rem,2svh,1.5rem)}}@media (min-width: 1600px){.hero:where(.astro-EWXIRVLT){padding-left:calc((100vw - var(--page)) / 2)}}.work:where(.astro-DU3ZH6Q6){padding:0 var(--gutter) var(--section-space)}.work__inner:where(.astro-DU3ZH6Q6){display:grid;gap:2.5rem;max-width:var(--page);margin-inline:auto;padding-top:calc(var(--section-space) / 2);border-top:1px solid var(--rule)}@media (min-width: 1000px){.work__inner:where(.astro-DU3ZH6Q6){grid-template-columns:minmax(0,4fr) minmax(0,7fr);gap:clamp(3rem,7vw,8rem);align-items:start}.work__head:where(.astro-DU3ZH6Q6){position:sticky;top:6rem}}.work__list:where(.astro-DU3ZH6Q6){border-top:1px solid var(--rule)}.work__list:where(.astro-DU3ZH6Q6) li:where(.astro-DU3ZH6Q6){border-bottom:1px solid var(--rule)}.work__list:where(.astro-DU3ZH6Q6) a:where(.astro-DU3ZH6Q6){display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.375rem 2rem;padding-block:1.375rem;text-decoration:none}.work__name:where(.astro-DU3ZH6Q6){font-size:var(--step-2);font-weight:600;font-stretch:86%;letter-spacing:-.015em;line-height:1.15;transition:color var(--dur-fast) ease}.work__meta:where(.astro-DU3ZH6Q6){display:flex;gap:.75rem;align-items:baseline;justify-content:end;font-size:var(--step--1);color:var(--stone);white-space:nowrap}.work__status:where(.astro-DU3ZH6Q6){padding:.125rem .5rem;border:1px solid var(--rule-strong);border-radius:999px;color:var(--ink-soft)}.work__line:where(.astro-DU3ZH6Q6){grid-column:1 / -1;max-width:56ch;color:var(--ink-soft)}.work__focus:where(.astro-DU3ZH6Q6){grid-column:1 / -1;font-size:var(--step--1);color:var(--stone)}.work__list:where(.astro-DU3ZH6Q6) a:where(.astro-DU3ZH6Q6):hover .work__name:where(.astro-DU3ZH6Q6){color:var(--accent-ink)}@media (max-width: 560px){.work__list:where(.astro-DU3ZH6Q6) a:where(.astro-DU3ZH6Q6){grid-template-columns:1fr}.work__meta:where(.astro-DU3ZH6Q6){justify-content:start}}.work__all:where(.astro-DU3ZH6Q6){margin-top:1.75rem}.writing:where(.astro-GYB22STH){padding:var(--section-space) var(--gutter) calc(var(--section-space) / 2)}.writing__inner:where(.astro-GYB22STH){max-width:var(--page);margin-inline:auto}.writing__grid:where(.astro-GYB22STH){display:grid;gap:4rem;margin-top:clamp(3rem,2rem + 4vw,6rem)}@media (min-width: 1000px){.writing__grid:where(.astro-GYB22STH){grid-template-columns:minmax(0,7fr) minmax(0,4fr);gap:clamp(3rem,7vw,8rem)}}.writing__label:where(.astro-GYB22STH){font-size:var(--step--1);font-weight:500;color:var(--stone);letter-spacing:0;margin-bottom:.5rem}.writing__articles:where(.astro-GYB22STH) li:where(.astro-GYB22STH),.writing__experiments:where(.astro-GYB22STH) li:where(.astro-GYB22STH){border-top:1px solid var(--rule)}.writing__articles:where(.astro-GYB22STH) a:where(.astro-GYB22STH),.writing__experiments:where(.astro-GYB22STH) a:where(.astro-GYB22STH){display:grid;gap:.5rem;padding-block:1.75rem;text-decoration:none}.writing__title:where(.astro-GYB22STH){position:relative;font-size:var(--step-3);font-weight:600;font-stretch:84%;letter-spacing:-.02em;line-height:1.08;text-wrap:balance;transition:color var(--dur-base) ease,translate var(--dur-base) var(--ease-emph)}.writing__title:where(.astro-GYB22STH):before{content:"→";position:absolute;left:-2.25rem;top:0;font-family:var(--font-sans);font-size:.8em;color:var(--accent-ink);opacity:0;translate:-.75rem 0;pointer-events:none;transition:opacity var(--dur-base) ease,translate var(--dur-base) var(--ease-emph)}.writing__articles:where(.astro-GYB22STH) a:where(.astro-GYB22STH):hover .writing__title:where(.astro-GYB22STH),.writing__articles:where(.astro-GYB22STH) a:where(.astro-GYB22STH):focus-visible .writing__title:where(.astro-GYB22STH){color:var(--accent-ink);translate:2.25rem 0}.writing__articles:where(.astro-GYB22STH) a:where(.astro-GYB22STH):hover .writing__title:where(.astro-GYB22STH):before,.writing__articles:where(.astro-GYB22STH) a:where(.astro-GYB22STH):focus-visible .writing__title:where(.astro-GYB22STH):before{opacity:1;translate:0 0}.writing__meta:where(.astro-GYB22STH),.writing__desc:where(.astro-GYB22STH){color:var(--stone)}.writing__code:where(.astro-GYB22STH){font-family:var(--font-mono);font-size:var(--step-1);font-weight:500;letter-spacing:-.02em;transition:color var(--dur-base) ease}.writing__experiments:where(.astro-GYB22STH) a:where(.astro-GYB22STH):hover .writing__code:where(.astro-GYB22STH){color:var(--accent-ink)}.writing__more:where(.astro-GYB22STH){margin-top:1.5rem}@media (prefers-reduced-motion: reduce){.writing__articles:where(.astro-GYB22STH) a:where(.astro-GYB22STH):hover .writing__title:where(.astro-GYB22STH),.writing__articles:where(.astro-GYB22STH) a:where(.astro-GYB22STH):focus-visible .writing__title:where(.astro-GYB22STH){translate:none}}
