@font-face{font-family:Urbanist;src:url(/fonts/Urbanist-Variable.woff2)format("woff2");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:Montserrat;src:url(/fonts/Montserrat-Variable.woff2)format("woff2");font-weight:100 900;font-style:normal;font-display:swap}:root{--bg:#fff;--surface:#f8f9fb;--ink:#1d1d1b;--ink-soft:#4b5563;--ink-faint:#6b7280;--line:#e5e7eb;--line-strong:#1d1d1b;--accent:#003;--accent-soft:#4b5563;--error:#b3261e;--curtain:#1d1d1b;--ease-curtain:cubic-bezier(.76, 0, .24, 1);--display-family:"Urbanist", "Helvetica Neue", Arial, sans-serif;--display-fw-regular:400;--display-fw-medium:500;--display-fw-semibold:600;--display-fw-bold:700;--display-fs-hero:clamp(1.75rem, 1.1rem + 3.2vw, 4rem);--display-fs-h1:clamp(2.125rem, 1.6rem + 1.9vw, 3rem);--display-fs-h2:clamp(1.75rem, 1.4rem + 1.2vw, 2.25rem);--display-fs-h3:clamp(1.5rem, 1.3rem + .7vw, 1.75rem);--display-fs-h4:clamp(1.25rem, 1.12rem + .45vw, 1.375rem);--display-fs-lg:clamp(1.0625rem, 1rem + .2vw, 1.125rem);--display-fs-body:1rem;--display-fs-secondary:.875rem;--display-fs-caption:.75rem;--display-lh-hero:1.1;--display-lh-h1:1.12;--display-lh-h2:1.15;--display-lh-h3:1.2;--display-lh-h4:1.2;--display-lh-body:1.6;--display-ls-hero:-.03em;--display-ls-h1:-.025em;--display-ls-h2:-.02em;--display-ls-h3:-.015em;--display-ls-h4:-.01em;--display-ls-body:0;--display-measure:68ch;--fw-heading:400;--fw-display:300;--fs-h1:var(--display-fs-h1);--fs-h2:var(--display-fs-h2);--fs-h3:clamp(1.3125rem, 1.15rem + .5vw, 1.5rem);--fs-body-lg:1.125rem;--fs-body:1rem;--fs-caption:.875rem;--font-display:var(--display-family);--font-body:"Montserrat", "Helvetica Neue", Arial, sans-serif;--container:77.5rem;--gutter:clamp(1.25rem, 5vw, 4rem);--tap:2.75rem;--ease:cubic-bezier(.19, 1, .22, 1);--ease-soft:cubic-bezier(.25, .8, .25, 1);--radius:2px;--lift-shadow:0 14px 34px color-mix(in srgb, var(--ink) 14%, transparent);--lift-shadow-sm:0 8px 20px color-mix(in srgb, var(--ink) 12%, transparent);--theme-transition:background-color .5s var(--ease-soft), color .5s var(--ease-soft), border-color .5s var(--ease-soft)}[data-theme=dark]{--lift-shadow:0 14px 34px #0009;--lift-shadow-sm:0 8px 20px #00000080;--bg:#0b0b0f;--surface:#14151c;--ink:#fff;--ink-soft:#c9ced7;--ink-faint:#9ca3af;--line:#1f2937;--line-strong:#fff;--accent:#586bff;--accent-soft:#c9ced7;--error:#ff9a8f;--curtain:#1a1b26}html,body{transition:var(--theme-transition)}*{box-sizing:border-box}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}@media (width>=1920px){html{font-size:calc(1rem + .4vw - 7.68px)}}h1,h2,h3,h4{font-family:var(--font-display);letter-spacing:-.02em}h1{font-size:var(--display-fs-h1);font-weight:var(--display-fw-semibold);line-height:var(--display-lh-h1);letter-spacing:var(--display-ls-h1)}h2{font-size:var(--display-fs-h2);font-weight:var(--display-fw-semibold);line-height:var(--display-lh-h2);letter-spacing:var(--display-ls-h2)}h3{font-size:var(--display-fs-h3);font-weight:var(--display-fw-semibold);line-height:var(--display-lh-h3);letter-spacing:var(--display-ls-h3)}h4{font-size:var(--display-fs-h4);font-weight:var(--display-fw-semibold);line-height:var(--display-lh-h4);letter-spacing:var(--display-ls-h4)}.text-lg{font-size:var(--fs-body-lg);font-weight:500}.text-caption{font-size:var(--fs-caption);font-weight:400}.page-title{font-size:var(--fs-h1);font-weight:var(--fw-heading);letter-spacing:-.02em;margin:0 0 .75rem;line-height:1.15}.page-title--long{font-size:var(--fs-h2);font-weight:var(--fw-heading);margin:0 0 1.5rem;line-height:1.3}body{background:var(--bg);color:var(--ink);font-family:var(--font-body);-webkit-font-smoothing:antialiased;margin:0;font-weight:400;line-height:1.5;overflow-x:hidden}img{max-width:100%;display:block}a{color:inherit;text-decoration:none}ul{margin:0;padding:0;list-style:none}button{cursor:pointer;font-family:inherit}.wrap{max-width:var(--container);padding-left:var(--gutter);padding-right:var(--gutter);margin:0 auto}::selection{background:var(--accent);color:var(--bg)}a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid var(--ink);outline-offset:3px}.route-fade{animation:routeIn .6s var(--ease) both}@keyframes routeIn{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}.site-header{z-index:100;background:0 0;position:static}.site-header-bar{height:4rem;padding:0 var(--gutter);background:0 0;justify-content:space-between;align-items:center;gap:1.5rem;margin-top:.5rem;display:flex;position:relative}.logo{flex-shrink:0;align-items:center;display:flex}.logo-mark{background-color:var(--ink);width:1.625rem;height:1.75rem;transition:background-color .3s var(--ease-soft), transform .35s var(--ease-soft);display:block;-webkit-mask:url(/logo.png) 50%/contain no-repeat;mask:url(/logo.png) 50%/contain no-repeat}.logo:hover .logo-mark{transform:scale(1.06)}.logo{gap:.625rem}.logo-text{text-transform:uppercase;font-family:var(--font-display);letter-spacing:-.015em;white-space:nowrap;color:var(--ink);transition:color .3s var(--ease-soft), opacity .3s var(--ease-soft);font-size:1.125rem;font-weight:600;line-height:1}.logo:hover .logo-text{opacity:.7}@media (width<=1060px) and (width>=981px){.logo-text{display:none}}.nav-links{gap:.25rem;display:flex;position:absolute;left:50%;transform:translate(-50%)}.nav-links a{letter-spacing:.12em;text-transform:uppercase;border-radius:var(--radius);color:var(--ink-soft);transition:color .3s var(--ease-soft), box-shadow .25s var(--ease-soft), transform .2s var(--ease-soft);background:0 0;border:none;padding:.5625rem .875rem;font-size:.7812rem;font-weight:400;position:relative}.nav-links a:after{content:"";background:var(--ink);transform-origin:100%;height:1px;transition:transform .4s var(--ease-soft);position:absolute;bottom:.25rem;left:.875rem;right:.875rem;transform:scaleX(0)}.nav-links a:hover{color:var(--ink);background:0 0}.nav-links a:hover:after{transform-origin:0;transform:scaleX(1)}.nav-links a.active{color:var(--ink);box-shadow:none;background:0 0}.nav-links a.active:after{transform:scaleX(1)}.nav-links a:active{box-shadow:0 0 0 1px var(--ink);transform:translateY(1px)}.nav-links a:focus-visible{box-shadow:0 0 0 1px var(--ink);outline:none}.site-header-actions{align-items:center;gap:.875rem;display:flex}.site-header-actions .hero-social{opacity:1;flex-direction:row;gap:.5rem;margin-top:0;transition:none;position:static;transform:none}.site-header-actions .hero-social a{width:1.875rem;height:1.875rem}.theme-toggle{border:1px solid var(--line-strong);width:1.875rem;height:1.875rem;color:var(--ink);cursor:pointer;-webkit-tap-highlight-color:transparent;transition:transform .3s var(--ease-soft), background-color .3s var(--ease-soft), border-color .3s var(--ease-soft), color .3s var(--ease-soft);background:0 0;border-radius:50%;flex-shrink:0;place-items:center;padding:0;display:grid}.site-header-actions .hero-social+.theme-toggle{margin-left:-.375rem}.theme-toggle:hover{background:var(--accent);border-color:var(--accent);color:var(--bg);transform:translateY(-2px)}.theme-toggle:active{transform:scale(.92)}.theme-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.theme-toggle-icon{width:1.0625rem;height:1.0625rem;overflow:visible}.theme-toggle-icon .tt-core{transform-origin:12px 12px;transition:transform .55s cubic-bezier(.4,0,.2,1)}.theme-toggle-icon .tt-bite{transition:transform .55s cubic-bezier(.4,0,.2,1)}.theme-toggle-icon .tt-rays{transform-origin:12px 12px;opacity:0;transition:transform .55s cubic-bezier(.4, 0, .2, 1), opacity .35s var(--ease-soft);transform:rotate(-90deg)scale(.4)}.theme-toggle.is-dark .tt-core{transform:scale(.57)}.theme-toggle.is-dark .tt-bite{transform:translate(14px,-14px)}.theme-toggle.is-dark .tt-rays{opacity:1;transform:rotate(0)scale(1)}@media (prefers-reduced-motion:reduce){.theme-toggle,.theme-toggle-icon *{transition:none}}::view-transition-old(root){mix-blend-mode:normal;animation:none}::view-transition-new(root){mix-blend-mode:normal;animation:none}html.theme-switching :not(.theme-toggle):not(.theme-toggle *),html.theme-switching :not(.theme-toggle):not(.theme-toggle *):before,html.theme-switching :not(.theme-toggle):not(.theme-toggle *):after{transition:none!important}.nav-toggle{border:1px solid var(--line);background:0 0;border-radius:50%;flex-shrink:0;width:2.375rem;height:2.375rem;display:none;position:relative}.nav-toggle span,.nav-toggle span:before,.nav-toggle span:after{content:"";background:var(--ink);height:1px;transition:transform .3s var(--ease-soft), opacity .3s var(--ease-soft);position:absolute;left:.625rem;right:.625rem}.nav-toggle span{top:50%}.nav-toggle span:before{top:-.5rem}.nav-toggle span:after{top:.5rem}.mobile-nav{background:var(--bg);z-index:90;opacity:0;pointer-events:none;transition:opacity .4s var(--ease-soft), transform .4s var(--ease-soft);display:none;position:fixed;inset:4.5rem 0 0;transform:translateY(-8px)}.mobile-nav.is-open{opacity:1;pointer-events:auto;transform:translateY(0)}.mobile-nav ul{padding:2rem var(--gutter);flex-direction:column;gap:.25rem;display:flex}.mobile-nav a{letter-spacing:-.02em;border-bottom:1px solid var(--line);color:var(--ink-faint);transition:color .3s var(--ease-soft), padding-left .35s var(--ease-soft), border-color .3s var(--ease-soft);padding:1rem 0;font-size:1.875rem;font-weight:400;display:block}.mobile-nav a:hover,.mobile-nav a.active{color:var(--ink);border-bottom-color:var(--ink);padding-left:.75rem}.mobile-nav a:active{padding-left:1.125rem}@media (width<=980px){.mobile-nav{display:block}}.hero{padding:4rem 0 0;position:relative;overflow:hidden}.hero-stage{isolation:isolate;background:var(--bg);grid-template-columns:1fr;min-height:78vh;display:grid;position:relative}.hero-watermark{pointer-events:none;z-index:0;grid-area:1/1;align-self:start;width:100%;padding-top:.75rem;overflow:hidden;-webkit-mask-image:linear-gradient(90deg,#0000,#000 10% 90%,#0000);mask-image:linear-gradient(90deg,#0000,#000 10% 90%,#0000)}.hero-watermark-track{gap:.875rem;width:max-content;animation:26s linear infinite heroWatermarkMarquee;display:flex}.hero-watermark-track span{font-family:var(--font-display);font-weight:var(--fw-display);letter-spacing:-.02em;color:var(--ink);opacity:.08;white-space:nowrap;font-size:clamp(2.25rem,6.4vw,5.125rem)}.hero-watermark-dot{opacity:.5;padding:0 .375rem}@keyframes heroWatermarkMarquee{0%{transform:translate(0)}to{transform:translate(-50%)}}@media (prefers-reduced-motion:reduce){.hero-watermark-track{animation:none}}.hero-name{font-family:var(--font-display);font-size:clamp(2.125rem,6.2vw,5.75rem);font-weight:var(--fw-display);letter-spacing:-.025em;white-space:nowrap;z-index:3;color:var(--bg);mix-blend-mode:difference;flex-direction:column;grid-area:1/1;align-self:center;align-items:flex-start;margin:0;line-height:1.02;display:flex;overflow:visible;transform:translateY(70px)}[data-theme=dark] .hero-name{color:var(--ink);mix-blend-mode:difference}.hero-name .word{margin-bottom:-.2em;padding-bottom:.2em;padding-right:.16em;display:inline-flex;overflow:hidden}.hero-name .word span{transition:transform 1.1s var(--ease);display:inline-block;transform:translateY(115%)}.is-ready .hero-name .word span{transform:translateY(0)}.hero-name .word:nth-child(2) span{transition-delay:.12s}.hero-portrait{aspect-ratio:6/5;z-index:2;clip-path:inset(100% 0 0);width:min(52vw,40.625rem);transition:clip-path 1s var(--ease) .2s;border-radius:4px;grid-area:1/1;place-self:end center;margin-right:6%;position:relative;overflow:hidden;transform:translateY(-55px);-webkit-mask-image:linear-gradient(#000 90%,#0000 100%);mask-image:linear-gradient(#000 90%,#0000 100%)}[data-theme=dark] .hero-portrait img{display:none}.hero-portrait:before{content:"";display:none}[data-theme=dark] .hero-portrait:before{background-image:url(/shabi-hero-dark.webp);background-position:top;background-size:cover;display:block;position:absolute;inset:0}.is-ready .hero-portrait{clip-path:inset(0)}.hero-portrait img,.portrait-placeholder{object-fit:cover;object-position:top center;width:100%;height:100%}.portrait-placeholder{background:var(--line);color:#ffffff8c;letter-spacing:.02em;text-align:center;justify-content:center;align-items:flex-end;padding-bottom:1.75rem;font-size:.8125rem;display:flex}.hero-social{z-index:3;opacity:0;transition:opacity .7s var(--ease) .5s, transform .7s var(--ease) .5s;flex-direction:column;gap:1rem;display:flex;position:absolute;bottom:7.5rem;left:0;transform:translateY(12px)}.is-ready .hero-social{opacity:1;transform:translateY(0)}.hero-social a{border:1px solid var(--line-strong);width:2.125rem;height:2.125rem;transition:background .3s var(--ease-soft), transform .3s var(--ease-soft);border-radius:50%;justify-content:center;align-items:center;display:flex}.hero-social a:hover{background:var(--accent);border-color:var(--accent);transform:translateY(-2px)}.hero-social a:hover svg{stroke:var(--bg)}.hero-social svg{width:.9375rem;height:.9375rem}.hero-role{text-align:right;z-index:3;opacity:0;transition:opacity .7s var(--ease) .55s, transform .7s var(--ease) .55s;margin:0;position:absolute;bottom:7.5rem;right:0;transform:translateY(12px)}.is-ready .hero-role{opacity:1;transform:translateY(0)}.hero-tagline{letter-spacing:.03em;color:var(--accent);margin:0 0 .625rem;font-size:.875rem;font-weight:500}.hero-role p:last-child{letter-spacing:-.02em;margin:0;font-size:clamp(1.5rem,3.6vw,2.5rem);font-weight:500;line-height:1.1}.hero-scroll-cue{color:var(--ink-soft);align-items:center;gap:.75rem;padding:1.75rem 0 2.5rem;font-size:.8125rem;display:flex}.hero-scroll-cue .line{background:var(--ink-soft);width:2.5rem;height:1px}section{padding:6rem 0}.section-head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:flex-end;gap:1.5rem;margin-bottom:3rem;padding-bottom:1.5rem;display:flex}.section-head h2{font-size:var(--fs-h2);font-weight:var(--fw-heading);letter-spacing:-.02em;margin:0}.section-head .count{color:var(--ink-faint);font-size:.9375rem}.eyebrow-plain{color:var(--ink-soft);margin:0 0 .75rem;font-size:.9375rem}.reveal{opacity:0;transition:opacity .8s var(--ease), transform .8s var(--ease);transform:translateY(28px)}.reveal.in-view{opacity:1;transform:translateY(0)}.curtain{--t:.6s;z-index:9999;pointer-events:none;position:fixed;inset:0}.curtain-bar{background:var(--curtain);transform-origin:50% 0;height:100%;position:absolute;top:0}.curtain.is-lifting .curtain-bar{animation:curtainBar calc(var(--t) * 1.1) var(--ease-curtain) calc(var(--i) * var(--t) * .11) forwards}@keyframes curtainBar{to{transform:scaleY(0)}}.curtain-lockup{z-index:1;color:#fff;justify-content:center;align-items:center;font-size:clamp(.875rem,1.9vw,2.375rem);display:flex;position:absolute;inset:0}.curtain.is-lifting .curtain-lockup{animation:lockupOut calc(var(--t) * .35) cubic-bezier(.4, 0, .2, 1) forwards}@keyframes lockupOut{to{opacity:0}}.curtain-row{animation:lockupShift calc(var(--t) * 1) cubic-bezier(.45, 0, .2, 1) calc(var(--t) * 1.8) forwards;align-items:center;gap:.5em;display:flex;transform:translate(4.07em)}@keyframes lockupShift{to{transform:translate(0)}}.curtain-mark{flex:none;width:auto;height:2.1em;overflow:visible}.curtain-mark-fill{fill:#fff;fill-opacity:0;animation:wordFill calc(var(--t) * .5) cubic-bezier(.4, 0, .2, 1) calc(var(--t) * 1.58) forwards}.curtain-mark-stroke{fill:none;stroke:#fff;stroke-width:7px;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1;stroke-dashoffset:1px;opacity:0;animation:strokeOn 10ms linear calc(var(--t) * .13) forwards, markDraw calc(var(--t) * 1.45) cubic-bezier(.45, 0, .2, 1) calc(var(--t) * .13) forwards, markThin calc(var(--t) * .5) cubic-bezier(.4, 0, .2, 1) calc(var(--t) * 1.58) forwards}@keyframes markDraw{to{stroke-dashoffset:0}}@keyframes markThin{to{stroke-width:0}}.curtain-word{flex:none;width:auto;height:.74em;display:block;overflow:visible}.curtain-word-fill{fill:#fff;fill-opacity:0;animation:wordFill calc(var(--t) * .6) cubic-bezier(.4, 0, .2, 1) calc(var(--t) * 3.2) forwards}.curtain-word-stroke{fill:none;stroke:#fff;stroke-width:46px;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1;stroke-dashoffset:1px;opacity:0;animation:strokeOn 10ms linear calc(var(--t) * 2.1) forwards, wordDraw calc(var(--t) * 1.4) cubic-bezier(.45, 0, .2, 1) calc(var(--t) * 2.1) forwards, strokeThin calc(var(--t) * .6) cubic-bezier(.4, 0, .2, 1) calc(var(--t) * 3.2) forwards}@keyframes strokeOn{to{opacity:1}}@keyframes wordDraw{to{stroke-dashoffset:0}}@keyframes wordFill{to{fill-opacity:1}}@keyframes strokeThin{to{stroke-width:0}}.curtain-line{background:#ffffff24;border-radius:2px;width:clamp(4.5rem,7vw,8.75rem);height:1px;position:absolute;bottom:clamp(2rem,7vh,4.5rem);left:50%;overflow:hidden;transform:translate(-50%)}.curtain-line span{transform-origin:0;animation:lineGrow calc(var(--t) * 3.95) cubic-bezier(.5, 0, .2, 1) calc(var(--t) * .15) forwards;background:#fff;position:absolute;inset:0;transform:scaleX(0)}@keyframes lineGrow{to{transform:scaleX(1)}}.curtain.is-lifting .curtain-line{animation:lockupOut calc(var(--t) * .35) cubic-bezier(.4, 0, .2, 1) forwards}.has-curtain:not(.curtain-lifting) .site-header-bar>*{opacity:0}.has-curtain.curtain-lifting .site-header-bar>*{animation:fadeDown .9s var(--ease) .5s backwards}@keyframes fadeDown{0%{opacity:0;transform:translateY(-12px)}}.mask{margin-bottom:-.12em;padding-bottom:.12em;display:block;overflow:hidden}.mask-in{transition:transform 1s var(--ease) 80ms;display:block;transform:translateY(112%)}.reveal.in-view .mask-in{transform:translateY(0)}:is(.reveal:has(>.mask),.reveal:has(>h2>.mask)){transform:none}.reveal.stagger{opacity:1;transform:none}.reveal.stagger:not(.in-view)>*{opacity:0}.reveal.stagger.in-view>*{animation:riseIn .95s var(--ease) backwards}.reveal.stagger.in-view>:nth-child(2){animation-delay:90ms}.reveal.stagger.in-view>:nth-child(3){animation-delay:.18s}.reveal.stagger.in-view>:nth-child(4){animation-delay:.27s}.reveal.stagger.in-view>:nth-child(5){animation-delay:.36s}.reveal.stagger.in-view>:nth-child(6){animation-delay:.45s}.reveal.stagger.in-view>:nth-child(n+7){animation-delay:.54s}@keyframes riseIn{0%{opacity:0;transform:translateY(44px)}}.reveal.reveal-clip{opacity:1;transform:none}.reveal.reveal-clip>*{clip-path:inset(100% 0 0);transition:clip-path 1.2s var(--ease-curtain)}.reveal.reveal-clip.in-view>*{clip-path:inset(0)}@media (prefers-reduced-motion:reduce){.curtain{display:none}.mask-in{transform:none}.reveal.stagger:not(.in-view)>*{opacity:1}.reveal.reveal-clip>*{clip-path:none}}.intro{grid-template-columns:1.1fr 1fr;align-items:start;gap:4rem;display:grid}.intro h2{font-size:var(--fs-h2);font-weight:var(--fw-heading);letter-spacing:-.02em;margin:0;line-height:1.3}.intro-meta{flex-direction:column;gap:1.75rem;display:flex}.intro-meta dl{grid-template-columns:auto 1fr;gap:.5rem 1.25rem;margin:0;display:grid}.intro-meta dt{color:var(--ink-faint);font-size:.875rem}.intro-meta dd{margin:0;font-size:.875rem}.intro-cta{border-bottom:1px solid var(--accent);color:var(--accent);font-size:var(--fs-body);align-self:start;align-items:center;gap:.625rem;width:fit-content;padding-bottom:.25rem;font-weight:500;display:inline-flex}.project-grid{border-top:1px solid var(--line);border-left:1px solid var(--line);grid-template-columns:repeat(2,1fr);gap:0;display:grid}.project-card{background:var(--bg);border-right:1px solid var(--line);border-bottom:1px solid var(--line);min-height:20rem;transition:transform .45s var(--ease-soft), box-shadow .45s var(--ease-soft);flex-direction:column;justify-content:space-between;padding:2.5rem;display:flex;position:relative;overflow:hidden}.project-card:hover{box-shadow:var(--lift-shadow);z-index:2;transform:translateY(-4px)}.project-card .thumb{background:var(--ink);opacity:0;transition:opacity .5s var(--ease-soft), transform .6s var(--ease-soft);position:absolute;inset:0;transform:scale(1.06)}.project-card:hover .thumb{opacity:1;transform:scale(1)}.project-card>*{z-index:1;position:relative}.project-card:hover .p-index,.project-card:hover .p-title,.project-card:hover .p-tags{color:var(--bg)}.project-card .p-index{color:var(--ink-faint);transition:color .4s var(--ease-soft);font-size:.875rem}.project-card .p-title{font-size:var(--fs-h3);font-weight:var(--fw-heading);letter-spacing:-.02em;transition:color .4s var(--ease-soft);margin:1.25rem 0 .75rem}.project-card .p-tags{color:var(--ink-soft);transition:color .4s var(--ease-soft);flex-wrap:wrap;gap:.625rem;font-size:.8125rem;display:flex}.project-card .p-arrow{border:1px solid var(--line-strong);width:2.5rem;height:2.5rem;transition:transform .4s var(--ease-soft), background .3s, border-color .3s;border-radius:50%;justify-content:center;align-self:flex-end;align-items:center;display:flex}.project-card:hover .p-arrow{background:var(--bg);border-color:var(--bg);transform:rotate(45deg)}.coverflow{padding:.875rem 0 1.5rem;overflow:hidden;-webkit-mask-image:linear-gradient(90deg,#0000,#000 6% 94%,#0000);mask-image:linear-gradient(90deg,#0000,#000 6% 94%,#0000)}.coverflow-track{gap:1.75rem;width:max-content;animation:34s linear infinite coverflowMarquee;display:flex}.coverflow:hover .coverflow-track{animation-play-state:paused}.coverflow-card{text-align:center;border-radius:var(--radius);border:1px solid var(--line);min-width:13.75rem;height:7.5rem;font-family:var(--font-display);font-weight:var(--fw-display);letter-spacing:0;color:var(--ink);transition:transform .4s var(--ease-soft), box-shadow .4s var(--ease-soft), background .3s var(--ease-soft), color .3s var(--ease-soft), border-color .3s var(--ease-soft);background:0 0;flex-shrink:0;justify-content:center;align-items:center;padding:1.25rem;font-size:1.3125rem;display:flex}.coverflow-card:hover{box-shadow:var(--lift-shadow);background:var(--ink);color:var(--bg);border-color:var(--ink);transform:translateY(-4px)scale(1.06)}@keyframes coverflowMarquee{0%{transform:translate(0)}to{transform:translate(-50%)}}@media (prefers-reduced-motion:reduce){.coverflow-track{animation:none}}@media (width<=768px){.coverflow-card{min-width:10.625rem;height:7.5rem;font-size:1.0625rem}}.project-row{border-bottom:1px solid var(--line);transition:padding-left .35s var(--ease-soft);grid-template-columns:3.75rem 1fr auto auto;align-items:center;gap:2rem;padding:2rem 0;display:grid}.project-row:hover{padding-left:.75rem}.project-row .r-index{color:var(--ink-faint);font-size:.875rem}.project-row .r-title{font-size:var(--fs-h3);font-weight:var(--fw-heading);letter-spacing:-.02em}.project-row .r-tag{color:var(--ink-soft);font-size:.875rem}.project-row .r-year{color:var(--ink-faint);font-size:.875rem}.split-block{grid-template-columns:.9fr 1.1fr;gap:4rem;display:grid}.tool-list{grid-template-columns:1fr 1fr;gap:.75rem 2rem;display:grid}.tool-list li{border-bottom:1px solid var(--line);justify-content:space-between;padding:.875rem 0;font-size:1rem;display:flex}.tool-list li span{color:var(--ink-faint);font-size:.8125rem}.skill-tags{flex-wrap:wrap;gap:.625rem;display:flex}.skill-tags span{border:1px solid var(--line);border-radius:var(--radius);color:var(--ink-soft);transition:transform .3s var(--ease-soft), box-shadow .3s var(--ease-soft), border-color .3s var(--ease-soft), color .3s var(--ease-soft);padding:.5rem 1rem;font-size:.875rem}.skill-tags span:hover{box-shadow:var(--lift-shadow-sm);border-color:var(--ink);color:var(--ink);transform:translateY(-2px)}.lang-marquee{width:100%;margin:-.625rem 0 -1.5rem;padding:.625rem 0 1.5rem;overflow:hidden;-webkit-mask-image:linear-gradient(90deg,#0000,#000 6% 94%,#0000);mask-image:linear-gradient(90deg,#0000,#000 6% 94%,#0000)}.lang-marquee-track{gap:1rem;width:max-content;animation:48s linear infinite langMarquee;display:flex}.lang-marquee:hover .lang-marquee-track{animation-play-state:paused}.lang-float-card{border:1px solid var(--line);border-radius:var(--radius);color:var(--ink);white-space:nowrap;transition:transform .35s var(--ease-soft), box-shadow .35s var(--ease-soft), border-color .3s var(--ease-soft);background:0 0;flex-shrink:0;align-items:center;gap:.75rem;padding:.875rem 1.375rem;font-size:.9375rem;font-weight:500;display:flex}.lang-float-card:hover{box-shadow:var(--lift-shadow-sm);border-color:var(--ink);transform:translateY(-2px)}.lang-float-icon{object-fit:contain;width:1.375rem;height:1.375rem;transition:filter .4s var(--ease-soft)}[data-theme=dark] .lang-float-icon{filter:invert()brightness(1.8)}@keyframes langMarquee{0%{transform:translate(0)}to{transform:translate(-50%)}}@media (prefers-reduced-motion:reduce){.lang-marquee-track{animation:none}}.timeline-item{border-bottom:1px solid var(--line);grid-template-columns:8.75rem 1fr;gap:1.5rem;padding:1.75rem 0;display:grid}.timeline-item .t-year{color:var(--ink-faint);font-size:.875rem}.timeline-item h3{font-size:1.1875rem;font-weight:var(--fw-heading);margin:0 0 .375rem}.timeline-item p{color:var(--ink-soft);max-width:52ch;margin:0;font-size:.9375rem}.about-portrait{aspect-ratio:4/5;background:var(--bg);border-radius:4px;overflow:hidden}.cta-band{border-top:1px solid var(--line);border-bottom:1px solid var(--line);text-align:center;padding:6rem 0}.cta-band h2{font-size:var(--fs-h1);font-weight:var(--fw-heading);letter-spacing:-.02em;margin:0 0 2rem}.cta-btn{border:1px solid var(--accent);color:var(--accent);border-radius:var(--radius);font-size:var(--fs-body);transition:transform .35s var(--ease-soft), box-shadow .35s var(--ease-soft), background .3s var(--ease-soft), color .3s var(--ease-soft);background:0 0;align-items:center;gap:.625rem;padding:.875rem 1.875rem;font-weight:500;display:inline-flex}.cta-btn:hover{background:var(--accent);border-color:var(--accent);color:var(--bg);box-shadow:var(--lift-shadow);transform:translateY(-2px)}.site-footer{border-top:1px solid var(--line);padding:3rem 0}.site-footer .wrap{color:var(--ink-soft);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;font-size:.875rem;display:flex}.footer-links{flex-wrap:wrap;gap:1.5rem;display:flex}.footer-links a{position:relative}.footer-links a:after{content:"";background:var(--accent);height:1px;transition:right .35s var(--ease);position:absolute;bottom:-.1875rem;left:0;right:100%}.footer-links a:hover:after{right:0}.contact-grid{grid-template-columns:1fr 1fr;gap:4rem;display:grid}.contact-info dl{gap:1.5rem;margin:0 0 2.5rem;display:grid}.contact-info dt{color:var(--ink-faint);margin-bottom:.25rem;font-size:.8125rem}.contact-info dd{word-break:break-word;margin:0;font-size:1.125rem}.contact-info dd a{border-bottom:1px solid var(--line);transition:border-color .3s}.contact-tz{letter-spacing:.04em;color:var(--ink-soft);margin-top:.25rem;font-size:.8125rem;display:block}.contact-time{color:var(--ink-faint);margin-top:2px;font-size:.8125rem;display:block}.resume-link{border:1px solid var(--ink);border-radius:var(--radius);color:var(--ink);transition:transform .35s var(--ease-soft), box-shadow .35s var(--ease-soft), background .3s var(--ease-soft), color .3s var(--ease-soft);align-items:center;gap:.625rem;margin-top:1.75rem;padding:.625rem 1.125rem;font-size:.875rem;font-weight:500;display:inline-flex}.resume-link svg{fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;width:1rem;height:1rem}.resume-link:hover{background:var(--ink);color:var(--bg);box-shadow:var(--lift-shadow-sm);transform:translateY(-2px)}.resume-link--header{white-space:nowrap;margin-top:0;padding:.375rem .875rem;font-size:.8125rem}.resume-link--header svg{width:.875rem;height:.875rem}.mobile-nav .mobile-nav-resume{padding-top:1.5rem}.mobile-nav .resume-link{color:var(--ink);border:1px solid var(--ink);padding:.625rem 1.125rem;font-size:.9375rem;display:inline-flex}.mobile-nav .resume-link:hover,.mobile-nav .resume-link:active{color:var(--bg);border-color:var(--ink);padding:.625rem 1.125rem}@media (width<=980px){.site-header-actions .resume-link{display:none}}.contact-info dd a:hover{border-color:var(--accent)}.field{margin-bottom:1.5rem}.field label{color:var(--ink-soft);margin-bottom:.5rem;font-size:.8125rem;display:block}.field input,.field textarea,.field select{border:1px solid var(--line);border-radius:var(--radius);width:100%;color:var(--ink);transition:border-color .3s var(--ease-soft), box-shadow .35s var(--ease-soft);resize:vertical;background:0 0;padding:.875rem 1rem;font-family:inherit;font-size:1rem}.field select{appearance:none;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238d8279' stroke-width='1.6'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-position:right 1rem center;background-repeat:no-repeat;background-size:1rem}.field select:invalid{color:var(--ink-soft)}.field input:focus,.field textarea:focus,.field select:focus{border-color:var(--ink);box-shadow:var(--lift-shadow-sm);outline:none}.custom-select{position:relative}.custom-select-trigger{border:1px solid var(--line);border-radius:var(--radius);width:100%;color:var(--ink);cursor:pointer;transition:border-color .3s var(--ease-soft), box-shadow .35s var(--ease-soft);text-align:left;background:0 0;justify-content:space-between;align-items:center;gap:.75rem;padding:.875rem 1rem;font-family:inherit;font-size:1rem;display:flex}.custom-select-trigger:hover,.custom-select-trigger[aria-expanded=true]{border-color:var(--ink);box-shadow:var(--lift-shadow-sm)}.custom-select-placeholder{color:var(--ink-soft)}.custom-select-chevron{width:1rem;height:1rem;color:var(--ink-soft);transition:transform .25s var(--ease-soft);flex-shrink:0}.custom-select-chevron.is-open{transform:rotate(180deg)}.custom-select-list{z-index:30;background:var(--bg);border:1px solid var(--ink);border-radius:var(--radius);box-shadow:var(--lift-shadow);max-height:16.25rem;animation:selectDropIn .2s var(--ease-soft);margin:0;padding:.25rem;list-style:none;position:absolute;top:calc(100% + .25rem);left:0;right:0;overflow-y:auto}@keyframes selectDropIn{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}.custom-select-option{color:var(--ink);cursor:pointer;transition:background .15s var(--ease-soft), color .15s var(--ease-soft);border-radius:0;padding:.625rem .75rem;font-size:.9375rem}.custom-select-option:hover{background:color-mix(in srgb, var(--ink) 7%, transparent)}.custom-select-option.is-selected{background:var(--accent);color:var(--bg)}.submit-btn{border:1px solid var(--ink);background:var(--ink);color:var(--bg);border-radius:var(--radius);transition:transform .35s var(--ease-soft), box-shadow .35s var(--ease-soft), background .3s var(--ease-soft), color .3s var(--ease-soft);align-items:center;gap:.625rem;padding:.875rem 1.875rem;font-size:.9375rem;display:inline-flex}.submit-btn:hover{color:var(--ink);box-shadow:var(--lift-shadow-sm);background:0 0;transform:translateY(-2px)}.submit-btn:disabled{opacity:.5;cursor:not-allowed}.submit-btn:disabled:hover{background:var(--ink);color:var(--bg);box-shadow:none;transform:none}.form-status{margin-top:1rem;font-size:.875rem}.form-status.success{color:#2f7a4c}.form-status.error{color:var(--error)}.pd-hero{padding-top:3rem}.pd-title{font-size:var(--fs-h1);font-weight:var(--fw-heading);letter-spacing:-.02em;margin:1.5rem 0 2.5rem;line-height:1.15}.pd-meta{border-top:1px solid var(--line);border-bottom:1px solid var(--line);flex-wrap:wrap;gap:3rem;margin-bottom:3.5rem;padding:1.5rem 0;display:flex}.pd-meta div dt{color:var(--ink-faint);margin-bottom:.375rem;font-size:.8125rem}.pd-meta div dd{margin:0;font-size:1rem}.pd-cover{aspect-ratio:16/9;border-radius:var(--radius);margin-bottom:4rem;overflow:hidden}.pd-body{grid-template-columns:.8fr 1.2fr;gap:4rem;display:grid}.pd-body h3{font-size:1.375rem;font-weight:var(--fw-heading);margin:0 0 1rem}.pd-body p{color:var(--ink-soft);max-width:62ch;margin:0 0 1.25rem;font-size:1rem}.pd-tech{flex-wrap:wrap;gap:.625rem;margin-top:.5rem;display:flex}.pd-tech span{border:1px solid var(--line);border-radius:var(--radius);color:var(--ink-soft);padding:.375rem .875rem;font-size:.8125rem}.pd-nav{border-top:1px solid var(--line);justify-content:space-between;padding:3rem 0;display:flex}.pd-nav a{flex-direction:column;gap:.375rem;display:flex}.pd-nav .dir{color:var(--ink-faint);font-size:.8125rem}.pd-nav .title{font-size:1.25rem;font-weight:var(--fw-heading)}.pd-nav .next{text-align:right}.grayscale-fill{background:var(--line);width:100%;height:100%}.state-msg{color:var(--ink-soft);padding:4rem 0;font-size:1rem}@media (width<=980px){.nav-links{display:none}.nav-toggle{display:block}.intro,.split-block,.contact-grid,.pd-body,.project-grid{grid-template-columns:1fr}.hero-social,.hero-role{margin-top:2rem;position:static}.hero-stage{display:block}.hero-portrait{width:70vw;margin:1.5rem auto 0}.tool-list{grid-template-columns:1fr}.project-row{grid-template-columns:2.5rem 1fr;row-gap:.5rem}.project-row .r-tag,.project-row .r-year{grid-column:2}.about-portrait{aspect-ratio:3/4}.split-block[style]{grid-template-columns:1fr!important}.pd-meta{gap:1.75rem}.contact-grid{gap:3rem}}@media (width<=768px){.site-header-bar{height:3.75rem}.mobile-nav{inset:4.25rem 0 0}section{padding:4.5rem 0}.project-card{min-height:16.25rem;padding:1.75rem}.timeline-item,.pd-meta>div{grid-template-columns:1fr}.timeline-item{grid-template-columns:1fr;gap:.375rem}.pd-nav{flex-direction:column;gap:1.5rem}.pd-nav .next{text-align:left}}@media (width<=900px){.hero-name{mix-blend-mode:normal;color:var(--ink);align-items:center;font-size:7vw;transform:translateY(66vw)}}@media (width<=560px){section{padding:3.5rem 0}.hero-name{mix-blend-mode:normal;color:var(--ink);font-size:8.2vw;line-height:1;transform:translateY(318px)}.hero{padding-top:2.5rem}.hero-stage{min-height:auto;padding-bottom:2rem}.hero-portrait{width:82vw}.cta-band h2{line-height:1.05}.project-row{padding:1.5rem 0}.skill-tags span{padding:.4375rem .875rem;font-size:.8125rem}.contact-info dd{font-size:1rem}}@media (width<=380px){.hero-name{font-size:8.2vw}.site-header-actions .hero-social{display:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.001ms!important;animation-duration:.001ms!important}html{scroll-behavior:auto}}.service-grid{border-top:1px solid var(--line);border-left:1px solid var(--line);grid-template-columns:repeat(3,1fr);display:grid}.service-card{background:var(--bg);border-right:1px solid var(--line);border-bottom:1px solid var(--line);transition:transform .45s var(--ease-soft), box-shadow .45s var(--ease-soft);flex-direction:column;align-items:flex-start;gap:1rem;padding:2.25rem 2rem;display:flex;position:relative}.service-card:hover{box-shadow:var(--lift-shadow);z-index:2;transform:translateY(-4px)}.service-card .s-index{color:var(--ink-faint);font-size:.875rem}.service-card h3{font-size:var(--fs-h3);font-weight:var(--fw-heading);letter-spacing:-.02em;margin:0;line-height:1.25}.service-card p{color:var(--ink-soft);margin:0;font-size:.9375rem;line-height:1.7}.service-tags{flex-wrap:wrap;gap:.5rem;margin-top:auto;padding-top:.5rem;display:flex}.service-tags span{border:1px solid var(--line);border-radius:var(--radius);color:var(--ink-soft);transition:border-color .3s var(--ease-soft), color .3s var(--ease-soft);padding:.25rem .625rem;font-size:.7812rem}.service-card:hover .service-tags span{border-color:var(--ink-faint)}.service-example{font-size:var(--fs-caption);color:var(--accent);border-bottom:1px solid var(--line);transition:border-color .3s var(--ease-soft);padding-bottom:2px}.service-example:hover{border-color:var(--accent)}.process-grid{grid-template-columns:repeat(4,1fr);gap:2rem;display:grid}.process-step{border-top:1px solid var(--ink);padding-top:1.25rem}.process-step .p-num{color:var(--ink-faint);font-size:.875rem}.process-step h3{font-size:1.375rem;font-weight:var(--fw-heading);letter-spacing:-.02em;margin:.75rem 0 .5rem}.process-step p{color:var(--ink-soft);margin:0;font-size:.9375rem;line-height:1.7}@media (width<=980px){.service-grid,.process-grid{grid-template-columns:repeat(2,1fr)}}@media (width<=768px){.service-grid{grid-template-columns:1fr}.service-card{padding:1.75rem 1.5rem}.process-grid{grid-template-columns:1fr;gap:1.75rem}}.stats-strip{grid-template-columns:repeat(3,1fr);gap:2rem;padding-top:3.5rem;padding-bottom:3.5rem;display:grid}.stat{flex-direction:column;gap:.375rem;display:flex}.stat-num{font-family:var(--font-display);font-weight:var(--fw-display);letter-spacing:-.03em;color:var(--ink);font-variant-numeric:tabular-nums;font-size:clamp(3rem,7vw,5.5rem);line-height:1}.stat-label{color:var(--ink-soft);font-size:1rem}@media (width<=768px){.stats-strip{grid-template-columns:1fr;gap:1.75rem;padding-top:2.5rem;padding-bottom:2.5rem}}.pd-ps{grid-template-columns:1fr 1fr;gap:1.5rem;display:grid}.pd-ps-card{border:1px solid var(--line);background:var(--surface);border-radius:var(--radius);transition:transform .35s var(--ease-soft), box-shadow .35s var(--ease-soft);padding:2rem 1.75rem}.pd-ps-card:hover{box-shadow:var(--lift-shadow-sm);transform:translateY(-4px)}.pd-ps-label{letter-spacing:.14em;text-transform:uppercase;color:var(--ink-faint);font-size:.75rem}.pd-ps-card h3{font-size:1.375rem;font-weight:var(--fw-heading);letter-spacing:-.02em;margin:.625rem 0 .75rem}.pd-ps-card p{color:var(--ink-soft);margin:0;font-size:1rem;line-height:1.75}@media (width<=800px){.pd-ps{grid-template-columns:1fr}}.testimonial-card{border:1px solid var(--line);background:var(--surface);border-radius:var(--radius);transition:transform .35s var(--ease-soft), box-shadow .35s var(--ease-soft);flex-direction:column;justify-content:space-between;gap:1.5rem;margin:0;padding:2rem 1.75rem;display:flex}.testimonial-card:hover{box-shadow:var(--lift-shadow-sm);transform:translateY(-4px)}.testimonial-card blockquote{color:var(--ink);margin:0;font-size:1rem;line-height:1.75}.testimonial-card figcaption{color:var(--ink-soft);flex-direction:column;gap:2px;font-size:.8125rem;display:flex}.testimonial-card figcaption strong{color:var(--ink);font-weight:600}.tslider{--gap:24px}.tslider-viewport{touch-action:pan-y;outline:none;margin:-.875rem;padding:.875rem;overflow:hidden}.tslider-viewport:focus-visible{outline:1px solid var(--line-strong);outline-offset:-4px}.tslider-track{gap:var(--gap);transform:translateX(calc(var(--i) * -1 * (100% + var(--gap)) / var(--per)));transition:transform .8s var(--ease);display:flex}.tslider-card{flex:0 0 calc((100% - var(--gap) * (var(--per) - 1)) / var(--per));-webkit-user-select:none;user-select:none;min-width:0;transition:opacity .7s var(--ease-soft), transform .35s var(--ease-soft), box-shadow .35s var(--ease-soft);justify-content:flex-start}.tslider-card.is-out{opacity:0;pointer-events:none}.tslider-card figcaption{margin-top:auto}.tslider-topic{letter-spacing:.12em;text-transform:uppercase;color:var(--ink-faint);margin:0;font-size:.6875rem}.tslider-card blockquote{font-size:.9375rem;line-height:1.7}.tslider-controls{border-top:1px solid var(--line);justify-content:space-between;align-items:center;margin-top:1.75rem;padding-top:1rem;display:flex}.tslider-count{letter-spacing:.1em;color:var(--ink-faint);font-variant-numeric:tabular-nums;font-size:.75rem}.tslider .cert-arrow:disabled{opacity:.35;cursor:default}.tslider .cert-arrow:disabled:hover{color:var(--ink-faint)}@media (prefers-reduced-motion:reduce){.tslider-track,.tslider-card{transition:none}}.field-reveal{animation:fieldReveal .4s var(--ease-soft)}@keyframes fieldReveal{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.spinner{border:2px solid;border-right-color:#0000;border-radius:50%;width:.875rem;height:.875rem;animation:.7s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.submit-btn:disabled{opacity:.75}.form-success{border:1px solid var(--ink);border-radius:var(--radius);animation:fieldReveal .5s var(--ease-soft);align-items:flex-start;gap:.875rem;margin-top:1.25rem;padding:1rem 1.125rem;display:flex}.form-success svg{fill:none;width:1.625rem;height:1.625rem;stroke:var(--ink);stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}.form-success strong{font-size:.9375rem;font-weight:600;display:block}.form-success p{color:var(--ink-soft);margin:2px 0 0;font-size:.875rem}@media (prefers-reduced-motion:reduce){.spinner{animation-duration:1.6s!important}}.hero-name{font-size:var(--display-fs-hero);font-weight:var(--display-fw-bold);line-height:var(--display-lh-hero);letter-spacing:var(--display-ls-hero)}.hero-watermark-track span{font-weight:var(--display-fw-medium);letter-spacing:var(--display-ls-h2)}.page-title,.pd-title,.cta-band h2{font-size:var(--display-fs-h1);font-weight:var(--display-fw-semibold);line-height:var(--display-lh-h1);letter-spacing:var(--display-ls-h1)}.page-title--long,.section-head h2,.intro h2{font-size:var(--display-fs-h2);font-weight:var(--display-fw-semibold);line-height:var(--display-lh-h2);letter-spacing:var(--display-ls-h2)}.intro h2{line-height:1.2}.project-card .p-title,.pd-ps-card h3{font-size:var(--display-fs-h3);font-weight:var(--display-fw-semibold);line-height:var(--display-lh-h3);letter-spacing:var(--display-ls-h3)}.service-card h3,.process-step h3,.timeline-item h3,.pd-body h3{font-size:var(--display-fs-h4);font-weight:var(--display-fw-semibold);line-height:var(--display-lh-h4);letter-spacing:var(--display-ls-h4)}.stat-num{font-weight:var(--display-fw-semibold);letter-spacing:var(--display-ls-hero);line-height:1}.coverflow-card{font-weight:var(--display-fw-semibold)}.about-label{font-size:var(--display-fs-secondary);font-weight:var(--display-fw-medium);letter-spacing:.02em;line-height:1.3}.pd-cover-img{object-fit:cover;width:100%;height:100%;display:block}.project-card .thumb{background-color:var(--ink)}.project-card .thumb[style*=--cover]{background-image:linear-gradient(#050520b8, #050520b8), var(--cover);background-position:50%;background-size:cover}.coverflow-card.has-cover:hover{background-color:var(--ink);background-image:linear-gradient(#050520ad, #050520ad), var(--cover);background-position:50%;background-size:cover}.smooth-caret-wrap{width:100%;display:block;position:relative}.smooth-caret-field{caret-color:#0000;display:block}.smooth-caret{background:var(--ink);opacity:0;pointer-events:none;will-change:transform;width:2px;transition:transform .12s var(--ease), height .12s var(--ease), opacity .15s var(--ease-soft);border-radius:2px;position:absolute;top:0;left:0}.smooth-caret.is-instant{transition:opacity .15s var(--ease-soft)}.smooth-caret.is-on{opacity:1;animation:1.1s step-end infinite caret-blink}.smooth-caret.is-on.is-typing{animation:none}@keyframes caret-blink{0%,55%{opacity:1}56%,to{opacity:0}}@media (prefers-reduced-motion:reduce){.smooth-caret{transition:opacity .15s linear}.smooth-caret.is-on{animation:none}}html.smooth-scroll{scroll-behavior:auto}.scroll-progress{z-index:80;pointer-events:none;opacity:1;width:.25rem;height:clamp(13.75rem,42vh,26.25rem);transition:opacity .4s var(--ease-soft);position:fixed;top:50%;left:.625rem;transform:translateY(-50%)}.scroll-progress.is-hidden{opacity:0}.scroll-progress-track,.scroll-progress-fill{border-radius:4px;width:100%;position:absolute;left:0}.scroll-progress-track{background:var(--line);height:100%;top:0}.scroll-progress-fill{height:calc(var(--p,0) * 100%);background:var(--accent);top:0}.scroll-progress-tick{left:50%;top:calc(var(--p,0) * 100%);background:var(--accent);width:1.25rem;height:1px;margin-left:-.625rem;position:absolute}.scroll-progress-label{left:.875rem;top:calc(var(--p,0) * 100%);font-family:var(--font-body);color:var(--accent);font-variant-numeric:tabular-nums;font-size:.75rem;font-weight:600;line-height:1;position:absolute;transform:translateY(-50%)}@media (width<=960px){.scroll-progress{width:.1875rem;height:clamp(10rem,30vh,18.75rem);left:.3125rem}.scroll-progress-tick,.scroll-progress-label{display:none}}.page-transition{--pt-skew:clamp(40px, 7vw, 120px);z-index:9998;background:var(--curtain);color:#fff;cursor:progress;clip-path:polygon(calc(100% + var(--pt-skew)) 0, calc(100% + var(--pt-skew)) 0, 100% 100%, 100% 100%);place-items:center;display:grid;position:fixed;inset:0}.page-transition.is-in{animation:pt-in .4s var(--ease-curtain) forwards}.page-transition.is-hold{clip-path:polygon(0 0, calc(100% + var(--pt-skew)) 0, 100% 100%, calc(0% - var(--pt-skew)) 100%)}.page-transition.is-out{animation:pt-out .45s var(--ease-curtain) forwards}@keyframes pt-in{0%{clip-path:polygon(calc(100% + var(--pt-skew)) 0, calc(100% + var(--pt-skew)) 0, 100% 100%, 100% 100%)}to{clip-path:polygon(0 0, calc(100% + var(--pt-skew)) 0, 100% 100%, calc(0% - var(--pt-skew)) 100%)}}@keyframes pt-out{0%{clip-path:polygon(0 0, calc(100% + var(--pt-skew)) 0, 100% 100%, calc(0% - var(--pt-skew)) 100%)}to{clip-path:polygon(0 0, 0 0, calc(0% - var(--pt-skew)) 100%, calc(0% - var(--pt-skew)) 100%)}}.page-transition-label{font-family:var(--font-display);letter-spacing:-.04em;text-align:center;padding:0 1.5rem;font-size:clamp(3rem,11vw,10.5rem);font-weight:700;line-height:1}.roll-num{white-space:pre;align-items:flex-start;height:1em;line-height:1;display:inline-flex}.roll-static{height:1em;line-height:1;display:block}.roll-col{text-align:center;height:1em;margin:0 -.22em;padding:0 .22em;line-height:1;display:block;position:relative;overflow:hidden}.roll-col.is-rolling{-webkit-mask-image:linear-gradient(#0000 0%,#000 22% 78%,#0000 100%);mask-image:linear-gradient(#0000 0%,#000 22% 78%,#0000 100%)}.roll-ghost{visibility:hidden;height:1em;line-height:1;display:block}.roll-reel{will-change:transform;transition-property:transform;display:block;position:absolute;top:0;left:0;right:0}.roll-cell{height:1em;line-height:1;display:block}@media (prefers-reduced-motion:reduce){.roll-reel{transition:none!important}}.cert-carousel{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);position:relative;overflow:hidden}.cert-stage{touch-action:pan-y;grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:center;gap:clamp(1.5rem,4vw,3.5rem);padding:clamp(1.75rem,4.5vw,3.5rem) clamp(1.375rem,4vw,3.5rem) clamp(1.25rem,3vw,2rem);display:grid;overflow:hidden}.cert-copy{z-index:2;display:grid;position:relative}.cert-slide{opacity:0;visibility:hidden;filter:blur(6px);transition:opacity .5s var(--ease-soft), transform .7s var(--ease), filter .5s var(--ease-soft), visibility 0s linear .7s;grid-area:1/1;align-self:center;transform:translateY(14px)}.cert-slide.is-active{opacity:1;visibility:visible;filter:none;transition-delay:.32s,.32s,.32s,0s;transform:none}.cert-eyebrow{letter-spacing:.14em;text-transform:uppercase;color:var(--ink-faint);margin:0 0 1.125rem;font-size:.75rem}.cert-title{font-family:var(--font-display);letter-spacing:-.025em;color:var(--ink);margin:0 0 .5rem;font-size:clamp(1.875rem,3.8vw,3.25rem);font-weight:600;line-height:1.08}.cert-kind{color:var(--ink-soft);margin:0 0 1.125rem;font-size:.875rem}.cert-details{max-width:46ch;color:var(--ink-soft);margin:0 0 1.375rem;font-size:.9375rem;line-height:1.65}.cert-meta{flex-wrap:wrap;gap:.625rem 2rem;margin:0 0 1.625rem;display:flex}.cert-meta dt{letter-spacing:.12em;text-transform:uppercase;color:var(--ink-faint);font-size:.6875rem}.cert-meta dd{color:var(--ink);margin:.25rem 0 0;font-size:.875rem}.cert-link{border:1px solid var(--line-strong);border-radius:var(--radius);color:var(--ink);transition:background-color .3s var(--ease-soft), color .3s var(--ease-soft), border-color .3s var(--ease-soft), transform .3s var(--ease-soft);align-items:center;padding:.6875rem 1.25rem;font-size:.875rem;font-weight:500;display:inline-flex}.cert-link:hover{background:var(--ink);border-color:var(--ink);color:var(--bg);transform:translateY(-2px)}.cert-visual{aspect-ratio:4/3;z-index:1;pointer-events:none;width:100%;position:relative}.cert-orbit{transform-origin:150%;opacity:0;transition:transform 1s cubic-bezier(.65, 0, .35, 1), opacity .7s var(--ease-soft);place-items:center;display:grid;position:absolute;inset:0}.cert-orbit.is-active{opacity:1;transform:rotate(0)}.cert-orbit.is-before{transform:rotate(-58deg)}.cert-orbit.is-after{transform:rotate(58deg)}.cert-img{border:1px solid var(--line);border-radius:var(--radius);width:min(100%,29.375rem);height:auto;box-shadow:var(--lift-shadow);-webkit-user-select:none;user-select:none;-webkit-user-drag:none;background:#fff;transition:transform 1s cubic-bezier(.65,0,.35,1);display:block}.cert-orbit.is-active .cert-img{transform:rotate(-1.5deg)}.cert-orbit.is-before .cert-img{transform:rotate(58deg)}.cert-orbit.is-after .cert-img{transform:rotate(-58deg)}.cert-nav{z-index:3;border-top:1px solid var(--line);align-items:center;gap:1rem;padding:1rem clamp(1.375rem,4vw,3.5rem) 1.375rem;display:flex;position:relative}.cert-thumbs{scrollbar-width:none;flex:1;align-items:center;gap:1.75rem;min-width:0;padding:2px .75rem 2px 2px;display:flex;overflow-x:auto;-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 10px),#0000);mask-image:linear-gradient(90deg,#000 calc(100% - 10px),#0000)}.cert-thumbs::-webkit-scrollbar{display:none}.cert-thumb{font-family:var(--font-body);white-space:nowrap;color:var(--ink-faint);cursor:pointer;transition:color .4s var(--ease-soft), border-color .4s var(--ease-soft);background:0 0;border:0;border-bottom:1px solid #0000;flex:none;align-items:baseline;gap:.5rem;padding:.375rem 0;font-size:.8125rem;display:inline-flex}.cert-thumb:hover{color:var(--ink-soft)}.cert-thumb:focus-visible,.cert-arrow:focus-visible,.cert-link:focus-visible{outline:1px solid var(--ink);outline-offset:4px}.cert-thumb.is-active{color:var(--ink);border-bottom-color:var(--ink)}.cert-arrows{flex:none;gap:.25rem;display:flex}.cert-arrow{width:2rem;height:2rem;color:var(--ink-faint);cursor:pointer;transition:color .3s var(--ease-soft);background:0 0;border:0;place-items:center;padding:0;display:grid}.cert-arrow svg{fill:none;stroke:currentColor;stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round;width:1rem;height:1rem}.cert-arrow:hover{color:var(--ink)}@media (width<=860px){.cert-stage{grid-template-columns:1fr}.cert-visual{aspect-ratio:16/11;order:-1;max-width:32.5rem;margin:0 auto}.cert-nav{flex-wrap:wrap}.cert-thumbs{flex-basis:100%}}@media (prefers-reduced-motion:reduce){.cert-orbit,.cert-orbit.is-before,.cert-orbit.is-after,.cert-orbit .cert-img,.cert-orbit.is-before .cert-img,.cert-orbit.is-after .cert-img{transform:none}.cert-slide,.cert-slide.is-active{filter:none;transition-delay:0s;transform:none}}.cert-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:1.25rem;display:grid}.cert-card{border-radius:var(--radius);background:var(--surface);min-width:0;transition:transform .45s var(--ease-soft), box-shadow .45s var(--ease-soft);flex-direction:column;padding:1.75rem 1.75rem 1.5rem;display:flex;box-shadow:inset 0 0 0 1px #0000}.cert-card:hover{box-shadow:inset 0 0 0 1px var(--line-strong), var(--lift-shadow);z-index:2;position:relative;transform:translateY(-4px)}.cert-card-field{letter-spacing:.12em;text-transform:uppercase;color:var(--ink-faint);margin:0 0 .875rem;font-size:.75rem}.cert-card h3{font-size:1.375rem;font-weight:var(--fw-heading);margin:0 0 .375rem;line-height:1.25}.cert-card-meta{color:var(--ink-soft);margin:0 0 1.375rem;font-size:.875rem;line-height:1.5}.cert-card-facts{flex-wrap:wrap;gap:.5rem 2rem;margin:auto 0 1.375rem;display:flex}.cert-card-facts dt{color:var(--ink-faint);margin-bottom:.1875rem;font-size:.75rem}.cert-card-facts dd{color:var(--ink);margin:0;font-size:.875rem}.cert-card-link{color:var(--ink);border-bottom:1px solid var(--line-strong);transition:opacity .3s var(--ease-soft);align-self:flex-start;padding-bottom:1px;font-size:.8125rem}.cert-card-link:hover{opacity:.6}.cert-card-link:focus-visible{outline:1px solid var(--ink);outline-offset:4px}@media (width<=1000px){.cert-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=768px){.cert-grid{grid-template-columns:1fr;gap:.875rem}.cert-card{padding:1.5rem 1.375rem 1.25rem}}html.has-custom-cursor,html.has-custom-cursor a,html.has-custom-cursor button,html.has-custom-cursor label,html.has-custom-cursor [role=button],html.has-custom-cursor [role=tab],html.has-custom-cursor select,html.has-custom-cursor summary{cursor:none}html.has-custom-cursor input:not([type=checkbox]):not([type=radio]):not([type=button]):not([type=submit]),html.has-custom-cursor textarea{cursor:text}.cursor-dot,.cursor-ring{z-index:9990;pointer-events:none;mix-blend-mode:difference;transition:opacity .3s var(--ease-soft);will-change:transform;position:fixed;top:0;left:0}.cursor-dot.is-hidden,.cursor-ring.is-hidden{opacity:0}.cursor-dot span,.cursor-ring span{transition:transform .45s var(--ease), opacity .3s var(--ease-soft), background-color .3s var(--ease-soft);border-radius:50%;display:block;transform:translate(-50%,-50%)scale(1)}.cursor-dot span{background:#fff;width:.375rem;height:.375rem}.cursor-ring span{border:1px solid #ffffffd9;width:2.125rem;height:2.125rem}.cursor-dot.is-hover span{transform:translate(-50%,-50%)scale(0)}.cursor-ring.is-hover span{background:#ffffff1f;transform:translate(-50%,-50%)scale(1.7)}.cursor-dot.is-down span{transform:translate(-50%,-50%)scale(.7)}.cursor-ring.is-down span{transform:translate(-50%,-50%)scale(.8)}.cursor-ring.is-hover.is-down span{transform:translate(-50%,-50%)scale(1.45)}@media (hover:none),(pointer:coarse){.cursor-dot,.cursor-ring{display:none}}.skeleton-group{animation:skeletonIn .4s var(--ease-soft) .12s backwards}@keyframes skeletonIn{0%{opacity:0}}.skeleton{border-radius:var(--radius);background:var(--surface);isolation:isolate;max-width:100%;display:block;position:relative;overflow:hidden}.skeleton:after{content:"";background:linear-gradient(90deg, transparent 0%, var(--line) 50%, transparent 100%);animation:1.6s cubic-bezier(.4,0,.2,1) infinite skeletonShimmer;position:absolute;inset:0;transform:translate(-100%)}@keyframes skeletonShimmer{to{transform:translate(100%)}}.skeleton-pills{gap:.5rem;display:flex}.skeleton-cover{aspect-ratio:16/9;height:auto;margin-bottom:4rem}.skeleton-sr{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;margin:-1px;position:absolute;overflow:hidden}.project-card.is-skeleton:hover{box-shadow:none;transform:none}.project-row.is-skeleton:hover{padding-left:0}@media (width<=768px){.project-card.is-skeleton{min-height:13.75rem}}@media (prefers-reduced-motion:reduce){.skeleton:after{opacity:0;animation:none}.skeleton-group{animation:none}}.submit-btn{white-space:nowrap;justify-content:center;width:12rem;height:3.125rem;padding:0;position:relative;overflow:hidden}.btn-layer{opacity:0;visibility:hidden;transition:opacity .35s var(--ease-soft), visibility 0s linear .35s;justify-content:center;align-items:center;gap:.5625rem;display:flex;position:absolute;inset:0}.submit-btn.is-default .btn-layer--default,.submit-btn.is-loading .btn-layer--loading,.submit-btn.is-success .btn-layer--success{opacity:1;visibility:visible;transition-delay:.2s,0s}.submit-btn.is-loading:disabled,.submit-btn.is-success:disabled,.submit-btn.is-loading:disabled:hover,.submit-btn.is-success:disabled:hover{opacity:1;cursor:default;background:var(--ink);color:var(--bg);box-shadow:none;transform:none}.btn-progress{background:color-mix(in srgb, var(--bg) 28%, transparent);border-radius:2px;width:4.5rem;height:2px;position:relative;overflow:hidden}.btn-progress:after{content:"";background:var(--bg);border-radius:2px;width:40%;animation:1.15s cubic-bezier(.45,0,.55,1) infinite btnProgress;position:absolute;top:0;bottom:0;left:0}@keyframes btnProgress{0%{transform:translate(-100%)}to{transform:translate(250%)}}.btn-check{fill:none;stroke:currentColor;stroke-width:2.2px;stroke-linecap:round;stroke-linejoin:round;width:1.0625rem;height:1.0625rem}.btn-check path{stroke-dasharray:1;stroke-dashoffset:1px}.submit-btn.is-success .btn-check path{stroke-dashoffset:0;transition:stroke-dashoffset .5s cubic-bezier(.65,0,.35,1) .35s}.btn-sr{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;margin:-1px;position:absolute;overflow:hidden}@media (prefers-reduced-motion:reduce){.btn-progress:after{opacity:.7;width:100%;animation:none}.submit-btn.is-success .btn-check path{transition:none}}.pd-gallery-section{padding-bottom:0}.pd-gallery-head{justify-content:space-between;align-items:baseline;margin-bottom:1.25rem;display:flex}.pd-gallery-head .eyebrow-plain{margin:0}.pd-gallery-count{font-family:var(--font-display);color:var(--ink-faint);font-variant-numeric:tabular-nums;font-size:.8125rem}.pd-gallery{grid-template-columns:repeat(3,minmax(0,1fr));gap:1.75rem 1.25rem;display:grid}.pd-gallery-phones{grid-template-columns:repeat(5,minmax(0,1fr));gap:1.75rem 1rem}.pd-shot{min-width:0;margin:0}.pd-shot-btn{width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;padding:0;display:block}.pd-shot-frame{aspect-ratio:var(--shot-ratio,16 / 10);border-radius:var(--radius);background:var(--surface);box-shadow:inset 0 0 0 1px var(--line);display:block;overflow:hidden}.pd-shot-frame img{object-fit:cover;object-position:top center;width:100%;height:100%;display:block}.pd-shot-frame.is-contain img{object-fit:contain;object-position:center}.pd-shot-btn:hover .pd-shot-title,.pd-shot-btn:focus-visible .pd-shot-title{color:var(--ink)}.pd-shot-title{transition:color .3s var(--ease-soft)}.pd-shot-btn:focus-visible{outline:1px solid var(--ink);outline-offset:4px}.pd-shot figcaption{color:var(--ink-soft);align-items:baseline;gap:.625rem;margin-top:.625rem;font-size:.8125rem;line-height:1.3;display:flex}.pd-shot-n{font-variant-numeric:tabular-nums;color:var(--ink-faint)}.pd-shot-title{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.vis-dark,[data-theme=dark] .vis-light{display:none!important}[data-theme=dark] .vis-dark{display:block!important}.lightbox{z-index:9985;background:var(--bg);animation:lightboxIn .35s var(--ease) both;flex-direction:column;padding:1.25rem clamp(1rem,4vw,3rem) 1.5rem;display:flex;position:fixed;inset:0}@keyframes lightboxIn{0%{opacity:0}}.lightbox-top{flex:none;justify-content:space-between;align-items:center;display:flex}.lightbox-count{color:var(--ink-faint);font-variant-numeric:tabular-nums;font-size:.8125rem}.lightbox-btn,.lightbox-nav{font-family:var(--font-body);color:var(--ink-soft);cursor:pointer;transition:color .3s var(--ease-soft);background:0 0;border:0;padding:.5rem .25rem;font-size:.8125rem}.lightbox-btn:hover,.lightbox-nav:hover{color:var(--ink)}.lightbox-btn:focus-visible,.lightbox-nav:focus-visible{outline:1px solid var(--ink);outline-offset:3px}.lightbox-stage{flex:1;justify-content:space-between;align-items:center;gap:clamp(.5rem,2vw,1.5rem);min-height:0;display:flex}.lightbox-nav{flex:none;padding:.75rem;font-size:1.25rem}.lightbox-img{flex:1;justify-content:center;align-items:center;min-width:0;height:100%;display:flex}.lightbox-img img{border-radius:var(--radius);width:auto;max-width:100%;height:auto;max-height:100%;box-shadow:0 0 0 1px var(--line);animation:lightboxImg .5s var(--ease) both}@keyframes lightboxImg{0%{opacity:0}}.lightbox-cap{text-align:center;color:var(--ink-soft);flex:none;margin:.875rem 0 0;font-size:.8125rem}.lightbox-cap strong{color:var(--ink);margin-right:.5rem;font-weight:500}@media (width<=1000px){.pd-gallery{grid-template-columns:repeat(2,minmax(0,1fr))}.pd-gallery-phones{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (width<=640px){.pd-gallery{grid-template-columns:1fr;gap:1.5rem}.pd-gallery-phones{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.5rem .875rem}}@media (prefers-reduced-motion:reduce){.lightbox,.lightbox-img img{animation:none}}@media (width<=1024px),(pointer:coarse){.theme-toggle,.site-header-actions .hero-social a,.hero-social a{position:relative}.theme-toggle:before,.site-header-actions .hero-social a:before,.hero-social a:before{content:"";width:max(100%, var(--tap));height:max(100%, var(--tap));position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.nav-toggle{min-width:var(--tap);min-height:var(--tap)}.logo{min-height:var(--tap);min-width:var(--tap)}.nav-links a{min-height:var(--tap);align-items:center;display:inline-flex}.cert-arrow{width:var(--tap);height:var(--tap)}.cert-thumb,.cert-card-link,.intro-cta,.service-example,.footer-links a,.contact-info a,.pd-links a,.pd-meta a,.resume-link{min-height:var(--tap);align-items:center;display:inline-flex}.cert-thumb{min-width:var(--tap);justify-content:center;padding-top:0;padding-bottom:0}}@media (width<=1024px){input,textarea,select{font-size:max(1rem,16px)}}
