/* Overrides for the /website route (loaded LAST so it wins).
   ---------------------------------------------------------------
   Webflow's stylesheet sets `html { height: 100% }` and
   responsive-enhancements.css sets `html, body { overflow-x: hidden }`.
   Together they pin <html> to the viewport height and turn it into an
   inner scroll container, so the page won't scroll normally. Reset <html>
   to natural height/overflow and keep horizontal clipping on <body>. */
html {
  height: auto !important;
  overflow: visible !important;
}
body {
  height: auto !important;
  min-height: 100%;
  overflow-x: clip;
  overflow-y: visible !important;
}

/* Font overrides for the /website route */
@font-face {
  font-family: 'ZT Talk Expanded';
  src: url('/fonts/zt-talk-expanded/ZTTalk-MediumExpanded.woff2') format('woff2');
  font-weight: 500;
  font-stretch: expanded;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: 'ZT Talk Expanded';
  src: url('/fonts/zt-talk-expanded/ZTTalk-SemiBoldExpanded.woff2') format('woff2');
  font-weight: 600;
  font-stretch: expanded;
  font-style: normal;
  font-display: swap;
}

/* Apply ZT Talk Expanded Semibold to all headers */
[data-website-route="true"] h1,
[data-website-route="true"] h2,
[data-website-route="true"] h3,
[data-website-route="true"] h4,
[data-website-route="true"] h5,
[data-website-route="true"] h6 {
  font-family: 'ZT Talk Expanded', 'ZT Talk', system-ui, sans-serif !important;
  font-weight: 600 !important;
  font-stretch: expanded !important;
}

/* Apply ZT Talk Expanded Medium to all body content */
[data-website-route="true"] body,
[data-website-route="true"] p,
[data-website-route="true"] span,
[data-website-route="true"] div,
[data-website-route="true"] a,
[data-website-route="true"] button,
[data-website-route="true"] input,
[data-website-route="true"] textarea,
[data-website-route="true"] label {
  font-family: 'ZT Talk Expanded', 'ZT Talk', system-ui, sans-serif !important;
  font-weight: 500 !important;
  font-stretch: expanded !important;
}

/* The reused homeowners navbar logo uses Tailwind `h-16 w-auto`, but Webflow's
   global image CSS on this route forces it to full width / auto height (a giant
   logo). Pin it back to a fixed logo height. Match spacing/width from other pages. */
.page-wrapper img.h-16 {
  height: 4rem !important;
  width: auto !important;
  max-width: none !important;
}

/* Ensure navbar logo has consistent spacing with other pages */
.page-wrapper > nav {
  padding-top: 0.5rem !important;
  padding-bottom: 0.5rem !important;
}

/* Webflow's UNLAYERED `img { height:auto }` outranks Tailwind v4's LAYERED
   `.h-full`/`object-cover` utilities, so the hero slideshow images collapse to
   natural height (image stuck at the top, black below) instead of filling the
   card — most visible on mobile. Force them to cover the full hero card so the
   /website hero is full-bleed like /homeowners. */
.reno-hero-card img {
  height: 100% !important;
  width: 100% !important;
  object-fit: cover !important;
}

/* Fix hero image zoom to properly fill the entire card without gaps on desktop */
@media (min-width: 1024px) {
  .reno-hero-card img {
    transform: scale(1.4) !important;
    transform-origin: center center !important;
  }
}

/* Center the reno logo in the nav (Webflow's global nav CSS overrides the
   Navbar's flex centering on this route). */
.page-wrapper > nav {
  display: flex !important;
  justify-content: center !important;
}

/* Mobile: a solid black fixed navbar at the top holding the centered logo —
   the hero image sits below it (the hero block reserves matching top padding). */
@media (max-width: 767px) {
  .page-wrapper > nav {
    position: fixed !important;
    top: 0;
    left: 0;
    right: 0;
    z-index: 50 !important;
    background: #0A0A0A !important;
    padding: 8px 0 !important;
    align-items: center !important;
  }
}


/* On the website hero the inline form is always shown on desktop, so pull the
   hero bottom row's right edge in to keep the "Interior Design…" caption clear
   of the form (it otherwise hides behind it). */
@media (min-width: 1024px) {
  .page-wrapper .reno-hero-bottom {
    right: clamp(430px, 38vw, 600px) !important;
  }
}

/* The DreamSpace slider runs on `.swiper_component` (not `.swiper`), so it
   doesn't inherit Swiper's default overflow:hidden — adjacent slides spill past
   the viewport. Clip the container on all viewports (it's a slider on desktop
   too now). */
.why-reno .swiper_component {
  overflow: hidden;
}
.why-reno .swiper_component .swiper-slide {
  box-sizing: border-box;
}

