/* ============================================================
   Odor Removal Experts — "Fresh Air" (light)
   Clean white + mint · fresh leaf-green + brand blue
   Display: Fraunces · Body: Hanken Grotesk
   ============================================================ */

:root {
  --bg: #ffffff;
  --bg-2: #f1f7f3;        /* soft mint-tinted light band   */
  --bg-3: #e9f2ec;        /* footer / deeper light panel   */
  --surface: #ffffff;
  --ink: #16273c;         /* deep slate-navy text          */
  --muted: #5a6b78;
  --muted-2: #69767f;  /* >=4.5:1 on white (WCAG AA) for fineprint/hints */
  --line: #e2ebe5;
  --line-2: #eef3ef;

  --green: #54b145;       /* fresh leaf green (primary)    */
  --green-2: #6cc95b;
  --green-deep: #3f8534;   /* AA text on white: 4.55:1 */
  --green-deeper: #33702a; /* dark stop for green buttons (white text passes) */
  --green-soft: #e7f5e3;
  --blue: #2b54c6;        /* brand blue (secondary)        */
  --blue-deep: #1d3a96;
  --gold: #e0a93b;        /* review stars                  */

  --maxw: 1200px;
  --ease: cubic-bezier(.2, .8, .2, 1);
  --shadow-sm: 0 1px 2px rgba(22, 39, 60, .05), 0 1px 3px rgba(22, 39, 60, .05);
  --shadow-md: 0 16px 40px -20px rgba(22, 39, 60, .22);
  --shadow-lg: 0 34px 70px -34px rgba(22, 39, 60, .3);
  --shadow-green: 0 14px 34px -14px rgba(84, 177, 69, .5);

  --font-display: "Fraunces", "Iowan Old Style", Georgia, serif;
  --font-body: "Hanken Grotesk", system-ui, -apple-system, sans-serif;

  --r: 8px;
  --r-lg: 16px;
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }

body {
  margin: 0;
  font-family: var(--font-body);
  background: var(--bg);
  color: var(--ink);
  line-height: 1.65;
  font-size: 17px;
  -webkit-font-smoothing: antialiased;
  position: relative;
  overflow-x: hidden;
}

h1, h2, h3, h4 {
  font-family: var(--font-display); color: var(--ink);
  font-weight: 500; line-height: 1.06; letter-spacing: -.02em; margin: 0;
  font-optical-sizing: auto;
}
p { margin: 0; }
a { color: inherit; text-decoration: none; }
img { max-width: 100%; display: block; }

.container { width: 100%; max-width: var(--maxw); margin: 0 auto; padding: 0 26px; }

