:root{--bg: #fcfcfa;--bg-alt: #f1f1ee;--surface: #fff;--surface-inverse: #0d0d0d;--ink: #0d0d0d;--ink-soft: #6d6d6a;--ink-inverse: #fcfcfa;--ink-inverse-soft: #b3b3af;--line: #e4e4e0;--line-strong: #767672;--accent: #cdff4d;--accent-text: #547a00;--accent-ink: #0d0d0d;--font-display: "Space Grotesk", ui-sans-serif, system-ui, sans-serif;--font-body: "Inter", ui-sans-serif, system-ui, sans-serif;--font-mono: "JetBrains Mono", ui-monospace, "SFMono-Regular", monospace;--step--1: clamp(.82rem, .8rem + .1vw, .88rem);--step-0: clamp(1rem, .97rem + .15vw, 1.06rem);--step-1: clamp(1.15rem, 1.08rem + .35vw, 1.35rem);--step-2: clamp(1.35rem, 1.2rem + .75vw, 1.75rem);--step-3: clamp(1.75rem, 1.4rem + 1.75vw, 2.9rem);--step-4: clamp(2.6rem, 1.6rem + 5vw, 6.5rem);--leading-tight: .98;--leading-body: 1.55;--tracking-display: -.02em;--tracking-mono: .12em;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 18px;--space-5: 26px;--space-6: 38px;--space-7: 56px;--space-8: 80px;--space-9: 112px;--radius-sm: 8px;--radius: 22px;--radius-lg: 28px;--border-hairline: 1px solid var(--line);--shadow-lift: 0 20px 40px -24px rgb(13 13 13 / 18%);--container: 1240px;--gutter: clamp(18px, 5vw, 32px);--dur-entrance: 1.2s;--dur-micro: .18s;--dur-press: 60ms;--stagger-step: 80ms;--stagger-cap: 4;--ease-entrance: cubic-bezier(.65, 0, .35, 1);--ease-micro: ease-out;color-scheme:light}@media(prefers-color-scheme:dark){:root{--bg: #0c0c0b;--bg-alt: #151514;--surface: #171716;--surface-inverse: #f1f1ee;--ink: #f4f4f1;--ink-soft: #a3a39e;--ink-inverse: #0d0d0d;--ink-inverse-soft: #6d6d6a;--line: #292927;--line-strong: #686868;--accent: #cdff4d;--accent-text: #b8e63f;--shadow-lift: none;color-scheme:dark}}:root[data-theme=dark]{--bg: #0c0c0b;--bg-alt: #151514;--surface: #171716;--surface-inverse: #f1f1ee;--ink: #f4f4f1;--ink-soft: #a3a39e;--ink-inverse: #0d0d0d;--ink-inverse-soft: #6d6d6a;--line: #292927;--line-strong: #686868;--accent: #cdff4d;--accent-text: #b8e63f;--shadow-lift: none;color-scheme:dark}:root[data-theme=light]{--bg: #fcfcfa;--bg-alt: #f1f1ee;--surface: #fff;--surface-inverse: #0d0d0d;--ink: #0d0d0d;--ink-soft: #6d6d6a;--ink-inverse: #fcfcfa;--ink-inverse-soft: #b3b3af;--line: #e4e4e0;--line-strong: #767672;--accent: #cdff4d;--accent-text: #547a00;--accent-ink: #0d0d0d;--shadow-lift: 0 20px 40px -24px rgb(13 13 13 / 18%);color-scheme:light}*,*:before,*:after{box-sizing:border-box}body,h1,h2,h3,h4,p,figure,blockquote,dl,dd{margin:0}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;scroll-behavior:smooth}img,picture,video,canvas,svg{display:block;max-width:100%}input,button,textarea,select{font:inherit;color:inherit}:target{scroll-margin-top:calc(var(--space-8) + env(safe-area-inset-top,0px))}@font-face{font-family:Space Grotesk;src:url("./media/space-grotesk-variable-subset-2RGWVCE7.woff2") format("woff2");font-weight:300 700;font-style:normal;font-display:optional;unicode-range:U+0000-007F,U+0080-00FF,U+0106-0107,U+010C-010D,U+0110-0111,U+0160-0161,U+017D-017E,U+2013-2014,U+2192}@font-face{font-family:Inter;src:url("./media/inter-variable-subset-SZGKNW6Y.woff2") format("woff2");font-weight:100 900;font-style:normal;font-display:optional;unicode-range:U+0000-007F,U+0080-00FF,U+0106-0107,U+010C-010D,U+0110-0111,U+0160-0161,U+017D-017E,U+2013-2014,U+2192}@font-face{font-family:JetBrains Mono;src:url("./media/jetbrains-mono-variable-subset-2WXKWH73.woff2") format("woff2");font-weight:100 800;font-style:normal;font-display:optional;unicode-range:U+0000-007F,U+00B7,U+2014,U+2192,U+25C6}body{font-family:var(--font-body);font-size:var(--step-0);line-height:var(--leading-body);color:var(--ink);background:var(--bg)}h1,h2,h3,h4{font-family:var(--font-display);letter-spacing:var(--tracking-display);line-height:var(--leading-tight);font-weight:700}h1{font-size:var(--step-4)}h2{font-size:var(--step-3)}h3{font-size:var(--step-2)}h4{font-size:var(--step-1)}code,kbd,samp,.mono{font-family:var(--font-mono);letter-spacing:var(--tracking-mono)}p,li{max-width:70ch}:where(a,button,input,textarea,select,[tabindex]):focus-visible{outline:2px solid var(--ink);outline-offset:3px;border-radius:var(--radius-sm)}[data-surface=inverse]{--ink: var(--ink-inverse);--ink-soft: var(--ink-inverse-soft)}[data-surface=accent]{--ink: var(--accent-ink);--ink-soft: var(--accent-ink)}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.tap-target{position:relative}.tap-target:after{content:"";position:absolute;inset:-10px 0}html:not([data-js]) .contact-form,html:not([data-js]) .contact-form__submit{display:none!important}.wrap{max-width:var(--container);margin-inline:auto;padding-inline:var(--gutter)}.band{border-block:var(--border-hairline);background:var(--bg-alt)}.cq{container-type:inline-size}.full-bleed-height{min-height:100dvh}@supports not (height: 100dvh){.full-bleed-height{min-height:100svh}}.safe-top{padding-top:max(env(safe-area-inset-top,0px),0px)}.safe-bottom{padding-bottom:max(env(safe-area-inset-bottom,0px),0px)}.grid-auto{display:grid;gap:var(--space-4);grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr))}.aspect-box{position:relative;overflow:hidden;aspect-ratio:var(--aspect, 16 / 9)}.aspect-box img,.aspect-box picture,.aspect-box picture>img{display:block;width:100%;height:100%;object-fit:cover}[data-reveal=pending]{opacity:0;transform:translateY(20px)}[data-reveal=pending][data-reveal-variant=grid]{transform:translateY(26px) scale(.985)}[data-reveal=revealed]{opacity:1;transform:none;transition:opacity var(--dur-entrance) var(--ease-entrance) calc(min(var(--reveal-i, 0),var(--stagger-cap)) * var(--stagger-step)),transform var(--dur-entrance) var(--ease-entrance) calc(min(var(--reveal-i, 0),var(--stagger-cap)) * var(--stagger-step));will-change:opacity,transform}.hero-line{overflow:clip}.hero-line>*{display:block;transition:transform var(--dur-entrance) var(--ease-entrance),opacity var(--dur-entrance) var(--ease-entrance)}.hero-line[data-reveal=pending]>*{transform:translateY(100%);opacity:0}.hero-line[data-reveal=revealed]>*{transform:translateY(0);opacity:1}.hero-line:nth-of-type(2)>*{transition-delay:90ms}.custom-cursor{position:fixed;top:0;left:0;width:34px;height:34px;pointer-events:none;z-index:999;transform:translate(-50%,-50%);will-change:transform}.custom-cursor__inner{display:block;width:100%;height:100%;border-radius:50%;background:var(--accent);transform:scale(.294);transition:transform var(--dur-micro) var(--ease-micro),background-color var(--dur-micro) var(--ease-micro)}.custom-cursor--active .custom-cursor__inner{transform:scale(1)}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}[data-reveal],[data-reveal=pending],[data-reveal=revealed],.hero-line>*{opacity:1!important;transform:none!important;transition:none!important}.custom-cursor{display:none}.btn:hover,.btn:focus-visible,.tile--interactive:hover,.tile--interactive:focus-visible,.project-tile-link:hover app-browser-frame img,.project-tile-link:focus-visible app-browser-frame img{transform:none!important;transition:none!important}::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}}@media(pointer:coarse){.custom-cursor{display:none}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);min-width:44px;min-height:44px;padding:var(--space-3) var(--space-5);border-radius:9999px;border:none;font-family:var(--font-body);font-size:var(--step-0);font-weight:600;text-decoration:none;cursor:pointer;transition:background-color .25s var(--ease-micro),color .25s var(--ease-micro),transform var(--dur-press) var(--ease-micro),border-color .25s var(--ease-micro)}.btn+.btn{margin-inline-start:var(--space-2)}.btn--primary{background:var(--ink);color:var(--ink-inverse)}.btn--primary:hover,.btn--primary:focus-visible{background:color-mix(in srgb,var(--ink) 82%,var(--bg));transform:translateY(-2px)}.btn--primary:active{transform:translateY(0)}.btn--secondary{background:transparent;color:var(--ink);border:var(--border-hairline);border-color:var(--line-strong)}.btn--secondary:hover,.btn--secondary:focus-visible{transform:translateY(-2px);background:var(--bg-alt)}.btn--secondary:active{transform:translateY(0)}.btn--on-inverse{background:var(--accent);color:var(--accent-ink)}.btn--on-inverse:hover,.btn--on-inverse:focus-visible{background:color-mix(in srgb,var(--accent) 80%,var(--ink-inverse));transform:translateY(-2px)}.btn--on-inverse:active{transform:translateY(0)}.btn:disabled,.btn[aria-disabled=true]{opacity:.5;cursor:not-allowed;transform:none}.btn--pending{cursor:progress;opacity:.75}