/* DreamSpace slider controls — prev/next arrows + clickable pagination dots,
   shown centred below the cards. */
.why-reno .dreamspace-controls {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 20px;
  margin-top: 32px;
}
.why-reno .dreamspace-arrow {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 52px;
  height: 52px;
  min-width: 52px;
  min-height: 52px;
  padding: 0;
  border-radius: 9999px;
  background: rgba(255, 255, 255, 0.08);
  border: 1px solid rgba(255, 255, 255, 0.25);
  color: #fff;
  cursor: pointer;
  transition: background 200ms ease, opacity 200ms ease;
}
.why-reno .dreamspace-arrow:hover {
  background: rgba(255, 255, 255, 0.18);
}
/* Smaller, less bulky arrows on tablet & mobile. */
@media (max-width: 1023px) {
  .why-reno .dreamspace-arrow {
    width: 38px;
    height: 38px;
    min-width: 38px;
    min-height: 38px;
  }
  .why-reno .dreamspace-arrow svg {
    width: 18px;
    height: 18px;
  }
  .why-reno .dreamspace-controls {
    gap: 16px;
  }
}
.why-reno .dreamspace-arrow.swiper-button-disabled {
  opacity: 0.35;
  cursor: default;
}
.why-reno .dreamspace-pagination {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  width: auto;
}
.why-reno .dreamspace-pagination .swiper-pagination-bullet {
  width: 8px;
  height: 8px;
  margin: 0 !important;
  background: rgba(255, 255, 255, 0.4);
  opacity: 1;
  border-radius: 9999px;
  transition: width 300ms ease, background 300ms ease;
}
.why-reno .dreamspace-pagination .swiper-pagination-bullet-active {
  width: 24px;
  background: #fff;
}

/* Portfolio desktop nav arrows — clear Webflow's button padding default. */
.page-wrapper .portfolio-section .portfolio-arrow {
  padding: 0 !important;
}

/* Webflow ships a generic `.grid { position:absolute; inset:0%;
   grid-template-columns: 1fr×8 }` class that COLLIDES with Tailwind's `grid`
   display utility used by the reused WhyReno section's card grids. Because
   Webflow's CSS is unlayered it beats Tailwind's layered utilities, so the
   WhyReno grids become absolutely-positioned + mis-columned — the cards collapse
   and overlap the following sections. Restore normal flow for them. (The desktop
   bento sets its columns/rows/areas inline, so those survive; we only undo the
   absolute positioning there, and fix the single column on mobile.)
   Scoped to #why-reno only — a broader `section[class*="px-4"]` selector also
   caught the PortfolioSection's Tailwind `grid grid-cols-2` and collapsed it to
   a single stacked column on mobile. */
.page-wrapper #why-reno .grid {
  position: static !important;
  inset: auto !important;
  width: auto !important;
  aspect-ratio: auto !important;
}
@media (max-width: 1023px) {
  .page-wrapper #why-reno .grid {
    grid-template-columns: minmax(0, 1fr) !important;
    grid-template-rows: none !important;
    grid-auto-rows: auto !important;
  }
}

/* Same Webflow `.grid` collision hits the mobile PortfolioSection: its Tailwind
   `grid grid-cols-2` cards inherit Webflow's absolute + 8-column generic `.grid`
   (unlayered, so it beats Tailwind's layered utilities), collapsing the gallery
   into one stacked, oversized column. Restore normal flow and pin the gallery to
   the intended 2-column / auto-row grid so `col-span-2` (hero) still spans both. */
.page-wrapper .portfolio-section .grid {
  position: static !important;
  inset: auto !important;
  width: auto !important;
  aspect-ratio: auto !important;
  grid-template-rows: none !important;
  grid-auto-rows: auto !important;
  grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
}

/* Webflow forces a 44px min tap-target on every <button> on this route, which
   bloated the PortfolioSection carousel dots (Tailwind `h-2 w-2`/`w-6`) into
   44×44px blobs. Clear the min-size so the intended small pill dots show. */
.page-wrapper .portfolio-section .portfolio-dot {
  min-width: 0 !important;
  min-height: 0 !important;
}

/* The Renovation cards' arrow-button CTAs ("Expert Interior Design" cluster +
   "Renovate Now, Pay Later") are desktop hover interactions; in the stacked
   tablet/mobile layout they collapse into empty/awkward framed boxes. Hide them
   below the Webflow tablet breakpoint. */
@media (max-width: 991px) {
  .page-wrapper .home_renovation_button-wrap.cc-arrow {
    display: none !important;
  }
}

