@font-face{font-family:Instrument Sans;font-style:normal;font-weight:400 700;font-stretch:100%;font-display:swap;src:url(../media/c7f47671e39f7787-s.3wn_q526zaolu.woff2)format("woff2");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-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Instrument Sans;font-style:normal;font-weight:400 700;font-stretch:100%;font-display:swap;src:url(../media/f06bf9da926bae75-s.p.3uuun_-7zsf1g.woff2)format("woff2");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:Instrument Sans Fallback;src:local(Arial);ascent-override:94.42%;descent-override:24.33%;line-gap-override:0.0%;size-adjust:102.74%}.instrument_sans_16008933-module__E9Tbpa__className{font-family:Instrument Sans,Instrument Sans Fallback;font-style:normal}.instrument_sans_16008933-module__E9Tbpa__variable{--font-sans:"Instrument Sans", "Instrument Sans Fallback"}
:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--bg:var(--lightningcss-light,#f1f2f4)var(--lightningcss-dark,#07090e);--text:var(--lightningcss-light,#0f1218)var(--lightningcss-dark,#edf0f5);--text-2:var(--lightningcss-light,#454b56)var(--lightningcss-dark,#b0b6c3);--text-3:var(--lightningcss-light,#555c68)var(--lightningcss-dark,#a1a8b8);--line:var(--lightningcss-light,#1218281a)var(--lightningcss-dark,#ffffff14);--line-strong:var(--lightningcss-light,#12182829)var(--lightningcss-dark,#ffffff24);--accent:var(--lightningcss-light,#2446c7)var(--lightningcss-dark,#a3b8ff);--award:var(--lightningcss-light,#7d5a09)var(--lightningcss-dark,#e5c47c);--success:var(--lightningcss-light,#16874f)var(--lightningcss-dark,#45d596);--chip:var(--lightningcss-light,#ffffff80)var(--lightningcss-dark,#ffffff0d);--chip-hover:var(--lightningcss-light,#ffffffe0)var(--lightningcss-dark,#ffffff1a);--surface-solid:var(--lightningcss-light,#fff)var(--lightningcss-dark,#11141b);--media:var(--lightningcss-light,#e2e5e9)var(--lightningcss-dark,#10131a);--media-edge:var(--lightningcss-light,#1218281a)var(--lightningcss-dark,#ffffff14);--light-a:var(--lightningcss-light,#aec3f97a)var(--lightningcss-dark,#31478e57);--light-b:var(--lightningcss-light,#a3dede70)var(--lightningcss-dark,#1471752e);--light-c:var(--lightningcss-light,#e8c3e44d)var(--lightningcss-dark,#62437729);--tint-cool:var(--lightningcss-light,#b0e4da5c)var(--lightningcss-dark,#226a6624);--tint-cool-2:var(--lightningcss-light,#aed8ef4d)var(--lightningcss-dark,#22587a29);--tint-warm:var(--lightningcss-light,#fad2b457)var(--lightningcss-dark,#8c5c3a24);--tint-warm-2:var(--lightningcss-light,#ecc7e242)var(--lightningcss-dark,#6b41671f);--tint-deep:var(--lightningcss-light,#ced5f942)var(--lightningcss-dark,#323f6d33);--tint-deep-2:var(--lightningcss-light,#c7def538)var(--lightningcss-dark,#1d3f602e);--contour:var(--lightningcss-light,#263c961a)var(--lightningcss-dark,#a0b6ff21);--contour-lit:var(--lightningcss-light,#284bd252)var(--lightningcss-dark,#bed0ff6b);--swell:var(--lightningcss-light,#ffffff80)var(--lightningcss-dark,#8ca5ff16);--light-pool:var(--lightningcss-light,#ffffff8c)var(--lightningcss-dark,#7d96ff17);--grain:var(--lightningcss-light,#1418280f)var(--lightningcss-dark,#ffffff09);--glass-top:var(--lightningcss-light,#ffffff75)var(--lightningcss-dark,#2a2e3c42);--glass-bottom:var(--lightningcss-light,#fff3)var(--lightningcss-dark,#0e10185c);--nav-top:var(--lightningcss-light,#ffffffb8)var(--lightningcss-dark,#1c2130a8);--nav-bottom:var(--lightningcss-light,#ffffff94)var(--lightningcss-dark,#10141e94);--sky:var(--lightningcss-light,#ffffff9e)var(--lightningcss-dark,#ffffff0f);--edge-glow:var(--lightningcss-light,#ffffff6b)var(--lightningcss-dark,#ffffff0d);--rim-1:var(--lightningcss-light,#fff)var(--lightningcss-dark,#ffffff5c);--rim-2:var(--lightningcss-light,#ffffff73)var(--lightningcss-dark,#ffffff12);--rim-3:var(--lightningcss-light,#fffc)var(--lightningcss-dark,#ffffff2b);--rim-light:var(--lightningcss-light,#fff)var(--lightningcss-dark,#e8eeffe6);--inner-edge:var(--lightningcss-light,#fffffff2)var(--lightningcss-dark,#ffffff21);--inner-glow:var(--lightningcss-light,#ffffffe6)var(--lightningcss-dark,#ffffff1a);--inner-side:var(--lightningcss-light,#ffffff73)var(--lightningcss-dark,#ffffff0b);--inner-edge-low:var(--lightningcss-light,#fff9)var(--lightningcss-dark,#ffffff0f);--inner-shade:var(--lightningcss-light,#28376414)var(--lightningcss-dark,#0000004d);--corner-light:var(--lightningcss-light,#ffffff8c)var(--lightningcss-dark,#ffffff12);--corner-light-low:var(--lightningcss-light,#ffffff52)var(--lightningcss-dark,#ffffff09);--caustic-hue:262;--outline:var(--lightningcss-light,#16204017)var(--lightningcss-dark,#0000004d);--shadow:var(--lightningcss-light,#1e2a5433)var(--lightningcss-dark,#0000009e);--shadow-soft:var(--lightningcss-light,#1e2a5412)var(--lightningcss-dark,#0000004d);--shadow-lift:var(--lightningcss-light,#1e2a5442)var(--lightningcss-dark,#00000080);--tile-top:var(--lightningcss-light,#ffffffeb)var(--lightningcss-dark,#ffffff1a);--tile-bottom:var(--lightningcss-light,#ffffffa8)var(--lightningcss-dark,#ffffff09);--tile-edge:var(--lightningcss-light,#fff)var(--lightningcss-dark,#ffffff24);--lens-highlight:#fff;--lens-strength:1;--lens-shade:.03;--glass-blur:12px}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}@supports (color:lab(0% 0 0)){:root{--light-a:var(--lightningcss-light,lab(78.5913% 1.73801 -29.3697/.48))var(--lightningcss-dark,lab(31.4528% 10.1656 -42.6984/.34));--light-b:var(--lightningcss-light,lab(84.3915% -19.4671 -6.38229/.44))var(--lightningcss-dark,lab(42.7742% -25.0503 -10.2908/.18));--light-c:var(--lightningcss-light,lab(82.9291% 17.6266 -11.1153/.3))var(--lightningcss-dark,lab(33.7391% 21.5459 -24.9466/.16));--tint-cool:var(--lightningcss-light,lab(86.7599% -18.7949 -.891721/.36))var(--lightningcss-dark,lab(40.4762% -23.6179 -4.71652/.14));--tint-cool-2:var(--lightningcss-light,lab(83.9181% -10.5102 -16.2179/.3))var(--lightningcss-dark,lab(34.977% -9.119 -25.0976/.16));--tint-warm:var(--lightningcss-light,lab(87.0623% 11.4892 20.1838/.34))var(--lightningcss-dark,lab(43.959% 17.7289 27.8932/.14));--tint-warm-2:var(--lightningcss-light,lab(84.1596% 16.9529 -8.27875/.26))var(--lightningcss-dark,lab(33.8878% 23.3909 -14.605/.12));--tint-deep:var(--lightningcss-light,lab(85.7013% 2.75061 -18.4863/.26))var(--lightningcss-dark,lab(27.3331% 5.56225 -28.7224/.2));--tint-deep-2:var(--lightningcss-light,lab(87.205% -4.41271 -13.9/.22))var(--lightningcss-dark,lab(25.489% -3.50304 -23.7133/.18))}}:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--lens-strength:.62;--lens-shade:.06}@media (prefers-color-scheme:dark){:root:not([data-theme]){--lens-strength:.62;--lens-shade:.06}}:root{--max:1180px;--gutter:40px;--nav-height:56px;--radius:24px;--ease-out:cubic-bezier(.2, .7, .2, 1)}*{box-sizing:border-box}html{scroll-padding-top:calc(var(--nav-height) + 36px);scroll-padding-bottom:24px}body{background:var(--bg);min-height:100vh;color:var(--text);font-family:var(--font-sans), ui-sans-serif, system-ui, sans-serif;-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-size:16px;line-height:1.6;display:flow-root;position:relative}h1,h2,h3,p{margin:0}h1,h2,h3{text-wrap:balance;line-height:1.15}p{text-wrap:pretty}a{color:inherit;text-underline-offset:4px;text-decoration-thickness:1px}abbr[title]{text-decoration:none}button{font:inherit;color:inherit}svg{flex:none}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:6px}::selection{background:color-mix(in srgb, var(--accent) 24%, transparent)}.visually-hidden{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.separator{color:var(--text-3)}.glass-probe{pointer-events:none;width:0;height:0;position:absolute;overflow:hidden}.skip-link{z-index:70;border:1px solid var(--line-strong);background:var(--surface-solid);color:var(--text);border-radius:10px;padding:10px 16px;font-weight:600;text-decoration:none;position:fixed;top:12px;left:12px;transform:translateY(-200%)}.skip-link:focus{transform:none}main,.footer{width:min(100% - 2 * var(--gutter), var(--max));margin-inline:auto}main{display:block}main:focus{outline:none}.atmosphere{z-index:-1;pointer-events:none;position:fixed;inset:0;overflow:hidden}.tint{will-change:transform;width:116%;height:130vh;position:absolute;left:-8%}.tint-cool{background:radial-gradient(46vmax 40vh at 86% 36%, var(--tint-cool), transparent 70%), radial-gradient(40vmax 36vh at 3% 74%, var(--tint-cool-2), transparent 70%);top:-15vh}.tint-warm{background:radial-gradient(44vmax 38vh at 90% 32%, var(--tint-warm-2), transparent 70%), radial-gradient(50vmax 40vh at 14% 72%, var(--tint-warm), transparent 70%);top:85vh}.tint-deep{background:radial-gradient(46vmax 38vh at 2% 34%, var(--tint-deep-2), transparent 70%), radial-gradient(58vmax 40vh at 52% 76%, var(--tint-deep), transparent 72%);top:185vh}.light,.focus{background:radial-gradient(closest-side, var(--c), color-mix(in oklab, var(--c) 55%, transparent) 38%, color-mix(in oklab, var(--c) 18%, transparent) 70%, transparent);will-change:transform;border-radius:50%;position:absolute}.light-a{--c:var(--light-a);width:80vmax;height:80vmax;top:-34vmax;left:-26vmax}.light-b{--c:var(--light-b);width:64vmax;height:64vmax;top:14vh;right:-26vmax}.light-c{--c:var(--light-c);width:68vmax;height:68vmax;bottom:-42vmax;left:6vw}.focus{--c:var(--lightningcss-light,oklch(.86 .08 var(--hue,250) / .45))var(--lightningcss-dark,oklch(.52 .1 var(--hue,250) / .15));opacity:0;will-change:opacity;width:60vmax;height:60vmax;transition:opacity 1.4s;top:calc(50% - 30vmax)}.focus[data-side=l]{left:calc(26% - 30vmax)}.focus[data-side=r]{left:calc(74% - 30vmax)}.focus[data-on]{opacity:1}.swell{visibility:hidden;position:absolute;inset:0}.atmosphere[data-wave] .swell{visibility:visible}.wave-ring{background:radial-gradient(closest-side, transparent 22%, color-mix(in oklab, var(--swell) 45%, transparent) 62%, var(--swell) 86%, transparent 99%);opacity:0;will-change:transform, opacity;border-radius:50%;width:400px;height:400px;margin:-200px 0 0 -200px;position:absolute;top:0;left:0}.terrain-lit .wave-ring{background:radial-gradient(closest-side, transparent 76%, var(--contour-lit) 91%, transparent 99%)}.atmosphere:after{content:"";background:var(--grain);position:absolute;inset:0;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E") 0 0/180px 180px;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E") 0 0/180px 180px}.terrain,.terrain-lit{z-index:-1;pointer-events:none;position:absolute;inset:0;overflow:clip}.terrain{-webkit-mask:var(--terrain-cutouts,none) 0 0 / auto no-repeat;-webkit-mask:var(--terrain-cutouts,none) 0 0 / auto no-repeat;mask:var(--terrain-cutouts,none) 0 0 / auto no-repeat;background:url(/atmosphere/terrain-light.svg) 0 0/1600px 1600px}:root[data-theme=dark] .terrain{background-image:url(/atmosphere/terrain-dark.svg)}@media (prefers-color-scheme:dark){:root:not([data-theme]) .terrain{background-image:url(/atmosphere/terrain-dark.svg)}}.terrain-lit{visibility:hidden;-webkit-mask:url(/atmosphere/terrain.svg) 0 0 / 1600px 1600px, var(--terrain-cutouts,linear-gradient(#000 0 0)) 0 0 / auto no-repeat;-webkit-mask-composite:source-in;-webkit-mask:url(/atmosphere/terrain.svg) 0 0 / 1600px 1600px, var(--terrain-cutouts,linear-gradient(#000 0 0)) 0 0 / auto no-repeat;mask:url(/atmosphere/terrain.svg) 0 0 / 1600px 1600px, var(--terrain-cutouts,linear-gradient(#000 0 0)) 0 0 / auto no-repeat;-webkit-mask-composite:source-in;mask-composite:intersect}.terrain-lit[data-lit]{visibility:visible}.terrain-light{background:radial-gradient(closest-side, var(--contour-lit), color-mix(in oklab, var(--contour-lit) 35%, transparent) 50%, transparent);opacity:0;will-change:translate, opacity;border-radius:50%;width:560px;height:560px;margin:-280px 0 0 -280px;position:absolute;top:0;left:0}.ambient-light{z-index:-1;background:radial-gradient(closest-side, var(--light-pool), color-mix(in oklab, var(--light-pool) 40%, transparent) 45%, transparent);opacity:0;pointer-events:none;will-change:transform, opacity;border-radius:50%;width:64vmax;height:64vmax;margin:-32vmax 0 0 -32vmax;position:fixed;top:0;left:0}.glass{--bezel:28px;--refraction:9px;isolation:isolate;background:linear-gradient(180deg, var(--glass-top), var(--glass-bottom));box-shadow:inset 0 1px 0 var(--inner-edge), inset 1px 0 0 var(--inner-side), inset -1px 0 0 var(--inner-side), inset 0 22px 36px -30px var(--inner-glow), inset 0 -1px 0 var(--inner-edge-low), inset 0 -26px 34px -30px var(--inner-shade), 0 0 0 1px var(--outline), 0 2px 4px -2px var(--shadow-soft), 0 24px 48px -28px var(--shadow);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));position:relative}.glass:before,.glass:after{content:"";border-radius:var(--pane-radius);pointer-events:none;position:absolute;inset:0}.glass:before{z-index:-1;background:radial-gradient(42% 34% at 0% 0%, var(--corner-light), transparent 70%), radial-gradient(38% 30% at 100% 100%, var(--corner-light-low), transparent 70%), radial-gradient(66% 18% at 50% 102%, var(--lightningcss-light,oklch(.95 .04 var(--caustic-hue) / .36))var(--lightningcss-dark,oklch(.72 .08 var(--caustic-hue) / .06)), transparent 72%), linear-gradient(172deg, var(--sky), transparent 34%), radial-gradient(130% 100% at 50% 0%, transparent 62%, var(--edge-glow))}.glass:after{background:linear-gradient(150deg, var(--rim-1), var(--rim-2) 26%, transparent 48%, transparent 58%, var(--rim-2) 78%, var(--rim-3));-webkit-mask-composite:xor;padding:1px;-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor,source-over;mask:linear-gradient(#000 0 0) content-box exclude,linear-gradient(#000 0 0)}.glass>:not(.glass-lens,.project-media,.portrait-frame){z-index:2;position:relative}.glass-lens{border-radius:var(--pane-radius);pointer-events:none;width:100%;height:100%;position:absolute;inset:0}:root:not([data-liquid]) .glass-lens{visibility:hidden}:root[data-liquid] .glass:after{opacity:.35}:root[data-liquid] .glass[data-glass=clear]{-webkit-backdrop-filter:none;backdrop-filter:none}.glass-slot{perspective:1200px;position:relative}.glass-slot>.glass{z-index:1;border-radius:var(--pane-radius);will-change:transform}.glass-shadow{border-radius:var(--pane-radius);pointer-events:none;z-index:0;box-shadow:0 30px 64px -26px var(--shadow-lift);opacity:0;will-change:transform, opacity;position:absolute;inset:0}@media (hover:none),(pointer:coarse),(pointer:none){.glass-shadow,.terrain-light,.ambient-light{display:none}}.site-nav{--glass-top:var(--nav-top);--glass-bottom:var(--nav-bottom);--pane-radius:999px;--bezel:20px;--refraction:0px;z-index:30;width:min(100% - 2 * var(--gutter) + 20px, var(--max) + 20px);height:var(--nav-height);border-radius:var(--pane-radius);transition:translate .46s var(--ease-out), scale .46s var(--ease-out), opacity .32s ease;align-items:center;gap:4px;margin:14px auto 0;padding:0 8px 0 10px;display:flex;position:sticky;top:14px}.site-nav[data-hidden]{opacity:0;pointer-events:none;transition:translate .42s cubic-bezier(.4,0,.2,1),scale .42s cubic-bezier(.4,0,.2,1),opacity .32s cubic-bezier(.4,0,1,1);translate:0 -28px;scale:.95}.site-nav:has(:focus-visible){opacity:1;pointer-events:auto;translate:none;scale:none}.nav-home{letter-spacing:-.01em;border-radius:999px;align-items:center;gap:10px;min-height:40px;padding:0 10px 0 4px;font-size:15px;font-weight:620;text-decoration:none;display:inline-flex}.nav-mark{width:30px;height:30px}.nav-mark rect{fill:var(--text)}.nav-mark path{fill:none;stroke:var(--bg);stroke-width:3px;stroke-linecap:round;stroke-linejoin:round}.nav-sections{margin-left:auto}.nav-links{gap:2px;margin:0;padding:0;list-style:none;display:flex}.nav-links a,.nav-resume{border-radius:999px;align-items:center;gap:7px;height:40px;padding:0 14px;font-size:14.5px;font-weight:540;text-decoration:none;transition:background-color .2s,color .2s;display:inline-flex}.nav-links a{color:var(--text-2)}.nav-links a:hover{color:var(--text)}:root:not([data-theme]) .nav-links a:hover{background:var(--chip-hover)}.lens-host{position:relative}.link-lens{z-index:3;visibility:hidden;pointer-events:none;will-change:transform;position:absolute;top:0;left:0}.link-lens-glass,.link-lens-view{border-radius:999px;position:absolute;inset:0}.link-lens-glass{box-shadow:inset 0 1px 0 var(--lightningcss-light,#fff)var(--lightningcss-dark,#fff6), inset 0 -1px 0 var(--lightningcss-light,#ffffffb3)var(--lightningcss-dark,#ffffff1f), inset 0 0 0 1px var(--lightningcss-light,#ffffff80)var(--lightningcss-dark,#ffffff14), 0 0 0 1px var(--lightningcss-light,#1620400f)var(--lightningcss-dark,#00000040), 0 6px 14px -8px var(--shadow);opacity:0;-webkit-backdrop-filter:blur(7px);backdrop-filter:blur(7px);background:linear-gradient(var(--lightningcss-light,#ffffff9e)var(--lightningcss-dark,#ffffff21),var(--lightningcss-light,#ffffff57)var(--lightningcss-dark,#ffffff0d))}.link-lens-view{overflow:clip}.link-lens-view>ul{transform-origin:0 0;margin:0;position:absolute;top:0;left:0}.link-lens-view .nav-links a,.link-lens-view a svg{color:var(--text)}.link-lens[data-focus] .link-lens-glass{outline:2px solid var(--accent);outline-offset:2px}[data-lens] [data-lensed]:focus-visible{outline-color:#0000}.nav-resume{border:1px solid var(--line-strong);background:var(--chip);color:var(--text);margin-left:6px}.nav-resume:hover{background:var(--chip-hover)}.nav-resume svg{color:var(--text-2)}.theme-toggle{border:1px solid var(--line-strong);background:var(--chip);width:40px;height:40px;color:var(--text);cursor:pointer;transition:background-color .2s ease, transform .2s var(--ease-out);border-radius:50%;place-items:center;margin-left:4px;padding:0;display:grid}.theme-toggle:hover{background:var(--chip-hover)}.theme-toggle:active{transform:scale(.93)}.theme-toggle:focus-visible{border-radius:50%}:root:not([data-theme]) .theme-toggle{display:none}.theme-toggle-glyphs{width:18px;height:18px;display:block;position:relative}.theme-toggle-glyphs svg{width:18px;height:18px;transition:opacity .24s,transform .32s cubic-bezier(.34,1.3,.64,1);position:absolute;inset:0}.theme-toggle[data-showing=moon] svg:first-child,.theme-toggle[data-showing=sun] svg:last-child{opacity:1;transform:rotate(0)scale(1)}.theme-toggle[data-showing=moon] svg:last-child,.theme-toggle[data-showing=sun] svg:first-child{opacity:0;transform:rotate(-90deg)scale(.5)}::view-transition-old(root){mix-blend-mode:normal;animation:none}::view-transition-new(root){mix-blend-mode:normal;animation:none}.intro{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:40px clamp(40px,7vw,112px);padding-top:clamp(64px,8vw,112px);display:grid}.intro-text{max-width:35rem}h1{letter-spacing:-.035em;font-size:clamp(2.4rem,1.9rem + 1.5vw,3.1rem);font-weight:600;line-height:1.04}.intro-lead{letter-spacing:-.012em;text-wrap:balance;margin-top:18px;font-size:clamp(1.15rem,1.05rem + .3vw,1.3rem);font-weight:500;line-height:1.4}.intro-body{color:var(--text-2);margin-top:14px;font-size:17px;line-height:1.65}.intro-links,.contact-links{--lens-pad-x:12px;flex-wrap:wrap;gap:2px 24px;margin:0;padding:0;list-style:none;display:flex}.intro-links{margin-top:24px}.intro-links a,.contact-links a{min-height:40px;color:var(--text);align-items:center;gap:8px;font-weight:540;-webkit-text-decoration:underline #0000;text-decoration:underline #0000;transition:text-decoration-color .2s;display:inline-flex}.intro-links a:hover,.contact-links a:hover{text-decoration-color:currentColor}.intro-links svg,.contact-links svg{width:18px;height:18px;color:var(--text-2);transition:color .2s}.intro-links a:hover svg,.contact-links a:hover svg{color:var(--text)}.portrait-slot{--pane-radius:32px;--caustic-hue:210}.portrait{--bezel:10px;--refraction:3px;aspect-ratio:4/5;width:clamp(240px,23vw,320px);padding:10px}.portrait-frame{--frame-radius:23px;border-radius:var(--frame-radius);background:var(--media);height:100%;box-shadow:0 10px 26px -18px var(--shadow);position:relative;overflow:clip}.portrait-frame img{object-fit:cover}.portrait-frame:after{content:"";border-radius:var(--frame-radius);box-shadow:inset 0 0 0 1px var(--media-edge);pointer-events:none;position:absolute;inset:0}.portrait-placeholder{background:radial-gradient(90% 70% at 18% 6%,var(--lightningcss-light,#abbcef)var(--lightningcss-dark,#40518dcc),#0000 72%),radial-gradient(85% 70% at 96% 100%,var(--lightningcss-light,#a1d6d9)var(--lightningcss-dark,#0b5b6299),#0000 72%),var(--lightningcss-light,#91a7c1)var(--lightningcss-dark,#182233);background:radial-gradient(90% 70% at 18% 6%,var(--lightningcss-light,lab(76.2763% 2.39483 -27.5765))var(--lightningcss-dark,lab(35.2411% 7.34226 -35.846/.8)),#0000 72%),radial-gradient(85% 70% at 96% 100%,var(--lightningcss-light,lab(81.9825% -17.3498 -7.21252))var(--lightningcss-dark,lab(34.4857% -20.7228 -11.0337/.6)),#0000 72%),var(--lightningcss-light,lab(67.4235% -3.69909 -15.927))var(--lightningcss-dark,lab(12.7895% .0433996 -12.6054));place-items:center;display:grid;position:absolute;inset:0;container-type:inline-size}.portrait-placeholder:before{content:"";background:var(--lightningcss-light,#ffffff4d)var(--lightningcss-dark,#ffffff1f);position:absolute;inset:-12%;-webkit-mask:url(/atmosphere/terrain.svg) 64% 36%/230% no-repeat;mask:url(/atmosphere/terrain.svg) 64% 36%/230% no-repeat}.portrait-initials{color:#fffffff0;letter-spacing:-.03em;text-shadow:0 2px 16px #0a143c2e;font-size:27cqi;font-weight:560;line-height:1;position:relative}.section{margin-top:clamp(96px,11vw,148px)}.projects{margin-top:clamp(80px,9vw,120px)}.section-title{color:var(--text-2);letter-spacing:-.005em;transform-origin:0;align-items:center;gap:16px;margin-bottom:26px;font-size:15px;font-weight:560;display:flex}.section-title:after{content:"";background:linear-gradient(to right, var(--line-strong), transparent);transform-origin:0;flex:1;height:1px}.project-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:0 clamp(20px,2.4vw,30px);display:grid}.project-slot,.project{grid-template-rows:subgrid;grid-row:span 6;min-width:0;display:grid}.project-slot{--pane-radius:var(--radius);margin-bottom:clamp(20px,2.4vw,30px)}.project{--caustic-hue:var(--hue);padding:10px 10px 24px}.project>:not(.project-media,.glass-lens){margin-inline:16px}.project-media{--frame-radius:15px;aspect-ratio:16/10;border-radius:var(--frame-radius);background:var(--media);min-width:0;box-shadow:0 10px 26px -18px var(--shadow);margin-bottom:22px;position:relative;overflow:clip}.project-media:after{content:"";border-radius:var(--frame-radius);box-shadow:inset 0 0 0 1px var(--media-edge);pointer-events:none;position:absolute;inset:0}.screen{display:block;position:absolute;inset:0}.screen img{object-fit:cover;object-position:top;transition:transform .8s var(--ease-out)}.screen-dark,:root[data-theme=dark] .screen-light{display:none}:root[data-theme=dark] .screen-dark{display:block}@media (prefers-color-scheme:dark){:root:not([data-theme]) .screen-light{display:none}:root:not([data-theme]) .screen-dark{display:block}}.phones{background:radial-gradient(80% 90% at 50% 0%, var(--lightningcss-light,oklch(.97 .03 var(--hue) / .9))var(--lightningcss-dark,oklch(.36 .06 var(--hue) / .55)), transparent 70%), var(--lightningcss-light,oklch(.92 .02 var(--hue)))var(--lightningcss-dark,oklch(.2 .02 var(--hue)));justify-content:center;align-items:center;gap:5%;display:flex}.phone{aspect-ratio:780/956;width:33%;box-shadow:0 0 0 1px var(--media-edge), 0 22px 40px -22px var(--shadow);transition:transform .8s var(--ease-out);border-radius:16px;position:relative;overflow:clip}.phone:nth-child(2){transform:translateY(6%)}.cover{background:radial-gradient(90% 80% at 12% 0%, var(--lightningcss-light,oklch(.9 .05 var(--hue) / .7))var(--lightningcss-dark,oklch(.4 .09 var(--hue) / .42)), transparent 70%), radial-gradient(70% 70% at 95% 105%, var(--lightningcss-light,oklch(.9 .04 calc(var(--hue) + 40) / .55))var(--lightningcss-dark,oklch(.34 .07 calc(var(--hue) + 40) / .32)), transparent 70%), var(--lightningcss-light,oklch(.955 .015 var(--hue)))var(--lightningcss-dark,oklch(.18 .025 var(--hue)));place-items:center;display:grid}.cover:before{content:"";background:var(--lightningcss-light,oklch(.45 .12 var(--hue) / .26))var(--lightningcss-dark,oklch(.8 .09 var(--hue) / .2));transition:transform 1s var(--ease-out);position:absolute;inset:-6%;-webkit-mask:url(/atmosphere/terrain.svg) 30% 60%/170% no-repeat;mask:url(/atmosphere/terrain.svg) 30% 60%/170% no-repeat}.cover-name{color:var(--lightningcss-light,oklch(.34 .09 var(--hue)))var(--lightningcss-dark,oklch(.92 .05 var(--hue)));letter-spacing:-.045em;font-size:clamp(32px,3.4vw,50px);font-weight:650;line-height:1;position:relative}.project-media video{object-fit:cover;width:100%;height:100%;position:absolute;inset:0}.video-toggle{z-index:1;color:#fff;cursor:pointer;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#0c0e148c;border:1px solid #ffffff40;border-radius:50%;place-items:center;width:36px;height:36px;padding:0;display:grid;position:absolute;bottom:12px;right:12px}.project-head{margin-bottom:12px}.project-title{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:4px 16px;display:flex}.project h3{letter-spacing:-.03em;font-size:24px;font-weight:620}.project-meta{color:var(--text-3);font-size:13.5px;line-height:1.4}.project-meta .separator{margin-inline:.45em}.award{color:var(--award);align-items:flex-start;gap:7px;margin-top:8px;font-size:14px;line-height:1.45;display:flex}.award svg{margin-top:2px}.award strong{font-weight:600}.project-summary{margin-bottom:14px;font-size:16.5px;line-height:1.55}.project-detail{color:var(--text-2);margin-bottom:18px;font-size:15px;line-height:1.62}.stack{color:var(--text-2);flex-wrap:wrap;align-content:flex-start;gap:6px 16px;margin-top:0;margin-bottom:18px;padding:0;font-size:13.5px;font-weight:500;line-height:1.5;list-style:none;display:flex}.stack li,.toolbox-group li{--tech:currentColor;white-space:nowrap;align-items:center;display:inline-flex}.stack li{gap:6px}.stack svg{width:13px;height:13px}.stack svg,.tool-tile svg{fill:var(--tech)}@supports (color:oklch(from red l c h)){.stack svg,.tool-tile svg{fill:var(--lightningcss-light,oklch(from var(--tech) min(l, .6) c h))var(--lightningcss-dark,oklch(from var(--tech) max(l, .74) c h))}}.project-actions{flex-wrap:wrap;align-items:center;gap:10px 16px;display:flex}.project-links{--lens-pad-x:13px;--lens-pad-y:7px;flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none;display:flex}.project-links a{border:1px solid var(--line-strong);background:var(--chip);height:38px;color:var(--text);transition:background-color .2s ease, border-color .2s ease, translate .25s var(--ease-out);border-radius:999px;align-items:center;gap:7px;padding:0 15px 0 12px;font-size:14.5px;font-weight:560;text-decoration:none;display:inline-flex}.project-links a:hover{border-color:var(--text-3);background:var(--chip-hover);translate:0 -1px}.project-links li:first-child a{background:var(--text);color:var(--bg);border-color:#0000}.project-links li:first-child a:hover{background:var(--text)}.project-links li:first-child .link-mark{color:inherit}.link-mark{width:16px;height:16px;color:var(--text-2)}.private-note{min-height:38px;color:var(--text-3);align-items:center;gap:7px;font-size:13.5px;display:inline-flex}.jobs{grid-template-columns:repeat(2,minmax(0,1fr));gap:28px clamp(32px,5vw,64px);margin:0;padding:0;list-style:none;display:grid}.job{grid-template-columns:44px minmax(0,1fr);gap:16px;display:grid}.job-logo{background:var(--surface-solid);width:44px;height:44px;box-shadow:inset 0 0 0 1px var(--line), 0 6px 14px -8px var(--shadow);border-radius:12px;place-items:center;display:grid;overflow:hidden}.job-logo img{object-fit:cover;width:100%;height:100%}.job-logo svg{width:24px;height:24px}.job-top{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:2px 12px;display:flex}.job h3{letter-spacing:-.01em;font-size:17px;font-weight:620}.job-dates{color:var(--text-3);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:13.5px}.job-role{margin-top:2px;font-size:15px;font-weight:500}.job-description{color:var(--text-2);margin-top:8px;font-size:15px;line-height:1.6}.toolbox{grid-template-columns:repeat(4,minmax(0,1fr));gap:36px clamp(24px,3vw,48px);display:grid}.toolbox-group h3{color:var(--text-3);margin-bottom:14px;font-size:14px;font-weight:540}.toolbox-group ul{gap:10px;margin:0;padding:0;list-style:none;display:grid}.toolbox-group li{gap:12px;font-size:15px;font-weight:500}.tool-tile{background:linear-gradient(180deg, var(--tile-top), var(--tile-bottom));width:34px;height:34px;box-shadow:inset 0 1px 0 var(--tile-edge), 0 0 0 1px var(--outline), 0 6px 12px -8px var(--shadow);border-radius:10px;place-items:center;display:grid}.tool-tile svg{width:18px;height:18px}.tool-tile-text{color:var(--text-2);letter-spacing:.02em;font-size:10px;font-weight:700}.footer{margin-top:clamp(96px,11vw,148px);padding-bottom:36px}.contact-slot{--pane-radius:28px;--caustic-hue:250}.contact{--bezel:34px;--refraction:11px;gap:28px;padding:clamp(28px,4vw,44px);display:grid}.contact h2{letter-spacing:-.03em;font-size:clamp(28px,1.4vw + 18px,38px);font-weight:600}.contact-copy p{max-width:34em;color:var(--text-2);margin-top:10px;font-size:16.5px}.contact-row{border-top:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px 32px;padding-top:22px;display:flex}.contact-email{flex-wrap:wrap;align-items:center;gap:10px 14px;display:flex}.contact-email a{color:var(--text);letter-spacing:-.01em;text-decoration:underline;-webkit-text-decoration-color:var(--line-strong);text-decoration-color:var(--line-strong);text-underline-offset:6px;overflow-wrap:anywhere;font-size:clamp(18px,.8vw + 12px,22px);font-weight:580;transition:text-decoration-color .2s}.contact-email a:hover{text-decoration-color:currentColor}.copy-email{border:1px solid var(--line-strong);background:var(--chip);height:34px;color:var(--text-2);cursor:pointer;border-radius:999px;align-items:center;gap:6px;padding:0 13px;font-size:13px;font-weight:500;transition:background-color .2s,color .2s;display:inline-flex}.copy-email:hover{background:var(--chip-hover);color:var(--text)}.copy-email[data-copied=true]{color:var(--success)}.footer-note{color:var(--text-3);margin-top:22px;padding-inline:4px;font-size:13.5px}.not-found{padding-top:clamp(96px,16vw,180px)}.not-found .section-title{margin-bottom:26px}.not-found h1{font-size:clamp(2.5rem,1.5rem + 3vw,3.5rem)}.not-found p{color:var(--text-2);margin-block:18px 22px;font-size:18px}.not-found a{font-weight:600}@media (hover:hover) and (pointer:fine){.project-media,.portrait-frame{will-change:translate}}@media (hover:hover){.project:hover .screen img{transform:scale(1.025)}.project:hover .phone{transform:translateY(-3%)}.project:hover .phone:nth-child(2){transform:translateY(3%)}.project:hover .cover:before{transform:scale(1.05)translateY(-1%)}}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}.intro-text>*{animation:rise .76s var(--ease-out) both}.intro-text>:nth-child(2){animation-delay:60ms}.intro-text>:nth-child(3){animation-delay:.12s}.intro-text>:nth-child(4){animation-delay:.18s}.portrait-slot>*{animation:rise-portrait 1s var(--ease-out) .14s backwards}.light-a{transform-origin:78% 140%;animation:34s ease-in-out infinite alternate idle-a}.light-b{transform-origin:-24% 58%;animation:43s ease-in-out infinite alternate idle-b}.light-c{transform-origin:108% -18%;animation:29s ease-in-out infinite alternate idle-c}.tint{animation:47s ease-in-out infinite alternate idle-tint}@supports (animation-timeline:view()){.intro{view-timeline:--intro block;view-timeline-inset:0}.intro-text{animation:linear both recede-dim,linear both intro-recede;animation-timeline:--intro,--intro;animation-range:exit 20% exit 80%,exit}.portrait-slot>*{animation:portrait-dim linear both, portrait-recede linear both, rise-portrait 1s var(--ease-out) .14s backwards;animation-timeline:--intro,--intro,auto;animation-range:exit 20% exit 80%,exit,normal}.section-title{view-timeline:--title block;animation:title-in var(--ease-out) both;animation-timeline:--title;animation-range:entry cover 26%}.section-title:after{animation:rule-draw var(--ease-out) both;animation-timeline:--title;animation-range:entry 50% cover 44%}.glass-slot{view-timeline:--slot block}.glass-slot.reveal>*{animation:linear both pane;animation-timeline:--slot}.project-slot:nth-child(2n)>*{animation-name:pane-late}.reveal:not(.glass-slot){view-timeline:--reveal block;animation:linear both settle;animation-timeline:--reveal;animation-range:entry entry 85%}.job:nth-child(2),.toolbox-group:nth-child(2){animation-range:entry 6% entry 91%}.toolbox-group:nth-child(3){animation-range:entry 12% entry 97%}.toolbox-group:nth-child(4){animation-range:entry 18%}.project-media{view-timeline:--media block}.project-media .screen,.project-media video{transform-origin:50% 0;animation:media-settle var(--ease-out) both, media-drift linear both;animation-timeline:--media,--media;animation-range:entry 20% cover 55%,cover}.phone{animation:linear both phone-drift;animation-timeline:--media;animation-range:cover}.phone:nth-child(2){animation-name:phone-drift-far}.cover:before{animation:linear both cover-drift;animation-timeline:--media;animation-range:cover}}@supports (animation-timeline:scroll()){.light-a{animation:linear both light-a,34s ease-in-out infinite alternate idle-a;animation-timeline:scroll(root),auto}.light-b{animation:linear both light-b,43s ease-in-out infinite alternate idle-b;animation-timeline:scroll(root),auto}.light-c{animation:linear both light-c,29s ease-in-out infinite alternate idle-c;animation-timeline:scroll(root),auto}}@supports (timeline-scope:--work){body{timeline-scope:--work}.projects{view-timeline:--work block}.tint{animation:linear both tint-travel,47s ease-in-out infinite alternate idle-tint;animation-timeline:--work,auto;animation-range:entry exit,normal}}}@keyframes rise{0%{opacity:0;transform:translateY(12px)}}@keyframes rise-portrait{0%{opacity:0;transform:translateY(10px)scale(.97)}}@keyframes recede-dim{to{opacity:0}}@keyframes intro-recede{to{translate:0 14vh;scale:.965}}@keyframes portrait-dim{to{filter:opacity(0)}}@keyframes portrait-recede{to{translate:0 22vh;rotate:x 12deg;scale:.92}}@keyframes title-in{0%{opacity:0;translate:0 22px;scale:.97}}@keyframes rule-draw{0%{opacity:0;scale:0 1}}@keyframes pane{entry 0%{animation-timing-function:cubic-bezier(.2,.7,.2,1);translate:0 84px;scale:.94}entry 88%,exit 0%{translate:0;scale:1}exit 100%{translate:0 26px;scale:.97}}@keyframes pane-late{entry 0%,entry 8%{animation-timing-function:cubic-bezier(.2,.7,.2,1);translate:0 84px;scale:.94}entry 96%,exit 0%{translate:0;scale:1}exit 100%{translate:0 26px;scale:.97}}@keyframes settle{0%{opacity:0;animation-timing-function:cubic-bezier(.2,.7,.2,1);transform:translateY(44px)scale(.97)}53%{opacity:1}}@keyframes media-settle{0%{scale:1.18}to{scale:1.08}}@keyframes media-drift{0%{translate:0 -7%}to{translate:0}}@keyframes phone-drift{0%{translate:0 5%}to{translate:0 -5%}}@keyframes phone-drift-far{0%{translate:0 10%}to{translate:0 -8%}}@keyframes cover-drift{0%{translate:0 3%}to{translate:0 -3%}}@keyframes light-a{50%{opacity:.55;transform:translate(18vw,48vh)}to{opacity:.85;transform:translate(6vw,86vh)}}@keyframes light-b{50%{transform:translate(-16vw,38vh)}to{transform:translate(-6vw,-14vh)}}@keyframes light-c{50%{transform:translate(22vw,-30vh)}to{transform:translate(40vw,-58vh)}}@keyframes tint-travel{to{translate:0 -200vh}}@keyframes idle-a{30%{rotate:6deg;scale:1.1 .93}65%{rotate:-3deg;scale:.95 1.07}to{rotate:4deg;scale:1.05 .98}}@keyframes idle-b{35%{rotate:-5deg;scale:.93 1.08}70%{rotate:3deg;scale:1.08 .95}to{rotate:-2deg;scale:1.02 1.04}}@keyframes idle-c{40%{rotate:5deg;scale:1.08 .94}75%{rotate:-2deg;scale:.96 1.06}to{rotate:3deg;scale:1.04 1}}@keyframes idle-tint{50%{rotate:1deg;scale:1.03 .985}to{rotate:-.8deg;scale:.98 1.015}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:0s!important}.theme-toggle-glyphs svg{transition:none}.ambient-light,.swell,.focus,.glass-shadow,.terrain-lit{display:none}}@media (prefers-reduced-transparency:reduce){.glass{background:var(--surface-solid);-webkit-backdrop-filter:none;backdrop-filter:none}.glass:before,.glass-lens,.link-lens,.terrain,.terrain-lit,.focus,.swell,.atmosphere:after{display:none}}@media (forced-colors:active){.atmosphere,.ambient-light,.terrain,.terrain-lit,.glass-shadow,.glass-lens,.link-lens{display:none}.glass{-webkit-backdrop-filter:none;backdrop-filter:none;border:1px solid canvastext}.glass:before,.glass:after{display:none}}@media (min-width:1600px){:root{--max:1240px}}@media (max-width:1023px){:root{--gutter:32px}.toolbox{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:759px){:root{--gutter:24px}.nav-sections{display:none}.nav-resume{margin-left:auto}.intro{grid-template-columns:minmax(0,1fr);gap:24px}.portrait-slot{--pane-radius:26px;order:-1;justify-self:start}.portrait{--bezel:5px;--refraction:2px;aspect-ratio:1;width:88px;padding:5px}.portrait-frame{--frame-radius:21px}.project-grid,.jobs{grid-template-columns:minmax(0,1fr)}}@media (max-width:559px){:root{--gutter:16px;--nav-height:52px;--radius:20px;--glass-blur:10px}.project,.contact{--bezel:18px;--refraction:6px}.site-nav{width:calc(100% - 2 * var(--gutter));margin-top:10px;padding:0 6px 0 8px;top:10px}.nav-home{gap:8px;font-size:14.5px}.nav-mark{width:28px;height:28px}.nav-resume{height:38px;padding:0 12px;font-size:14px}.theme-toggle{width:38px;height:38px}.intro{padding-top:40px}.intro-body{font-size:16.5px}.project{padding:8px 8px 22px}.project>:not(.project-media,.glass-lens){margin-inline:10px}.project-media{--frame-radius:13px}.project h3{font-size:22px}.project-summary{font-size:16px}.phone{border-radius:10px}.toolbox{gap:28px 16px}.toolbox-group li{gap:10px;font-size:14.5px}.tool-tile{width:32px;height:32px}.contact{padding:26px 22px}}@media print{.atmosphere,.ambient-light,.terrain,.terrain-lit,.site-nav,.skip-link,.copy-email{display:none}.glass{box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none;background:0 0}.glass:before,.glass:after,.glass-shadow,.glass-lens{display:none}}
