/* site.css - W Contracting: the ONE stylesheet every page links. Merged 2026-09-26 (PSI-100) from 12 files, in their original cascade order.
   THIS IS THE FILE TO EDIT (Jeff/Claude/anyone). The 12 source files still sit in /css/ but no page links them any more.
   Page-type sections are scoped with :where(html.wcss-*) (zero specificity, so the cascade is identical to the old per-page <link>s);
   each page's <html class> lists which sections it uses. After ANY edit, bump ?v= on the site.css <link> in every HTML page:
   hcdn caches /css/ as immutable, so the old bytes keep serving until the query string changes. */

/* ===== from css/styles.6006dc95bc.css (all pages) ===== */
/* W Contracting Roofing — brand colours carried from the original Wix site.
   Edit the :root variables to retheme the whole site. */
:root{
  --action:#D13800; --action-dark:#A82C00;
  --blue:#2081C3; --blue-bright:#0088CB; --navy:#0B2B41;
  --red:#ED1C24; --ink:#1A1A1A; --ink-2:#3a3a3a; --muted:#5a6470;
  --white:#fff; --grey:#F5F5F5; --ice:#eef4f8; --border:#D9D9D9;
  --container:1180px; --radius:12px; --shadow:0 8px 30px rgba(11,43,65,.10);
  --ff-head:'Poppins',system-ui,sans-serif; --ff-body:'Inter',system-ui,sans-serif;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;font-family:var(--ff-body);color:var(--ink);background:var(--white);line-height:1.6;font-size:17px}
