@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600&family=Space+Grotesk:wght@400;500;600&display=swap');
:root{color-scheme:dark;--bg:#090a10;--ink:#f0f0f5;--muted:#b0b2c4;--faint:#b5b9cf;--accent:#a7e5ec;--border:#ffffff20;--display:'Space Grotesk',Arial,sans-serif;--body:'DM Sans',Arial,sans-serif}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--ink);font:16px/1.65 var(--body);-webkit-font-smoothing:antialiased}h1,h2,p,figure{margin:0}a{color:inherit}button{font:inherit;color:inherit;cursor:pointer}a,button{touch-action:manipulation}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:6px}::selection{background:#286b7a;color:white}
.atmosphere{position:fixed;inset:0;overflow:hidden;pointer-events:none;z-index:-1;background:var(--bg);isolation:isolate}
.orb{position:absolute;width:clamp(360px,48vw,760px);aspect-ratio:1;border-radius:50%;will-change:transform;--orb-opacity:.34}
.orb::before,.orb::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none}
.orb::before{background:radial-gradient(circle,var(--glow),transparent 68%);filter:blur(58px);opacity:var(--orb-opacity)}
.orb::after{background:url('/grain.svg');opacity:.18;mask-image:radial-gradient(ellipse,#0009,transparent 65%);-webkit-mask-image:radial-gradient(ellipse,#0009,transparent 65%)}
.orb-one{left:-8%;top:-8%;--glow:#30b3c5}
.orb-two{right:-6%;top:13%;--glow:#288eac;--orb-opacity:.30}
.orb-three{left:22%;top:48%;--glow:#219da2;--orb-opacity:.25}
.mote{position:absolute;left:var(--x);top:var(--y);width:var(--size);height:var(--size);border-radius:50%;background:#c9f6fa;box-shadow:0 0 7px #8de3ed88;opacity:.54;animation:mote-drift var(--duration) ease-in-out var(--delay) infinite alternate;animation-play-state:paused}
body[data-motion="active"] .mote{animation-play-state:running}
@keyframes mote-drift{from{transform:translate3d(0,0,0)}to{transform:translate3d(var(--dx),var(--dy),0)}}

/* A viewport-aware composition: identity, project, socials, contact. */
.portfolio{width:min(88%,1680px);min-height:100svh;margin-inline:auto;padding-block:clamp(28px,4.2svh,64px) clamp(22px,3svh,40px);display:grid;grid-template-rows:auto 1fr auto;row-gap:clamp(24px,3.7svh,52px)}
.site-header{text-align:center}
.header-inner{display:flex;justify-content:center}
.brand{display:flex;align-items:center;justify-content:center;gap:clamp(16px,1.8vw,28px);text-decoration:none;border-radius:8px}
.brand-title{margin:0;min-width:0}
.brand-mark{width:clamp(48px,4.5vw,76px);height:auto;flex:none;filter:drop-shadow(0 0 12px #5dd6ec20)}
.brand-name{font:500 clamp(56px,5.7vw,104px)/1.04 var(--display);letter-spacing:-.055em}
.brand-dot{color:var(--accent)}
.intro{margin:clamp(14px,2svh,24px) auto 0;color:var(--muted);font-size:clamp(17px,1.35vw,22px);line-height:1.5;text-wrap:balance}
.page-shell{min-width:0;display:grid;grid-template-rows:minmax(330px,1fr) auto;row-gap:clamp(24px,3.5svh,46px)}
.project{display:grid;grid-template-columns:minmax(0,.78fr) minmax(0,1.5fr);align-items:center;gap:clamp(20px,3vw,64px);min-height:clamp(330px,45svh,720px);padding:clamp(32px,3.4vw,64px);border-radius:clamp(28px,2.4vw,42px)}
.project-copy{min-width:0}
.eyebrow{font-size:clamp(11px,.82vw,14px);font-weight:500;letter-spacing:.18em;color:var(--accent)}
.project h2{font:500 clamp(40px,3.6vw,68px)/1.04 var(--display);letter-spacing:-.045em;margin:20px 0 18px;text-wrap:balance}
.project-copy p{font-size:clamp(17px,1.35vw,23px);line-height:1.55;color:var(--muted);max-width:24ch}
.controller{min-width:0;text-align:center}
.controller img{display:block;width:100%;max-height:36svh;height:auto;object-fit:contain;margin:auto}
.controller figcaption{font-size:clamp(10px,.72vw,12px);letter-spacing:.16em;color:var(--faint);margin-top:14px}
.socials{text-align:center;align-self:end}
.socials>p{color:var(--ink);font:500 clamp(18px,1.3vw,23px)/1.4 var(--display);letter-spacing:-.02em}
.socials ul{list-style:none;display:flex;justify-content:center;flex-wrap:wrap;gap:clamp(24px,3vw,48px);margin:16px 0 0;padding:0}
.socials li{display:flex;align-items:center;gap:10px;font-size:clamp(14px,1vw,17px);color:#d0d2df}
.socials svg{width:21px;height:21px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
.socials .social-note{margin-top:10px;color:var(--muted);font:12px/1.4 var(--body);letter-spacing:.02em}
.contact{text-align:center;color:var(--muted);font-size:clamp(15px,1.1vw,18px);line-height:1.6}
.contact a{color:var(--ink);text-decoration-color:#638f99;text-underline-offset:6px;text-decoration-thickness:1px;white-space:nowrap;margin-left:6px}
.contact a:hover{color:var(--accent)}.contact a span{margin-left:3px}
.skip-link{position:absolute;top:-100px;left:24px;z-index:30;padding:12px 20px;background:var(--ink);color:var(--bg);border-radius:8px}.skip-link:focus{top:15px}
@media(min-width:1800px){.portfolio{width:min(86%,1840px)}}
@media(max-width:1000px){.portfolio{width:90%;row-gap:28px}.brand-name{font-size:clamp(44px,6vw,60px)}.project{grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);gap:16px;padding:32px}.project h2{font-size:40px}.project-copy p{font-size:17px}}
@media(max-width:700px){.portfolio{width:calc(100% - 44px);padding-top:30px;padding-bottom:24px;row-gap:28px}.brand{gap:12px}.brand-mark{width:36px}.brand-name{font-size:clamp(31px,6.8vw,46px);letter-spacing:-.05em}.intro{max-width:29ch;font-size:16px;margin-top:16px}.page-shell{grid-template-rows:1fr auto;row-gap:28px}.project{grid-template-columns:minmax(0,1fr);align-content:center;min-height:0;padding:28px 26px 26px;gap:32px;border-radius:28px}.project h2{font-size:36px;margin:14px 0 12px}.project-copy p{font-size:17px;max-width:none}.controller img{max-width:490px;max-height:none}.controller figcaption{margin-top:8px}.socials>p{font-size:19px}.socials ul{gap:22px;margin-top:14px}.socials li{gap:7px;font-size:13px}.socials svg{width:19px;height:19px}.contact{font-size:15px}.orb{width:490px}.orb::before{filter:blur(55px)}.orb-one{left:-52%;top:0}.orb-two{right:-58%;top:19%}.orb-three{left:-15%;top:60%}}
@media(max-width:360px){.portfolio{width:calc(100% - 32px)}.brand{gap:9px}.brand-mark{width:30px}.brand-name{font-size:29px}.project{padding:24px 20px}.project h2{font-size:33px}.socials ul{gap:17px}.socials li{font-size:12px}}
@media(min-width:701px) and (max-height:850px){.portfolio{padding-block:24px 20px;row-gap:24px}.brand-name{font-size:clamp(52px,5vw,76px)}.brand-mark{width:50px}.intro{font-size:17px;margin-top:12px}.page-shell{row-gap:22px;grid-template-rows:minmax(280px,1fr) auto}.project{min-height:280px;padding:28px 40px}.project h2{font-size:clamp(38px,3.3vw,52px)}.controller img{max-height:34svh}.socials ul{margin-top:10px}.socials .social-note{margin-top:7px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}.orb{transform:none!important;will-change:auto}}
.error-page{max-width:1000px;margin:10svh auto;padding:30px}.error-page h1{font:500 clamp(40px,7vw,80px)/1.1 var(--display);letter-spacing:-.04em}.error-page p{margin-top:30px}
@media print{.atmosphere,.skip-link{display:none}body{background:white;color:#111}.portfolio{width:100%;min-height:0;padding:0}.brand{color:#111}.project{break-inside:avoid}.contact{color:#333}}

/* Static particle positions: external styles comply with the production CSP. */
.mote-1{--x:25%;--y:30%;--size:1.2px;--dx:23px;--dy:-31px;--duration:5.5s;--delay:0s}
.mote-2{--x:39%;--y:20%;--size:1px;--dx:31px;--dy:17px;--duration:7s;--delay:-0.575s}
.mote-3{--x:64%;--y:29%;--size:1.5px;--dx:-24px;--dy:29px;--duration:6.25s;--delay:-1.15s}
.mote-4{--x:73%;--y:47%;--size:1px;--dx:-30px;--dy:-22px;--duration:7.75s;--delay:-1.72s}
.mote-5{--x:55%;--y:63%;--size:1.3px;--dx:28px;--dy:-26px;--duration:6.5s;--delay:-2.3s}
.mote-6{--x:31%;--y:69%;--size:1px;--dx:-19px;--dy:-28px;--duration:7.5s;--delay:-2.88s}
.mote-7{--x:18%;--y:49%;--size:1.4px;--dx:20px;--dy:23px;--duration:6s;--delay:-3.45s}
.mote-8{--x:47%;--y:41%;--size:1px;--dx:-27px;--dy:16px;--duration:7.25s;--delay:-4.02s}
.mote-9{--x:63%;--y:77%;--size:1px;--dx:-18px;--dy:-32px;--duration:8s;--delay:-4.6s}
.mote-10{--x:81%;--y:64%;--size:1.2px;--dx:-25px;--dy:18px;--duration:6.75s;--delay:-5.17s}
.mote-11{--x:42%;--y:82%;--size:1.1px;--dx:24px;--dy:-25px;--duration:8.25s;--delay:-5.75s}
.mote-12{--x:56%;--y:14%;--size:1px;--dx:-21px;--dy:24px;--duration:7s;--delay:-6.32s}
.mote-13{--x:25%;--y:30%;--size:1.2px;--dx:23px;--dy:-31px;--duration:6.25s;--delay:-1s}
.mote-14{--x:39%;--y:20%;--size:1px;--dx:31px;--dy:17px;--duration:7.75s;--delay:-1.57s}
.mote-15{--x:64%;--y:29%;--size:1.5px;--dx:-24px;--dy:29px;--duration:7s;--delay:-2.15s}
.mote-16{--x:73%;--y:47%;--size:1px;--dx:-30px;--dy:-22px;--duration:8.5s;--delay:-2.72s}
.mote-17{--x:55%;--y:63%;--size:1.3px;--dx:28px;--dy:-26px;--duration:7.25s;--delay:-3.3s}
.mote-18{--x:31%;--y:69%;--size:1px;--dx:-19px;--dy:-28px;--duration:8.25s;--delay:-3.88s}
.mote-19{--x:18%;--y:49%;--size:1.4px;--dx:20px;--dy:23px;--duration:6.75s;--delay:-4.45s}
.mote-20{--x:47%;--y:41%;--size:1px;--dx:-27px;--dy:16px;--duration:8s;--delay:-5.02s}
.mote-21{--x:63%;--y:77%;--size:1px;--dx:-18px;--dy:-32px;--duration:8.75s;--delay:-5.6s}
.mote-22{--x:81%;--y:64%;--size:1.2px;--dx:-25px;--dy:18px;--duration:7.5s;--delay:-6.17s}
.mote-23{--x:42%;--y:82%;--size:1.1px;--dx:24px;--dy:-25px;--duration:9s;--delay:-6.75s}
.mote-24{--x:56%;--y:14%;--size:1px;--dx:-21px;--dy:24px;--duration:7.75s;--delay:-7.32s}
.mote-25{--x:25%;--y:30%;--size:1.2px;--dx:23px;--dy:-31px;--duration:7s;--delay:-2s}
.mote-26{--x:39%;--y:20%;--size:1px;--dx:31px;--dy:17px;--duration:8.5s;--delay:-2.58s}
.mote-27{--x:64%;--y:29%;--size:1.5px;--dx:-24px;--dy:29px;--duration:7.75s;--delay:-3.15s}
.mote-28{--x:73%;--y:47%;--size:1px;--dx:-30px;--dy:-22px;--duration:9.25s;--delay:-3.72s}
.mote-29{--x:55%;--y:63%;--size:1.3px;--dx:28px;--dy:-26px;--duration:8s;--delay:-4.3s}
.mote-30{--x:31%;--y:69%;--size:1px;--dx:-19px;--dy:-28px;--duration:9s;--delay:-4.88s}
.mote-31{--x:18%;--y:49%;--size:1.4px;--dx:20px;--dy:23px;--duration:7.5s;--delay:-5.45s}
.mote-32{--x:47%;--y:41%;--size:1px;--dx:-27px;--dy:16px;--duration:8.75s;--delay:-6.02s}
.mote-33{--x:63%;--y:77%;--size:1px;--dx:-18px;--dy:-32px;--duration:9.5s;--delay:-6.6s}
.mote-34{--x:81%;--y:64%;--size:1.2px;--dx:-25px;--dy:18px;--duration:8.25s;--delay:-7.17s}
.mote-35{--x:42%;--y:82%;--size:1.1px;--dx:24px;--dy:-25px;--duration:9.75s;--delay:-7.75s}
.mote-36{--x:56%;--y:14%;--size:1px;--dx:-21px;--dy:24px;--duration:8.5s;--delay:-8.32s}

/* Orbiting points occupy tilted planes with real perspective depth. */
.orbit-field{position:absolute;inset:0;perspective:850px;transform-style:preserve-3d;--orbit-radius:clamp(110px,16vw,240px)}
.orbit-plane{position:absolute;left:50%;top:50%;width:1px;height:1px;transform-style:preserve-3d}
.plane-1{transform:rotateZ(-28deg) rotateX(58deg);--orbit-time:10s}
.plane-2{transform:rotateZ(48deg) rotateX(68deg);--orbit-time:14s;--orbit-radius:clamp(90px,13vw,190px)}
.orb-two .orbit-field{transform:rotateZ(32deg)}
.orb-three .orbit-field{transform:rotateZ(-42deg)}
.satellite{position:absolute;width:3px;height:3px;border-radius:50%;background:#dbfcff;box-shadow:0 0 6px 1px #7ee6f7aa,0 0 15px #33cbe666;animation:orbital-flight var(--orbit-time) linear infinite;animation-play-state:paused;transform:rotateZ(var(--phase)) translateX(var(--orbit-radius));opacity:.85}
.satellite-1{--phase:0deg}.satellite-2{--phase:60deg;width:2px;height:2px;opacity:.6}.satellite-3{--phase:120deg}.satellite-4{--phase:180deg;width:2px;height:2px;opacity:.5}.satellite-5{--phase:240deg}.satellite-6{--phase:300deg;width:2px;height:2px;opacity:.65}
body[data-motion="active"] .satellite,body[data-motion="active"] .glass::after{animation-play-state:running}
@keyframes orbital-flight{from{transform:rotateZ(var(--phase)) translateX(var(--orbit-radius))}to{transform:rotateZ(calc(var(--phase) + 360deg)) translateX(var(--orbit-radius))}}
/* Rounded, reflective edges frame a dark translucent reading surface. */
.glass{position:relative;isolation:isolate;overflow:hidden;background:radial-gradient(ellipse at 0 0,#bceff319,transparent 65%),linear-gradient(125deg,#c8faff0d,#12232c08 45%,#84c6d915),#101722a6;border:1px solid #c4f8ff40;box-shadow:inset 0 1px 1px #e6fcff45,inset 0 -2px 4px #7ddaea19,inset 2px 0 4px #d4faff0c,0 22px 70px #0005,0 0 28px #35cced08;backdrop-filter:blur(36px) saturate(145%);-webkit-backdrop-filter:blur(36px) saturate(145%)}
.glass::before{content:"";position:absolute;inset:0;border-radius:inherit;padding:1px;background:linear-gradient(135deg,#e2fcffa6,#b6eef91a 28%,transparent 48%,#77ddec50 78%,#efffff8c);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask-composite:exclude;-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;pointer-events:none;z-index:2}
.glass::after{content:"";position:absolute;inset:-45%;background:radial-gradient(ellipse at 20% 20%,#e2ffff14,transparent 25%),conic-gradient(from 210deg at 60% 60%,transparent 0deg,#73e0ee12 40deg,transparent 65deg);filter:blur(14px);animation:glass-light 10s ease-in-out infinite alternate;animation-play-state:paused;pointer-events:none;z-index:-1}
@keyframes glass-light{from{transform:translate3d(-3%,-2%,0) rotate(-5deg)}to{transform:translate3d(3%,2%,0) rotate(5deg)}}

@supports not (backdrop-filter:blur(1px)){.glass{background:#18232d}}
@media(max-width:760px){.orbit-field{--orbit-radius:155px}.plane-2{--orbit-radius:120px}.glass{backdrop-filter:blur(24px) saturate(140%);-webkit-backdrop-filter:blur(24px) saturate(140%)}}
@media(prefers-reduced-transparency:reduce){.glass{background:#18232d;backdrop-filter:none;-webkit-backdrop-filter:none}.glass::after{display:none}}
@media print{.glass{background:white;box-shadow:none;backdrop-filter:none;-webkit-backdrop-filter:none}.glass::before,.glass::after{display:none}}