.skip-link { position: absolute; left: -999px; top: 0; z-index: 200; background: var(--green); color: #fff; padding: 10px 16px; }
.skip-link:focus { left: 0; }

/* ---------------- Kicker / eyebrow ---------------- */
.kicker, .eyebrow {
  display: inline-flex; align-items: center; gap: 10px;
  font-family: var(--font-body); font-weight: 700; font-size: 12px;
  letter-spacing: .18em; text-transform: uppercase; color: var(--green-deep);
}
.kicker::before, .eyebrow::before { content: ""; width: 24px; height: 2px; background: var(--green); border-radius: 2px; }
.eyebrow { margin-bottom: 20px; background: var(--green-soft); padding: 7px 14px; border-radius: 999px; }
.eyebrow::before { width: 18px; }

/* ---------------- Buttons ---------------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 9px;
  font-family: var(--font-body); font-weight: 700; font-size: 15px; letter-spacing: .01em;
  padding: 14px 26px; border: 1.5px solid transparent; border-radius: 999px; cursor: pointer;
  transition: transform .18s var(--ease), box-shadow .25s var(--ease), background .2s, color .2s, border-color .2s;
  white-space: nowrap; text-align: center;
}
.btn-lg { padding: 16px 30px; font-size: 16px; }
.btn-sm { padding: 9px 18px; font-size: 14px; }
.btn-block { width: 100%; }
.btn:active { transform: translateY(1px); }

.btn-primary { background: linear-gradient(135deg, var(--green-deep), var(--green-deeper)); color: #fff; border-color: var(--green-deep); box-shadow: var(--shadow-green); }
.btn-primary:hover { transform: translateY(-2px); box-shadow: 0 20px 44px -16px rgba(84, 177, 69, .65); }

.btn-ghost { background: #fff; color: var(--ink); border-color: var(--line); box-shadow: var(--shadow-sm); }
.btn-ghost:hover { border-color: var(--green); color: var(--green-deep); }

.btn-ghost-light { background: rgba(255, 255, 255, .12); color: #fff; border-color: rgba(255, 255, 255, .6); }
.btn-ghost-light:hover { background: #fff; color: var(--green-deep); }

/* ---------------- Header ---------------- */
.site-header { position: sticky; top: 0; z-index: 100; background: rgba(255, 255, 255, .86); backdrop-filter: blur(12px) saturate(1.1); border-bottom: 1px solid var(--line); }
.header-inner { display: flex; align-items: center; gap: 22px; height: 78px; }

.brand { display: flex; align-items: center; gap: 12px; }
.brand-logo { display: inline-flex; }
.brand-logo img { height: 48px; width: auto; display: block; }
.brand-mark { display: inline-flex; }
.brand-text { display: flex; flex-direction: column; line-height: 1; }
.brand-text strong { font-family: var(--font-display); font-size: 20px; font-weight: 600; color: var(--ink); }
.brand-text small { color: var(--green-deep); font-size: 10.5px; font-weight: 700; letter-spacing: .18em; text-transform: uppercase; margin-top: 5px; }

.header-nav { display: flex; gap: 26px; margin-left: auto; }
.header-nav a { position: relative; font-weight: 600; font-size: 15px; color: var(--ink); padding: 4px 0; }
.header-nav a::after { content: ""; position: absolute; left: 0; bottom: -2px; width: 0; height: 2px; background: var(--green); transition: width .25s var(--ease); }
.header-nav a:hover { color: var(--green-deep); }
.header-nav a:hover::after { width: 100%; }

.header-actions { display: flex; align-items: center; gap: 16px; }
.nav-toggle { display: none; flex-direction: column; justify-content: center; gap: 5px; width: 44px; height: 40px; padding: 0 11px; border: 1px solid var(--line); border-radius: 10px; background: #fff; cursor: pointer; }
.nav-toggle span { display: block; height: 2px; width: 100%; background: var(--ink); border-radius: 2px; transition: transform .2s var(--ease), opacity .2s var(--ease); }
.site-header.nav-open .nav-toggle span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.site-header.nav-open .nav-toggle span:nth-child(2) { opacity: 0; }
.site-header.nav-open .nav-toggle span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
.phone-link { display: inline-flex; align-items: center; gap: 7px; font-weight: 700; font-size: 15px; color: var(--ink); }
.phone-link svg { color: var(--green); }
.phone-link:hover { color: var(--green-deep); }

/* ---------------- Hero ---------------- */
.hero { position: relative; overflow: hidden; padding: 86px 0 96px; }
.hero-bg { position: absolute; inset: 0; z-index: 0; background-size: cover; background-position: center; }
.hero-bg::after {
  content: ""; position: absolute; inset: 0;
  background:
    linear-gradient(102deg, rgba(255,255,255,.98) 0%, rgba(255,255,255,.9) 44%, rgba(255,255,255,.4) 100%),
    radial-gradient(60% 80% at 86% 12%, rgba(84,177,69,.16), transparent 60%),
    radial-gradient(50% 60% at 4% 6%, rgba(43,84,198,.08), transparent 55%);
}
.hero .container { position: relative; z-index: 1; }
.hero-grid { display: grid; grid-template-columns: 1.08fr .92fr; gap: 54px; align-items: center; }

.hero h1 { font-size: clamp(44px, 6.4vw, 80px); font-weight: 500; letter-spacing: -.03em; line-height: 1.02; }
/* Green accent words, with an underline that draws itself in left-to-right.
   Uses an animated background-size gradient (not ::after) so it wraps per line. */
.hl {
  font-style: italic; font-weight: 500; color: var(--green-deep);
  background-image: linear-gradient(var(--green-2), var(--green-2));
  background-repeat: no-repeat;
  background-position: 0 96%;
  background-size: 0% clamp(2px, .07em, 5px);
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
  animation: hlDraw .85s .35s cubic-bezier(.65, 0, .35, 1) forwards;
}
@keyframes hlDraw { from { background-size: 0% clamp(2px, .07em, 5px); } to { background-size: 100% clamp(2px, .07em, 5px); } }
@media (prefers-reduced-motion: reduce) { .hl { animation: none; background-size: 100% .09em; } }
.lede { font-size: 19px; color: var(--muted); margin-top: 24px; max-width: 35em; line-height: 1.6; }

.hero-points { list-style: none; padding: 0; margin: 28px 0 0; display: grid; gap: 12px; }
.hero-points li { display: flex; align-items: center; gap: 12px; font-weight: 600; font-size: 16px; color: var(--ink); }
.hero-points svg { width: 22px; height: 22px; flex: 0 0 22px; color: #fff; background: var(--green); border-radius: 50%; padding: 4px; }

.hero-cta-row { display: flex; gap: 14px; margin-top: 32px; flex-wrap: wrap; }
.hero-cta-row.center { justify-content: center; }

/* ---------------- Quote form ---------------- */
.quote-card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); padding: 30px; box-shadow: var(--shadow-lg); position: relative; }
.quote-card::before {
  content: "FREE QUOTE"; position: absolute; top: -12px; left: 26px;
  background: linear-gradient(135deg, var(--green-2), var(--green)); color: #fff;
  font-family: var(--font-body); font-weight: 800; font-size: 10.5px; letter-spacing: .2em; padding: 5px 13px; border-radius: 999px;
}
/* Suppress the FREE QUOTE pill on non-quote cards (callback form, partner application). */
.quote-card.no-badge::before { content: none; }
.quote-head h2 { font-size: 27px; font-weight: 600; }
.quote-head p { color: var(--muted); margin-top: 6px; font-size: 15px; }
#quote-form { margin-top: 22px; display: grid; gap: 14px; }
.field { display: grid; gap: 6px; }
.field-row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.field label { font-size: 11.5px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }
.field input, .field select, .field textarea {
  width: 100%; padding: 12px 14px; font: inherit; font-size: 15px; color: var(--ink);
  border: 1.5px solid var(--line); border-radius: var(--r); background: #f8fbf9;
  transition: border-color .15s, box-shadow .15s, background .15s;
}
.field textarea { resize: vertical; }
.field input::placeholder, .field textarea::placeholder { color: var(--muted-2); }
.field input:focus, .field select:focus, .field textarea:focus { outline: none; border-color: var(--green-deep); background: #fff; box-shadow: 0 0 0 3px rgba(63,133,52,.35); }
.field input.invalid, .field select.invalid { border-color: #d9534f; box-shadow: 0 0 0 3px rgba(217,83,79,.13); }
.form-fineprint { text-align: center; color: var(--muted-2); font-size: 12.5px; margin-top: 4px; }
.form-status { text-align: center; font-weight: 600; font-size: 14.5px; margin-top: 2px; }
.form-status.ok { color: var(--green-deep); }
.form-status.err { color: #c0392b; }

/* ---------------- Trust bar ---------------- */
.trust { padding: 38px 0; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); background: var(--bg-2); }
.trust-badges { display: grid; grid-template-columns: repeat(4, 1fr); gap: 0; margin-bottom: 30px; }
.badge { text-align: center; padding: 8px 16px; display: grid; gap: 6px; border-right: 1px solid var(--line); }
.badge:last-child { border-right: 0; }
.badge-num { font-family: var(--font-display); font-weight: 600; font-size: 30px; color: var(--green-deep); letter-spacing: -.02em; }
.badge span:last-child { font-size: 11.5px; color: var(--muted); font-weight: 700; letter-spacing: .1em; text-transform: uppercase; }
.trust-label { text-align: center; color: var(--muted); font-size: 12px; font-weight: 700; letter-spacing: .16em; text-transform: uppercase; margin-bottom: 16px; }
.logos { display: flex; flex-wrap: wrap; gap: 12px 26px; justify-content: center; align-items: center; }
.logos span { font-family: var(--font-display); font-style: italic; font-weight: 500; font-size: 18.5px; color: var(--muted-2); white-space: nowrap; }

/* ---------------- Sections ---------------- */
.section { padding: 96px 0; }
.section-soft { background: var(--bg-2); }
.section-dark { background: var(--green-soft); position: relative; }
.section-head { max-width: 720px; margin: 0 auto 56px; text-align: center; }
.section-head .kicker { margin-bottom: 16px; }
.section-head h1, .section-head h2 { font-size: clamp(32px, 4.2vw, 48px); font-weight: 500; letter-spacing: -.025em; }
.section-head p { color: var(--muted); margin-top: 14px; font-size: 19px; }
.section-head-light h1, .section-head-light h2 { color: var(--ink); }
.section-head-light .kicker { color: var(--green-deep); }

.grid { display: grid; gap: 22px; }
.cards-6 { grid-template-columns: repeat(3, 1fr); }
.cards-3 { grid-template-columns: repeat(3, 1fr); }

/* Photo service cards */
.icon-card, .odor-card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); overflow: hidden; box-shadow: var(--shadow-sm); transition: transform .25s var(--ease), box-shadow .25s var(--ease), border-color .25s; }
.icon-card:hover, .odor-card:hover { transform: translateY(-5px); box-shadow: var(--shadow-md); border-color: #c9e4c2; }
.card-photo { position: relative; aspect-ratio: 16 / 10; overflow: hidden; }
.card-photo img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s var(--ease); }
.icon-card:hover .card-photo img { transform: scale(1.06); }
.card-body { padding: 24px 26px 26px; }
.icon-card .ic, .odor-card .ic { font-size: 28px; display: block; margin-bottom: 14px; }
.card h3 { font-size: 21px; font-weight: 600; margin-bottom: 8px; color: var(--ink); }
.card p { color: var(--muted); font-size: 15.5px; }
.odor-card { padding: 30px 28px; }
.card-link { display: inline-block; margin-top: 12px; font-weight: 700; font-size: 14px; color: var(--green-deep); letter-spacing: .02em; }
.icon-card:hover .card-link { color: var(--green-deep); }
a.icon-card { display: block; color: inherit; }

/* Process — green serif numerals */
.steps { grid-template-columns: repeat(3, 1fr); gap: 28px; }
.step { position: relative; padding: 32px 30px 28px; border-top: 2px solid var(--green); background: linear-gradient(180deg, var(--green-soft), transparent 70%); border-radius: 0 0 var(--r-lg) var(--r-lg); }
.step-num { font-family: var(--font-display); font-weight: 500; font-style: italic; font-size: 68px; line-height: 1; color: var(--green); letter-spacing: -.03em; display: block; margin-bottom: 12px; }
.step h3 { font-size: 23px; margin-bottom: 9px; }
.step p { color: var(--muted); font-size: 16px; }

/* Why */
.why-grid { gap: 28px 36px; }
.why-item { display: flex; gap: 15px; align-items: flex-start; padding-top: 22px; border-top: 1px solid #d4e8cd; }
.why-ic { flex: 0 0 28px; width: 28px; height: 28px; border-radius: 50%; background: var(--green); color: #fff; display: inline-flex; align-items: center; justify-content: center; font-weight: 800; font-size: 14px; margin-top: 3px; }
.why-item h3 { color: var(--ink); font-size: 19px; margin-bottom: 5px; }
.why-item p { color: var(--muted); font-size: 15.5px; }

/* Reviews */
.review { margin: 0; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); padding: 32px 30px; box-shadow: var(--shadow-sm); display: flex; flex-direction: column; transition: transform .25s var(--ease), box-shadow .25s var(--ease); }
.review:hover { transform: translateY(-4px); box-shadow: var(--shadow-md); }
.stars { color: var(--gold); font-size: 17px; letter-spacing: 3px; margin-bottom: 18px; }
.review blockquote { margin: 0 0 20px; font-family: var(--font-display); font-size: 20px; font-weight: 500; color: var(--ink); line-height: 1.44; flex: 1; }
.review figcaption { display: flex; flex-direction: column; border-top: 1px solid var(--line); padding-top: 15px; }
.review figcaption strong { font-weight: 700; font-size: 15px; color: var(--ink); }
.review figcaption span { color: var(--muted); font-size: 13px; }
.review-placeholder { grid-column: 1 / -1; background: var(--surface); border: 1px dashed var(--line); border-radius: var(--r-lg); padding: 30px 32px; box-shadow: var(--shadow-sm); text-align: center; }
.review-placeholder p { margin: 0 auto; color: var(--muted); font-size: 16px; line-height: 1.6; max-width: 72ch; }
.review-rating { text-align: center; margin: 0 auto 24px; color: var(--muted); font-size: 15px; }
.review-rating .stars { font-size: 16px; letter-spacing: 2px; margin: 0 8px 0 0; display: inline; vertical-align: middle; }
.review-rating strong { color: var(--ink); font-weight: 700; }
.review-rating a { color: #2b7cc6; font-weight: 600; text-decoration: none; }
.review-rating a:hover { text-decoration: underline; }

/* Final CTA — fresh green band */
.final-cta { background: linear-gradient(135deg, var(--green-deep), var(--green-deeper)); padding: 96px 0; text-align: center; position: relative; overflow: hidden; color: #fff; }
.final-cta::before { content: ""; position: absolute; inset: 0; background: radial-gradient(45% 90% at 50% -10%, rgba(255,255,255,.22), transparent 60%); pointer-events: none; }
.final-cta .container { position: relative; z-index: 1; }
.final-cta h2 { color: #fff; font-size: clamp(32px, 4.6vw, 54px); font-weight: 500; letter-spacing: -.025em; }
.final-cta p { color: rgba(255,255,255,.92); font-size: 20px; margin-top: 14px; margin-bottom: 10px; }

/* ---------------- Footer ---------------- */
.site-footer { background: var(--bg-3); color: var(--muted); padding: 70px 0 34px; border-top: 1px solid var(--line); }
.footer-grid { display: grid; grid-template-columns: 1.5fr repeat(5, 1fr); gap: 38px; }
.footer-brand p { margin-top: 14px; font-size: 14.5px; max-width: 30em; color: var(--muted); }
.brand-footer .brand-text strong { color: var(--ink); font-family: var(--font-display); font-size: 19px; }
.footer-col h4 { color: var(--green-deep); font-size: 11.5px; text-transform: uppercase; letter-spacing: .14em; margin-bottom: 15px; }
.footer-col a, .footer-col span { display: block; color: var(--muted); font-size: 15px; margin-bottom: 9px; transition: color .15s; overflow-wrap: anywhere; }
.footer-col a:hover { color: var(--green-deep); }
/* Keep the contact email on one line (no ugly mid-word break) and sized to fit the column. */
.footer-col a[href^="mailto:"] { white-space: nowrap; font-size: 13.5px; letter-spacing: -.01em; overflow-wrap: normal; }
.footer-bottom { display: flex; justify-content: space-between; gap: 12px; flex-wrap: wrap; border-top: 1px solid var(--line); margin-top: 44px; padding-top: 24px; font-size: 13px; color: var(--muted-2); }

/* Licensor partnership */
.footer-partner { display: flex; align-items: center; gap: 20px; flex-wrap: wrap; border-top: 1px solid var(--line); margin-top: 38px; padding-top: 26px; }
.partner-logo { flex: 0 0 auto; background: #fff; border: 1px solid var(--line); border-radius: 10px; padding: 8px 12px; display: inline-flex; box-shadow: var(--shadow-sm); }
.partner-logo img { height: 62px; width: auto; display: block; }
.footer-partner p { color: var(--muted); font-size: 14.5px; max-width: 46ch; line-height: 1.55; }
.footer-partner p a { color: var(--green-deep); font-weight: 700; }
.footer-partner p a:hover { color: var(--green-deep); }

/* ---------------- Mobile call bar ---------------- */
.mobile-call-bar { display: none; position: fixed; left: 0; right: 0; bottom: 0; z-index: 90; background: linear-gradient(135deg, var(--green-2), var(--green)); color: #fff; align-items: center; justify-content: center; gap: 9px; font-weight: 800; font-size: 16px; padding: 15px; }

/* ============================================================
   Breadcrumb · locations · neighborhoods · guides · article
   ============================================================ */
.breadcrumb { font-size: 13px; color: var(--muted); padding: 24px 0 0; }
.breadcrumb a { color: var(--green-deep); font-weight: 600; }
.breadcrumb a:hover { text-decoration: underline; }
.breadcrumb span { color: var(--muted-2); margin: 0 8px; }

.locations-grid { grid-template-columns: repeat(2, 1fr); gap: 24px; }
.location-card { display: flex; flex-direction: column; gap: 6px; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); padding: 34px; box-shadow: var(--shadow-sm); transition: transform .2s var(--ease), box-shadow .25s var(--ease); }
.location-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-md); }
.location-card h3 { font-size: 30px; font-weight: 600; }
.location-card .loc-area { color: var(--green-deep); font-weight: 700; font-size: 14px; }
.location-card .loc-hoods { color: var(--muted); font-size: 14px; margin-top: 6px; line-height: 1.55; }
.location-card .btn { align-self: flex-start; margin-top: 18px; }

.neighborhoods { display: flex; flex-wrap: wrap; gap: 10px; justify-content: center; margin-top: 8px; }
.chip { font-weight: 600; font-size: 14px; color: var(--ink); background: #fff; border: 1px solid var(--line); padding: 9px 17px; border-radius: 999px; transition: all .2s; }
.chip:hover { color: var(--green-deep); border-color: var(--green); background: var(--green-soft); }

.guides-grid { grid-template-columns: repeat(3, 1fr); gap: 22px; }
.guide-card { display: flex; flex-direction: column; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); padding: 28px; box-shadow: var(--shadow-sm); transition: transform .2s var(--ease), box-shadow .25s var(--ease), border-color .2s; }
.guide-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-md); border-color: #c9e4c2; }
.guide-card .gtag { font-size: 11px; letter-spacing: .12em; text-transform: uppercase; color: var(--green-deep); font-weight: 800; margin-bottom: 12px; }
.guide-card h3 { font-family: var(--font-display); font-size: 20px; font-weight: 600; line-height: 1.2; margin-bottom: 9px; }
.guide-card p { color: var(--muted); font-size: 14.5px; flex: 1; }
.guide-card .read { margin-top: 16px; font-weight: 700; color: var(--green-deep); font-size: 14px; }

.cat-nav { display: flex; flex-wrap: wrap; gap: 10px; justify-content: center; margin: -18px auto 44px; max-width: 900px; }
.cat-nav a { font-size: 13.5px; font-weight: 700; color: var(--muted); border: 1px solid var(--line); padding: 8px 16px; border-radius: 999px; transition: all .2s; background: #fff; }
.cat-nav a:hover { color: var(--green-deep); border-color: var(--green); background: var(--green-soft); }
.cat-section { margin-bottom: 54px; }
.cat-section h2 { font-size: 26px; font-weight: 600; margin-bottom: 22px; padding-bottom: 12px; border-bottom: 1px solid var(--line); display: flex; align-items: baseline; gap: 12px; }
.cat-section h2 .cat-count { font-family: var(--font-body); font-size: 13px; color: var(--green-deep); font-weight: 700; letter-spacing: .06em; }

.article { padding: 30px 0 96px; }
.article-wrap { max-width: 740px; margin: 0 auto; }
.article h1 { font-size: clamp(34px, 5vw, 52px); font-weight: 500; letter-spacing: -.03em; line-height: 1.05; margin: 16px 0 8px; }
.article .article-meta { color: var(--muted-2); font-size: 12.5px; letter-spacing: .06em; text-transform: uppercase; margin-bottom: 32px; }
.prose > p { font-size: 18px; color: var(--ink); margin-bottom: 20px; line-height: 1.7; }
/* In-body internal links: visible (brand green + underline) so readers can spot them. */
.prose a { color: var(--green-deep); text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 2px; font-weight: 600; }
.prose a:hover { color: var(--green-deep); }
.prose > p:first-of-type { font-size: 21px; line-height: 1.55; }
.prose h2 { font-size: 28px; font-weight: 600; letter-spacing: -.02em; margin: 46px 0 15px; }
.prose h3 { font-size: 21px; margin: 28px 0 10px; }
.prose ul { margin: 0 0 20px; padding-left: 22px; }
.prose li { margin-bottom: 10px; font-size: 17.5px; color: var(--ink); }
.prose ul li::marker { color: var(--green); }
.article-cta { margin-top: 46px; padding: 32px; border-radius: var(--r-lg); background: var(--green-soft); border: 1px solid #cfe8c8; display: flex; align-items: center; justify-content: space-between; gap: 22px; flex-wrap: wrap; }
.article-cta p { font-family: var(--font-display); font-weight: 500; font-size: 22px; line-height: 1.32; color: var(--ink); max-width: 22em; }
.faq { margin-top: 54px; }
.faq h2 { font-size: 28px; font-weight: 600; letter-spacing: -.02em; margin-bottom: 16px; }
.faq-item { border-top: 1px solid var(--line); padding: 20px 0; }
.faq-item h3 { font-size: 19px; margin-bottom: 7px; }
.faq-item p { color: var(--muted); font-size: 16.5px; line-height: 1.6; }
.author-box { margin-top: 46px; border: 1px solid var(--line); border-radius: var(--r-lg); padding: 24px 26px; background: var(--bg-2); display: flex; gap: 18px; align-items: flex-start; }
.author-box .ab-mark { flex: 0 0 46px; }
.author-box h3 { font-size: 18px; font-weight: 600; margin-bottom: 6px; }
.author-box p { color: var(--muted); font-size: 15px; line-height: 1.6; }
.author-box a { color: var(--green-deep); font-weight: 700; }
.related { margin-top: 54px; border-top: 1px solid var(--line); padding-top: 30px; }
.related h2 { font-size: 24px; font-weight: 600; margin-bottom: 18px; }
.related-list { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
.related-list a { display: block; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r); padding: 18px 20px; font-size: 15px; color: var(--ink); font-weight: 600; line-height: 1.35; box-shadow: var(--shadow-sm); transition: border-color .2s, transform .2s; }
.related-list a:hover { border-color: var(--green); transform: translateY(-2px); color: var(--green-deep); }

/* About */
.about-lead { max-width: 760px; margin: 0 auto; }
.about-lead p { font-size: 19px; color: var(--ink); line-height: 1.7; margin-bottom: 20px; }
.about-stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 22px; margin: 8px 0; }
.about-stat { text-align: center; border-top: 2px solid var(--green); padding-top: 18px; }
.about-stat b { display: block; font-family: var(--font-display); font-size: 34px; color: var(--green-deep); font-weight: 600; }
.about-stat span { color: var(--muted); font-size: 14px; }

/* ============================================================
   Motion
   ============================================================ */
@media (prefers-reduced-motion: no-preference) {
  .hero-copy > *, .quote-card { opacity: 0; transform: translateY(18px); animation: rise .8s var(--ease) forwards; }
  .hero-copy > *:nth-child(1) { animation-delay: .05s; }
  .hero-copy > *:nth-child(2) { animation-delay: .14s; }
  .hero-copy > *:nth-child(3) { animation-delay: .23s; }
  .hero-copy > *:nth-child(4) { animation-delay: .32s; }
  .hero-copy > *:nth-child(5) { animation-delay: .41s; }
  .quote-card { animation-delay: .28s; }
  @keyframes rise { to { opacity: 1; transform: translateY(0); } }

  .btn-primary { position: relative; overflow: hidden; }
  .btn-primary::after { content: ""; position: absolute; top: 0; left: -130%; width: 55%; height: 100%; background: linear-gradient(110deg, transparent, rgba(255,255,255,.5), transparent); transform: skewX(-20deg); transition: left .6s var(--ease); pointer-events: none; }
  .btn-primary:hover::after { left: 150%; }

  .reveal { opacity: 0; transform: translateY(22px); transition: opacity .7s var(--ease), transform .7s var(--ease); will-change: opacity, transform; }
  .reveal.is-in { opacity: 1; transform: none; }
}

/* ============================================================
   Responsive
   ============================================================ */
@media (max-width: 980px) {
  .hero-grid { grid-template-columns: 1fr; gap: 42px; }
  .footer-grid { grid-template-columns: 1fr 1fr; }
  .guides-grid { grid-template-columns: repeat(2, 1fr); }
  .related-list { grid-template-columns: 1fr; }
  /* mobile nav: hamburger toggles a dropdown panel anchored to the sticky header */
  .nav-toggle { display: inline-flex; }
  .header-nav {
    position: absolute; top: 100%; left: 0; right: 0;
    flex-direction: column; gap: 0; margin: 0; padding: 6px 0;
    background: #fff; border-bottom: 1px solid var(--line); box-shadow: var(--shadow-lg);
    transform: translateY(-6px); opacity: 0; pointer-events: none;
    transition: opacity .18s var(--ease), transform .18s var(--ease);
  }
  .site-header.nav-open .header-nav { transform: none; opacity: 1; pointer-events: auto; }
  .header-nav a { padding: 14px 26px; font-size: 16px; border-bottom: 1px solid var(--line); }
  .header-nav a:last-child { border-bottom: 0; }
  .header-nav a::after { display: none; }
}
@media (max-width: 760px) {
  body { font-size: 16px; }
  /* 16px inputs stop iOS from zooming in on focus */
  .field input, .field select, .field textarea, .side-search-form input { font-size: 16px; }
  .cards-6, .cards-3, .steps, .locations-grid, .guides-grid { grid-template-columns: 1fr; }
  .trust-badges { grid-template-columns: repeat(2, 1fr); }
  .badge:nth-child(2) { border-right: 0; }
  .badge { border-bottom: 1px solid var(--line); padding-bottom: 16px; }
  .section { padding: 64px 0; }
  .hero { padding: 50px 0 60px; }
  .header-actions .phone-link { display: none; }
  .footer-grid { grid-template-columns: 1fr; gap: 28px; }
  .footer-bottom { flex-direction: column; gap: 6px; }
  .mobile-call-bar { display: flex; }
  main { padding-bottom: 60px; }
  .article-cta { flex-direction: column; align-items: flex-start; }
  .about-stats { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 460px) {
  .field-row { grid-template-columns: 1fr; }
  .hero-cta-row .btn { width: 100%; }
}

@media (prefers-reduced-motion: reduce) {
  * { animation: none !important; transition: none !important; scroll-behavior: auto !important; }
  .reveal { opacity: 1 !important; transform: none !important; }
}

/* ============================================================
   Custom brand logo lockup (Odor Removal Experts)
   ============================================================ */
.brand { gap: 11px; }
.brand-icon { display: inline-flex; }
.brand-svg { display: block; filter: drop-shadow(0 4px 10px rgba(43, 124, 198, .22)); }
.brand-words { display: flex; flex-direction: column; line-height: 1; }
.brand-words strong { font-family: var(--font-display); font-weight: 600; font-size: 21px; color: var(--ink); letter-spacing: -.01em; }
.brand-words em { font-style: normal; font-family: var(--font-body); font-weight: 700; font-size: 10px; letter-spacing: .3em; text-transform: uppercase; color: var(--green-deep); margin-top: 4px; }
@media (max-width: 420px) { .brand-words strong { font-size: 18px; } .brand-svg { width: 40px; height: 40px; } }

/* guides hub: per-category "view all" link */
.cat-more { margin-top: 22px; }
.cat-more .btn { font-size: 14.5px; }

/* Guides search */
.guide-search-wrap { max-width: 580px; margin: 0 auto 32px; }
#guide-search { width: 100%; padding: 14px 20px; font: inherit; font-size: 16px; color: var(--ink); border: 1.5px solid var(--line); border-radius: 999px; background: #fff; box-shadow: var(--shadow-sm); }
#guide-search::placeholder { color: var(--muted-2); }
#guide-search:focus { outline: none; border-color: var(--green-deep); box-shadow: 0 0 0 3px rgba(63,133,52,.35); }
#guide-noresults { text-align: center; color: var(--muted); font-size: 17px; margin: 10px 0 40px; }

/* Mobile safety: prevent overflow, comfortable tap targets */
img, svg, video { max-width: 100%; }
@media (max-width: 760px) {
  .container { padding: 0 18px; }
  .hero h1 { font-size: clamp(34px, 9vw, 46px); }
  .quote-card { padding: 22px; }
  .header-inner { gap: 12px; }
  .header-cta { padding: 10px 16px; font-size: 14px; }
  .brand-words strong { font-size: 18px; }
  .brand-svg { width: 40px; height: 40px; }
  .cat-nav { gap: 8px; }
  .btn { white-space: normal; }
}
@media (max-width: 380px) {
  .brand-words em { letter-spacing: .2em; }
  .header-cta { padding: 9px 13px; }
}

/* ============================================================
   Mobile overflow hardening (100% responsive)
   ============================================================ */
html, body { max-width: 100%; overflow-x: hidden; }
*, *::before, *::after { min-width: 0; }            /* let flex/grid children shrink */
.hero-grid, .grid, .footer-grid, .header-inner { min-width: 0; }
.eyebrow { white-space: normal; flex-wrap: wrap; max-width: 100%; }
@media (max-width: 760px) {
  .lede, .section-head, .section-head p, .hero-copy, .about-lead { max-width: 100%; }
  .hero h1, .article h1, .section-head h1, .section-head h2 { overflow-wrap: break-word; }
  .logos { gap: 10px 22px; }
  .logos span { font-size: 17px; }
  .cat-section h2 { flex-wrap: wrap; font-size: 22px; }
}

/* Pledge band */
.pledge-band { background: var(--green-soft); }
.pledge { max-width: 840px; margin: 0 auto; text-align: center; }
.pledge .kicker { justify-content: center; margin-bottom: 14px; }
.pledge p { font-family: var(--font-display); font-weight: 500; font-size: clamp(20px, 2.6vw, 28px); line-height: 1.45; color: var(--ink); }
.pledge .pledge-note { font-family: var(--font-body); font-weight: 400; font-size: 15px; line-height: 1.5; color: var(--muted); margin-top: 16px; }
.footer-bottom a { color: var(--muted); text-decoration: none; }
.footer-bottom a:hover { color: var(--green-deep); }

/* ===== Instant estimate calculator ===== */
.calc { display: grid; grid-template-columns: 1.1fr 1fr; gap: 26px; align-items: start; max-width: 920px; margin: 0 auto; }
.calc-form { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); padding: 26px; box-shadow: var(--shadow-lg); display: grid; gap: 16px; }
.calc-types { border: 0; padding: 0; margin: 0; display: grid; gap: 8px; }
.calc-types legend { font-size: 11.5px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); margin-bottom: 8px; padding: 0; }
.calc-seg { position: relative; display: flex; }
.calc-seg input { position: absolute; opacity: 0; pointer-events: none; }
.calc-seg span { flex: 1; padding: 11px 14px; border: 1px solid var(--line); border-radius: 12px; font-weight: 600; font-size: 14.5px; color: var(--ink); cursor: pointer; transition: all .18s var(--ease); }
.calc-seg:hover span { border-color: var(--green); }
.calc-seg input:checked + span { background: linear-gradient(135deg, var(--green-deep), var(--green-deeper)); border-color: var(--green-deep); color: #fff; box-shadow: var(--shadow-green); }
.calc-seg input:focus-visible + span { outline: 2px solid var(--green-deep); outline-offset: 2px; }
.calc-note { font-size: 14px; color: var(--muted); line-height: 1.5; background: var(--green-soft); border-radius: 12px; padding: 12px 14px; }
.calc-out { align-self: stretch; }
.calc-hint { color: var(--muted); font-size: 15px; padding: 18px; border: 1px dashed var(--line); border-radius: var(--r-lg); }
.calc-result { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); padding: 22px; box-shadow: var(--shadow-lg); }
.calc-row { display: flex; justify-content: space-between; gap: 14px; padding: 9px 0; border-bottom: 1px solid var(--line); font-size: 15px; }
.calc-row span { color: var(--muted); }
.calc-row b { color: var(--ink); white-space: nowrap; }
.calc-total { border-bottom: 0; margin-top: 6px; padding-top: 14px; font-size: 18px; }
.calc-total span { color: var(--ink); font-weight: 700; }
.calc-total b { color: var(--green-deep); font-size: 22px; font-weight: 700; }
.calc-refund { font-size: 13px; color: var(--green-deep); margin: 10px 0 0; }
.calc-result .btn { margin-top: 16px; }
.calc-fine { font-size: 12.5px; color: var(--muted-2); text-align: center; margin-top: 10px; }
.calc-disclaimer { max-width: 760px; margin: 22px auto 0; text-align: center; font-size: 13px; color: var(--muted-2); line-height: 1.55; }
@media (max-width: 760px) { .calc { grid-template-columns: 1fr; } }
/* The [hidden] attribute must win over component display rules (e.g. .field{display:grid}),
   otherwise toggled groups like square-footage stay visible in vehicle mode. */
[hidden] { display: none !important; }

/* Instant estimate widget in the hero quote card */
.estimate { display: grid; gap: 14px; }
#quote-inputs, #quote-view { display: grid; gap: 14px; }
#calc-go { margin-top: 6px; }
.estimate-note { font-size: 13px; color: var(--muted); background: var(--green-soft); border-radius: 10px; padding: 11px 13px; line-height: 1.45; margin: -2px 0 0; }
.estimate-result { border: 1px solid var(--line); border-radius: 12px; padding: 12px 15px; background: #fafbfa; }
.er-line { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; font-size: 14px; padding: 5px 0; color: var(--muted); }
.er-line b { color: var(--ink); font-weight: 600; white-space: nowrap; }
.er-total { border-top: 1px solid var(--line); margin-top: 4px; padding-top: 10px; }
.er-total span { color: var(--ink); font-weight: 700; font-size: 15px; }
.er-total b { color: var(--green-deep); font-size: 21px; font-weight: 700; }
.er-note { margin: 8px 0 0; font-size: 12.5px; color: var(--muted); line-height: 1.35; }
.er-msg { font-size: 12px; color: var(--muted-2); margin-top: 8px; line-height: 1.45; }
.quote-divider { display: flex; align-items: center; gap: 12px; margin: 22px 0 18px; color: var(--muted-2); font-size: 11px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; }
.quote-divider::before, .quote-divider::after { content: ""; flex: 1; height: 1px; background: var(--line); }
.lbl-hint { font-weight: 500; text-transform: none; letter-spacing: 0; color: var(--muted-2); font-size: 11px; margin-left: 5px; }
.optin { display: flex; align-items: flex-start; gap: 9px; font-size: 13px; color: var(--muted); line-height: 1.4; cursor: pointer; margin: 2px 0; }
.optin input { margin-top: 1px; width: 16px; height: 16px; flex: 0 0 16px; accent-color: var(--green); }
/* Honeypot: display:none so browser/password-manager autofill never touches it (off-screen
   positioning was getting autofilled, silently dropping real leads). Naive bots that fill every
   input regardless of CSS are still caught server-side. */
.hp-field { display: none !important; }
.quote-readout { background: var(--green-soft); border: 1px solid #cfe8c8; border-radius: 12px; padding: 16px 18px; }
.quote-kicker { display: block; font-size: 11px; font-weight: 700; letter-spacing: .09em; text-transform: uppercase; color: var(--green-deep); margin-bottom: 8px; }
.estimate-actions { display: grid; gap: 9px; margin-top: 16px; }
.link-btn { display: block; margin: 14px auto 0; background: none; border: 0; padding: 4px; color: var(--muted); font: inherit; font-size: 13px; font-weight: 600; text-decoration: underline; cursor: pointer; }
.link-btn:hover { color: var(--green-deep); }
#er-msg:not([hidden]) { color: #b4690e; font-weight: 600; }

/* ----- email-quote panel + sent confirmation (swap in-card, no layout jump) ----- */
.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; }
.email-panel { margin-top: 16px; animation: epfade .2s ease both; }
.email-panel .ep-head { margin: 0 0 4px; font-weight: 700; font-size: 15px; color: var(--ink); }
.email-panel .ep-sub { margin: 0 0 12px; font-size: 13.5px; line-height: 1.5; color: var(--muted); }
.email-panel .field { margin-bottom: 10px; }
.email-panel .optin { margin: 10px 0 14px; }
.email-panel .cf-turnstile { margin: 2px 0 10px; }
.email-panel .cf-turnstile:not([hidden]) { min-height: 65px; }
.ep-foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 10px; }
.ep-foot .link-btn { margin: 0; }
.ep-foot .form-fineprint { margin: 0; text-align: right; }
.email-done { margin-top: 16px; padding-bottom: 12px; text-align: center; animation: epfade .25s ease both; }
.estimate-actions { padding-bottom: 12px; }
.email-done .ed-check { width: 52px; height: 52px; margin: 4px auto 12px; border-radius: 50%; background: var(--green-soft); color: var(--green-deep); display: flex; align-items: center; justify-content: center; }
.email-done .ed-title { margin: 0 0 6px; font-family: var(--font-display); font-size: 21px; font-weight: 600; color: var(--ink); }
.email-done .ed-sub { margin: 0 auto 16px; max-width: 340px; font-size: 14px; line-height: 1.5; color: var(--muted); }
.email-done .btn + .btn { margin-top: 10px; }
@keyframes epfade { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } }

/* ===== Guide article layout with sidebar ===== */
.article-layout { display: grid; grid-template-columns: minmax(0, 1fr) 304px; gap: 46px; align-items: start; }
.article-layout .article-wrap { max-width: 760px; margin: 0; }
.article-side { position: sticky; top: 92px; display: grid; gap: 18px; }
.side-card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); padding: 20px; box-shadow: var(--shadow-sm); }
.side-card > h2 { font-size: 13px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: var(--muted); margin-bottom: 14px; }
.side-search-form { display: grid; gap: 10px; }
.side-search-form input { width: 100%; padding: 11px 13px; border: 1px solid var(--line); border-radius: 10px; font: inherit; font-size: 15px; background: #fff; color: var(--ink); }
.side-search-form input:focus { outline: none; border-color: var(--green-deep); box-shadow: 0 0 0 3px rgba(63,133,52,.35); }
.side-related-list { display: grid; gap: 11px; }
.side-related-list a { display: block; font-size: 14.5px; font-weight: 600; color: var(--ink); line-height: 1.35; padding-bottom: 11px; border-bottom: 1px solid var(--line); transition: color .18s var(--ease); }
.side-related-list a:last-child { border-bottom: 0; padding-bottom: 0; }
.side-related-list a:hover { color: var(--green-deep); }
.srl-tag { display: block; font-size: 10px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: var(--green-deep); margin-bottom: 3px; }
.side-all { display: inline-block; margin-top: 15px; font-size: 13.5px; font-weight: 700; color: var(--green-deep); }
.side-cta { background: var(--green-soft); border-color: #cfe8c8; text-align: center; }
.side-cta h3 { font-family: var(--font-display); font-size: 20px; font-weight: 600; margin-bottom: 6px; }
.side-cta p { font-size: 14px; color: var(--muted); margin-bottom: 14px; }
.side-call { display: inline-flex; align-items: center; gap: 6px; justify-content: center; margin-top: 12px; font-weight: 700; color: var(--green-deep); }
.side-call svg { width: 16px; height: 16px; }
@media (max-width: 920px) {
  .article-layout { grid-template-columns: 1fr; gap: 30px; }
  .article-layout .article-wrap { max-width: 740px; }
  .article-side { position: static; max-width: 740px; }
}

/* ============================================================
   /reviews — customer reviews, threaded with the team's reply
   The reply thread is the signature of this page: a review and
   our answer are one unit, joined by a connector, because
   answering every review is the visible half of the guarantee.
   ============================================================ */

.rv-hero {
  position: relative;
  padding: 34px 0 44px;
  overflow: hidden;
  background:
    radial-gradient(70ch 40ch at 18% -10%, var(--green-soft) 0%, rgba(231, 245, 227, 0) 62%),
    radial-gradient(60ch 34ch at 96% 8%, rgba(43, 84, 198, .07) 0%, rgba(43, 84, 198, 0) 60%);
}
/* The hero and the thread share ONE measure and one left edge: the opening quote is the first
   entry in the same column the conversation continues down. Without this the headline sits at the
   container edge while the centred thread floats off to the right, reading as two unrelated pages. */
.rv-col { max-width: 760px; margin-inline: auto; }
.rv-hero .kicker { display: inline-block; margin-bottom: 14px; }
.rv-hero-lede { color: var(--muted); font-size: 17px; max-width: 60ch; margin: 14px 0 0; }
.rv-hero-fallback { font-size: clamp(30px, 4.4vw, 46px); margin: 0; }

/* Featured review, set as the page's opening statement rather than a stat block.
   Quote mark is decorative and hidden from screen readers via aria-hidden in the markup. */
.rv-quote { position: relative; margin: 0; padding: 0; }
.rv-quote-mark {
  font-family: var(--font-display);
  font-size: clamp(80px, 11vw, 132px);
  line-height: .72;
  color: var(--green);
  opacity: .22;
  display: block;
  margin-bottom: -.28em;
}
.rv-quote blockquote {
  font-family: var(--font-display);
  font-size: clamp(26px, 3.6vw, 44px);
  line-height: 1.16;
  letter-spacing: -.015em;
  color: var(--ink);
  margin: 0;
  max-width: 22ch;
  text-wrap: balance;
}
/* "Read more" under the hero quote: a quiet text button, not a second CTA competing with the quote. */
.rv-more {
  display: inline-block;
  margin-top: 16px;
  padding: 0;
  border: 0;
  background: none;
  font: inherit;
  font-size: 15px;
  font-weight: 700;
  letter-spacing: .01em;
  color: var(--green);
  cursor: pointer;
  border-bottom: 1.5px solid transparent;
  transition: border-color .15s var(--ease);
}
.rv-more:hover { border-bottom-color: var(--green); }
.rv-more:focus-visible { outline: 2px solid var(--green-deep); outline-offset: 3px; border-radius: 2px; }
.rv-quote figcaption {
  margin-top: 22px;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px 14px;
  font-size: 15px;
  color: var(--muted);
}
.rv-quote figcaption strong { color: var(--ink); font-weight: 700; }
.rv-dot { width: 4px; height: 4px; border-radius: 50%; background: var(--line); flex: none; }

/* Honest-average chip. Only rendered when a real average exists. */
.rv-avg {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  margin-top: 26px;
  padding: 9px 16px 9px 12px;
  border: 1px solid var(--line);
  border-radius: 999px;
  background: var(--surface);
  box-shadow: var(--shadow-sm);
  font-size: 14.5px;
  color: var(--muted);
}
.rv-avg b { color: var(--ink); font-size: 16px; }
.rv-avg .stars { color: var(--gold); letter-spacing: 1px; }

.rv-section { padding-top: 6px; }
.rv-thread-wrap { display: grid; gap: 30px; }

/* One thread = the review + our reply, visually welded together. */
.rv-thread { position: relative; }
.rv-card {
  position: relative;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: 16px;
  padding: 26px 28px 24px;
  box-shadow: var(--shadow-sm);
}
.rv-card-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  margin-bottom: 12px;
}
.rv-stars { color: var(--gold); letter-spacing: 2px; font-size: 15px; }
/* Eyebrow carries the odor treated and the city: real information, not decoration. */
.rv-tag {
  font-size: 12.5px;
  font-weight: 700;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--green-deep);
  background: var(--green-soft);
  border-radius: 999px;
  padding: 5px 11px;
  white-space: nowrap;
}
/* The customer's words are the loudest thing on the page. Display face, same as the hero, so a
   review reads as a quotation rather than body copy. Our reply below is deliberately quieter. */
