@font-face{font-family:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/archivo-vietnamese-wght-normal.XAtsl5Q_.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/archivo-latin-ext-wght-normal.C4zznr8T.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/archivo-latin-wght-normal.E0tuGl4L.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-cyrillic-ext-wght-normal.BOeWTOD4.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-cyrillic-wght-normal.DqGufNeO.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-greek-ext-wght-normal.DlzME5K_.woff2) format("woff2-variations");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-greek-wght-normal.CkhJZR-_.woff2) format("woff2-variations");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-vietnamese-wght-normal.CBcvBZtf.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-latin-ext-wght-normal.DO1Apj_S.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-latin-wght-normal.Dx4kXJAl.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter Tight Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-tight-cyrillic-ext-wght-normal.okcGN4Nq.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Tight Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-tight-cyrillic-wght-normal.BS41q_Tv.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter Tight Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-tight-greek-ext-wght-normal.DQgQPNk4.woff2) format("woff2-variations");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter Tight Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-tight-greek-wght-normal.sS1B39LI.woff2) format("woff2-variations");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter Tight Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-tight-vietnamese-wght-normal.TKKdAiBA.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Tight Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-tight-latin-ext-wght-normal.B4u9PlvR.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Inter Tight Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-tight-latin-wght-normal.DX-nOvPD.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-cyrillic-ext-400-normal.xuaO2J-f.woff2) format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-ext-400-normal.DMdlQ8Kv.woff) format("woff");unicode-range:U+0460-052F,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(/_astro/ibm-plex-mono-cyrillic-400-normal.BSMlKf0J.woff2) format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-400-normal.CEL4l2ZJ.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-vietnamese-400-normal.BulugwFq.woff2) format("woff2"),url(/_astro/ibm-plex-mono-vietnamese-400-normal.DDuiU_S-.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-latin-ext-400-normal.BmRBH3aV.woff2) format("woff2"),url(/_astro/ibm-plex-mono-latin-ext-400-normal.D3D2R8hC.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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(/_astro/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2) format("woff2"),url(/_astro/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-cyrillic-ext-500-normal.BqneJy0T.woff2) format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-ext-500-normal.BIfNGwUT.woff) format("woff");unicode-range:U+0460-052F,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(/_astro/ibm-plex-mono-cyrillic-500-normal.Bq9vWWag.woff2) format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-500-normal.Ael50iVv.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-vietnamese-500-normal.DZ4AoWbu.woff2) format("woff2"),url(/_astro/ibm-plex-mono-vietnamese-500-normal.C8zxqsMH.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-latin-ext-500-normal.CAhNIIs5.woff2) format("woff2"),url(/_astro/ibm-plex-mono-latin-ext-500-normal.CZ70TYgx.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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(/_astro/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2) format("woff2"),url(/_astro/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--font-brand: "Inter Variable", "Inter Tight Variable", system-ui, sans-serif}:root,:root[data-theme=dark]{color-scheme:dark;--ground: #000000;--surface: #121212;--ink: #ffffff;--ink-muted: #8a8a8a;--signal: #ff213b;--glow: #9fbfe8;--line: color-mix(in srgb, var(--ink) 12%, transparent)}:root[data-theme=light]{color-scheme:light;--ground: #ffffff;--surface: #f6f6f6;--ink: #000000;--ink-muted: #6b6b6b;--signal: #cc0a2e;--glow: #3a67a8;--line: color-mix(in srgb, var(--ink) 12%, transparent)}:root{--font-display: "Archivo Variable", system-ui, sans-serif;--font-text: "Inter Variable", system-ui, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, monospace;--display-weight: 660;--display-tracking: -.025em;--display-leading: .98;--display-case: uppercase;--display-scale: .75;--text-size: 1rem;--text-leading: 1.6;--mono-size: .6875rem;--mono-tracking: .14em}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{background:var(--ground);color:var(--ink);font-family:var(--font-text);font-size:var(--text-size, 1rem);line-height:var(--text-leading, 1.6);-webkit-font-smoothing:antialiased;min-height:100svh}img,video,svg{display:block;max-width:100%}button{font:inherit;background:none;border:none;color:inherit;cursor:pointer}a{color:inherit;text-decoration:none}ul,ol{list-style:none}::selection{background:color-mix(in srgb,var(--signal) 30%,transparent)}:focus-visible{outline:2px solid var(--glow);outline-offset:3px;border-radius:2px}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}html{scroll-behavior:auto}}.mono{font-family:var(--font-mono);font-size:var(--mono-size, .6875rem);font-weight:400;letter-spacing:var(--mono-tracking, .14em);text-transform:uppercase;color:var(--ink-muted)}.display{font-family:var(--font-display);font-weight:var(--display-weight, 640);line-height:var(--display-leading, .98);letter-spacing:var(--display-tracking, -.025em);text-wrap:balance}.hero h1,.page-head h1,.project-opener h1,.next-title,.skills-list li{text-transform:var(--display-case, uppercase)}.text-link{color:var(--signal)}.text-link,.prose a,.footer-socials a,.ledger a{background-image:linear-gradient(currentColor,currentColor);background-size:0% 1px;background-repeat:no-repeat;background-position:0 100%;transition:background-size .3s cubic-bezier(.25,.8,.25,1),color .25s ease-out}.text-link:hover,.prose a:hover,.footer-socials a:hover,.ledger a:hover{background-size:100% 1px}.wrap{padding-inline:clamp(1.25rem,5vw,4.5rem);max-width:100rem;margin-inline:auto}.wrap.is-tight{padding-inline:clamp(.75rem,1.5vw,1.25rem);max-width:140rem}.section{display:grid;gap:2rem;padding-block:clamp(4rem,10vh,8.5rem);border-top:1px solid var(--line)}@media(min-width:768px){.section{grid-template-columns:220px 1fr}.section-stack{grid-template-columns:1fr}}.section-label{padding-top:.4em}.section-compact{padding-block:clamp(1.75rem,3.5vh,3rem);gap:1.25rem}.section-compact+.section-compact{margin-top:clamp(1.75rem,3.5vh,3rem)}.section-compact .ledger{table-layout:fixed}.section-compact .ledger td{padding:.6rem 1.5rem .6rem 0}.section-compact .ledger td:first-child{width:47%}.section-compact .ledger td:last-child{width:12%;padding-right:0;text-align:right}@media(hover:hover)and (pointer:fine){.section-compact .ledger .roll{display:inline-block;overflow:hidden;vertical-align:top;max-width:100%}.section-compact .ledger .roll-in{display:inline-block;position:relative;white-space:nowrap;transition:transform .47s cubic-bezier(.33,1,.68,1)}.section-compact .ledger .roll-in:after{content:attr(data-text);position:absolute;left:0;top:100%}.section-compact .ledger tr:hover .roll-in{transform:translateY(-100%)}}@media(prefers-reduced-motion:reduce){.section-compact .ledger .roll-in{transition:none}}.page-head{padding-block:clamp(4rem,12vh,8rem) clamp(2.5rem,6vh,4.5rem);display:grid;gap:1.25rem}.page-head h1{font-size:calc(clamp(2.75rem,8vw,6.5rem) * var(--display-scale, 1))}.photo-blurb{max-width:52ch;font-size:1.0625rem;line-height:1.55;color:color-mix(in srgb,var(--ink) 82%,var(--ground))}.grain{position:fixed;inset:-60%;z-index:60;pointer-events:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='240' height='240' filter='url(%23n)'/%3E%3C/svg%3E");opacity:.04;animation:grain-shift 1.4s steps(6) infinite;transition:opacity .22s ease-out}html.grain-flare .grain{opacity:.09}@keyframes grain-shift{0%{transform:translate(0)}20%{transform:translate(-2%,1%)}40%{transform:translate(1%,-2%)}60%{transform:translate(-1%,2%)}80%{transform:translate(2%,1%)}to{transform:translate(0)}}@media(prefers-reduced-motion:reduce){.grain{animation:none}}.skip-link{position:fixed;top:-100%;left:1rem;z-index:100;background:var(--surface);color:var(--ink);padding:.85rem 1.1rem;border-radius:4px;transition:top .2s ease-out}.skip-link:focus{top:1rem}.site-header{position:relative;z-index:50;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:.75rem;padding-block:1.6rem;padding-inline:max(clamp(.75rem,1.5vw,1.25rem),calc((100% - 140rem)/2));background:color-mix(in srgb,var(--ground) 80%,transparent);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}.site-header .nav{justify-self:start}.site-header .theme-toggle{justify-self:end}@media(max-width:640px){.site-header{gap:.3rem;padding-inline:1rem}.site-header .nav{gap:.1rem}.site-header .nav a{padding:.45rem .5rem}}.wordmark{justify-self:center;font-family:var(--font-brand);font-size:clamp(1rem,1.5vw,1.3rem);font-weight:550;letter-spacing:.14em;text-transform:uppercase;color:var(--ink)}.mag-char{display:inline-block;transition:transform .22s cubic-bezier(.22,1,.36,1),filter .22s ease-out,text-shadow .22s ease-out}.nav{display:flex;gap:.25rem}.nav a{display:inline-block;padding:.5rem .85rem;border-radius:999px;font-family:var(--font-brand);font-size:.75rem;font-weight:450;letter-spacing:.17em;text-transform:uppercase;color:var(--ink-muted);transition:color .3s ease,background-color .3s ease,translate .45s cubic-bezier(.3,.7,0,1),scale .45s cubic-bezier(.3,.7,0,1)}.nav a:not([aria-current=page]):hover{color:var(--ink);background:color-mix(in srgb,var(--ink) 7%,transparent);translate:0 -2px;scale:1.04}.nav a:active{translate:0 0;scale:.94;transition-duration:.3s,.3s,.15s,.15s}.nav a[aria-current=page]{color:var(--ink);font-weight:600;background:color-mix(in srgb,var(--ink) 10%,transparent)}.theme-toggle{min-width:2.5rem;min-height:2.5rem;border-radius:999px;display:grid;place-items:center;font-size:1rem;color:var(--ink-muted);transition:color .25s ease-out}.theme-toggle:hover{color:var(--ink)}.theme-toggle span{display:inline-block;transition:rotate .5s cubic-bezier(.3,.7,0,1),scale .15s ease-out}.theme-toggle:hover span{rotate:180deg}.theme-toggle:active span{scale:.8}.hero{position:relative;isolation:isolate;min-height:calc(100svh - 4rem);display:flex;flex-direction:column;justify-content:center;gap:1.75rem;overflow:clip}.hero-orb{position:absolute;z-index:-1;top:50%;right:-8vmin;width:min(58vmin,640px);aspect-ratio:1;border-radius:50%;transform:translateY(-50%);animation:orb-drift 11s ease-in-out infinite alternate}.hero-orb:before{content:"";position:absolute;inset:0;border-radius:50%;background:radial-gradient(circle at 42% 38%,color-mix(in srgb,var(--ink) 80%,var(--signal)) 0%,transparent 30%),radial-gradient(circle at 45% 42%,color-mix(in srgb,var(--signal) 62%,transparent) 8%,color-mix(in srgb,var(--signal) 20%,transparent) 44%,transparent 68%),radial-gradient(circle at 62% 68%,color-mix(in srgb,var(--glow) 16%,transparent) 0%,transparent 60%);filter:blur(28px)}.hero-orb:after{content:"";position:absolute;inset:0;border-radius:50%;background-image:radial-gradient(circle,color-mix(in srgb,var(--ink) 55%,transparent) 1px,transparent 1.4px);background-size:8px 8px;-webkit-mask-image:radial-gradient(circle at 45% 42%,black 15%,transparent 70%);mask-image:radial-gradient(circle at 45% 42%,black 15%,transparent 70%);opacity:.22;animation:dots-drift 80s linear infinite}@keyframes dots-drift{to{background-position:0 -320px}}@keyframes orb-drift{0%{transform:translateY(-50%) scale(1)}to{transform:translate(-4%,-46%) scale(1.06)}}.hero h1{font-size:calc(clamp(3rem,10vw,8.5rem) * var(--display-scale, 1));max-width:12ch;position:relative;z-index:1}.hero-sub{color:var(--ink-muted);font-size:clamp(1.05rem,1.5vw,1.3rem);max-width:38ch;text-wrap:pretty;position:relative;z-index:1}.works-grid{display:grid;container-type:inline-size;column-gap:.8%;row-gap:clamp(10px,.8vw,14px)}.card{position:relative;display:block}.card-media{position:relative;aspect-ratio:16 / 10;border-radius:6px;overflow:hidden;background:var(--surface);border:1px solid var(--line);transition:translate .35s cubic-bezier(.25,.8,.25,1),box-shadow .35s ease-out,border-color .3s ease-out}.card-media video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}@media(prefers-reduced-motion:no-preference){html.js .card-media video:not([poster]){opacity:0;transition:opacity 1.2s ease}html.js .card-media video:not([poster]).is-playing{opacity:1}}.card-media.has-video:before,.card-media.has-video:after{display:none}.card-media:before{content:"";position:absolute;inset:0;z-index:1;background-image:radial-gradient(circle,color-mix(in srgb,var(--card-glow, var(--signal)) 60%,transparent) 1px,transparent 1.4px);background-size:7px 7px;-webkit-mask-image:radial-gradient(ellipse 90% 70% at 50% 65%,black,transparent 72%);mask-image:radial-gradient(ellipse 90% 70% at 50% 65%,black,transparent 72%);opacity:.4;transition:opacity .4s ease-out}.card:hover .card-media:before,.card:focus-visible .card-media:before{opacity:.85}.card-media{animation:media-breathe 9s ease-in-out infinite}.works-grid>:nth-child(2n) .card-media{animation-delay:-3s}.works-grid>:nth-child(3n) .card-media{animation-delay:-6s}@keyframes media-breathe{0%,to{filter:brightness(1)}50%{filter:brightness(1.07)}}.card-media:after{content:"";position:absolute;inset:0;background:radial-gradient(ellipse 90% 70% at 50% 65%,color-mix(in srgb,var(--card-glow, var(--signal)) 30%,transparent),transparent 70%);opacity:.75;transition:opacity .4s ease-out,transform .7s ease-out}.card:hover .card-media:after,.card:focus-visible .card-media:after{opacity:1;transform:scale(1.06)}.card:hover .card-media,.card:focus-visible .card-media{translate:0 -3px;border-color:color-mix(in srgb,var(--ink) 25%,transparent);box-shadow:0 6px 18px -12px color-mix(in srgb,var(--card-glow, var(--signal)) 35%,transparent)}.card:active .card-media{translate:0 -1px;transition-duration:.12s}.card-index{transition:color .8s ease-out,text-shadow .8s ease-out}.card-meta{position:absolute;inset:auto 0 0;z-index:2;padding:2.6rem 1.1rem .95rem;background:linear-gradient(transparent,#0009);translate:0 1.75rem;transition:translate .38s cubic-bezier(.25,.8,.25,1)}.card:hover .card-meta,.card:focus-visible .card-meta{translate:0 0}.card-index{color:#f2efea}.card-index:after{content:"→";display:inline-block;margin-left:.75em;opacity:0;translate:-4px 0;transition:opacity .25s ease-out,translate .25s ease-out}.card:hover .card-index:after,.card:focus-visible .card-index:after{opacity:1;translate:0 0}.card-desc{color:#f2efead9;font-size:.9rem;margin-top:.3rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;opacity:0;transition:opacity .3s ease-out 60ms}.card:hover .card-desc,.card:focus-visible .card-desc{opacity:1}.works-grid .card-media{aspect-ratio:auto;width:100%;height:85cqw}@media(min-width:768px){.works-grid{grid-template-columns:repeat(2,1fr)}.works-grid .card.is-wide{grid-column:span 2}.works-grid .card-media{height:calc(99.2cqw * 2 / 3 * .85)}}@media(min-width:1024px){.works-grid{grid-template-columns:repeat(4,1fr)}.works-grid .card-media{height:calc(97.6cqw / 3 * .85)}}.works-grid.is-featured .card.is-wide{grid-column:auto}.works-grid.is-featured .card-media{aspect-ratio:16 / 9;height:auto}@media(min-width:768px){.works-grid.is-featured{grid-template-columns:repeat(2,1fr)}}@media(min-width:1024px){.works-grid.is-featured{grid-template-columns:repeat(2,1fr)}}.photo-strips{display:grid;gap:clamp(10px,.8vw,14px)}.photo-strip{position:relative;display:block;overflow:hidden}.photo-strip img{display:block;width:100%;aspect-ratio:16 / 10;object-fit:cover;transition:filter .45s ease-out,scale .9s cubic-bezier(.25,.8,.25,1)}@media(min-width:640px){.photo-strip img{aspect-ratio:2.6 / 1}}@media(min-width:1024px){.photo-strip img{aspect-ratio:3.2 / 1}}.photo-strip:hover img,.photo-strip:focus-visible img{filter:brightness(.7);scale:1.015}.strip-label{position:absolute;left:max(clamp(.75rem,1.5vw,1.25rem),calc((100% - 140rem)/2));bottom:.9rem;z-index:1;color:#f2efea;text-shadow:0 1px 14px rgba(0,0,0,.65);opacity:0;translate:0 5px;transition:opacity .35s ease-out,translate .45s cubic-bezier(.3,.7,0,1)}.photo-strip:hover .strip-label,.photo-strip:focus-visible .strip-label{opacity:1;translate:0 0}.photo-back{color:var(--ink)}.photo-back:hover{color:var(--signal)}.prose>figure>img{translate:0 0;transition:translate .45s cubic-bezier(.3,.7,0,1),filter .4s ease-out}.prose>figure>img:not(.is-lifted):hover{translate:0 -4px;filter:brightness(1.05)}.photo-lightbox-backdrop{position:fixed;inset:0;z-index:58;background:color-mix(in srgb,var(--ground) 78%,transparent);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);opacity:0;pointer-events:none;transition:opacity .38s ease-out}.photo-lightbox-backdrop.on{opacity:1;pointer-events:auto}img.is-lifted{position:relative;z-index:59;transition:transform .46s cubic-bezier(.25,.8,.25,1)!important;translate:0 0!important;filter:none!important;will-change:transform}.photo-stack{columns:1;column-gap:.8%}@media(min-width:768px){.photo-stack{columns:2}}.photo-stack img{width:100%;margin-bottom:clamp(.5rem,.8vw,.75rem);border-radius:6px;border:1px solid var(--line);break-inside:avoid}.skills-list{display:grid;gap:.4rem}.skills-list li{font-family:var(--font-display);font-weight:580;letter-spacing:-.015em;line-height:1.15;font-size:calc(clamp(1.75rem,4vw,3.25rem) * var(--display-scale, 1));color:color-mix(in srgb,var(--ink) 20%,transparent);transition:color .7s ease-out,translate .4s cubic-bezier(.25,.8,.25,1),text-shadow .7s ease-out}.skills-list li.lit{color:var(--ink)}.skills-list li:hover{color:var(--ink);translate:.35ch 0;transition-duration:.15s,.4s,.15s}.skills-list a{display:inline-block}.skills-list a:after{content:"→";display:inline-block;margin-left:.4em;font-family:var(--font-mono);font-size:.5em;vertical-align:.3em;opacity:0;translate:-6px 0;transition:opacity .25s ease-out,translate .25s ease-out}.skills-list li:hover a:after,.skills-list a:focus-visible:after{opacity:1;translate:0 0}.recognition{display:flex;flex-wrap:wrap;gap:.75rem 1.25rem;align-items:baseline;padding-top:.4em}.recognition .sep{color:color-mix(in srgb,var(--ink-muted) 45%,transparent)}.recognition a{color:var(--ink);background-image:linear-gradient(currentColor,currentColor);background-size:0% 1px;background-repeat:no-repeat;background-position:0 100%;transition:background-size .3s cubic-bezier(.25,.8,.25,1),color .25s ease-out}.recognition a:hover{color:var(--signal);background-size:100% 1px}@media(prefers-reduced-motion:no-preference){html.js [data-typed]{opacity:0}html.js [data-typed].typing{opacity:1}html.js [data-typed].typing .tw-word{display:inline-block;animation:tw-word-in .5s cubic-bezier(.2,.7,.2,1) both}}@keyframes tw-word-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.ledger-scroll{overflow-x:auto}.ledger{width:100%;min-width:540px;border-collapse:collapse}.ledger th{text-align:left;padding:0 1.5rem .8rem 0;border-bottom:1px solid var(--line);font-weight:400}.ledger td{padding:1rem 1.5rem 1rem 0;border-bottom:1px solid var(--line);font-size:.95rem;vertical-align:top}.ledger td.muted{color:var(--ink-muted)}.timeline{--tl-year: clamp(4rem, 9vw, 5.25rem);--tl-gap: clamp(.9rem, 2vw, 1.5rem)}.timeline-entry{position:relative;display:grid;grid-template-columns:var(--tl-year) 11px 1fr;column-gap:var(--tl-gap);padding-block:1.15rem}.timeline-entry:before{content:"";position:absolute;left:calc(var(--tl-year) + var(--tl-gap) + 5px);top:0;bottom:0;width:1px;background:var(--line)}.timeline-entry:first-child:before{top:1.65rem}.timeline-entry:last-child:before{bottom:calc(100% - 1.65rem)}.timeline-year{text-align:right;padding-top:.35em}.timeline-node{width:11px;height:11px;border-radius:50%;border:1.5px solid var(--ink-muted);background:var(--ground);margin-top:.3rem;z-index:1}.is-now .timeline-node{position:relative;border-color:var(--signal);background:var(--signal);box-shadow:0 0 14px color-mix(in srgb,var(--signal) 55%,transparent)}.is-now .timeline-node:after{content:"";position:absolute;inset:-1.5px;border-radius:50%;border:.5px solid var(--signal);opacity:0;animation:now-ping 2.8s cubic-bezier(.25,.8,.25,1) infinite}@keyframes now-ping{0%{transform:scale(1);opacity:.65}70%,to{transform:scale(3.4);opacity:0}}.timeline-body{display:grid;gap:.15rem}.timeline-org{font-size:1.0625rem;font-weight:500;line-height:1.35;color:var(--ink)}.timeline-org a{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:color-mix(in srgb,var(--ink) 25%,transparent);transition:text-decoration-color .25s ease-out}.timeline-org a:hover{text-decoration-color:var(--signal)}.timeline-role{font-size:.95rem;color:var(--ink-muted)}.timeline-place{margin-top:.4rem;color:color-mix(in srgb,var(--ink-muted) 75%,transparent)}@media(min-width:1024px){.timeline.is-horizontal{position:relative;height:12rem;margin-top:.75rem;margin-inline:5.25rem}.timeline.is-horizontal:before{content:"";position:absolute;left:0;right:0;top:2.1rem;height:1px;background:var(--line)}.is-horizontal .timeline-entry{position:absolute;left:var(--x);top:0;padding:0;display:block}.is-horizontal .timeline-entry:before{display:none}.is-horizontal .timeline-node{position:absolute;left:0;top:2.1rem;transform:translate(-50%,-50%);margin:0}.is-horizontal .timeline-year{position:absolute;top:0;left:0;translate:-50% 0;white-space:nowrap;text-align:center;padding:0}.is-horizontal .timeline-body{position:absolute;top:3.4rem;left:0;translate:-50% 0;width:max-content;max-width:10.5rem;text-align:center}}.ledger a{background-image:none;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:color-mix(in srgb,var(--ink) 30%,transparent);transition:text-decoration-color .25s ease-out,color .25s ease-out}.ledger a:hover{text-decoration-color:var(--signal)}.ledger a[target=_blank]:after{content:"↗";font-family:var(--font-mono);font-size:.72em;margin-left:.35em;color:var(--ink-muted)}.ledger tbody tr{transition:background-color .2s ease-out}.ledger tbody tr:hover{background:color-mix(in srgb,var(--ink) 4%,transparent)}.ledger a:hover{color:var(--signal)}.project-opener{position:relative;isolation:isolate;padding-block:clamp(4rem,12vh,8rem) 0;display:grid;gap:1.25rem}.project-opener h1{font-size:calc(clamp(3rem,9vw,7.5rem) * var(--display-scale, 1))}.opener-desc{color:var(--ink-muted);font-size:clamp(1.05rem,1.5vw,1.25rem);max-width:48ch}.opener-media{aspect-ratio:21 / 9;margin-top:clamp(1.5rem,4vh,3rem)}.spec{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:1.5rem;border-bottom:1px solid var(--line);padding-block:1.75rem;margin-top:1rem}.spec>div{display:grid;gap:.4rem}.spec dd{font-size:.95rem}.prose{display:grid;grid-template-columns:1fr min(65ch,100%) 1fr;row-gap:1.25rem;max-width:88rem;margin-inline:auto;padding-block:clamp(3.5rem,8vh,6rem);font-size:1.0625rem}.prose>*{grid-column:2}.prose>p:first-of-type{font-size:1.3rem;line-height:1.55;color:var(--ink)}.prose h2{font-family:var(--font-mono);font-size:var(--mono-size, .6875rem);font-weight:500;letter-spacing:var(--mono-tracking, .14em);text-transform:uppercase;color:var(--ink-muted);margin-top:clamp(2.75rem,6vh,4.25rem)}.prose p{color:color-mix(in srgb,var(--ink) 84%,var(--ground))}.prose ul{display:grid;gap:.4rem}.prose li{position:relative;padding-left:1.4em;color:color-mix(in srgb,var(--ink) 84%,var(--ground))}.prose li:before{content:"—";position:absolute;left:0;color:var(--ink-muted)}.prose a{color:var(--signal)}.prose>figure{grid-column:1 / -1;display:grid;grid-template-columns:minmax(0,56rem) minmax(14rem,1fr);grid-template-rows:1fr auto auto;column-gap:clamp(1.5rem,4vw,3.5rem);row-gap:.7rem;margin-block:clamp(1.75rem,4.5vh,3rem)}.prose>figure>video,.prose>figure>img{grid-column:1;grid-row:1 / -1;width:auto;max-width:100%;max-height:min(70vh,38rem);justify-self:start}.prose>figure:nth-of-type(2n)>video,.prose>figure:nth-of-type(2n)>img{justify-self:end}.prose>figure.bleed>video,.prose>figure.bleed>img{width:100%;max-height:none;justify-self:stretch}.prose figure figcaption{grid-column:2;grid-row:2;align-self:end}.fig-note{grid-column:2;grid-row:3;max-width:38ch;font-size:.9rem;line-height:1.55;color:var(--ink-muted)}.prose>figure:nth-of-type(2n){grid-template-columns:minmax(14rem,1fr) minmax(0,56rem)}.prose>figure:nth-of-type(2n)>video,.prose>figure:nth-of-type(2n)>img{grid-column:2}.prose>figure:nth-of-type(2n) figcaption,.prose>figure:nth-of-type(2n) .fig-note{grid-column:1}.prose>figure.narrow,.prose>figure.bleed{grid-template-columns:1fr;grid-template-rows:none}.prose>figure.narrow>video,.prose>figure.narrow>img,.prose>figure.bleed>video,.prose>figure.bleed>img,.prose>figure.narrow figcaption,.prose>figure.bleed figcaption,.prose>figure.narrow .fig-note,.prose>figure.bleed .fig-note{grid-column:1;grid-row:auto;align-self:start}@media(max-width:767px){.prose>figure,.prose>figure:nth-of-type(2n){grid-template-columns:1fr;grid-template-rows:none}.prose>figure>video,.prose>figure>img,.prose figure figcaption,.fig-note{grid-column:1!important;grid-row:auto!important}}.prose>figure+figure{margin-top:calc(-1*clamp(.75rem,3vh,2rem))}.prose>figure.narrow{grid-column:2}.prose>figure.bleed{width:100vw;max-width:none;justify-self:center;margin-inline:calc(50% - 50vw)}.prose>figure.bleed video,.prose>figure.bleed img{border-radius:0;border-inline:0}.prose>figure.bleed figcaption{padding-inline:clamp(1.25rem,5vw,4.5rem)}.prose video,.prose img{width:100%;border-radius:6px;border:1px solid var(--line);background:var(--surface)}.prose figcaption{color:var(--ink-muted)}.next-project{display:grid;gap:1.5rem;border-top:1px solid var(--line);padding-block:clamp(3.5rem,9vh,6.5rem)}.next-project .card{max-width:37rem}.next-project .card-media{aspect-ratio:21 / 9}.next-title{font-size:calc(clamp(2.5rem,7vw,5.5rem) * var(--display-scale, 1));transition:color .3s ease-out,translate .4s cubic-bezier(.25,.8,.25,1)}.next-project:hover .next-title,.next-project:focus-visible .next-title{color:var(--signal);translate:.12em 0}.about-hero+.section-compact{padding-top:clamp(4.5rem,9vh,7.5rem)}.about-hero{position:relative}.about-hero .portrait{display:block;width:100%;aspect-ratio:.94 / 1;object-fit:cover;object-position:72% 32%}.about-hero .bio-text{max-width:none;padding-block:2.25rem 0}.about-hero .bio-text>*{max-width:58ch}@media(min-width:834px){.about-hero .portrait{aspect-ratio:1.7 / 1}.about-hero:before{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;background:linear-gradient(to right,rgba(8,8,10,.82) 0%,rgba(8,8,10,.6) 34%,rgba(8,8,10,.25) 54%,transparent 72%)}.about-hero .bio-text{position:absolute;inset:auto 0 0;z-index:2;padding-block:clamp(5rem,9vw,8rem) clamp(1.5rem,3vw,2.5rem)}.about-hero .bio-text p{color:#f2efeaeb}.about-hero .bio-stats{color:#f2efeab3;border-top-color:#f2efea40}}@media(min-width:1200px){.about-hero .portrait{aspect-ratio:2.35 / 1}}.bio-text{display:grid;gap:1.1rem;max-width:58ch;font-size:1.0625rem}.bio-text p{color:color-mix(in srgb,var(--ink) 84%,var(--ground))}.bio-text a{color:var(--signal);background-image:linear-gradient(currentColor,currentColor);background-size:0% 1px;background-repeat:no-repeat;background-position:0 100%;transition:background-size .3s cubic-bezier(.25,.8,.25,1),color .25s ease-out}.bio-text a:hover{background-size:100% 1px}.bio-stats{margin-top:.75rem;padding-top:1.1rem;border-top:1px solid var(--line)}.site-footer{border-top:1px solid var(--line);padding-block:clamp(4rem,10vh,7rem) 2.5rem;display:grid;gap:clamp(3rem,8vh,5rem)}.footer-email{display:inline-block;margin-top:1rem;font-size:clamp(1.4rem,4.4vw,3.6rem);overflow-wrap:anywhere;text-transform:uppercase;transition:color .3s ease-out}.footer-email:hover{color:var(--signal)}.footer-meta{display:flex;justify-content:space-between;flex-wrap:wrap;gap:1rem 2.5rem}.footer-socials{display:flex;gap:1.5rem}.footer-socials a:hover{color:var(--ink)}html.js [data-reveal]{opacity:0;translate:0 14px;transition:opacity .65s ease-out,translate .65s ease-out}html.js [data-reveal].revealed{opacity:1;translate:0 0}html.js .works-grid>[data-reveal]:nth-child(2n){transition-delay:90ms}.orb-layer{position:absolute;inset:0;z-index:-1;will-change:transform}main{overflow-x:clip}.telemetry{position:fixed;right:clamp(1.25rem,5vw,4.5rem);bottom:1.5rem;z-index:40;pointer-events:none;opacity:0;translate:0 8px;transition:opacity .5s ease-out,translate .5s ease-out}.telemetry.on{opacity:1;translate:0 0}.telemetry:before{content:"";display:inline-block;width:5px;height:5px;border-radius:50%;margin-right:.6em;vertical-align:.1em;background:var(--signal);box-shadow:0 0 8px var(--signal)}.telemetry span{transition:opacity .35s ease-out}@media(max-width:767px){.telemetry{display:none}}@view-transition{navigation:auto}::view-transition-old(root){animation:vt-out .15s ease both}::view-transition-new(root){animation:vt-in .24s cubic-bezier(.22,1,.36,1) both}@keyframes vt-out{to{opacity:0}}@keyframes vt-in{0%{opacity:0;transform:scale(.994)}to{opacity:1;transform:scale(1)}}@media(prefers-reduced-motion:reduce){::view-transition-old(root),::view-transition-new(root){animation:none}}
