.entry-active{overflow:hidden}.forest-entry{position:fixed;inset:0;z-index:50;isolation:isolate;display:grid;place-items:center;overflow:hidden;background:#0b2f58;opacity:1;transition:opacity 1.35s cubic-bezier(.22,.61,.36,1)}
.entry-art{position:absolute;inset:-4%;width:108%;height:108%;max-width:none;object-fit:cover;z-index:-1;animation:moon-drift 18s ease-in-out infinite alternate;transform-origin:50% 25%}.forest-entry.is-leaving{opacity:0;pointer-events:none}.forest-entry.is-leaving .entry-art{animation:none;transform:scale(1.055) translateY(-8px);transition:transform 1.35s ease}
#enter-forest{border:0;background:transparent;color:var(--green);text-align:center;padding:28px 40px;min-height:90px;margin-top:4svh;text-shadow:1px 1px 0 #05284e}#enter-forest span{display:block;font-family:"East Sea Dokdo",cursive;font-size:42px;letter-spacing:1px;animation:enter-breathe 3s ease-in-out infinite}#enter-forest small{display:block;font-size:14px;letter-spacing:2px;line-height:1.8;margin-top:9px;color:#e2edcd}#enter-forest:hover span{color:var(--pink)}
.entry-specks{position:absolute;inset:0;pointer-events:none;z-index:-1}.entry-specks i{position:absolute;width:3px;height:3px;border-radius:50%;background:#aedb63;opacity:.5;animation:speck-drift var(--duration) var(--delay) ease-in-out infinite}
@keyframes moon-drift{from{transform:translate3d(-8px,6px,0) scale(1.03)}to{transform:translate3d(10px,-7px,0) scale(1.05)}}@keyframes enter-breathe{50%{transform:translateY(-4px) rotate(-1deg);opacity:.8}}@keyframes speck-drift{0%,100%{opacity:.15;transform:translate(0,0)}50%{opacity:.75;transform:translate(12px,-17px)}}
.motion-toggle{position:fixed;right:22px;bottom:20px;z-index:9;border:1px solid #f2bfce6b;background:#05243bd9;color:#fff7f4;border-radius:45% 47% 43% 49%;padding:10px 20px;min-height:44px;font-size:14px;backdrop-filter:blur(5px)}.motion-toggle:hover{color:var(--green)}.entry-active .motion-toggle{visibility:hidden}body:has(dialog[open]) .horse-sprite,body:has(dialog[open]) .title-sway,body:has(dialog[open]) .scene-scroll span,body:has(dialog[open]) .project-copy,body:has(dialog[open]) .project-poster img{animation-play-state:paused!important}
.title-sway{display:inline-block}.title-word{display:inline-block;white-space:nowrap}.title-letter{display:inline-block;transform-origin:50% 90%}.entered .title-sway{animation:title-drift 7s ease-in-out 1.6s infinite}.entered .title-letter{animation:letter-arrive .9s calc(.25s + var(--letter-delay)) cubic-bezier(.2,.7,.3,1.15) both}.entered .forest-heading>p{animation:caption-arrive 1s .9s both}.entered .scene-scroll small{animation:cue-arrive 1s 1.1s both}.scene-scroll span{animation:cue-nudge 3.5s ease-in-out infinite}
@keyframes letter-arrive{0%{opacity:0;transform:translateY(30px) rotate(var(--letter-angle)) scale(.83)}100%{opacity:1;transform:translateY(0) rotate(0) scale(1)}}@keyframes caption-arrive{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}@keyframes cue-arrive{from{opacity:0;translate:0 15px}to{opacity:1;translate:0 0}}@keyframes title-drift{0%,100%{transform:translate(-2px,1px) rotate(-.4deg)}50%{transform:translate(3px,-3px) rotate(.4deg)}}@keyframes cue-nudge{50%{transform:translateY(5px) rotate(.5deg)}}
.hero{height:max(160svh,1040px);min-height:0;overflow:clip}.forest-stage{position:sticky;top:0;width:100%;height:100svh;min-height:0;isolation:isolate;overflow:hidden}.hero-art{inset:0;width:100%;height:100%;transform:none;will-change:auto}.forest-wind{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;opacity:0}.forest-wind-back{z-index:-1}.forest-wind-front{z-index:3;transform:translate3d(0,var(--front-exit-y,0px),0);will-change:transform}.wind-back-ready .hero-art,.wind-front-ready .forest-front{opacity:0}.wind-back-ready .forest-wind-back,.wind-front-ready .forest-wind-front{opacity:1}.forest-front{transform:translate3d(0,var(--front-exit-y,0px),0);transform-origin:50% 100%}.forest-heading{opacity:var(--heading-opacity,1);transform:translate3d(0,var(--heading-exit-y,0px),0)}.scene-scroll{opacity:var(--cue-opacity,1)}.forest-profile{left:50%;top:46%;transform:translateX(calc(-50% + var(--horse-x,0px)));opacity:var(--horse-opacity,1);will-change:transform}.horse-sprite{transform:translateY(var(--horse-hop,0px));animation-duration:.64s}.forest-profile[open] .horse-sprite{transform:none}.horse-held .horse-sprite{animation-play-state:paused}.hero-leaving .forest-profile,.hero-leaving .scene-scroll{visibility:hidden}
.works{position:relative;isolation:isolate;overflow:clip}.works-landscape{position:sticky;top:0;width:100vw;height:100svh;margin-left:calc((100% - 100vw)/2);margin-bottom:-100svh;z-index:-2;pointer-events:none;overflow:hidden;background:#075ed8}.works-landscape img{width:100%;height:100%;object-fit:cover;transform:translate3d(var(--water-x,0px),var(--scene-y,0px),0) scale(1.1);filter:brightness(.83);will-change:transform}.works::after{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background:linear-gradient(180deg,#075ed866,transparent 600px,#042f6259 85%,#053369b3)}
.process,.about,.contact{position:relative;isolation:isolate;overflow:clip;background:#063977}.process::before,.about::before,.contact::before{content:"";position:absolute;inset:-55px -3%;z-index:-2;pointer-events:none;background-size:cover;background-position:center;transform:translate3d(0,var(--scene-y,0px),0) scale(1.04)}.process::before,.about::before{background-image:url("assets/meadow-mountains.webp")}.process::before{background-position:center 35%}.about::before{background-position:center 70%}.contact::before{background-image:url("assets/moon-night.webp");background-position:center 35%}
.process::after,.about::after,.contact::after{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background:linear-gradient(180deg,#03285d66,#04235688)}.process>.section-heading{max-width:800px;margin-left:auto;margin-right:auto;text-shadow:0 2px 12px #012d50}.process-list article{padding:26px 22px;background:#042b68d9;border-radius:18% 22% 15% 20%/12% 14% 15% 12%}.about{max-width:none}.about-intro,.experience{padding:28px;background:#042958d9;border-radius:10% 14% 12% 16%/7% 6% 9% 8%}.about-intro>p:not(.section-kicker):not(.about-role){max-width:none}.tool-line{padding:30px;background:#052652d9;border:0;border-radius:8% 10% 9% 8%/15% 15% 12% 12%}.contact{min-height:70svh}.contact>div{position:relative;padding:24px 28px;background:#062646ba;border-radius:14% 20% 18% 22%/20% 15% 22% 17%}.contact::after{background:linear-gradient(180deg,#072b5855,#041b3bc9)}footer{background:#041b37}
.reveal{opacity:0;translate:0 42px;transition:opacity .85s ease,translate .85s cubic-bezier(.2,.7,.25,1)}.reveal.is-visible{opacity:1;translate:0 0}.project-card .project-copy{background:#03274ce8}.project-card.card-active.is-visible .project-copy{animation:project-float 7s var(--float-delay,0s) ease-in-out infinite}.project-card.card-active.is-visible .project-poster img{animation:poster-breathe 9s var(--float-delay,0s) ease-in-out infinite}.project-poster img{transform-origin:center}.project-poster:focus-visible img,.project-poster:hover img{animation-play-state:paused!important}.project-copy:focus-within,.project-copy:hover{animation-play-state:paused!important}
@keyframes project-float{0%,100%{transform:translate(0,-3px) rotate(-.25deg)}50%{transform:translate(3px,5px) rotate(.25deg)}}@keyframes poster-breathe{0%,100%{transform:scale(1)}50%{transform:scale(1.025)}}
.project-dialog{background:linear-gradient(#062f65e6,#042750e6),url("assets/underwater.webp") center/cover}.resume-dialog{background:linear-gradient(#052c59e8,#042750f2),url("assets/meadow-mountains.webp") center/cover}dialog[open]{animation:dialog-arrive .3s ease-out}@keyframes dialog-arrive{from{opacity:0;translate:0 15px}to{opacity:1;translate:0 0}}
.motion-paused .entry-art,.motion-paused .entry-specks i,.motion-paused #enter-forest span,.motion-paused .title-sway,.motion-paused .scene-scroll span,.motion-paused .horse-sprite,.motion-paused .project-copy,.motion-paused .project-poster img{animation-play-state:paused!important}.motion-paused .reveal{opacity:1;translate:none}.motion-paused .hero-art,.motion-paused .forest-front,.motion-paused .works-landscape img,.motion-paused .process::before,.motion-paused .about::before,.motion-paused .contact::before{will-change:auto}
@media(max-width:900px){.profile-card{top:75%;left:50%;transform:translateX(-50%);width:280px}.contact{gap:22px}.contact>div{padding:22px}}
@media(max-width:640px){.hero{height:max(175svh,1085px)}.forest-stage{min-height:0}.forest-profile{left:50%;top:47%}.motion-toggle{right:15px;bottom:14px;padding:10px 16px}.entry-art{object-position:50% 35%}#enter-forest span{font-size:39px}.forest-heading h1{font-size:72px}.works-landscape img{object-position:48% center}.process-list article{padding:24px 18px}.about-intro,.experience{padding:25px 22px}.tool-line{padding:25px 22px}.contact{padding-top:130px;padding-bottom:90px;min-height:80svh}.contact>div{padding:22px}.contact::before{background-position:50% 10%}.contact-details{margin-top:35px}.contact-details a{font-size:19px}.profile-card{top:73%;left:50%;transform:translateX(-50%)}.reveal{translate:0 25px}}
@media(prefers-reduced-motion:reduce){.hero{height:100svh;min-height:620px}.forest-stage{height:100%;position:relative}.forest-wind{display:none}.wind-back-ready .hero-art,.wind-front-ready .forest-front{opacity:1}.reveal,.title-letter{opacity:1!important;translate:none!important;transform:none!important}.hero-art,.forest-front,.works-landscape img,.process::before,.about::before,.contact::before{transform:none!important}.forest-heading,.scene-scroll,.forest-profile{opacity:1!important}.forest-heading{transform:none}.forest-profile{transform:translateX(-50%)}.is-leaving{transition:none!important}}
.contact::before{background-position:center top}
.forest-wind-front,.forest-front{mask-image:linear-gradient(to bottom,#000 0%,#000 var(--front-mask-start,100%),transparent 100%);filter:blur(var(--front-exit-blur,0px))}.wind-front-ready .forest-wind-front{opacity:var(--front-opacity,1)}.forest-front{opacity:var(--front-opacity,1)}.wind-front-ready .forest-front{opacity:0}.home-scroll-started .scene-scroll{visibility:hidden}
@media(prefers-reduced-motion:reduce){.wind-front-ready .forest-front{opacity:1}.forest-front{mask-image:none;filter:none}.home-scroll-started .scene-scroll{visibility:visible}}

/* One backdrop carries through the sections; only its painted layers change. */
.scene-backdrop{display:none;position:fixed;inset:0;z-index:-1;overflow:hidden;pointer-events:none;isolation:isolate;background:#075ed8}
.scene-ready .scene-backdrop{display:block}
.scene-layer{position:absolute;inset:-3%;background-size:cover;background-position:center;transform:translate3d(0,var(--backdrop-y,0px),0)}
.scene-water{background-image:url("assets/underwater.webp");transform:translate3d(var(--water-x,0px),var(--backdrop-y,0px),0)}
.scene-meadow{background-image:url("assets/meadow-mountains.webp");opacity:var(--meadow-opacity,0)}
.scene-night{background-image:url("assets/moon-night.webp");background-position:center top;opacity:var(--night-opacity,0)}
.scene-backdrop::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,#03275433,#0424526b 70%,#041b3752)}
.scene-ready .hero{background:transparent}
.scene-ready .forest-stage{opacity:var(--forest-scene-opacity,1);mask-image:linear-gradient(to bottom,#000 0%,#000 calc(100% - var(--forest-scene-feather,0px)),transparent 100%)}
.scene-ready .works-landscape{display:none}
.scene-ready :is(.works,.process,.about,.contact){background:transparent}
.scene-ready :is(.process,.about,.contact)::before,.scene-ready :is(.works,.process,.about,.contact)::after{content:none}
.scene-ready footer{background:linear-gradient(180deg,transparent,#041b377d)}
@media(prefers-reduced-motion:reduce){.scene-layer{transform:none!important}}
