/* Site frame and hero consistency (2026-09-26).
   Loaded last on every core page so one rule governs: the same content frame (1320px, the width
   the homepage and hero-v2 already used) and the same hero height on every inner page. */
:root{ --frame:1320px; --frame-pad:clamp(20px,4vw,48px); }

/* Dark theme: the feature bar's items used to carry their own lighter box, which sat inside the
   bar as a second, misaligned rectangle. They now share the bar's background. */
html.dtr-dark .hero-v2 .hv-feature{ background:transparent !important; }

/* hero-v2: a wider text column so headings wrap to at most three lines and the intro reads at a
   measure, instead of a 600px column that pushed long pages to 1,000px tall. */
.hero-v2 .hv-left{ max-width:760px !important; }
.hero-v2 .hv-sub{ max-width:700px !important; }
.hero-v2 .hv-h{ font-size:clamp(32px,3.3vw,50px) !important; margin-bottom:16px !important; }
.hero-v2 .hv-eyebrow{ margin-bottom:20px !important; }

/* ── One hero size on every inner page ─────────────────────────────────────
   hero-v2 (service pages) and the text heroes (city pages, guides, contact, careers, policy
   pages) share one height on desktop and one left edge: the site frame. */
@media (min-width:1101px){
  .hero-v2, html body section.dtr-photo-hero.dtr-photo-hero.dtr-photo-hero:not(#dtr-x){ min-height:840px !important; }
}
@media (min-width:761px) and (max-width:1100px){
  .hero-v2, html body section.dtr-photo-hero.dtr-photo-hero.dtr-photo-hero:not(#dtr-x){ min-height:820px !important; }
}

/* Text heroes become photo heroes, treated exactly like hero-v2: a full-bleed picture with a
   light veil in the light theme and a dark tint in the dark theme. */
html body section.dtr-photo-hero.dtr-photo-hero.dtr-photo-hero:not(#dtr-x){
  position:relative !important; isolation:isolate; overflow:hidden;
  display:flex !important; flex-direction:column; justify-content:center;
  padding:clamp(44px,6vh,68px) 0 !important;
  background:#f4f6f8 var(--hero-img) center/cover no-repeat !important;
  color:#16202b;
}
html body section.dtr-photo-hero.dtr-photo-hero.dtr-photo-hero:not(#dtr-x)::before{
  content:'' !important; position:absolute !important; inset:0 !important; z-index:1 !important; pointer-events:none;
  background:
    linear-gradient(100deg,rgba(255,255,255,.88) 0%,rgba(255,255,255,.80) 44%,rgba(255,255,255,.42) 70%,rgba(255,255,255,.10) 100%),
    linear-gradient(to top,rgba(255,255,255,.26) 0%,rgba(255,255,255,0) 24%,rgba(255,255,255,0) 82%,rgba(255,255,255,.16) 100%) !important;
}
html body .dtr-photo-hero.dtr-photo-hero.dtr-photo-hero::after{ display:none !important; }
.dtr-photo-hero .pg-hero-bg, .dtr-photo-hero .jt-hero-bg{ display:none !important; }
.dtr-photo-hero > .hero-static-img{ position:absolute !important; inset:0 !important; width:100% !important; height:100% !important; object-fit:cover !important; z-index:0 !important; }
.dtr-photo-hero:not(#dtr-x) > :is(.sa-wrap,.aa-wrap,.pg-hero-inner,.cn-wrap,.jt-hero-inner){
  position:relative; z-index:2; width:100% !important;
  max-width:var(--frame) !important; margin:0 auto !important;
  padding:0 var(--frame-pad) !important; text-align:left !important;
}
.dtr-photo-hero:not(#dtr-x) :is(h1){ font-size:clamp(32px,3.3vw,50px) !important; line-height:1.08 !important; max-width:820px !important; margin-left:0 !important; margin-right:0 !important; }
.dtr-photo-hero:not(#dtr-x) :is(.sa-sub,.aa-answer,.aa-meta,.pg-hero-sub,.cn-sub,.jt-hero-sub,.sa-hero-note){ max-width:700px !important; margin-left:0 !important; margin-right:0 !important; }
.dtr-photo-hero:not(#dtr-x) :is(.aa-cta-row,.sa-hero-ctas,.pg-hero-ctas){ justify-content:flex-start !important; }

/* light theme text on the veil */
html:not(.dtr-dark) .dtr-photo-hero:not(#dtr-x):not(#dtr-y) :is(h1,.sa-h1,.aa-h1,.pg-h1,.cn-h1,.jt-h1){ color:#16202b !important; -webkit-text-fill-color:#16202b !important; }
html:not(.dtr-dark) .dtr-photo-hero:not(#dtr-x):not(#dtr-y) h1 em{ color:#6f4e12 !important; -webkit-text-fill-color:#6f4e12 !important; }
html:not(.dtr-dark) .dtr-photo-hero:not(#dtr-x):not(#dtr-y) :is(.sa-eyebrow,.aa-eyebrow,.pg-ew-txt,.cn-eyebrow,.jt-hero-eb,.aa-updated){ color:#6f4e12 !important; -webkit-text-fill-color:#6f4e12 !important; }
html:not(.dtr-dark) .dtr-photo-hero:not(#dtr-x):not(#dtr-y) :is(p,.aa-meta,.aa-meta span,.sa-crumbs,.cn-quick-lbl,.sa-hero-note){ color:#3f4a56 !important; -webkit-text-fill-color:#3f4a56 !important; }
html:not(.dtr-dark) .dtr-photo-hero:not(#dtr-x):not(#dtr-y) :is(.aa-author){ color:#16202b !important; -webkit-text-fill-color:#16202b !important; }
html:not(.dtr-dark) .dtr-photo-hero:not(#dtr-x):not(#dtr-y) :is(p a,.sa-crumbs a,.cn-quick-val,.cn-quick-val a){ color:#6f4e12 !important; -webkit-text-fill-color:#6f4e12 !important; }
html:not(.dtr-dark) .dtr-photo-hero:not(#dtr-x):not(#dtr-y) .aa-answer{ background:rgba(255,255,255,.72) !important; border-color:rgba(184,135,35,.40) !important; }
html:not(.dtr-dark) .dtr-photo-hero:not(#dtr-x):not(#dtr-y) .aa-answer p{ color:#16202b !important; -webkit-text-fill-color:#16202b !important; }
html:not(.dtr-dark) .dtr-photo-hero:not(#dtr-x):not(#dtr-y) :is(.btn-ghost,.aa-btn-ghost,.pg-btn-ghost){ color:#16202b !important; -webkit-text-fill-color:#16202b !important; border-color:rgba(22,32,43,.28) !important; background:rgba(255,255,255,.55) !important; }
html:not(.dtr-dark) .dtr-photo-hero:not(#dtr-x):not(#dtr-y) :is(.btn-ghost,.aa-btn-ghost,.pg-btn-ghost) svg{ color:#6f4e12 !important; stroke:currentColor; }
html:not(.dtr-dark) .dtr-photo-hero:not(#dtr-x):not(#dtr-y) .cn-quick{ border-top-color:rgba(0,0,0,.12) !important; }

/* dark theme: the same tint hero-v2 uses */
html.dtr-dark body section.dtr-photo-hero.dtr-photo-hero.dtr-photo-hero:not(#dtr-x){ background-color:#171d26 !important; }
html.dtr-dark body section.dtr-photo-hero.dtr-photo-hero.dtr-photo-hero:not(#dtr-x)::before{
  background:linear-gradient(105deg,rgba(8,11,15,.78) 0%,rgba(8,11,15,.60) 40%,rgba(8,11,15,.34) 70%,rgba(8,11,15,.14) 100%) !important;
}


/* ── One content frame on every page ──────────────────────────────────────
   Section containers used eight different widths (720 to 1360px) and three left edges. Every
   section now sits in the same 1320px frame as the hero, so headings, cards and tables line up
   down the page. Generated from a scan of all 47 core pages at 1600px (2026-09-26). */
html body :is(.dtr-frame,.at-tree-inner,.fn-disc-inner,.jt-roles-inner,.jt-why-inner,.pt-intro-inner,.st-honest-inner,.st-int-inner,.tm-week-inner,.wr-cov-inner,.ts-verify-inner,
.ac-comp-inner,.ac-cost-inner,.ac-cross-inner,.ac-faq-inner,.ac-final-inner,.ac-fund-inner,.ac-how-inner,.ac-nb-inner,
.ac-proj-inner,.ac-sit-inner,.ac-sup-inner,.ap-cost-inner,.ap-del-inner,.ap-faq-inner,.ap-final-inner,.ap-proc-inner,
.ap-rel-inner,.ap-spec-inner,.ap-tiers-inner,.at-code-inner,.at-compare-inner,.at-cost-inner,.at-cross-inner,.at-dormers-inner,
.at-faq-inner,.at-final-inner,.at-ideas-inner,.at-nb-inner,.at-port-inner,.at-process-inner,.at-roi-inner,.at-styles-inner,
.at-testi-inner,.b23-exp-inner,.b23-faq-inner,.b23-final-inner,.b23-proc-inner,.b23-rel-inner,.b23-risk-inner,.b23-roi-inner,
.b23-tiers-inner,.b23-units-inner,.bs-ba-wrap,.bs-cta-inner,.bs-included-inner,.bs-intent-inner,.bs-legal-inner,.bs-process-inner,
.bs-testi-inner,.bs-tiers-inner,.bt-ba-wrap,.bt-cost-inner,.bt-cross-inner,.bt-faq-inner,.bt-final-inner,.bt-mistakes-inner,
.bt-nb-inner,.bt-partners-inner,.bt-port-inner,.bt-process-inner,.bt-roi-inner,.bt-scope-inner,.bt-testi-inner,.bt-tiers-inner,
.bt-types-inner,.bt-wp-inner,.ch-wrap,.cn-body-inner,.cn-trust-inner,.cp-denied-inner,.cp-faq-inner,.cp-fees-inner,
.cp-final-inner,.cp-loc-inner,.cp-need-inner,.cp-proc-inner,.cp-rel-inner,.cp-tiers-inner,.cp-time-inner,.fn-dec-inner,
.fn-faq-inner,.fn-final-inner,.fn-intro-inner,.fn-opts-inner,.fn-pay-inner,.fn-prog-inner,.fn-rel-inner,.gn-cost-inner,
.gn-faq-inner,.gn-final-inner,.gn-find-inner,.gn-hire-inner,.gn-nb-inner,.gn-pkgs-inner,.gn-port-inner,.gn-proc-inner,
.gn-small-inner,.gn-svc-inner,.gn-testi-inner,.ha-ba-wrap,.ha-cross-inner,.ha-cs-inner,.ha-diff-inner,.ha-faq-inner,
.ha-final-inner,.ha-math-inner,.ha-nb-inner,.ha-port-inner,.ha-process-inner,.ha-roi-inner,.ha-testi-inner,.ha-tiers-inner,
.ha-wrap,.ha-zoning-inner,.hc-code-inner,.hc-dist-inner,.hc-faq-inner,.hc-final-inner,.hc-ops-inner,.hc-port-inner,
.hc-prac-inner,.hc-proc-inner,.hc-proof-inner,.hc-rcap-inner,.kt-mistakes-inner,.kt-wrap,.mu-bill-inner,.mu-calc-inner,
.mu-cross-inner,.mu-faq-inner,.mu-fin-inner,.mu-final-inner,.mu-hs-inner,.mu-ideas-inner,.mu-mistakes-inner,.mu-port-inner,
.mu-process-inner,.oc-code-inner,.oc-dist-inner,.oc-faq-inner,.oc-final-inner,.oc-ops-inner,.oc-port-inner,.oc-proc-inner,
.oc-proof-inner,.oc-rcap-inner,.oc-tt-inner,.pf-chg-inner,.pf-com-inner,.pf-des-inner,.pf-faq-inner,.pf-feat-inner,
.pf-final-inner,.pf-gal2-inner,.pf-hoods-inner,.pf-res-inner,.pf-stats-inner,.pg-wrap,.pt-acc-inner,.pt-com-inner,
.pt-faq-inner,.pt-final-inner,.pt-mat-inner,.pt-pro-inner,.rb-appr-inner,.rb-code-inner,.rb-faq-inner,.rb-final-inner,
.rb-nb-inner,.rb-ops-inner,.rb-port-inner,.rb-proc-inner,.rb-proof-inner,.rb-rcap-inner,.rb-rel-inner,.rb-venue-inner,
.rd-aud-inner,.rd-cap-inner,.rd-cross-inner,.rd-faq-inner,.rd-final-inner,.rd-proc-inner,.rd-tr-inner,.rd-viz-inner,
.rrg-inner,.rt-aud-inner,.rt-code-inner,.rt-dist-inner,.rt-faq-inner,.rt-final-inner,.rt-ops-inner,.rt-port-inner,
.rt-proc-inner,.rt-proof-inner,.rt-rcap-inner,.sa-inner,.sr-clim-inner,.sr-cmp-inner,.sr-cross-inner,.sr-diff-inner,
.sr-faq-inner,.sr-final-inner,.sr-nb-inner,.sr-port-inner,.sr-process-inner,.sr-roi-inner,.sr-testi-inner,.sr-tiers-inner,
.sr-types-inner,.sr-zoning-inner,.st-cost-inner,.st-del-inner,.st-faq-inner,.st-final-inner,.st-need-inner,.st-proc-inner,
.st-rel-inner,.st-scn-inner,.tk-chat-inner,.tm-final-inner,.tm-why-inner,.ts-faq-inner,.ts-feat-inner,.ts-final-inner,
.ts-grid-inner,.viz-wizard-inner,.viz-wrap,.wh-code-inner,.wh-dist-inner,.wh-faq-inner,.wh-final-inner,.wh-ft-inner,
.wh-ops-inner,.wh-port-inner,.wh-proc-inner,.wh-proof-inner,.wh-rcap-inner,.wr-claim-inner,.wr-ext-inner,.wr-faq-inner,
.wr-final-inner,.wr-not-inner,.aa-body-inner,.ac-open-inner,.ap-cred-inner,.ap-diff-inner,.at-intent-inner,.b23-open-inner,
.bs-faq-inner,.bt-intent-inner,.cp-open-inner,.fn-open-inner,.gn-intent-inner,.ha-intent-inner,.hc-intent-inner,.mu-intent-inner,
.oc-intent-inner,.rb-intent-inner,.rd-big-inner,.rd-story-inner,.rt-intent-inner,.sa-faq-inner,.sr-intent-inner,.tm-lead-inner,
.viz-faq-inner,.wh-intent-inner
){
  max-width:var(--frame) !important; width:100% !important; box-sizing:border-box !important;
  margin-left:auto !important; margin-right:auto !important;
  padding-left:var(--frame-pad) !important; padding-right:var(--frame-pad) !important;
}
/* Blocks that used to be one narrow column keep their reading measure for text, now aligned to
   the frame's left edge; tables, grids and FAQs use the full frame. */
html body :is(.at-tree-inner,.fn-disc-inner,.jt-roles-inner,.jt-why-inner,.pt-intro-inner,.st-honest-inner,.st-int-inner,.tm-week-inner,.wr-cov-inner,.ts-verify-inner,
.aa-body-inner,.ac-open-inner,.ap-cred-inner,.ap-diff-inner,.at-intent-inner,.b23-open-inner,.bt-intent-inner,
.cp-open-inner,.fn-open-inner,.gn-intent-inner,.ha-intent-inner,.hc-intent-inner,.mu-intent-inner,.oc-intent-inner,.rb-intent-inner,
.rd-big-inner,.rd-story-inner,.rt-intent-inner,.sr-intent-inner,.tm-lead-inner,.wh-intent-inner
) > :is(p,h2,h3,h4,ul,ol,blockquote,.aa-answer,[class$="-sub"],[class$="-lead"],[class$="-eyebrow"]){ max-width:820px; margin-left:0 !important; margin-right:0 !important; }
html body :is(.at-tree-inner,.fn-disc-inner,.jt-roles-inner,.jt-why-inner,.pt-intro-inner,.st-honest-inner,.st-int-inner,.tm-week-inner,.wr-cov-inner,.ts-verify-inner,.aa-body-inner,.ac-open-inner,.ap-cred-inner,.ap-diff-inner,.at-intent-inner,.b23-open-inner,.bt-intent-inner,.cp-open-inner,.fn-open-inner,.gn-intent-inner,.ha-intent-inner,.hc-intent-inner,.mu-intent-inner,.oc-intent-inner,.rb-intent-inner,.rd-big-inner,.rd-story-inner,.rt-intent-inner,.sr-intent-inner,.tm-lead-inner,.wh-intent-inner){ text-align:left !important; }

/* Blog and how-to index intro: readable in the dark theme (axe flagged it before this pass). */
html.dtr-dark .dtr-static-index > .wrap > p{ color:#c2c9d2 !important; -webkit-text-fill-color:#c2c9d2 !important; }
@media (max-width:760px){
  html:not(.dtr-dark) body section.dtr-photo-hero.dtr-photo-hero.dtr-photo-hero:not(#dtr-x)::before{
    background:linear-gradient(180deg,rgba(255,255,255,.90) 0%,rgba(255,255,255,.84) 60%,rgba(255,255,255,.76) 100%) !important;
  }
  html.dtr-dark body section.dtr-photo-hero.dtr-photo-hero.dtr-photo-hero:not(#dtr-x)::before{
    background:linear-gradient(180deg,rgba(8,11,15,.84) 0%,rgba(8,11,15,.76) 100%) !important;
  }
}