.rv-card > p {
  margin: 0;
  color: var(--ink);
  font-family: var(--font-display);
  font-size: clamp(19px, 2.1vw, 23px);
  line-height: 1.4;
  letter-spacing: -.012em;
  text-wrap: pretty;
}
.rv-who { margin-top: 16px; font-size: 14px; color: var(--muted-2); display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.rv-who strong { color: var(--ink); font-weight: 700; }

/* Our reply: a margin note, not an announcement. It lives inside the review card, indented under
   a rule, in small muted body text. An earlier pass gave it a filled green panel, which made the
   business shout over the customer it was answering. The rule alone carries the thread. */
.rv-reply {
  position: relative;
  margin: 20px 0 0;
  padding: 0 0 0 18px;
  border-left: 2px solid var(--green-soft);
}
.rv-reply-who {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 0 0 5px;
  font-size: 12.5px;
  font-weight: 700;
  letter-spacing: .07em;
  text-transform: uppercase;
  color: var(--muted-2);
}
.rv-reply-mark { width: 13px; height: 13px; flex: none; border-radius: 3px; background: linear-gradient(135deg, var(--green) 0%, var(--blue) 100%); }
.rv-reply p { margin: 0; color: var(--muted); font-size: 15px; line-height: 1.58; }

/* Empty state: an invitation, never a placeholder review. */
.rv-empty {
  text-align: center;
  padding: 46px 24px;
  border: 1px dashed var(--line);
  border-radius: 16px;
  background: var(--bg-2);
}
.rv-empty h2 { margin: 0 0 8px; font-size: 22px; }
.rv-empty p { margin: 0 auto; color: var(--muted); max-width: 46ch; }

/* Hydration is a content swap, so soften it. Staggered by --i in script.js. */
.rv-thread, .rv-hero-inner > * { animation: rvIn .5s var(--ease) both; animation-delay: calc(var(--i, 0) * 70ms); }
@keyframes rvIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }

