/* Independent presentation and interaction layer. Original portfolio layout is retained. */
@font-face{font-family:"DP Clear";src:url("/assets/BfNBn5WUlSh2CTj56v3Cjy3V9A.woff2") format("woff2");font-style:normal;font-weight:400;font-display:swap}
@font-face{font-family:"DP Clear";src:url("/assets/JXbIUopUrtb8j9UwV2QwvVjprN4.woff2") format("woff2");font-style:normal;font-weight:500;font-display:swap}
body,body *{font-family:"DP Clear",sans-serif!important}
/* Framer stores Medium as a separate family. Preserve its weight when using
   our unified DP Clear family; otherwise imported pills silently use Regular. */
.framer-text[style*="--framer-font-family:"][style*='"DP Clear Medium"']{font-weight:500!important}
/* Version pills use the same Medium face at every responsive breakpoint. */
.compare-versions button{font-weight:500}
/* Text scale supplied by the portfolio owner. Line heights are proportions. */
:root{--type-heading-1-size:80px;--type-heading-1-leading:1.06;--type-heading-1-mobile-size:32px;--type-heading-1-mobile-leading:1.3;--type-heading-2-size:56px;--type-heading-2-leading:1.3;--type-heading-3-size:40px;--type-heading-3-leading:1.3;--type-body-1-size:24px;--type-body-1-leading:1.55;--type-body-1-highlight-leading:1.5;--type-body-2-size:20px;--type-body-2-leading:1.75;--type-body-2-highlight-leading:1.65;--type-caption-size:16px;--type-caption-leading:1.65;--type-caption-highlight-leading:1.5}
html{scroll-behavior:smooth}body{overflow-x:hidden}a:focus-visible,button:focus-visible{outline:2px solid #1765dd;outline-offset:5px}a{touch-action:manipulation}
/* Motion variants from the original Framer components. */
.contact-shell{position:fixed;top:0;right:0;width:264px;height:264px;overflow:clip;pointer-events:none;z-index:1000}
.contact-note{position:absolute;top:20px;right:20px;width:224px;height:224px;box-sizing:border-box;padding:18px;background:#ffc800;border-radius:16px;color:#000;pointer-events:auto;transform:translate(123px,-188px) rotate(-4deg);transition:transform .4s var(--spring-close);will-change:transform}
.contact-note.open{transform:translate(0,0) rotate(0deg);transition-duration:.6s;transition-timing-function:var(--spring)}
.contact-toggle{position:absolute;bottom:18px;left:18px;background:none;border:0;padding:0;color:#000;opacity:.6;cursor:pointer}
#contact-details{display:flex;flex-direction:column;gap:12px}
.contact-note p,.contact-note a{margin:0}.contact-note a{color:#000;text-decoration:none;overflow-wrap:anywhere}.contact-note a:hover{text-decoration:underline}
.portfolio-ticker ul{animation:logos 26s linear infinite}@keyframes logos{to{transform:translateX(-25%)}}
.framer-wq9Pw .framer-1tsw88m{transition:background-color .4s var(--spring),border-radius .4s var(--spring)}
.framer-wq9Pw .framer-1dvrjcc{transition:width .4s var(--spring),height .4s var(--spring),left .4s var(--spring),top .4s var(--spring)}
.framer-wq9Pw .framer-1nu3set{transition:opacity .4s var(--spring),bottom .4s var(--spring),left .4s var(--spring)}
.framer-wq9Pw.motion-active .framer-1tsw88m{background-color:rgb(237,237,237)!important}
.framer-wq9Pw.framer-v-17ansr.motion-active .framer-1tsw88m{border-radius:16px!important}
.framer-wq9Pw.framer-v-17ansr.motion-active .framer-1dvrjcc{height:103%;width:103%;left:-6px;top:-8px}
.framer-wq9Pw.motion-active .framer-1nu3set{opacity:1!important;bottom:32px;left:32px}
.framer-ClITJ .framer-ltnzw2,.framer-ClITJ .framer-1eckplz,.framer-ClITJ .framer-xc2u0t{transition:translate .4s var(--spring)}
.framer-ClITJ.motion-active .framer-ltnzw2{translate:-5px -8px}.framer-ClITJ.motion-active .framer-1eckplz{translate:4px -8px}.framer-ClITJ.motion-active .framer-xc2u0t{translate:11px -10px}
a[data-framer-name="No Icon"]{transition:background-color .4s var(--spring)}
a[data-framer-name="No Icon"].motion-active{background-color:#f2f2f2!important}
a[data-framer-name="No Icon"]:active{background-color:#e3e3e3!important}
.framer-GOMhI .framer-op4h4m,.framer-GOMhI .framer-14c7105{transition:opacity .2s cubic-bezier(.44,0,.56,1)}
.framer-GOMhI:has(.framer-1uecdb4.motion-active) .framer-op4h4m,.framer-GOMhI:has(.framer-1uecdb4.motion-active) .framer-14c7105{opacity:.35!important}
.framer-1uecdb4{transition:background-color .2s cubic-bezier(.44,0,.56,1),box-shadow .2s cubic-bezier(.44,0,.56,1);border-radius:9px}
.framer-1uecdb4.motion-active{background:#fff!important;box-shadow:0 1px 4px #1100001a,inset 0 0 0 1px #d4d4d4!important}
video{background:#f5f5f5}
@media(max-width:639px){.framer-UE9rg .framer-p3ikev,.framer-UE9rg .framer-1xwypko>div{width:100%!important}[data-portfolio-gallery]{flex-direction:column!important;padding:24px!important}[data-portfolio-gallery]>div{width:100%!important;flex:none!important}.framer-UE9rg .framer-1pdi6c0{width:100%!important}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.portfolio-ticker ul{animation:none}.contact-note{transition:none}*{animation-duration:.01ms!important;transition-duration:.01ms!important}}







/* The independent page keeps one responsive project grid. */
.framer-UE9rg .framer-1vn3hx9{display:grid!important}
@media(max-width:639px){.framer-UE9rg .framer-1vn3hx9{grid-template-columns:minmax(0,1fr);grid-template-rows:none;grid-auto-rows:auto;width:100%}}
/* Exact text styles verified in Framer desktop. */
/* Assets > Text is authoritative, including per-style weight and tracking. */
[data-text-style]{font-family:"DP Clear",sans-serif!important;font-weight:var(--type-weight)!important;font-size:var(--type-size)!important;line-height:var(--type-leading)!important;letter-spacing:var(--type-tracking)!important;color:var(--type-color)!important;font-style:normal!important}
[data-text-style="heading-1"]{--type-size:80px;--type-leading:1.06;--type-tracking:-0.01em;--type-color:#000000;--type-weight:400}
[data-text-style="heading-1-mobile"]{--type-size:32px;--type-leading:1.3;--type-tracking:-0.01em;--type-color:#000000;--type-weight:400}
[data-text-style="heading-2"]{--type-size:56px;--type-leading:1.3;--type-tracking:-0.03em;--type-color:#000000;--type-weight:500}
[data-text-style="heading-3"]{--type-size:40px;--type-leading:1.3;--type-tracking:-0.02em;--type-color:#000000;--type-weight:500}
[data-text-style="heading-3b"]{--type-size:40px;--type-leading:1.3;--type-tracking:-0.04em;--type-color:#000000;--type-weight:500}
[data-text-style="body-1-highlight"]{--type-size:24px;--type-leading:1.5;--type-tracking:-0.03em;--type-color:#000000;--type-weight:500}
[data-text-style="body-1"]{--type-size:24px;--type-leading:1.65;--type-tracking:0.02em;--type-color:#4A4A4A;--type-weight:400}
[data-text-style="body-2-highlight"]{--type-size:20px;--type-leading:1.65;--type-tracking:-0.01em;--type-color:#000000;--type-weight:500}
[data-text-style="body-2"]{--type-size:20px;--type-leading:1.75;--type-tracking:0.02em;--type-color:#4A4A4A;--type-weight:400}
[data-text-style="caption-highlight"]{--type-size:16px;--type-leading:1.5;--type-tracking:-0.01em;--type-color:#000000;--type-weight:500}
[data-text-style="caption"]{--type-size:16px;--type-leading:1.65;--type-tracking:0.02em;--type-color:#4A4A4A;--type-weight:400}
[data-text-style] *{font-family:inherit!important;font-size:inherit!important;font-weight:inherit!important;font-style:inherit!important;letter-spacing:inherit!important;line-height:inherit!important;color:inherit!important}
@media(max-width:639px){[data-text-style-mobile="heading-1-mobile"]{--type-size:32px;--type-leading:1.3;--type-tracking:-0.01em;--type-color:#000000;--type-weight:400}.framer-UE9rg .framer-1649xvo-container{width:100%!important}}

:root{--spring:linear(0.00000,0.01270,0.04645,0.09549,0.15506,0.22124,0.29087,0.36146,0.43105,0.49820,0.56183,0.62123,0.67594,0.72573,0.77053,0.81043,0.84560,0.87630,0.90282,0.92549,0.94467,0.96071,0.97395,0.98472,0.99335,1.00011,1.00529,1.00913,1.01185,1.01364,1.01469,1.01513,1.01510,1.01471,1.01405,1.01320,1.01224,1.01120,1.01013,1.00906,1.00803,1.00704,1.00611,1.00525,1.00446,1.00375,1.00312,1.00255,1.00206,1.00163,1.00127,1.00095,1.00069,1.00047,1.00030,1.00015,1.00004,0.99995,0.99988,0.99984,1.00000);--spring-close:linear(0.00000,0.01284,0.04741,0.09833,0.16094,0.23126,0.30595,0.38225,0.45794,0.53127,0.60093,0.66596,0.72571,0.77981,0.82809,0.87057,0.90741,0.93888,0.96530,0.98708,1.00465,1.01845,1.02892,1.03650,1.04160,1.04461,1.04589,1.04576,1.04454,1.04247,1.03977,1.03666,1.03329,1.02980,1.02629,1.02287,1.01959,1.01651,1.01367,1.01108,1.00875,1.00669,1.00490,1.00335,1.00205,1.00097,1.00008,0.99938,0.99884,0.99844,0.99817,0.99799,0.99790,0.99789,0.99792,0.99801,0.99812,0.99826,0.99841,0.99857,1.00000)}

.portfolio-ticker{opacity:1!important}
.portfolio-ticker ul{width:max-content!important;max-width:none!important;animation:logo-loop 32s linear infinite}
.portfolio-ticker li{flex:none}
@keyframes logo-loop{to{transform:translateX(calc(-50% - 32px))}}
@media(max-width:699px){.portfolio-ticker li>div{width:120px!important}}
@media(prefers-reduced-motion:reduce){.portfolio-ticker ul{animation:none!important}}
/* Tablet and phone layouts designed independently of Framer breakpoints. */
@media(max-width:1199px){
 :root{--page-gutter:40px}
 .framer-UE9rg .framer-1acilt7{padding:120px var(--page-gutter) 0;gap:32px;max-width:100%;overflow:visible}
 .framer-UE9rg .framer-1xwypko{gap:20px;width:100%;max-width:680px}
 .framer-UE9rg .framer-1xwypko>div,.framer-UE9rg .framer-1649xvo-container{width:100%!important;max-width:100%;min-width:0}
 .framer-UE9rg .framer-p3ikev br{display:none}
 .framer-GOMhI.framer-xbkn2l{display:block;width:100%;height:auto}
 .framer-GOMhI .framer-op4h4m,.framer-GOMhI .framer-7lg0b7,.framer-GOMhI .framer-14c7105{display:inline;width:auto;white-space:normal}
 .framer-GOMhI .framer-op4h4m p,.framer-GOMhI .framer-14c7105 p{display:inline}
 .framer-GOMhI .framer-7lg0b7:before{content:' ';white-space:pre}
 .framer-GOMhI .framer-1uecdb4{display:inline-flex;vertical-align:middle;align-items:center;min-height:36px;white-space:nowrap}
 .framer-UE9rg .framer-15xszls{flex-wrap:wrap;gap:12px;overflow:visible}
 a[data-framer-name="No Icon"]{min-height:48px;padding-inline:18px}
 .framer-UE9rg .framer-s7pud5{padding:64px var(--page-gutter) 0;min-height:0;gap:0;overflow:visible}
 .framer-UE9rg .framer-1vn3hx9{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:none;grid-auto-rows:auto;gap:40px 24px;overflow:visible}
 .framer-UE9rg .framer-1vn3hx9>div{width:100%;height:auto;min-width:0;align-self:start}
 .framer-wq9Pw.framer-17ansr{height:auto!important;gap:12px;overflow:visible}
 .framer-wq9Pw .framer-1tsw88m{height:auto;flex:none;aspect-ratio:6/5;padding:6px;min-width:0}
 .framer-wq9Pw .framer-1hpm9zp{height:100%;width:100%}
 .framer-wq9Pw .framer-1pw2w6t{padding:0 6px;gap:3px;overflow:visible}
 .framer-wq9Pw .framer-ohx3z7,.framer-wq9Pw .framer-ulg2p8{width:100%;white-space:normal}
 .framer-wq9Pw .framer-ohx3z7 p{white-space:normal;text-wrap:pretty}
 .framer-wq9Pw .framer-dfowlx-container{scale:none;transform:translate(-50%,-50%) scale(.8)!important}
 .framer-UE9rg .framer-me45ll{width:100%;padding:64px var(--page-gutter) 48px;gap:16px;overflow:hidden}
 .framer-UE9rg .framer-me45ll>div.ssr-variant:first-child{display:block!important}
 .framer-UE9rg .framer-me45ll>div.ssr-variant:nth-child(2){display:none!important}
 .framer-UE9rg .framer-shwikt-container{height:80px;width:100%}
 .framer-UE9rg .framer-shwikt-container>.ssr-variant:first-child{display:block!important}
 .framer-UE9rg .framer-shwikt-container>.ssr-variant:nth-child(2){display:none!important}
 /* The sticker meets the viewport edge and keeps the same visible folded tip. */
 .contact-shell{top:0;right:0;width:264px;height:232px;overflow:clip}
 .contact-note{top:20px;right:20px;width:224px;height:192px;padding:18px;transform:translate(123px,-156px) rotate(-4deg);pointer-events:auto;clip-path:none;transition:transform .4s var(--spring-close);will-change:transform}
 .contact-note.open{transform:translate(0,0) rotate(0deg);transition:transform .6s var(--spring)}
 .contact-toggle{top:auto;right:auto;bottom:8px;left:8px;width:auto;height:44px;padding:10px;opacity:.6;touch-action:manipulation}
 #contact-details{gap:12px}
 #contact-details a{display:block;position:relative;min-height:0;max-width:100%}
 #contact-details a:before{content:'';position:absolute;inset:-6px -4px}

}
@media(max-width:699px){
 :root{--page-gutter:20px}
 .framer-UE9rg .framer-1acilt7{padding-top:108px;gap:28px}
 .framer-UE9rg .framer-1xwypko{gap:20px}
 .framer-UE9rg .framer-p3ikev [data-text-style]{--type-size:clamp(30px,8.2vw,38px);--type-leading:1.2;--type-weight:500;--type-tracking:-.02em;text-wrap:pretty}
 .framer-UE9rg .framer-1tr8e2k [data-text-style]{--type-size:16px;--type-leading:1.5}
 .framer-UE9rg .framer-1xwypko [data-text-style="body-2"]{--type-size:18px;--type-leading:1.6;--type-tracking:.005em}
 .framer-UE9rg .framer-s7pud5{padding-top:44px}
 .framer-UE9rg .framer-1vn3hx9{grid-template-columns:minmax(0,1fr);gap:32px}
 .framer-wq9Pw .framer-1tsw88m{aspect-ratio:4/3;padding:4px}
 .framer-wq9Pw .framer-1pw2w6t{padding:0 4px}
 .framer-wq9Pw .framer-dfowlx-container{transform:translate(-50%,-50%) scale(.72)!important}
 .framer-UE9rg .framer-me45ll{padding-top:52px;padding-bottom:32px}
 .framer-UE9rg .framer-me45ll [data-text-style]{--type-size:14px}
 .framer-UE9rg .framer-shwikt-container{height:68px}
}
@media(hover:none),(pointer:coarse){
 .framer-wq9Pw .framer-1nu3set{opacity:1!important;left:16px;bottom:16px;width:44px}
 .framer-wq9Pw:active .framer-1tsw88m{background-color:#ededed!important}
 .framer-wq9Pw:active{opacity:.88}
}
@media(prefers-reduced-motion:reduce){.contact-note,.contact-note.open{transition:none!important}}
/* Persistent views share one overlapping animation timeline. */
.morph-word{display:inline-block;white-space:nowrap}
.portfolio-view{position:relative;width:100%;display:flow-root}
.portfolio-view[hidden]{display:none!important}
.fluid-transition .portfolio-view{pointer-events:none;overflow:clip}
html.fluid-transition{scroll-behavior:auto!important;overflow-anchor:none}
.portfolio-view{overflow-anchor:none}
/* Home must not paint an opaque sheet over the outgoing AI text and shader. */
.fluid-transition[data-transition-direction="to-home"][data-page-transition="overlap"] :is(.framer-kwr9g.framer-nbdak6,.framer-UE9rg.framer-72rtr7){background-color:transparent!important}
.fluid-transition :is(.morph-word,.morph-body){will-change:filter,opacity}
.fluid-transition [data-ai-fade],.portfolio-view[data-retained] [data-ai-fade]{animation:none!important}
.portfolio-view h1:focus{outline:none}

.hero-baseline{display:inline-block;width:0;height:0;vertical-align:baseline}
.contact-shell{visibility:hidden;opacity:0;transform:translateY(-290px)}
.contact-shell.contact-ready{visibility:visible;opacity:1;transform:translateY(0);transition:transform .72s cubic-bezier(.22,1,.36,1),opacity .4s ease}
@media(prefers-reduced-motion:reduce){.contact-shell.contact-ready{transition:none}}
