


:root{color-scheme:dark;--bg:#121212;--surface:#1a1a1a;--text:#f6f6f6;--muted:#888;--line:#3d3d3d;--detail-line:#5d5d5d;--subtle:#242424;--button:#f6f6f6;--button-text:#121212;}
:root[data-theme=light]{color-scheme:light;--bg:#f7f7f7;--surface:#fff;--text:#121212;--muted:#707070;--line:#b0b0b0;--detail-line:#8c8c8c;--subtle:#e7e7e7;--button:#121212;--button-text:#fff;}
*{box-sizing:border-box;}html{scroll-behavior:smooth;}body{margin:0;background:var(--bg);color:var(--text);}a{color:inherit;text-decoration:none;}button,a,input,textarea,select{-webkit-tap-highlight-color:transparent;}button{cursor:pointer;}a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible,summary:focus-visible{outline:2px solid var(--text);outline-offset:4px;}img{display:block;max-width:100%;}h1,h2,h3,p{margin:0;}p{color:var(--muted);}.skip{position:fixed;left:250px;top:-80px;background:var(--button);color:var(--button-text);padding:12px;z-index:100;}.skip:focus{top:10px;}.sidebar{position:fixed;inset:0 auto 0 0;width:240px;padding:16px;border-right:1px solid var(--line);display:flex;flex-direction:column;z-index:30;background:var(--bg);}.logo{display:flex;width:100%;padding:0 0 24px;border-bottom:1px solid var(--line);}.logo img{width:60px;height:60px;}html[data-theme=light] .logo img{filter:invert(1);}.nav{display:grid;gap:8px;margin-top:44px;}.nav a{min-height:40px;display:flex;align-items:center;gap:8px;color:var(--muted);padding:10px 8px;border:1px solid transparent;border-radius:8px;}.nav a:hover{color:var(--text);background:var(--surface);}.nav a[aria-current=page]{color:var(--text);background:var(--surface);border-color:var(--subtle);}.icon{display:inline-block;width:16px;height:16px;vertical-align:middle;flex-shrink:0;}.sidebar-bottom{margin-top:auto;padding:0 8px 4px;}.sidebar-bottom p{padding-bottom:4px;border-bottom:1px dotted var(--line);}.socials{display:flex;gap:20px;align-items:center;padding-top:12px;color:var(--muted);}.socials a:hover{color:var(--text);}.theme-toggle{border:0;background:none;color:var(--muted);padding:0;margin-left:auto;display:flex;align-items:center;justify-content:center;width:28px;height:28px;}.mobile-toggle{display:none;}.main{margin-left:240px;padding:80px 20px 0;min-height:100vh;}.content{width:100%;max-width:1200px;margin:0 auto;}.hero{padding-bottom:32px;border-bottom:1px solid var(--line);}.availability{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:8px;background:var(--subtle);margin-bottom:16px;color:var(--text);}.availability::before{content:"";width:8px;height:8px;background:#51e077;border-radius:50%;}.hero h1 span{display:block;}.hero h1 span+span{margin-top:4px;}.hero>p{margin-top:16px;}.buttons{display:flex;flex-wrap:wrap;gap:12px;margin-top:32px;}.button{display:inline-flex;justify-content:center;align-items:center;gap:8px;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:10px 16px;color:var(--text);transition:background .2s,transform .2s;}.button:hover{background:var(--line);}.button.primary{background:var(--button);color:var(--button-text);border-color:var(--button);}.button.primary:hover{opacity:.86;}.section{margin-top:80px;}.section-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:32px;}.project-grid{position:relative;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;padding:12px;border-radius:8px;}.project-card{position:relative;display:block;min-width:0;border-radius:6px;overflow:hidden;}.project-image{position:relative;overflow:hidden;aspect-ratio:1.47375;border-radius:6px;background:var(--surface);}.project-image img{width:100%;height:100%;object-fit:cover;transition:transform .4s;}.project-card:hover img{transform:scale(1.025);}.project-meta{position:absolute;inset:auto 8px 8px;display:flex;align-items:center;justify-content:space-between;gap:4px;padding:8px;background:var(--bg);border-radius:6px;}.project-meta h3{min-width:0;}.project-meta p{margin:0;flex-shrink:0;}.stack{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px 24px;}.stack-item{display:flex;align-items:center;gap:12px;min-width:0;}.stack-icon{width:52px;height:52px;display:flex;align-items:center;justify-content:center;border:1px dashed var(--detail-line);border-radius:6px;flex-shrink:0;}.stack-icon img{width:36px;height:36px;object-fit:contain;}.stack-item p{margin-top:4px;}.newsletter{position:relative;margin-top:120px;padding:64px 32px;border-radius:8px;text-align:center;background:linear-gradient(180deg,var(--bg),var(--surface));}.newsletter>p{max-width:340px;margin:16px auto 32px;}.newsletter form{display:flex;gap:8px;justify-content:center;}.newsletter input{width:280px;}.newsletter .button{min-width:110px;}.form-status{margin-top:12px;color:var(--muted);}.form-status:empty{display:none;}input,textarea,select{min-width:0;width:100%;color:var(--text);background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:10px 12px;}input::placeholder,textarea::placeholder{color:var(--muted);}.footer{display:flex;justify-content:space-between;gap:20px;margin-top:120px;padding:10px 0;border-top:1px solid var(--line);color:var(--muted);}.footer-links{display:flex;gap:20px;color:var(--text);}.page-intro{padding:80px 0 64px;}.page-intro>p{max-width:620px;margin-top:12px;}.search{max-width:280px;position:relative;}.all-projects{grid-template-columns:repeat(2,minmax(0,1fr));gap:32px 20px;}.all-projects{padding:0;}.all-projects::after{display:none;}.empty-results{padding:40px;text-align:center;}.about-top{display:grid;grid-template-columns:1.2fr 1fr;gap:48px;align-items:center;}.portrait{display:block;width:100%;height:auto;border:1px solid var(--subtle);border-radius:8px;object-fit:contain;}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;padding:24px 0;}.stats p{margin-top:4px;}.prose p{margin:20px 0;}.experience-row{display:grid;grid-template-columns:1fr 1.4fr;gap:32px;padding:28px 0;border-top:1px solid var(--line);}.experience-row p{margin-top:8px;}.services-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;}.service-card{position:relative;display:flex;flex-direction:column;border-radius:8px;padding:32px;background:var(--surface);}.service-card .price{margin-bottom:24px;}.service-card>p{margin-top:16px;}.service-card .buttons{margin-top:auto;padding-top:32px;}.service-card ul{padding-left:20px;color:var(--muted);}.faq{margin-top:24px;}details{border-bottom:1px solid var(--line);padding:20px 0;}summary{display:flex;justify-content:space-between;gap:16px;cursor:pointer;list-style:none;}summary::-webkit-details-marker{display:none;}summary::after{content:"+";color:var(--muted);}details[open] summary::after{content:"−";}details p{padding-top:16px;max-width:800px;}.testimonials{overflow-x:auto;scrollbar-width:thin;}.quote{flex:0 0 423px;width:423px;min-height:260px;display:flex;flex-direction:column;justify-content:center;padding:12px;border:1px solid var(--line);border-radius:6px;}.quote-head{display:flex;align-items:center;gap:8px;}.quote-head img{width:50px;height:50px;flex-shrink:0;object-fit:cover;border-radius:50%;}.quote blockquote{margin:16px 0 0;color:var(--text);}.contact-grid{display:grid;grid-template-columns:minmax(0,1.162963fr) minmax(240px,1fr);gap:32px;}.inquiry{margin-top:30px;display:grid;gap:20px;}.field{display:grid;gap:8px;}.inquiry textarea{min-height:180px;resize:vertical;}.inquiry .button{justify-self:stretch;width:100%;min-height:44px;border-radius:6px;}.connect{padding-top:0;min-width:0;}.connect h3{margin-bottom:16px;}.connect .follow{margin-top:32px;}.back-link{display:inline-flex;gap:10px;align-items:center;color:var(--muted);margin-bottom:32px;}.project-intro h1{margin-bottom:24px;}.project-intro>p{max-width:850px;}.project-facts{display:grid;grid-template-columns:repeat(4,1fr);gap:24px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:24px 0;margin:40px 0;}.project-facts p{margin-bottom:8px;}.project-gallery img{width:100%;height:auto;max-height:none;border-radius:8px;border:1px solid var(--subtle);margin:32px 0;}.project-description{max-width:850px;margin:40px auto;}.legal{max-width:880px;margin:auto;}.legal h1{margin-bottom:40px;}.legal h2{margin:32px 0 16px;}.legal p{margin:16px 0;}.legal ul{color:var(--muted);}.project-card[hidden]{display:none;}.not-found{padding:80px 0;}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;}.stats{display:inline-grid;margin-top:32px;background:var(--surface);border-radius:8px;padding:16px 24px;min-width:560px;gap:0;}.stats>div{text-align:center;padding:0 24px;border-right:1px solid var(--line);}.stats>div:last-child{border:0;}.about-top{align-items:start;grid-template-columns:1fr 1fr;gap:64px;}.about-top .prose p{margin-top:16px;}.services-grid{margin-top:32px;gap:12px;}.service-card{justify-content:center;padding:40px 32px;}.service-card .price{align-self:flex-start;margin-bottom:16px;border:1px solid var(--line);border-radius:8px;padding:2px 6px;color:var(--muted);}.service-card>p{margin-top:16px;}.service-card .buttons{margin-top:0;}.faq details{border:1px solid var(--line);border-radius:8px;padding:16px;background:var(--surface);margin-top:12px;}.faq details p{margin-top:16px;border-top:1px dotted var(--line);}.project-intro>p{max-width:600px;}.project-facts{display:inline-flex;background:var(--surface);border:0;border-radius:8px;padding:16px 0;gap:0;margin:32px 0;}.project-facts>div{padding:0 32px;border-right:1px solid var(--line);}.project-facts>div:last-child{border:0;}.project-intro{border-bottom:1px dotted var(--line);}.back-link{margin-bottom:32px;}.project-description{max-width:none;margin:40px 0;}.contact-grid{margin-top:32px;}.hero>p{max-width:650px;}

@media(max-width:1100px){.sidebar{width:200px;}.main{margin-left:200px;}.stack{grid-template-columns:repeat(2,1fr);}.contact-grid{gap:32px;}.about-top{gap:24px;}.stats{grid-template-columns:1fr 1fr;}.stats>div:first-child{grid-column:1/-1;}}
@media(max-width:760px){.sidebar{position:sticky;top:0;width:100%;height:auto;display:block;padding:8px 16px;border-right:0;border-bottom:1px solid var(--line);}.logo{width:56px;border:0;padding:0;}.logo img{width:48px;height:48px;}.mobile-toggle{display:flex;position:absolute;right:20px;top:18px;align-items:center;justify-content:center;background:none;color:var(--text);border:0;width:32px;height:32px;}.mobile-toggle .icon{width:24px;height:24px;}.nav{display:none;margin:16px 0;}.sidebar-bottom{display:none;}.sidebar.open .nav{display:grid;}.sidebar.open .sidebar-bottom{display:block;padding-bottom:12px;}.main{margin-left:0;padding:48px 20px 0;}.hero h1 span+span{margin-top:8px;}.hero{padding-bottom:32px;}.section{margin-top:56px;}.section-heading{margin-bottom:24px;}.project-grid{grid-template-columns:1fr;padding:10px;gap:20px;}.stack{gap:24px 12px;}.stack-item{gap:8px;}.stack-icon{width:44px;height:44px;}.stack-icon img{width:30px;height:30px;}.newsletter{margin-top:64px;padding:40px 16px;}.newsletter form{flex-direction:column;}.newsletter input{width:100%;}.newsletter .button{width:100%;}.footer{margin-top:64px;flex-direction:column;gap:16px;padding:24px 0;}.page-intro{padding:16px 0 40px;}.about-top,.services-grid,.contact-grid,.experience-row,.testimonials{grid-template-columns:1fr;}.about-top{gap:32px;}.stats{grid-template-columns:repeat(3,1fr);}.stats>div:first-child{grid-column:auto;}.experience-row{gap:16px;}.service-card{padding:24px;}.project-facts{grid-template-columns:repeat(2,1fr);}.project-intro{padding-top:16px;}.search{max-width:100%;width:100%;}.projects-heading{align-items:flex-start;flex-direction:column;}.skip{left:12px;}.contact-grid{gap:48px;}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto;}*{transition:none!important;animation:none!important;}}
@media(max-width:1100px){.stats{grid-template-columns:repeat(3,1fr);min-width:0;}.stats>div:first-child{grid-column:auto;}.stats>div{padding:0 16px;}.project-facts>div{padding:0 20px;}.about-top{gap:32px;}}
@media(max-width:760px){.stats{display:grid;grid-template-columns:repeat(3,1fr);padding:16px 0;}.stats>div{padding:0 8px;}.about-top{grid-template-columns:1fr;}.project-facts{display:grid;grid-template-columns:repeat(2,1fr);gap:24px 0;}.project-facts>div{padding:0 16px;}.project-facts>div:nth-child(2){border:0;}.service-card{padding:24px;}.project-intro>p{max-width:none;}.hero>p{max-width:none;}}

/* Adobe tiles occupy about 30px of their 36px SVG canvas. Match visible artwork. */
.stack-icon img.stack-logo-stripe{transform:scale(.8333333333);}

.honeypot[hidden]{display:none}.button:disabled{cursor:wait;opacity:.6}

/* Source borders sit over the component bounds; they do not add layout pixels. */
.project-grid::after,.newsletter::after,.service-card::after,.project-image::after,.project-meta::after{content:"";position:absolute;inset:0;pointer-events:none;border:1px dotted var(--line);border-radius:inherit;}
.project-image::after,.project-meta::after{border-style:solid;}
.project-arrow{position:absolute;top:8px;right:8px;display:flex;align-items:center;padding:4px 10px;border:1px solid var(--line);border-radius:6px;background:var(--bg);opacity:0;transform:translateY(-32px);transition:opacity .2s,transform .2s;}
.project-card:hover .project-arrow,.project-card:focus-visible .project-arrow{opacity:1;transform:translateY(0);}
.stack{column-gap:16px;}.stack-item p{margin-top:6px;}
.quote-head{padding-bottom:16px;border-bottom:1px dotted var(--line);}
.stats>div{border-right-style:dotted;}
.experience-row{border-top:1px dotted var(--detail-line);}
.contact-grid>section{position:relative;min-width:0;padding:16px;border-radius:8px;}.contact-grid>section::after{content:"";position:absolute;inset:0;border:1px dotted var(--detail-line);border-radius:inherit;pointer-events:none;}
.inquiry input,.inquiry textarea,.inquiry select{border-radius:8px;}
.button{min-height:40px;padding:8px 16px;}
.nav .icon{width:14px;height:14px;}.socials .icon{width:18px;height:18px;}
@media(min-width:761px){.section:has(.stack){margin-top:120px;}}

/* Framer promotes these animated groups to composited layers. Keep the same
   text antialiasing on Chromium/Windows without adding blur or animation. */
.hero,.section:has(.project-grid){will-change:transform;}

/* Contact controls measured from the published page. */
.contact-actions{display:flex;flex-direction:column;align-items:flex-start;gap:12px;}
.contact-actions .button{width:240px;min-width:240px;max-width:100%;margin:0;gap:6px;}
.contact-actions .icon,.contact-socials .icon{width:14px;height:14px;}
.contact-socials{display:flex;flex-direction:column;align-items:flex-start;gap:12px;}
.contact-socials .button{min-height:33px;padding:7px 15px;gap:6px;font-weight:400;}
.contact-grid+.section{margin-top:120px;}
.copy-status:not(.sr-only){max-width:300px;margin-top:12px;}
.inquiry input,.inquiry select{height:40px;}

/* Source ticker: 423px cards, 12px gaps, 60px/second, fading edges. */
.testimonial-track{display:flex;width:max-content;}
.testimonial-group{display:flex;gap:12px;padding-right:12px;align-items:stretch;}
.testimonials.is-running{overflow:hidden;mask-image:linear-gradient(to right,transparent,#000 12.5%,#000 87.5%,transparent);}
.testimonials.is-running .testimonial-track{animation:testimonial-scroll 29s linear infinite;will-change:transform;}
.testimonials:hover .testimonial-track,.testimonials:focus-within .testimonial-track,.testimonials.is-paused .testimonial-track{animation-play-state:paused;}
.testimonials:focus-visible{outline:2px solid var(--text);outline-offset:4px;}
.quote-head p{margin-top:8px;}.quote-rating{display:flex;gap:2px;color:#fad039;margin-top:16px;}.quote-rating .icon{width:14px;height:14px;}
.testimonial-toggle{display:flex;align-items:center;justify-content:center;width:32px;height:32px;background:var(--surface);border:1px solid var(--line);border-radius:6px;color:var(--muted);font:16px sans-serif;}
.testimonial-toggle[hidden]{display:none;}
@keyframes testimonial-scroll{to{transform:translateX(-50%);}}
@media(max-width:760px){.contact-actions .button{min-width:min(240px,100%);}.contact-grid+.section{margin-top:64px;}.quote{flex-basis:min(423px,calc(100vw - 64px));width:min(423px,calc(100vw - 64px));}.testimonials.is-running .testimonial-track{animation-duration:23s;}}
@media(prefers-reduced-motion:reduce){.testimonials.is-running{overflow-x:auto;mask-image:none;}.testimonial-group[aria-hidden=true]{display:none;}.testimonial-track{transform:none!important;}}

.contact-hero>p{max-width:600px;margin-top:8px;}.inquiry .field{gap:10px;}

/* Projects header: source search field and full-width solid divider. */
.projects-heading{flex-direction:column;align-items:flex-start;gap:32px;padding-bottom:32px;margin-bottom:32px;border-bottom:1px solid var(--line);}
.projects-heading .search{width:318px;max-width:100%;}
.projects-heading input{height:40px;padding:10px 44px 10px 16px;}
.projects-heading .search>.icon{position:absolute;right:16px;top:11px;width:18px;height:18px;color:var(--muted);pointer-events:none;}

/* Keep the About stats within the same column as the biography. */
.stats{display:grid;width:calc((100% - 64px)/2);min-width:0;grid-template-columns:minmax(0,.78fr) repeat(2,minmax(0,1fr));padding:16px 0}
.stats>div{min-width:0;padding:0 24px}
.stats p{margin-top:10px}
.about-top .prose{min-width:0}
.about-top .prose p:last-child{margin-bottom:0}
@media(min-width:761px) and (max-width:1100px){.stats{width:calc((100% - 32px)/2)}.stats>div{padding:0 10px}}
@media(max-width:760px){.stats{width:100%;grid-template-columns:repeat(3,minmax(0,1fr))}.stats>div{padding:0 8px}}
@media(min-width:761px) and (max-width:900px){.stats{grid-template-columns:1fr;padding:16px 24px}.stats>div{padding:16px 0;border-right:0;border-bottom:1px dotted var(--line)}.stats>div:first-child{padding-top:0}.stats>div:last-child{padding-bottom:0;border-bottom:0}}