/* Purple radial glow behind the two DARK renovation cards ("Your entire
   renovation in your palm" + "Financing, Reimagined") — matches the reference. */
.home_renovation_card.cc-large,
.home_renovation_card:not(.cc-large):not(.cc-light) {
  position: relative;
  overflow: hidden;
  /* Establish a stacking context so the z-index:-1 SVG background image and
     the ::before glow render behind the card's content instead of dropping
     behind the dark page background (which left the cards flat black). */
  isolation: isolate;
}
.home_renovation_card.cc-large::before,
.home_renovation_card:not(.cc-large):not(.cc-light)::before {
  content: "";
  position: absolute;
  z-index: -1;
  left: 50%;
  top: 0;
  width: 130%;
  height: 130%;
  transform: translateX(-50%);
  border-radius: 1115px;
  background: radial-gradient(
    106.45% 100% at 50.07% 0%,
    #000 11.07%,
    #000069 58.09%,
    #8138ff 72%,
    #6d60dd 100%
  );
  filter: blur(160px);
  pointer-events: none;
}

/* The CTA's phone-mockup content (`.cta_component { height: 30rem }`) bleeds
   past the section and below the footer, leaving ~196px of dead scroll space.
   Clip it to the section so the footer is the true last element. */
.cta_section {
  overflow: clip;
}

/* The Promise and CTA sections each have a z-index:-1 background image
   (u-cover-absolute u-zindex-negative). Their containers were static and not
   their own stacking context, so those negative-z images dropped behind the
   dark page background and never showed. Establishing a positioned stacking
   context keeps the backgrounds behind the content but in front of the page. */
.home_promise_section,
.cta_component {
  position: relative;
  isolation: isolate;
}

/* Hide the Promise background SVG on tablet and mobile — it's a desktop-only
   accent and clutters the smaller stacked layout. */
@media (max-width: 991px) {
  .home_promise_bg-svg {
    display: none;
  }
}

/* Designers slide CTA ("Book consultation") — full width with centered label. */
.designer-slide .btn-wrap,
.designer-slide .btn-wrap-mob {
  width: 100%;
}
.designer-slide .designer-book-btn {
  width: 100%;
}
.designer-slide .designer-book-btn .button_main_inner {
  width: 100%;
  justify-content: center;
}

/* Designers section, tablet/mobile: in the intro state the avatar pagination
   row sat at top:13em and overlapped the paragraph. Drop it below the text.
   The GSAP timeline slides it back up (via translateY) on scroll, so this only
   changes the resting/intro position. */
@media (max-width: 768px) {
  .designer-pagination-slider-container {
    /* Sit the avatar row directly ABOVE the designer name. The container is 320px
       tall with the avatars vertically centred and translate(-50%,-50%), so the
       avatar's visual centre lands exactly at this `top` value. The name sits at
       ~542px from the sticky top, so keep the avatar centre above ~500px.
       TUNE: raise this value to move the row down, lower it to move up. */
    top: 30em !important;
    /* Centre the avatar row horizontally; GSAP only animates translateY so the
       horizontal -50% is preserved. */
    left: 50% !important;
    transform: translate(-50%, -50%) !important;
    /* Wide enough for the horizontal avatar row (slidesPerView:auto). */
    width: 320px !important;
    min-width: 320px !important;
  }
  /* Horizontal row: each pagination slide hugs its avatar instead of filling
     the track full-width. */
  .designer-slider-pagination-slider .swiper-slide.designer-pagination-slide {
    width: auto !important;
    height: auto !important;
  }
}

/* Rounded card framing for the "Build your dream space with Reno" CTA.
   overflow:clip keeps the z-index:-1 background image's square corners from
   poking past the rounded border. */
.cta_component {
  border-radius: 20px;
  border: 1px solid rgba(255, 255, 255, 0.2);
  overflow: clip;
}
/* Mweb: the CTA card sits on a solid black background. */
@media (max-width: 767px) {
  .cta_component {
    background: #000 !important;
  }
}

/* Features ("Renovation, Rewired" gallery) on tablet + mobile: the scroll-zoom
   gallery animation is disabled (see home.js GallerySecAnimation early-return),
   so render the section as a single static background image with the "One-stop
   Renovation Platform" heading + subtext centred over it (matches the design). */
