@font-face{font-family:Manrope Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/manrope-latin-wght-normal-DHIcAJRg.woff2) format("woff2-variations")}@font-face{font-family:"Source Sans 3 Variable";font-style:normal;font-display:swap;font-weight:200 900;src:url(/assets/source-sans-3-latin-wght-normal-BqRLTx4X.woff2) format("woff2-variations")}*{box-sizing:border-box}:root{color:#172033;font-family:"Source Sans 3 Variable",ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility}h1,h2,h3,h4,h5,h6,.project-technologies{font-family:Manrope Variable,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}html,body,#root{margin:0;width:100%;height:100%}html{scroll-behavior:smooth}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}body{color:#172033;background:#f7f8fb}.app{width:100%;min-height:100svh;background:radial-gradient(ellipse 44% 17% at 18% 49%,rgba(83,196,255,.58),transparent 100%),radial-gradient(ellipse 44% 17% at 78% 46%,rgba(194,119,255,.52),transparent 100%),radial-gradient(ellipse 40% 15% at 64% 59%,rgba(255,125,202,.38),transparent 100%),linear-gradient(180deg,transparent 25%,rgba(223,234,246,.72) 38%,rgba(228,232,247,.82) 58%,transparent 73%),linear-gradient(145deg,#f7f8fb,#eef2f6)}.page-container{position:relative;width:100%}.page{position:relative;width:100%;min-height:100svh}.page-section{width:100%;min-height:100svh;display:flex;align-items:center;justify-content:flex-start;box-sizing:border-box}.page-section h1{font-size:clamp(3rem,6vw,5rem);color:#172033;margin:0 0 1rem}.page-section p{font-size:1.25rem;color:#465166}.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}.contact{position:relative;overflow:hidden;padding:clamp(2rem,3vw,4rem);background:transparent}.contact-grid{position:relative;z-index:2;pointer-events:none;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(2rem,3vw,3rem);width:min(1360px,100%);margin-inline:auto}.contact-card-motion{min-width:0;animation-name:contactLiquidBreathing;animation-duration:4.8s}@keyframes contactLiquidBreathing{0%,to{translate:0 0;scale:1 1;border-radius:30px}24%{translate:3px -4px;scale:.998 1.004;border-radius:32px 29px 31px 30px}32%{translate:4px -5px;scale:1.002 .998;border-radius:33px 29px 32px 28px}41%{translate:3px -4px;scale:1.01 .99;border-radius:35px 27px 34px 28px}58%{translate:0 0;scale:1 1;border-radius:30px}74%{translate:-3px 2px;scale:.997 1.005;border-radius:29px 32px 30px 31px}82%{translate:-4px 3px;scale:1.002 .998;border-radius:28px 33px 29px 32px}90%{translate:-3px 2px;scale:1.008 .992;border-radius:27px 35px 28px 34px}}.contact-card{position:relative;display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-rows:1fr auto;gap:1.25rem 1.5rem;min-height:clamp(320px,34vh,380px);padding:clamp(2rem,3vw,3rem);overflow:hidden}.contact-icon{display:grid;place-items:center;width:3.75rem;height:3.75rem;border:1px solid rgba(255,255,255,.55);border-radius:20px;background:#fff3;box-shadow:0 8px 20px #3c466414,inset 1px 1px 2px #fffc}.contact-icon svg{width:1.75rem;height:1.75rem;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.contact-icon-github svg{fill:currentColor;stroke:none}.contact-icon-linkedin svg{fill:#0a66c2;stroke:none}.contact-icon-youtube svg{stroke:none}.contact-icon-email svg{stroke:none}.contact-card-copy h2{margin:0 0 .5rem;font-size:clamp(1.7rem,3vw,2.3rem)}.contact-card-copy p{max-width:34ch;margin:0;font-size:clamp(1rem,1.5vw,1.1rem);line-height:1.55}.contact-card-action{grid-column:1 / -1;justify-self:start;text-decoration:none}.contact-card-motion.is-unavailable .contact-icon,.contact-card-motion.is-unavailable .contact-card-copy{opacity:.62}.about{position:relative;overflow:hidden;padding:clamp(1rem,4vw,4rem);background:transparent}.about-layout{position:relative;z-index:2;pointer-events:none;display:grid;grid-template-columns:clamp(360px,32vw,520px) minmax(0,1fr);align-items:center;gap:clamp(3rem,5vw,5rem);width:min(1440px,100%);margin-inline:auto}.headshot-motion,.headshot-frame.liquid-bounce-surface{width:100%;aspect-ratio:1}.liquid-bubble.headshot-motion,.liquid-bubble.about-card-motion{animation-duration:4.8s}.headshot-frame{overflow:hidden;border-radius:30px;opacity:0;transition:transform .6s cubic-bezier(.16,1.45,.3,1)}.headshot-motion.is-loaded .headshot-frame{animation:aboutReveal .65s ease-out both}.headshot{display:block;width:100%;height:100%;object-fit:cover}.about-card.liquid-bounce-surface{position:relative;z-index:2;width:100%;margin:0;padding:clamp(2rem,4vw,3rem);display:flex;flex-direction:row;pointer-events:none;animation:aboutReveal .65s ease-out .55s both;transition:transform .6s cubic-bezier(.16,1.45,.3,1)}.about-card-motion{position:relative;z-index:2;width:100%;pointer-events:none}.about-role{margin:0 0 .65rem;color:#667085;font-family:Manrope Variable,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:clamp(.8rem,1.2vw,.95rem);font-weight:600;letter-spacing:.06em;text-transform:uppercase}.about-content p{font-size:clamp(1.1rem,calc(.8rem + .5vw),1.25rem)}.about-content p+p{margin-top:1.25rem}.about-content s{color:#667085;text-decoration-thickness:1.5px}.about-actions{display:flex;flex-wrap:wrap;gap:.85rem;margin-top:clamp(1.5rem,3vw,2.25rem);pointer-events:auto}@media(prefers-reduced-motion:reduce){.headshot-motion.is-loaded .headshot-frame,.about-card.liquid-bounce-surface{opacity:1;animation:none}}@keyframes aboutReveal{0%{opacity:0}to{opacity:1}}.navbar-position{position:fixed;z-index:100;top:50%;right:1rem;transform:translateY(-50%)}.navbar{padding:12px 16px;border-radius:var(--glass-radius);background:var(--glass-control-background);backdrop-filter:var(--glass-control-filter);-webkit-backdrop-filter:var(--glass-control-filter);border:var(--glass-control-border);box-shadow:0 8px 32px #0000001f,inset 1px 1px 1px #ffffff73,inset -1px -1px 1px #ffffff1f}.navbar-nav{display:flex;flex-direction:column;align-items:center;gap:3rem;padding-top:.8rem;padding-bottom:.8rem}.navbar-nav button{width:8px;height:8px;padding:0;border:0;border-radius:50%;cursor:pointer;background:#ffffffa6;box-shadow:inset 1px 1px 2px #ffffffe6,0 1px 3px #00000026;transition:transform .3s ease,opacity .3s ease}.navbar-nav button.active{width:14px;height:14px;opacity:1;background:radial-gradient(circle at 30% 25%,rgba(255,255,255,1) 0%,rgba(255,255,255,.45) 18%,transparent 38%),conic-gradient(from 0deg,#ff8fd8,#9edcff,#c5a0ff,#83ffda,#fff09a,#ff8fd8);background-size:100% 100%,250% 250%;box-shadow:0 0 8px #ffffffe6,0 0 18px #b4dcff99,inset 2px 2px 4px #fffffff2,inset -2px -2px 4px #5064a040;animation:activeIridescence 4s ease-in-out infinite;transform:scale(1.1)}.navbar-nav button:hover{opacity:.8;transform:scale(1.25)}.navbar-nav button.active:hover{opacity:1;transform:scale(1.2)}@keyframes activeIridescence{0%{background-position:0 0,0% 50%}50%{background-position:0 0,100% 50%}to{background-position:0 0,0% 50%}}:root{--glass-radius: 30px;--glass-control-background: rgba(255, 255, 255, .12);--glass-control-border: 1px solid rgba(255, 255, 255, .25);--glass-control-filter: blur(12px) saturate(130%)}canvas{position:fixed!important;inset:0!important;width:50vw!important;height:50vh!important;z-index:0;transform:scale(2);transform-origin:top left}.liquid-bubble{--liquid-drift: 1.5px;animation:liquidBreathing 7s cubic-bezier(.45,0,.55,1) infinite;transform-origin:center;will-change:scale,translate,border-radius}.liquid-bubble-nav{--liquid-drift: 1px;animation-delay:-2.4s}.liquid-bubble-headshot{animation-delay:-1.3s}.liquid-bubble-controls{--liquid-drift: 1px;animation-delay:-4.8s}.liquid-bounce-surface{transition:transform .6s cubic-bezier(.16,1.45,.3,1)}.liquid-bubble:hover>.liquid-bounce-surface,.liquid-bubble.is-pointer-over>.liquid-bounce-surface{transform:translateY(-2px) scale(1.015)}@keyframes liquidBreathing{0%,to{translate:0 0;scale:1 1;border-radius:var(--glass-radius)}32%{translate:var(--liquid-drift) -2px;scale:1.006 .994;border-radius:32px 28px 31px 29px}68%{translate:calc(var(--liquid-drift) * -1) 1px;scale:.996 1.005;border-radius:28px 32px 29px 31px}}@media(prefers-reduced-motion:reduce){.liquid-bubble{animation:none}.liquid-bounce-surface{transition:none}.liquid-bubble:hover>.liquid-bounce-surface,.liquid-bubble.is-pointer-over>.liquid-bounce-surface{transform:none}}.glass-surface{border-radius:var(--glass-radius);background:linear-gradient(135deg,#ffffff3d,#ffffff14);backdrop-filter:blur(8px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(130%);border:1px solid rgba(255,255,255,.3);box-shadow:0 8px 32px #0000001f,inset 1px 1px 1px #ffffff80,inset -1px -1px 1px #ffffff1a}.glass-action{display:inline-flex;align-items:center;gap:.75rem;padding:.85rem 1.15rem;color:inherit;font-family:Manrope Variable,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:.95rem;font-weight:600;cursor:pointer;pointer-events:auto;border:1px solid rgba(255,255,255,.55);border-radius:999px;background:#fff3;box-shadow:0 6px 18px #28375014,inset 1px 1px 2px #ffffffbf;transition:transform .35s cubic-bezier(.16,1.4,.3,1),background-color .25s ease,box-shadow .25s ease}.glass-action:hover{background:#ffffff57;box-shadow:0 9px 24px #2837501f,inset 1px 1px 2px #ffffffe6;transform:translateY(-2px) scale(1.015)}.glass-action:disabled{color:#141e306b;cursor:not-allowed;background:#ffffff1f;box-shadow:inset 1px 1px 2px #fff6;transform:none}.glass-action:focus-visible{outline:2px solid rgba(70,100,150,.75);outline-offset:3px}.glass-action span{transition:transform .25s ease}.glass-action:hover span{transform:translate(3px)}.glass-action:disabled span{transform:none}.projects{overflow:hidden;padding:clamp(1rem,2vh,1.5rem) clamp(3.5rem,7vw,7rem);background:transparent}.projects-layout{width:min(1180px,100%);margin-inline:auto}.project-carousel{position:relative;z-index:2;width:100%}.project-carousel-viewport{position:relative;height:min(760px,calc(100svh - 7rem));overflow:visible}.project-slide{position:absolute;inset:0;display:grid;place-items:center;padding:.5rem 1rem 1rem;cursor:grab;touch-action:pan-y}.project-slide:active{cursor:grabbing}.project-slide.is-active .project-card,.project-slide.is-neighbour .project-card{pointer-events:auto}.project-slide.is-neighbour,.project-slide.is-neighbour .project-card-info,.project-slide.is-neighbour .project-image-button,.project-slide.is-neighbour .glass-action{cursor:pointer}.project-card{width:min(760px,62vw);-webkit-user-select:none;user-select:none}.project-image-frame{display:block;width:100%;height:clamp(340px,48vh,520px);overflow:hidden;border-radius:30px;border:0;box-shadow:0 18px 45px #223a5629;transition:opacity .45s ease}.project-image-button{padding:0;color:inherit;cursor:pointer;appearance:none;background:transparent}.project-image-button:focus-visible{outline:3px solid rgba(255,255,255,.9);outline-offset:4px}.project-image-button:disabled{cursor:default}.project-image{display:block;width:100%;height:100%;object-fit:cover}.project-card-info{position:relative;z-index:1;display:grid;grid-template-columns:1fr;gap:1.25rem;margin:-2rem .75rem 0;padding:clamp(1.25rem,2.5vw,2rem);padding-top:clamp(2rem,3vw,2.5rem);cursor:default}.project-card-info>div,.project-technologies{transition:opacity .45s ease}.project-slide[aria-hidden=true] .project-image-frame,.project-slide[aria-hidden=true] .project-card-info>div,.project-slide[aria-hidden=true] .project-technologies{opacity:.52}.project-card-info h2{margin:0 0 .5rem;font-size:clamp(1.5rem,2.5vw,2.25rem)}.project-card-info p{margin:0;font-size:1rem;line-height:1.5}.project-card-info p a{color:inherit;text-decoration-thickness:1px;text-underline-offset:.16em}.project-technologies{display:flex;flex-wrap:wrap;justify-content:flex-start;gap:.5rem;margin:0;padding:0;list-style:none}.project-technologies li{padding:.45rem .75rem;font-size:.8rem;white-space:nowrap;border:1px solid rgba(255,255,255,.55);border-radius:999px;background:#ffffff2e}.project-actions{display:flex;flex-wrap:wrap;justify-content:flex-start;gap:.75rem}.project-actions .glass-action{padding:.7rem 1rem;font-size:.85rem}.project-gallery-backdrop,.project-gallery-dimmer,.project-gallery{position:fixed;inset:0}.project-gallery-backdrop{z-index:200}.project-gallery-dimmer{pointer-events:none;background:#0a0e1bbd;backdrop-filter:blur(8px) saturate(75%);-webkit-backdrop-filter:blur(8px) saturate(75%)}.project-gallery{pointer-events:none}.project-gallery-image-frame{position:fixed;overflow:hidden;pointer-events:auto;border:0;border-radius:30px;background:#111827}.project-gallery-image{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:cover;cursor:grab;touch-action:pan-y;-webkit-user-select:none;user-select:none}.project-gallery-image:active{cursor:grabbing}.project-gallery-caption{position:absolute;bottom:clamp(.75rem,2vw,1.25rem);right:0;left:0;z-index:2;width:fit-content;max-width:min(42rem,calc(100% - 2rem));margin:0 auto;padding:.7rem 1rem;color:#fffffff0;font-size:clamp(1.15rem,1.9vw,1.4rem);line-height:1.35;text-align:center;text-wrap:pretty;pointer-events:none;background:#12172661}.project-gallery-close-motion{position:fixed;top:max(1rem,env(safe-area-inset-top));right:max(1rem,env(safe-area-inset-right));z-index:2;pointer-events:auto}.project-gallery-close{display:grid;place-items:center;width:2.75rem;height:2.75rem;padding:0 0 .15rem;color:#ffffffe6;font:inherit;font-size:2rem;line-height:1;cursor:pointer;border:1px solid rgba(255,255,255,.32);border-radius:50%;background:#12172680;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}.project-gallery-controls-motion{position:fixed;bottom:max(1rem,env(safe-area-inset-bottom));left:50%;z-index:2;width:fit-content;pointer-events:auto;transform:translate(-50%)}.project-carousel-controls-motion{width:fit-content;margin-top:.5rem;margin-inline:auto}.project-carousel-controls{padding:.55rem .75rem;display:flex;align-items:center;justify-content:center;gap:.75rem;border-radius:var(--glass-radius);background:var(--glass-control-background);backdrop-filter:var(--glass-control-filter);-webkit-backdrop-filter:var(--glass-control-filter);border:var(--glass-control-border);box-shadow:0 8px 32px #0000001f,inset 1px 1px 1px #ffffff73,inset -1px -1px 1px #ffffff1f}.project-carousel-controls-motion .project-carousel-controls{box-shadow:0 5px 16px #0000000e,inset 1px 1px 1px #ffffff73,inset -1px -1px 1px #ffffff1f}.project-carousel-controls>button{width:2.25rem;height:2.25rem;padding:0;font-size:1.25rem;line-height:1;color:#ffffffa6;cursor:pointer;border:0;background:transparent;text-shadow:0 1px 3px rgba(0,0,0,.15);transition:transform .2s ease,color .2s ease}.project-carousel-controls>button:hover{color:#fffffff2;transform:scale(1.15)}.project-pagination{display:flex;align-items:center;gap:1.4rem}.project-pagination button{width:8px;height:8px;padding:0;cursor:pointer;border:0;border-radius:50%;background:#ffffffa6;box-shadow:inset 1px 1px 2px #ffffffe6,0 1px 3px #00000026;transition:transform .3s ease,opacity .3s ease}.project-pagination button.active{width:14px;height:14px;opacity:1;background:radial-gradient(circle at 30% 25%,rgba(255,255,255,1) 0%,rgba(255,255,255,.45) 18%,transparent 38%),conic-gradient(from 0deg,#ff8fd8,#9edcff,#c5a0ff,#83ffda,#fff09a,#ff8fd8);background-size:100% 100%,250% 250%;box-shadow:0 0 8px #ffffffe6,0 0 18px #b4dcff99,inset 2px 2px 4px #fffffff2,inset -2px -2px 4px #5064a040;animation:activeIridescence 4s ease-in-out infinite;transform:scale(1.1)}.project-pagination button:hover{opacity:.8;transform:scale(1.25)}.project-pagination button.active:hover{opacity:1;transform:scale(1.2)}@media(max-width:760px){.about-layout{grid-template-columns:1fr;justify-items:center;gap:clamp(1rem,3vh,1.5rem)}.headshot-motion{width:min(62vw,280px)}.about-card{text-align:center}.about-actions{justify-content:center}.navbar-position{top:auto;right:50%;bottom:max(.75rem,env(safe-area-inset-bottom));transform:translate(50%)}.navbar-nav{flex-direction:row;gap:2.25rem;padding:.25rem .8rem}.projects{padding:1.25rem 1rem 5rem}.project-carousel-viewport{height:max(620px,calc(100svh - 11rem))}.project-card{width:min(92vw,520px)}.project-image-frame{height:clamp(220px,31vh,310px)}.project-card-info{grid-template-columns:1fr;gap:1rem;margin-inline:.5rem}.project-technologies{justify-content:flex-start}.contact{align-items:flex-start;padding:2rem 1rem 6rem}.contact-grid{grid-template-columns:1fr;gap:1rem}.contact-card{min-height:190px}}@media(max-height:650px)and (max-width:760px){.about{padding-block:1rem 5rem}.headshot-frame{width:min(42vh,220px)}.about-card{padding:1.5rem}}
