@font-face{font-family:Fraunces;font-style:normal;font-weight:400;font-display:swap;src:url(../media/1e219c03c996efbd-s.00ewlnc1znsu7.woff2)format("woff2");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:Fraunces;font-style:normal;font-weight:400;font-display:swap;src:url(../media/b35b0dbffda7f2c4-s.0bnyh_2yo1emg.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fraunces;font-style:normal;font-weight:400;font-display:swap;src:url(../media/03bda585a99c6450-s.p.0glcd8n2pdab0.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:Fraunces;font-style:normal;font-weight:500;font-display:swap;src:url(../media/1e219c03c996efbd-s.00ewlnc1znsu7.woff2)format("woff2");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:Fraunces;font-style:normal;font-weight:500;font-display:swap;src:url(../media/b35b0dbffda7f2c4-s.0bnyh_2yo1emg.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fraunces;font-style:normal;font-weight:500;font-display:swap;src:url(../media/03bda585a99c6450-s.p.0glcd8n2pdab0.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:Fraunces;font-style:normal;font-weight:600;font-display:swap;src:url(../media/1e219c03c996efbd-s.00ewlnc1znsu7.woff2)format("woff2");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:Fraunces;font-style:normal;font-weight:600;font-display:swap;src:url(../media/b35b0dbffda7f2c4-s.0bnyh_2yo1emg.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fraunces;font-style:normal;font-weight:600;font-display:swap;src:url(../media/03bda585a99c6450-s.p.0glcd8n2pdab0.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:Fraunces;font-style:normal;font-weight:700;font-display:swap;src:url(../media/1e219c03c996efbd-s.00ewlnc1znsu7.woff2)format("woff2");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:Fraunces;font-style:normal;font-weight:700;font-display:swap;src:url(../media/b35b0dbffda7f2c4-s.0bnyh_2yo1emg.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fraunces;font-style:normal;font-weight:700;font-display:swap;src:url(../media/03bda585a99c6450-s.p.0glcd8n2pdab0.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:Fraunces;font-style:normal;font-weight:900;font-display:swap;src:url(../media/1e219c03c996efbd-s.00ewlnc1znsu7.woff2)format("woff2");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:Fraunces;font-style:normal;font-weight:900;font-display:swap;src:url(../media/b35b0dbffda7f2c4-s.0bnyh_2yo1emg.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fraunces;font-style:normal;font-weight:900;font-display:swap;src:url(../media/03bda585a99c6450-s.p.0glcd8n2pdab0.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:Fraunces Fallback;src:local(Times New Roman);ascent-override:84.71%;descent-override:22.09%;line-gap-override:0.0%;size-adjust:115.45%}.fraunces_3e250647-module__IpwXLW__className{font-family:Fraunces,Fraunces Fallback;font-style:normal}.fraunces_3e250647-module__IpwXLW__variable{--font-display:"Fraunces", "Fraunces Fallback"}
@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:400;font-display:swap;src:url(../media/91bd2e40df15814e-s.1zpt8rrvsu92z.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:400;font-display:swap;src:url(../media/a63431c4ac64ea8b-s.0mxk1tgo-hrwu.woff2)format("woff2");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:Hanken Grotesk;font-style:normal;font-weight:400;font-display:swap;src:url(../media/8b4ed0a90d903ab5-s.1akpt5k8ff_pw.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:400;font-display:swap;src:url(../media/c47649aa31f9e140-s.p.2rlmbw0a3_pri.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:Hanken Grotesk;font-style:normal;font-weight:500;font-display:swap;src:url(../media/91bd2e40df15814e-s.1zpt8rrvsu92z.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:500;font-display:swap;src:url(../media/a63431c4ac64ea8b-s.0mxk1tgo-hrwu.woff2)format("woff2");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:Hanken Grotesk;font-style:normal;font-weight:500;font-display:swap;src:url(../media/8b4ed0a90d903ab5-s.1akpt5k8ff_pw.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:500;font-display:swap;src:url(../media/c47649aa31f9e140-s.p.2rlmbw0a3_pri.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:Hanken Grotesk;font-style:normal;font-weight:600;font-display:swap;src:url(../media/91bd2e40df15814e-s.1zpt8rrvsu92z.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:600;font-display:swap;src:url(../media/a63431c4ac64ea8b-s.0mxk1tgo-hrwu.woff2)format("woff2");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:Hanken Grotesk;font-style:normal;font-weight:600;font-display:swap;src:url(../media/8b4ed0a90d903ab5-s.1akpt5k8ff_pw.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:600;font-display:swap;src:url(../media/c47649aa31f9e140-s.p.2rlmbw0a3_pri.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:Hanken Grotesk;font-style:normal;font-weight:700;font-display:swap;src:url(../media/91bd2e40df15814e-s.1zpt8rrvsu92z.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:700;font-display:swap;src:url(../media/a63431c4ac64ea8b-s.0mxk1tgo-hrwu.woff2)format("woff2");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:Hanken Grotesk;font-style:normal;font-weight:700;font-display:swap;src:url(../media/8b4ed0a90d903ab5-s.1akpt5k8ff_pw.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:700;font-display:swap;src:url(../media/c47649aa31f9e140-s.p.2rlmbw0a3_pri.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:Hanken Grotesk Fallback;src:local(Arial);ascent-override:99.07%;descent-override:30.02%;line-gap-override:0.0%;size-adjust:100.94%}.hanken_grotesk_45bd6d0b-module__DFXEVW__className{font-family:Hanken Grotesk,Hanken Grotesk Fallback;font-style:normal}.hanken_grotesk_45bd6d0b-module__DFXEVW__variable{--font-body:"Hanken Grotesk", "Hanken Grotesk Fallback"}
:root{--bg:#0a0a0c;--bg-soft:#111114;--panel:#141418;--ink:#f5f2ea;--muted:#9b9890;--faint:#6b6862;--line:#f5f2ea1f;--line-strong:#f5f2ea3d;--accent:#f2b545;--accent-soft:#f2b54524;--max:1080px;--font-display:"Fraunces", Georgia, serif;--font-body:"Hanken Grotesk", system-ui, sans-serif}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--ink);font-family:var(--font-body);-webkit-font-smoothing:antialiased;font-size:17px;line-height:1.65;position:relative;overflow-x:hidden}body:before{content:"";z-index:0;pointer-events:none;opacity:.05;mix-blend-mode:overlay;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");position:fixed;inset:0}body:after{content:"";z-index:0;pointer-events:none;background:radial-gradient(60vw 60vw at 88% -10%,#f2b54529,#0000 60%),radial-gradient(42vw 42vw at -5% 105%,#f2b5450f,#0000 60%);position:fixed;inset:0}.wrap{z-index:1;max-width:var(--max);margin:0 auto;padding:0 28px;position:relative}.topbar{z-index:2;border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;padding:22px 0;display:flex;position:relative}.mono{font-family:var(--font-display);letter-spacing:-.01em;font-size:18px;font-weight:700}.mono span{color:var(--accent)}.badge{border:1px solid var(--line-strong);letter-spacing:.18em;text-transform:uppercase;color:var(--accent);background:var(--accent-soft);white-space:nowrap;border-radius:999px;align-items:center;gap:10px;padding:8px 16px;font-size:11px;display:inline-flex}.badge .dot{background:var(--accent);width:7px;height:7px;box-shadow:0 0 12px var(--accent);border-radius:50%}.hero{padding:96px 0 72px}.kicker{letter-spacing:.28em;text-transform:uppercase;color:var(--accent);font-size:12px;font-weight:600}.hero h1{font-family:var(--font-display);letter-spacing:-.025em;margin-top:22px;font-size:clamp(44px,8.4vw,104px);font-weight:600;line-height:.98}.hero h1 .accent{color:var(--accent);font-style:italic;font-weight:500}.hero .lede{max-width:640px;color:var(--ink);margin-top:30px;font-size:clamp(18px,2.4vw,22px)}.meta-row{flex-wrap:wrap;gap:22px 46px;margin-top:40px;display:flex}.meta-row .item b{font-family:var(--font-display);color:var(--ink);font-size:17px;font-weight:600;display:block}.meta-row .item span{letter-spacing:.16em;text-transform:uppercase;color:var(--muted);font-size:12px}section{border-top:1px solid var(--line);padding:74px 0}.sec-head{align-items:baseline;gap:18px;margin-bottom:42px;display:flex}.sec-num{font-family:var(--font-display);color:var(--accent);font-size:14px;font-weight:600}.sec-title{font-family:var(--font-display);letter-spacing:-.01em;font-size:clamp(26px,4vw,40px);font-weight:600;line-height:1.1}.sec-title small{font-family:var(--font-body);letter-spacing:.22em;text-transform:uppercase;color:var(--muted);margin-bottom:8px;font-size:12px;font-weight:500;display:block}.about p{max-width:780px;color:var(--ink);font-size:clamp(18px,2.2vw,21px)}.about p+p{color:var(--muted);margin-top:20px;font-size:clamp(16px,2vw,18px)}.job{border-top:1px solid var(--line);grid-template-columns:190px 1fr;gap:28px;padding:28px 0;display:grid}.job:first-of-type{border-top:0;padding-top:0}.job .yr{color:var(--muted);font-variant-numeric:tabular-nums;padding-top:4px;font-size:14px}.job h3{font-family:var(--font-display);font-size:22px;font-weight:600}.job .role{color:var(--accent);margin-top:3px;font-size:14px}.job p{color:var(--muted);max-width:660px;margin-top:12px;font-size:15px}.grid{grid-template-columns:repeat(2,1fr);gap:18px;display:grid}.card{border:1px solid var(--line);background:linear-gradient(#ffffff05,#0000);border-radius:14px;padding:28px;transition:transform .35s cubic-bezier(.2,.7,.2,1),border-color .35s,background .35s;position:relative;overflow:hidden}.card:hover{border-color:var(--line-strong);background:linear-gradient(180deg, var(--accent-soft), transparent);transform:translateY(-4px)}.card .corner{background:radial-gradient(circle at top right, var(--accent-soft), transparent 70%);opacity:0;width:90px;height:90px;transition:opacity .35s;position:absolute;top:0;right:0}.card:hover .corner{opacity:1}.card .tag{letter-spacing:.16em;text-transform:uppercase;color:var(--accent);font-size:11px}.card h3{font-family:var(--font-display);margin-top:10px;font-size:24px;font-weight:600}.card p{color:var(--muted);margin-top:12px;font-size:15px}.card .stack{flex-wrap:wrap;gap:8px;margin-top:18px;display:flex}.chip{color:var(--ink);border:1px solid var(--line);border-radius:999px;padding:4px 11px;font-size:12px}.card a.link{color:var(--accent);border-bottom:1px solid #0000;margin-top:18px;font-size:14px;text-decoration:none;transition:border-color .3s;display:inline-block}.card a.link:hover{border-color:var(--accent)}.skills{grid-template-columns:repeat(2,1fr);gap:34px 50px;display:grid}.skill-group h4{font-family:var(--font-display);color:var(--ink);margin-bottom:14px;font-size:18px;font-weight:600}.skill-group .chips{flex-wrap:wrap;gap:8px;display:flex}.certs{flex-wrap:wrap;gap:12px;display:flex}.cert{border:1px solid var(--line);color:var(--ink);border-radius:10px;padding:13px 17px;font-size:14px}.cert span{color:var(--muted);letter-spacing:.12em;text-transform:uppercase;font-size:11px;display:block}.contact{grid-template-columns:repeat(2,1fr);gap:14px;max-width:760px;display:grid}.contact a{border:1px solid var(--line);color:var(--ink);border-radius:12px;justify-content:space-between;align-items:center;padding:16px 20px;text-decoration:none;transition:border-color .3s,background .3s;display:flex}.contact a:hover{border-color:var(--accent);background:var(--accent-soft)}.contact a .k{color:var(--muted);letter-spacing:.12em;text-transform:uppercase;font-size:12px}.contact a .v{color:var(--accent);font-weight:600}.cv-row{margin-top:28px}.cv-btn{border:1px solid var(--line-strong);background:var(--accent-soft);color:var(--accent);font-family:var(--font-body);letter-spacing:.04em;cursor:pointer;border-radius:999px;align-items:center;gap:8px;padding:12px 22px;font-size:14px;font-weight:600;transition:border-color .3s,background .3s;display:inline-flex}.cv-btn:hover{border-color:var(--accent);background:#f2b54533}footer{border-top:1px solid var(--line);color:var(--faint);flex-wrap:wrap;justify-content:space-between;gap:10px;padding:60px 0 80px;font-size:13px;display:flex}.reveal{opacity:0;animation:.9s cubic-bezier(.2,.7,.2,1) forwards rise;animation-delay:var(--d,0s);transform:translateY(20px)}@keyframes rise{to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){.reveal{opacity:1;animation:none;transform:none}}@media (max-width:820px){.grid,.skills,.contact{grid-template-columns:1fr}.job{grid-template-columns:1fr;gap:6px}.job .yr{order:-1}.badge{display:none}}@media print{body{color:#111;background:#fff}body:before,body:after,.badge,.corner{display:none}.wrap{max-width:100%}section,.card,.contact a,.cert{border-color:#ccc}.reveal{opacity:1!important;transform:none!important}a,.hero h1 .accent,.kicker,.sec-num,.job .role,.card .tag,.contact a .v,.card a.link{color:#111}.cv-btn{display:none}}