img{max-width:100%;display:block;height:auto}
a{color:var(--action);text-decoration:none}
a:hover{text-decoration:underline}
h1,h2,h3,h4{font-family:var(--ff-head);line-height:1.15;color:var(--navy);margin:.2em 0 .5em;font-weight:700}
h1{font-size:clamp(2rem,4.5vw,3.2rem);letter-spacing:-.5px}
h2{font-size:clamp(1.9rem,3.4vw,2.8rem)}
h3{font-size:1.3rem}
.display{font-size:clamp(2.4rem,5vw,3.6rem);letter-spacing:-.5px}
.container{max-width:var(--container);margin:0 auto;padding:0 20px}
.section{padding:64px 0}
.section--white{background:var(--white)}
.section--grey{background:var(--grey)}
.section--ice{background:var(--ice)}
.section--navy{background:var(--navy);color:#dce6ee}
.section--navy h2,.section--navy h3{color:#fff}
.section__title{text-align:center;margin-bottom:1.5rem}
.section__lead{max-width:760px;margin:0 auto 2rem;text-align:left;color:var(--muted);font-size:1.1rem}
.lead{font-size:1.15rem;color:var(--ink-2)}

/* buttons — orange is the only click-me colour */
.btn{display:inline-block;background:var(--action);color:#fff;font-family:var(--ff-head);font-weight:600;
  padding:13px 24px;border-radius:10px;border:0;cursor:pointer;font-size:1rem;transition:.15s;text-align:center}
.btn:hover{background:var(--action-dark);text-decoration:none;transform:translateY(-1px)}
.btn--lg{padding:16px 32px;font-size:1.1rem}
.btn--sm{padding:9px 16px;font-size:.92rem}
.btn--block{display:block;width:100%}
.btn--ghost{background:transparent;border:2px solid #fff;color:#fff}
.btn--ghost:hover{background:rgba(255,255,255,.12)}
/* dark outline button for use on LIGHT backgrounds (ghost is white, invisible there) */
.btn--outline{background:transparent;border:2px solid var(--navy);color:var(--navy)}
.btn--outline:hover{background:var(--navy);color:#fff}
.btn--blue{background:var(--blue)}.btn--blue:hover{background:var(--blue-bright)}

/* header */
.site-header{position:sticky;top:0;z-index:50;background:#fff;border-bottom:1px solid var(--border);box-shadow:0 1px 8px rgba(0,0,0,.04);transition:box-shadow .2s ease}
.site-header__inner{display:flex;align-items:center;gap:14px;padding-top:14px;padding-bottom:14px;transition:padding .2s ease}
body.scrolled .site-header__inner{padding-top:7px;padding-bottom:7px}
body.scrolled .site-header{box-shadow:0 6px 22px rgba(0,0,0,.10)}

/* dynamic design: scroll reveals (JS-gated, respects reduced-motion) */
body.js-anim .reveal{opacity:0;transform:translateY(22px);transition:opacity .7s cubic-bezier(.2,.7,.2,1),transform .7s cubic-bezier(.2,.7,.2,1)}
body.js-anim .reveal.in{opacity:1;transform:none}
body.js-anim .svc-card.reveal,body.js-anim .trust-box.reveal{transition-duration:.5s}
@media(prefers-reduced-motion:reduce){body.js-anim .reveal,body.js-anim .reveal.in,.reveal,.reveal.in{opacity:1!important;transform:none!important;transition:none!important;animation:none!important}}
.brand{display:flex;align-items:center;gap:10px;color:var(--navy);font-family:var(--ff-head);font-weight:800;font-size:1.12rem;white-space:nowrap}
.brand:hover{text-decoration:none}
.brand__tld{color:var(--action)}
.main-nav{margin-left:auto}
.main-nav>ul{display:flex;gap:2px;list-style:none;margin:0;padding:0}
.main-nav a{display:block;padding:8px 10px;color:var(--ink);font-family:var(--ff-head);font-weight:500;font-size:.92rem;border-radius:var(--radius-sm);white-space:nowrap}
.main-nav a:hover{background:var(--ice);text-decoration:none;color:var(--navy)}
.has-sub{position:relative}
.has-sub .sub{position:absolute;top:100%;left:0;background:#fff;border:1px solid var(--border);border-radius:10px;
  box-shadow:var(--shadow);min-width:240px;list-style:none;margin:0;padding:6px;
  opacity:0;visibility:hidden;transform:translateY(6px);transition:opacity .16s ease,transform .16s ease,visibility .16s}
.has-sub:hover .sub,.has-sub:focus-within .sub{opacity:1;visibility:visible;transform:none}
/* visible keyboard focus everywhere */
a:focus-visible,button:focus-visible,.btn:focus-visible,.chip:focus-visible,summary:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:3px solid var(--blue-bright);outline-offset:2px;border-radius:var(--radius-sm)}
.site-header__cta{display:flex;align-items:center;gap:12px}
.header-phone{font-family:var(--ff-head);font-weight:700;color:var(--navy);white-space:nowrap}
.nav-toggle{display:none;font-size:1.6rem;background:none;border:0;color:var(--navy);cursor:pointer}

/* hero */
.hero{position:relative;background:var(--navy);color:#fff;overflow:hidden}
.hero::after{content:"";position:absolute;inset:0;z-index:0;
  background:linear-gradient(100deg,rgba(8,31,48,.92) 0%,rgba(11,43,65,.62) 46%,rgba(11,43,65,.28) 100%),
  url(/assets/img/roof-replacement-saskatoon-finished-hip-roof.webp) center/cover}
.hero__inner{position:relative;z-index:1;display:grid;grid-template-columns:1.05fr .95fr;gap:46px;align-items:center;padding:90px 0}
.hero h1{color:#fff;font-size:clamp(2.4rem,5.2vw,4rem);letter-spacing:-1px;text-shadow:0 2px 14px rgba(0,0,0,.35);max-width:14ch}
.hero__eyebrow{display:inline-block;background:var(--action);color:#fff;font-family:var(--ff-head);font-weight:600;
  font-size:.8rem;letter-spacing:.5px;text-transform:uppercase;padding:5px 12px;border-radius:var(--radius-pill);margin-bottom:14px}
.hero p{font-size:1.2rem;color:#cdd9e4;max-width:540px}
.hero__points{list-style:none;padding:0;margin:18px 0 26px;display:grid;gap:8px}
.hero__points li{padding-left:28px;position:relative;color:inherit}
.hero__points li::before{content:"\2713";position:absolute;left:0;color:var(--action);font-weight:700}
.hero__actions{display:flex;gap:12px;flex-wrap:wrap}

/* trust strip */
.trust-strip{background:var(--navy);border-top:3px solid var(--action)}
.trust-strip ul{display:flex;flex-wrap:wrap;justify-content:center;gap:10px 36px;list-style:none;margin:0;padding:18px 20px;max-width:var(--container);margin:0 auto}
.trust-strip li{text-align:center}
.trust-strip a{display:flex;flex-direction:column;align-items:center;color:#a9bccd;font-size:.78rem;letter-spacing:.2px;text-transform:uppercase;transition:color .15s}
.trust-strip a:hover{text-decoration:none;color:#cfe0ee}
.trust-strip a:hover strong{color:var(--action)}
.trust-strip strong{font-family:var(--ff-head);color:#fff;font-size:1.5rem;font-weight:800;letter-spacing:-.5px;text-transform:none;transition:color .15s}

/* services grid */
.svc-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));gap:16px}
.svc-card a{display:flex;flex-direction:column;gap:8px;background:#fff;border:1px solid var(--border);border-radius:var(--radius);
  padding:22px;height:100%;color:var(--ink);transition:.15s}
.svc-card a:hover{text-decoration:none;border-color:var(--action);box-shadow:var(--shadow);transform:translateY(-2px)}
.svc-card__title{font-family:var(--ff-head);font-weight:600;color:var(--navy);font-size:1.1rem}
.svc-card__cta{color:var(--action);font-weight:600;font-size:.9rem;margin-top:auto}
/* image service cards (Blue Bird "What we do" — photo + title + blurb + CTA) */
.svc-card--photo a{padding:0;overflow:hidden;gap:0;box-shadow:var(--shadow)}
.svc-card__img{width:100%;aspect-ratio:16/10;object-fit:cover;display:block}
.svc-card__body{display:flex;flex-direction:column;gap:9px;padding:20px 22px 22px}
.svc-card__desc{color:var(--ink-2);font-size:.93rem;line-height:1.5}
.svc-card--photo .svc-card__cta{margin-top:4px}

/* service-area photo cards (Blue Bird "Areas" — photo + navy band + name + button) */
.area-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,270px),1fr));gap:20px;margin-top:12px}
.area-card{display:block;border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow);border:1px solid var(--border);background:#fff;transition:.18s}
.area-card:hover{text-decoration:none;transform:translateY(-3px);box-shadow:0 16px 40px rgba(11,43,65,.18)}
.area-card__img{width:100%;aspect-ratio:4/3;object-fit:cover;display:block}
.area-card__band{display:block;background:var(--navy);padding:18px 20px;text-align:center}
.area-card__name{display:block;font-family:var(--ff-head);font-weight:800;color:#fff;font-size:1.2rem;text-transform:uppercase;letter-spacing:.4px;margin-bottom:12px}
.area-card__cta{display:inline-block;background:var(--action-dark);color:#fff;font-family:var(--ff-head);font-weight:700;font-size:.88rem;padding:9px 18px;border-radius:var(--radius-pill)}
.area-card:hover .area-card__cta{background:#8a2400}
@media(max-width:600px){.area-card__img{aspect-ratio:16/9}}
.img-credits{color:var(--muted);font-size:.78rem;line-height:1.7;text-align:center;max-width:920px;margin:18px auto 0}
/* site-wide footer map (D2.6) — compact so it doesn't bloat the footer */
.footer-map{margin:20px auto 0}
.footer-map .map-embed{border-color:rgba(255,255,255,.18)}
.footer-map .map-embed iframe{height:200px}

/* generic content */
.prose{max-width:820px;margin:0 auto}
.prose p{margin:0 0 1.1em}
.cols-2{display:grid;grid-template-columns:1.4fr .9fr;gap:40px;align-items:start}
.card{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:24px;box-shadow:var(--shadow)}
.trust-boxes{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:18px}
.trust-box{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:22px;text-align:center;box-shadow:var(--shadow)}
.trust-box h3{color:var(--action)}

/* accordion */
.acc{border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;background:#fff;margin-bottom:10px}
.acc summary{cursor:pointer;padding:16px 20px;font-family:var(--ff-head);font-weight:600;color:var(--navy);list-style:none}
.acc summary::-webkit-details-marker{display:none}
.acc summary::after{content:"+";float:right;color:var(--action);font-weight:700}
.acc[open] summary::after{content:"\2013"}
.acc__body{padding:0 20px 18px;color:var(--ink-2)}

/* photo grid + slider */
.photo-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}
.photo-grid img{border-radius:10px;aspect-ratio:4/3;object-fit:cover;width:100%;transition:transform .25s ease}
.photo-grid a,.photo-grid figure{overflow:hidden;border-radius:10px;margin:0;display:block}
.photo-grid img:hover{transform:scale(1.04)}
.ba-slider{position:relative;max-width:760px;margin:0 auto;border-radius:var(--radius);overflow:hidden}

/* maps */
.map-embed{border-radius:var(--radius);overflow:hidden;border:1px solid var(--border)}
.map-embed iframe{width:100%;height:320px;border:0;display:block}
.maps-2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.map-link{display:inline-block;font-weight:600}

/* chips */
.chips{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}
.chip{background:#fff;border:1px solid var(--border);border-radius:var(--radius-pill);padding:7px 15px;font-size:.9rem;color:var(--navy);font-weight:500}
.chip:hover{border-color:var(--action);text-decoration:none}
.chip--all{background:var(--navy);color:#fff;border-color:var(--navy)}

/* quote form — the focal conversion object */
.quote-form{background:#fff;border-radius:var(--radius);padding:26px 24px;box-shadow:0 24px 60px rgba(0,0,0,.34);border-top:4px solid var(--action);position:relative}
.quote-form .quote-form__title{margin-top:0;color:var(--navy)}
.quote-form .quote-form__sub{color:var(--ink);font-size:.95rem;margin-top:-.4rem}
.quote-form__row{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.quote-form label{display:block;font-size:.85rem;font-weight:600;color:var(--ink-2);margin-bottom:10px}
.quote-form input,.quote-form select,.quote-form textarea{width:100%;margin-top:4px;padding:11px 12px;border:1px solid var(--border);
  border-radius:var(--radius-sm);font:inherit;font-size:.95rem;background:#fff;color:var(--ink)}
.quote-form input:focus,.quote-form select:focus,.quote-form textarea:focus{outline:2px solid var(--blue);border-color:var(--blue)}
.quote-form__full{grid-column:1/-1}
.quote-form .quote-form__alt{text-align:center;font-size:.9rem;color:var(--muted);margin:.8rem 0 0}
.hp{position:absolute;left:-9999px}

/* cta band */
.cta-band{background:linear-gradient(100deg,var(--navy),#13405e);color:#fff}
.cta-band__inner{display:flex;gap:30px;align-items:center;justify-content:space-between;padding:48px 20px;flex-wrap:wrap}
.cta-band h2{color:#fff;margin:0 0 .3em}
.cta-band p{margin:0;color:#cdd9e4;max-width:520px}
.cta-band__actions{display:flex;gap:12px;flex-wrap:wrap}

/* review band (real content only) */
.review-band{background:var(--ice)}

/* breadcrumb */
.crumbs{font-size:.85rem;color:var(--muted);padding:14px 0}
.crumbs a{color:var(--blue)}

/* footer */
.site-footer{background:var(--navy);color:#b9c7d4;padding-top:48px;font-size:.95rem}
.site-footer__grid{display:grid;grid-template-columns:1.3fr 1fr 1fr 1.1fr;gap:32px}
.site-footer h3{color:#fff;font-size:1rem;margin-bottom:.8rem}
.site-footer a{color:#cdd9e4}.site-footer a:hover{color:#fff}
.site-footer ul{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.site-footer__tag{font-family:var(--ff-head);font-weight:700;color:#fff;font-size:1.1rem;margin:.6rem 0 .2rem}
.site-footer address{font-style:normal;line-height:1.8}
.site-footer .hours{color:var(--action);font-weight:600}
.site-footer__bar{border-top:1px solid rgba(255,255,255,.12);margin-top:36px;padding:16px 0;font-size:.82rem}
.site-footer__bar .container{display:flex;justify-content:space-between;gap:14px;flex-wrap:wrap;color:#8fa3b3}

/* sticky mobile call bar */
.sticky-call{display:none;position:fixed;bottom:0;left:0;right:0;z-index:60;background:var(--navy);
  padding:8px;gap:8px;box-shadow:0 -4px 16px rgba(0,0,0,.2)}
.sticky-call a{flex:1;text-align:center;padding:12px;border-radius:var(--radius-sm);font-family:var(--ff-head);font-weight:700;color:#fff;background:var(--action)}
.sticky-call a:hover{text-decoration:none}
.sticky-call__quote{background:var(--blue)!important}

/* promo bar (site-wide, under header) */
.promo-bar{background:var(--navy);color:#fff;border-bottom:2px solid var(--action);font-size:.9rem}
.promo-bar .container{display:flex;align-items:center;justify-content:center;gap:10px 18px;padding:9px 20px;flex-wrap:wrap;text-align:center}
.promo-bar strong{color:#fff}
.promo-bar a{color:var(--action);font-weight:700;white-space:nowrap}
.promo-bar a:hover{color:#ff7a47}

/* storm urgency strip */
.storm-strip{background:linear-gradient(100deg,#7a1500,var(--action));color:#fff}
.storm-strip .container{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px 20px;flex-wrap:wrap}
.storm-strip p{margin:0;font-weight:600}
.storm-strip .btn{background:#fff;color:var(--action)}
.storm-strip .btn:hover{background:#f1f1f1}

/* comparison table */
.cmp-table{width:100%;border-collapse:collapse;background:#fff;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}
.cmp-table th{background:var(--navy);color:#fff;font-family:var(--ff-head);padding:14px 16px;text-align:left;font-size:1rem}
.cmp-table td{padding:13px 16px;border-top:1px solid var(--border);vertical-align:top}
.cmp-table tr td:first-child{font-weight:600;color:var(--navy);width:34%}

/* financing callout */
.fin-callout{display:flex;gap:20px;align-items:center;justify-content:space-between;background:var(--ice);
  border:1px solid var(--border);border-left:5px solid var(--action);border-radius:var(--radius);padding:22px 24px;flex-wrap:wrap}
.fin-callout p{margin:0;max-width:560px}

/* ===== Bluebird-parity components (W Contracting brand) ===== */
/* eyebrow label above section titles */
.eyebrow{display:block;text-align:center;text-transform:uppercase;letter-spacing:1.6px;
  font-family:var(--ff-head);font-weight:700;font-size:.78rem;color:var(--action-dark);margin:0 0 .45rem}
.eyebrow--left{text-align:left}
.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}
.section--navy .eyebrow{color:#ffb38f}

/* hero Google rating strip (above the quote form, real numbers from reviews.mjs) */
.hero-proof{display:flex;align-items:center;justify-content:center;gap:11px;flex-wrap:wrap;
  background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:10px 14px;
  margin-bottom:12px;box-shadow:var(--shadow);font-family:var(--ff-head);font-weight:700;
  color:var(--navy);font-size:.95rem}
.hero-proof .stars{color:#f5a623;letter-spacing:2px;font-weight:400}
.hero-proof__g{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;
  border-radius:50%;background:#fff;border:1px solid var(--border);color:#4285F4;font-weight:800}

/* hero trust chips (checkmark pills on dark hero) */
.trust-chips{list-style:none;display:flex;flex-wrap:wrap;gap:8px 10px;padding:0;margin:18px 0 24px}
.trust-chips li{display:flex;align-items:center;gap:7px;background:rgba(255,255,255,.10);
  border:1px solid rgba(255,255,255,.22);border-radius:var(--radius-pill);padding:7px 14px;font-size:.85rem;color:#eaf2f8;font-weight:500}
.trust-chips li::before{content:"\2713";color:#74c79b;font-weight:800}

/* inline review rating in service hero */

/* reviews grid (real Google reviews) */
.review-band .eyebrow{margin-bottom:.4rem}
.rev-head{color:var(--muted);font-weight:600;margin:-.3rem 0 1.7rem}
.rev-card{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:22px;
  box-shadow:var(--shadow);display:flex;flex-direction:column;gap:10px}
.rev-card__stars{color:#f5a623;letter-spacing:2px;font-size:1.05rem}
.rev-card blockquote{margin:0;color:var(--ink-2);font-size:1rem;line-height:1.55}
.rev-card figcaption{font-family:var(--ff-head);font-weight:600;color:var(--navy);font-size:.95rem;margin-top:auto}
.rev-card figcaption span{display:block;color:var(--muted);font-weight:500;font-size:.8rem}
.rev-foot{margin:1.7rem 0 0}

/* reviews carousel (replaces the static grid — swipeable, snap, arrows) */
.rev-carousel{position:relative;display:flex;align-items:center;gap:8px}
.rev-track{display:flex;gap:16px;overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;
  padding:4px 2px 14px;flex:1;text-align:left;scrollbar-width:thin}
.rev-track::-webkit-scrollbar{height:8px}
.rev-track::-webkit-scrollbar-thumb{background:#cdd9e4;border-radius:var(--radius-sm)}
.rev-track .rev-card{flex:0 0 min(340px,80vw);scroll-snap-align:start}
.rev-track:focus-visible{outline:3px solid var(--blue-bright);outline-offset:2px;border-radius:10px}
.rev-nav{flex:0 0 auto;width:42px;height:42px;border-radius:50%;border:1px solid var(--border);background:#fff;
  color:var(--navy);font-size:1.5rem;line-height:1;cursor:pointer;box-shadow:var(--shadow);
  display:flex;align-items:center;justify-content:center;transition:.15s}
.rev-nav:hover{background:var(--action);color:#fff;border-color:var(--action)}
@media(max-width:600px){.rev-nav{display:none}}

/* sticky media column for long-form text+photo sections (service prose) */
.media-col__img{position:sticky;top:96px;width:100%;border-radius:var(--radius);box-shadow:var(--shadow);
  aspect-ratio:4/5;object-fit:cover;align-self:start}
@media(max-width:900px){.media-col__img{position:static;aspect-ratio:16/10;margin-top:8px}}

/* directions / transportation cards (now content-rich) */
.dir-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:16px;margin-top:8px}
.dir-card{background:#fff;border:1px solid var(--border);border-left:4px solid var(--blue);
  border-radius:var(--radius);padding:18px 20px;box-shadow:var(--shadow)}
.dir-card h3{font-size:1.05rem;margin:.1em 0 .35em}
.dir-card p{margin:0;color:var(--ink-2);font-size:.95rem}

/* numbered process timeline (the signature service-page device) */
.process{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;counter-reset:step}
.process__step{background:#fff;border:1px solid var(--border);border-radius:var(--radius);
  padding:24px 20px;position:relative;box-shadow:var(--shadow)}
.process__step::before{counter-increment:step;content:"0" counter(step);display:block;
  font-family:var(--ff-head);font-weight:800;font-size:2rem;color:var(--action);line-height:1;margin-bottom:10px}
.process__step h3{font-size:1.08rem;margin:.1em 0 .4em}
.process__step p{margin:0;color:var(--ink-2);font-size:.93rem}

/* responsive */
/* header collapses to a hamburger before the one-row desktop header would overflow (~1060px) */
@media(max-width:1060px){
  .main-nav,.site-header__cta,.header-phone{display:none}
  .nav-toggle{display:block;margin-left:auto}
  body.nav-open .main-nav{display:block;position:absolute;top:100%;left:0;right:0;background:#fff;border-bottom:1px solid var(--border);padding:10px;max-height:calc(100vh - 64px);overflow-y:auto;-webkit-overflow-scrolling:touch}
  body.nav-open .main-nav>ul{flex-direction:column}
  body.nav-open .has-sub .sub{position:static;opacity:1;visibility:visible;transform:none;box-shadow:none;border:0;padding-left:14px}
}
@media(max-width:900px){
  .process{grid-template-columns:1fr 1fr}
  .hero__inner,.cols-2,.maps-2{grid-template-columns:1fr}
  .hero__inner{padding:54px 0}
  .trust-boxes{grid-template-columns:1fr}
  .site-footer__grid{grid-template-columns:1fr 1fr}
  .sticky-call{display:flex}
  main{padding-bottom:64px}
}
@media(max-width:600px){
  .process{grid-template-columns:1fr}
  /* hero: keep everything inside the viewport (home H1 is the longest line) */
  .hero h1{font-size:clamp(1.45rem,6.1vw,2.05rem);letter-spacing:-.3px;max-width:100%;overflow-wrap:break-word;hyphens:none}
  .hero p,.hero__points li{overflow-wrap:break-word}
  .hero__points li{font-size:.95rem}
  .hero__actions{flex-direction:column}
  .hero__actions .btn{width:100%}
  .quote-form__row{grid-template-columns:1fr}
  .site-footer__grid{grid-template-columns:1fr}
  .cta-band__inner{flex-direction:column;align-items:flex-start}
  .cta-band__actions{width:100%}
  .cta-band__actions .btn{width:100%}
  .fin-callout,.storm-strip .container{flex-direction:column;align-items:flex-start}
  /* sticky bar: two buttons share the row, never overflow */
  .sticky-call{padding:8px 10px;gap:8px}
  .sticky-call a{flex:1 1 0;min-width:0;padding:13px 6px;font-size:.95rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
}

/* ============================================================================
   PAGE STRUCTURE STANDARD 2026-08-27 — additions only, nothing above is changed.
   ========================================================================== */

/* position-1 social-proof strip, inside the existing .promo-bar under the nav */
.promo-proof{display:inline-flex;align-items:center;gap:8px;color:#fff;font-weight:600;
  white-space:nowrap}
.promo-proof:hover{text-decoration:none;color:#fff}
.promo-proof .stars{display:inline-flex;align-items:center;gap:1px;color:#f5a623}
.promo-proof .stars svg{width:14px;height:14px}
.promo-proof strong{color:#fff}
.promo-proof__g{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;
  border-radius:50%;background:#fff;color:#4285F4;font-family:var(--ff-head);font-weight:800;
  font-size:.8rem;line-height:1}
.promo-bar .promo-proof + .promo-bar__offer{border-left:1px solid rgba(255,255,255,.25);
  padding-left:18px}

/* real-job "the call / what we did" cards, built only from real customer reviews */
.jobcards{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:20px}
.jobcard{background:#fff;border:1px solid var(--border);border-left:4px solid var(--action);
  border-radius:var(--radius);padding:24px;box-shadow:var(--shadow)}
.jobcard h3{margin-top:0;font-size:1.15rem}
.jobcard p{margin:0 0 .8em;color:var(--ink-2);font-size:.97rem}
.jobcard strong{color:var(--navy)}
.jobcard blockquote{margin:0 0 .7em;padding-left:14px;border-left:3px solid var(--ice);
  color:var(--ink-2);font-style:italic;font-size:.95rem;line-height:1.55}
.jobcard__by{font-family:var(--ff-head);font-weight:600;color:var(--muted);font-size:.85rem;
  margin-bottom:0}

/* image / text alternation inside prose containers — photo starts on the right */
.altrow{display:grid;grid-template-columns:1fr;gap:26px;align-items:center;margin:0 0 2.2em}
.altrow__text > :first-child{margin-top:0}
.altrow__img img{border-radius:var(--radius);width:100%;object-fit:cover;aspect-ratio:4/3;
  box-shadow:var(--shadow)}
@media(min-width:820px){
  .altrow{grid-template-columns:1.15fr .85fr}
  .altrow .altrow__text{order:2}
  .altrow .altrow__img{order:1}
  .altrow--reverse .altrow__text{order:1}
  .altrow--reverse .altrow__img{order:2}
}
.prose .altrow{max-width:none}

/* FAQ accordions sit in a centred column on every page that has them */
.section .acc{max-width:860px;margin-left:auto;margin-right:auto}

/* the ported how-it-works grid stacks cleanly on narrow screens */
@media(max-width:900px){.process{grid-template-columns:repeat(2,1fr)}}
@media(max-width:560px){.process{grid-template-columns:1fr}
  .promo-bar .promo-proof + .promo-bar__offer{border-left:0;padding-left:0}}

/* ============================================================================
   2026-08-29 · Jeff manual site-scan fixes (#cust-w-contracting 2026-08-28)
   ============================================================================ */

/* [J1] "service area section in homepage needs added services, looks
   unsymmetrical". Cause: .area-grid is `repeat(auto-fill, minmax(270px,1fr))`
   and there are ELEVEN town cards, so the rows land 4 / 4 / 3 and the last row
   hangs left with a hole on the right. Flex + centred wrap keeps every card the
   same width as before and centres the trailing row, so 11 reads as deliberate.
   (Not inventing a 12th town to square the grid -- that would be claiming a
   service area we have not verified.) */
.area-grid{display:flex;flex-wrap:wrap;justify-content:center;gap:20px}
.area-grid>*{flex:0 1 calc(25% - 15px);min-width:230px}
@media(max-width:1080px){.area-grid>*{flex:0 1 calc(33.333% - 14px)}}
@media(max-width:760px){.area-grid>*{flex:0 1 calc(50% - 10px)}}
@media(max-width:460px){.area-grid>*{flex:0 1 100%}}

/* [J2] "make this section a bit larger along with the CTA 'Recent hail or wind
   in the Saskatoon area?'" -- the storm strip was a 127px band with 17px copy,
   easy to scroll straight past. */
.storm-strip{padding-top:34px;padding-bottom:34px}
.storm-strip p{font-size:20px;line-height:1.5;margin-bottom:14px}
.storm-strip .btn{font-size:17px;padding:14px 30px}
.area-grid + p,.area-card h3{font-size:1.06rem}

/* [J7] "financing, gallery, review, GAF, and FAQ pages needs a small hero,
   doesnt have to be like the money pages but". Those five pages had NO hero at
   all -- the H1 sat in a plain white/ice band. This is a compact navy band in
   the same family as .hero on the homepage, ~1/4 the height. */
.page-hero-sm{background:#0b2b41;padding:46px 0 42px;margin-bottom:0}
.page-hero-sm h1{color:#fff;margin:0;font-size:clamp(1.85rem,3.4vw,2.6rem);line-height:1.15}
@media(max-width:680px){.page-hero-sm{padding:32px 0 30px}}

/* [J3] "readjust hero height in services page, need to fit whole hero first
   load". Measured on the money pages: header 113px + hero 870-974px = 983-1088
   against a 900px viewport, so the bottom of every hero was cut off. The driver
   was .hero__inner's 90px top+bottom padding plus a 4rem H1 ceiling. */
@media(min-width:1025px){
  .hero__inner{padding:34px 0}
  .hero h1{font-size:clamp(2.1rem,4.1vw,3.05rem)}
  .hero__points{margin:12px 0 16px;gap:6px}
  .hero .lead,.hero__inner p{margin-bottom:.7em}
}

/* [J6] "local roofers section area, boxes arent symmetrical, needs
   reformatting". Two separate defects in .svc-grid: (1) it is
   `repeat(auto-fit,minmax(280px,1fr))` and /services carries SEVEN cards, so
   the rows land 3 / 3 / 1 and the last card hangs alone on the left; (2) cards
   in the same row rendered at different heights (442px next to 414px) because
   each sized to its own content. Flex + centred wrap fixes the orphan row, and
   stretch alignment squares the heights within each row. */
.svc-grid{display:flex;flex-wrap:wrap;justify-content:center;align-items:stretch;gap:16px}
.svc-grid>*{flex:0 1 calc(33.333% - 11px);min-width:260px;display:flex;flex-direction:column}
.svc-grid>*>*{flex:1 1 auto}
@media(max-width:900px){.svc-grid>*{flex:0 1 calc(50% - 8px)}}
@media(max-width:560px){.svc-grid>*{flex:0 1 100%}}

@media (max-width:768px){.hero::after{background:linear-gradient(100deg,rgba(8,31,48,.92) 0%,rgba(11,43,65,.62) 46%,rgba(11,43,65,.28) 100%),url(/assets/img/roof-replacement-saskatoon-finished-hip-roof-mobile-crop.webp) center/cover}}

/* ===== L5 lane 2026-09-01: structure + visual rows ===== */
:root{--space-1:8px;--space-2:14px;--space-3:22px;--space-4:36px;--space-5:64px;--radius-sm:8px;--radius-pill:30px}
@keyframes wc-reveal{from{opacity:0;transform:translateY(22px)}to{opacity:1;transform:none}}
body.js-anim .reveal.in{animation:wc-reveal .7s cubic-bezier(.2,.7,.2,1) both}
body.reveal-forced .reveal,body.reveal-forced .reveal.in{opacity:1!important;transform:none!important;transition:none!important;animation:none!important}
@media print{.reveal,.reveal.in{opacity:1!important;transform:none!important;transition:none!important;animation:none!important}
  .sticky-call{display:none!important}}
/* social-proof band above the hero (live Google read 2026-09-01) */
.proof-strip{background:var(--navy);border-bottom:3px solid var(--action)}
.proof-strip__link{display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap;
  padding:var(--space-2) var(--space-3);color:#fff;font-family:var(--ff-head);font-weight:600;text-align:center}
.proof-strip__link:hover{text-decoration:none;background:rgba(255,255,255,.06)}
.proof-strip__g{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:50%;
  background:#fff;color:var(--navy);font-weight:800;font-size:.85rem}
.proof-strip .stars{color:#fbbc04;display:inline-flex;gap:1px}
.proof-strip__txt{font-weight:500}
@media(max-width:600px){.proof-strip__link{font-size:.86rem;padding:10px var(--space-2)}}
/* proof beside every lead form */
.form-proof{display:flex;flex-direction:column;gap:6px;margin:0 0 var(--space-2);padding:12px 14px;
  background:var(--ice);border:1px solid var(--border);border-radius:var(--radius-sm);text-align:left}
.form-proof .stars{color:#fbbc04;display:inline-flex;gap:1px}
.form-proof__fig{font-family:var(--ff-head);font-weight:700;font-size:.92rem;color:var(--ink)}
.form-proof__quote{font-size:.86rem;line-height:1.55;color:var(--muted);text-align:left}
.form-proof__by{display:block;font-weight:600;color:var(--ink-2);margin-top:2px}
/* numbered how-it-works */
.process{counter-reset:wcstep}
.process__step{position:relative;counter-increment:wcstep}
.process__step h3::before{content:counter(wcstep);display:inline-grid;place-items:center;
  width:30px;height:30px;margin-right:10px;border-radius:50%;background:var(--action);color:#fff;
  font-family:var(--ff-head);font-weight:800;font-size:.95rem;vertical-align:middle}
/* guarantee / offer block (no photographs by design) */
.guar-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:var(--space-3)}
.guar-card{background:#fff;border:1px solid var(--border);border-radius:var(--radius);
  padding:var(--space-3);box-shadow:var(--shadow)}
.guar-card h3{margin:0 0 8px;font-size:1.05rem}
.guar-card p{margin:0;color:var(--muted);font-size:.95rem;text-align:left}
/* who-we-are */
.whoweare__inner{display:grid;grid-template-columns:1.35fr 1fr;gap:var(--space-4);align-items:center}
.whoweare__copy p{text-align:left}
.whoweare__photo img{width:100%;height:auto;border-radius:var(--radius);display:block}
@media(max-width:860px){.whoweare__inner{grid-template-columns:1fr}}
/* trust chips in the hero render as discrete bounded pills */
.hero__points{display:flex;flex-wrap:wrap;gap:var(--space-1);list-style:none;padding:0;margin:var(--space-2) 0}
.hero__points li{display:inline-flex;align-items:center;background:rgba(255,255,255,.12);
  border:1px solid rgba(255,255,255,.32);border-radius:var(--radius-pill);
  padding:7px 14px;font-size:.9rem;font-weight:600;line-height:1.25}
.hero__points li::before{content:none}
/* reviews render as a static grid - no carousel, no scroll-jacking */
.rev-carousel{display:block}
.rev-track{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:var(--space-3);
  overflow:visible;scroll-snap-type:none}
.rev-track .rev-card{flex:none;width:auto;text-align:left}
.review-band .rev-card blockquote,.review-band .rev-card figcaption,.review-band .rev-job{text-align:left}
.rev-job{display:block;font-size:.82rem;font-weight:700;color:var(--action);
  text-transform:uppercase;letter-spacing:.04em;margin-top:4px}
/* prose is never centred */
.section__lead{text-align:left}
.img-credits{text-align:left;border-top:1px solid var(--border);padding-top:12px;font-size:.78rem}
.prose p,.container.prose p{text-align:left}
/* adjacent same-tint bands announce themselves */
.section--white + .section--white,.section--ice + .section--ice,
.section--grey + .section--grey,.section--navy + .section--navy{
  border-top:1px solid var(--border);padding-top:calc(var(--space-5) + var(--space-3))}

.area-links{list-style:none;display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;padding:0;margin:0 0 var(--space-3)}
.area-links a{display:block;background:#fff;border:1px solid var(--border);border-radius:var(--radius-sm);padding:12px 14px;font-family:var(--ff-head);font-weight:600}
.rev-foot__alt{display:inline-block;margin-left:12px;font-size:.9rem}
.area-link__name{display:block;font-family:var(--ff-head);font-weight:700}
.area-link__cta{display:block;font-size:.82rem;color:var(--action);font-weight:600;margin-top:2px}
.result-note{font-family:var(--ff-head);font-weight:700;font-size:.85rem;text-transform:uppercase;letter-spacing:.04em;color:var(--action);margin-bottom:4px}
.closing-form .quote-form{max-width:760px;margin:0 auto}

/* ===== L5 batch 2 2026-09-01: live-measured fixes ===== */
/* row 204/253: the proof band must not share the hero's tint */
.proof-strip{background:var(--ice);border-bottom:3px solid var(--action)}
.proof-strip__link{color:var(--navy)}
.proof-strip__link:hover{background:rgba(11,43,65,.06)}
.proof-strip__g{background:var(--navy);color:#fff}
/* row 262: ONE prose left edge - one shared reading measure, flush to the band edge */
.container.prose{max-width:var(--container)}
.container.prose > p{max-width:72ch;margin-left:0}
.section__lead{max-width:72ch;margin:0 0 2rem;text-align:left}
/* row 264/262: citation footnote sits on the band edge, under a hairline, below body size */
.img-credits{margin-left:0;margin-right:0;max-width:none;text-align:left;
  border-top:1px solid var(--border);padding-top:12px;font-size:.78rem}
/* row 262: the how-it-works steps are a column grid, not band-level prose */
.process,.process-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:var(--space-3)}

/* ===== L5 batch 3 2026-09-01: geographic maps + origin-to-neighbour directions ===== */
.nearby-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:var(--space-3)}
.nearby-map{margin:0;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;background:#fff}
.nearby-map .map-embed{margin:0}
.nearby-map figcaption{padding:12px 14px;font-family:var(--ff-head);font-weight:600;font-size:.92rem;text-align:left}
.dir-card--pair{background:#fff;border:1px solid var(--border);border-radius:var(--radius);
  padding:var(--space-3);box-shadow:var(--shadow)}
.dir-card--pair h3{margin:0 0 10px;font-size:1.02rem}
.dir-field{margin:0 0 6px;font-size:.94rem;text-align:left}
.dir-label{font-family:var(--ff-head);font-weight:700;color:var(--ink-2)}
.dir-note{margin-top:var(--space-3);font-size:.82rem;color:var(--muted);text-align:left;
  border-top:1px solid var(--border);padding-top:12px}
.area-card__blurb{display:block;margin-top:8px;font-size:.86rem;line-height:1.55;
  color:rgba(255,255,255,.85);font-weight:400;text-align:left}

/* ===== L5 batch 4 2026-09-01 ===== */
/* row 186: band headings stay on the page centre axis; only prose takes the measure */
.container.prose > h2,.container.prose > h3{max-width:none}
/* row 244: every class token in the markup resolves to a rule */
.guarantee{background:var(--white)}
.whoweare{overflow:hidden}
.area-link{display:block}
.page-meta{margin:0}
.phone-link{font-weight:600}
.brand__name{font-family:var(--ff-head)}
.quote-form--compact{width:100%}
.site-footer__col{min-width:0}

/* L5 same-tint boundary guard */
.section--white+.section--white,.section--grey+.section--grey,.section--ice+.section--ice,.section--navy+.section--navy{border-top:1px solid var(--border);padding-top:96px}
.section--navy+.section--navy{border-top-color:rgba(255,255,255,.25)}

/* L5 adjacent-band differentiation + orphan-class resolution */
.hero+.trust-strip{background:linear-gradient(180deg,#10405f,#0b2b41);border-top:1px solid rgba(255,255,255,.18)}
.review-band+.section--ice{background:var(--grey)}
.home-uplink{margin:0}
.related-services{margin:0}
.local-res{margin:0}
.local-res__checked{font-weight:600}

/* L5 trust-strip band separation */
.trust-strip{background:linear-gradient(180deg,#10405f,#0b2b41);border-top:1px solid rgba(255,255,255,.18)}

/* L5 numbered how-it-works steps */
.process{counter-reset:wcstep}
.process__step h3::before{counter-increment:wcstep;content:counter(wcstep) ". ";color:var(--action);font-weight:800}

/* SCORER 2026-09-02: 44px minimum tap target on the mobile nav toggle (measured 38x28 at 375) */
.nav-toggle{min-width:44px;min-height:44px;display:inline-flex;align-items:center;justify-content:center}

/* SCORER 2026-09-02: town-link list collapses to a single track at 375 */
@media (max-width:480px){.area-links{grid-template-columns:1fr}}

/* === 2026-09-16 (Jeff) hero estimate-form first-load fit ===
   Top-align hero columns so the estimate form is not vertically centered and pushed
   below the fold on tall money/service heroes, and make the .quote-form--compact hero
   form genuinely compact. Scoped to the hero compact form; the closing .quote-form
   (non-compact) is untouched. Applied file-level over the generator output; port to
   src to survive `node build.mjs`. */
.hero__inner{align-items:start}
.quote-form--compact{padding:16px 20px}
.quote-form--compact .quote-form__title{font-size:1.35rem;margin-bottom:.3rem}
.quote-form--compact .quote-form__sub{margin-bottom:.5rem}
.quote-form--compact label{margin-bottom:4px}
.quote-form--compact .quote-form__row{gap:10px}
.quote-form--compact input,.quote-form--compact select,.quote-form--compact textarea{padding:9px 11px}
.quote-form--compact textarea{min-height:52px}

/* === 2026-09-16 R468/R308 sprint-AB === */
/* R468: balance the homepage dark band's short prose column beside the taller booking form */
.bb-dark .cols-2{align-items:center}
/* R308: give structural hook classes an explicit rule so no class token is orphaned (no visual change; media-col min-width:0 also prevents grid overflow) */
.article,.hero__content,.entity-block{display:block}
.media-col{min-width:0}

/* ===== from css/bluebird-layout.css (all pages) ===== */
/* bluebird-layout.css — W Contracting Roofing (w-contracting.ca), Bluebird layout (2026-09-13).
   Ported from the Clear Exteriors v2 pilot Dylan approved (bluebird-pilot.css) via the Diakite port,
   re-pointed at W Contracting's OWN :root tokens in css/styles.6006dc95bc.css: --navy #0B2B41,
   --action #D13800 (the only click colour), --action-dark, --ice #eef4f8, --grey, --border,
   Poppins (--ff-head) + Inter (--ff-body). LAYOUT ONLY: pages are the live HTML with existing
   blocks moved into Bluebird rows. Loads AFTER the site stylesheet; a page without bb-* classes is
   unaffected. A NEW filename (not the immutable hashed sheet) so no ?v= bump of the old sheet. */

/* ---------- bands ---------- */
section.section.bb-band { padding: 84px 0 !important; border-top: 0 !important; }
section.section.bb-white { background: var(--white) !important; color: var(--ink); }
section.section.bb-pale { background: var(--ice) !important; color: var(--ink); }
section.section.bb-dark { background: linear-gradient(150deg, var(--navy) 0%, #13405e 100%) !important; color: rgba(255,255,255,.9); }
.bb-white h2, .bb-pale h2, .bb-white h3, .bb-pale h3 { color: var(--navy); }
.bb-dark h2, .bb-dark h3 { color: #fff; }
.bb-dark p, .bb-dark li { color: rgba(255,255,255,.9); }
.bb-dark a:not(.btn):not(.bb-pill):not(.area-card) { color: #ffb38f; }
.bb-dark .eyebrow { color: #ffb38f; }
.bb-band .section__title { margin-bottom: 1.2rem; }
.bb-band h2 { font-size: clamp(1.7rem, 3vw, 2.35rem); line-height: 1.18; }
.bb-center-head > .container > .eyebrow, .bb-center-head > .container > h2 { text-align: center; }

/* ---------- 2-column photo | card rows (Bluebird reference §8) ---------- */
.bb-row { display: grid; grid-template-columns: .9fr 1.1fr; gap: 34px; align-items: stretch; }
.bb-row-rev { grid-template-columns: 1.1fr .9fr; }
.bb-row-rev > .bb-media { order: 2; }
.bb-media { position: relative; border-radius: var(--radius); overflow: hidden; min-height: 440px; box-shadow: var(--shadow); background: var(--navy); margin: 0; }
.bb-media > img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: center 55%; position: absolute; inset: 0; border-radius: 0; aspect-ratio: auto; }
.bb-card { border-radius: var(--radius); padding: 44px 46px; align-self: center; min-width: 0; }
.bb-card-dark { align-self: stretch; background: linear-gradient(150deg, var(--navy) 0%, #13405e 100%); display: flex; flex-direction: column; justify-content: center; }
.bb-card-dark h2, .bb-card-dark h3, .bb-card-dark strong, .bb-card-dark summary { color: #fff !important; }
.bb-card-dark p, .bb-card-dark li, .bb-card-dark .acc__body { color: rgba(255,255,255,.9) !important; }
.bb-card-dark a:not(.btn) { color: #ffb38f !important; }
.bb-card-dark .eyebrow { color: #ffb38f !important; }
.bb-card-plain { padding: 16px 8px; }
.bb-card .eyebrow, .bb-card .section__title { text-align: left; }
.bb-card h2 { font-size: clamp(1.55rem, 2.6vw, 2.1rem); }
.bb-card p { margin: 0 0 .9em; max-width: 68ch; }
.bb-card .section__lead { margin: 0 0 1rem; color: inherit; }
.bb-media-note { position: absolute; left: 0; right: 0; bottom: 0; padding: 22px 24px; background: linear-gradient(180deg, rgba(8,31,48,0) 0%, rgba(8,31,48,.92) 38%); }
.bb-media-note h3 { color: #fff !important; font-size: 1.05rem; margin: 0 0 4px; }
.bb-media-note figcaption { color: rgba(255,255,255,.9) !important; font-size: .88rem !important; padding: 0 !important; margin: 0; }
/* dark-card accordions + tables */
.bb-card-dark .acc { background: rgba(255,255,255,.06); border-color: rgba(255,255,255,.18); max-width: none; }
.bb-card-dark .acc summary { color: #fff; }
.bb-card-dark .acc summary::after { color: #ffb38f; }
.bb-card-dark [data-tblwrap] { border-radius: 10px; }
.bb-card-dark .cmp-table td { color: var(--ink) !important; }
.bb-card-dark .cmp-table tr td:first-child { color: var(--navy) !important; }
.bb-card-dark .prose, .bb-card .prose { max-width: none; margin: 0; }

/* icon rows (why-us benefit boxes, community cards) */
.bb-icon-rows { list-style: none; display: grid; gap: 16px; margin: 18px 0 8px; padding: 0; }
.bb-icon-rows > li { display: flex; gap: 14px; align-items: flex-start; }
.bb-icon-rows > li::before { content: ""; flex: none; width: 12px; height: 12px; margin-top: 8px; border-radius: 3px; background: var(--action); transform: rotate(45deg); }
.bb-icon-rows h3 { font-size: 1.04rem; margin: 0 0 4px; }
.bb-icon-rows p { font-size: .95rem; margin: 0; }

/* ---------- "More about …" disclosure ---------- */
.bb-more-about { margin-top: 18px; }
.bb-more-about > summary { display: inline-flex; align-items: center; gap: 8px; cursor: pointer; list-style: none; font-family: var(--ff-head); font-weight: 700; font-size: .9rem; padding: 10px 18px; border-radius: 999px; border: 1.5px solid currentColor; }
.bb-more-about > summary::-webkit-details-marker { display: none; }
.bb-more-about > summary::after { content: "+"; font-size: 1.1em; line-height: 1; }
.bb-more-about[open] > summary::after { content: "\2013"; }
.bb-more-body { margin-top: 20px; text-align: left; }
.bb-more-body > * + * { margin-top: 14px; }
.bb-more-body h3 { margin: 22px 0 8px; font-size: 1.15rem; }
.bb-more-body .section__title, .bb-more-body .eyebrow { text-align: left; }
.bb-more-body .container, .bb-more-body .prose { padding: 0; max-width: none; }
.bb-card-dark .bb-more-about > summary, .bb-dark .bb-more-about > summary { color: #ffb38f !important; }
.bb-white .bb-more-about > summary, .bb-pale .bb-more-about > summary { color: var(--navy); }
.bb-dark .bb-more-body { background: rgba(255,255,255,.05); border: 1px solid rgba(255,255,255,.14); border-radius: var(--radius); padding: 22px 26px; }
.bb-dark .bb-more-body .dir-card { background: #fff; }
.bb-dark .bb-more-body .dir-card h3 { color: var(--navy) !important; }
.bb-dark .bb-more-body .dir-card p { color: var(--ink-2) !important; }
.bb-more-body figure img { max-width: 100%; height: auto; border-radius: 10px; display: block; }
.bb-sub { margin-top: 56px; }
.bb-sub > .eyebrow, .bb-sub > h3 { text-align: center; }
.bb-sub > h3 { font-size: clamp(1.3rem, 2.2vw, 1.7rem); margin-bottom: 18px; }

/* ---------- how-it-works journey (reference §6): white "Step : 0N" cards on dark ---------- */
.bb-how .process { grid-template-columns: repeat(4, minmax(0,1fr)); gap: 22px; counter-reset: bbstep; }
.bb-how .trust-boxes { grid-template-columns: repeat(3, minmax(0,1fr)); gap: 22px; }
.bb-how .process__step, .bb-how .trust-box { background: #fff; border: 0; border-radius: var(--radius); padding: 30px 22px 28px; text-align: center; box-shadow: 0 10px 30px rgba(0,0,0,.22); }
.bb-how .process__step { counter-increment: bbstep; }
.bb-how .process__step::before { content: "Step : 0" counter(bbstep); display: inline-block; background: var(--action); color: #fff; font-family: var(--ff-head); font-weight: 800; font-size: .8rem; letter-spacing: .03em; line-height: 1; padding: 7px 16px; border-radius: 999px; margin: 0 0 16px; }
.bb-how .process__step h3::before { content: none !important; }
.bb-how .process__step h3, .bb-how .trust-box h3 { color: var(--navy) !important; font-size: 1.08rem; margin: 0 0 10px; }
.bb-how .process__step p, .bb-how .trust-box p { color: var(--ink-2) !important; font-size: .94rem; line-height: 1.6; margin: 0; text-align: center; }
.bb-offer-steps { margin-top: 62px; }
.bb-offer-steps > .eyebrow, .bb-offer-steps > h3 { text-align: center; }
.bb-offer-steps > h3 { color: #fff !important; font-size: clamp(1.4rem, 2.4vw, 1.9rem); margin-bottom: 26px; }

/* ---------- the ONE mid-page strip ---------- */
.bb-strip .fin-callout { max-width: 900px; margin: 0 auto; background: rgba(255,255,255,.06); border: 1px solid rgba(255,183,143,.45); border-left: 5px solid var(--action); color: #fff; }
.bb-strip .fin-callout strong { color: #fff; }
section.section.bb-strip { padding: 44px 0 !important; }
/* home offer (dark band) cards */
.bb-dark .guar-card { background: rgba(255,255,255,.06); border-color: rgba(255,255,255,.18); box-shadow: none; }
.bb-dark .guar-card h3 { color: #fff !important; }
.bb-dark .guar-card p { color: rgba(255,255,255,.86) !important; }

/* ---------- reviews on a white band ---------- */
.bb-reviews .rev-head { text-align: center; }
.bb-reviews .rev-foot { text-align: center; }
.bb-reviews .rev-track { display: grid; grid-template-columns: none; grid-auto-flow: column; grid-auto-columns: calc((100% - 44px) / 3); gap: 22px; overflow-x: auto; scroll-snap-type: x mandatory; padding: 6px 2px 18px; }
.bb-reviews .rev-track > .rev-card { scroll-snap-align: start; position: relative; }
.bb-reviews .rev-track { position: relative; }
.bb-reviews .jobcards { margin-top: 8px; }

/* ---------- FAQ: pale band, navy pill rows, row 1 open ---------- */
.bb-faq .acc { border: 0; box-shadow: var(--shadow); border-radius: 12px; max-width: 896px; }
.bb-faq .acc summary { background: var(--navy); color: #fff; border-radius: 12px; }
.bb-faq .acc[open] summary { border-radius: 12px 12px 0 0; }
.bb-faq .acc summary::after { color: #ffb38f; }
.bb-faq .acc__body { padding-top: 16px; color: var(--ink); }
.bb-faq .container.prose { max-width: var(--container); }
.bb-faq .container.prose > p { max-width: 896px; margin-left: auto; margin-right: auto; text-align: center; }

/* ---------- service areas: dark band, text + pills LEFT | map RIGHT ---------- */
.bb-areas-grid { display: grid; grid-template-columns: 1.1fr .9fr; gap: 48px; align-items: stretch; }
.bb-areas-text .eyebrow, .bb-areas-text .section__title, .bb-areas-text h3 { text-align: left !important; }
.bb-areas-text .section__lead { color: rgba(255,255,255,.9); margin: 0 0 1rem; }
.bb-pills { display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: 10px; margin: 18px 0; justify-content: stretch; }
.bb-pills .chip, a.bb-pill { display: flex; align-items: center; gap: 8px; padding: 11px 14px; border-radius: 999px; background: var(--action) !important; color: #fff !important; border: 0; font-family: var(--ff-head); font-weight: 600; font-size: .86rem; line-height: 1.25; text-decoration: none; }
.bb-pills .chip::before, a.bb-pill::before { content: ""; flex: none; width: 8px; height: 8px; border-radius: 50%; background: #fff; }
.bb-pills .chip--all { background: #fff !important; color: var(--navy) !important; grid-column: 1 / -1; justify-content: center; }
.bb-pills .chip--all::before { background: var(--action); }
.bb-areas-map { min-height: 420px; }
.bb-areas-map .map-embed { height: 100%; border-color: rgba(255,255,255,.18); }
.bb-areas-map .map-embed iframe { height: 100%; min-height: 420px; }
.bb-areas-text .dir-grid { grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 12px; }
.bb-dark .dir-card, .bb-dark .dir-card--pair { background: rgba(255,255,255,.06); border: 1px solid rgba(255,255,255,.18); border-left: 4px solid var(--action); box-shadow: none; }
.bb-dark .dir-card h3 { color: #fff !important; }
.bb-dark .dir-card p, .bb-dark .dir-note { color: rgba(255,255,255,.86) !important; border-top-color: rgba(255,255,255,.2); }
.bb-nearby { margin-top: 36px; }
.bb-nearby .nearby-map { background: rgba(255,255,255,.06); border-color: rgba(255,255,255,.18); }
.bb-nearby .nearby-map figcaption { color: #fff; }
.bb-local-contact { margin-top: 26px; padding-top: 22px; border-top: 1px solid rgba(255,255,255,.2); }
.bb-related { margin-top: 40px; padding: 26px 30px; border-radius: var(--radius); background: rgba(255,255,255,.06); border: 1px solid rgba(255,255,255,.14); }
.bb-related .eyebrow, .bb-related h3 { text-align: left; }
.bb-related p { margin: 0; }

/* ---------- city: service chips "<Service> in <City>" (reference §5.2) ---------- */
.bb-chips { display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: 10px; margin: 16px 0 14px; }
a.bb-chip { display: flex; align-items: center; gap: 10px; padding: 12px 14px; border-radius: 10px; background: var(--navy); color: #fff !important; font-family: var(--ff-head); font-weight: 600; font-size: .9rem; text-decoration: none; line-height: 1.25; }
a.bb-chip::before { content: ""; flex: none; width: 10px; height: 10px; border-radius: 2px; background: var(--action); transform: rotate(45deg); }
a.bb-chip:hover { background: #13405e; }
.bb-chips-head { font-size: 1.05rem !important; margin: 18px 0 0 !important; }
.bb-card-plain > p[style] { text-align: left !important; }

/* ---------- city: town-knowledge panel ---------- */
.bb-town-panel { max-width: 940px; margin: 0 auto; background: #fff; border: 1px solid var(--border); border-radius: var(--radius); padding: 38px 44px; box-shadow: var(--shadow); text-align: left; }
.bb-town-panel p { margin: 0 0 .9em; }
.bb-center-head .bb-town-panel .bb-more-about { text-align: left; }

/* ---------- credentials strip folded under a row ---------- */
.bb-creds .trust-boxes { grid-template-columns: repeat(4, minmax(0,1fr)); }

/* ---------- directions (reference §5.9): 3 cards "From <town>" ---------- */
.bb-directions .dir-card { background: var(--navy); border: 0; border-top: 4px solid var(--action); }
.bb-directions .dir-card h3 { color: #fff !important; }
.bb-directions .dir-card p { color: rgba(255,255,255,.9) !important; }
.bb-directions .map-embed { margin-top: 22px; }
.bb-directions > .container > .section__lead { margin-left: auto; margin-right: auto; text-align: center; }
.bb-directions .bb-more-about { text-align: center; }
.bb-directions .bb-more-body { text-align: left; }

/* ---------- service-areas hub ---------- */
.bb-hub-hero { background: linear-gradient(100deg, rgba(8,31,48,.94) 0%, rgba(11,43,65,.86) 100%), url(/assets/img/roof-replacement-saskatoon-finished-hip-roof.webp) center/cover; color: #fff; padding: 72px 0 64px; text-align: center; }
@media (max-width: 768px) { .bb-hub-hero { background: linear-gradient(100deg, rgba(8,31,48,.94) 0%, rgba(11,43,65,.86) 100%), url(/assets/img/roof-replacement-saskatoon-finished-hip-roof-mobile-crop.webp) center/cover; } }
.bb-hub-hero h1 { color: #fff; margin: 0 auto 14px; max-width: 900px; }
.bb-hub-hero .eyebrow { color: #ffb38f; }
.bb-hub-hero p { color: #dce6ee; max-width: 760px; margin: 0 auto 10px; text-align: center; }
.bb-hub-hero a:not(.btn) { color: #ffb38f; }
.bb-towns .area-grid > * { flex: 0 1 calc(25% - 15px); min-width: 0; }

/* ---------- closing CTA (reference §2.8): centered ---------- */
.cta-band.bb-cta .cta-band__inner { flex-direction: column; justify-content: center; text-align: center; padding: 80px 20px 72px; }
.cta-band.bb-cta .eyebrow { text-align: center; }
.cta-band.bb-cta h2 { font-size: clamp(1.8rem, 3.4vw, 2.6rem); }
.cta-band.bb-cta p { margin: 0 auto; }
.cta-band.bb-cta .cta-band__actions { justify-content: center; }

/* ---------- home ---------- */
.bb-home-lead { max-width: 820px; margin: 0 auto 30px; text-align: center; }
.bb-home-lead h3 { font-size: clamp(1.25rem, 2vw, 1.55rem); margin: 0 0 6px; }
.bb-home-lead p { text-align: center !important; }
.bb-dark .whoweare__photo img, .bb-row .whoweare__photo img { border-radius: 0; }
.bb-areas-text .area-links { grid-template-columns: repeat(3, minmax(0,1fr)); gap: 10px; }
.bb-areas-text .area-links a { background: var(--action); border: 0; border-radius: 999px; color: #fff; padding: 10px 14px; }
.bb-areas-text .area-link__name { color: #fff; font-size: .9rem; }
.bb-areas-text .area-link__cta { color: rgba(255,255,255,.88); font-size: .74rem; }
.bb-areas-text .img-credits { color: rgba(255,255,255,.7); border-top-color: rgba(255,255,255,.2); }
.bb-areas-text .img-credits a { color: #ffb38f; }
.bb-storm { margin-top: 26px; padding-top: 22px; border-top: 1px solid rgba(255,255,255,.2); }
.bb-storm .storm-strip { background: none; }
.bb-storm .storm-strip .container { padding: 0 0 12px; }

/* ---------- mobile: one column, IMAGE FIRST, no horizontal overflow ---------- */
@media (max-width: 1020px) {
  .bb-how .process { grid-template-columns: repeat(2, minmax(0,1fr)); }
  .bb-creds .trust-boxes { grid-template-columns: repeat(2, minmax(0,1fr)); }
  .bb-reviews .rev-track { grid-auto-columns: calc((100% - 22px) / 2); }
  .bb-towns .area-grid > * { flex: 0 1 calc(50% - 10px); }
}
@media (max-width: 860px) {
  section.section.bb-band { padding: 56px 0 !important; }
  .bb-row, .bb-row-rev, .bb-areas-grid { grid-template-columns: minmax(0,1fr); gap: 0; }
  .bb-row > .bb-media, .bb-row-rev > .bb-media { order: -1; min-height: 240px; border-radius: var(--radius) var(--radius) 0 0; }
  .bb-card { padding: 26px 20px; border-radius: 0 0 var(--radius) var(--radius); }
  .bb-card-plain { padding: 22px 4px 0; }
  .bb-media:has(.bb-media-note) { display: flex; flex-direction: column; }
  .bb-media:has(.bb-media-note) > img { position: static; height: 260px; }
  .bb-media-note { position: static; background: var(--navy); }
  .bb-areas-map { margin-top: 26px; min-height: 300px; }
  .bb-areas-map .map-embed iframe { min-height: 300px; }
  .bb-pills, .bb-areas-text .area-links { grid-template-columns: repeat(2, minmax(0,1fr)); }
  .bb-town-panel { padding: 24px 18px; }
  .bb-reviews .rev-track { grid-auto-columns: 86%; }
  .bb-how .trust-boxes { grid-template-columns: minmax(0,1fr); }
}
@media (max-width: 560px) {
  .bb-how .process, .bb-chips, .bb-creds .trust-boxes { grid-template-columns: minmax(0,1fr); }
  .bb-towns .area-grid > * { flex: 0 1 100%; }
  .bb-dark .bb-more-body { padding: 16px 12px; }
  .bb-card-dark [data-tblwrap] { margin-left: -6px; margin-right: -6px; }
}
/* fixes after the first render read */
.bb-dark .dir-label { color: #ffb38f !important; }
.bb-areas-text > .eyebrow + h2, .bb-areas-text > .eyebrow + h3 { margin-top: 0; }
.bb-areas-text > * + .eyebrow { margin-top: 26px; }
.bb-areas-text h3 { margin-top: 22px; }
.bb-areas-text .map-link, .bb-areas-text p[style] { text-align: left !important; }
.bb-reviews .rev-track > .rev-card { width: auto; justify-self: stretch; }

/* ---------- sitewide nav: Service Areas dropdown lists every town; mobile tap-to-expand (Dylan 09-13) ---------- */
.sub-toggle { display: none; }
.main-nav .has-sub > .sub { max-height: calc(100vh - 120px); overflow-y: auto; }
@media (max-width: 1060px) {
  body.nav-open .main-nav { padding-bottom: 84px; }
  body.nav-open .main-nav .has-sub { position: relative; }
  body.nav-open .main-nav .has-sub > a { padding-right: 52px; }
  body.nav-open .main-nav .has-sub > .sub { display: none; max-height: none; overflow: visible; }
  body.nav-open .main-nav .has-sub.is-open > .sub { display: block; }
  .sub-toggle { display: block; position: absolute; right: 0; top: 0; width: 48px; height: 38px; border: 0; background: transparent; cursor: pointer; border-radius: var(--radius-sm); }
  .sub-toggle::before { content: "+"; font-family: var(--ff-head); font-weight: 700; font-size: 1.35rem; line-height: 38px; color: var(--action); }
  .has-sub.is-open > .sub-toggle::before { content: "\2013"; }
  .sub-toggle:focus-visible { outline: 3px solid var(--blue-bright); outline-offset: -3px; }
}

/* ---------- chrome fixes found on the 2026-09-13 screenshot read (pre-existing on live, fixed here) ---------- */
/* the 09-02 44px tap-target rule re-displayed the hamburger at desktop widths, squeezing "Free Estimate" onto 2 lines */
@media (min-width: 1061px) { .site-header .nav-toggle { display: none !important; } }
/* footer logo is black artwork on the navy footer: give it the same white chip the header sits on */
.site-footer__col > img:first-child { background: #fff; border-radius: 10px; padding: 6px; box-sizing: content-box; }
/* hero copy sat flush against the screen edge on phones: the hero's own padding shorthand zeroed the container gutter */
.hero .container.hero__inner { padding-left: 20px; padding-right: 20px; }

/* ===== from css/layout-20260923.css (all pages) ===== */
/* layout-20260923.css -- W Contracting Roofing, website-sprint lane L4 (home-layout), 2026-09-23.
   Loaded after styles.<hash>.css + bluebird-layout.css. Uses the site's own :root tokens only
   (--navy, --action, --ice, --white, --border, --radius, --container). */

/* ---------- R475 home trust band: static row of real text marks, wraps on phones ---------- */
.trust-strip--marks, .trust-strip--marks * { animation: none !important; }
.trust-strip--marks ul { flex-wrap: wrap; overflow: visible; gap: 12px 40px; }
.trust-strip--marks li { flex: 0 1 auto; min-width: 0; }
.trust-strip--marks a { white-space: normal; }
.trust-strip--marks span { max-width: 240px; line-height: 1.35; margin-top: 2px; }
@media (max-width: 640px) {
  .trust-strip--marks ul { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px 12px; padding: 16px; }
  .trust-strip--marks strong { font-size: 1.2rem; }
  .trust-strip--marks span { font-size: .72rem; max-width: none; }
}

/* ---------- R298 home: storm response band (split out of the service-areas band) ---------- */
.bb-storm-band .bb-storm { margin: 0; padding: 0; border: 0; display: grid;
  grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); column-gap: 56px; row-gap: 0; align-items: start; }
.bb-storm-band .bb-storm > * { grid-column: 1; }
.bb-storm-band .bb-storm > .storm-strip { grid-column: 2; grid-row: 1 / span 6; align-self: center;
  background: linear-gradient(100deg, #7a1500, var(--action)); color: #fff; border-radius: var(--radius); }
.bb-storm-band .bb-storm > .storm-strip .container { padding: 30px 28px; max-width: none; }
.bb-storm-band .bb-storm > .storm-strip p { color: #fff; }
.bb-storm-band .bb-storm > .eyebrow { text-align: left !important; margin-top: 0; }
.bb-storm-band .bb-storm > h2 { color: var(--navy); text-align: left; margin-top: 0; }
@media (max-width: 860px) {
  .bb-storm-band .bb-storm { grid-template-columns: minmax(0, 1fr); }
  .bb-storm-band .bb-storm > .storm-strip { grid-column: 1; grid-row: auto; margin-bottom: 26px; }
}

/* ---------- R298/R299 split bands: heading column | body column (a real split layout) ---------- */
.bb-split-band .bb-split { max-width: none; }
.bb-split__body { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
  column-gap: 56px; row-gap: 0; align-items: start; }
.bb-split__body > * { grid-column: 2; }
.bb-split__body > h2 { grid-column: 1; grid-row: 1 / span 8; margin-top: 0; text-align: left; }
.bb-split__body > p:first-of-type { margin-top: 0; }
@media (max-width: 860px) {
  .bb-split__body { grid-template-columns: minmax(0, 1fr); }
  .bb-split__body > h2, .bb-split__body > * { grid-column: 1; grid-row: auto; }
}

/* ---------- R326 ONE prose left edge: band-level text starts at the container edge ----------
   Centred one-line elements (eyebrows, band headings, button rows, the closing-CTA line) keep their
   centred text but take the full container width, the same convention row 186 set for headings.
   Multi-line prose sits flush-left on the shared 72ch measure (row 262 convention). */
.cta-band.bb-cta .cta-band__inner > div:first-child { align-self: stretch; }
.cta-band.bb-cta .cta-band__inner > div:first-child p { max-width: none; }
.bb-faq .container.prose > p { max-width: none; }
.bb-directions > .container > .section__lead { max-width: none; }
.container.prose > blockquote.prose { max-width: none; margin-left: 0; margin-right: 0; }
[data-l4-split] > .container > .prose { max-width: none; margin-left: 0; margin-right: 0; }
[data-l4-split] > .container > .prose > p { max-width: 72ch; }
[data-l4-split] > .container > .prose > .section__title { text-align: left; }
.ty-next, .ty-proof { max-width: none !important; }
[data-section="content"] > .container[style*="780px"] { max-width: var(--container) !important; }
[data-section="content"] > .container[style*="780px"] > .square-embed { max-width: 740px; margin-left: auto; margin-right: auto; }

/* home services intro: heading column | lead column (a split, replaces the centred 820px island) */
.bb-home-lead.bb-split-lead { max-width: none; margin: 0 0 34px; text-align: left; display: grid;
  grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); grid-template-rows: auto 1fr; column-gap: 56px; row-gap: 0; align-items: start; }
.bb-home-lead.bb-split-lead > .eyebrow, .bb-home-lead.bb-split-lead > h3 { grid-column: 1; text-align: left !important; }
.bb-home-lead.bb-split-lead > p.lead { grid-column: 2; grid-row: 1 / span 2; margin: 0; text-align: left !important; }
@media (max-width: 860px) {
  .bb-home-lead.bb-split-lead { grid-template-columns: minmax(0, 1fr); }
  .bb-home-lead.bb-split-lead > p.lead { grid-column: 1; grid-row: auto; margin-top: 8px; }
}

/* blog: the closing form head + closing CTA share the article's 760px editorial column */
main:has(> article.article) > .closing-form > .container > .eyebrow,
main:has(> article.article) > .closing-form > .container > .section__title,
main:has(> [data-section="hub-head"]) > .closing-form > .container > .eyebrow,
main:has(> [data-section="hub-head"]) > .closing-form > .container > .section__title {
  max-width: 716px; margin-left: auto; margin-right: auto; }
main:has(> article.article) > .cta-band > .cta-band__inner,
main:has(> [data-section="hub-head"]) > .cta-band > .cta-band__inner { max-width: 760px; padding-left: 22px; padding-right: 22px; }
@media (max-width: 800px) {
  .article-wrap { padding-left: 20px !important; padding-right: 20px !important; }
  main:has(> article.article) > .cta-band > .cta-band__inner,
  main:has(> [data-section="hub-head"]) > .cta-band > .cta-band__inner { padding-left: 20px; padding-right: 20px; }
}
.cta-center > div:first-child { align-self: stretch; }
.cta-center > div:first-child > p { max-width: none; }

/* ---------- R299 stacked heading+paragraph runs -> 2-column mini-grid ---------- */
.bb-mini-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 26px 40px; margin: 1.6em 0; max-width: none; }
.bb-mini-grid__item > h3 { margin-top: 0; }
.bb-mini-grid__item > p:last-child { margin-bottom: 0; }
@media (max-width: 760px) { .bb-mini-grid { grid-template-columns: minmax(0, 1fr); } }

/* ---------- R470 real-job scenario block: heading + page sentence | verbatim review card ---------- */
.bb-scenario__grid { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: 28px 56px; align-items: center; }
.bb-scenario__head > .eyebrow, .bb-scenario__head > h2 { text-align: left !important; }
.bb-scenario__head > h2 { margin-top: 0; }
.bb-scenario__quote { margin: 0; background: #fff; border: 1px solid var(--border); border-left: 5px solid var(--action);
  border-radius: var(--radius); padding: 28px 30px; box-shadow: var(--shadow); }
.bb-scenario__quote blockquote { margin: 0 !important; padding: 0 !important; border: 0 !important; font-size: 1.05rem; line-height: 1.65; color: var(--ink); }
.bb-scenario__quote figcaption { margin-top: 12px; font-weight: 600; color: var(--navy); font-size: .92rem; }
@media (max-width: 860px) { .bb-scenario__grid { grid-template-columns: minmax(0, 1fr); } .bb-scenario__quote { padding: 22px 20px; } }

/* ---------- R165 service-areas hub: the town cards sit in a real 4-column CSS grid ---------- */
.bb-towns .area-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 20px; }
.bb-towns .area-grid > * { flex: none; min-width: 0; }
@media (max-width: 1100px) { .bb-towns .area-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 600px) { .bb-towns .area-grid { grid-template-columns: minmax(0, 1fr); } }

/* ===== from css/wc-sprint-20260923.css (all pages) ===== */
/* W Contracting website-sprint 2026-09-23, lane L2 "chrome".
   Loaded AFTER styles.<hash>.css and bluebird-layout.css on every page. Additions and
   overrides only; the hashed stylesheet is not edited. Sections:
   1. contrast fixes (sitecheck LOW_CONTRAST_TEXT, target >= 4.5:1 for small text)
   2. header collapse breakpoint (the full row overflowed at 1061-1179px)
   3. sticky quote edge tab (R474)
   4. lead-form dialog (R472)
   5. hero visual key + per-type overlay geometry (R473)
   6. keyed heroes on phones: chips + one dominant CTA inside the first ~600px (R76) */

/* ---------- 1. contrast ---------- */
/* promo bar links were #D13800 on navy #0B2B41 = 2.98:1; #ff8f63 on navy = 6.4:1 */
.promo-bar a,.promo-bar a .promo-proof,.promo-bar .promo-proof span{color:#ff8f63}
.promo-bar a:hover{color:#ffc4ab}
.promo-bar .promo-proof strong{color:#fff}
/* footer hours: same orange on navy (2.98:1) */
.site-footer .hours{color:#ff8f63}
/* links inside the dark hero copy (home-uplink / related-services): 2.98:1 -> 6.4:1 */
.hero p a:not(.btn),.hero .hero__content p a:not(.btn){color:#ff8f63}
/* links inside the WHITE cards that sit in the hero (rating card, quote form): #ffb38f on white was 1.74:1 */
.hero .hero-proof a,.hero .quote-form a:not(.btn),.hero .quote-form .phone-link{color:var(--action-dark,#A82C00)}
/* same white cards inside a dark band (home "why-us" form): beat .bb-dark a:not(...) #ffb38f */
.bb-dark .hero-proof a:not(.btn):not(.bb-pill):not(.area-card),
.bb-dark .quote-form a:not(.btn):not(.bb-pill):not(.area-card){color:var(--action-dark,#A82C00)}
/* breadcrumb links: #2081C3 on white 4.21:1 -> #1a6fa8 5.4:1 */
.crumbs a{color:#1a6fa8}
/* blue buttons: white on #2081C3 4.21:1 -> white on #1a6fa8 5.4:1 */
.btn--blue{background:#1a6fa8}
.btn--blue:hover{background:#155a88}
.sticky-call .sticky-call__quote{background:#1a6fa8!important}
/* orange in-body links on the ice card (4.43:1) */
.bb-card-plain p a:not(.btn){color:var(--action-dark,#A82C00)}
/* orange links on the pale-blue (#eef4f8) bands: 4.43:1 -> #A82C00 6.4:1 */
.section--ice a:not(.btn):not(.area-card):not(.bb-pill),.review-band .rev-head a,.review-band .rev-foot__alt{color:var(--action-dark,#A82C00)}
/* white cards on NAVY bands inherited the band's light text: card body text measured 1.27:1 and the
   process-step headings 1.00:1 (white on white) on /roof-replacement-cost-saskatoon,
   /emergency-roof-repair-saskatoon and /does-insurance-cover-hail-damage-saskatchewan */
.section--navy .trust-box p,.section--navy .trust-box li,.section--navy .process__step p{color:var(--ink-2,#3a3a3a)}
.section--navy .process__step h3{color:var(--navy,#0B2B41)}
/* ghost "Call" button on the white cost-calculator band was white on white (1.00:1) */
.wcalc__cta .btn--ghost{color:var(--navy,#0B2B41);border-color:var(--navy,#0B2B41)}
.wcalc__cta .btn--ghost:hover{background:rgba(11,43,65,.06)}
/* small navy heroes (/reviews /faq /financing /gallery /materials): the intro line was #1a1a1a on
   navy (1.19:1, unreadable) and its links #D13800 on navy (2.98:1) */
.page-hero-sm p,.page-hero-sm .home-uplink{color:#dce6ee}
.page-hero-sm a:not(.btn){color:#ff8f63}
/* blog hub cards: "Read the guide" ghost buttons were white on the white card (1.00:1) */
.rev-card .btn--ghost{color:var(--navy,#0B2B41);border-color:var(--navy,#0B2B41)}
.rev-card .btn--ghost:hover{background:rgba(11,43,65,.06)}
/* /pricing card footnote #777 on white 4.48:1 -> muted 5.9:1 */
.pricing-card .price-detail{color:var(--muted,#5a6470)}

/* ---------- 2. header: collapse to the menu button before the one-row header overflows ----------
   Measured on the 2026-09-23 pull: at 1061-1150px the header ran 3px past the viewport and
   "Free Estimate" wrapped to two lines. The full row fits from 1180px. These rules repeat the
   existing <=1060px menu rules for 1061-1179px; nothing about the dropdowns changes. */
@media (min-width:1061px) and (max-width:1179px){
  .site-header .main-nav,.site-header .site-header__cta,.site-header .header-phone{display:none}
  .site-header .site-header__inner .nav-toggle{display:inline-flex!important;margin-left:auto}
  body.nav-open .site-header .main-nav{display:block;position:absolute;top:100%;left:0;right:0;background:#fff;border-bottom:1px solid var(--border);padding:10px 10px 84px;max-height:calc(100vh - 64px);overflow-y:auto;-webkit-overflow-scrolling:touch}
  body.nav-open .main-nav>ul{flex-direction:column}
  body.nav-open .main-nav .has-sub{position:relative}
  body.nav-open .main-nav .has-sub>a{padding-right:52px}
  body.nav-open .main-nav .has-sub>.sub{display:none;position:static;opacity:1;visibility:visible;transform:none;box-shadow:none;border:0;padding-left:14px;max-height:none;overflow:visible}
  body.nav-open .main-nav .has-sub.is-open>.sub{display:block}
  .main-nav .sub-toggle{display:block;position:absolute;right:0;top:0;width:48px;height:38px;border:0;background:transparent;cursor:pointer;border-radius:var(--radius-sm)}
  .main-nav .sub-toggle::before{content:"+";font-family:var(--ff-head);font-weight:700;font-size:1.35rem;line-height:38px;color:var(--action)}
  .main-nav .has-sub.is-open>.sub-toggle::before{content:"\2013"}
}
/* optional top-level "Instant Estimate" nav item (transform flag --estimate-nav, OFF by default):
   the row then needs ~1275px, more than the 1180px container, so the header row gets a wider
   container and collapses to the menu button below 1350px (measured). */
.main-nav .nav-estimate>a{color:var(--action-dark,#A82C00);font-weight:600}
.site-header--wide .container.site-header__inner{max-width:1330px}
@media (min-width:1180px) and (max-width:1349px){
  .site-header--wide .main-nav,.site-header--wide .site-header__cta,.site-header--wide .header-phone{display:none}
  .site-header--wide .site-header__inner .nav-toggle{display:inline-flex!important;margin-left:auto}
  body.nav-open .site-header--wide .main-nav{display:block;position:absolute;top:100%;left:0;right:0;background:#fff;border-bottom:1px solid var(--border);padding:10px 10px 84px;max-height:calc(100vh - 64px);overflow-y:auto}
  body.nav-open .site-header--wide .main-nav>ul{flex-direction:column}
  body.nav-open .site-header--wide .main-nav .has-sub{position:relative}
  body.nav-open .site-header--wide .main-nav .has-sub>a{padding-right:52px}
  body.nav-open .site-header--wide .main-nav .has-sub>.sub{display:none;position:static;opacity:1;visibility:visible;transform:none;box-shadow:none;border:0;padding-left:14px;max-height:none;overflow:visible}
  body.nav-open .site-header--wide .main-nav .has-sub.is-open>.sub{display:block}
  .site-header--wide .main-nav .sub-toggle{display:block;position:absolute;right:0;top:0;width:48px;height:38px;border:0;background:transparent;cursor:pointer}
  .site-header--wide .main-nav .sub-toggle::before{content:"+";font-family:var(--ff-head);font-weight:700;font-size:1.35rem;line-height:38px;color:var(--action)}
  .site-header--wide .main-nav .has-sub.is-open>.sub-toggle::before{content:"\2013"}
}

/* ---------- 3. sticky quote edge tab (R474) ---------- */
.wc-quote-tab{position:fixed;right:0;top:50%;z-index:55;display:block;writing-mode:vertical-rl;
  transform:translateY(-50%) rotate(180deg);background:var(--action,#D13800);color:#fff;
  font-family:var(--ff-head);font-weight:700;font-size:.95rem;line-height:1;letter-spacing:.3px;
  padding:18px 11px;border-radius:0 10px 10px 0;box-shadow:0 4px 18px rgba(0,0,0,.28);white-space:nowrap}
.wc-quote-tab:hover,.wc-quote-tab:focus-visible{background:var(--action-dark,#A82C00);color:#fff;text-decoration:none}
.wc-quote-tab:focus-visible{outline:3px solid var(--blue-bright,#0088CB);outline-offset:2px}
/* hidden while the lead dialog or the phone menu is open */
body.wc-dialog-open .wc-quote-tab,body.nav-open .wc-quote-tab{display:none}
/* phones/tablets (the call bar shows at <=900px): sit above the bar, never on it.
   --wc-bar-h is set by the sprint JS from the bar's measured height; 66px is the measured fallback. */
@media (max-width:900px){
  .wc-quote-tab{top:auto;bottom:calc(var(--wc-bar-h,66px) + 14px + env(safe-area-inset-bottom,0px));
    transform:rotate(180deg);font-size:.8rem;padding:12px 8px}
  .wc-quote-tab__roof{display:none}
  .wc-quote-tab.wc-tab-js:not(.is-shown){visibility:hidden;opacity:0}
}
@media (max-width:900px) and (prefers-reduced-motion:no-preference){
  .wc-quote-tab.wc-tab-js{transition:opacity .2s ease,visibility .2s}
}
@media print{.wc-quote-tab,.wc-dialog{display:none!important}}

/* ---------- 4. lead-form dialog (R472) ---------- */
.wc-dialog{border:0;padding:0;margin:auto;background:transparent;max-width:min(560px,calc(100vw - 24px));
  width:100%;max-height:calc(100vh - 24px);max-height:calc(100dvh - 24px);overflow:visible}
.wc-dialog::backdrop{background:rgba(8,31,48,.72)}
.wc-dialog__panel{position:relative;max-height:calc(100vh - 24px);max-height:calc(100dvh - 24px);overflow-y:auto;
  -webkit-overflow-scrolling:touch;border-radius:var(--radius,12px);background:#fff;box-shadow:0 18px 60px rgba(0,0,0,.35)}
.wc-dialog .quote-form{margin:0;box-shadow:none;max-width:none;width:100%}
.wc-dialog__close{position:absolute;top:8px;right:8px;z-index:2;width:44px;height:44px;border:0;border-radius:50%;
  background:rgba(11,43,65,.08);color:var(--navy,#0B2B41);font-size:1.6rem;line-height:44px;text-align:center;cursor:pointer;padding:0}
.wc-dialog__close:hover{background:rgba(11,43,65,.16)}
.wc-dialog__close:focus-visible{outline:3px solid var(--blue-bright,#0088CB);outline-offset:2px}
.wc-dialog .quote-form__title{padding-right:48px}
.wc-dialog .quote-form a:not(.btn){color:var(--action-dark,#A82C00)}
body.wc-dialog-open{overflow:hidden}
@media (prefers-reduced-motion:no-preference){
  .wc-dialog[open] .wc-dialog__panel{animation:wc-dlg-in .18s ease-out}
  @keyframes wc-dlg-in{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
}
@media (max-width:600px){
  .wc-dialog{max-width:calc(100vw - 16px)}
  .wc-dialog .quote-form__row{grid-template-columns:1fr}
}

/* ---------- 5. hero visual key (R473) ----------
   The page's own service or town name, taken from its H1, drawn large and faint behind the hero
   copy. `content: ... / ""` gives it empty alt text so screen readers skip the decoration.
   Each page type also gets its own overlay geometry, painted in the top ~820px so it shows on
   first load: city hubs = orange wedge from the lower left, service pages = dark diagonal panel
   behind the form, service-in-town pages = dark vertical panel + orange leading rule. */
.hero[data-hero-key]::before{content:attr(data-hero-key);content:attr(data-hero-key) / "";position:absolute;inset:0;z-index:1;
  display:flex;pointer-events:none;overflow:hidden;font-family:var(--ff-head);font-weight:800;text-transform:uppercase;
  line-height:.82;letter-spacing:-.02em;white-space:nowrap;font-size:clamp(3.6rem,11vw,11.5rem)}
.hero[data-hero-key] .hero__inner{z-index:2}
.hero[data-hero-type="city"]::before{align-items:flex-start;justify-content:flex-start;padding:.3em 0 0 .06em;
  color:transparent;-webkit-text-stroke:2px rgba(255,255,255,.17);
  background:linear-gradient(62deg,rgba(209,56,0,.22) 0,rgba(209,56,0,.22) 24%,transparent 24.2%)}
.hero[data-hero-type="service"]::before{align-items:flex-start;justify-content:flex-end;padding:.12em .02em 0 0;
  color:rgba(255,255,255,.08);
  background:linear-gradient(112deg,transparent 0,transparent 57%,rgba(8,31,48,.55) 57.2%)}
.hero[data-hero-type="service-city"]::before{align-items:flex-start;justify-content:flex-end;padding:.12em .02em 0 0;
  color:transparent;-webkit-text-stroke:2px rgba(255,255,255,.16);
  background:linear-gradient(90deg,transparent 0,transparent 60%,rgba(8,31,48,.5) 60%)}
.hero[data-hero-type="service-city"]{box-shadow:inset 6px 0 0 var(--action,#D13800)}
@media (max-width:900px){
  .hero[data-hero-type="service"]::before{background:linear-gradient(160deg,transparent 0,transparent 70%,rgba(8,31,48,.5) 70.2%)}
  .hero[data-hero-type="service-city"]::before{background:linear-gradient(180deg,transparent 0,transparent 75%,rgba(8,31,48,.45) 75%)}
  .hero[data-hero-type="city"]::before{background:linear-gradient(35deg,rgba(209,56,0,.28) 0,rgba(209,56,0,.28) 18%,transparent 18.2%)}
}
@media (max-width:600px){
  .hero[data-hero-key]::before{font-size:clamp(3rem,19vw,5.2rem)}
}

/* ---------- 6. hero on phones (R76): city hubs, service pages, service-in-town pages ----------
   Visual order only (DOM order and the desktop layout are unchanged): eyebrow, H1, the trust
   chips, then ONE full-width estimate button with the two secondary buttons side by side, then
   the intro copy. Puts H1 + chips + the dominant CTA inside the first ~600px at 375.
   Home is not keyed (home-layout lane) and is not affected. */
@media (max-width:600px){
  .hero[data-hero-key] .hero__inner{padding-top:18px}
  .hero[data-hero-key] .hero__inner>div:first-child{display:flex;flex-direction:column}
  .hero[data-hero-key] .hero__inner>div:first-child>*{order:5}
  .hero[data-hero-key] .hero__inner>div:first-child>.hero__eyebrow{order:1;align-self:flex-start}
  .hero[data-hero-key] .hero__inner>div:first-child>h1{order:2}
  .hero[data-hero-key] .hero__inner>div:first-child>.trust-chips,
  .hero[data-hero-key] .hero__inner>div:first-child>.hero__points{order:3;margin:8px 0 12px;gap:6px}
  .hero[data-hero-key] .trust-chips li,.hero[data-hero-key] .hero__points li{font-size:.8rem;padding:5px 10px;line-height:1.25}
  .hero[data-hero-key] .hero__inner>div:first-child>.hero__actions{order:4;display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:18px}
  .hero[data-hero-key] .hero__actions .btn{width:100%;padding:10px 6px;font-size:.84rem;line-height:1.2;min-height:44px}
  .hero[data-hero-key] .hero__actions .btn:first-child{grid-column:1 / -1;padding:15px 12px;font-size:1.05rem}
}

/* ===== from css/city-20260925b.css (pages with <html class="wcss-city">) ===== */
:where(html.wcss-city) .hero .wc-tldr__label{font-family:var(--ff-head,inherit);font-size:.78rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#ffb38f;margin:14px 0 8px;max-width:540px}
:where(html.wcss-city) .hero .wc-tldr{list-style:none;padding:0;margin:0 0 20px;display:grid;gap:10px;max-width:540px}
:where(html.wcss-city) .hero .wc-tldr li{padding:0 0 0 14px;border-left:3px solid var(--action,#D13800);font-size:.95rem;line-height:1.5;color:#dce6ee;overflow-wrap:break-word}
:where(html.wcss-city) .hero .wc-tldr li strong{display:block;color:#fff;font-weight:600;margin-bottom:2px}
:where(html.wcss-city) .bb-card > .entity-block,
:where(html.wcss-city) .bb-card .prose > .entity-block{font-size:.95rem;line-height:1.65;margin:0 0 1.1em;padding-bottom:1em;border-bottom:1px solid rgba(255,255,255,.18)}
:where(html.wcss-city) .bb-card-plain > .entity-block,
:where(html.wcss-city) .bb-card-plain .prose > .entity-block{border-bottom-color:var(--border,#dfe5ea)}
@media (max-width:820px){:where(html.wcss-city) .hero .wc-tldr li{font-size:.9rem}
}
:where(html.wcss-city) .bb-card .wc-tldr__label{font-family:var(--ff-head,inherit);font-size:.78rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--action,#D13800);margin:0 0 8px;text-align:left}
:where(html.wcss-city) .bb-card-dark .wc-tldr__label{color:#ffb38f !important}
:where(html.wcss-city) .bb-card .wc-tldr{list-style:none;padding:0;margin:0 0 1.2em;display:grid;gap:10px}
:where(html.wcss-city) .bb-card .wc-tldr li{padding:0 0 0 14px;margin:0;border-left:3px solid var(--action,#D13800);font-size:.95rem;line-height:1.5;overflow-wrap:break-word;list-style:none}
:where(html.wcss-city) .bb-card .wc-tldr li::before{content:none}
:where(html.wcss-city) .bb-card .wc-tldr li strong{display:block;font-weight:600;margin-bottom:2px}
:where(html.wcss-city) .wc-why-split{margin-bottom:28px}
@media (max-width:820px){:where(html.wcss-city) .bb-card .wc-tldr li{font-size:.9rem}
}


/* ===== from css/wc-sprint2-20260923.css (pages with <html class="wcss-sprint2">) ===== */
@media (max-width:600px){:where(html.wcss-sprint2) .hero[data-hero-m] .hero__inner{padding-top:18px}
:where(html.wcss-sprint2) .hero[data-hero-m] .hero__inner>div:first-child{display:flex;flex-direction:column}
:where(html.wcss-sprint2) .hero[data-hero-m] .hero__inner>div:first-child>*{order:5}
:where(html.wcss-sprint2) .hero[data-hero-m] .hero__inner>div:first-child>.hero__eyebrow{order:1;align-self:flex-start}
:where(html.wcss-sprint2) .hero[data-hero-m] .hero__inner>div:first-child>h1{order:2}
:where(html.wcss-sprint2) .hero[data-hero-m] .hero__inner>div:first-child>.trust-chips,
:where(html.wcss-sprint2) .hero[data-hero-m] .hero__inner>div:first-child>.hero__points{order:3;margin:8px 0 12px;gap:6px}
:where(html.wcss-sprint2) .hero[data-hero-m] .trust-chips li,
:where(html.wcss-sprint2) .hero[data-hero-m] .hero__points li{font-size:.8rem;padding:5px 10px;line-height:1.25}
:where(html.wcss-sprint2) .hero[data-hero-m] .hero__inner>div:first-child>.hero__actions{order:4;display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:18px}
:where(html.wcss-sprint2) .hero[data-hero-m] .hero__actions .btn{width:100%;padding:10px 6px;font-size:.84rem;line-height:1.2;min-height:44px}
:where(html.wcss-sprint2) .hero[data-hero-m] .hero__actions .btn:first-child{grid-column:1 / -1;padding:15px 12px;font-size:1.05rem}
:where(html.wcss-sprint2) .hero[data-hero-m="compact"] .hero__inner{padding-top:12px}
:where(html.wcss-sprint2) .hero[data-hero-m="compact"] .hero__eyebrow{margin-bottom:8px}
:where(html.wcss-sprint2) .hero[data-hero-m="compact"] h1{font-size:1.5rem;line-height:1.1;margin-bottom:2px}
:where(html.wcss-sprint2) .hero[data-hero-m="compact"] .hero__inner>div:first-child>.hero__points,
:where(html.wcss-sprint2) .hero[data-hero-m="compact"] .hero__inner>div:first-child>.trust-chips{margin:6px 0 10px;gap:4px}
:where(html.wcss-sprint2) .hero[data-hero-m="compact"] .hero__points li,
:where(html.wcss-sprint2) .hero[data-hero-m="compact"] .trust-chips li{font-size:.74rem;padding:3px 9px;line-height:1.2}

}
:where(html.wcss-sprint2) .guar-card{display:flex;flex-direction:column}
:where(html.wcss-sprint2) .guar-card .wc-offer-cta{margin-top:auto;align-self:flex-start}
:where(html.wcss-sprint2) .guar-card>:has(+ .wc-offer-cta){margin-bottom:18px}
:where(html.wcss-sprint2) .guar-card .wc-offer-cta{padding:11px 18px;font-size:.95rem;min-height:44px;line-height:1.2}
@media (max-width:600px){:where(html.wcss-sprint2) .guar-card .wc-offer-cta{align-self:stretch;text-align:center}
}
:where(html.wcss-sprint2) .wc-est-status{margin:18px 0 0;padding:12px 14px;border-left:4px solid var(--action,#D13800);background:#f4f7fa;color:var(--ink,#1a1a1a);font-size:.95rem}


/* ===== from css/service-20260925.css (pages with <html class="wcss-svc">) ===== */
:where(html.wcss-svc) .wc-tldr__label{margin:14px 0 6px;font-weight:700;font-size:1rem;letter-spacing:.2px}
:where(html.wcss-svc) .wc-tldr{margin:0 0 16px;padding-left:1.2em;max-width:540px;font-size:.98rem;line-height:1.5}
:where(html.wcss-svc) .wc-tldr li{margin:0 0 6px}
:where(html.wcss-svc) .hero .wc-tldr__label{color:#fff;font-size:1rem}
:where(html.wcss-svc) .hero .wc-tldr{color:#cdd9e4}
:where(html.wcss-svc) .hero .wc-tldr li strong{color:#fff;font-weight:600}
@media (max-width:640px){:where(html.wcss-svc) .wc-tldr{font-size:.92rem}
:where(html.wcss-svc) .hero .wc-tldr__label{font-size:.95rem}
}


/* ===== from css/service-20260925b.css (pages with <html class="wcss-svcb">) ===== */
:where(html.wcss-svcb) .bb-card > .wc-tldr__label{margin:0 0 6px;font-weight:700;font-size:1rem;letter-spacing:.2px}
:where(html.wcss-svcb) .bb-card > .wc-tldr{margin:0 0 14px;padding-left:1.2em;max-width:none;font-size:.98rem;line-height:1.5}
:where(html.wcss-svcb) .bb-card > .wc-tldr li{margin:0 0 6px}
:where(html.wcss-svcb) .bb-card > .entity-block{padding-bottom:1em;border-bottom:1px solid rgba(255,255,255,.18)}

/* 2026-09-29 accessibility closeout: links must not rely on colour alone. */
.crumbs a{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px}
/* 4.42:1 on the ice band was just below the 4.5:1 AA floor. */
:where(html.wcss-city) .bb-card-plain .wc-tldr__label{color:#b52f00}
:where(html.wcss-svcb) .bb-card-plain > .entity-block{border-bottom-color:var(--border,#dfe5ea)}
:where(html.wcss-svcb) .wc-cred-split{display:grid;grid-template-columns:1fr;row-gap:0}
:where(html.wcss-svcb) .wc-cred-split > h3{margin:1.1em 0 .35em}
@media (min-width:960px){:where(html.wcss-svcb) .wc-cred-split{grid-template-columns:minmax(180px,.75fr) 2fr;column-gap:40px;row-gap:26px;align-items:start;margin-top:18px}
:where(html.wcss-svcb) .wc-cred-split > h3{margin:0;font-size:1.15rem;line-height:1.3}
:where(html.wcss-svcb) .wc-cred-split > p{margin:0}

}
:where(html.wcss-svcb) .wc-est-form{max-width:640px;margin:0 auto}
@media (max-width:640px){:where(html.wcss-svcb) .bb-card > .wc-tldr{font-size:.92rem}
}


/* ===== from css/blog-article-20260925.css (pages with <html class="wcss-art">) ===== */
:where(html.wcss-art) .wc-article .wc-art-band{ margin: 2.15rem 0 0; }
:where(html.wcss-art) .wc-article .wc-art-band__head > h2{ margin: 0 0 .6rem; }
:where(html.wcss-art) .wc-article .wc-art-band__body > :last-child{ margin-bottom: 0; }
:where(html.wcss-art) .wc-article .wc-art-band__body > .fin-callout[data-w3]:first-child,
:where(html.wcss-art) .wc-article .wc-art-band__body > .cmp-table:first-child,
:where(html.wcss-art) .wc-article .wc-art-band__body > .bb-icon-rows:first-child{ margin-top: 0; }
:where(html.wcss-art) .wc-article .wc-art-band__body > .fin-callout[data-w3]:last-child{ margin-bottom: 0; }
:where(html.wcss-art) .wc-article .wc-art-band--faq{ margin-top: 2.4rem; border-top: 2px solid var(--ice, #eef4f8); padding-top: 1.4rem; }
:where(html.wcss-art) .wc-article .wc-art-band--faq .article-faqh{ margin-top: 0; border-top: 0; padding-top: 0; }
:where(html.wcss-art) .wc-article .wc-art-units{ display: grid; grid-template-columns: minmax(0, 1fr); gap: 14px; margin: .2rem 0 1.4rem; }
:where(html.wcss-art) .wc-article .wc-art-unit{ background: var(--ice, #eef4f8); border-radius: var(--radius, 12px); padding: 18px 20px; min-width: 0; }
:where(html.wcss-art) .wc-article .wc-art-unit > h3{ font-family: Poppins, system-ui, sans-serif; font-size: 1.08rem; line-height: 1.3; color: var(--navy, #0B2B41); margin: 0 0 .45rem; }
:where(html.wcss-art) .wc-article .wc-art-unit > p,
:where(html.wcss-art) .wc-article .wc-art-unit > ul,
:where(html.wcss-art) .wc-article .wc-art-unit > ol{ margin: 0 0 .75rem; }
:where(html.wcss-art) .wc-article .wc-art-unit > :last-child{ margin-bottom: 0; }
@media (min-width: 1024px){:where(html.wcss-art) .wc-article .article-wrap{ max-width: var(--container, 1180px); }
:where(html.wcss-art) .wc-article .article-wrap{ display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); column-gap: 56px; align-items: center; }
:where(html.wcss-art) .wc-article .article-wrap > *{ grid-column: 1 / -1; min-width: 0; }
:where(html.wcss-art) .wc-article .article-wrap > .article-head{ grid-column: 1; margin: 0 0 26px; }
:where(html.wcss-art) .wc-article .article-wrap > .article-figure{ grid-column: 2; }
:where(html.wcss-art) .wc-article .article-body > :not(.wc-art-band){ max-width: 820px; }
:where(html.wcss-art) .wc-article .wc-art-band{ display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); column-gap: 56px;
    align-items: start; margin-top: 2.6rem; padding-top: 2.1rem; border-top: 1px solid #e5eaef; }
:where(html.wcss-art) .wc-article .wc-art-band__head,
:where(html.wcss-art) .wc-article .wc-art-band__body{ min-width: 0; }
:where(html.wcss-art) .wc-article .wc-art-band__head > h2{ margin: 0; }
:where(html.wcss-art) .wc-article .wc-art-band--faq{ border-top: 2px solid var(--ice, #eef4f8); }

}
@media (min-width: 1200px){:where(html.wcss-art) .wc-article .wc-art-units{ grid-template-columns: repeat(2, minmax(0, 1fr)); }

}


/* ===== from css/blog-article-20260925b.css (pages with <html class="wcss-artb">) ===== */
@media (min-width: 1024px){:where(html.wcss-artb) main:has(> article.wc-article) > .closing-form > .container{
    padding-left: 22px; padding-right: 22px;
    display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); grid-template-rows: auto auto 1fr;
    column-gap: 56px; align-items: start; }
:where(html.wcss-artb) main:has(> article.wc-article) > .closing-form > .container > .eyebrow,
:where(html.wcss-artb) main:has(> article.wc-article) > .closing-form > .container > .section__title{
    grid-column: 1; max-width: none; margin-left: 0; margin-right: 0; text-align: left; }
:where(html.wcss-artb) main:has(> article.wc-article) > .closing-form > .container > form{
    grid-column: 2; grid-row: 1 / span 3; max-width: none; width: auto; margin: 0; min-width: 0; }
:where(html.wcss-artb) main:has(> article.wc-article) > .cta-band > .cta-band__inner{
    max-width: var(--container, 1180px); padding-left: 22px; padding-right: 22px; }

}
@media (max-width: 800px){:where(html.wcss-artb) main:has(> article.wc-article) > .closing-form > .container > .eyebrow,
:where(html.wcss-artb) main:has(> article.wc-article) > .closing-form > .container > .section__title{ max-width: 720px; }

}


/* ===== from css/tokens-20260925.css (all pages) ===== */
/* tokens-20260925.css -- W Contracting Roofing, website-sprint W4-TEMPLATE, 2026-09-25 (Jeff approved).
   Checklist row 320: the Bluebird Roofing visual system (bluebirdroofingny.com, Elementor kit post-6 + pages
   post-10 / post-797, read 2026-09-25, see the dossier read-out) landed as TOKENS on W's own token names,
   in W's brand colours. Linked LAST among the stylesheets on every page, so it overrides earlier sheets at
   equal specificity. Page-level inline <style> blocks still come after it and keep their own values.
   Jeff's ruled W deviations are kept: --container 1180px, --radius 12px, --radius-pill 30px.
   Bluebird kit colours -> W tokens: primary #0B2432 -> --navy, secondary #2A79A1 -> --blue,
   accent #ED833C -> --action. */

:root{
  /* 1. spacing + section rhythm (post-797: band padding 85px, 40px at <=1024) */
  --section-pad:85px;
  --section-pad-sm:40px;
  /* 2. card treatment (post-10:53: 2px border in the kit secondary colour + an even 10px glow at .15) */
  --shadow:0 0 10px 0 rgba(0,0,0,.15);
  --card-border-width:2px;
  --card-border-color:var(--blue);
  --card-border:var(--card-border-width) solid var(--card-border-color);
  /* 3. background layering + opacity: W's existing values, now named (no visual change) */
  --overlay-hero-from:rgba(8,31,48,.92);
  --overlay-hero-mid:rgba(11,43,65,.62);
  --overlay-hero-to:rgba(11,43,65,.28);
  --overlay-hero:linear-gradient(100deg,var(--overlay-hero-from) 0%,var(--overlay-hero-mid) 46%,var(--overlay-hero-to) 100%);
  --overlay-hub:linear-gradient(100deg,rgba(8,31,48,.94) 0%,rgba(11,43,65,.86) 100%);
  --overlay-glass:rgba(255,255,255,.10);
  --overlay-glass-border:rgba(255,255,255,.22);
  --overlay-dark-to:#13405e;
  --overlay-dark:linear-gradient(150deg,var(--navy) 0%,var(--overlay-dark-to) 100%);
  --overlay-cta:linear-gradient(100deg,var(--navy),var(--overlay-dark-to));
  /* 5. type scale (post-797: H1 65px, 50px at <=1024, 35px at <=767; H2 40px, 25px on phones;
        kit: eyebrow 16px/600, body 17px) */
  --fs-h1:65px;
  --fs-h2:40px;
  --fs-eyebrow:16px;
  --fw-eyebrow:600;
  --fs-body:17px;
  /* 7. motion (post-797: hover transitions .3s) */
  --transition-dur:.3s;
  --transition-ease:ease;
  --transition:var(--transition-dur) var(--transition-ease);
}
@media (max-width:1024px){:root{--section-pad:var(--section-pad-sm);--fs-h1:50px}}
@media (max-width:767px){:root{--fs-h1:35px;--fs-h2:25px}}
/* Phones (<=600px): Bluebird's 35px H1 pushed the hero's estimate button below the first ~600px at 375
   (checklist row 76, measured 2026-09-25: home 656px, town pages 606-656px; 28px still left two storm
   pages at 627px, 26px one at 619px). 25px is the largest size that keeps every hero on all 74 pages
   passing. The home hero (data-hero-m="stack", three-line H1) keeps its existing phone size: any larger
   size moves its button past the 607px it ends at today. */
@media (max-width:600px){:root{--fs-h1:25px;--fs-h1-stack:clamp(1.45rem,6.1vw,2.05rem)}
  .hero[data-hero-m="stack"] h1{font-size:var(--fs-h1-stack)}}
@media (prefers-reduced-motion:reduce){:root{--transition-dur:0s}}

/* ---------- 1. section rhythm ---------- */
body{font-size:var(--fs-body)}
.section{padding:var(--section-pad) 0}
section.section.bb-band:not(.bb-strip){padding:var(--section-pad) 0 !important}

/* ---------- 2. cards: Bluebird glow shadow (via --shadow) + 2px brand border ---------- */
.card,.trust-box,.process__step{border:var(--card-border)}

/* ---------- 3. overlays on tokens (same values as before) ---------- */
.hero::after{background:var(--overlay-hero),url(/assets/img/roof-replacement-saskatoon-finished-hip-roof.webp) center/cover}
@media (max-width:768px){.hero::after{background:var(--overlay-hero),url(/assets/img/roof-replacement-saskatoon-finished-hip-roof-mobile-crop.webp) center/cover}}
.bb-hub-hero{background:var(--overlay-hub),url(/assets/img/roof-replacement-saskatoon-finished-hip-roof.webp) center/cover}
@media (max-width:768px){.bb-hub-hero{background:var(--overlay-hub),url(/assets/img/roof-replacement-saskatoon-finished-hip-roof-mobile-crop.webp) center/cover}}
.trust-chips li{background:var(--overlay-glass);border-color:var(--overlay-glass-border)}
section.section.bb-dark{background:var(--overlay-dark) !important}
.bb-card-dark{background:var(--overlay-dark)}
.cta-band{background:var(--overlay-cta)}

/* ---------- 5. type scale ---------- */
.hero h1,.bb-hub-hero h1,.page-hero-sm h1{font-size:var(--fs-h1)}
.bb-band h2,.section > .container > h2,.bb-card h2{font-size:var(--fs-h2)}
.eyebrow{font-size:var(--fs-eyebrow);font-weight:var(--fw-eyebrow)}

/* ---------- 2b. pills: one pill radius token (Jeff's ruled 30px) ---------- */
.bb-more-about > summary{border-radius:var(--radius-pill)}
.bb-how .process__step::before{border-radius:var(--radius-pill)}
.bb-pills .chip,a.bb-pill{border-radius:var(--radius-pill)}
.bb-areas-text .area-links a{border-radius:var(--radius-pill)}

/* ---------- 7. motion: hover transitions on the Bluebird .3s token ---------- */
.btn,.svc-card a,.area-card,.rev-nav{transition:var(--transition)}
.trust-strip a,.trust-strip strong{transition:color var(--transition)}
.photo-grid img{transition:transform var(--transition)}
.has-sub .sub{transition:opacity var(--transition),transform var(--transition),visibility var(--transition)}

/* ---------- 7. section separation: never two dark bands in a row ---------- */
/* a) the dark financing strip directly before the dark how-it-works band turns white, and its callout
      takes the site's default light callout look (ice card, orange left rule, ink text) */
section.section.bb-dark.bb-strip:has(+ section.section.bb-dark){background:var(--white) !important;color:var(--ink)}
section.section.bb-strip:has(+ section.section.bb-dark) .fin-callout{background:var(--ice);border:1px solid var(--border);border-left:5px solid var(--action);color:var(--ink)}
section.section.bb-strip:has(+ section.section.bb-dark) .fin-callout p{color:var(--ink)}
section.section.bb-strip:has(+ section.section.bb-dark) .fin-callout strong{color:var(--navy)}
/* b) a closing CTA band directly after a dark band takes the ice tint, with navy/ink text and an outline
      second button so every label stays readable */
section.bb-dark + .cta-band{background:var(--ice);color:var(--ink);border-top:1px solid var(--border)}
section.bb-dark + .cta-band h2{color:var(--navy)}
section.bb-dark + .cta-band p{color:var(--ink-2)}
section.bb-dark + .cta-band .eyebrow{color:var(--action-dark)}
section.bb-dark + .cta-band .btn--ghost{background:transparent;border-color:var(--navy);color:var(--navy)}
section.bb-dark + .cta-band .btn--ghost:hover{background:var(--navy);color:#fff}
/* c) the dark trust strip directly above a small navy page hero takes the ice tint */
.trust-strip:has(+ .page-hero-sm){background:var(--ice);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
.trust-strip:has(+ .page-hero-sm) a{color:var(--muted)}
.trust-strip:has(+ .page-hero-sm) strong{color:var(--navy)}
.trust-strip:has(+ .page-hero-sm) a:hover{color:var(--navy)}
.trust-strip:has(+ .page-hero-sm) a:hover strong{color:var(--action-dark)}

/* ---------- row 480: "Instant Estimate" top-level nav item, styled like its siblings ---------- */
.main-nav .nav-estimate > a{color:var(--ink);font-weight:500}
.main-nav .nav-estimate > a:hover{color:var(--navy)}
/* With seven top-level items the one-row header needs ~1270px of content width (measured), more than
   the 1180px container gives. On desktop the header row alone gets a wider box (the page container
   stays 1180), the logo never shrinks, from 1280px to 1365px the top-level links sit 4px closer, and
   below 1280px the header uses the menu button, the same way it already does from 1061px to 1179px. */
.site-header .brand{flex-shrink:0}
@media (min-width:1180px){
  .site-header .container.site-header__inner{max-width:calc(var(--container) + 150px)}
}
@media (min-width:1280px) and (max-width:1365px){
  .site-header .main-nav > ul > li > a{padding-left:6px;padding-right:6px}
}
@media (min-width:1180px) and (max-width:1279px){
  .site-header .main-nav,.site-header .site-header__cta,.site-header .header-phone{display:none}
  .site-header .site-header__inner .nav-toggle{display:inline-flex!important;margin-left:auto}
  body.nav-open .site-header .main-nav{display:block;position:absolute;top:100%;left:0;right:0;background:#fff;border-bottom:1px solid var(--border);padding:10px 10px 84px;max-height:calc(100vh - 64px);overflow-y:auto;-webkit-overflow-scrolling:touch}
  body.nav-open .main-nav>ul{flex-direction:column}
  body.nav-open .main-nav .has-sub{position:relative}
  body.nav-open .main-nav .has-sub>a{padding-right:52px}
  body.nav-open .main-nav .has-sub>.sub{display:none;position:static;opacity:1;visibility:visible;transform:none;box-shadow:none;border:0;padding-left:14px;max-height:none;overflow:visible}
  body.nav-open .main-nav .has-sub.is-open>.sub{display:block}
  .main-nav .sub-toggle{display:block;position:absolute;right:0;top:0;width:48px;height:38px;border:0;background:transparent;cursor:pointer;border-radius:var(--radius-sm)}
  .main-nav .sub-toggle::before{content:"+";font-family:var(--ff-head);font-weight:700;font-size:1.35rem;line-height:38px;color:var(--action)}
  .main-nav .has-sub.is-open>.sub-toggle::before{content:"\2013"}
}

/* ===== from css/blog-contrast-20260925.css (pages with <html class="wcss-bc">) ===== */
:where(html.wcss-bc) .fin-callout-card a:not(.btn){color:#B83100}
:where(html.wcss-bc) .cta-band a:not(.btn){color:#FFB78F;text-decoration:underline}
:where(html.wcss-bc) .cta-band a:not(.btn):hover{color:#fff}

/* a11y 2026-09-29: in-text links distinguishable without colour (Lighthouse link-in-text-block) */
p a:not([class]){text-decoration:underline;text-underline-offset:.15em;text-decoration-thickness:1px}
/* 2026-09-29: optional form details (row 77: 4 visible fields) */
.quote-form__more{margin:2px 0 12px}
.quote-form__more>summary{cursor:pointer;font-size:.9rem;font-weight:600;color:var(--navy);padding:6px 0;list-style-position:inside}
.quote-form__more[open]>summary{margin-bottom:8px}
.wc-dialog .quote-form__more>summary{color:inherit}

/* wc-sprint 2026-10-05: action-named CTAs + phone digits in sticky bar (canon rows 533/537), home hero form under CTA on mobile (518), service-area map caption (517), thank-you call button (525), contact profile links (514) */
.site-header__cta .btn{white-space:nowrap}
.sticky-call a{font-size:14px;white-space:nowrap}
.sticky-call a:first-child{flex:1.3 1 0}
.sticky-call a:last-child{flex:1 1 0}
@media (max-width:600px){html.wc-home .hero[data-hero-m] .hero__inner{display:flex;flex-direction:column;gap:0}
html.wc-home .hero[data-hero-m] .hero__inner>div:first-child{display:contents}
html.wc-home .hero[data-hero-m] .hero__inner>div:first-child>*{order:6}
html.wc-home .hero[data-hero-m] .hero__inner>div:first-child>.hero__eyebrow{order:1}
html.wc-home .hero[data-hero-m] .hero__inner>div:first-child>h1{order:2}
html.wc-home .hero[data-hero-m] .hero__inner>div:first-child>.hero__points{order:3}
html.wc-home .hero[data-hero-m] .hero__inner>div:first-child>.hero__actions{order:4}
html.wc-home .hero[data-hero-m] .hero__inner>div:nth-child(2){order:5;margin-bottom:18px}}
.map-caption{margin:8px 0 0;font-size:.9rem;opacity:.85}
.ty-call{display:inline-block;margin:6px 0 4px}
.wc-profiles{list-style:none;padding:0;margin:8px 0 0;line-height:2}
.wc-open{display:inline-block;min-height:1.35em;font-weight:600;color:#fff;font-size:.85rem;line-height:1.35}
.promo-bar.wc-open-only .container{padding:6px 20px}
