/* Static-export overrides — load AFTER site.css.
   Without JS the .rv reveal must never hide content (crawlers + fail-safe). */
.rv{opacity:1;transform:none}
html.rv-ready .rv{opacity:0;transform:translateY(26px);transition:opacity .8s ease,transform .8s ease}
html.rv-ready .rv.in{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){html.rv-ready .rv{opacity:1;transform:none;transition:none}}

/* Static export: <image-slot> replaced by plain <img> */
.pf-tile img{display:block;width:100%;height:100%;object-fit:cover;transition:transform .6s cubic-bezier(.2,.7,.2,1)}
.pf-tile:hover img{transform:scale(1.06)}


@media(max-width:720px){
  .foot-bottom{justify-content:center;text-align:center}
  .foot-bottom>*{width:100%}
}


/* ============ MOBILE SCROLL PERFORMANCE ============ */
/* backdrop-filter on fixed/overlay surfaces forces full-viewport
   re-composite every scroll frame on phones. Solid backgrounds instead. */
@media(max-width:1000px){
  header{backdrop-filter:none !important;-webkit-backdrop-filter:none !important;transition:background .3s,border-color .3s}
  header.scrolled{backdrop-filter:none !important;-webkit-backdrop-filter:none !important}
  .mnav{backdrop-filter:none !important;-webkit-backdrop-filter:none !important;background:rgba(12,11,10,.99)}
  .nav-links .drop{backdrop-filter:none !important;-webkit-backdrop-filter:none !important;background:rgba(12,11,10,.99)}
  /* release permanently-promoted viewport-sized layers */
  .tilt-wrap,.tilt-col,.hero-bg,.hero-bg img,.page-hero-bg{will-change:auto}
}
/* dvh re-resolves as mobile browser chrome hides/shows, re-laying out the
   hero mid-scroll. svh is a fixed value. */
@media(max-width:768px){
  .hero{min-height:100vh;min-height:100svh}
}

/* recent client websites: solid black band on mobile */
@media(max-width:768px){.portfolio.tilt-section{background:#000000}}