@media (max-width: 640px) {
  .rv-thread-wrap { gap: 24px; }
  .rv-card { padding: 20px; border-radius: 14px; }
  .rv-card-top { flex-direction: column; align-items: flex-start; gap: 9px; }
  .rv-reply { padding-left: 14px; margin-top: 16px; }
  .rv-quote blockquote { max-width: none; }
}
@media (prefers-reduced-motion: reduce) {
  .rv-thread, .rv-hero-inner > * { animation: none; }
}

/* ============================================================
   Video shelf — YouTube Shorts from the curated playlist
   Shorts are 9:16, so these are PORTRAIT cards, not the 16:9
   embeds used everywhere else. A 16:9 frame pillarboxes a Short
   inside black bars and looks broken.
   Click-to-load facade: nothing is requested from YouTube until
   the visitor presses play, so the page costs nothing and sets
   no third-party cookies for people who never watch.
   ============================================================ */

.vshelf { position: relative; }
/* Horizontal scroller: 13 portrait cards in a grid would be a wall. A shelf shows 4-5 and
   invites a swipe, which is also how people expect Shorts to behave. */
.vshelf-track {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: minmax(190px, 1fr);
  gap: 16px;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  padding: 4px 0 14px;
  scrollbar-width: thin;
  -webkit-overflow-scrolling: touch;
}
.vshelf-track > * { scroll-snap-align: start; }
/* The grid variant, for /videos where the whole set is the point. */
.vgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 18px; }

