@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/bricolage-grotesque-vietnamese-opsz-normal-D9N6E8K1.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/bricolage-grotesque-latin-ext-opsz-normal-IcJDqblK.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/bricolage-grotesque-latin-opsz-normal-Cre6nC2_.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-cyrillic-ext-400-normal-g30qAdWV.woff2)format("woff2"),url(/assets/ibm-plex-sans-cyrillic-ext-400-normal-Dsrv2Tcn.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-cyrillic-400-normal-DZqxrq2p.woff2)format("woff2"),url(/assets/ibm-plex-sans-cyrillic-400-normal-BTotfTJu.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-greek-400-normal-_efipK4i.woff2)format("woff2"),url(/assets/ibm-plex-sans-greek-400-normal-D9ESIMu3.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-vietnamese-400-normal-DG4YqDda.woff2)format("woff2"),url(/assets/ibm-plex-sans-vietnamese-400-normal-fK1oJ5dG.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-latin-ext-400-normal-C5H60-Va.woff2)format("woff2"),url(/assets/ibm-plex-sans-latin-ext-400-normal-RBey6euL.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2)format("woff2"),url(/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-cyrillic-ext-500-normal-Cs5J6C77.woff2)format("woff2"),url(/assets/ibm-plex-sans-cyrillic-ext-500-normal-DB5PtV2g.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-cyrillic-500-normal-CocWQlwt.woff2)format("woff2"),url(/assets/ibm-plex-sans-cyrillic-500-normal-ByOcLdNv.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-greek-500-normal-JMMifIXV.woff2)format("woff2"),url(/assets/ibm-plex-sans-greek-500-normal-CuWXN6rf.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-vietnamese-500-normal-e4dixQRQ.woff2)format("woff2"),url(/assets/ibm-plex-sans-vietnamese-500-normal-BEb3_waV.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-latin-ext-500-normal-DakdToA3.woff2)format("woff2"),url(/assets/ibm-plex-sans-latin-ext-500-normal-D0aIdm-b.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2)format("woff2"),url(/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-cyrillic-ext-600-normal-DUMzJB7m.woff2)format("woff2"),url(/assets/ibm-plex-sans-cyrillic-ext-600-normal-Bz0x94Yp.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-cyrillic-600-normal-71GNu3SW.woff2)format("woff2"),url(/assets/ibm-plex-sans-cyrillic-600-normal-BGq0mW3O.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-greek-600-normal-DzTrcv_p.woff2)format("woff2"),url(/assets/ibm-plex-sans-greek-600-normal-D-CqTdkO.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-vietnamese-600-normal-DpPYBSTl.woff2)format("woff2"),url(/assets/ibm-plex-sans-vietnamese-600-normal-DgdngZtN.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-latin-ext-600-normal-DOrvGEcy.woff2)format("woff2"),url(/assets/ibm-plex-sans-latin-ext-600-normal-DIrixKbi.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2)format("woff2"),url(/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2)format("woff2"),url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2)format("woff2"),url(/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2)format("woff2"),url(/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-cyrillic-ext-500-normal-BqneJy0T.woff2)format("woff2"),url(/assets/ibm-plex-mono-cyrillic-ext-500-normal-BIfNGwUT.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-cyrillic-500-normal-Bq9vWWag.woff2)format("woff2"),url(/assets/ibm-plex-mono-cyrillic-500-normal-Ael50iVv.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-vietnamese-500-normal-DZ4AoWbu.woff2)format("woff2"),url(/assets/ibm-plex-mono-vietnamese-500-normal-C8zxqsMH.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-latin-ext-500-normal-CAhNIIs5.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-ext-500-normal-CZ70TYgx.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--bench:var(--lightningcss-light,#eef3f6)var(--lightningcss-dark,#0b1420);--glass:var(--lightningcss-light,#fff)var(--lightningcss-dark,#132131);--rule:var(--lightningcss-light,#d3dde4)var(--lightningcss-dark,#24364b);--tint:var(--lightningcss-light,#e3eaf9)var(--lightningcss-dark,#1b2b4a);--ink:var(--lightningcss-light,#13212c)var(--lightningcss-dark,#e8eff5);--ink-soft:var(--lightningcss-light,#4b5d6b)var(--lightningcss-dark,#a6b7c6);--ink-faint:var(--lightningcss-light,#5a6d7e)var(--lightningcss-dark,#7d91a4);--blue:var(--lightningcss-light,#2747d4)var(--lightningcss-dark,#7c97ff);--blue-deep:var(--lightningcss-light,#172f9e)var(--lightningcss-dark,#5874ee);--on-blue:var(--lightningcss-light,#fff)var(--lightningcss-dark,#0b1420);--violet:var(--lightningcss-light,#7c3aed)var(--lightningcss-dark,#b794ff);--shadow-color:var(--lightningcss-light,#13212c47)var(--lightningcss-dark,#000000b3);--shadow:0 1px 2px #00000014, 0 18px 40px -22px var(--shadow-color);--font-display:"Bricolage Grotesque Variable", "IBM Plex Sans", sans-serif;--font-body:"IBM Plex Sans", system-ui, sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, monospace;--r-surface:14px;--r-chip:6px;--gap:clamp(20px, 4vw, 48px);--measure:66ch}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html{scroll-behavior:smooth;scrollbar-gutter:stable}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition:none!important;animation:none!important}}body{background:var(--bench);color:var(--ink-soft);font-family:var(--font-body);-webkit-font-smoothing:antialiased;margin:0;font-size:17px;line-height:1.65}::selection{background:var(--blue);color:var(--on-blue)}a{color:var(--blue);text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1px;-webkit-text-decoration-color:color-mix(in srgb, var(--blue) 35%, transparent);text-decoration-color:color-mix(in srgb, var(--blue) 35%, transparent);transition:text-decoration-color .15s}a:hover{-webkit-text-decoration-color:var(--blue);text-decoration-color:var(--blue)}:focus-visible{outline:2px solid var(--blue);outline-offset:3px}html:has(dialog[open]){overflow:hidden}h1,h2,h3,h4{font-family:var(--font-display);color:var(--ink);margin:0;font-weight:700}h1{letter-spacing:-.035em;font-variation-settings:"opsz" 96;font-size:clamp(2.8rem,7.6vw,5.8rem);font-weight:800;line-height:.95}h2{letter-spacing:-.02em;font-variation-settings:"opsz" 60;font-size:clamp(1.7rem,3.4vw,2.5rem);line-height:1.08}h3{letter-spacing:-.005em;font-size:1.18rem;line-height:1.25}h1,h2,h3{text-wrap:balance}p{max-width:var(--measure);text-wrap:pretty;margin:0}p+p{margin-top:.9em}b,strong{color:var(--ink);font-weight:600}.mono{font-family:var(--font-mono)}.nowrap{white-space:nowrap}.dim{color:var(--ink-faint)}.wrap{max-width:1180px;padding:0 var(--gap);margin:0 auto}.meniscus{width:calc(100% - 2 * var(--gap));max-width:calc(1180px - 2 * var(--gap));height:24px;margin:calc(var(--gap) * 1.4) auto;display:block;overflow:visible}.meniscus path{fill:none;stroke:var(--rule);stroke-width:1.5px;vector-effect:non-scaling-stroke}.grid{gap:18px;display:grid}.g2{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}.g3{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}.card{background:var(--glass);border:1px solid var(--rule);border-radius:var(--r-surface);padding:24px}.card h3{margin-bottom:.6em}.card p{font-size:.95rem}.btn{font-family:var(--font-body);border:1.5px solid var(--blue);background:var(--blue);color:var(--on-blue);cursor:pointer;border-radius:999px;align-items:center;padding:12px 22px;font-size:.95rem;font-weight:600;text-decoration:none;transition:background .15s,border-color .15s,transform .15s;display:inline-flex}.btn:hover{background:var(--blue-deep);border-color:var(--blue-deep)}.btn.ghost{color:var(--ink);border-color:var(--rule);background:0 0}.btn.ghost:hover{border-color:var(--ink)}.btn-sm{padding:8px 16px;font-size:.88rem}.specimen{font-family:var(--font-mono);color:var(--ink-faint);flex-wrap:wrap;align-items:center;gap:6px 10px;font-size:.76rem;display:inline-flex}.specimen b{color:var(--blue);font-weight:500}.specimen .div{background:var(--rule);width:1px;height:12px}.status{font-family:var(--font-mono);white-space:nowrap;color:var(--ink-faint);border:1px solid var(--rule);border-radius:999px;align-items:center;gap:6px;padding:2px 10px 2px 8px;font-size:.72rem;display:inline-flex}.status:before{content:"";background:currentColor;border-radius:50%;width:6px;height:6px}.status.solution{color:var(--violet);border-color:color-mix(in srgb, var(--violet) 35%, transparent);background:color-mix(in srgb, var(--violet) 8%, transparent)}.status.stable{color:var(--blue);border-color:color-mix(in srgb, var(--blue) 30%, transparent);background:var(--tint)}.project-card{flex-direction:column;display:flex}.project-card .specimen{margin-bottom:14px}.project-card h3{font-size:1.22rem}.project-card .period{font-family:var(--font-mono);margin-top:.4em;font-size:.78rem}.project-card p{margin-top:.9em}.project-card .tech-tags{margin-top:auto;padding-top:1.2em}.site-header{z-index:10;background:color-mix(in srgb, var(--bench) 82%, transparent);-webkit-backdrop-filter:blur(14px);border-bottom:1px solid var(--rule);position:sticky;top:0}.site-header-inner{justify-content:space-between;align-items:center;gap:16px var(--gap);flex-wrap:wrap;padding-top:14px;padding-bottom:14px;display:flex}.wordmark{font-family:var(--font-display);letter-spacing:-.02em;color:var(--ink);align-items:center;gap:10px;font-size:1.22rem;font-weight:750;text-decoration:none;display:inline-flex}.wordmark-eight{color:var(--blue)}.monogram{width:24px;height:40px;color:var(--ink);flex-shrink:0;overflow:visible}.mono-liquid{transform-box:view-box;transform-origin:160px 300px;transition:transform .6s cubic-bezier(.3,1.6,.5,1)}.wordmark:hover .mono-liquid{transform:rotate(-14deg)}.site-header nav ul{flex-wrap:wrap;align-items:center;gap:8px 28px;margin:0;padding:0;list-style:none;display:flex}.site-header nav a:not(.btn){color:var(--ink-soft);background:linear-gradient(var(--blue), var(--blue)) left bottom / 0 2px no-repeat;padding:4px 0;font-size:.95rem;font-weight:500;text-decoration:none;transition:background-size .25s,color .15s}.site-header nav a:not(.btn):hover,.site-header nav a.active{color:var(--ink);background-size:100% 2px}@media (width<=560px){.site-header{position:static}.site-header .nav-cta{display:none}}.site-footer{border-top:1px solid var(--rule);padding:calc(var(--gap) * 1.4) 0 var(--gap);margin-top:calc(var(--gap) * 2);background:var(--glass)}.footer-grid{gap:var(--gap);grid-template-columns:2fr repeat(3,1fr);display:grid}.footer-blurb{max-width:40ch;margin-top:1em;font-size:.92rem}.site-footer h4{margin:0 0 .8em;font-size:.95rem}.site-footer ul{gap:.45em;margin:0;padding:0;font-size:.93rem;list-style:none;display:grid}.site-footer ul a{color:var(--ink-soft);text-decoration:none}.site-footer ul a:hover{color:var(--blue)}.spec-line{color:var(--ink-faint);flex-wrap:wrap;gap:.5em 1.6em;font-size:.85rem;display:flex}.footer-base{margin-top:calc(var(--gap) * 1.2);border-top:1px solid var(--rule);justify-content:space-between;padding-top:1.2em}@media (width<=760px){.footer-grid{grid-template-columns:1fr 1fr}.footer-grid>:first-child{grid-column:1/-1}}.tech-tags{flex-wrap:wrap;gap:6px;margin-top:1em;display:flex}.tech-tags span{font-family:var(--font-mono);color:var(--ink-soft);background:var(--bench);border-radius:var(--r-chip);padding:3px 9px;font-size:.74rem}.theme-toggle{border:1px solid var(--rule);background:var(--glass);width:42px;height:42px;color:var(--ink);cursor:pointer;border-radius:50%;place-items:center;padding:0;transition:border-color .15s,transform .3s;display:grid}.theme-toggle:hover{border-color:var(--ink-faint)}.site-header{view-transition-name:site-header}::view-transition-old(root){animation:.18s ease-in both page-out}::view-transition-new(root){animation:.32s cubic-bezier(.2,.7,.2,1) both page-in}@keyframes page-out{to{opacity:0}}@keyframes page-in{0%{opacity:0;transform:translateY(10px)}}@media (prefers-reduced-motion:reduce){::view-transition-group(*){animation:none!important}::view-transition-old(*){animation:none!important}::view-transition-new(*){animation:none!important}}.btn:active,.theme-toggle:active{transform:scale(.96)}.theme-toggle svg{animation:.35s cubic-bezier(.3,1.6,.5,1) icon-in}@keyframes icon-in{0%{opacity:0;transform:rotate(-90deg)scale(.5)}}.project-card{scroll-margin-top:96px;transition:border-color .2s,box-shadow .2s,transform .2s;position:relative}.project-card .stretched{color:inherit;text-decoration:none}.project-card .stretched:after{content:"";border-radius:inherit;position:absolute;inset:0}.project-card .stretched:focus-visible{outline:none}.project-card.linked:has(:focus-visible){border-color:color-mix(in srgb, var(--blue) 45%, var(--rule));box-shadow:var(--shadow);transform:translateY(-3px)}.project-card.linked:has(:focus-visible){outline:2px solid var(--blue);outline-offset:3px}@media (hover:hover){.project-card.linked:hover{border-color:color-mix(in srgb, var(--blue) 45%, var(--rule));box-shadow:var(--shadow);transform:translateY(-3px)}.project-card.linked:hover h3{color:var(--blue)}}.project-card.linked:active{transform:translateY(-1px)scale(.99)}.project-card.found{animation:1.6s ease-out found}@keyframes found{0%,40%{border-color:var(--blue);box-shadow:0 0 0 4px color-mix(in srgb, var(--blue) 25%, transparent)}}@supports (animation-timeline:scroll()){.site-header{animation:linear both header-solid;animation-timeline:scroll();animation-range:0 80px}@keyframes header-solid{0%{-webkit-backdrop-filter:none;backdrop-filter:none;background-color:#0000;border-bottom-color:#0000}}}.theme-vt .site-header{view-transition-name:none}.theme-vt::view-transition-old(root){animation:none}.theme-vt::view-transition-new(root){animation:.55s cubic-bezier(.4,0,.2,1) theme-reveal}@keyframes theme-reveal{0%{clip-path:circle(0 at var(--vt-x) var(--vt-y))}to{clip-path:circle(150vmax at var(--vt-x) var(--vt-y))}}.page-intro{padding-top:calc(var(--gap) * 2)}.page-intro h1{max-width:16ch;font-size:clamp(2.4rem,6vw,4.4rem)}.lede{max-width:58ch;color:var(--ink-soft);margin-top:1.2em;font-size:1.18rem;line-height:1.6}.grid-top{margin-top:1.6em}.link-more{margin-top:1.8em;font-weight:600}.section-head{margin-bottom:2.2em}.section-head p{margin-top:.8em}.hero-section{gap:var(--gap);padding-top:calc(var(--gap) * 1.6);padding-bottom:var(--gap);grid-template-columns:1.35fr 1fr;align-items:center;display:grid}.hero-copy h1{animation:.9s cubic-bezier(.2,.7,.2,1) both rise}.hero-copy .lede{animation:.9s cubic-bezier(.2,.7,.2,1) .15s both rise}.hero-copy .cta-row{animation:.9s cubic-bezier(.2,.7,.2,1) .3s both rise}@keyframes rise{0%{opacity:0;transform:translateY(18px)}}.hero-art{place-items:center;display:grid}.cta-row{flex-wrap:wrap;gap:12px;margin-top:2em;display:flex}@media (width<=760px){.hero-section{grid-template-columns:1fr}.hero-art{order:-1}.hero-art .flask{width:150px}}.flask-button{cursor:pointer;border-radius:var(--r-surface);-webkit-tap-highlight-color:transparent;background:0 0;border:0;width:min(380px,92%);padding:0;display:block}.flask-button:active .flask{transform:scale(.97)rotate(-1deg)}.flask{width:100%;height:auto;transition:transform .4s cubic-bezier(.3,1.6,.5,1);display:block;overflow:visible}.flask-button.paused *{animation-play-state:paused!important}.flask-outline{fill:none;stroke:color-mix(in srgb, var(--ink) 70%, transparent);stroke-width:3.5px;stroke-linecap:round;stroke-linejoin:round}.flask-lip{fill:var(--glass);stroke:color-mix(in srgb, var(--ink) 70%, transparent);stroke-width:3.5px}.shadow-core{stop-color:var(--lightningcss-light,#13212c42)var(--lightningcss-dark,#000000a6)}.glass-hi{stop-color:var(--lightningcss-light,#ffffff80)var(--lightningcss-dark,#fff3)}.glass-mid{stop-color:var(--lightningcss-light,#ffffff1f)var(--lightningcss-dark,#ffffff08)}.glass-edge{stop-color:var(--lightningcss-light,#9fb3c859)var(--lightningcss-dark,#9fb3c838)}.flask-tilt,.flask-kick,.flask-fill{transform-box:view-box;transform-origin:160px 290px}.flask-tilt{transform:rotate(var(--tilt,0deg));transition:transform .9s cubic-bezier(.3,1.4,.5,1)}.flask-fill{animation:1.8s cubic-bezier(.25,.8,.3,1) .2s both fill}@keyframes fill{0%{transform:translateY(190px)}}.flask-wave{animation:3.2s linear infinite slosh}.flask-back-tint{fill:#7b95ff}.flask-wave.back{opacity:.35;animation-duration:4.6s;animation-direction:reverse}@keyframes slosh{to{transform:translate(160px)}}.flask-bubble{fill:#fff;opacity:0;animation:4s ease-in infinite both bubble}@keyframes bubble{0%{opacity:0;transform:translateY(0)}15%{opacity:.8}55%{opacity:.8;transform:translateY(-110px)}62%,to{opacity:0;transform:translateY(-120px)}}.flask-droplet{fill:#7b95ff;opacity:0;transition:fill .9s ease-out;animation:5s ease-in-out infinite both drift}@keyframes drift{0%,to{opacity:0;transform:translateY(14px)}40%,70%{opacity:.9}85%{transform:translateY(-10px)}}.reacting .flask-droplet{fill:#c4a6ff;transition-duration:.25s}.flask-burst{fill:#fff;opacity:0}.reacting .flask-kick{animation:1.1s cubic-bezier(.3,1.5,.5,1) kick}@keyframes kick{20%{transform:rotate(9deg)translateY(-6px)}45%{transform:rotate(-6deg)}70%{transform:rotate(3deg)}}.fizzing .flask-burst{animation:1s ease-out both fizz}@keyframes fizz{0%{opacity:0;transform:translateY(0)}20%{opacity:.95}to{opacity:0;transform:translateY(-200px)}}.reacting .flask-back-tint{animation:2.4s ease-out flush-back}@keyframes flush-back{15%,45%{fill:#c4a6ff}}.reacting .liq-light{animation:2.4s ease-out flush-light}.reacting .liq-mid{animation:2.4s ease-out flush-mid}.reacting .liq-deep{animation:2.4s ease-out flush-deep}@keyframes flush-light{15%,45%{stop-color:#c4a6ff}}@keyframes flush-mid{15%,45%{stop-color:#7b3fe4}}@keyframes flush-deep{15%,45%{stop-color:#2e0f6e}}.stats{margin:var(--gap) 0 0;border-top:1px solid var(--rule);grid-template-columns:repeat(4,1fr);display:grid}.stats>div{padding:22px 20px 0 0}.stats dt,.mini-stats dt{font-family:var(--font-display);letter-spacing:-.03em;color:var(--ink);font-size:clamp(2rem,3.6vw,2.8rem);font-weight:750;line-height:1}.stats dd,.mini-stats dd{color:var(--ink-faint);max-width:24ch;margin:.5em 0 0;font-size:.9rem}@media (width<=760px){.stats{grid-template-columns:1fr 1fr}}.showcase-list{gap:calc(var(--gap) * 2);display:grid}.showcase{gap:calc(var(--gap) * 1.1);grid-template-columns:1.2fr 1fr;align-items:center;scroll-margin-top:90px;display:grid}.showcase.flip .showcase-media{order:2}.showcase-title{letter-spacing:-.03em;margin-top:.4em;font-size:clamp(2rem,4vw,3rem)}.showcase-tagline{font-family:var(--font-display);color:var(--blue);margin:.2em 0 1em;font-size:1.2rem;font-weight:500}.frame{border-radius:var(--r-surface);border:1px solid var(--rule);background:var(--glass);box-shadow:var(--shadow);margin:0;overflow:hidden}.frame img{width:100%;height:auto;display:block}.frame-bar{border-bottom:1px solid var(--rule);gap:6px;padding:11px 14px;display:flex}.frame-bar i{background:var(--rule);border-radius:50%;width:10px;height:10px}.mini-stats{flex-wrap:wrap;gap:12px 36px;margin:1.4em 0 0;display:flex}.mini-stats dt{font-size:1.7rem}.points{gap:.75em;margin:1.5em 0 0;padding:0;font-size:.96rem;list-style:none;display:grid}.points li{padding-left:20px;position:relative}.points li:before{content:"";background:var(--blue);border-radius:50%;width:8px;height:8px;position:absolute;top:.55em;left:0}.gallery{overscroll-behavior-x:contain;scroll-snap-type:x mandatory;scrollbar-width:thin;scrollbar-color:var(--rule) transparent;order:3;grid-column:1/-1;grid-auto-columns:minmax(240px,calc(33.3333% - 9.33333px));grid-auto-flow:column;gap:14px;min-width:0;padding:4px 2px 12px;display:grid;overflow-x:auto}.gallery-item{scroll-snap-align:start}.gallery img{border-radius:var(--r-surface);border:1px solid var(--rule);width:100%;height:auto;display:block}@media (width<=860px){.showcase{grid-template-columns:1fr}.showcase.flip .showcase-media{order:0}}.services{gap:0 var(--gap);grid-template-columns:repeat(2,1fr);margin:0;display:grid}.services>div{border-top:1px solid var(--rule);padding:1.4em 0}.services dt{font-family:var(--font-display);color:var(--ink);letter-spacing:-.01em;font-size:1.3rem;font-weight:700}.services dd{max-width:48ch;margin:.5em 0 0}@media (width<=700px){.services{grid-template-columns:1fr}}.industries{flex-wrap:wrap;gap:8px;margin:2em 0 0;padding:0;list-style:none;display:flex}.industries li{color:var(--ink);background:var(--glass);border:1px solid var(--rule);border-radius:999px;padding:6px 16px;font-size:.9rem}.split{gap:calc(var(--gap) * 1.2);grid-template-columns:1fr 1.2fr;align-items:start;display:grid}.split h2+p{margin-top:.9em}@media (width<=860px){.split{grid-template-columns:1fr}}.timeline{border-left:2px solid var(--rule);flex-direction:column;gap:20px;margin:0;padding:0;list-style:none;display:flex}.timeline li{grid-template-columns:150px 1fr;gap:12px;padding-left:24px;display:grid;position:relative}.timeline li:before{content:"";background:var(--bench);border:2px solid var(--blue);border-radius:50%;width:12px;height:12px;position:absolute;top:.45em;left:-7px}.timeline li:first-child:before{background:var(--blue)}.timeline .period{white-space:nowrap;padding-top:.15em;font-size:.8rem}.timeline .dim{font-size:.92rem;display:block}@media (width<=640px){.timeline li{grid-template-columns:1fr;gap:2px}}.cta-panel{margin-top:calc(var(--gap) * 2);padding:calc(var(--gap) * 1.4) calc(var(--gap) * 1.2);border-radius:var(--r-surface);color:#dfe6ff;background:#172f9e}.cta-panel h2{color:#fff;max-width:20ch}.cta-panel p{color:#c9d3ff;margin-top:.8em}.cta-panel .btn{color:#172f9e;background:#fff;border-color:#fff}.cta-panel .btn:hover{background:#e3eaf9}.cta-panel .btn.ghost{color:#fff;background:0 0;border-color:#fff6}.cta-panel .btn.ghost:hover{border-color:#fff}.roles{margin:0;padding:0;list-style:none}.role{gap:var(--gap);border-top:1px solid var(--rule);grid-template-columns:220px 1fr;padding:1.8em 0;display:grid}.role-meta{align-content:start;gap:.4em;font-size:.88rem;display:grid}.role-meta .period{color:var(--blue)}.role-field{margin-top:.3em;font-size:.95rem}.role-body ul,.plain-list{gap:.5em;margin:1em 0 0;padding-left:1.1em;display:grid}.plain-list{font-size:.95rem}.role-body li::marker{color:var(--blue)}.plain-list li::marker{color:var(--blue)}@media (width<=700px){.role{grid-template-columns:1fr;gap:.6em}}.lang-row{flex-wrap:wrap;gap:10px 26px;margin-top:1.8em;font-size:.9rem;display:flex}.lang-row b{color:var(--blue);font-weight:500}.filters{flex-wrap:wrap;gap:8px;margin-top:1.4em;display:flex}.filter{border:1px solid var(--rule);background:var(--glass);min-height:38px;color:var(--ink-soft);font:inherit;cursor:pointer;border-radius:999px;align-items:center;gap:8px;padding:5px 12px 5px 6px;font-size:.85rem;transition:border-color .15s,background .15s,transform .15s;display:inline-flex}.filter .count{font-family:var(--font-mono);font-size:.78rem}.filter[aria-pressed=true]{border-color:var(--ink);color:var(--ink)}.filter:active{transform:scale(.96)}@media (hover:hover){.filter:hover{border-color:var(--ink-faint)}}.filtering .project-card{view-transition-name:match-element}.filtering .site-header{view-transition-name:none}.filtering::view-transition-group(*){animation-duration:.4s;animation-timing-function:cubic-bezier(.2,.7,.2,1)}.filtering::view-transition-old(root){animation:none}.filtering::view-transition-new(root){animation:none}.work-list{grid-template-columns:repeat(auto-fit,minmax(340px,1fr))}@media (width<=420px){.work-list{grid-template-columns:1fr}}.contact-section{padding-bottom:calc(var(--gap) * 1.6)}.hero+.section{padding-top:calc(var(--gap) * 2.4)}.frame-link{width:100%;display:block}.frame-link.zoom{text-align:inherit;cursor:zoom-in;background:0 0;border:0;padding:0}.frame-link{border-radius:var(--r-surface);text-decoration:none}.frame-link .frame{transition:transform .35s cubic-bezier(.2,.7,.2,1),box-shadow .35s}.frame-link img{transition:transform .6s cubic-bezier(.2,.7,.2,1)}@media (hover:hover){.frame-link:hover .frame{box-shadow:var(--shadow), 0 30px 60px -30px color-mix(in srgb, var(--blue) 45%, transparent);transform:translateY(-6px)}.frame-link:hover img{transform:scale(1.025)}.gallery-item:hover img{transform:scale(1.05)}.flask-button:hover .flask{transform:translateY(-4px)}}.frame-link:active .frame{transform:translateY(-2px)scale(.99)}.showcase-list.detailed .showcase{align-items:start}@media (width>=861px){.showcase-list.detailed .showcase-media{align-self:stretch}.showcase-list.detailed .frame-link{position:sticky;top:96px}}.gallery-item{border:1px solid var(--rule);border-radius:var(--r-surface);cursor:zoom-in;background:0 0;padding:0;display:block;overflow:hidden}.gallery-item img{border:0;border-radius:0;transition:transform .5s cubic-bezier(.2,.7,.2,1)}.gallery-item:active{transform:scale(.98)}.lightbox{border:1px solid var(--rule);border-radius:var(--r-surface);background:var(--glass);opacity:1;width:min(1100px,94vw);transition:opacity .25s, transform .3s cubic-bezier(.2, .7, .2, 1), overlay .3s allow-discrete, display .3s allow-discrete;padding:0;overflow:hidden;transform:none}.lightbox img{width:100%;height:auto;display:block}.lightbox::backdrop{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);opacity:1;transition:opacity .25s, overlay .3s allow-discrete, display .3s allow-discrete;background:#050a14b3}.lightbox:not([open]){opacity:0;transform:scale(.96)}.lightbox:not([open])::backdrop{opacity:0}@starting-style{.lightbox[open]{opacity:0;transform:scale(.96)}.lightbox[open]::backdrop{opacity:0}}.lightbox-stage{touch-action:pan-y;position:relative;overflow:hidden}.lightbox-stage img{-webkit-user-select:none;user-select:none;animation:.35s cubic-bezier(.2,.7,.2,1) slide-in}.lightbox-stage img.from-left{--from:-40px}@keyframes slide-in{0%{opacity:0;transform:translateX(var(--from,40px))}}.lightbox-nav{color:#fff;cursor:pointer;background:#050a148c;border:0;border-radius:50%;place-items:center;width:44px;height:44px;transition:background .15s,transform .15s;display:grid;position:absolute;top:50%;translate:0 -50%}.lightbox-nav.prev{left:12px}.lightbox-nav.next{right:12px}.lightbox-nav:active{transform:scale(.92)}@media (hover:hover){.lightbox-nav:hover{background:#050a14d9}}.lightbox-bar{color:var(--ink-soft);justify-content:space-between;align-items:center;gap:16px;padding:10px 12px 10px 18px;font-size:.92rem;display:flex}.contact-layout{gap:calc(var(--gap) * 1.2);margin-top:calc(var(--gap) * 1.4);grid-template-columns:1.5fr 1fr;align-items:start;display:grid}.contact-email{font-family:var(--font-display);letter-spacing:-.03em;color:var(--ink);-webkit-text-decoration-color:color-mix(in srgb, var(--blue) 40%, transparent);text-decoration-color:color-mix(in srgb, var(--blue) 40%, transparent);text-underline-offset:8px;margin-top:.3em;font-size:clamp(1.25rem,3vw,2.2rem);font-weight:700;text-decoration-thickness:3px;display:inline-block}.contact-email:hover{color:var(--blue)}.contact-notes p{margin-top:1.2em;font-size:.9rem}@media (width<=760px){.contact-layout{grid-template-columns:1fr}}.featured-work{grid-template-rows:auto auto;grid-template-columns:1.35fr 1fr;gap:18px;display:grid}.featured-work>:first-child{background:radial-gradient(120% 80% at 100% 0%, var(--tint), transparent 60%), var(--glass);grid-row:span 2;padding:clamp(24px,3vw,36px)}.featured-work>:first-child h3{letter-spacing:-.02em;max-width:20ch;font-size:clamp(1.5rem,2.6vw,2rem)}.featured-work>:first-child>p:not(.period){max-width:44ch;font-size:1.05rem}@media (width<=860px){.featured-work{grid-template-columns:1fr}.featured-work>:first-child{grid-row:auto}}.skill-groups{gap:0 var(--gap);grid-template-columns:repeat(3,1fr);display:grid}.skill-groups>div{border-top:1px solid var(--rule);padding:1.3em 0 1.6em}@media (width<=900px){.skill-groups{grid-template-columns:1fr 1fr}}@media (width<=560px){.skill-groups{grid-template-columns:1fr}}.showcase-title a{color:inherit;background:linear-gradient(var(--blue), var(--blue)) left 100% / 0 3px no-repeat;text-decoration:none;transition:background-size .3s cubic-bezier(.2,.7,.2,1),color .15s}.showcase-title a:hover,.showcase-title a:focus-visible{color:var(--blue);background-size:100% 3px}
