/* Brewer Custom Floors & More - v2 "design studio" draft
   Palette = the brand kit: Red #aa0100, Dark Grey #404040, White #fff.
   Red-forward, clean white, minimal grey, no yellow. Light only.
   Aesthetic root: daltonmills.com (layered depth + duotone + motion). */

:root {
  --bg: #fdfbf8;          /* soft warm white */
  --surface: #ffffff;
  --band: #f1ebe1;        /* soft warm off-white section alt */
  --band-2: #e7dbc9;      /* soft wood/tan accent block */
  --paper: #f2ebe1;       /* shared grid-paper backdrop + pencil-drawing paper (house cream) */
  --text: #3f3631;        /* warm near-black */
  --text-dim: #7a6e63;    /* warm taupe */
  --text-faint: #a89a8c;
  --accent: #aa0100;      /* BCF brand red - used sparingly, for pops */
  --accent-ink: #8a0100;
  --accent-soft: #ece0d0; /* warm tan (icon backings) */
  --wood: #5a4030;        /* walnut - the supporting warm tone */
  --wood-ink: #43301f;    /* espresso */
  --wood-soft: #8a6a4a;
  --duo: #4a3526;         /* duotone shadow tone = warm espresso brown */
  --duo-base: #f1e7da;    /* duotone highlight = warm cream */
  --border: #e8ded2;      /* warm neutral hairline */
  --line: rgba(90,64,40,.13); /* faint warm-brown blueprint linework */
  --shadow: 0 2px 8px rgba(70,52,38,.06), 0 18px 44px rgba(70,52,38,.08);
  --shadow-lg: 0 10px 28px rgba(70,52,38,.1), 0 36px 70px rgba(70,52,38,.14);
  --radius: 22px;
  --radius-sm: 16px;
  --btn-radius: 12px;     /* rounded box, not pill */
  --arch: 260px 260px var(--radius) var(--radius);
  --maxw: 1280px;
  --ease: cubic-bezier(.22,1,.36,1);
  --font-display: "Playfair Display", Georgia, "Times New Roman", serif;
  --font-body: "Instrument Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; scroll-snap-type: y proximity; }

body {
  margin: 0; background: var(--bg); color: var(--text);
  font-family: var(--font-body); font-size: 17px; line-height: 1.6;
  -webkit-font-smoothing: antialiased; overflow-x: hidden;
}

h1, h2, h3, h4 {
  font-family: var(--font-display); font-weight: 600; font-optical-sizing: auto;
  line-height: 1.08; margin: 0 0 .5em; letter-spacing: -.01em; color: var(--text);
}
h1 { font-size: clamp(2.8rem, 6.2vw, 5rem); }
h2 { font-size: clamp(2.1rem, 4.2vw, 3.3rem); }
h3 { font-size: 1.5rem; }
p { margin: 0 0 1.1em; }
a { color: var(--accent-ink); text-decoration: none; }
a:hover { text-decoration: underline; }
img { max-width: 100%; display: block; }
::selection { background: var(--accent); color: #fff; }

.wrap { width: 100%; max-width: var(--maxw); margin: 0 auto; padding: 0 40px; }
.eyebrow {
  font-family: var(--font-body); font-weight: 700; font-size: .78rem;
  letter-spacing: .2em; text-transform: uppercase; color: var(--wood-ink); margin: 0 0 1.2em;
  display: inline-flex; align-items: center; gap: .7em;
}
.eyebrow::before { content: ""; width: 30px; height: 2px; background: var(--wood); }
.center .eyebrow { justify-content: center; }
.lede { font-size: 1.24rem; color: var(--text-dim); max-width: 60ch; line-height: 1.55; }
.center { text-align: center; }
.center .lede { margin-left: auto; margin-right: auto; }
.muted { color: var(--text-dim); }
.serif-italic { font-family: var(--font-display); font-style: italic; font-weight: 400; }

/* Buttons - rounded boxes */
.btn {
  display: inline-flex; align-items: center; gap: .6em;
  padding: .9em 1.6em; border-radius: var(--btn-radius);
  font-family: var(--font-body); font-weight: 600; font-size: .98rem;
  border: 1.5px solid transparent; cursor: pointer;
  transition: background .25s var(--ease), color .25s var(--ease), border-color .25s var(--ease), transform .25s var(--ease), box-shadow .25s var(--ease);
  text-decoration: none;
}
.btn:hover { text-decoration: none; transform: translateY(-2px); }
.btn-primary { background: var(--accent); color: #fff; }
.btn-primary:hover { background: var(--accent-ink); color: #fff; }
.btn-ghost { background: transparent; color: var(--accent-ink); border-color: var(--accent); }
.btn-ghost:hover { background: var(--accent); color: #fff; }
.btn-light { background: #fff; color: var(--accent-ink); }
.btn-light:hover { background: #fff; box-shadow: var(--shadow); }
.btn-lg { padding: 1.1em 2.3em; font-size: 1.08rem; }

/* Utility top strip (the one place dark grey lives) */
.util-bar { background: var(--text); color: #fff; font-size: .82rem; }
.util-inner { display: flex; align-items: center; justify-content: space-between; min-height: 40px; gap: 16px; }
.util-tag { font-weight: 600; letter-spacing: .04em; }
.util-contact { display: flex; align-items: center; gap: 14px; }
.util-contact a { color: #fff; font-weight: 600; }
.util-contact a:hover { color: #fff; text-decoration: underline; }
.util-contact .sep { opacity: .4; }

/* Header */
.site-header {
  position: sticky; top: 0; z-index: 50;
  background: color-mix(in srgb, var(--bg) 88%, transparent);
  backdrop-filter: blur(14px) saturate(1.1);
  border-bottom: 1px solid var(--border);
}
.nav { display: flex; align-items: center; justify-content: space-between; height: 86px; }
.brand { display: flex; align-items: center; }
.brand .logo { height: 54px; width: auto; display: block; }
.nav-links { display: flex; align-items: center; gap: 4px; list-style: none; margin: 0; padding: 0; }
.nav-links a { color: var(--text); font-weight: 500; font-size: .96rem; padding: .5em .95em; border-radius: 8px; transition: color .2s, background .2s; }
.nav-links a:hover { color: var(--accent-ink); background: var(--band); text-decoration: none; }
.nav-links a.active { color: var(--accent-ink); font-weight: 600; text-decoration: none; box-shadow: inset 0 -2px 0 var(--accent); border-radius: 0; }
.nav-right { display: flex; align-items: center; gap: 14px; }
.nav-toggle { display: none; width: 44px; height: 44px; border-radius: 10px; border: 1px solid var(--border); background: var(--surface); cursor: pointer; flex-direction: column; gap: 4px; align-items: center; justify-content: center; }
.nav-toggle span { width: 18px; height: 2px; background: var(--text); }
.nav-cta { display: none; } /* in-menu CTA, shown only on the mobile dropdown */

/* ---- Scroll reveal ---- */
.reveal { opacity: 0; transform: translateY(30px); transition: opacity .9s var(--ease), transform .9s var(--ease); will-change: opacity, transform; }
.reveal.in { opacity: 1; transform: none; }
.reveal.d1 { transition-delay: .08s; } .reveal.d2 { transition-delay: .16s; }
.reveal.d3 { transition-delay: .24s; } .reveal.d4 { transition-delay: .32s; }
.reveal.d5 { transition-delay: .40s; }
@media (prefers-reduced-motion: reduce) { .reveal { opacity: 1; transform: none; transition: none; } }

/* Hero is above the fold - it reveals on LOAD via a CSS animation (not the
   scroll/JS IntersectionObserver), so the headline + CTAs are guaranteed
   visible even if JS is slow, blocked, or disabled. Don't gate a conversion
   CTA behind a scroll. Below-the-fold sections keep the scroll reveal. */
@keyframes heroReveal { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: none; } }
.hero .reveal { animation: heroReveal .9s var(--ease) both; }
.hero .reveal.d1 { animation-delay: .08s; }
.hero .reveal.d2 { animation-delay: .16s; }
.hero .reveal.d3 { animation-delay: .24s; }
.hero .reveal.d4 { animation-delay: .32s; }
@media (prefers-reduced-motion: reduce) { .hero .reveal { animation: none; opacity: 1; transform: none; } }

/* Shared continuous grid paper - ONE sheet behind the hero AND the
   design->finished section, so the grid lines connect and the seam vanishes. */
.paper { position: relative; background-color: var(--paper); }
.paper::before {
  content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background-image: linear-gradient(var(--line) 1px, transparent 1px), linear-gradient(90deg, var(--line) 1px, transparent 1px);
  background-size: 46px 46px;
}
.paper > * { position: relative; z-index: 1; }
.hero { background: transparent; }

/* ---- Duotone photo treatment (brand red, grain + halftone) ---- */
.duo { position: relative; background-color: var(--duo-base); overflow: hidden; isolation: isolate; }
.duo img { width: 100%; height: 100%; object-fit: cover; display: block; mix-blend-mode: multiply; filter: grayscale(.9) contrast(.98) brightness(1.16); transition: transform 1.1s var(--ease); }
.duo::after { content: ""; position: absolute; inset: 0; z-index: 1; pointer-events: none; background: var(--duo); mix-blend-mode: lighten; opacity: .9; }
.duo::before {
  content: ""; position: absolute; inset: 0; z-index: 2; pointer-events: none; mix-blend-mode: multiply; opacity: .3;
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.82' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E"),
    radial-gradient(circle at center, rgba(60,10,8,.35) 0.5px, transparent 0.9px);
  background-size: 200px 200px, 3.5px 3.5px;
}
.duo .vig { position: absolute; inset: 0; z-index: 3; pointer-events: none; box-shadow: inset 0 0 60px rgba(40,28,18,.16), inset 0 0 14px rgba(40,28,18,.1); }

/* ---- Sketch treatment (pencil drawing -> real photo crossfade on hover) ----
   HOUSE STYLE for site photography. The drawing is the <img> on top; the real
   photo is the container's background-image (inline). Hovering fades the
   drawing out to reveal the photo. Applies to any .duo container marked
   .sketch (hero frames, category cards, trade tiles, collages). */
.duo.sketch { background-size: cover; background-position: center; background-color: var(--paper); }
.duo.sketch img { mix-blend-mode: normal; filter: none; transition: opacity .6s var(--ease); transform: none; }
.duo.sketch::after, .duo.sketch::before { opacity: 0; }
.duo.sketch .vig { box-shadow: none; }
/* Section-wide reveal: hovering ANY sketch in a .sketch-group fades ALL of
   that group's drawings out to the real photo - EXCEPT .sketch-locked ones
   (staff headshots), which always stay pencil. */
.sketch-group:hover .duo.sketch:not(.sketch-locked) img { opacity: 0; }
/* What we carry (categories) - INVERTED + per-card: starts as the real photo,
   and the hovered card alone fades up to the pencil drawing. */
.cat-photo.sketch img { opacity: 0; }
.cat-card:hover .cat-photo.sketch img { opacity: 1; }

/* Real photo treatment - full color feature spots */
.photo { position: relative; overflow: hidden; background: var(--band); isolation: isolate; border: 7px solid var(--surface); border-radius: var(--radius); box-shadow: var(--shadow); }
.photo img { width: 100%; height: 100%; object-fit: cover; display: block; filter: saturate(1.05) contrast(1.02); transition: transform 1.1s var(--ease); }
.photo:hover img { transform: scale(1.05); }
.photo::after { content: ""; position: absolute; inset: 0; pointer-events: none; opacity: .08; mix-blend-mode: multiply; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E"); }
.photo .cap { position: absolute; left: 0; right: 0; bottom: 0; z-index: 2; padding: 30px 22px 18px; color: #fff; font-size: .92rem; font-weight: 600; background: linear-gradient(transparent, rgba(40,8,6,.78)); }
.photo .cap small { display: block; font-weight: 500; opacity: .88; font-size: .8rem; margin-top: 2px; }

/* Arched frames */
.arch { border-radius: var(--arch); }

/* Rotating studio seal */
.seal { width: 116px; height: 116px; position: relative; }
.seal svg { width: 100%; height: 100%; animation: spin 26s linear infinite; }
.seal .seal-mid { position: absolute; inset: 0; display: grid; place-items: center; }
.seal .seal-mid span { font-family: var(--font-display); font-style: italic; font-size: 1.5rem; color: var(--wood-ink); }
@keyframes spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .seal svg { animation: none; } }

/* ---- Design -> Finished ----
   The floor is visible from the start as a warm duotone with gridlines over it.
   On trigger it dissolves to full color and the gridlines fade off. The picture's
   top & bottom edges fade into the paper (shared grid shows through there), so
   the whole section flows in and out. */
/* "From plan to finished floor": a pencil sketch of a finished room on the blueprint
   grid paper that crossfades to the real finished photo (JS toggles .is-finished by
   scroll direction - reversible). The section is PINNED so "How we work" scrolls up
   in front of it (cover-reveal). Opaque cream bg is the key fix: it hides the
   scrolling hero .paper::before grid BEHIND the pinned floor, so the only grid you
   see over the floor is the pinned (static) .dtf-grid - no more "pushed up" grid. */
.dtf { position: sticky; top: 0; height: 100vh; min-height: 560px; z-index: 0; background: var(--paper); padding: 0; }
.dtf-stage { position: relative; height: 100%; min-height: 560px; overflow: hidden; display: grid; place-items: center; }

/* Cover-reveal: .over-floor rides up over the pinned floor (z-index:1 > the floor's
   0). .floor-hold is a transparent buffer that keeps the finished floor visible for
   a beat; then the opaque .over-floor-deck ("How we work" onward) slides up in front. */
/* pointer-events: the transparent wrapper must not eat clicks meant for the pinned
   dtf CTA underneath (a transparent box still hit-tests) - only the opaque deck
   takes pointer events back. */
.over-floor { position: relative; z-index: 1; pointer-events: none; }
.floor-hold { display: block; height: 72vh; }
.over-floor-deck { position: relative; background: var(--bg); pointer-events: auto; }
/* Feather the TOP edge into the cream paper - a WIDE, shallow RADIAL so the fade
   arcs gently (the top corners round off ever so slightly) instead of a flat line.
   The ellipse is wide/short and centered at top-center, so sides-below and the whole
   bottom stay solid. The grid is NOT in here - it's masked separately. */
.dtf-stage .dtf-floor {
  -webkit-mask-image: radial-gradient(ellipse 180% 28% at 50% 0%, transparent 0%, rgba(0,0,0,.12) 30%, rgba(0,0,0,.5) 60%, #000 100%);
  mask-image: radial-gradient(ellipse 180% 28% at 50% 0%, transparent 0%, rgba(0,0,0,.12) 30%, rgba(0,0,0,.5) 60%, #000 100%);
}
.dtf-floor { position: absolute; inset: 0; z-index: 1; isolation: isolate; }
.dtf-floor img { width: 100%; height: 100%; object-fit: cover; filter: grayscale(.88) sepia(.42) contrast(1.05) brightness(.97); transform: scale(1.06); transform-origin: center 56%; will-change: filter, transform; transition: filter 2.6s var(--ease), transform 3.0s var(--ease); }
.dtf-floor::after { content: ""; position: absolute; inset: 0; z-index: 1; pointer-events: none; background: var(--duo); mix-blend-mode: color; opacity: .55; transition: opacity 2.6s var(--ease); }
.dtf-floor::before {
  content: ""; position: absolute; inset: 0; z-index: 2; pointer-events: none; mix-blend-mode: multiply; opacity: .4; transition: opacity 1.7s var(--ease);
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.82' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E"),
    radial-gradient(circle at center, rgba(60,10,8,.45) 0.5px, transparent 0.9px);
  background-size: 200px 200px, 3.5px 3.5px;
}
.dtf.is-finished .dtf-floor img { filter: grayscale(0) sepia(0) contrast(1.03); transform: scale(1.0); }
.dtf.is-finished .dtf-floor::after { opacity: 0; }
.dtf.is-finished .dtf-floor::before { opacity: .1; }
/* Pencil-drawing reveal variant (house style): the floor starts as a hand-drawn
   graphite sketch (the <img>) over the real photo (container background-image);
   on scroll the drawing crossfades out to reveal the photo. No sepia/duotone/grain
   wash - it's a clean drawing->photo dissolve. The .dtf-grid gridlines are left
   untouched so they still fade off exactly as before. */
.dtf-floor.sketch { background-size: cover; background-position: center; }
.dtf-floor.sketch img { filter: none; opacity: 1; transform: none; transition: opacity 1.6s var(--ease); }
.dtf-floor.sketch::after, .dtf-floor.sketch::before { display: none; }
.dtf.is-finished .dtf-floor.sketch img { opacity: 0; }
/* Grid must show on EVERY paper-colored area: the cream at the top AND the pencil
   sketch (itself drawn on cream paper) - but NOT the full-color photo. Two
   complementary masked layers: ::before is the top cream zone and PERSISTS in both
   states; ::after is the sketch body and fades out with the crossfade. In the sketch
   state they sum to one continuous grid; after the dissolve only the top cream keeps
   its grid, feathering out spatially right where the photo becomes solid. Same
   --line color + 46px cadence as the hero .paper::before grid. */
.dtf-grid { position: absolute; inset: 0; z-index: 2; pointer-events: none; }
.dtf-grid::before, .dtf-grid::after { content: ""; position: absolute; inset: 0;
  background-image: linear-gradient(var(--line) 1px, transparent 1px), linear-gradient(90deg, var(--line) 1px, transparent 1px);
  background-size: 46px 46px;
  /* --dtf-gy is set in JS to (-(hero height) % 46) so these rows line up with the
     hero .paper::before grid at the seam (both tile at 46px from different origins). */
  background-position: 0 var(--dtf-gy, 0px); }
.dtf-grid::before {
  -webkit-mask-image: linear-gradient(to bottom, #000 0, #000 9%, transparent 26%);
  mask-image: linear-gradient(to bottom, #000 0, #000 9%, transparent 26%); }
.dtf-grid::after { opacity: 1; transition: opacity 1.4s var(--ease);
  -webkit-mask-image: linear-gradient(to bottom, transparent 9%, #000 26%, #000 100%);
  mask-image: linear-gradient(to bottom, transparent 9%, #000 26%, #000 100%); }
.dtf.is-finished .dtf-grid::after { opacity: 0; }
.dtf-scrim { position: absolute; inset: 0; z-index: 3; pointer-events: none; background: radial-gradient(ellipse 60% 44% at 50% 50%, rgba(24,12,6,.42), transparent 70%); }
.dtf-content { position: relative; z-index: 4; text-align: center; max-width: 60ch; margin: 0 auto; padding: 0 28px; color: #fff; }
.dtf-content h2 { color: #fff; text-shadow: 0 2px 26px rgba(0,0,0,.45); white-space: nowrap; }
@media (max-width: 560px) { .dtf-content h2 { white-space: normal; } }
.dtf-content p { color: #fff; max-width: 46ch; margin: 0 auto; font-size: 1.18rem; line-height: 1.6; text-shadow: 0 1px 3px rgba(0,0,0,.9), 0 2px 22px rgba(0,0,0,.55); }
.dtf-content .dtf-cta { margin-top: 2rem; }
.dtf-content .btn { box-shadow: 0 14px 34px rgba(0,0,0,.34); }
.dtf-labels { display: inline-flex; align-items: center; gap: 1.1rem; margin-bottom: 1.4rem; font-family: var(--font-body); font-weight: 700; font-size: .8rem; letter-spacing: .22em; text-transform: uppercase; color: #fff; }
.dtf-labels .from { transition: opacity 1.3s var(--ease); }
.dtf-labels .to { color: #ffe9cf; opacity: .45; transition: opacity 1.3s var(--ease); }
.dtf.is-finished .dtf-labels .from { opacity: .5; }
.dtf.is-finished .dtf-labels .to { opacity: 1; }
.dtf-labels .arrow { width: 40px; height: 1px; background: rgba(255,255,255,.55); position: relative; }
.dtf-labels .arrow::after { content: ""; position: absolute; right: 0; top: -3px; width: 7px; height: 7px; border-right: 1.5px solid rgba(255,255,255,.75); border-top: 1.5px solid rgba(255,255,255,.75); transform: rotate(45deg); }
/* Clickable scroll prompt pinned to the bottom of the floor reveal, so nobody
   mistakes the pinned section for the end of the page. */
.dtf-hint {
  position: absolute; bottom: 24px; left: 50%; transform: translateX(-50%);
  z-index: 5; display: inline-flex; flex-direction: column; align-items: center; gap: 8px;
  padding: 8px 14px; color: #fff; opacity: .85; text-decoration: none;
  font-size: .74rem; font-weight: 600; letter-spacing: .16em; text-transform: uppercase;
  transition: opacity .3s var(--ease);
}
.dtf-hint:hover { opacity: 1; }
.dtf-hint i {
  width: 11px; height: 11px;
  border-right: 2px solid currentColor; border-bottom: 2px solid currentColor;
  transform: rotate(45deg);
  animation: dtfHintNudge 2.2s var(--ease) infinite;
}
@keyframes dtfHintNudge {
  0%, 100% { transform: translateY(0) rotate(45deg); }
  50% { transform: translateY(6px) rotate(45deg); }
}
@media (prefers-reduced-motion: reduce) { .dtf-hint i { animation: none; } }
/* Reduced motion: no pin, no cover-reveal; show the finished photo straight away. */
@media (prefers-reduced-motion: reduce) { .dtf { position: static; height: auto; min-height: 0; } .dtf-stage { height: 78vh; } .dtf-floor.sketch img { opacity: 0; transition: none; } .floor-hold { display: none; } }

/* Material marquee (walnut strip) */
.marquee { background: var(--text); color: #fff; overflow: hidden; padding: 20px 0; }
.marquee-track { display: inline-flex; white-space: nowrap; will-change: transform; animation: marquee 32s linear infinite; }
.marquee:hover .marquee-track { animation-play-state: paused; }
.marquee-track span { font-family: var(--font-display); font-style: italic; font-size: 1.5rem; padding: 0 1.5rem; display: inline-flex; align-items: center; gap: 3rem; }
.marquee-track span::after { content: "✦"; color: rgba(255,255,255,.6); font-style: normal; font-size: 1rem; }
@keyframes marquee { to { transform: translateX(-50%); } }

/* Sections */
section { padding: clamp(64px, 9vw, 116px) 0; }
.section-head { max-width: 64ch; margin-bottom: 3.4rem; }
.section-head.center { margin-left: auto; margin-right: auto; }

/* Cards grid */
.grid { display: grid; gap: 22px; }
.grid-5 { grid-template-columns: repeat(5, 1fr); }
.grid-3 { grid-template-columns: repeat(3, 1fr); }
.card { background: transparent; border: none; border-radius: 0; overflow: visible; box-shadow: none; display: flex; flex-direction: column; transition: transform .35s var(--ease), filter .35s var(--ease); filter: drop-shadow(0 3px 8px rgba(70,52,38,.07)) drop-shadow(0 20px 40px rgba(70,52,38,.10)); }
.card:hover { filter: drop-shadow(0 6px 14px rgba(70,52,38,.1)) drop-shadow(0 30px 55px rgba(70,52,38,.16)); text-decoration: none; }
.card:hover .duo img { transform: scale(1.06); }
.card .thumb-duo { aspect-ratio: 4/3.4; border-radius: var(--radius) var(--radius) 0 0; }
.card .body { padding: 24px 24px 28px; display: flex; flex-direction: column; gap: .5rem; flex: 1; background: var(--surface); border-radius: 0 0 var(--radius) var(--radius); }
.card h3 { margin: 0; font-size: 1.4rem; }
.card p { margin: 0; color: var(--text-dim); font-size: .96rem; }
.card .more { margin-top: auto; padding-top: 1rem; color: var(--wood-ink); font-weight: 700; font-size: .82rem; letter-spacing: .08em; text-transform: uppercase; display: inline-flex; align-items: center; gap: .5em; transition: gap .25s var(--ease); }
.card:hover .more { gap: .9em; }
.chevron { width: 7px; height: 7px; border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: rotate(-45deg); display: inline-block; }

/* Feature split */
.split { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(32px, 5vw, 76px); align-items: center; }
.split .media-wrap { position: relative; }
.split .media-duo { aspect-ratio: 4/4.6; width: 100%; border: 9px solid var(--surface); box-shadow: var(--shadow-lg); border-radius: var(--arch); }
.split.reverse .text { order: 2; }
.split .float-card { position: absolute; bottom: 7%; right: -7%; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-sm); box-shadow: var(--shadow-lg); padding: 18px 20px; max-width: 220px; }
.split .float-card .k { font-family: var(--font-display); font-size: 2rem; color: var(--wood-ink); line-height: 1; }
.split .float-card .t { font-size: .86rem; color: var(--text-dim); margin-top: 4px; }
.tagline-row { margin-top: 1.6rem; display: flex; flex-wrap: wrap; gap: 10px; }

/* Meet-the-designer portraits - same grain+halftone duotone as the lander
   photos, colorize on hover. Arched top draws the eye up the figure. */
.designers { display: grid; grid-template-columns: 1fr 1fr; gap: 22px; }
.person { position: relative; overflow: hidden; isolation: isolate; aspect-ratio: 3/4; border: 9px solid var(--surface); border-radius: var(--arch); box-shadow: var(--shadow-lg); background: var(--duo-base); }
.person img { width: 100%; height: 100%; object-fit: cover; display: block; filter: grayscale(.92) sepia(.45) contrast(1.05) brightness(.97); transition: filter .7s var(--ease); }
.person::after { content: ""; position: absolute; inset: 0; z-index: 1; pointer-events: none; background: var(--duo); mix-blend-mode: color; opacity: .6; transition: opacity .7s var(--ease); }
/* same grain + halftone screen as the lander .duo photos */
.person::before {
  content: ""; position: absolute; inset: 0; z-index: 2; pointer-events: none; mix-blend-mode: multiply; opacity: .5; transition: opacity .7s var(--ease);
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.82' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E"),
    radial-gradient(circle at center, rgba(60,10,8,.45) 0.5px, transparent 0.9px);
  background-size: 200px 200px, 3.5px 3.5px;
}
.person:hover img { filter: grayscale(0) sepia(0) contrast(1.02); }
.person:hover::after { opacity: 0; }
.person:hover::before { opacity: .14; }
.person figcaption { position: absolute; left: 0; right: 0; bottom: 0; z-index: 3; padding: 30px 20px 16px; color: #fff; background: linear-gradient(transparent, rgba(40,28,18,.82)); }
.person figcaption b { display: block; font-family: var(--font-display); font-weight: 600; font-size: 1.18rem; }
.person figcaption span { font-size: .78rem; letter-spacing: .1em; text-transform: uppercase; opacity: .9; }

/* Manifesto / pull quote */
.manifesto { background: var(--band-2); position: relative; overflow: hidden; }
.manifesto .mark { font-family: var(--font-display); font-size: 12rem; line-height: .6; color: var(--wood); opacity: .2; position: absolute; left: 4%; top: 8%; }
.manifesto .inner { max-width: 24ch; margin: 0 auto; text-align: center; position: relative; z-index: 1; }
.manifesto blockquote { font-family: var(--font-display); font-weight: 400; font-size: clamp(1.8rem, 3.6vw, 3rem); line-height: 1.18; letter-spacing: -.01em; margin: 0; }
.manifesto blockquote em { color: var(--accent); font-style: italic; }
.manifesto .by { margin-top: 1.8rem; font-size: .9rem; letter-spacing: .14em; text-transform: uppercase; color: var(--text-dim); }

/* Stats */
.stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 22px; }
.stat { text-align: center; padding: 40px 18px; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: var(--shadow); }
.stat .num { font-family: var(--font-display); font-weight: 500; font-size: 3rem; color: var(--wood-ink); line-height: 1; letter-spacing: -.02em; }
.stat .lbl { color: var(--text-dim); font-size: .9rem; margin-top: .8rem; }

/* Bands */
.band { background: var(--band); }
.band-tan { background: var(--band-2); }

/* Feature list */
.features { display: grid; grid-template-columns: repeat(3,1fr); gap: 22px; }
.feature { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 36px 32px; box-shadow: var(--shadow); transition: transform .35s var(--ease), box-shadow .35s var(--ease); }
.feature:hover { transform: translateY(-5px); box-shadow: var(--shadow-lg); }
.feature .ico { width: 56px; height: 56px; border-radius: 14px; background: var(--accent-soft); color: var(--wood-ink); display: grid; place-items: center; margin-bottom: 20px; }
.feature .ico svg { width: 24px; height: 24px; }
.feature h3 { font-size: 1.3rem; margin-bottom: .4rem; }
.feature p { margin: 0; color: var(--text-dim); font-size: .96rem; }

/* Gallery */
.gallery { display: grid; grid-template-columns: repeat(4, 1fr); grid-auto-rows: clamp(150px, 17vw, 230px); gap: 16px; }
.gallery .photo.big { grid-column: span 2; grid-row: span 2; }

/* Brand strip */
/* Logos float directly on the section background - no tiles, no labels. */
.brand-grid { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 60px 32px; }
.brand-img { flex: 0 0 calc((100% - 100px) / 4); width: calc((100% - 100px) / 4); height: 52px; max-width: none; object-fit: contain; object-position: center; }
/* For single-color (white) logos delivered for dark backgrounds - render dark. */
.brand-img-dark { filter: brightness(0); }
/* Logos with a Roomvo catalog presence link to a brand-prefiltered catalog; display:contents keeps the img as the flex item so the grid math is untouched. */
.brand-link { display: contents; }
.brand-link .brand-img { transition: opacity .25s var(--ease); }
.brand-link:hover .brand-img { opacity: .6; }
/* Collapsed: show the first row, fade the second; the toggle expands to all. */
.brand-reveal { position: relative; overflow: hidden; max-height: 140px; transition: max-height .6s var(--ease); }
.brand-reveal.is-open { max-height: 1400px; }
.brand-reveal::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 82px; background: linear-gradient(transparent, var(--bg)); pointer-events: none; opacity: 1; transition: opacity .45s var(--ease); }
.brand-reveal.is-open::after { opacity: 0; }
.brand-toggle { border-color: transparent; }
.brand-toggle .chevron { transform: rotate(45deg); transition: transform .3s var(--ease); }
.brand-toggle[aria-expanded="true"] .chevron { transform: rotate(-135deg); }
.brand-note { margin-top: 1.5rem; font-size: .95rem; color: var(--text-dim); }
.brand-note a { color: var(--accent); font-weight: 600; }
.brand-note a:hover { color: var(--accent-ink); }
/* Text fallback for a brand with no logo asset - sized to sit level with the logos. */
.brand-txt { display: flex; align-items: center; justify-content: center; min-height: 50px; max-width: 90%; font-family: var(--font-display); font-weight: 600; font-size: 1.12rem; line-height: 1.12; color: var(--text); text-align: center; }

/* Reviews */
.quote { background: var(--surface); padding: 40px 34px 34px; border: 1px solid var(--border); border-radius: var(--radius); box-shadow: var(--shadow); display: flex; flex-direction: column; gap: 1.1rem; position: relative; overflow: hidden; }
.quote .qmark { position: absolute; top: -22px; right: 14px; font-family: var(--font-display); font-size: 8rem; color: var(--wood); opacity: .14; }
.quote .stars { color: var(--accent); letter-spacing: .18em; font-size: .9rem; }
.quote p { font-family: var(--font-display); font-weight: 400; font-size: 1.22rem; line-height: 1.45; color: var(--text); margin: 0; position: relative; z-index: 1; }
.quote .who { color: var(--text-dim); font-size: .92rem; margin: 0; }
.quote .who b { color: var(--text); }

/* CTA */
.cta-band { position: relative; overflow: hidden; background: linear-gradient(135deg, #4a3526 0%, #2f2118 100%); color: #fff; border-radius: var(--radius); padding: clamp(54px,8vw,92px) clamp(32px,6vw,72px); text-align: center; box-shadow: 0 22px 56px rgba(70,52,38,.2); }
.cta-band .grid-lines { position: absolute; inset: 0; opacity: .16; background-image: linear-gradient(#fff 1px, transparent 1px), linear-gradient(90deg, #fff 1px, transparent 1px); background-size: 48px 48px; mask-image: radial-gradient(circle at 50% 50%, #000, transparent 75%); -webkit-mask-image: radial-gradient(circle at 50% 50%, #000, transparent 75%); }
.cta-band > * { position: relative; z-index: 1; }
.cta-band .eyebrow { color: rgba(255,255,255,.92); }
.cta-band .eyebrow::before { background: rgba(255,255,255,.92); }
.cta-band h2 { color: #fff; }
.cta-band p { color: rgba(255,255,255,.94); max-width: 56ch; margin-left: auto; margin-right: auto; }

/* Footer */
/* No border-top: footer bg matches the CTA paper tone and the CTA grid bleeds
   down across this seam, so a divider line just reads as a stray line in the grid. */
.site-footer { background: var(--band); padding: 76px 0 32px; }
.footer-grid { display: grid; grid-template-columns: 1.6fr 1fr 1fr 1.1fr; gap: 40px; }
.footer-grid .logo { height: 58px; margin-bottom: 1rem; }
.footer-grid h4 { font-family: var(--font-body); font-size: .76rem; text-transform: uppercase; letter-spacing: .14em; color: var(--text-faint); margin-bottom: 1.1rem; }
.footer-grid ul { list-style: none; padding: 0; margin: 0; display: grid; gap: 10px; }
.footer-grid a { color: var(--text); font-size: .95rem; }
.footer-grid li.muted { color: var(--text-dim); font-size: .95rem; }
.footer-bottom { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 12px; margin-top: 56px; padding-top: 24px; border-top: 1px solid var(--border); color: var(--text-faint); font-size: .85rem; }
/* Mobile: tighten the footer (less scroll) + center a bigger brand block. */
@media (max-width: 640px) {
  .site-footer { padding: 40px 0 24px; }
  .footer-grid { gap: 26px; }
  .footer-grid > div:first-child { text-align: center; }
  .footer-grid > div:first-child .brand { display: inline-block; }
  /* Higher specificity than the header's .brand .logo mobile cap (height 40 /
     max-width 46vw), which also matches this logo and would otherwise shrink it. */
  .site-footer .brand .logo { height: 124px; max-width: 80vw; margin-bottom: .6rem; }
  .footer-grid > div:first-child p { margin-left: auto; margin-right: auto; }
  .footer-grid h4 { margin-bottom: .55rem; }
  .footer-grid ul { gap: 7px; }
  .footer-bottom { margin-top: 22px; padding-top: 16px; }
}

/* Tags */
.tag { display: inline-block; padding: .45em 1em; border-radius: 8px; border: 1.5px solid var(--wood-soft); color: var(--wood-ink); background: transparent; font-size: .8rem; font-weight: 600; }

/* Responsive */
@media (max-width: 1000px) {
  .hero-grid { grid-template-columns: 1fr; }
  .collage { min-height: 480px; max-width: 540px; margin: 0 auto; }
  .grid-5 { grid-template-columns: repeat(3, 1fr); }
  .features, .grid-3, .stats { grid-template-columns: repeat(2, 1fr); }
  .brand-img { flex-basis: calc((100% - 64px) / 3); width: calc((100% - 64px) / 3); }
  .split { grid-template-columns: 1fr; }
  .split.reverse .text { order: 0; }
  .split .float-card { right: 4%; }
  .footer-grid { grid-template-columns: 1fr 1fr; }
  .wrap { padding: 0 28px; }
}
/* Tablet: collapse the recent-work gallery off its 4-col desktop grid early
   (it otherwise stays 4-up all the way down to phones). */
@media (max-width: 860px) {
  .gallery { grid-template-columns: repeat(2, 1fr); }
  .gallery .photo.big { grid-row: span 2; }
}

@media (max-width: 640px) {
  body { font-size: 16px; }
  :root { --wrap-pad: 20px; }
  .wrap { padding: 0 var(--wrap-pad); }

  /* Compact header + full-bleed dropdown anchored to the header's bottom edge.
     Absolute (not fixed) so it tracks the bar in every scroll state instead of
     a hardcoded top offset; .site-header is sticky => the positioning context. */
  .nav { height: 68px; }
  .brand .logo { height: 40px; max-width: 46vw; object-fit: contain; }
  .nav-toggle { display: flex; }
  .nav-right .btn-primary { display: none; }   /* primary CTA moves into the menu */
  .nav-links {
    position: absolute; top: 100%; left: 0; right: 0;
    flex-direction: column; align-items: stretch; background: var(--bg);
    border-bottom: 1px solid var(--border);
    box-shadow: 0 24px 34px -20px rgba(28, 27, 25, .28);
    padding: 6px 20px 18px; gap: 0; display: none;
  }
  .nav-links.open { display: flex; }
  .nav-links li { width: 100%; }
  .nav-links a {
    display: block; width: 100%; text-align: left;
    padding: .95em .3em; font-size: 1.06rem; border-radius: 0;
    border-bottom: 1px solid var(--border);
  }
  /* Desktop active style is an inset bottom box-shadow tuned for slim links -
     at mobile padding it renders as a strikethrough on the next item. Replace
     with a red left bar. */
  .nav-links a.active {
    box-shadow: none;
    border-left: 3px solid var(--accent); padding-left: 12px;
  }
  .nav-links a:hover { background: none; }
  .nav-cta { display: block; margin-top: 16px; }
  .nav-links .nav-cta a {
    justify-content: center; text-align: center; padding: .95em 1.6em;
    background: var(--accent); color: #fff; border-bottom: none;
    border-radius: 10px; font-weight: 600;
  }

  .util-inner { min-height: 36px; font-size: .92em; gap: 10px; }
  .util-contact .sep, .util-contact > span:last-child { display: none; }

  .grid-5, .grid-3, .features, .footer-grid { grid-template-columns: 1fr; }
  .brand-img { flex-basis: calc((100% - 40px) / 2); width: calc((100% - 40px) / 2); }
  /* Collapsed: show 3 full rows + a fading peek of the 4th (2-up, ~44px row pitch). */
  .brand-grid { gap: 44px 32px; }
  .brand-reveal { max-height: 320px; }
  /* minmax(0,1fr), not 1fr: the big stat numbers were forcing the columns wider
     than the container (16px of horizontal page overflow). */
  .stats { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
  .stat { padding: 28px 12px; }
  .stat .num { font-size: 2.3rem; }
  .stat .stars-num { font-size: 1.6rem; }
  .collage .frame.a, .collage .frame.b { width: 72%; }
  .collage .swatch-card { left: 0; }
  .split .float-card { position: static; max-width: none; margin-top: 16px; }

  /* Gallery: big tile full-width banner, the rest 2-up. */
  .gallery { grid-template-columns: repeat(2, 1fr); grid-auto-rows: clamp(128px, 36vw, 190px); gap: 12px; }
  .gallery .photo.big { grid-column: span 2; grid-row: span 1; }

  /* Pinned "design -> finished" floor: small-viewport units so the mobile URL
     bar showing/hiding doesn't jump the pin or cause overscroll. */
  .dtf { height: 100svh; min-height: 460px; }
  .dtf-stage { min-height: 460px; }
  .floor-hold { height: 56svh; }
  .dtf-content { padding: 0 22px; }
  .dtf-content p { font-size: 1.08rem; }

  /* Stack hero CTAs full-width for thumb taps. */
  .hero-cta { gap: 10px; flex-wrap: nowrap; }
  .hero-cta .btn { flex: 1 1 0; width: auto; justify-content: center; text-align: center; padding-inline: .7em; }
}

@media (max-width: 480px) {
  h1 { font-size: clamp(2.35rem, 9vw, 3rem); }
  :root { --wrap-pad: 16px; }
  .wrap { padding: 0 var(--wrap-pad); }
  .brand .logo { max-width: 52vw; }
  /* Show the address on mobile too; drop the hours to make room, keep tap-to-call. */
  .util-tag { font-size: .72rem; letter-spacing: .02em; }
  .util-inner { gap: 10px; }
  .util-contact > span { display: none; }
  .util-contact a { font-size: .78rem; white-space: nowrap; }
  /* Full-bleed gapless masonry (like the how-we-work collage): big photo 2x2,
     the four others fill around it. The whole .gallery is one <a> to the gallery
     page. */
  .gallery {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    grid-auto-rows: clamp(92px, 27vw, 140px);
    gap: 3px; margin-inline: calc(-1 * var(--wrap-pad));
    /* tiny white borders between tiles + along the top/bottom edges */
    background: #fff; padding-block: 3px;
  }
  .gallery .photo { grid-column: span 2; grid-row: span 1; border: none; border-radius: 0; box-shadow: none; }
  .gallery .photo.big { grid-column: span 2; grid-row: span 2; }
  /* Kill the per-photo parallax translate (data-parallax) - in a gapless grid it
     shifts each tile and breaks the alignment. */
  .gallery .photo { transform: none !important; }
  /* Drop the captions on mobile. */
  .gallery .photo .cap { display: none; }
  .trade-grid { gap: 10px; }
}

/* Hero (kept from prior) */
.hero { padding: clamp(20px, 2.4vw, 40px) 0 clamp(32px, 4vw, 60px); display: grid; align-items: center; min-height: min(68vh, 680px); }
/* Taller hero on big/tall monitors - content keeps its size and stays centered. */
@media (min-height: 1050px) { .hero { min-height: min(80vh, 1040px); } }
.hero-grid { display: grid; grid-template-columns: 1.02fr .98fr; gap: clamp(32px, 5vw, 72px); align-items: center; }
.hero-inner h1 { max-width: 16ch; font-size: clamp(2.4rem, 4vw, 3.5rem); }
.hero-inner .lede { font-size: clamp(1.12rem, 1.35vw, 1.3rem); max-width: 50ch; }
.hero-inner h1 .accent { color: var(--accent); font-style: italic; }
.hero-inner .lede { margin-bottom: 1.5rem; }
.hero-cta { display: flex; flex-wrap: wrap; gap: 14px; }
.hero-badges { margin-top: 1.4rem; }
.hero-badges span { font-family: var(--font-display); font-style: italic; font-weight: 500; font-size: 1.3rem; color: var(--text); }
.hero-badges b { font-weight: 500; }

/* ---- Mobile hero ----
   The base .hero-inner h1 clamp (floor 2.8rem) is far too big on phones, and
   it out-specifies the generic `h1` mobile rule, so the headline alone fills
   the first screen and shoves the image, lede, and primary CTA below the fold.
   This block targets .hero-inner h1 (equal specificity, later in source => it
   wins) and drops the forced 86vh so the hero sizes to its content. */
@media (max-width: 640px) {
  /* Clean text hero: drawings dropped, copy vertically centred in the viewport,
     left-justified, bigger headline. */
  .hero { min-height: calc(100svh - 104px); align-items: center; padding: 24px 0; }
  .hero-inner { text-align: left; }
  /* Hero CTAs are redundant on mobile - the sticky bottom bar carries Call +
     Free Estimate persistently. Drop them so the hero stays clean. */
  .hero-cta { display: none; }
  .hero-inner h1 { font-size: clamp(2.8rem, 13vw, 4rem); max-width: 15ch; margin-inline: 0; }
  .hero-inner .lede { font-size: 1.08rem; line-height: 1.5; margin: 0 0 1.5rem; }
  .hero-badges { margin-top: 1.5rem; }
  .hero-badges span { font-size: 1.12rem; }
}

.collage { position: relative; min-height: 540px; }
.collage .frame { position: absolute; overflow: hidden; box-shadow: var(--shadow-lg); border: 9px solid var(--surface); }
.collage .frame.a { width: 60%; aspect-ratio: 3/4.2; left: 2%; top: 10%; z-index: 2; border-radius: var(--radius); }
.collage .frame.b { width: 52%; aspect-ratio: 3/3.6; right: 0; top: 0; z-index: 3; border-radius: var(--radius); }
.collage .seal { position: absolute; right: 6%; bottom: 4%; z-index: 5; }
.collage .swatch-card { position: absolute; left: -4%; bottom: 6%; z-index: 4; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-sm); box-shadow: var(--shadow-lg); padding: 14px 16px; display: flex; align-items: center; gap: 12px; }
.swatch-card .chips { display: flex; }
.swatch-card .chips i { width: 26px; height: 38px; border-radius: 6px; display: block; margin-left: -8px; border: 2px solid var(--surface); box-shadow: 0 2px 6px rgba(0,0,0,.12); }
.swatch-card .lbl { font-size: .78rem; line-height: 1.25; }
.swatch-card .lbl b { display: block; font-family: var(--font-display); font-size: .98rem; }

/* ---- Process section: numbered steps + step stamp on the floating card ---- */
.steps { margin: 1.9rem 0 0; display: grid; gap: 1.25rem; }
.step { display: grid; grid-template-columns: auto 1fr; gap: 16px; align-items: start; }
.step .n { width: 42px; height: 42px; flex: none; border-radius: 50%; border: 1.5px solid var(--accent); color: var(--accent); display: grid; place-items: center; font-family: var(--font-display); font-weight: 600; font-size: 1.2rem; line-height: 1; }
.step h3 { font-size: 1.08rem; margin: 0 0 .3rem; }
.step p { margin: 0; color: var(--text-dim); font-size: .94rem; line-height: 1.55; }
.swatch-card .step-n { width: 40px; height: 40px; flex: none; border-radius: 50%; background: var(--wood-ink); color: #fff; display: grid; place-items: center; font-family: var(--font-display); font-weight: 600; font-size: 1.1rem; line-height: 1; }

/* ---- Category cards: show photos in full color (no duotone overlay) ---- */
.card .thumb-duo img { mix-blend-mode: normal; filter: none; }
.card .thumb-duo::after, .card .thumb-duo::before { display: none; }
.card .thumb-duo .vig { box-shadow: inset 0 0 50px rgba(40,28,18,.16); }

/* ---- Process collage: four overlapping photos (no card / no seal) ---- */
.proc-collage { min-height: 620px; }
/* One arch per collage: the big anchor photo carries it, supporting frames stay
   rectangular so the arch reads as a focal point instead of a repeating motif. */
.proc-collage .frame { border-radius: var(--radius); }
.proc-collage .frame.a { border-radius: var(--arch); }
.proc-collage .frame.a { width: 58%; aspect-ratio: 3/3.8; left: 0; top: 0; z-index: 2; }
.proc-collage .frame.d { width: 58%; aspect-ratio: 3/3.8; right: 0; bottom: 0; z-index: 1; }
/* large photos show in full color (drop the duotone treatment) */
.proc-collage .frame.a img, .proc-collage .frame.d img { mix-blend-mode: normal; filter: none; }
.proc-collage .frame.a::after, .proc-collage .frame.d::after,
.proc-collage .frame.a::before, .proc-collage .frame.d::before { display: none; }
.proc-collage .frame.a .vig, .proc-collage .frame.d .vig { box-shadow: inset 0 0 46px rgba(40,28,18,.14); }
.proc-collage .frame.b { width: 37%; aspect-ratio: 3/3.5; right: 3%; top: 7%; z-index: 4; }
.proc-collage .frame.c { width: 35%; aspect-ratio: 3/3.4; left: 5%; bottom: 6%; z-index: 3; }
/* How-we-work collage is mirrored: arched install photo + Greg on the right,
   Amy + showroom on the left. */
#how-we-work .proc-collage .frame.a { left: auto; right: 0; }
#how-we-work .proc-collage .frame.d { right: auto; left: 0; }
#how-we-work .proc-collage .frame.b { right: auto; left: 3%; }
#how-we-work .proc-collage .frame.c { left: auto; right: 5%; }
@media (max-width: 1000px) {
  .proc-collage { min-height: 560px; max-width: 560px; }
}
@media (max-width: 640px) {
  .proc-collage { min-height: 500px; }
  .proc-collage .frame.a, .proc-collage .frame.d { width: 56%; }
  .proc-collage .frame.b { width: 44%; }
  .proc-collage .frame.c { width: 42%; }
}

/* ---- Process collage: name + title captions on the team frames ---- */
.frame-cap { position: absolute; left: 0; right: 0; bottom: 0; z-index: 4; padding: 30px 16px 13px; color: #fff; text-align: left; background: linear-gradient(transparent, rgba(40,28,18,.86)); }
.frame-cap b { display: block; font-family: var(--font-display); font-weight: 600; font-size: 1.04rem; line-height: 1.15; }
.frame-cap i { display: block; margin-top: 2px; font-style: normal; font-size: .68rem; letter-spacing: .12em; text-transform: uppercase; opacity: .9; }

/* Builders & Trade sits on the same warm paper tone as the CTA below it.
   Extra bottom padding gives the CTA grid (which bleeds ~150px up into this
   section and fades) room so it doesn't crowd the trade cards. */
#trade { background: var(--paper); padding-bottom: clamp(100px, 12vw, 160px); }
/* Builders & Trade: 2x2 photo gallery (right of the copy) with the What-we-carry
   treatment - white frame, duotone, hover reveals full color + scale, label inside. */
.trade-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.trade-grid .t-tile { position: relative; display: block; overflow: hidden; isolation: isolate; aspect-ratio: 1/1; border: 7px solid var(--surface); border-radius: var(--radius-sm); box-shadow: var(--shadow); }
/* Thinner white frame on mobile (matches the tighter gallery treatment); reverts
   to the standard 7px photo frame on desktop. */
@media (max-width: 640px) { .trade-grid .t-tile { border-width: 3px; } }
/* Pencil drawings (.duo.sketch), shown static - no sketch-group on the
   container so they never crossfade to photo; no hover, no animation. */
.trade-grid .t-tile img { transition: none; }
.t-cap { position: absolute; left: 0; right: 0; bottom: 0; z-index: 4; padding: 26px 16px 13px; color: #fff; background: linear-gradient(transparent, rgba(20,10,4,.74)); font-family: var(--font-display); font-weight: 600; font-size: 1.05rem; line-height: 1.15; }
.t-cap small { display: block; font-family: var(--font-body); font-weight: 500; font-size: .76rem; opacity: .9; margin-top: 3px; }

/* ---- CTA grid paper: bleed the grid into the sections above/below and fade out ---- */
/* z-index:2 lifts it above .over-floor (z-index:1) so the ::before grid can bleed
   UP into the trade section and fade there - otherwise the over-floor stacking
   context covers the upward bleed and the top fade disappears. */
.cta-paper { overflow: visible; position: relative; z-index: 2; }
.cta-paper::before {
  top: -150px; bottom: -150px;
  -webkit-mask-image: linear-gradient(to bottom, transparent 0%, #000 26%, #000 74%, transparent 100%);
  mask-image: linear-gradient(to bottom, transparent 0%, #000 26%, #000 74%, transparent 100%);
}

/* ---- Hero collage: three overlapping photos ---- */
.hero-collage { min-height: 560px; }
.hero-collage .frame { border-radius: var(--radius); }
.hero-collage .frame.b { border-radius: var(--arch); }
/* Shower frame: arched top, tighter radius than the table's full arch */
.hero-collage .frame.a { border-radius: 180px 180px var(--radius) var(--radius); }
.hero-collage .frame.a { width: 58%; aspect-ratio: 3/4; left: 0; top: 6%; z-index: 2; }
.hero-collage .frame.b { width: 50%; aspect-ratio: 3/3.5; right: 0; top: 0; z-index: 3; }
.hero-collage .frame.c { width: 48%; aspect-ratio: 3/3.3; left: 31%; bottom: 0; z-index: 4; }
@media (max-width: 1000px) { .hero-collage { min-height: 520px; max-width: 560px; } }
@media (max-width: 640px) {
  .hero-collage { min-height: 450px; }
  .hero-collage .frame.a { width: 64%; }
  .hero-collage .frame.b { width: 54%; }
  .hero-collage .frame.c { width: 52%; }
}

/* ---- Hero collage: pencil sketch -> real photo crossfade on hover ----
   (frames carry .duo.sketch; the .duo.sketch rules above own the look) ---- */
.hero-collage .frame img { transition: opacity .6s var(--ease); }

/* ---- Hero headline: highlighter-marker swipe on "installed" ----
   line-height:1 makes the inline-block box one em tall so the band can be
   anchored to the baseline reliably (instead of guessing against the line box). */
.hero-inner h1 .hl { position: relative; z-index: 0; display: inline-block; line-height: 1; }
.hero-inner h1 .hl::before {
  content: ""; position: absolute; z-index: -1;
  left: -0.06em; right: -0.06em; bottom: 0.12em; height: 0.56em;
  background: rgba(170,1,0,.26); border-radius: 2px;
  transform: scaleX(0); transform-origin: left;
  transition: transform .85s var(--ease) .55s;
}
.hero-inner h1.in .hl::before { transform: scaleX(1); }
@media (prefers-reduced-motion: reduce) { .hero-inner h1 .hl::before { transform: none; transition: none; } }

/* ---- Info-card grids (What we do + Builders & Trade) ---- */
.grid-4 { grid-template-columns: repeat(4, minmax(0,1fr)); }
.info-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 26px 24px; }
.info-card h3 { font-size: 1.16rem; margin: 0 0 .45rem; }
.info-card p { margin: 0; color: var(--text-dim); font-size: .94rem; line-height: 1.55; }
.info-card a { font-weight: 600; }
@media (max-width: 1000px) { .grid-4 { grid-template-columns: repeat(2, minmax(0,1fr)); } }
@media (max-width: 560px) { .grid-4 { grid-template-columns: 1fr; } }


/* ---- Category cards: editorial bento mosaic. One featured hero tile anchors
   the left; the other four form a 2x2 to the right. Name always on a soft
   bottom scrim; description fades in on hover. Pencil->photo crossfade kept. ---- */
.cat-mosaic {
  display: grid;
  grid-template-columns: repeat(6, minmax(0, 1fr));
  grid-template-rows: clamp(220px, 26vw, 360px) clamp(160px, 18vw, 240px);
  gap: 22px;
}
/* Two big tiles on the top row (3 cols each), three smaller below (2 cols each). */
.cat-mosaic > .cat-card:nth-child(1),
.cat-mosaic > .cat-card:nth-child(2) { grid-column: span 3; }
.cat-mosaic > .cat-card:nth-child(3),
.cat-mosaic > .cat-card:nth-child(4),
.cat-mosaic > .cat-card:nth-child(5) { grid-column: span 2; }
.cat-card { position: relative; display: block; overflow: hidden; isolation: isolate; border: 7px solid var(--surface); border-radius: var(--radius); box-shadow: var(--shadow); }
.cat-card:hover { text-decoration: none; }
.cat-photo { position: absolute; inset: 0; border-radius: 0; box-shadow: none; }
.cat-photo img { transition: opacity .6s var(--ease); }
/* bottom scrim for legible text over the photo */
.cat-card::before { content: ""; position: absolute; inset: 0; z-index: 2; pointer-events: none; background: linear-gradient(transparent 45%, rgba(18,9,4,.34) 72%, rgba(18,9,4,.72) 100%); transition: opacity .45s var(--ease); }
.cat-body { position: absolute; left: 0; right: 0; bottom: 0; z-index: 3; padding: 20px 22px; color: #fff; }
.cat-name { display: flex; align-items: center; gap: .55em; }
.cat-name b { font-family: var(--font-display); font-weight: 600; font-size: 1.32rem; line-height: 1.1; text-shadow: 0 1px 4px rgba(0,0,0,.55); }
.cat-mosaic > .cat-card:nth-child(1) .cat-name b,
.cat-mosaic > .cat-card:nth-child(2) .cat-name b { font-size: clamp(1.5rem, 2.1vw, 1.95rem); }
.cat-name .chevron { color: #fff; margin-left: 0; transition: margin-left .25s var(--ease); }
.cat-card:hover .cat-name .chevron { margin-left: 5px; }
.cat-desc { display: block; margin-top: .35rem; max-width: 34ch; font-size: .9rem; line-height: 1.45; color: rgba(255,255,255,.92); text-shadow: 0 1px 4px rgba(0,0,0,.6); }
/* On hover-capable devices keep the resting state to clean names only, then
   slide the description in. Touch devices show it persistently. */
@media (hover: hover) {
  .cat-desc { opacity: 0; max-height: 0; margin-top: 0; transform: translateY(6px); overflow: hidden; transition: opacity .4s var(--ease), transform .4s var(--ease), max-height .4s var(--ease), margin-top .4s var(--ease); }
  .cat-card:hover .cat-desc { opacity: 1; max-height: 8em; margin-top: .35rem; transform: none; }
}

@media (max-width: 860px) {
  /* big two go full-width, the three smaller share a row of three */
  .cat-mosaic { grid-template-rows: none; grid-auto-rows: clamp(170px, 30vw, 240px); }
  .cat-mosaic > .cat-card:nth-child(1),
  .cat-mosaic > .cat-card:nth-child(2) { grid-column: span 6; }
  .cat-mosaic > .cat-card:nth-child(n+3) { grid-column: span 2; }
}
/* Categories on phones = clean 2-up photo tiles, name only (Option B). Real
   colour photo with the floor in focus; the descriptions and the heavy intro
   paragraph are dropped to de-clutter. */
@media (max-width: 640px) {
  /* Trim the heavy intro - drop the paragraph, tighten the heading. */
  .band:has(.cat-mosaic) .section-head .lede { display: none; }
  .band:has(.cat-mosaic) .section-head h2 { margin-bottom: 1.5rem; }

  .cat-mosaic {
    display: grid; grid-template-columns: 1fr 1fr; grid-template-rows: none;
    grid-auto-rows: clamp(128px, 38vw, 176px); gap: 10px; margin-inline: 0;
  }
  .cat-mosaic > .cat-card { grid-column: auto !important; }
  .cat-mosaic > .cat-card:nth-child(5) { grid-column: 1 / -1; }   /* lone last tile spans full width */
  /* Rounded tiles, no border. */
  .cat-card {
    position: relative; display: block; overflow: hidden; height: auto;
    border: none; border-radius: 14px; box-shadow: 0 3px 12px rgba(70,52,38,.14);
  }
  /* Colour photo, floor in focus (not the pencil drawing). */
  .cat-photo {
    position: absolute; inset: 0; opacity: 1;
    background-size: cover; background-position: center 78%;
  }
  .cat-photo img { opacity: 0 !important; }
  /* Soft scrim under the name. */
  .cat-card::before {
    display: block; content: ""; position: absolute; inset: 0; z-index: 1;
    background: linear-gradient(transparent 45%, rgba(18,9,4,.6) 100%);
  }
  /* Name only - description dropped. */
  .cat-body {
    position: absolute; left: 0; right: 0; bottom: 0; z-index: 2;
    display: block; padding: 11px 14px; color: #fff; text-align: left;
  }
  .cat-name { display: flex; align-items: center; gap: .35em; }
  .cat-name b { color: #fff; text-shadow: 0 1px 4px rgba(0,0,0,.8); font-size: 1.04rem; line-height: 1.15; }
  .cat-mosaic > .cat-card:nth-child(1) .cat-name b,
  .cat-mosaic > .cat-card:nth-child(2) .cat-name b { font-size: 1.04rem; }
  .cat-name .chevron { display: inline-block; color: #fff; }
  .cat-desc { display: none !important; }
}

/* ---- "What we do": checklist + collage (How we work style) ---- */
.svc-list { list-style: none; margin: 1.9rem 0 0; padding: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 1.2rem 1.6rem; }
.svc-list li { position: relative; padding-left: 1.8em; }
.svc-list li::before { content: ""; position: absolute; left: .12em; top: .28em; width: .6em; height: .32em; border-left: 2.5px solid var(--accent); border-bottom: 2.5px solid var(--accent); transform: rotate(-45deg); }
.svc-list li b { display: block; font-family: var(--font-display); font-weight: 600; font-size: 1.02rem; color: var(--text); line-height: 1.2; }
.svc-list li span { display: block; margin-top: .15rem; font-size: .9rem; color: var(--text-dim); line-height: 1.45; }
/* The "What we do" cluster reuses the .proc-collage layout (same as How we work)
   on both desktop and mobile - see .proc-collage rules above. It lives in a
   .split.reverse, so scope tweaks there to avoid touching How-we-work. */
/* Send the big tile-install photo (frame a) to the back of the stack. */
.split.reverse .proc-collage .frame.a { z-index: 0; }
@media (max-width: 640px) {
  .svc-list { grid-template-columns: 1fr; }
  /* The tile-install shot's subject sits in the middle, so centre the crop
     instead of the floor-focused bottom crop the other big work photos use. */
  .over-floor .split.reverse .proc-collage.sketch-group .frame.a img { object-position: center center !important; }
}

/* ---- Stats: 5-star Google rating ---- */
.stat .stars-num { color: var(--accent); font-size: 2.1rem; letter-spacing: .06em; height: 3rem; display: flex; align-items: center; justify-content: center; }

/* =====================================================================
   MOBILE LAYOUT  (<=640px)  —  authoritative block, intentionally LAST
   ---------------------------------------------------------------------
   The hero/split responsive overrides up in the "/* Responsive *\/" block
   (~line 433) are defined BEFORE the component base rules (~line 515+), so
   at equal specificity the desktop rules won on source order and the phone
   layout never engaged (2-col hero, absolute-overlap collages collapsing to
   tiny shapes). Everything mobile is re-asserted here, after all base and
   per-frame rules, so it actually wins. Single column, full-width text, and
   each "collage" becomes a clean grid of REAL photos (hover-reveal is a
   desktop-only delight; on touch we show the actual photo, not the sketch).
   ===================================================================== */
@media (max-width: 640px) {
  /* Full-width single-column content everywhere. */
  .hero-grid { grid-template-columns: 1fr; gap: 18px; }
  /* "Family-owned since 1994" in brand red on mobile only. */
  .hero-badges span { color: var(--accent); }
  .split { grid-template-columns: 1fr; }
  /* Tighter, more deliberate vertical rhythm on a phone. */
  section { padding-block: clamp(44px, 11vw, 72px); }

  /* ---- Collages -> full-bleed seamless masonry -----------------------------
     The desktop absolute-overlap doesn't translate to a phone. Each collage is a
     full-bleed (edge-to-edge), GAPLESS 2-column masonry photo mosaic. Room/work
     photos render in full color; staff headshots keep the brand's pencil-sketch
     styling. No arches, no frames, no gaps. */
  .collage {
    position: static; min-height: 0 !important; max-width: none !important;
    display: block !important; column-count: 2; column-gap: 0;
    overflow: visible;
    margin: 20px 0 0 !important;
    margin-inline: calc(-1 * var(--wrap-pad)) !important;   /* full-bleed */
    padding: 0;
  }
  .collage .frame {
    display: block; width: 100% !important; margin: 0 !important;
    break-inside: avoid; -webkit-column-break-inside: avoid;
    position: relative !important; inset: auto !important; transform: none !important;
    z-index: auto !important;
    border: none !important; border-radius: 0 !important; box-shadow: none;
  }
  /* Room/work photos: reveal the real photo (no hover on touch). */
  .collage .frame.sketch img { opacity: 0; }
  /* Staff headshots keep the pencil sketch + stay portrait so faces aren't cropped. */
  .collage .frame.sketch-locked img { opacity: 1 !important; }
  .collage .frame.sketch-locked { aspect-ratio: 3 / 4 !important; }
  /* Stagger the (color) photo heights for the masonry rhythm. */
  .collage .frame:not(.sketch-locked):nth-child(4n+1) { aspect-ratio: 3 / 4 !important; }
  .collage .frame:not(.sketch-locked):nth-child(4n+2) { aspect-ratio: 4 / 3 !important; }
  .collage .frame:not(.sketch-locked):nth-child(4n+3) { aspect-ratio: 1 / 1 !important; }
  .collage .frame:not(.sketch-locked):nth-child(4n)   { aspect-ratio: 4 / 5 !important; }
  /* Drop desktop-only ornaments. */
  .collage .seal, .collage .swatch-card { display: none !important; }
}

/* =====================================================================
   PROC-COLLAGE (mobile) -> asymmetric 2x2: big work photos on the diagonal,
   small staff headshots on the other diagonal. Row 1: Install (big) + Greg
   (small). Row 2: Amy (small) + Showroom (big). Explicit grid placement, so the
   interleaved DOM order (Install a, Amy b, Greg c, Showroom d) doesn't matter.
   Overrides the generic .collage masonry above (equal specificity, later +
   !important wins).
   ===================================================================== */
@media (max-width: 640px) {
  .over-floor .proc-collage {
    display: grid !important;
    grid-template-columns: repeat(8, 1fr) !important;
    grid-template-rows: repeat(2, clamp(150px, 42vw, 200px)) !important;
    column-count: auto !important;
    /* tiny white borders between tiles + along the top/bottom edges */
    gap: 3px; background: #fff; padding-block: 3px;
  }
  /* High specificity (0,5,0) on purpose: the generic masonry aspect-ratio rules
     (`.collage .frame:not(.sketch-locked):nth-child()`) are (0,4,0); a tie there
     left Showroom on its 4/5 ratio, which grew the row. These decisively kill
     the aspect-ratio and force every cell to fill its (equal) grid track. */
  .over-floor .proc-collage.sketch-group .frame {
    width: 100% !important; height: 100% !important; min-height: 0 !important;
    aspect-ratio: auto !important; align-self: stretch !important;
    position: relative !important; inset: auto !important;
  }
  .over-floor .proc-collage.sketch-group .frame.a { grid-area: 1 / 1 / 2 / 6 !important; }  /* Install  - big   */
  .over-floor .proc-collage.sketch-group .frame.c { grid-area: 1 / 6 / 2 / 9 !important; }  /* Greg     - small */
  .over-floor .proc-collage.sketch-group .frame.b { grid-area: 2 / 1 / 3 / 4 !important; }  /* Amy      - small */
  .over-floor .proc-collage.sketch-group .frame.d { grid-area: 2 / 4 / 3 / 9 !important; }  /* Showroom - big   */
  .over-floor .proc-collage.sketch-group .frame img { width: 100% !important; height: 100% !important; object-fit: cover !important; }
  /* Big work photos: focus on the FLOOR at the bottom - crop the tops. */
  .over-floor .proc-collage.sketch-group .frame.a img,
  .over-floor .proc-collage.sketch-group .frame.d img { object-position: center bottom !important; }
  /* Full-bleed grids (how-we-work collage, recent-work gallery, category cards)
     are the last thing in their section - drop the section's bottom padding so
     each sits flush with the next section (no leftover background strip). */
  .over-floor section:has(.proc-collage),
  section:has(.gallery) { padding-bottom: 0 !important; }
}

/* =====================================================================
   STICKY MOBILE ACTION BAR  —  Call + Free Estimate, always one tap away.
   Best-practice for mobile local-services sites. Mobile only.
   ===================================================================== */
.mobile-bar { display: none; }
@media (max-width: 640px) {
  .mobile-bar {
    display: flex; gap: 10px;
    position: fixed; left: 0; right: 0; bottom: 0; z-index: 60;
    padding: 10px 14px calc(10px + env(safe-area-inset-bottom, 0px));
    background: color-mix(in srgb, var(--bg) 90%, transparent);
    backdrop-filter: blur(14px) saturate(1.1);
    border-top: 1px solid var(--border);
    box-shadow: 0 -8px 24px rgba(70, 52, 38, .12);
  }
  .mobile-bar .mb-btn {
    display: inline-flex; align-items: center; justify-content: center; gap: .5em;
    height: 52px; border-radius: var(--btn-radius);
    font-family: var(--font-body); font-weight: 700; font-size: 1rem;
    text-decoration: none; border: 1.5px solid transparent;
  }
  .mobile-bar .mb-btn:hover { text-decoration: none; }
  .mb-quote { flex: 1 1 auto; background: var(--accent); color: #fff; }
  .mb-call  { flex: 0 0 34%; background: var(--surface); color: var(--accent-ink); border-color: var(--accent); }
  .mb-call svg { width: 18px; height: 18px; }
  /* Reserve space so the fixed bar never covers the footer's last lines. */
  body { padding-bottom: calc(72px + env(safe-area-inset-bottom, 0px)); }
}

/* =====================================================================
   MOBILE HERO COLLAGE -> faint pencil drawings scattered behind the copy.
   The desktop 3-photo set returns on mobile as transparent pencil drawings
   spread across the hero (not clustered), each feathered with a radial mask
   so its edges dissolve into the grid paper. Layered behind the text.

   WIP / DEFERRED (see WebsiteUpdate CLAUDE.md): even with per-frame left/right/
   top/bottom positions below, the drawings still render stacked in the top-left
   on device - the absolute positioning isn't taking. Disabled for now via the
   display:none below; flip to `display: block` to resume debugging.
   ===================================================================== */
@media (max-width: 640px) {
  .hero { position: relative; }
  .hero-inner { position: relative; z-index: 1; }      /* copy sits above the drawings */
  .hero .hero-collage {
    display: none !important;   /* hero drawings dropped on mobile - clean centered text hero */
    position: absolute !important; inset: 0; z-index: 0;
    width: auto; height: auto;
    margin: 0 !important; min-height: 0 !important; max-width: none !important;
    column-count: auto; overflow: hidden;            /* clip the off-edge bleed -> no h-overflow */
    /* !important: the hero `.reveal` animation ends at opacity:1 (fill-mode both)
       and would otherwise override this; important beats animation in the cascade. */
    opacity: .5 !important; pointer-events: none;
  }
  .hero .hero-collage .frame {
    position: absolute !important; display: block;
    inset: auto; width: auto !important; height: auto !important; margin: 0 !important;
    border: none !important; box-shadow: none !important; border-radius: 0 !important;
    break-inside: auto;
    /* Feather every edge into the paper. */
    -webkit-mask-image: radial-gradient(ellipse 72% 72% at 50% 50%, #000 36%, transparent 80%);
    mask-image: radial-gradient(ellipse 72% 72% at 50% 50%, #000 36%, transparent 80%);
  }
  /* Two drawings along the bottom: island/kitchen (Plank c) left, shower (b)
     right; chairs (a) hidden. Copy is top-aligned, so these fill the lower area. */
  .hero .hero-collage .frame.c { width: 52% !important; aspect-ratio: 3 / 2 !important; left: 3% !important;  bottom: 17% !important; top: auto !important; right: auto !important; z-index: 2; }
  .hero .hero-collage .frame.b { width: 41% !important; aspect-ratio: 3 / 4 !important; right: 4% !important; bottom: 17% !important; top: auto !important; left: auto !important;  z-index: 3; }
  .hero .hero-collage .frame.a { display: none !important; }
  /* Island: feather the SIDES + TOP softly (keeps the sketch look) but hold the
     LVP FLOOR at the bottom nearly solid, with just a whisper of feather at the
     very bottom edge. Composite of a horizontal + a vertical gradient (intersect
     keeps a pixel only where BOTH are opaque). */
  .hero .hero-collage .frame.c {
    -webkit-mask-image:
      linear-gradient(to right, transparent 0%, #000 18%, #000 82%, transparent 100%),
      linear-gradient(to bottom, transparent 0%, #000 26%, #000 88%, transparent 100%);
    -webkit-mask-composite: source-in;
    mask-image:
      linear-gradient(to right, transparent 0%, #000 18%, #000 82%, transparent 100%),
      linear-gradient(to bottom, transparent 0%, #000 26%, #000 88%, transparent 100%);
    mask-composite: intersect;
  }
  /* Pencil DRAWING (not the photo). */
  .hero .hero-collage .frame.sketch img { opacity: 1 !important; }
  .hero .hero-collage .vig { display: none !important; }
}
