/*
Theme Name:   Nearby Septic (Blocksy Child)
Theme URI:    https://nearbysepticd.wpenginepowered.com
Description:  Child theme for the septic directory (state-agnostic; Texas live). Owns all template customization (T1–T10) per scoping doc Appendix C.4 — no page builders. v0.10: geo-language pass — general pages national (cache-safe), geo pages state-scoped; visitor-state hook; coverage rollup.
Author:       Ross Clurman
Template:     blocksy
Version:      0.25.2
Requires PHP: 8.2
Text Domain:  nearby-septic
*/

/* ==================================================================
   Brand tokens — Nearby Septic Brand v1.0 (July 2026)
   paper leads, bone warms, forest speaks, moss punctuates, ink anchors
   ================================================================== */
:root {
	--ns-bg: #FFFFFF;
	--ns-wash: #F7F5EF;
	--ns-tone: #EFEDE5;
	--ns-bone: #DCD7C9;
	--ns-ink: #1A1A19;
	--ns-mut: #726E60;
	--ns-faint: #8F8A76;
	--ns-hair: #DCD7C9;
	--ns-forest: #31511E;
	--ns-forest-dk: #243D14;
	--ns-forest-wash: #F0F3E7;
	--ns-forest-tint: #D9E3C8;
	--ns-moss: #859F3D;
	--ns-moss-deep: #5F7429;
	--ns-gold: #FFCA4E;
	--ns-gold-dk: #E9AE27;
	--ns-verify: #31511E;
	--ns-verify-bg: #EFF3E7;
	--ns-verify-hair: #CFDCC0;
	--ns-warn-bg: #FBF3DC;
	--ns-warn-ink: #7A5E14;
	--ns-char: #1A1A19;
	/* One family sitewide (standalone mockup spec): Archivo 400–800.
	   --ns-disp kept as an alias so every display-font usage follows. */
	--ns-sans: "Archivo", -apple-system, "Segoe UI", Roboto, sans-serif;
	--ns-disp: "Archivo", -apple-system, "Segoe UI", Roboto, sans-serif;

	/* Table-refresh system (approved mockups: Table Refresh Mockups 1a–1d).
	   Text tones extend the ink family; wheat = the single highlight tint. */
	--ns-body: #3E4234;
	--ns-hairline: #E7E5D8;
	--ns-hairline-soft: #E0DED0;
	--ns-wheat: #F9F6E7;
	--ns-wheat-border: #EBDCA8;
	--ns-row-hover: #FAF9F2;

	/* Back-compat aliases (0.2 scaffold classes still in plugin output) */
	--ns-verified: var(--ns-verify);
	--ns-verified-bg: var(--ns-verify-bg);
	--ns-unverified: var(--ns-warn-ink);
	--ns-unverified-bg: var(--ns-warn-bg);
	--ns-card-border: var(--ns-hair);
}

