.page-content[data-astro-cid-37fxchfa]{position:relative;z-index:1}.skip-link[data-astro-cid-37fxchfa]{position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden;background:var(--accent);color:var(--bg);padding:var(--space-2) var(--space-4);font-weight:600;z-index:9999;border-radius:0 0 4px;text-decoration:none}.skip-link[data-astro-cid-37fxchfa]:focus{position:fixed;left:0;top:0;width:auto;height:auto;overflow:visible}:root{--bg: #0A1929;--surface: #0F293F;--surface-elevated: #1A3A5C;--border: #1F4060;--text: #FFFFFF;--text-muted: #A7A6A8;--brand: #73A0BE;--brand-strong: #4A7A98;--accent: #A8C9DD;--success: #3FB950;--danger: #F85149;--font-heading: "Bricolage Grotesque Variable", "Bricolage Grotesque", system-ui, sans-serif;--font-body: "Inter Variable", "Inter", system-ui, sans-serif;--font-mono: "JetBrains Mono Variable", "JetBrains Mono", "Fira Code", monospace;--text-h1: clamp(3rem, 5vw + 1rem, 4.5rem);--text-h2: clamp(2rem, 3vw + .75rem, 3rem);--text-h3: clamp(1.25rem, 1.5vw + .5rem, 1.5rem);--text-body: clamp(1rem, .25vw + .875rem, 1.125rem);--text-caption: clamp(.8125rem, .1vw + .75rem, .875rem);--weight-regular: 400;--weight-medium: 500;--weight-semibold: 600;--weight-bold: 700;--leading-tight: 1.2;--leading-snug: 1.35;--leading-normal: 1.6;--leading-relaxed: 1.75;--space-0: 0px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--space-16: 64px;--space-20: 80px;--space-24: 96px;--space-32: 128px;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--radius-full: 9999px;--border-width: 1px;--border-width-strong: 2px;--clip-facet: 16px;--focus-ring: 0 0 0 3px var(--brand);--focus-ring-offset: 2px;--duration-fast: .15s;--duration-base: .2s;--duration-slow: .3s;--ease-out-expo: cubic-bezier(.16, 1, .3, 1);--ease-standard: cubic-bezier(.4, 0, .2, 1);--card-hover-transform: translateY(-2px);--card-hover-duration: var(--duration-fast);--reveal-translate: translateY(12px);--reveal-duration: var(--duration-base);--reveal-ease: var(--ease-out-expo);--z-below: -1;--z-base: 0;--z-raised: 10;--z-dropdown: 100;--z-sticky: 200;--z-overlay: 300;--z-modal: 400;--z-toast: 500;--container-max: 1200px;--container-padding: var(--space-4);--muted: var(--text-muted);--surface-2: var(--surface-elevated);--font-display: var(--font-heading)}*,*:before,*:after{box-sizing:border-box}*{margin:0;padding:0}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%;text-size-adjust:100%;tab-size:4}@media (prefers-reduced-motion: reduce){html:focus-within{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}body{min-height:100vh;-webkit-font-smoothing:antialiased;text-rendering:optimizeSpeed;line-height:1.6}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit;line-height:var(--leading-tight, 1.2)}ul[role=list],ol[role=list]{list-style:none}a:not([class]){text-decoration-skip-ink:auto}img,picture,video,canvas,svg{display:block;max-width:100%}input,button,textarea,select{font:inherit}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}p{text-wrap:pretty}h1,h2,h3,h4,h5,h6{text-wrap:balance}:focus-visible{outline:none;box-shadow:var(--focus-ring, 0 0 0 3px currentColor);border-radius:var(--radius-sm, 4px)}[hidden]{display:none!important}.skip-to-content{position:absolute;top:var(--space-2, 8px);left:var(--space-2, 8px);padding:var(--space-2, 8px) var(--space-4, 16px);border-radius:var(--radius-md, 8px);z-index:var(--z-toast, 500);transform:translateY(-200%);transition:transform .2s}.skip-to-content:focus{transform:translateY(0)}@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;size-adjust:100%;ascent-override:90%;descent-override:22%;line-gap-override:0%}@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-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;size-adjust:100%;ascent-override:90%;descent-override:22%;line-gap-override:0%}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/bricolage-grotesque-latin-wght-normal.DLoelf7F.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;size-adjust:95%;ascent-override:95%;descent-override:25%;line-gap-override:0%}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/bricolage-grotesque-latin-ext-wght-normal.CcLUaPy7.woff2) format("woff2-variations");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;size-adjust:95%;ascent-override:95%;descent-override:25%;line-gap-override:0%}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/_astro/jetbrains-mono-latin-wght-normal.B9CIFXIH.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;size-adjust:115%;ascent-override:85%;descent-override:20%;line-gap-override:0%}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/_astro/jetbrains-mono-latin-ext-wght-normal.DBQx-q_a.woff2) format("woff2-variations");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;size-adjust:115%;ascent-override:85%;descent-override:20%;line-gap-override:0%}html{background-color:var(--bg);color:var(--text)}body{font-family:var(--font-body);font-size:var(--text-body);font-weight:var(--weight-regular);line-height:var(--leading-normal);color:var(--text);background-color:var(--bg);background-image:url(/backdrop-facets.svg);background-size:cover;background-position:center;background-repeat:no-repeat;background-attachment:fixed;position:relative}@media (max-width: 768px){body{background-attachment:scroll}}body:before,body:after{content:"";position:fixed;width:60vw;height:60vw;max-width:800px;max-height:800px;border-radius:50%;filter:blur(120px);opacity:.12;pointer-events:none;z-index:0;will-change:transform}body:before{background:radial-gradient(circle,var(--brand),transparent 70%);top:-20vh;left:-10vw;animation:orb-drift-1 65s ease-in-out infinite alternate}body:after{background:radial-gradient(circle,var(--accent),transparent 70%);bottom:-20vh;right:-10vw;animation:orb-drift-2 55s ease-in-out infinite alternate}@keyframes orb-drift-1{0%{transform:translate(0) scale(1)}to{transform:translate(15vw,10vh) scale(1.15)}}@keyframes orb-drift-2{0%{transform:translate(0) scale(1.05)}to{transform:translate(-12vw,-8vh) scale(1)}}@media (prefers-reduced-motion: reduce){body:before,body:after{animation:none}}@media (max-width: 480px){body:before,body:after{filter:none;opacity:.06}}h1{font-family:var(--font-heading);font-size:var(--text-h1);font-weight:var(--weight-bold);line-height:var(--leading-tight);color:var(--text)}h2{font-family:var(--font-heading);font-size:var(--text-h2);font-weight:var(--weight-semibold);line-height:var(--leading-tight);color:var(--text)}h3{font-family:var(--font-heading);font-size:var(--text-h3);font-weight:var(--weight-semibold);line-height:var(--leading-snug);color:var(--text)}h4,h5,h6{font-family:var(--font-heading);font-weight:var(--weight-medium);line-height:var(--leading-snug);color:var(--text)}p{color:var(--text);line-height:var(--leading-normal)}a{color:var(--brand);text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;transition:color var(--duration-fast) var(--ease-standard)}a:hover{color:var(--brand-strong);text-decoration-color:var(--brand-strong)}code,kbd,samp{font-family:var(--font-mono);font-size:.875em;font-weight:var(--weight-medium);background-color:var(--surface-elevated);border:var(--border-width) solid var(--border);border-radius:var(--radius-sm);padding:.1em .4em}pre{font-family:var(--font-mono);font-size:var(--text-caption);background-color:var(--surface);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);padding:var(--space-4);overflow-x:auto}pre code{background:none;border:none;padding:0;font-size:inherit}::selection{background-color:var(--brand);color:var(--bg)}hr{border:none;border-top:var(--border-width) solid var(--border);margin-block:var(--space-8)}.container{width:100%;max-width:var(--container-max);margin-inline:auto;padding-inline:var(--container-padding)}@media (min-width: 480px){.container{padding-inline:var(--space-6)}}@media (min-width: 768px){.container{padding-inline:var(--space-8)}}section{padding-block:var(--space-16)}@media (min-width: 768px){section{padding-block:var(--space-24)}}section[id]{scroll-margin-top:80px}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.text-muted{color:var(--text-muted)}.text-brand{color:var(--brand)}.font-mono{font-family:var(--font-mono)}[data-reveal]{opacity:0;transform:var(--reveal-translate);transition:opacity var(--reveal-duration) var(--reveal-ease),transform var(--reveal-duration) var(--reveal-ease)}[data-reveal][data-revealed]{opacity:1;transform:none}[data-card-hover]{transition:transform var(--card-hover-duration) var(--ease-standard)}[data-card-hover]:hover{transform:var(--card-hover-transform)}@media (prefers-reduced-motion: reduce){[data-card-hover]:hover{transform:none}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);padding:var(--space-3) var(--space-5);border-radius:var(--radius-md);font-family:var(--font-body);font-size:.9375rem;font-weight:var(--weight-medium);line-height:1;text-decoration:none;border:var(--border-width) solid transparent;cursor:pointer;transition:background-color var(--duration-fast) var(--ease-standard),border-color var(--duration-fast) var(--ease-standard),color var(--duration-fast) var(--ease-standard),box-shadow var(--duration-fast) var(--ease-standard);white-space:nowrap}.btn:focus-visible{outline:none;box-shadow:var(--focus-ring)}.btn-primary{background-color:var(--brand);color:var(--bg);border-color:var(--brand)}.btn-primary:hover{background-color:var(--brand-strong);border-color:var(--brand-strong);color:var(--bg);text-decoration:none}.btn-secondary{background-color:transparent;color:var(--text);border-color:var(--border)}.btn-secondary:hover{border-color:var(--brand);color:var(--brand);text-decoration:none}.focus-ring:focus-visible{outline:none;box-shadow:var(--focus-ring);border-radius:var(--radius-sm)}@supports (animation-timeline: view()){.section-backdrop{animation:backdrop-parallax linear,backdrop-fade linear;animation-timeline:view(),view();animation-range:entry 0% exit 100%;will-change:transform,opacity}@keyframes backdrop-parallax{0%{transform:translateY(0)}to{transform:translateY(-30px)}}@keyframes backdrop-fade{0%{opacity:.4}20%{opacity:1}80%{opacity:1}to{opacity:.4}}}@supports (animation-timeline: view()){.section-backdrop--projects .facet,.section-backdrop--experience .facet,.section-backdrop--contact .facet{animation-timeline:view();animation-range:entry 0% exit 100%;animation-fill-mode:both;animation-timing-function:ease-in-out;will-change:transform,opacity}.section-backdrop--projects .facet-1{animation-name:facet-bloom-up;animation-range:entry 0% exit 100%}.section-backdrop--projects .facet-2{animation-name:facet-bloom-right;animation-range:entry 5% exit 95%}.section-backdrop--projects .facet-3{animation-name:facet-bloom-left;animation-range:entry 10% exit 90%}.section-backdrop--projects .facet-4{animation-name:facet-bloom-down;animation-range:entry 5% exit 95%}.section-backdrop--projects .facet-5{animation-name:facet-bloom-up;animation-range:entry 15% exit 85%}.section-backdrop--projects .facet-6{animation-name:facet-bloom-left;animation-range:entry 10% exit 90%}.section-backdrop--experience .facet-1{animation-name:facet-bloom-right;animation-range:entry 0% exit 100%}.section-backdrop--experience .facet-2{animation-name:facet-bloom-left;animation-range:entry 5% exit 95%}.section-backdrop--experience .facet-3{animation-name:facet-bloom-up;animation-range:entry 0% exit 100%}.section-backdrop--experience .facet-4{animation-name:facet-bloom-down;animation-range:entry 10% exit 90%}.section-backdrop--experience .facet-5{animation-name:facet-bloom-up;animation-range:entry 5% exit 95%}.section-backdrop--experience .facet-6{animation-name:facet-bloom-right;animation-range:entry 15% exit 85%}.section-backdrop--experience .facet-7{animation-name:facet-bloom-left;animation-range:entry 10% exit 90%}.section-backdrop--contact .facet-1{animation-name:facet-bloom-right;animation-range:entry 0% exit 100%}.section-backdrop--contact .facet-2{animation-name:facet-bloom-left;animation-range:entry 5% exit 95%}.section-backdrop--contact .facet-3{animation-name:facet-bloom-up;animation-range:entry 10% exit 90%}.section-backdrop--contact .facet-4{animation-name:facet-bloom-down;animation-range:entry 5% exit 95%}.section-backdrop--contact .facet-5{animation-name:facet-bloom-left;animation-range:entry 15% exit 85%}.section-backdrop--contact .facet-6{animation-name:facet-bloom-right;animation-range:entry 10% exit 90%}@keyframes facet-bloom-up{0%{transform:translateY(36px) scale(.82) rotate(-3deg);opacity:0}20%{opacity:.75}50%{transform:translateY(0) scale(1) rotate(0);opacity:1}80%{opacity:.75}to{transform:translateY(-18px) scale(1.04) rotate(2deg);opacity:0}}@keyframes facet-bloom-down{0%{transform:translateY(-36px) scale(.82) rotate(4deg);opacity:0}20%{opacity:.75}50%{transform:translateY(0) scale(1) rotate(0);opacity:1}80%{opacity:.75}to{transform:translateY(18px) scale(1.04) rotate(-3deg);opacity:0}}@keyframes facet-bloom-left{0%{transform:translate(-28px) scale(.84) rotate(3deg);opacity:0}20%{opacity:.75}50%{transform:translate(0) scale(1) rotate(0);opacity:1}80%{opacity:.75}to{transform:translate(14px) scale(1.04) rotate(-2deg);opacity:0}}@keyframes facet-bloom-right{0%{transform:translate(28px) scale(.84) rotate(-4deg);opacity:0}20%{opacity:.75}50%{transform:translate(0) scale(1) rotate(0);opacity:1}80%{opacity:.75}to{transform:translate(-14px) scale(1.04) rotate(3deg);opacity:0}}}@supports (animation-timeline: scroll()){.hero-backdrop .facet{animation-timeline:scroll();animation-range:0% 55%;animation-fill-mode:both;animation-timing-function:ease-in;will-change:transform,opacity}.hero-backdrop .facet-1{animation-name:hero-disperse-upleft}.hero-backdrop .facet-2{animation-name:hero-disperse-upright}.hero-backdrop .facet-3{animation-name:hero-disperse-left}.hero-backdrop .facet-4{animation-name:hero-disperse-downleft}.hero-backdrop .facet-5{animation-name:hero-disperse-downright}.hero-backdrop .facet-6{animation-name:hero-disperse-center}@keyframes hero-disperse-upleft{0%{transform:translate(0) scale(1) rotate(0);opacity:1}to{transform:translate(-24px,-32px) scale(.78) rotate(6deg);opacity:0}}@keyframes hero-disperse-upright{0%{transform:translate(0) scale(1) rotate(0);opacity:1}to{transform:translate(24px,-28px) scale(.78) rotate(-8deg);opacity:0}}@keyframes hero-disperse-left{0%{transform:translate(0) scale(1) rotate(0);opacity:1}to{transform:translate(-30px) scale(.82) rotate(5deg);opacity:0}}@keyframes hero-disperse-downleft{0%{transform:translate(0) scale(1) rotate(0);opacity:1}to{transform:translate(-20px,30px) scale(.8) rotate(-6deg);opacity:0}}@keyframes hero-disperse-downright{0%{transform:translate(0) scale(1) rotate(0);opacity:1}to{transform:translate(20px,28px) scale(.8) rotate(7deg);opacity:0}}@keyframes hero-disperse-center{0%{transform:scale(1) rotate(0);opacity:1}to{transform:scale(.88) rotate(-4deg);opacity:0}}}.section-backdrop .facet polygon,.section-backdrop .facet rect{stroke-dashoffset:0}.hero-backdrop .facet polygon{stroke-dashoffset:0}@supports (animation-timeline: view()){@keyframes facet-stroke-draw{0%{stroke-dashoffset:1200}to{stroke-dashoffset:0}}.section-backdrop .facet polygon,.section-backdrop .facet rect{stroke-dasharray:1200;stroke-dashoffset:1200;animation:facet-stroke-draw linear;animation-timeline:view();animation-range:entry 0% cover 50%}}@supports (animation-timeline: scroll()){@keyframes facet-stroke-draw-hero{0%{stroke-dashoffset:1200}to{stroke-dashoffset:0}}.hero-backdrop .facet polygon{stroke-dasharray:1200;stroke-dashoffset:1200;animation:facet-stroke-draw-hero linear;animation-timeline:scroll();animation-range:0% 30%}}@keyframes particle-drift-a{0%{transform:translate(0) rotate(45deg)}to{transform:translate(-18px,28px) rotate(225deg)}}@keyframes particle-drift-b{0%{transform:translate(0) rotate(45deg)}to{transform:translate(22px,-16px) rotate(225deg)}}@keyframes particle-drift-c{0%{transform:translate(0) rotate(45deg)}to{transform:translate(-12px,-24px) rotate(225deg)}}@keyframes particle-drift-hero{0%{transform:translate(0) rotate(45deg);opacity:.4}to{transform:translate(8px,-32px) rotate(225deg);opacity:.1}}.section-backdrop .particle{will-change:transform}.section-backdrop .particle-1{animation:particle-drift-a 25s ease-in-out infinite alternate;animation-delay:-3s}.section-backdrop .particle-2{animation:particle-drift-b 18s ease-in-out infinite alternate;animation-delay:-8s}.section-backdrop .particle-3{animation:particle-drift-c 22s ease-in-out infinite alternate;animation-delay:-13s}.section-backdrop .particle-4{animation:particle-drift-a 28s ease-in-out infinite alternate;animation-delay:-5s}.section-backdrop .particle-5{animation:particle-drift-b 16s ease-in-out infinite alternate;animation-delay:-10s}.hero-backdrop .particle{will-change:transform}.hero-backdrop .particle-1{animation:particle-drift-hero 20s ease-in-out infinite alternate;animation-delay:-4s}.hero-backdrop .particle-2{animation:particle-drift-hero 26s ease-in-out infinite alternate;animation-delay:-9s}.hero-backdrop .particle-3{animation:particle-drift-hero 17s ease-in-out infinite alternate;animation-delay:-2s}.hero-backdrop .particle-4{animation:particle-drift-hero 23s ease-in-out infinite alternate;animation-delay:-14s}.hero-backdrop .particle-5{animation:particle-drift-hero 19s ease-in-out infinite alternate;animation-delay:-7s}.logo-wrapper>svg path{stroke:#73a0be;stroke-width:1;stroke-opacity:0;stroke-dasharray:2000;stroke-dashoffset:2000;animation:logo-path-draw 1.2s ease-out both,logo-path-stroke-fade .5s ease-out 1.3s both}.logo-wrapper>svg path:nth-of-type(10n+1){animation-delay:0s,1.3s}.logo-wrapper>svg path:nth-of-type(10n+2){animation-delay:.04s,1.34s}.logo-wrapper>svg path:nth-of-type(10n+3){animation-delay:.08s,1.38s}.logo-wrapper>svg path:nth-of-type(10n+4){animation-delay:.12s,1.42s}.logo-wrapper>svg path:nth-of-type(10n+5){animation-delay:.16s,1.46s}.logo-wrapper>svg path:nth-of-type(10n+6){animation-delay:.2s,1.5s}.logo-wrapper>svg path:nth-of-type(10n+7){animation-delay:.24s,1.54s}.logo-wrapper>svg path:nth-of-type(10n+8){animation-delay:.28s,1.58s}.logo-wrapper>svg path:nth-of-type(10n+9){animation-delay:.32s,1.62s}.logo-wrapper>svg path:nth-of-type(10n+10){animation-delay:.36s,1.66s}@keyframes logo-path-draw{0%{stroke-opacity:.85;stroke-dashoffset:2000}to{stroke-opacity:.85;stroke-dashoffset:0}}@keyframes logo-path-stroke-fade{0%{stroke-opacity:.85}to{stroke-opacity:0}}@media (prefers-reduced-motion: reduce){.section-backdrop,.hero-backdrop .facet,.section-backdrop .facet,.hero-logo-wrap{animation:none!important;will-change:auto}.hero-logo-wrap:before{animation:none!important;display:none}.section-backdrop .particle,.hero-backdrop .particle{animation:none!important}.section-backdrop .facet polygon,.section-backdrop .facet rect,.hero-backdrop .facet polygon{stroke-dashoffset:0!important;stroke-dasharray:none!important}.logo-wrapper>svg path{animation:none!important;stroke:none!important;stroke-dashoffset:0!important;stroke-opacity:0!important}}@media (max-width: 480px){.section-backdrop .particle,.hero-backdrop .particle{animation:none;opacity:.3}}
