@font-face{font-family:__inter_53f2d8;src:url(/_next/static/media/6c596dfcddeca1e9-s.p.woff2) format("woff2");font-display:swap;font-weight:100 900}@font-face{font-family:__inter_Fallback_53f2d8;src:local("Arial");ascent-override:89.79%;descent-override:22.36%;line-gap-override:0.00%;size-adjust:107.89%}.__className_53f2d8{font-family:__inter_53f2d8,__inter_Fallback_53f2d8}.__variable_53f2d8{--font-sans:"__inter_53f2d8","__inter_Fallback_53f2d8"}@font-face{font-family:__mono_3d904d;src:url(/_next/static/media/a865edea076e0166-s.p.woff2) format("woff2");font-display:swap;font-weight:100 800}@font-face{font-family:__mono_Fallback_3d904d;src:local("Arial");ascent-override:77.57%;descent-override:22.82%;line-gap-override:0.00%;size-adjust:131.49%}.__className_3d904d{font-family:__mono_3d904d,__mono_Fallback_3d904d}.__variable_3d904d{--font-mono:"__mono_3d904d","__mono_Fallback_3d904d"}:root{--bg:#f4f2ee;--paper:#fbfaf8;--ink:#16150f;--dim:#76736a;--line:#e0ddd5;--acc:#ff4d2e;--blue:#1a47ff;--green:#0a8f3c;--font-sans:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;--font-mono:ui-monospace,Menlo,Consolas,monospace}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{font-family:var(--font-sans);background:var(--bg);color:var(--ink);line-height:1.55;-webkit-font-smoothing:antialiased}::selection{background:var(--acc);color:#fff}.mono{font-family:var(--font-mono)}.reveal{opacity:0;transform:translateY(24px);transition:.7s cubic-bezier(.16,1,.3,1)}.reveal.in{opacity:1;transform:none}nav{justify-content:space-between;padding:22px 6vw;position:-webkit-sticky;position:sticky;top:0;z-index:30;background:hsla(40,21%,95%,.82);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}.brand,nav{display:flex;align-items:center}.brand{font-weight:800;letter-spacing:-.4px;font-size:17px;gap:8px}.brand .d{width:9px;height:9px;border-radius:50%;background:var(--acc)}.menu{display:flex;align-items:center}.menu a{color:var(--dim);text-decoration:none;margin-left:24px;font-size:14px;font-weight:500;transition:.2s}.menu a:hover{color:var(--ink)}.lang{display:inline-flex;margin-left:24px;border:1px solid var(--line);border-radius:99px;overflow:hidden}.lang button{border:none;background:transparent;font-family:inherit;font-size:12px;font-weight:700;letter-spacing:.5px;padding:7px 11px;color:var(--dim);cursor:pointer;transition:.2s}.lang button.on{background:var(--ink);color:var(--paper)}.lang button:not(.on):hover{color:var(--ink)}.hero{padding:12vh 6vw 6vh;max-width:1080px}.eyebrow{font-size:13px;letter-spacing:1.5px;text-transform:uppercase;color:var(--dim);font-weight:600;margin-bottom:24px;display:flex;gap:14px;align-items:center}.eyebrow:before{content:"";width:46px;height:1px;background:var(--ink)}h1{font-size:clamp(40px,6.8vw,90px);font-weight:800;letter-spacing:-3px;line-height:.98}h1 .acc{color:var(--acc)}h1 .u{text-decoration:underline;-webkit-text-decoration-color:var(--acc);text-decoration-color:var(--acc);text-underline-offset:8px;text-decoration-thickness:3px}.hero p{font-size:clamp(18px,2vw,23px);color:var(--dim);max-width:640px;margin-top:32px}.hero p b{color:var(--ink);font-weight:600}.cta{display:flex;gap:14px;margin-top:36px;flex-wrap:wrap}.btn{padding:15px 28px;border-radius:99px;font-weight:600;text-decoration:none;font-size:15px;transition:.25s;display:inline-block;border:none;cursor:pointer;font-family:inherit}.btn.p{background:var(--ink);color:var(--paper)}.btn.p:hover{background:var(--acc);transform:translateY(-2px)}.btn.g{border:1px solid var(--ink);color:var(--ink);background:transparent}.btn.g:hover{background:var(--ink);color:var(--paper)}.ticker{border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:26px 0;overflow:hidden;white-space:nowrap;background:var(--paper)}.ticker .lbl{display:block;text-align:center;font-size:11px;letter-spacing:2px;text-transform:uppercase;color:var(--dim);font-weight:700;margin-bottom:18px}.tk{display:inline-flex;align-items:center;gap:56px;animation:scroll 34s linear infinite}.ticker:hover .tk{animation-play-state:paused}.tk a{display:inline-flex;align-items:center;gap:10px;text-decoration:none;color:var(--dim);font-weight:600;font-size:15px}.tk a svg{height:24px;width:24px;filter:grayscale(1);opacity:.55;transition:.25s}.tk a:hover svg{filter:grayscale(0);opacity:1;transform:translateY(-2px)}.tk a:hover{color:var(--ink)}@keyframes scroll{to{transform:translateX(-50%)}}section{padding:9vh 6vw;max-width:1180px;margin:0 auto}.sechead{display:grid;grid-template-columns:auto 1fr;grid-gap:22px;gap:22px;align-items:baseline;margin-bottom:42px;border-bottom:1px solid var(--line);padding-bottom:20px}.sechead .no{font-size:14px;color:var(--acc);font-weight:700}.sechead h2{font-size:clamp(28px,4vw,52px);font-weight:800;letter-spacing:-1.8px}.sechead .note{grid-column:2;color:var(--dim);font-size:16px;max-width:560px}.anchor{margin-left:9px;font-weight:700;text-decoration:none;color:var(--dim);opacity:0;transition:.2s}.sechead:hover .anchor,.tagline:hover .anchor{opacity:.5}.anchor:hover{opacity:1;color:var(--acc)}.personal .anchor{color:#9b968a}.personal .anchor:hover{color:#fc4c02}.toggle{display:inline-flex;background:var(--paper);border:1px solid var(--line);border-radius:99px;padding:5px;gap:4px}.toggle button{border:none;background:transparent;padding:11px 22px;border-radius:99px;font-family:inherit;font-size:13px;font-weight:700;letter-spacing:.3px;color:var(--dim);cursor:pointer;transition:.25s}.toggle button.active{background:var(--ink);color:var(--paper)}.toggle button.active.dev{background:var(--green)}.caps{margin-top:30px}.cap{display:grid;grid-template-columns:58px 1fr;grid-gap:24px;gap:24px;align-items:start;padding:26px 6px;border-bottom:1px solid var(--line);transition:.3s}.cap:hover{background:var(--paper);padding-left:20px;padding-right:20px;border-radius:14px}.cap .cno{font-size:14px;color:var(--dim);font-weight:600;font-feature-settings:"tnum";padding-top:4px}.cap:hover .cno{color:var(--acc)}.cap .human{font-size:clamp(20px,2.6vw,32px);font-weight:800;letter-spacing:-1px;line-height:1.15;color:var(--ink)}.cap .devcard,.caps.devmode .human{display:none}.caps.devmode .devcard{display:block;animation:devup .45s cubic-bezier(.16,1,.3,1)}@keyframes devup{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.devcard{max-width:680px;background:#0f1117;border:1px solid #20242e;border-radius:12px;overflow:hidden;box-shadow:0 16px 40px rgba(15,17,23,.18);font-family:var(--font-mono)}.devcard .bar{display:flex;align-items:center;gap:7px;padding:9px 13px;background:#161a22;border-bottom:1px solid #20242e}.devcard .bar i{width:11px;height:11px;border-radius:50%}.devcard .bar .r{background:#ff5f56}.devcard .bar .y{background:#ffbd2e}.devcard .bar .g{background:#27c93f}.devcard .bar .fn{margin-left:8px;color:#5c6b7a;font-size:12px}.devcard .body{padding:15px 17px;font-size:14px;line-height:1.7;color:#d7dde8}.devcard .cm{color:#5f9c6b}.devcard .ln{margin-top:10px;word-break:break-word}.devcard .kw{color:#c792ea}.devcard .fnc{color:#82aaff}.devcard .str{color:#ffb86b}.devcard .pn{color:#5c6b7a}.work>a{display:grid;grid-template-columns:64px 1.3fr 1fr auto;grid-gap:24px;gap:24px;align-items:center;padding:28px 6px;border-bottom:1px solid var(--line);text-decoration:none;color:var(--ink);transition:.3s}.work>a:hover{background:var(--paper);padding-left:20px;padding-right:20px;border-radius:14px}.work .sechead .no{color:var(--acc)}.work>a .no{font-size:14px;color:var(--dim);font-weight:600}.work h3{font-size:clamp(22px,3vw,36px);font-weight:800;letter-spacing:-1px}.work .tags{display:flex;gap:7px;margin-top:8px;flex-wrap:wrap}.work .tag{font-size:11px;font-weight:700;text-transform:uppercase;padding:4px 9px;border-radius:99px;background:var(--ink);color:var(--paper)}.work .tag.acc{background:var(--acc)}.work .desc{color:var(--dim);font-size:15px}.work .arrow{width:22px;height:22px;color:var(--acc);transition:.3s;flex:none}.work>a:hover .arrow{transform:translate(3px,-3px)}.work .rowflat{display:grid;grid-template-columns:64px 1.3fr 1fr auto;grid-gap:24px;gap:24px;align-items:center;padding:28px 6px;border-bottom:1px solid var(--line);color:var(--ink)}.linkchips{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}.linkchips span{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;font-weight:700;padding:7px 13px;border-radius:99px;border:1px solid var(--line);color:var(--ink)}.linkchips span svg{height:16px;width:16px}.earlier{display:grid;grid-template-columns:64px 1fr;grid-gap:24px;gap:24px;align-items:baseline;padding:26px 6px;border-bottom:1px solid var(--line)}.earlier .no{font-size:14px;color:var(--dim);font-weight:600}.earlier h3{font-size:clamp(22px,3vw,36px);font-weight:800;letter-spacing:-.4px;margin-bottom:16px}.earlier .elist{list-style:none;display:grid;margin-top:2px}.earlier .elist li{display:grid;grid-template-columns:minmax(150px,220px) 1fr;grid-gap:16px;gap:16px;align-items:baseline;padding:8px 0;border-top:1px solid var(--line)}.earlier .elist li:first-child{border-top:0}.earlier .elist .n{color:var(--ink);font-weight:600;font-size:14px;text-decoration:none;transition:.2s}.earlier .elist a.n:hover{color:var(--acc)}.earlier .elist .d{color:var(--dim);font-size:13px}@media(max-width:620px){.earlier .elist li{grid-template-columns:1fr;gap:2px}}.services{margin-top:40px;border:1px dashed var(--line);border-radius:18px;padding:30px 32px;background:var(--paper);display:grid;grid-template-columns:1fr auto;grid-gap:24px;gap:24px;align-items:center}.services .k{font-size:11px;letter-spacing:1.5px;text-transform:uppercase;color:var(--acc);font-weight:700;margin-bottom:8px}.services h3{font-size:clamp(20px,2.4vw,28px);font-weight:800;letter-spacing:-.6px;margin-bottom:7px}.services p{color:var(--dim);font-size:15px;max-width:560px}.services .btn{display:inline-flex;align-items:center;justify-content:center;text-align:center;white-space:nowrap;align-self:center}@media(max-width:820px){.services{grid-template-columns:1fr}.services .btn{justify-self:start}}.lede{font-size:19px}.lede b{font-weight:700}.personal{background:var(--ink);color:var(--paper);max-width:none;margin-top:4vh}.personal .inner{max-width:1180px;margin:0 auto}.personal .tagline{font-size:12px;letter-spacing:3px;text-transform:uppercase;color:#9b968a;font-weight:700;margin-bottom:18px;display:flex;align-items:center;gap:14px}.personal .tagline:before{content:"";height:1px;background:#3a3830;flex:0 0 40px}.personal h2{font-size:clamp(26px,3.6vw,44px);font-weight:800;letter-spacing:-1.4px;margin-bottom:14px}.personal p{color:#b8b3a6;max-width:560px;font-size:17px}.personal .run{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:0;gap:0;border:1px solid #34322b;border-radius:16px;overflow:hidden;margin-top:30px}.personal .run .s{padding:26px 22px;border-right:1px solid #34322b}.personal .run .s:last-child{border-right:0}.personal .run b{display:block;font-size:clamp(24px,3vw,38px);font-weight:800;letter-spacing:-1px;color:#fff}.personal .run span{font-size:11px;color:#9b968a;text-transform:uppercase;letter-spacing:1px;font-weight:600}.personal .strava-link{display:inline-flex;align-items:center;gap:8px;margin-top:18px;color:#fc4c02;font-weight:700;text-decoration:none;font-size:14px;transition:opacity .2s}.personal .strava-link svg{height:18px;width:18px}.personal .strava-link .arrow{transition:transform .2s}.personal .strava-link:hover{opacity:.8}.personal .strava-link:hover .arrow{transform:translate(2px,-2px)}.contact{display:grid;grid-template-columns:1fr 1fr;grid-gap:56px;gap:56px}.field{margin-bottom:20px}.field label{display:block;font-size:13px;color:var(--dim);font-weight:600;margin-bottom:8px}.field input,.field textarea{width:100%;padding:0 0 12px;background:transparent;border:0;border-bottom:1px solid var(--ink);font-size:19px;font-family:inherit;color:var(--ink)}.field input:focus,.field textarea:focus{outline:none;border-color:var(--acc)}.formnote{margin-top:14px;font-size:14px;font-weight:600}.formnote.ok{color:var(--green)}.formnote.err{color:var(--acc)}footer{padding:40px 6vw;border-top:1px solid var(--line);display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px;color:var(--dim);font-size:14px}@media(max-width:820px){.contact{grid-template-columns:1fr;gap:30px}.work>a{grid-template-columns:40px 1fr auto}.work .desc{display:none}.personal .run{grid-template-columns:repeat(2,1fr)}.menu a{margin-left:14px}.cap{grid-template-columns:38px 1fr;gap:14px}}