@font-face{font-family:Geist;src:url(/fonts/geist-latin.woff2) format("woff2");font-style:normal;font-weight:100 900;font-display:swap}@font-face{font-family:Geist Mono;src:url(/fonts/geist-mono-latin.woff2) format("woff2");font-style:normal;font-weight:100 900;font-display:swap}:root{font-family:Geist,system-ui,sans-serif;color-scheme:dark;--background: #06070E;--surface: #211431;--surface-raised: #211431;--text: #f6f4f5;--muted: #9a9298;--subtle: #9a9298;--line: #311a4d;--grid: rgb(246 244 245 / .035);--accent: #642CA9;--accent-solid: #642CA9;--accent-on: #1a1216;--accent-hover: #401e69;--tag: #381d58;--tag-text: #e8d2e3;--focus: #d8b8d2;--scroll-progress: 0}:root[data-theme=light]{color-scheme:light;--background: #F7F7FF;--surface: #f6f4f5;--surface-raised: #ece7ea;--text: #1a1216;--muted: #625a60;--subtle: #6c6269;--line: #d3cdd1;--grid: rgb(74 37 69 / .045);--accent: #4a2545;--accent-solid: #4a2545;--accent-on: #f6f4f5;--accent-hover: #63345c;--tag: #e8dce5;--tag-text: #4a2545;--focus: #4a2545}*,*:before,*:after{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:78px}body{margin:0;background:var(--background);color:var(--text);min-width:320px;-webkit-font-smoothing:antialiased}body,button,a{-webkit-tap-highlight-color:transparent}button,a{touch-action:manipulation}button{font:inherit}a{color:inherit;text-decoration:none}a:hover{color:var(--accent)}::selection{background:var(--accent-solid);color:var(--accent-on)}:focus-visible{outline:2px solid var(--focus);outline-offset:4px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:fixed;top:12px;left:12px;z-index:100;padding:10px 14px;transform:translateY(-180%);background:var(--accent-solid);color:var(--accent-on);border-radius:6px}.skip-link:focus{transform:translateY(0)}.scroll-progress{position:fixed;top:0;left:0;z-index:40;width:100%;height:2px;background:var(--accent-solid);transform:scaleX(var(--scroll-progress));transform-origin:left;pointer-events:none}.container{width:min(100% - 48px,1080px);margin-inline:auto}.narrow-container{width:min(100% - 48px,980px)}.site-header{position:sticky;top:0;z-index:20;background:var(--background);border-bottom:1px solid var(--line)}.header-inner{min-height:60px;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:28px}.brand{width:max-content;font-family:Geist Mono,monospace;font-size:14px;font-weight:600;letter-spacing:-.035em}.brand span{color:var(--accent)}.site-nav{display:flex;align-items:center;gap:29px}.site-nav a{color:var(--muted);font-size:14px;transition:color .15s ease}.site-nav a:hover{color:var(--text)}.header-actions{display:flex;justify-content:flex-end;gap:8px}.icon-button{display:grid;place-items:center;width:36px;height:36px;border:0;border-radius:6px;background:transparent;color:var(--muted);cursor:pointer}.icon-button:hover{background:var(--surface-raised);color:var(--text)}.menu-toggle{display:none}.grid-surface{background-image:linear-gradient(to right,var(--grid) 1px,transparent 1px),linear-gradient(to bottom,var(--grid) 1px,transparent 1px);background-size:24px 24px}.hero{min-height:calc(100dvh - 60px);display:flex;align-items:center;border-bottom:1px solid var(--line)}.hero-inner{display:flex;flex-direction:column;align-items:center;text-align:center;padding-top:76px;padding-bottom:30px}.portrait{display:block;width:118px;height:118px;margin-bottom:33px;border:1px solid var(--accent);border-radius:8px;background:var(--surface);object-fit:cover;object-position:center 12%;box-shadow:0 16px 42px #1a121621;animation:portrait-pop .7s .2s cubic-bezier(.2,.8,.2,1) both}.hero h1{max-width:1000px;margin:0;font-size:clamp(43px,5.5vw,76px);font-weight:800;line-height:1.03;letter-spacing:-.04em;text-transform:uppercase;text-wrap:balance;animation:hero-appear .6s .3s ease-out both}.hero-role{margin:24px 0 0;color:var(--accent);font-family:Geist Mono,monospace;font-size:clamp(14px,1.45vw,18px);font-weight:500;line-height:1.5;animation:hero-appear .6s .35s ease-out both}.hero-intro{max-width:700px;margin:23px 0 0;color:var(--muted);font-size:clamp(17px,1.8vw,22px);line-height:1.48;text-wrap:pretty;animation:hero-appear .6s .4s ease-out both}.hero-actions{display:flex;justify-content:center;flex-wrap:wrap;gap:14px;margin-top:35px;animation:hero-appear .6s .5s ease-out both}.button{min-height:46px;display:inline-flex;align-items:center;justify-content:center;gap:10px;padding:11px 21px;border:1px solid transparent;border-radius:6px;font-size:14px;font-weight:630;transition:background-color .15s ease,border-color .15s ease,transform .15s ease}.button:hover{transform:translateY(-2px)}.button:active{transform:scale(.98)}.button-primary{background:var(--accent-solid);color:var(--accent-on)}.button-primary:hover{background:var(--accent-hover);color:var(--accent-on)}.button-secondary{border-color:var(--line);background:var(--surface);color:var(--text)}.button-secondary:hover{border-color:var(--accent);color:var(--text)}.social-links{display:flex;gap:12px;margin-top:45px;animation:hero-fade .6s .6s ease-out both}.social-links a{display:grid;place-items:center;width:42px;height:42px;border:1px solid var(--line);border-radius:6px;background:var(--surface-raised);color:var(--text);transition:border-color .15s ease,color .15s ease,transform .15s ease}.social-links a:hover{color:var(--accent);border-color:var(--accent);transform:translateY(-2px)}.social-links a:active{transform:scale(.95)}.scroll-cue{margin-top:clamp(44px,7vh,90px);color:var(--subtle);animation:hero-fade .6s 1s both,cue-bob 1.5s 1.5s ease-in-out infinite}.scroll-cue:hover{color:var(--accent)}.section{padding:112px 0 122px;border-bottom:1px solid var(--line)}.section-heading{margin-bottom:52px}.section-label{display:block;margin-bottom:13px;color:var(--accent);font-family:Geist Mono,monospace;font-size:12px;font-weight:600;letter-spacing:.14em;text-transform:uppercase}.section h2{margin:0;font-size:clamp(30px,3.4vw,47px);font-weight:700;letter-spacing:-.03em;line-height:1.16;text-wrap:balance}.section-heading>p{margin:16px 0 0;color:var(--muted);font-size:16px;line-height:1.6}.about-section{padding-block:105px 117px}.about-section .section-heading{margin-bottom:44px}.prose{max-width:76ch}.prose p{margin:0 0 18px;color:var(--muted);font-size:16px;line-height:1.77}.prose p:last-child{margin-bottom:0}.skills-section{padding-block:120px 126px}.skills-grid{display:grid;grid-template-columns:1fr 1fr;gap:42px 54px}.skill-group h3{margin:0 0 17px;color:var(--muted);font-family:Geist Mono,monospace;font-size:12px;font-weight:500;letter-spacing:.08em;text-transform:uppercase}.skill-list,.project-tags{display:flex;flex-wrap:wrap;gap:8px;padding:0;margin:0;list-style:none}.skill-list li{padding:7px 12px;border:1px solid var(--line);border-radius:6px;background:var(--surface-raised);color:var(--text);font-size:13px;line-height:1.25;transition:border-color .15s ease,color .15s ease}.skill-list li:hover{border-color:var(--accent);color:var(--accent)}.projects-section{padding-block:117px 135px}.project-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:22px}.project-card{overflow:hidden;border:1px solid var(--line);border-radius:6px;background:var(--surface);transition:border-color .3s ease,box-shadow .3s ease}.project-card:hover{transform:translateY(-4px);border-color:var(--accent);box-shadow:0 16px 36px #1a12162e}.browser-bar{display:flex;align-items:center;gap:13px;min-height:43px;padding:0 14px;border-bottom:1px solid var(--line);background:var(--surface-raised)}.browser-dots{display:flex;gap:5px;flex:none}.browser-dots i{width:8px;height:8px;border-radius:50%;background:var(--accent)}.browser-dots i:nth-child(2){background:var(--muted)}.browser-dots i:nth-child(3){background:var(--text)}.browser-bar>span{min-width:0;flex:1;overflow:hidden;padding:4px 9px;border:1px solid var(--line);border-radius:6px;background:var(--background);color:var(--muted);font-family:Geist Mono,monospace;font-size:10px;text-overflow:ellipsis;white-space:nowrap}.project-preview{display:block;aspect-ratio:16 / 9;overflow:hidden;border-bottom:1px solid var(--line);background:#f6f4f5}.project-preview img{display:block;width:100%;height:100%;object-fit:cover;object-position:top center;transition:transform .25s ease}.project-preview:hover img{transform:scale(1.025)}.project-body{padding:24px}.project-topline{display:flex;justify-content:space-between;align-items:center;gap:12px}.project-mark{display:block;width:38px;height:38px;border-radius:6px}.project-topline a{display:inline-flex;align-items:center;gap:5px;color:var(--muted);font-size:12px}.project-topline a:hover{color:var(--accent)}.project-card h3{margin:18px 0 9px;font-size:24px;line-height:1.2;letter-spacing:-.025em}.project-summary{min-height:78px;margin:0;color:var(--muted);font-size:15px;line-height:1.65}.project-tags{gap:6px;margin-top:20px}.project-tags li{padding:5px 8px;border-radius:6px;background:var(--tag);color:var(--tag-text);font-family:Geist Mono,monospace;font-size:10px;line-height:1.25}.project-repo{display:inline-flex;align-items:center;gap:6px;margin-top:16px;color:var(--muted);font-size:12px}.project-repo:hover{color:var(--accent)}.project-details{margin-top:23px;padding-top:17px;border-top:1px solid var(--line)}.project-details summary{display:flex;align-items:center;width:max-content;gap:8px;color:var(--text);font-size:13px;font-weight:590;cursor:pointer;list-style:none}.project-details summary::-webkit-details-marker{display:none}.project-details summary svg{transition:transform .15s ease}.project-details[open] summary svg{transform:rotate(180deg)}.project-details ul{padding-left:18px;margin:17px 0 0;color:var(--muted);font-size:13px;line-height:1.6}.project-details li+li{margin-top:9px}.project-note{margin:14px 0 0;color:var(--subtle);font-size:12px;line-height:1.5}.education-section{padding-block:113px 126px}.education-row{display:flex;align-items:flex-start;justify-content:space-between;gap:28px;padding:27px 0 29px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.education-status,.education-kind,.languages-row>span{color:var(--accent);font-family:Geist Mono,monospace;font-size:12px;letter-spacing:.04em}.education-row h3{margin:10px 0 5px;font-size:19px;font-weight:640;letter-spacing:-.02em}.education-row p{margin:0;color:var(--muted);font-size:15px}.education-kind{color:var(--subtle);white-space:nowrap}.languages-row{display:flex;justify-content:space-between;gap:20px;padding-top:22px}.languages-row p{margin:0;color:var(--muted);font-size:14px}.languages-row p span{padding-inline:6px;color:var(--subtle)}.contact-section{padding-block:112px 128px}.contact-section h2{font-size:clamp(39px,5.5vw,66px)}.contact-section p{max-width:58ch;margin:22px 0 31px;color:var(--muted);font-size:18px;line-height:1.6}.contact-email{display:inline-flex;align-items:center;gap:12px;color:var(--text);font-size:clamp(19px,3.2vw,33px);font-weight:600;letter-spacing:-.025em;overflow-wrap:anywhere}.contact-email:hover{color:var(--accent)}.contact-links{display:flex;gap:25px;margin-top:37px}.contact-links a{display:inline-flex;align-items:center;gap:4px;color:var(--muted);font-size:14px}.contact-links a:hover{color:var(--accent)}.site-footer{padding-block:24px}.footer-inner{display:flex;align-items:center;justify-content:space-between;gap:20px;color:var(--subtle);font-size:12px}.footer-inner a:hover{color:var(--accent)}@media(min-width:900px){.hero-inner{display:grid;align-items:center;text-align:left;column-gap:68px;padding-block:92px 42px;grid-template-columns:260px minmax(0,1fr);grid-template-areas:"portrait title" "portrait role" "portrait intro" "portrait actions" "portrait social" "cue cue"}.portrait{width:260px;height:320px;justify-self:start}.hero h1{font-size:clamp(57px,6vw,80px)}.portrait{grid-area:portrait;margin:0}.hero h1{grid-area:title}.hero-role{grid-area:role;margin-top:15px}.hero-intro{grid-area:intro;margin-top:20px}.hero-actions{grid-area:actions;justify-content:flex-start;margin-top:29px}.social-links{grid-area:social;margin-top:28px}.scroll-cue{grid-area:cue;justify-self:start;margin-top:54px}}@keyframes hero-appear{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes hero-fade{0%{opacity:0}to{opacity:1}}@keyframes portrait-pop{0%{opacity:0;transform:scale(.78)}65%{opacity:1;transform:scale(1.03)}to{opacity:1;transform:scale(1)}}@keyframes cue-bob{0%,to{transform:translateY(0)}50%{transform:translateY(10px)}}@media(prefers-reduced-motion:no-preference){.motion-ready [data-reveal]{transition:opacity .5s ease-out,transform .5s ease-out,border-color .3s ease,box-shadow .3s ease}.motion-ready [data-reveal]:not(.is-visible){opacity:0;transform:translateY(16px)}.motion-ready [data-reveal=scale]:not(.is-visible){transform:scale(.9)}}@media(max-width:760px){.header-inner{grid-template-columns:1fr auto}.menu-toggle{display:grid}.site-nav{display:none;position:absolute;top:60px;left:0;right:0;flex-direction:column;align-items:stretch;gap:0;padding:10px 24px 19px;border-bottom:1px solid var(--line);background:var(--background);box-shadow:0 18px 28px #1a121624}.site-nav.is-open{display:flex}.site-nav a{padding:10px 0;font-size:16px}.hero-inner{padding-top:64px}.portrait{width:100px;height:100px;margin-bottom:28px}.hero h1{max-width:650px;font-size:clamp(38px,7vw,58px)}.hero-role{margin-top:20px}.hero-intro{max-width:560px}.section{padding-block:86px 95px}.skills-grid{gap:36px 28px}.project-grid{grid-template-columns:1fr}.project-summary{min-height:0}}@media(max-width:520px){.container,.narrow-container{width:min(100% - 38px,1080px)}.hero{min-height:calc(100dvh - 60px)}.hero-inner{padding-top:42px;padding-bottom:24px}.portrait{width:88px;height:88px;margin-bottom:25px}.hero h1{font-size:clamp(35px,9.3vw,45px)}.hero-role{font-size:13px}.hero-intro{margin-top:20px;font-size:16px}.hero-actions{width:100%;gap:10px;margin-top:27px}.button{flex:1 1 150px;padding-inline:12px}.social-links{margin-top:33px}.scroll-cue{margin-top:34px}.section h2{font-size:31px}.section-heading{margin-bottom:35px}.skills-grid{grid-template-columns:1fr;gap:32px}.education-row,.languages-row{flex-direction:column;gap:12px}.education-kind{display:none}.contact-section p{font-size:16px}.contact-email svg{flex:none;width:22px}.footer-inner{align-items:flex-start;flex-direction:column;gap:10px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation:none!important;transition-duration:.01ms!important}}