html { scroll-behavior: smooth; }
.ns-skip { position: absolute; left: -9999px; top: 0; z-index: 100; background: #fff; color: var(--ns-ink); padding: 10px 16px; font-weight: 600; border-radius: 0 0 8px 0; }
.ns-skip:focus { left: 0; }

/* ==================================================================
   Scope: everything the child theme renders sits inside .ns
   ================================================================== */
.ns { font-family: var(--ns-sans); color: var(--ns-ink); font-size: 16px; line-height: 1.55; background: var(--ns-bg); overflow-x: clip; }
.ns * { box-sizing: border-box; }
.ns a { color: var(--ns-ink); text-decoration: none; }
.ns a:hover { color: var(--ns-forest); }
.ns h1, .ns h2 { font-family: var(--ns-disp); font-weight: 700; margin: 0; color: var(--ns-ink); text-wrap: pretty; }
.ns h1 { font-size: clamp(30px, 4vw, 44px); line-height: 1.06; letter-spacing: -.025em; }
.ns h2 { font-size: clamp(22px, 2.6vw, 28px); line-height: 1.12; letter-spacing: -.02em; }
.ns h3 { font-size: 16px; font-weight: 700; letter-spacing: -.01em; margin: 0; }
.ns .dim { color: var(--ns-faint); }
.ns-wrap { max-width: 1180px; margin: 0 auto; padding: 0 24px; }
.ns-sec { padding: 56px 0; }
/* Heroes don't clip their gradient blobs (they fade out naturally over
   the following section); .ns's overflow-x:clip prevents sideways
   scroll from off-canvas blob edges instead. */
.ns-sec--hero { padding: 64px 0 48px; position: relative; overflow: visible; }
.ns-sec--hero .ns-blob { z-index: 0; }
.ns-sec--hero .ns-wrap { position: relative; z-index: 1; }
.ns-sec--wash { background: var(--ns-wash); }
.ns-sec--band { background: var(--ns-forest-wash); }
.ns-sec--forest { background: linear-gradient(180deg, #35571F, #2A4517); color: #DDE7D2; }
.ns-sec--forest h2 { color: #fff; }
.ns-sec--forest .ns-meta { color: #C2D0B2; font-size: 14px; }
.ns-sec--forest .ns-ic { color: #A6BC6B; }
.ns-sec--tight { padding: 36px 0; }
.ns-rule { height: 1px; background: linear-gradient(90deg, rgba(217,213,204,0), #D9D5CC 50%, rgba(217,213,204,0)); }
.ns-kicker { font-size: 11px; letter-spacing: .16em; text-transform: uppercase; font-weight: 700; color: var(--ns-faint); margin-bottom: 12px; }
.ns-dek { color: var(--ns-body); font-size: 17px; line-height: 1.6; margin: 14px 0 0; max-width: 680px; }
.ns-fn { font-size: 12.5px; color: var(--ns-faint); margin-top: 10px; }
.ns-meta { font-size: 13px; color: var(--ns-mut); line-height: 1.55; }
.ns-crumbs { font-size: 12.5px; color: var(--ns-faint); }
.ns-crumbs a { color: var(--ns-faint); }
.ns-crumbs a:hover { color: var(--ns-forest); }
.ns-num { font-weight: 600; font-variant-numeric: tabular-nums; white-space: nowrap; }
.ns-narrow { max-width: 760px; }

/* Long-form prose (page.php, guides) — the typographic rhythm raw
   the_content() lacks. */
.ns-prose { max-width: 760px; font-size: 16px; line-height: 1.7; }
.ns-prose p { margin: 0 0 16px; }
.ns-prose h2 { font-size: clamp(22px, 2.6vw, 28px); margin: 44px 0 14px; letter-spacing: -.02em; }
.ns-prose h3 { font-size: 20px; font-weight: 700; letter-spacing: -.01em; margin: 30px 0 10px; }
.ns-prose h2:first-child { margin-top: 0; }
.ns-prose ul, .ns-prose ol { margin: 0 0 16px; padding-left: 22px; }
.ns-prose li { margin: 7px 0; }
.ns-prose a { color: var(--ns-forest); font-weight: 500; text-decoration: underline; text-decoration-color: var(--ns-forest-tint); text-underline-offset: 3px; }
.ns-prose a:hover { text-decoration-color: var(--ns-forest); }
.ns-prose table { margin: 20px 0 24px; }
.ns-prose blockquote { border-left: 3px solid var(--ns-forest-tint); margin: 20px 0; padding: 4px 0 4px 18px; color: var(--ns-mut); }
.ns-prose strong, .ns-prose b { color: var(--ns-ink); }
.ns-prose em:last-child { color: var(--ns-mut); }
.ns-prose img { max-width: 100%; height: auto; border-radius: 12px; }
.ns-prose hr { border: 0; border-top: 1px solid var(--ns-hair); margin: 32px 0; }

/* Icons */
.ns-ic { width: 18px; height: 18px; stroke: currentColor; fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; vertical-align: -3px; flex: 0 0 auto; }
.ns-ic--lg { width: 24px; height: 24px; color: var(--ns-forest); }

/* Washes */
.ns-blob { position: absolute; border-radius: 50%; pointer-events: none; }

/* ==================================================================
   Header / nav
   ================================================================== */
.ns-nav { background: rgba(255,255,255,.94); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); position: sticky; top: 0; z-index: 40; border-bottom: 1px solid var(--ns-hair); }
body.admin-bar .ns-nav { top: 32px; }
@media (max-width: 782px) { body.admin-bar .ns-nav { top: 46px; } }
.ns-nav-links ul, .ns-mobilenav ul { list-style: none; margin: 0; padding: 0; }
.ns-nav-links ul { display: flex; gap: 22px; }
.ns-mobilenav ul li a { display: block; padding: 10px 0; font-weight: 500; border-bottom: 1px solid var(--ns-wash); }
.ns-nav .ns-wrap { display: flex; align-items: center; gap: 26px; height: 64px; }
.ns-logo { display: flex; align-items: center; gap: 9px; white-space: nowrap; color: var(--ns-ink); }
.ns-logo .ns-wm { font-family: var(--ns-sans); font-size: 15px; font-weight: 800; letter-spacing: 0; word-spacing: normal; }
.ns-logo .ns-wm b { color: var(--ns-forest); font-weight: 800; }
.ns-nav-links { display: flex; gap: 24px; font-size: 14px; font-weight: 600; }
.ns-nav-links a { color: var(--ns-body); border-bottom: 2px solid transparent; padding-bottom: 2px; }
.ns-nav-links a:hover { color: var(--ns-ink); border-bottom-color: var(--ns-gold-dk); }
.ns-nav-links .current-menu-item > a, .ns-nav-links .current-menu-ancestor > a, .ns-nav-links .current_page_item > a { color: var(--ns-ink); border-bottom-color: var(--ns-gold-dk); }
.ns-nav-cta { margin-left: auto; display: flex; gap: 20px; align-items: center; font-size: 13.5px; font-weight: 600; }
.ns-nav-cta > a:first-child { color: var(--ns-body); }
.ns-nav-cta > a:first-child:hover { color: var(--ns-ink); }
.ns-burger { display: none; margin-left: auto; font-size: 19px; background: none; border: 1px solid var(--ns-hair); border-radius: 8px; padding: 2px 10px; cursor: pointer; color: var(--ns-ink); }
/* Burger ↔ close. Fixed 1em box and centred glyph so the button does not
   change width when the character swaps — ✕ is narrower than ☰, and a
   nav control that resizes as you tap it reads as a layout bug. */
.ns-burger-ico { display: inline-block; width: 1em; text-align: center; line-height: 1.35; }
.ns-burger-ico::before { content: "\2630"; }
.ns-burger[aria-expanded="true"] .ns-burger-ico::before { content: "\2715"; font-size: .88em; }
.ns-burger[aria-expanded="true"] { border-color: var(--ns-ink); }
.ns-mobilenav { display: none; border-top: 1px solid var(--ns-hair); background: var(--ns-bg); padding: 12px 24px 18px; }
.ns-mobilenav.open { display: block; }
/* :not(.ns-btn) matters — this generic rule was flattening the "Get quotes"
   button into a plain bordered link in the mobile menu. */
.ns-mobilenav a:not(.ns-btn) { display: block; padding: 10px 0; font-weight: 500; border-bottom: 1px solid var(--ns-wash); }
.ns-mobilenav .ns-btn { display: block; width: 100%; text-align: center; border-bottom: 0; }

/* ==================================================================
   Buttons — primary forest / action gold / ghost / arrow
   ================================================================== */
.ns-btn { display: inline-flex; align-items: center; justify-content: center; gap: 7px; border-radius: 8px; padding: 11px 20px; font-size: 14px; font-weight: 600; cursor: pointer; border: 1px solid transparent; font-family: var(--ns-sans); white-space: nowrap; color: #fff; background: linear-gradient(180deg, #3A5F23, #2A4517); text-decoration: none; }
.ns-btn:hover { background: linear-gradient(180deg, #31511E, #223A10); color: #fff; }
.ns-btn:focus-visible, .ns a:focus-visible { outline: 2px solid var(--ns-moss); outline-offset: 2px; }
.ns-btn--gold { background: linear-gradient(180deg, #FFD26B, #F8BE3E); color: var(--ns-ink); }
.ns-btn--gold:hover { background: linear-gradient(180deg, #FFCA4E, #EFB230); color: var(--ns-ink); }
.ns-btn--ghost { background: #fff; border-color: #CBC5B4; color: var(--ns-ink); }
.ns-btn--ghost:hover { border-color: var(--ns-ink); color: var(--ns-ink); }
.ns-btn--sm { padding: 7px 14px; font-size: 13px; }
/* Anchor buttons: `.ns a` (0,1,1) outranks `.ns-btn` (0,1,0) — re-assert button text colors for <a> buttons. */
.ns a.ns-btn, .ns a.ns-btn:hover { color: #fff; }
.ns a.ns-btn--gold, .ns a.ns-btn--gold:hover { color: var(--ns-ink); }
.ns a.ns-btn--ghost, .ns a.ns-btn--ghost:hover { color: var(--ns-ink); }
.ns a.ns-chip--on, .ns a.ns-chip--on:hover { color: #fff; }
.ns-alink { font-size: 14px; font-weight: 500; }
.ns-alink:after { content: " \2192"; }

/* ==================================================================
   Chips + badges
   ================================================================== */
.ns-chip, .ns a.ns-chip { display: inline-flex; align-items: center; gap: 5px; background: #fff; border: 1px solid var(--ns-hairline-soft); border-radius: 999px; padding: 7px 15px; font-size: 12.5px; font-weight: 600; color: var(--ns-body); }
.ns a.ns-chip:hover { border-color: var(--ns-forest); color: var(--ns-forest); }
.ns-chip--on, .ns-chip--on:hover { background: var(--ns-ink); border-color: var(--ns-ink); color: #fff; }
.ns-badge { display: inline-flex; align-items: center; gap: 5px; font-size: 11.5px; font-weight: 600; padding: 3px 10px; border-radius: 999px; vertical-align: middle; }
.ns-badge--verified { color: var(--ns-verify); background: var(--ns-verify-bg); }
.ns-badge--unverified { color: var(--ns-warn-ink); background: var(--ns-warn-bg); }
.ns-feat-tag { font-size: 10.5px; font-weight: 600; letter-spacing: .05em; text-transform: uppercase; color: var(--ns-moss-deep); }

/* ==================================================================
   Grids & tiles (borderless)
   ================================================================== */
.ns-cols2 { display: grid; grid-template-columns: 1fr 1fr; gap: 36px; }
.ns-cols3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 32px; }
.ns-cols4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 28px; }
.ns-tile { display: block; color: var(--ns-ink); }
.ns-tile .ns-emo { margin-bottom: 12px; }
.ns-tile h3 { margin-bottom: 4px; }
.ns-tile:hover h3 { color: var(--ns-forest); }

/* Cards that stay cards */
.ns-card { background: var(--ns-bg); border: 1px solid var(--ns-hair); border-radius: 14px; padding: 22px; }

/* ==================================================================
   Provider card
   ================================================================== */
.ns-provider-card { display: flex; gap: 16px; align-items: flex-start; border: 1px solid var(--ns-hair); border-radius: 14px; padding: 20px 22px; margin-bottom: 12px; background: var(--ns-bg); }
/* An explicit display value beats the UA's [hidden]{display:none}, so
   setting .hidden from JS silently does nothing on any of these. Every
   element the county and A–Z filters hide needs to be on this list:
   provider cards and the method note (provider filter), county cards,
   grids and letter headings (A–Z filter — without these, filtering left
   empty letter headings and their grid gaps behind). */
.ns-provider-card[hidden],
.ns-method-note[hidden],
.ns-county-grid[hidden],
.ns-letter[hidden] { display: none; }

/* County provider service filter */
.ns-svcfilter { display: flex; gap: 7px; flex-wrap: wrap; margin: 24px 0 10px; }
.ns-svcfilter .ns-chip { cursor: pointer; }
.ns-chip-n { font-weight: 700; font-size: 11px; opacity: .55; font-variant-numeric: tabular-nums; }
.ns-chip--on .ns-chip-n { opacity: .7; }
.ns-svcfilter-count { margin: 0 0 14px; min-height: 1em; }
.ns-svcfilter-count:empty { margin-bottom: 8px; }
.ns-provider-card--unv { border-style: dashed; }
.ns-provider-card .ns-pc-body { flex: 1; min-width: 0; }
.ns-pc-name { font-size: 16.5px; font-weight: 700; letter-spacing: -.01em; display: flex; gap: 9px; align-items: center; flex-wrap: wrap; }
.ns-pc-name a:hover { color: var(--ns-forest); }
.ns-lic-line { font-size: 12.5px; color: var(--ns-mut); margin-top: 5px; font-variant-numeric: tabular-nums; }
.ns-lic-line b { color: var(--ns-verify); font-weight: 600; }
.ns-pc-chips { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 10px; }
.ns-pc-acts { display: flex; flex-direction: column; gap: 8px; flex: 0 0 auto; }
.ns-avatar { flex: 0 0 44px; width: 44px; height: 44px; border-radius: 10px; background: var(--ns-tone); display: flex; align-items: center; justify-content: center; font-family: var(--ns-disp); font-weight: 600; color: var(--ns-forest); font-size: 15px; }

/* ==================================================================
   Tables — editorial system (Table Refresh Mockups 1a–1d).
   No cell borders: strong ink rule under the header, hairlines
   between rows, tabular semibold figures, one highlight row max.
   ================================================================== */
.ns table { width: 100%; border-collapse: collapse; border: none; font-size: 15px; line-height: 1.5; }
.ns th { text-align: left; padding: 0 24px 12px 0; font-weight: 700; font-size: 11px; letter-spacing: .12em; text-transform: uppercase; color: var(--ns-faint); background: none; border: none; border-bottom: 2px solid var(--ns-ink); }
.ns td { padding: 16px 24px 16px 0; border: none; border-bottom: 1px solid var(--ns-hairline); color: var(--ns-body); vertical-align: top; font-variant-numeric: tabular-nums; }
.ns th:last-child, .ns td:last-child { padding-right: 0; }
.ns td:first-child { font-weight: 600; color: var(--ns-ink); }
.ns td strong, .ns td b { font-weight: 600; color: var(--ns-ink); white-space: nowrap; }
.ns td em { font-style: normal; font-size: 14px; color: var(--ns-mut); }
.ns tbody tr:last-child td { border-bottom: none; }
.ns-prose tbody tr:hover td, .wp-block-table tbody tr:hover td { background: var(--ns-row-hover); }
.ns-prose figure.wp-block-table { margin: 2rem 0; }
.ns-prose .wp-block-table figcaption, .ns-prose table + figcaption { text-align: left; margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--ns-hairline); font-size: 12px; color: var(--ns-faint); }
.ns .wp-block-table.is-style-stripes { border-bottom: none; }
.ns .wp-block-table.is-style-stripes tbody tr:nth-child(odd) { background: transparent; }

/* Utility: center every column but the first (frequency matrices) */
.ns-center-data td:not(:first-child), .ns-center-data th:not(:first-child) { text-align: center; padding-right: 0; }

/* Highlight row — cream tint + gold "most common" tag (one per table max) */
.ns tr.ns-highlight td { background: var(--ns-wheat); }
.ns tr.ns-highlight td:first-child { border-radius: 8px 0 0 8px; padding-left: 16px; }
.ns tr.ns-highlight td:last-child { border-radius: 0 8px 8px 0; padding-right: 16px; }
.ns-tag { display: inline-block; font-size: 10px; line-height: 1; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; background: var(--ns-gold-dk); color: var(--ns-ink); padding: 4px 8px; border-radius: 999px; }
.ns td .ns-tag { display: block; width: max-content; margin-top: 6px; }

/* Inline average bar (region tables — only where a sourced average exists) */
.ns-bar-wrap { display: flex; align-items: center; gap: 14px; }
.ns-bar-wrap > strong { width: 44px; font-weight: 600; color: var(--ns-ink); }
.ns-bar { width: 130px; height: 6px; border-radius: 3px; background: var(--ns-tone); }
.ns-bar > span { display: block; height: 6px; border-radius: 3px; background: var(--ns-forest); }

/* Stat band — replaces "at a glance" tables on cost guides */
.ns-statband { background: var(--ns-wash); border-radius: 12px; padding: 28px 30px; display: grid; grid-template-columns: repeat(4, 1fr); margin: 2rem 0; }
.ns-stat { padding: 0 24px; border-left: 1px solid var(--ns-hairline-soft); }
.ns-stat:first-child { padding-left: 0; border-left: none; }
.ns-stat:last-child { padding-right: 0; }
.ns-stat b { display: block; font-family: var(--ns-disp); font-size: 26px; font-weight: 700; letter-spacing: 0; color: var(--ns-ink); font-variant-numeric: tabular-nums; }
.ns-stat span { display: block; margin-top: 5px; font-size: 12px; color: var(--ns-mut); }

/* County layout: fact panel gets the narrow column (mockup 1c) */
@media (min-width: 861px) { .ns-cols2--facts { grid-template-columns: 360px 1fr; gap: 44px; } }

/* Fact panel — county "at a glance" card beside the prose */
.ns-facts { background: var(--ns-wash); border: 1px solid var(--ns-hairline); border-radius: 12px; padding: 26px 26px 10px; }
.ns-facts-title { font-size: 11px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; color: var(--ns-faint); padding-bottom: 14px; border-bottom: 2px solid var(--ns-ink); }
.ns-fact { padding: 15px 0; border-bottom: 1px solid var(--ns-hairline-soft); }
.ns-fact:last-child { border-bottom: none; padding: 16px 0; }
.ns-fact span { display: block; font-size: 12px; color: var(--ns-mut); }
.ns-fact b { display: block; margin-top: 4px; font-size: 16px; font-weight: 700; color: var(--ns-ink); font-variant-numeric: tabular-nums; }
.ns-fact a { font-weight: 600; color: var(--ns-forest); font-size: 14px; }

/* Methodology note — icon + text, vertically centered (mockup 1c fix) */
.ns-method-note { display: flex; align-items: center; gap: 7px; margin-top: 14px; font-size: 12px; color: var(--ns-faint); }
.ns-method-note .ns-i { display: inline-flex; width: 14px; height: 14px; border: 1px solid #C9C7B8; border-radius: 999px; align-items: center; justify-content: center; font-size: 9px; font-style: italic; font-weight: 700; flex: 0 0 auto; }
.ns-method-note a { font-weight: 600; color: var(--ns-forest); }

/* Mobile: content tables collapse to stacked cards (mockup 1d) */
@media (max-width: 640px) {
	.ns-prose thead, .wp-block-table thead { display: none; }
	.ns-prose table, .ns-prose tbody, .wp-block-table table, .wp-block-table tbody { display: block; }
	.ns-prose tbody tr, .wp-block-table tbody tr { display: block; border: 1px solid var(--ns-hairline); border-radius: 12px; padding: 14px 16px; margin-bottom: 10px; background: #fff; }
	.ns-prose tbody td, .wp-block-table tbody td { display: block; border: none; padding: 2px 0; }
	.ns-prose tbody td:first-child, .wp-block-table tbody td:first-child { font-size: 13px; font-weight: 700; padding-bottom: 4px; }
	.ns-prose td strong, .ns-prose td b, .wp-block-table td strong, .wp-block-table td b { font-size: 21px; }
	.ns-prose tbody tr:hover td, .wp-block-table tbody tr:hover td { background: transparent; }
	.ns-prose tr.ns-highlight, .wp-block-table tr.ns-highlight { background: var(--ns-wheat); border-color: var(--ns-wheat-border); }
	.ns-prose tr.ns-highlight td, .wp-block-table tr.ns-highlight td { background: transparent; padding-left: 0; padding-right: 0; border-radius: 0; }
	.ns-bar { width: 100%; }
	.ns-bar-wrap { flex-wrap: wrap; }
	.ns-statband { grid-template-columns: 1fr 1fr; gap: 18px 20px; padding: 20px; }
	.ns-stat { padding: 0; border-left: none; }
	.ns-stat b { font-size: 21px; }
}

/* Stats */
.ns-stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 28px; }
.ns-stats .n { font-family: var(--ns-disp); font-size: clamp(28px, 3.4vw, 38px); font-weight: 700; letter-spacing: -.02em; line-height: 1; font-variant-numeric: tabular-nums; }
.ns-stats .l { font-size: 13px; color: var(--ns-mut); margin-top: 8px; }

/* FAQ */
.ns details { border-bottom: 1px solid var(--ns-hair); padding: 14px 2px; }
.ns details:first-of-type { border-top: 1px solid var(--ns-hair); }
.ns summary { font-weight: 600; font-size: 15.5px; cursor: pointer; }
.ns summary:hover { color: var(--ns-forest); }
.ns details p { margin: 8px 0 0; font-size: 14.5px; color: #4a463e; max-width: 700px; line-height: 1.6; }

/* License box */
.ns-license-block { background: var(--ns-verify-bg); border: 1px solid var(--ns-verify-hair); border-left-width: 1px; border-radius: 14px; padding: 24px; margin: 0; }
.ns-license-block h3 { display: flex; align-items: center; gap: 8px; color: var(--ns-verify); }
.ns-license-block th { border-color: #A8BC8E; color: #4A6532; }
.ns-license-block td { border-color: var(--ns-verify-hair); }
.ns-licfoot { display: flex; gap: 14px; flex-wrap: wrap; margin-top: 12px; font-size: 12.5px; color: #3A5426; }
.ns-license-block--unverified { background: var(--ns-warn-bg); border-color: #E8D9A8; }

/* Steps */
.ns-steps { counter-reset: s; }
.ns-step { display: flex; gap: 14px; align-items: flex-start; padding: 14px 0; border-bottom: 1px solid var(--ns-hair); font-size: 14.5px; line-height: 1.6; }
.ns-step::before { counter-increment: s; content: counter(s); flex: 0 0 24px; height: 24px; border-radius: 999px; border: 1px solid var(--ns-ink); display: flex; align-items: center; justify-content: center; font-weight: 600; font-size: 12px; }

/* Search + forms */
/* Search: the county input has to hold "County or ZIP — e.g. Comal or 78130"
   without clipping, so it gets the lion's share of the row and the whole
   bar is wider. 20ch floor keeps the placeholder intact as the row shrinks.
   --ns-search-h is the one number the three controls agree on: the theme
   sets an explicit height on inputs/selects, which beats flex stretch, so
   they used to sit ~6px shorter than the button no matter what the flex
   container did. Declaring the height on all three (button included) makes
   the row exact instead of coincidental.
   The select carries appearance:none from the parent theme, meaning no
   native arrow is drawn and no room is reserved for one — we draw the
   chevron and reserve the padding ourselves. Vertical centring is by
   line-height = height with zero vertical padding, because a select's
   text box does not honour flex alignment; the old 11px padding + 22.5px
   line-height needed 44.5px inside a 38px content box, which is what was
   clipping the option text top and bottom. */
.ns-search { --ns-search-h: 46px; display: flex; align-items: stretch; gap: 10px; background: var(--ns-bg); border: 1px solid var(--ns-hair); border-radius: 12px; padding: 8px; box-shadow: 0 1px 2px rgba(20,18,14,.04); max-width: 860px; }
.ns-search input,
.ns-search select,
.ns-search .ns-btn,
.ns-search button[type="submit"] { height: var(--ns-search-h); min-height: var(--ns-search-h); box-sizing: border-box; }
.ns-search input { flex: 1.75 1 0; min-width: 20ch; border: 0; padding: 0 14px; line-height: var(--ns-search-h); }
/* The generic `.ns select` / `.ns input[type=...]` rule below sets
   padding: 11px 13px and lands LATER in this file at equal specificity
   (0,1,1), so it silently won here: an 11px vertical padding inside a
   46px border-box leaves a 24px content box, while line-height is the
   full 46px — so the option text overflowed and clipped. Same class of
   bug as `.ns a` beating `.ns-btn` (LEARNINGS L-004). Re-assert with
   `.ns` prefixed (0,2,1) rather than reordering the file. */
.ns .ns-search input,
.ns .ns-search select { padding-top: 0; padding-bottom: 0; }
.ns .ns-search input { padding-left: 14px; padding-right: 14px; }
.ns .ns-search select { padding-left: 13px; padding-right: 34px; }
.ns-search select {
	flex: 1.25 1 0; min-width: 0; border: 0;
	background: var(--ns-wash);
	border-radius: 8px;
	/* Room for the chevron on the right; text ellipses rather than clips
	   if a service name ever outgrows the column. */
	padding: 0 34px 0 13px;
	line-height: var(--ns-search-h);
	text-overflow: ellipsis;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5 6 6.5l5-5' fill='none' stroke='%236B6558' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right 13px center;
}
.ns-search .ns-btn, .ns-search button[type="submit"] { display: inline-flex; align-items: center; justify-content: center; white-space: nowrap; padding-top: 0; padding-bottom: 0; }
/* Inline validation for an unrecognised county / malformed ZIP. */
.ns-search.is-invalid input { box-shadow: inset 0 0 0 1px var(--ns-danger, #B4453A); }
.ns-search-msg { margin: 8px 0 0; font-size: 12.5px; color: var(--ns-danger, #B4453A); font-weight: 500; }
.ns-search-msg:empty { display: none; }

/* Marker underline — a hand-drawn gold arc under a phrase in the hero H1.
   Inline SVG stroke rather than border-bottom so it keeps the sketched
   curve and imperfect ends. Sits behind the text, scales with the phrase,
   and works on the geo-variable headline where the wording changes. */
.ns-mark { position: relative; display: inline; color: var(--ns-forest); }
.ns-mark svg { position: absolute; left: 0; bottom: -.22em; width: 100%; height: .34em; overflow: visible; pointer-events: none; z-index: -1; }
.ns-mark path { fill: none; stroke: var(--ns-gold); stroke-width: 9; stroke-linecap: round; }
@media (prefers-reduced-motion: no-preference) {
	.ns-mark path { stroke-dasharray: 320; stroke-dashoffset: 320; animation: ns-mark-draw .75s cubic-bezier(.65,0,.35,1) .25s forwards; }
}
@keyframes ns-mark-draw { to { stroke-dashoffset: 0; } }
.ns input[type="text"], .ns input[type="email"], .ns input[type="tel"], .ns select, .ns textarea { border: 1px solid var(--ns-hair); border-radius: 8px; padding: 11px 13px; font-size: 14.5px; font-family: var(--ns-sans); color: var(--ns-ink); background: var(--ns-bg); width: 100%; }
.ns-qgrid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 22px; max-width: 760px; }
.ns-qgrid textarea { grid-column: 1 / -1; min-height: 64px; resize: vertical; }
.ns-visually-hidden { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }

/* Marquee — pauses on hover and on keyboard focus, so a county can
   actually be read and clicked instead of chased across the screen. */
.ns-marq { overflow: hidden; white-space: nowrap; padding: 14px 0; border-top: 1px solid var(--ns-hair); border-bottom: 1px solid var(--ns-hair); }
.ns-marq .in { display: inline-block; animation: ns-marq 40s linear infinite; font-size: 13px; color: var(--ns-mut); }
.ns-marq:hover .in, .ns-marq:focus-within .in { animation-play-state: paused; }
.ns-marq a { color: var(--ns-mut); padding: 4px 2px; border-radius: 5px; }
.ns-marq a b { color: var(--ns-ink); font-weight: 600; }
.ns-marq a:hover { color: var(--ns-forest); }
.ns-marq a:hover b { color: var(--ns-forest); text-decoration: underline; text-underline-offset: 3px; }
.ns-marq a:focus-visible { outline: 2px solid var(--ns-gold-dk); outline-offset: 1px; }
.ns-marq-sep { padding: 0 14px; color: var(--ns-faint); }
@keyframes ns-marq { from { transform: translateX(0); } to { transform: translateX(-50%); } }
@media (prefers-reduced-motion: reduce) { .ns-marq .in { animation: none; } }

/* Bands */
.ns-bandrow { display: flex; align-items: center; gap: 20px; flex-wrap: wrap; }
.ns-bandrow > div:first-child { flex: 1; min-width: 260px; }
/* Full-bleed dark band: breathe — inset the row so copy doesn't hug the
   page grid's left rail, and open up the text/CTA gap. */
.ns-sec--forest .ns-bandrow { padding: 10px clamp(8px, 4vw, 64px); gap: 48px; }

/* Feature line under the band headline. Was two &nbsp;s between items and
   baseline-aligned icons, which read as cramped and slightly off. Now a
   flex list: doubled horizontal spacing, and align-items:center so the
   glyph sits on the text's optical centre rather than its baseline. */
.ns-featline { list-style: none; margin: 14px 0 0; padding: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 10px 32px; font-size: 14px; color: var(--ns-meta-on-dark, #C7D6B4); }
.ns-featline li { display: flex; align-items: center; gap: 8px; line-height: 1; }
.ns-featline svg, .ns-featline .ns-ic { flex: none; display: block; }

/* ==================================================================
   Footer
   ================================================================== */
.ns-footer { background: var(--ns-char); color: #B3ADA3; font-size: 13.5px; padding: 56px 0 30px; }
.ns-footer h4 { color: #fff; font-size: 11px; letter-spacing: .08em; text-transform: uppercase; margin: 0 0 12px; }
.ns-footer a { color: #B3ADA3; display: block; padding: 3px 0; }
.ns-footer a:hover { color: #fff; }
.ns-flogo { color: #fff; display: flex; align-items: center; gap: 9px; }
.ns-flogo .ns-wm { font-family: var(--ns-sans); font-size: 15px; font-weight: 800; letter-spacing: 0; word-spacing: normal; }
.ns-flogo .ns-wm b { color: #A6BC6B; font-weight: 800; }
.ns-fcred { font-size: 12.5px; line-height: 1.7; margin-top: 12px; max-width: 460px; }
.ns-fsoc { display: flex; gap: 8px; margin-top: 16px; }
.ns-fsoc a { width: 30px; height: 30px; border: 1px solid #453F37; border-radius: 8px; display: flex; align-items: center; justify-content: center; padding: 0; font-size: 12px; font-weight: 700; }

/* Brand block owns its own row above the link columns — it was previously
   the first grid cell, which pinched the Counties column beside it. */
.ns-fbrand { padding-bottom: 30px; margin-bottom: 32px; border-bottom: 1px solid #3A352C; }

/* Section headings link to their parent hub. Keep the uppercase label
   styling; only the hover colour signals the link. */
.ns-footer h4 a { color: inherit; display: inline; padding: 0; font: inherit; letter-spacing: inherit; }
.ns-footer h4 a:hover { color: #A6BC6B; }
.ns-fgrid b { color: #DCD7C9; font-weight: 600; }

/* Columns are equal height and the "All … →" link sits on the floor of
   each, so those read as one row across the footer no matter how many
   links the content pipeline has shipped above them. */
.ns-fgrid > div { display: flex; flex-direction: column; }
.ns-fall { margin-top: auto; padding-top: 14px; }
/* The bold child was overriding the inherited link hover, so these were
   the only footer links with no hover state at all. */
.ns-footer a:hover b { color: #fff; }
.ns-fall:hover b { text-decoration: underline; text-underline-offset: 3px; }
@media (max-width: 760px) {
	/* Stacked columns have no shared floor to align to. */
	.ns-fall { margin-top: 0; padding-top: 3px; }
}

/* Columns are equal height (grid stretch) and each becomes a flex column,
   so the "All … →" link can be pushed to the bottom with margin-top:auto.
   That lines those links up as a row across the footer no matter how many
   links sit above them — which matters here because the columns are
   content-driven and their lengths change as the pipeline ships. */
.ns-fgrid > div { display: flex; flex-direction: column; align-items: flex-start; }
.ns-fall { margin-top: auto; padding-top: 14px; }
/* The <b> inside carried a fixed colour, so these were the one set of
   footer links with no hover response at all. */
.ns-footer a:hover b { color: #fff; }
.ns-fall b { transition: color .12s; }
.ns-fall:hover b { text-decoration: underline; text-underline-offset: 3px; }
@media (prefers-reduced-motion: reduce) { .ns-fall b { transition: none; } }
@media (max-width: 760px) {
	/* Stacked columns have no shared baseline to align to. */
	.ns-fall { margin-top: 0; padding-top: 6px; }
}

.ns-flegal { border-top: 1px solid #3A352C; margin-top: 30px; padding-top: 18px; font-size: 11.5px; color: #847E73; line-height: 1.65; }
.ns-flegal p { margin: 0; }
.ns-flegal a { display: inline; padding: 0; color: #A8A296; text-decoration: none; }
.ns-flegal a:hover { color: #DCD7C9; }
/* Legal links sit on their own line, always — on a phone they were
   wrapping into the copyright and reading as one crowded run-on. */
.ns-flegal-row { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px 20px; margin-top: 12px; }
.ns-flegal-links { display: flex; flex-wrap: wrap; gap: 8px 18px; }

/* Cost calculator (T9) */
.ns-calcrow { margin-top: 16px; }
.ns-calcrow label { display: block; font-size: 13px; font-weight: 600; margin-bottom: 6px; color: var(--ns-ink); }
.ns-calcrow select { width: 100%; padding: 11px 12px; border: 1px solid var(--ns-hair); border-radius: 10px; font: inherit; font-size: 14.5px; background: #fff; color: var(--ns-ink); }
.ns-calcout { margin-top: 20px; }
.ns-calcres { background: var(--ns-wash); border: 1px solid var(--ns-hair); border-radius: 12px; padding: 20px; }
.ns-calcres--none b { color: var(--ns-forest); }
.ns-calcnum { font-family: var(--ns-disp); font-size: 32px; font-weight: 700; color: var(--ns-forest); letter-spacing: -.02em; font-variant-numeric: tabular-nums; }
.ns-calcsrc { font-size: 12.5px; color: var(--ns-mut); margin-top: 8px; line-height: 1.6; }
.ns-calcnote { font-size: 12.5px; color: var(--ns-mut); margin-top: 8px; line-height: 1.6; }
.ns-calcres .ns-btn, .ns-calcres a.ns-btn { margin-top: 14px; }
.ns-fgrid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 28px; }

/* State hub — A–Z county cards + letter nav */
/* County A–Z index — letter-grouped link columns (mockup 1b) */
.ns-az-bar { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px; margin: 20px 0 4px; }
.ns-az-bar a { width: 30px; height: 30px; display: flex; align-items: center; justify-content: center; border: 1px solid var(--ns-hairline-soft); background: #fff; color: var(--ns-body); border-radius: 6px; font-size: 12.5px; font-weight: 700; }
.ns-az-bar a:hover { border-color: var(--ns-ink); color: var(--ns-ink); }

/* Sticky A–Z index on the state hub.
   The letter jump bar IS the secondary nav on a 254-row page — a section
   nav would only ever say "counties". Because it sticks inside the county
   section rather than the page, it pins while the list is in view and
   releases on its own at the end of it; no JS decides when it leaves.
   It lives inside .ns-wrap, so it breaks out to full width and pads back
   to the grid, otherwise content scrolls through a 1180px-wide bar. */
.ns-subnav--az {
	margin: 20px calc(50% - 50vw) 0;
	/* Was 4px top / 6px bottom plus an 8px margin on the bar inside it —
	   12px of space above the letter tiles and 15px below, which is the
	   asymmetry that read as bottom-heavy. Now symmetric, matching how
	   .ns-subnav-in pads the section-nav variant (9px 0, likewise treating
	   the 1px bottom border as a rule rather than as padding). */
	padding: 10px calc(50vw - 50%);
	background: rgba(253,252,249,.94);
	backdrop-filter: saturate(140%) blur(8px);
	-webkit-backdrop-filter: saturate(140%) blur(8px);
}
/* The bar's own margin would reintroduce the asymmetry it inherits from
   the non-sticky .ns-az-bar (20px 0 4px); the wrapper owns the spacing. */
.ns-subnav--az .ns-az-bar { margin: 0; }
@media (max-width: 900px) {
	/* Keep it sticky on phones — but as one scrollable row, since 26
	   wrapped letters would take a third of the screen. */
	.ns-subnav--az { position: sticky; }
	/* justify-content returns to flex-start here on purpose: centred flex
	   content that overflows a scroll container gets clipped at the start
	   edge and cannot be scrolled back to, so "A" would be unreachable. */
	.ns-subnav--az .ns-az-bar { flex-wrap: nowrap; justify-content: flex-start; overflow-x: auto; scrollbar-width: none; }
	.ns-subnav--az .ns-az-bar::-webkit-scrollbar { display: none; }
	.ns-subnav--az .ns-az-bar a { flex: none; }
}

/* Clears the main nav (60px) + the stuck A–Z bar, so a letter heading
   isn't hidden underneath after a jump. */
.ns-letter { display: flex; align-items: center; gap: 18px; margin-top: 34px; scroll-margin-top: 128px; }
.ns-letter b { font-family: var(--ns-disp); font-size: 25px; font-weight: 700; color: var(--ns-ink); line-height: 1; }
.ns-letter i { flex: 1; height: 1px; background: var(--ns-hairline); }
.ns-letter span { font-size: 12px; color: var(--ns-faint); white-space: nowrap; }
.ns-county-grid { margin-top: 12px; display: grid; grid-template-columns: repeat(4, 1fr); gap: 4px 36px; }
.ns-county-grid > div { padding: 8px 0; }
.ns-county-grid a { font-size: 15px; font-weight: 600; color: var(--ns-ink); }
.ns-county-grid a:hover { color: var(--ns-forest); text-decoration: underline; text-underline-offset: 3px; }
.ns-county-grid .ns-verified { font-size: 12.5px; font-weight: 600; color: var(--ns-forest); }
@media (max-width: 900px) { .ns-county-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 480px) { .ns-county-grid { grid-template-columns: 1fr; } }
#ns-county-filter { max-width: 380px; }

/* Coverage page — waitlist capture */
.ns-wlform { margin-top: 14px; }
.ns-wlform input[type="text"], .ns-wlform input[type="email"] { margin-bottom: 8px; }
.ns-wlrow { display: flex; gap: 8px; align-items: stretch; flex-wrap: wrap; }
.ns-wlrow input { flex: 1 1 200px; min-width: 0; margin-bottom: 0; }
.ns-wlrow .ns-btn { flex: 0 0 auto; white-space: nowrap; }
/* Honeypot: out of sight and out of the accessibility tree, but NOT
   display:none — some bots skip hidden fields, and some browsers skip
   validating them. Kept in the layout at zero size instead. */
.ns-hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
@media (max-width: 480px) { .ns-wlrow .ns-btn { flex: 1 1 100%; } }

/* Fluent Forms embed — inherit the brand form language */
.ns-ffwrap { max-width: 760px; }
.ns-ffwrap .ff-el-form-control { border: 1px solid var(--ns-hair) !important; border-radius: 8px !important; padding: 11px 13px !important; font-size: 14.5px !important; font-family: var(--ns-sans) !important; color: var(--ns-ink) !important; background: var(--ns-bg) !important; }
.ns-ffwrap .ff-el-input--label label { font-size: 12.5px; font-weight: 600; color: var(--ns-mut); }
.ns-ffwrap .ff-btn-submit { border-radius: 8px !important; padding: 11px 20px !important; font-size: 14px !important; font-weight: 600 !important; color: #fff !important; background: linear-gradient(180deg, #3A5F23, #2A4517) !important; border: 0 !important; font-family: var(--ns-sans) !important; }
.ns-ffwrap .ff-btn-submit:hover { background: linear-gradient(180deg, #31511E, #223A10) !important; }
.ns-ffwrap .ff-message-success { background: var(--ns-verify-bg); border: 1px solid var(--ns-verify-hair); border-radius: 12px; padding: 18px; color: #3A5426; }

/* Sticky mobile CTA bar */
.ns-msticky { display: none; }

/* Legacy call CTA (plugin output) */
.ns-call-cta { display: inline-block; font-weight: 700; }
.ns-call-plain { font-weight: 600; }

/* ==================================================================
   Responsive
   ================================================================== */
@media (max-width: 960px) {
	.ns-cols4 { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 760px) {
	.ns-nav-links, .ns-nav-cta { display: none; }
	.ns-burger { display: block; }
	.ns-cols2, .ns-cols3, .ns-stats, .ns-qgrid, .ns-fgrid { grid-template-columns: 1fr 1fr; }
	.ns-search { flex-direction: column; padding: 10px; }
	.ns-search input, .ns-search select { border: 1px solid var(--ns-hair); }
	.ns-provider-card { flex-direction: column; }
	.ns-pc-acts { flex-direction: row; width: 100%; }
	.ns-pc-acts .ns-btn { flex: 1; }
	.ns-sec { padding: 40px 0; }
	.ns-sec--hero { padding: 48px 0 36px; }
	.ns-msticky { display: flex; position: sticky; bottom: 0; z-index: 30; background: #fff; border-top: 1px solid var(--ns-hair); padding: 10px 12px; gap: 10px; box-shadow: 0 -4px 16px rgba(20,18,14,.08); }
	.ns-msticky .ns-btn { flex: 1; }
	.ns-call-cta { display: block; text-align: center; padding: .85em 1em; border-radius: 8px; background: linear-gradient(180deg, #FFD26B, #F8BE3E); color: var(--ns-ink); }
}
@media (max-width: 480px) {
	.ns-cols3, .ns-cols4, .ns-qgrid { grid-template-columns: 1fr; }
	.ns-stats, .ns-fgrid { grid-template-columns: 1fr 1fr; }
	/* Phone portrait (iPhone Pro ≈ 402pt): nothing sits in a half-width
	   column. The calculator and its two explainer panels each take the
	   full measure — at ~190px a two-up panel wraps every few words. */
	.ns-cols2 { grid-template-columns: 1fr; }
	.ns-calcres, .ns-panel, .ns-fact-panel { width: 100%; }
	.ns-wrap { padding: 0 18px; }
}

/* ==================================================================
   Sticky section nav + back-to-top (directory & long-form pages)
   ================================================================== */
/* Sits directly under the main nav, which is 60px tall and already
   sticky — top is expressed against that so the two never overlap.
   Below 900px it un-sticks: two stacked bars eat a third of a phone
   screen, so the floating back-to-top button covers mobile instead. */
.ns-subnav { position: sticky; top: 60px; z-index: 28; background: rgba(253,252,249,.94); backdrop-filter: saturate(140%) blur(8px); border-bottom: 1px solid var(--ns-hair); margin-bottom: 28px; }
body.admin-bar .ns-subnav { top: 92px; }
.ns-subnav-in { display: flex; gap: 4px; overflow-x: auto; scrollbar-width: none; padding: 9px 0; }
.ns-subnav-in::-webkit-scrollbar { display: none; }
.ns-subnav a { white-space: nowrap; font-size: 13.5px; font-weight: 600; color: var(--ns-body); padding: 6px 12px; border-radius: 999px; }
.ns-subnav a:hover { color: var(--ns-ink); background: var(--ns-wash); }
.ns-subnav a.is-on { color: var(--ns-ink); background: var(--ns-forest-wash); }
/* Retracts once the reader is past the content it indexes (see ns.js).
   Transform rather than display so it slides out instead of blinking,
   and pointer-events:none keeps it untabbable while hidden. */
.ns-subnav { transition: transform .22s ease, opacity .22s ease; }
.ns-subnav.is-gone { transform: translateY(-100%); opacity: 0; pointer-events: none; }
@media (max-width: 900px) {
	.ns-subnav { position: static; margin-bottom: 20px; transition: none; }
	.ns-subnav.is-gone { transform: none; opacity: 1; pointer-events: auto; }
}
@media (prefers-reduced-motion: reduce) {
	.ns-subnav { transition: none; }
}

.ns-totop { position: fixed; right: 16px; bottom: 16px; z-index: 40; display: flex; align-items: center; gap: 6px; font: inherit; font-size: 13px; font-weight: 600; color: var(--ns-ink); background: var(--ns-bg); border: 1px solid var(--ns-hair); border-radius: 999px; padding: 9px 15px; cursor: pointer; box-shadow: 0 3px 14px rgba(20,18,14,.13); opacity: 0; visibility: hidden; transform: translateY(8px); transition: opacity .18s, transform .18s, visibility .18s; }
.ns-totop.is-on { opacity: 1; visibility: visible; transform: none; }
.ns-totop:hover { border-color: var(--ns-ink); }
@media (max-width: 760px) {
	/* Default to the normal inset. The 74px lift exists only to clear the
	   sticky mobile CTA bar, and that bar is on county/county-service/
	   provider pages only — everywhere else the button was floating 74px
	   off the floor for no reason. ns.js sets .ns-has-msticky on <body>
	   when the bar is actually present. */
	.ns-totop { bottom: 16px; right: 12px; }
	body.ns-has-msticky .ns-totop { bottom: 74px; }
	/* Once the CTA bar retracts, the button drops back down with it. */
	body.ns-has-msticky .ns-msticky.is-gone ~ .ns-totop,
	body.ns-has-msticky.ns-msticky-gone .ns-totop { bottom: 16px; }
}

/* The mobile CTA bar leaves at the same point the back-to-top button does:
   it is pinned to the bottom of the screen, so past the quote band it is
   sitting on the form it is trying to send people to. */
.ns-msticky { transition: transform .22s ease, opacity .22s ease; }
.ns-msticky.is-gone { transform: translateY(110%); opacity: 0; pointer-events: none; }
@media (prefers-reduced-motion: reduce) { .ns-msticky { transition: none; } }
@media (prefers-reduced-motion: reduce) {
	.ns-totop { transition: none; }
}

/* ==================================================================
   County map — server-rendered SVG, one <a> per county
   ================================================================== */
.ns-map { margin-top: 26px; }
.ns-map svg { width: 100%; height: auto; display: block; }
.ns-map-c { stroke: var(--ns-bg); stroke-width: 1; fill: var(--ns-wash); transition: fill .12s; }
.ns-map-c--0 { fill: #EFEDE6; }
.ns-map-c--1 { fill: #CBD9AE; }
.ns-map-c--2 { fill: #9DB86F; }
.ns-map-c--3 { fill: var(--ns-forest); }
.ns-map-c--off { fill: #F4F2EC; }
.ns-map a:hover .ns-map-c { fill: var(--ns-gold); }
.ns-map a:focus-visible { outline: none; }
.ns-map a:focus-visible .ns-map-c { fill: var(--ns-gold); stroke: var(--ns-ink); stroke-width: 2; }
.ns-map-key { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; margin-top: 14px; font-size: 12.5px; color: var(--ns-mut); }
.ns-map-sw { width: 14px; height: 14px; border-radius: 3px; display: inline-block; }
.ns-map-sw--0 { background: #EFEDE6; }
.ns-map-sw--1 { background: #CBD9AE; }
.ns-map-sw--2 { background: #9DB86F; }
.ns-map-sw--3 { background: var(--ns-forest); }
@media (prefers-reduced-motion: reduce) { .ns-map-c { transition: none; } }

/* Form trust cue — rural visitors are handing over a phone number to a
   site they just met; say plainly what happens to it. */
.ns-formtrust { display: flex; align-items: flex-start; gap: 8px; margin-top: 14px; font-size: 12.5px; line-height: 1.6; color: var(--ns-mut); }
.ns-formtrust svg, .ns-formtrust .ns-ic { flex: none; width: 15px; height: 15px; margin-top: 1px; color: var(--ns-forest); }
.ns-formtrust b { color: var(--ns-body); font-weight: 600; }

/* ==================================================================
   Empty states (404, zero-provider counties, empty sections)
   ================================================================== */
.ns-empty { text-align: center; border: 1px dashed #CBC5B4; border-radius: 14px; padding: 40px 28px; }
.ns-empty .ns-ic { width: 30px; height: 30px; color: var(--ns-moss-deep); }
.ns-empty h3 { margin-top: 12px; font-size: 18px; }
.ns-empty p { margin: 8px auto 0; max-width: 460px; }
.ns-empty .ns-btn { margin-top: 18px; }
.ns-404-code { font-family: var(--ns-disp); font-weight: 600; font-size: 15px; letter-spacing: .12em; color: var(--ns-moss-deep); }

/* ==================================================================
   Print — permit guides & printable resources
   ================================================================== */
.ns-printhead { display: none; }
@media print {
	@page { margin: 1.6cm; }
	body { background: #fff !important; }
	#wpadminbar, .ns-nav, .ns-footer, .ns-msticky, .ns-marq, .ns-blob, .ns-skip,
	.ns-search, .ns-qgrid, form, .ns-btn, button,
	.ns-sec--band, .ns-sec [data-qform], #quote { display: none !important; }
	.ns { font-size: 11.5pt; color: #000; background: #fff; }
	.ns-printhead { display: block; font-family: var(--ns-sans); font-size: 9.5pt; color: #333; border-bottom: 1pt solid #000; padding: 0 0 6pt; margin-bottom: 14pt; }
	.ns-sec, .ns-sec--hero, .ns-sec--wash { padding: 10pt 0 !important; background: #fff !important; }
	.ns-wrap { max-width: none; padding: 0; }
	h1 { font-size: 22pt; } h2 { font-size: 15pt; }
	.ns a { color: #000; text-decoration: none; }
	.ns-sec a[href^="http"]:not(.ns-btn):after { content: " (" attr(href) ")"; font-size: 8.5pt; color: #444; word-break: break-all; }
	.ns a[href^="tel:"]:after { content: none; }
	.ns th { color: #000; border-bottom: 1.5pt solid #000; }
	.ns td { border-bottom: .5pt solid #999; }
	.ns details { border: none; padding: 6pt 0; }
	.ns details > * { display: block; }
	.ns summary { list-style: none; }
	.ns summary::-webkit-details-marker { display: none; }
	.ns-card, .ns-license-block { border: 1pt solid #000; border-radius: 0; break-inside: avoid; }
	.ns-step, .ns-provider-card, .ns details, table { break-inside: avoid; }
	.ns-cols2, .ns-cols3 { display: block; }
	.ns-cols2 > div, .ns-cols3 > div { margin-bottom: 10pt; }
}