@media (max-width: 991px) {
  .image-gallery-sec {
    min-height: auto !important;
  }
  .image-gallery-sec .sticky-inner {
    position: static !important;
    height: auto !important;
  }
  .image-gallery-sec .section {
    position: relative;
    min-height: 100vh;
    overflow: hidden;
    background-image: linear-gradient(rgba(0, 0, 0, 0.45), rgba(0, 0, 0, 0.45)),
      url("/website/images/6943bdeb8554ed4ebd42e10a_Frame%202147225663.jpg");
    background-size: cover;
    background-position: center;
  }
  /* Hide the scrolling image grid + the "Renovation, Rewired" intro text. */
  .image-gallery-sec .gallery-t-text-container,
  .image-gallery-sec .gallery-grid-wrapper {
    display: none !important;
  }
  /* "One-stop Renovation Platform" heading + subtext: fill the section and
     centre, full-width so the heading doesn't shrink-wrap per character. */
  .image-gallery-sec .gallery-s-text-container {
    position: absolute !important;
    inset: 0 !important;
    height: auto !important;
    min-height: 0 !important;
    z-index: 2;
    display: flex !important;
    flex-direction: column !important;
    align-items: center !important;
    justify-content: center !important;
    padding: 0 24px !important;
    /* The disabled gallery animation can leave the text hidden (opacity:0 /
       scaled) — force it visible for the static layout. */
    opacity: 1 !important;
    transform: none !important;
    visibility: visible !important;
  }
  .image-gallery-sec .gallery-s-text-container h2,
  .image-gallery-sec .gallery-s-text-container p {
    opacity: 1 !important;
    transform: none !important;
  }
  .image-gallery-sec .gallery-s-text-container .u-container,
  .image-gallery-sec .gallery-s-text-container .gallery-f-text-area {
    width: 100% !important;
    max-width: 100% !important;
    height: auto !important;
    min-height: 0 !important;
  }
}

/* Designers section: the right-hand image column is a marquee built from two
   identical image groups stacked vertically, but nothing animated it (the
   `loopY` keyframe was only bound to an unused `.designers_slide_img_track`).
   Animate the container up by 50% — exactly one group — for a seamless,
   continuous auto-scroll. Vertical layout (+ loopY) is desktop only; on mweb the
   project images lay out horizontally, so scope the vertical animation to ≥768px. */
@media screen and (min-width: 768px) {
  .designer-images-marquee-container {
    animation: loopY 35s linear infinite;
    will-change: transform;
  }
}
@media (prefers-reduced-motion: reduce) {
  .designer-images-marquee-container {
    animation: none;
  }
}

/* Designers: centre the slide content (name / role / description / CTA) on
   tablet + mobile, to match the centred text there. (Desktop stays flex-start.) */
@media (max-width: 991px) {
  .designer-slide-content {
    align-items: center !important;
  }
}

/* ── DreamSpace + Designers, mweb (≤767px) tweaks ── */
@media (max-width: 767px) {
  /* DreamSpace feature card head: drop the bottom padding on mobile. */
  .home_features_slide-head {
    padding-bottom: 0 !important;
  }
  /* Designers: lay the project images out in a horizontal row (no vertical
     loopY) and shrink them to fit the mobile layout. */
  .designer-images-marquee,
  .designer-images-marquee-container {
    flex-direction: row !important;
    animation: none !important;
  }
  .designer-marquee-image {
    height: 32vh !important;
    max-height: 320px !important;
  }
  /* Avatars in one horizontal row: the selected one bigger, the rest smaller.
     Sizing via width/height is fought here by Webflow's global `img{max-width:100%}`
     (it caps the avatar to its slide, and the slide shrink-wraps the avatar — a
     circular size-lock) and by Swiper's slidesPerView:auto recalc. `transform:
     scale()` sidesteps both: it scales the rendered avatar without touching the
     layout box, so the selected stays full size and the others shrink. Setting
     the transform also overrides the desktop 90° rotation (upright circles here).
     max-width:none lets the avatar render at its natural circle size first. */
  .designer-pagination-slider-container .designer-pagination-image {
    max-width: none !important;
    transform: scale(0.66) !important;
    transform-origin: center center !important;
    /* No transition: an in-flight transform transition outranks !important in the
       cascade, and Swiper's loop re-marks the active slide on load, leaving the
       selected avatar stuck at the shrunk scale. Snap-sizing keeps it correct. */
  }
  .designer-pagination-slider-container .swiper-slide-active .designer-pagination-image,
  .designer-pagination-slider-container .swiper-slide-thumb-active .designer-pagination-image {
    transform: scale(1) !important;
  }
  .designer-slider-pagination-slider .swiper-wrapper {
    align-items: center !important;
  }
}

/* Our simple logo nav is position:absolute (out of flow), so on small screens
   the compact hero content starts at the very top and slides under the logo.
   Reserve clearance on tablet/mobile so the headline sits below the logo. */
@media (max-width: 991px) {
  .hero_section .home_hero_wrapper {
    padding-top: 76px;
  }
}
