/* Website public pages (site.php) and the editor preview frame. Tokens only: the company's Style sets --w-brand,
   --w-accent, --w-dark, --w-tint, --w-radius, --w-btn-radius (includes/website.php web_style_css). Variants
   (.v-plain .v-tint .v-dark .v-photo) and layouts (.l-cards .l-list .l-grid) only read tokens, so one Style change
   restyles every page. Nothing wraps in the header: when the menu doesn't fit (phones), assets/js/website.js folds it into a Menu list
   (.w-top.w-fold), so it never slides sideways (rules check, Oct 18 2026). No CRM script here. */
.site { --w-brand: #1E90FF; --w-accent: #5CDB3A; --w-dark: #111111; --w-tint: #F2F3F5; --w-ink: #1b1d20; --w-muted: #5d6268; --w-line: #dfe2e6;
  --w-radius: 12px; --w-btn-radius: 999px; --w-space: 1; --w-max: 1120px;
  margin: 0; font: var(--fs-base, 17px)/1.6 "Segoe UI", system-ui, -apple-system, Roboto, sans-serif; color: var(--w-ink); background: #fff; -webkit-text-size-adjust: 100%; }
@font-face { font-family: "Inter"; src: url(fonts/inter/InterVariable.woff2) format("woff2"); font-weight: 100 900; font-display: swap; }
.site.st-lmn { font-family: Inter, "Segoe UI", system-ui, sans-serif; }
/* Style panel fonts (includes/website.php web_style_css sets --w-font / --w-head-font when a font is picked) */
.site { font-family: var(--w-font, "Segoe UI", system-ui, -apple-system, Roboto, sans-serif); }
.site.st-lmn:not(.has-font) { font-family: Inter, "Segoe UI", system-ui, sans-serif; }
.site h1, .site h2, .site h3 { font-family: var(--w-head-font, inherit); }
.site *, .site *::before, .site *::after { box-sizing: border-box; }
.site img { max-width: 100%; height: auto; display: block; }
.site a { color: var(--w-brand); }
.site h1, .site h2, .site h3 { line-height: 1.2; margin: 0 0 .4em; letter-spacing: -.01em; }
.site h1 { font-size: calc(clamp(2rem, 4.2vw, 3.2rem) * var(--fs-scale, 1)); }
.site h2 { font-size: calc(clamp(1.5rem, 2.8vw, 2.1rem) * var(--fs-scale, 1)); }
.w-in { max-width: var(--w-max); margin: 0 auto; padding: 0 24px; }
/* header: brand · menu · call, one line always */
.w-top { position: sticky; top: 0; z-index: 5; background: #fff; border-bottom: 1px solid var(--w-line); }
.w-top .w-in { display: flex; align-items: center; gap: 18px; height: 64px; flex-wrap: nowrap; }
.w-brand { font-weight: 700; font-size: 1.1rem; color: var(--w-ink) !important; text-decoration: none; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; flex: 0 1 auto; min-width: 0; max-width: 40%; }
.w-brand img { max-height: 44px; width: auto; }
.w-nav { display: flex; gap: 4px; flex: 1 1 auto; min-width: 0; overflow-x: auto; scrollbar-width: none; justify-content: flex-end; }
.w-nav::-webkit-scrollbar { display: none; }
.w-nav a { flex: none; white-space: nowrap; padding: 6px 10px; border-radius: var(--w-btn-radius); color: var(--w-ink); text-decoration: none; font-size: .95rem; }
.w-nav a:hover, .w-nav a[aria-current] { background: var(--w-tint); }
.w-nav a[aria-current] { font-weight: 600; }
/* Folded menu (website.js adds .w-fold when the links don't fit): one Menu button, the pages in a list under it. */
.w-more { position: relative; flex: none; margin-left: auto; }
.w-top.w-fold .w-nav { display: none; }
.w-top.w-fold .w-more[hidden] { display: block; }
.w-more > summary { list-style: none; cursor: pointer; padding: 6px 14px; font-size: .88rem; }
.w-more > summary::-webkit-details-marker { display: none; }
.w-more-list { position: absolute; right: 0; top: calc(100% + 8px); display: flex; flex-direction: column; min-width: 190px; max-width: 80vw; padding: 6px; background: #fff;
  border: 1px solid var(--w-line); border-radius: var(--w-radius); box-shadow: 0 10px 28px rgba(0,0,0,.14); z-index: 6; }
.w-more-list a { padding: 9px 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--w-ink) !important; text-decoration: none; border-radius: var(--w-btn-radius); }
.w-more-list a:hover, .w-more-list a[aria-current] { background: var(--w-tint); }
.w-more-list a[aria-current] { font-weight: 600; }
.w-btn { display: inline-block; background: var(--w-brand); color: #fff !important; text-decoration: none; font-weight: 600; padding: 12px 22px; border-radius: var(--w-btn-radius); border: 0; font: inherit; font-weight: 600; cursor: pointer; white-space: nowrap; }
.w-btn:hover { filter: brightness(1.08); }
.w-top .w-call { flex: none; padding: 8px 16px; font-size: .92rem; }
.site.top-dark .w-top { background: var(--w-dark); border-bottom-color: transparent; }
.site.top-dark .w-brand, .site.top-dark .w-nav a { color: #fff !important; }
.site.top-dark .w-nav a:hover, .site.top-dark .w-nav a[aria-current] { background: rgba(255,255,255,.14); }
.site.top-brand .w-top { background: var(--w-brand); border-bottom-color: transparent; }
.site.top-brand .w-brand, .site.top-brand .w-nav a { color: #fff !important; }
.site.top-brand .w-nav a:hover, .site.top-brand .w-nav a[aria-current] { background: rgba(255,255,255,.18); }
.site.top-brand .w-top .w-call { background: #fff; color: var(--w-brand) !important; }
.w-link { font-weight: 600; text-decoration: none; white-space: nowrap; }
/* blocks */
.w-block { padding: calc(56px * var(--w-space)) 0; display: flow-root; } /* flow-root keeps a last margin inside its band (no white seam between two tinted parts) */
.w-block + .w-block.v-plain:not(.w-hero) { padding-top: calc(16px * var(--w-space)); }
.v-tint { background: var(--w-tint); }
.v-dark { background: var(--w-dark); color: #fff; }
.v-dark a:not(.w-btn) { color: #fff; }
.v-dark .w-btn { background: var(--w-accent); color: #111 !important; }
.v-photo { background: linear-gradient(rgba(0,0,0,.45), rgba(0,0,0,.45)), var(--w-photo, none) center / cover no-repeat, var(--w-dark); color: #fff; }
.v-photo a:not(.w-btn) { color: #fff; }
.w-sub { font-size: 1.12rem; color: var(--w-muted); margin: 0 0 1.2em; max-width: 60ch; }
.v-dark .w-sub, .v-photo .w-sub { color: rgba(255,255,255,.88); }
.w-hero { padding: calc(96px * var(--w-space)) 0; }
.w-hero .w-in { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr); gap: 40px; align-items: center; }
.w-hero.v-photo .w-in { grid-template-columns: minmax(0, 1fr); }
.w-hero.v-photo .w-hero-words { max-width: 720px; }
.w-hero-img { border-radius: var(--w-radius); width: 100%; aspect-ratio: 16 / 10; object-fit: cover; }
div.w-text { max-width: 72ch; }
/* a Heading followed by a block with the same Look reads as one section */
.w-heading.v-plain + .v-plain, .w-heading.v-tint + .v-tint, .w-heading.v-dark + .v-dark { padding-top: 0; }
.w-heading.v-plain:has(+ .v-plain), .w-heading.v-tint:has(+ .v-tint), .w-heading.v-dark:has(+ .v-dark) { padding-bottom: 12px; }
.w-text ul { padding-left: 1.2em; }
.w-text li { margin: .25em 0; }
.w-image figure { margin: 0; }
.w-image img { border-radius: var(--w-radius); width: 100%; max-height: 560px; object-fit: cover; }
.w-image figcaption { color: var(--w-muted); font-size: .9rem; margin-top: 8px; }
.w-cta-row { display: flex; align-items: center; justify-content: space-between; gap: 24px; }
.w-cta-row h2 { margin: 0; }
/* list blocks: Services, Reviews, Gallery */
.w-items { list-style: none; margin: 18px 0 0; padding: 0; display: grid; gap: 16px; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); }
.w-items li { display: flex; flex-direction: column; gap: 6px; }
.l-cards .w-items li { background: #fff; color: var(--w-ink); border: 1px solid var(--card-edge, var(--w-line)); border-radius: var(--w-radius); padding: var(--card-pad, 20px); box-shadow: var(--card-shadow, none); }
.l-cards .w-items li .w-link { margin-top: auto; }
.l-list .w-items { grid-template-columns: minmax(0, 1fr); gap: 0; }
.l-list .w-items li { flex-direction: row; align-items: baseline; gap: 14px; padding: 14px 0; border-bottom: 1px solid var(--t-line, var(--w-line)); }
.l-list .w-items li b { flex: 1 1 auto; min-width: 0; }
.l-list .w-items li span { flex: none; color: var(--w-muted); white-space: nowrap; }
.l-grid .w-items { grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); }
.l-grid .w-items li { background: var(--w-tint); border-radius: var(--w-radius); padding: var(--card-pad, 16px); }
.w-items li span { color: var(--w-muted); font-size: .92rem; }
.w-reviews q { quotes: "\201C" "\201D"; font-size: 1rem; }
.w-reviews .w-items li b { font-size: .9rem; }
.l-list.w-reviews .w-items li { flex-direction: column; align-items: stretch; gap: 4px; }
.w-stars { font-size: 1.05rem; margin: 0; white-space: nowrap; }
.w-stars b { font-size: 1.6rem; }
.w-stars, .w-star-row { color: #E8A317; }
.w-stars span { color: var(--w-muted); }
.v-dark .w-stars span, .v-photo .w-stars span { color: rgba(255,255,255,.8); }
.w-places { list-style: none; padding: 0; margin: 12px 0 0; display: flex; flex-wrap: wrap; gap: 8px; }
.w-places li { background: var(--w-tint); border-radius: var(--pill-radius, var(--w-btn-radius)); padding: var(--pill-pad, 6px 14px); color: var(--w-ink); }
div.w-contact { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 20px; margin-top: 12px; }
.w-contact p { margin: 0; }
.w-contact span { display: block; font-size: .8rem; text-transform: uppercase; letter-spacing: .04em; color: var(--w-muted); margin-bottom: 4px; }
.v-dark .w-contact span, .v-photo .w-contact span { color: rgba(255,255,255,.75); }
.w-faq details { border-bottom: 1px solid var(--w-line); padding: 14px 0; max-width: 80ch; }
.w-faq summary { cursor: pointer; font-weight: 600; }
.w-faq details p { margin: 8px 0 0; }
.w-gallery { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 12px; margin-top: 12px; }
.w-gallery img { border-radius: var(--w-radius); aspect-ratio: 4 / 3; object-fit: cover; width: 100%; }
.l-list .w-gallery { grid-template-columns: minmax(0, 1fr); }
/* per-block look choices: alignment, width, space */
.a-center .w-in { text-align: center; }
.a-center .w-sub, .a-center div.w-text, .a-center .w-faq details { margin-left: auto; margin-right: auto; }
.a-center .w-places, .a-center .w-cta-row { justify-content: center; }
.a-center .w-cta-row { flex-direction: column; }
.a-center .w-items li { text-align: left; }
.a-center .w-form { margin-left: auto; margin-right: auto; text-align: left; }
.wd-narrow .w-in { max-width: 760px; }
.wd-wide .w-in { max-width: 1360px; }
.pd-less { padding-top: calc(24px * var(--w-space)) !important; padding-bottom: calc(24px * var(--w-space)) !important; }
.pd-more { padding-top: calc(96px * var(--w-space)) !important; padding-bottom: calc(96px * var(--w-space)) !important; }
/* Instant Estimate */
.w-est-sizes { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin-top: 16px; }
.w-est-sizes label { cursor: pointer; }
.w-est-sizes input { position: absolute; opacity: 0; pointer-events: none; }
.w-est-sizes span { display: flex; flex-direction: column; gap: 2px; padding: 12px 14px; border: 1px solid var(--w-line); border-radius: var(--w-radius); background: #fff; color: var(--w-ink); height: 100%; }
.w-est-sizes small { color: var(--w-muted); font-size: .82rem; white-space: nowrap; }
.w-est-sizes input:checked + span { border-color: var(--w-brand); box-shadow: inset 0 0 0 2px var(--w-brand); }
.w-est-sizes input:focus-visible + span { outline: 2px solid var(--w-brand); outline-offset: 2px; }
.w-est-price { margin: 4px 0; }
.w-est-price strong { font-size: 1.6rem; color: var(--w-ink); }
.v-dark .w-est-price strong, .v-photo .w-est-price strong { color: inherit; }
.l-cards .w-est-price strong { color: var(--w-ink); }
.w-est .w-fine { margin-top: 12px; }
/* Service Area Map */
.w-map-box { display: grid; grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr); gap: 24px; align-items: start; margin-top: 12px; }
.w-map-box.w-map-list { grid-template-columns: minmax(0, 1fr); }
.w-map-svg { width: 100%; height: auto; background: var(--w-tint); border-radius: var(--w-radius); color: var(--w-ink); }
.w-map-ring { fill: color-mix(in srgb, var(--w-brand) 10%, transparent); stroke: var(--w-brand); stroke-width: 2; stroke-dasharray: 6 6; }
.w-map-pin circle { fill: var(--w-brand); stroke: #fff; stroke-width: 3; }
.w-map-pin text, .w-map-note { font: 600 16px/1 system-ui, sans-serif; fill: var(--w-ink); paint-order: stroke; stroke: #fff; stroke-width: 4px; stroke-linejoin: round; }
.w-map-note { font-weight: 400; fill: var(--w-muted); }
.w-map-box .w-places { margin-top: 0; }
.v-tint .w-places li { background: #fff; }
.v-tint .w-map-svg, .v-dark .w-map-svg, .v-photo .w-map-svg { background: #fff; }
/* Before & After */
.w-ba { margin: 12px 0 0; max-width: 960px; }
.a-center .w-ba { margin-left: auto; margin-right: auto; }
.w-ba-pics { position: relative; overflow: hidden; border-radius: var(--w-radius); aspect-ratio: 16 / 10; background: var(--w-tint); }
.w-ba-pics img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.w-ba-after { clip-path: inset(0 0 0 var(--ba)); }
.w-ba-line { position: absolute; top: 0; bottom: 0; left: var(--ba); width: 3px; margin-left: -1.5px; background: #fff; box-shadow: 0 0 0 1px rgba(0,0,0,.15); pointer-events: none; }
.w-ba-line::after { content: "\2194"; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 36px; height: 36px; border-radius: 50%; background: #fff; color: #222; display: grid; place-items: center; font-size: 18px; box-shadow: 0 2px 8px rgba(0,0,0,.25); }
.w-ba-tag { position: absolute; top: 10px; left: 10px; background: rgba(0,0,0,.6); color: #fff; font-size: .78rem; font-weight: 600; padding: 3px 8px; border-radius: 4px; pointer-events: none; }
.w-ba-tag-a { left: auto; right: 10px; }
.w-ba-range { display: block; width: 100%; margin: 10px 0 0; accent-color: var(--w-brand); }
.w-ba figcaption { color: var(--w-muted); font-size: .9rem; margin-top: 6px; }
/* Request a Quote form */
.w-form { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px 16px; max-width: 760px; margin-top: 16px; }
.w-form label { display: flex; flex-direction: column; gap: 4px; font-size: .9rem; font-weight: 600; }
.w-form .w-wide, .w-form button, .w-form .w-fine { grid-column: 1 / -1; }
.w-form input, .w-form textarea { font: inherit; font-weight: 400; padding: var(--in-pad, 10px 12px); border: 1px solid var(--in-line, var(--w-line)); border-radius: var(--in-radius, min(var(--w-radius), 10px)); background: #fff; color: var(--w-ink); width: 100%; }
.w-form button { justify-self: start; }
.w-fine { font-size: .82rem; color: var(--w-muted); margin: 0; }
.v-dark .w-fine, .v-photo .w-fine { color: rgba(255,255,255,.8); }
/* footer */
.w-foot { background: var(--w-tint); padding: 32px 0; font-size: .9rem; color: var(--w-muted); }
.w-foot .w-in { display: flex; flex-wrap: wrap; gap: 6px 18px; }
.w-foot b { color: var(--w-ink); }
/* phones: one column, smaller header, "Show on phones" off hides a block */
@media (max-width: 720px) {
  .site { font-size: calc(var(--fs-base, 17px) - 1px); }
  .w-in { padding: 0 16px; }
  .w-top .w-in { height: 56px; gap: 10px; }
  .w-brand { max-width: 38%; font-size: 1rem; }
  .w-nav { justify-content: flex-start; }
  .w-nav a { padding: 6px 8px; font-size: .88rem; }
  .w-top .w-call { padding: 6px 12px; font-size: .82rem; }
  .w-block { padding: calc(36px * var(--w-space)) 0; }
  .w-hero { padding: calc(56px * var(--w-space)) 0; }
  .w-hero .w-in { grid-template-columns: minmax(0, 1fr); gap: 20px; }
  .w-cta-row { flex-direction: column; align-items: flex-start; gap: 14px; }
  .w-form { grid-template-columns: minmax(0, 1fr); }
  .w-est-sizes { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .w-map-box { grid-template-columns: minmax(0, 1fr); }
  .pd-more { padding-top: calc(56px * var(--w-space)) !important; padding-bottom: calc(56px * var(--w-space)) !important; }
  .no-phone { display: none; }
}
@media (max-width: 400px) {
  .w-top .w-call { display: none; } /* the Call button moves to the page body (Contact, Hero buttons) on the narrowest phones */
  .w-brand { max-width: 46%; }
}
/* editor preview only: thin outline on hover, the picked block marked, hidden blocks faded */
.is-preview [data-bi] { position: relative; cursor: pointer; }
.is-preview [data-bi]:hover { outline: 2px dashed color-mix(in srgb, var(--w-brand) 60%, transparent); outline-offset: -2px; }
.is-preview [data-bi]:hover::before { content: attr(data-bname); position: absolute; top: 4px; left: 4px; z-index: 3; background: var(--w-brand); color: #fff; font-size: 11px; line-height: 1; padding: 4px 6px; border-radius: 4px; }
.is-preview .is-sel { outline: 2px solid var(--w-brand); outline-offset: -2px; }
.is-preview .is-off { opacity: .35; }
.is-preview .no-phone { display: block; }
@media (max-width: 720px) { .is-preview .no-phone { opacity: .35; } }
.w-empty { color: var(--w-muted); font-style: italic; border: 1px dashed var(--w-line); border-radius: 8px; padding: 10px 14px; margin: 8px 0 0; }
.v-dark .w-empty, .v-photo .w-empty { color: rgba(255,255,255,.8); }

/* One line by default (docs/ui-patterns.md "One line by default", RULES UI-27), baked into every block: headings, card
   titles, buttons, chips and place names stay on one line and end in "…" when they don't fit; the full words are in a
   tooltip and a tap opens them (assets/js/website.js). Only body words flow: Text blocks, the line under a heading,
   captions, FAQ answers and form help. No block may push the page sideways. */
html:has(> body.site), body.site { overflow-x: clip; }
.site :is(h1, h2, h3), .site .w-in > :is(h1, h2, h3) { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; min-width: 0; }
.site div.w-text :is(h1, h2, h3), .site .w-faq summary + * :is(h1, h2, h3) { white-space: normal; }
.site :is(h1, h2, h3).nw-open, .w-faq details[open] summary { white-space: normal; overflow: visible; text-overflow: clip; }
.w-places li, .w-est-sizes label > b, .w-items li > b, .w-btn, .w-link, .w-nav a { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
.w-places li { min-width: 0; }
.w-faq summary { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.w-btn, .w-link { vertical-align: middle; }
.w-in > *, .w-cta-row > *, .w-hero-words > *, .w-contact > *, .w-items > * { min-width: 0; }
.site img, .site video, .site iframe, .site table { max-width: 100%; }
@media (max-width: 600px) {
  .site h1 { font-size: calc(clamp(1.45rem, 7vw, 2rem) * var(--fs-scale, 1)); }
  .site h2 { font-size: calc(clamp(1.2rem, 5.4vw, 1.5rem) * var(--fs-scale, 1)); }
  .site h3 { font-size: calc(1.05rem * var(--fs-scale, 1)); }
  .w-btn { padding-left: 16px; padding-right: 16px; }
}
/* The Photo Gallery band carries the block class w-gallery too: only the pictures box is a grid (a long heading made the band 600px wide on phones). */
section.w-block.w-gallery { display: flow-root; }

/* Step 3 (plans/site-and-style-editor.md): Columns, Motion, header and footer picks. Phones stay one column. */
.c-2 div.w-text { columns: 2; column-gap: calc(28px * var(--w-space, 1)); }
.c-3 div.w-text { columns: 3; column-gap: calc(28px * var(--w-space, 1)); }
.c-2 .w-items { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.c-3 .w-items { grid-template-columns: repeat(3, minmax(0, 1fr)); }
@media (max-width: 700px) { .c-2 div.w-text, .c-3 div.w-text { columns: 1; } .c-2 .w-items, .c-3 .w-items { grid-template-columns: 1fr; } }
.mo-fade { opacity: 0; transform: translateY(18px); transition: opacity .6s ease, transform .6s ease; }
.mo-fade.is-in, .is-preview .mo-fade { opacity: 1; transform: none; }
.logo-small .w-brand img { max-height: 32px; }
.logo-large .w-brand img { max-height: 64px; }
.top-sticky .w-top { position: sticky; top: 0; z-index: 20; }
.w-foot-links { display: flex; flex-wrap: wrap; gap: 6px 16px; }
.foot-c2 .w-foot .w-in, .foot-c3 .w-foot .w-in { display: grid; gap: 8px 24px; }
.foot-c2 .w-foot .w-in { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.foot-c3 .w-foot .w-in { grid-template-columns: repeat(3, minmax(0, 1fr)); }
@media (max-width: 700px) { .foot-c2 .w-foot .w-in, .foot-c3 .w-foot .w-in { grid-template-columns: 1fr; } }