.vcard {
  position: relative;
  margin: 0;
  border: 1px solid var(--line);
  border-radius: 14px;
  overflow: hidden;
  background: #0d1512;
  box-shadow: var(--shadow-sm);
  transition: transform .18s var(--ease), box-shadow .25s var(--ease);
}
.vcard:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); }
.vcard-btn {
  display: block;
  width: 100%;
  padding: 0;
  border: 0;
  background: none;
  cursor: pointer;
  position: relative;
  aspect-ratio: 9 / 16;
}
.vcard-btn img { width: 100%; height: 100%; object-fit: cover; display: block; }
/* Legibility scrim: the title sits over the frame, and a Short's first frame can be anything. */
.vcard-btn::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(0,0,0,0) 42%, rgba(0,0,0,.72) 100%);
}
.vcard-play {
  position: absolute;
  top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  width: 54px; height: 54px;
  border-radius: 50%;
  background: rgba(255,255,255,.94);
  display: grid;
  place-items: center;
  z-index: 2;
  transition: transform .18s var(--ease), background .18s;
  box-shadow: 0 6px 20px rgba(0,0,0,.35);
}
.vcard-play::before {
  content: "";
  width: 0; height: 0;
  margin-left: 4px;
  border-left: 17px solid var(--green-deep);
  border-top: 10px solid transparent;
  border-bottom: 10px solid transparent;
}
.vcard-btn:hover .vcard-play { transform: translate(-50%, -50%) scale(1.08); background: #fff; }
.vcard-btn:focus-visible { outline: 3px solid var(--green-deep); outline-offset: 2px; }
.vcard-title {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  z-index: 2;
  padding: 12px 13px;
  color: #fff;
  font-size: 13.5px;
  font-weight: 600;
  line-height: 1.35;
  text-align: left;
  text-shadow: 0 1px 3px rgba(0,0,0,.5);
}
/* Once played, the iframe replaces the facade in the same box. */
.vcard iframe { width: 100%; aspect-ratio: 9 / 16; border: 0; display: block; }

.vshelf-empty { color: var(--muted); font-size: 15px; margin: 0; }

@media (prefers-reduced-motion: reduce) {
  .vcard, .vcard-play, .vcard-btn:hover .vcard-play { transition: none; }
  .vcard:hover { transform: none; }
}

/* ============================================================
   Guide structured blocks: quick-answer, steps, callouts, lists
   Turn a wall of prose into a scannable, authoritative page.
   These also feed HowTo schema + featured snippets + AI answers.
   ============================================================ */

/* Quick-answer / TL;DR box at the top of a guide */
.guide-quick {
  background: var(--green-soft);
  border: 1px solid #d6ebcf;
  border-left: 4px solid var(--green);
  border-radius: 12px;
  padding: 18px 20px;
  margin: 6px 0 26px;
}
.guide-quick .gq-title {
  font-family: var(--font-body);
  font-size: 12px; font-weight: 800; letter-spacing: .12em; text-transform: uppercase;
  color: var(--green-deep); margin: 0 0 8px;
}
.guide-quick p { margin: 0 0 8px; color: var(--ink); font-size: 16px; line-height: 1.55; }
.guide-quick ul { margin: 8px 0 0; padding-left: 20px; }
.guide-quick li { margin: 5px 0; color: #2f4a34; }

/* Numbered how-to steps */
.guide-steps { counter-reset: step; list-style: none; padding: 0; margin: 8px 0 20px; }
.guide-steps > li {
  position: relative;
  counter-increment: step;
  padding: 4px 0 18px 52px;
  margin: 0;
  line-height: 1.62;
}
.guide-steps > li::before {
  content: counter(step);
  position: absolute; left: 0; top: 0;
  width: 34px; height: 34px;
  display: grid; place-items: center;
  background: linear-gradient(135deg, var(--green-2), var(--green));
  color: #fff; font-family: var(--font-display); font-weight: 600; font-size: 17px;
  border-radius: 50%;
  box-shadow: var(--shadow-green);
}
.guide-steps > li:not(:last-child)::after {
  content: ""; position: absolute; left: 16px; top: 38px; bottom: 4px;
  width: 2px; background: var(--line);
}
.guide-steps .gs-h { font-weight: 700; color: var(--ink); }

/* Plain list inside a guide */
.guide-list { margin: 8px 0 20px; padding-left: 22px; }
.guide-list li { margin: 7px 0; line-height: 1.6; }

/* Callout boxes: warn / tip / note */
.guide-callout {
  border-radius: 12px;
  padding: 15px 18px;
  margin: 8px 0 22px;
  border: 1px solid var(--line);
  border-left: 4px solid var(--muted);
  background: var(--bg-2);
}
.guide-callout .gc-title {
  font-family: var(--font-body);
  font-size: 12px; font-weight: 800; letter-spacing: .1em; text-transform: uppercase;
  margin: 0 0 6px;
}
.guide-callout p:not(.gc-title) { margin: 0 0 8px; line-height: 1.58; }
.guide-callout p:last-child { margin-bottom: 0; }
.guide-callout-warn { border-left-color: #d9822b; background: #fdf4ea; }
.guide-callout-warn .gc-title { color: #b5651d; }
.guide-callout-tip { border-left-color: var(--green); background: var(--green-soft); }
.guide-callout-tip .gc-title { color: var(--green-deep); }
.guide-callout-note { border-left-color: var(--blue); background: #eef3fc; }
.guide-callout-note .gc-title { color: var(--blue-deep); }
