/* aldermere.css — Aldermere Water. Loaded after site-base.css, never alongside
   shout-labs.css.

   A full REPAINT of the estate's shared class vocabulary, not a palette swap. Every class
   name here is emitted by a partial that both sites share, and renaming one would change
   Shout Labs' rendered HTML — so the isolation between the two themes is by DOCUMENT, not
   by selector: two sheets are never loaded into the same page, so an unprefixed .div here
   can never meet an unprefixed .div there. Nothing in this file may invent a class name,
   because a name that exists in only one theme is a name a shared partial cannot emit.

   The register is a licensed utility talking to bill payers, half of whom arrive on it
   because their water has stopped. That sets every decision below: humanist sans at a size
   you can read on a phone in the rain, no display face, no all-caps, no monospace, rounded
   surfaces, and colour that only ever means something. Accessibility is a demo asset here,
   not a checklist — every interactive target is at least 44px, every focusable thing has a
   visible ring, and every text/ground pair in this file was measured, not eyeballed.

   Shout's crop marks, hazard tape, CLASSIFIED stamp and rotating schematic get no rules:
   Aldermere emits none of that markup, and styling markup that never renders is how dead
   CSS is born. */

:root{
  /* ---- brand ----
     Contrast ratios below are against --paper unless stated, computed with the WCAG 2.x
     relative-luminance formula. Anything that carries body-size text clears 4.5:1;
     anything that is only a border, a fill or a graphic clears 3:1. */
  --ink:#0F2A38;          /* 14.0:1 — body copy, headings, dark grounds */
  --paper:#F4F8F9;        /* the page ground; a tint, not white, so white cards lift off it */
  --surface:#FFFFFF;      /* cards and panels sit ABOVE the page, not flush with it */
  --paper-2:#E4EEF2;      /* the tinted band, i.e. the .cat contract */
  --primary:#0B6E8F;      /* 5.4:1 — links, rules, the one brand colour */
  --deep:#08475C;         /* 9.5:1 — primary pressed, and the status bar ground */
  --all-clear:#1F8A6D;    /* 4.0:1 — SURFACE AND GRAPHIC ONLY. See --all-clear-ink. */
  --planned:#A86100;      /* 4.49:1 — misses body size by a hair. See --planned-ink. */
  --incident:#B3261E;     /* 6.1:1 — safe as text */
  --line:#CFDDE3;         /* hairline rules; 1.3:1, so it never carries meaning alone */

  /* Two darkened companions, and the reason they exist rather than a "close enough".
     #1F8A6D reaches 4.0:1 on paper and #A86100 reaches 4.49:1 — both fail AA at body size,
     and a badge reading "Planned" IS body size. The brand colours stay exactly as issued
     for fills, dots and borders; these carry the words. */
  --all-clear-ink:#146149; /* 6.9:1 */
  --planned-ink:#8F5200;   /* 5.8:1 */

  /* The all-clear lifted for the dark status bar, where #1F8A6D lands at 2.4:1 against
     --deep and fails the 3:1 a non-text indicator needs. */
  --all-clear-bright:#4FC08D; /* 4.5:1 on --deep */

  --muted:#43616F;        /* 6.2:1 — secondary text that is still text, so still AA */
  --line-2:rgba(15,42,56,.08);

  /* Text on the two dark grounds (--ink and --deep). */
  --on-dark:#F4F8F9;      /* 13.9:1 on --ink */
  --on-dark-muted:#B7CBD5;/* 8.9:1 on --ink */
  --on-dark-accent:#7FC3DC;/* 7.6:1 on --ink — the kicker colour, inverted */

  /* Borders on things you can click or type into. WCAG 1.4.11 wants 3:1 for the boundary of
     a control, and --line is 1.3:1 — correct for a rule between two paragraphs, wrong for
     the edge of a text box. */
  --line-control:#5E7C8A; /* 3.6:1 on --surface */

  --focus:var(--ink);     /* re-pointed at --on-dark inside every dark band, below */

  --maxw:1180px;
  --band-pad:72px;
  --radius:14px;          /* cards and panels */
  --radius-sm:8px;        /* buttons, inputs, badges */
  --tap:44px;             /* the floor for anything with a pointer on it */

  /* A humanist stack, and no <link> in the <head> to fetch it with: the Aldermere arm of
     _ShoutLayout emits no font tags at all, which keeps a third-party origin off a site
     served under default-src 'self' and costs no round trip. San Francisco, Segoe UI,
     Cantarell and Noto Sans are all humanist — open apertures, true lowercase, legible at
     a glance and at an angle, which is the whole argument for the genre here. No mono face
     is declared anywhere in this file: a reference like INC-2612 is a name, not a column of
     figures, and setting it in monospace is Shout's dossier conceit, not ours. */
  --sans:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Cantarell,"Noto Sans",Ubuntu,"Helvetica Neue",Arial,sans-serif;
}

/* 18px, not 16. The estate's shared body rule in site-base.css sets 16px/1.55 for a theme
   that says nothing; this one says something. */
body{font-family:var(--sans); font-size:18px; line-height:1.6; color:var(--ink); background:var(--paper)}
::selection{background:var(--primary); color:#fff}

/* ---- focus ----
   One universal rule rather than per-component ones, because the component that gets
   forgotten is always the one somebody tabs into. outline (not box-shadow) so it survives
   forced-colors mode, and an offset so the ring never sits on top of the glyphs it is
   pointing at. Dark bands re-point --focus rather than restating the rule. */
:focus-visible{outline:3px solid var(--focus); outline-offset:2px}
.topbar,.ticker,.req{--focus:var(--on-dark)}

/* ---- top status bar ----
   Shout's is a 34px hairline of tracked-out uppercase. Aldermere's carries the 24-hour
   emergency number, so it is a solid band you cannot mistake for chrome, at a size you can
   read without leaning in. It wraps rather than truncates: the regulator line is a full
   sentence and the whole point of it is that it can be read. */
.topbar{background:var(--deep); color:var(--on-dark)}
.topbar .wrap{display:flex; justify-content:space-between; align-items:center; gap:10px 28px; flex-wrap:wrap}
.topbar .wrap > div{padding:11px 0; font-size:15px; line-height:1.45}
.topbar a{text-decoration:underline; text-underline-offset:3px}
/* Steady, not pulsing. Shout's dot has a 2.4s keyframe on it; a utility's status light
   blinking at a customer who has just lost their supply reads as an alarm going off. */
.dot{display:inline-block; width:10px; height:10px; border-radius:50%; background:var(--all-clear-bright); margin-right:10px}

/* ---- header / nav ---- */
header{position:sticky; top:0; z-index:40; background:rgba(244,248,249,.94); backdrop-filter:blur(8px); border-bottom:1px solid var(--line)}
header .wrap{display:flex; align-items:center; justify-content:space-between; gap:16px 32px; min-height:80px; flex-wrap:wrap; padding-top:8px; padding-bottom:8px}
.brand{display:flex; align-items:center; gap:14px}
.brand .mk{font:700 28px/1.1 var(--sans); letter-spacing:-.02em; color:var(--ink)}
/* The <b> is the interpunct the layout writes between the words of siteName — deliberately
   left unthemed in _ShoutLayout because reproducing that IHtmlContent byte for byte is the
   highest-risk edit in the file. Shout paints it hazard orange; here it is quiet primary,
   so "Aldermere·Water" reads as one name and not as two. */
.brand .mk b{color:var(--primary); font-weight:700}
.brand .sub{font:600 13px/1.4 var(--sans); color:var(--muted); border-left:1px solid var(--line); padding-left:14px}

nav{display:flex; align-items:center; gap:6px 8px; flex-wrap:wrap}
/* The nav items ARE the site's five sections, so they wrap on a narrow screen rather than
   disappearing. Shout can afford `nav .nlink{display:none}` under 900px because its hazard
   CTA survives the cull and stands in for the menu; Aldermere seeds no formPage, so the
   same rule would leave an empty <nav> and no route to anything. Deliberately not copied.
   Padding, not line-height, gets each link to the 44px target. */
nav a{display:inline-flex; align-items:center; min-height:var(--tap); padding:0 14px; border-radius:var(--radius-sm); font:600 17px/1 var(--sans); color:var(--ink)}
nav a:hover{background:var(--paper-2); color:var(--deep)}

.btn{display:inline-flex; align-items:center; justify-content:center; gap:10px; min-height:var(--tap); padding:14px 24px; border:2px solid var(--primary); border-radius:var(--radius-sm); background:var(--primary); color:#fff; font:600 17px/1.2 var(--sans); text-align:center; transition:background .15s, border-color .15s, color .15s}
.btn:hover{background:var(--deep); border-color:var(--deep)}
/* --hazard is the layout's name for "the one loud button", not for a hazard. On a water
   utility the loud button is the one that reaches a human, and a red emergency-looking
   control on a page about a burst main is worse than no emphasis at all — so the modifier
   resolves to the same calm primary and the emphasis comes from placement. */
.btn--hazard{background:var(--primary); border-color:var(--primary); color:#fff}
.btn--hazard:hover{background:var(--deep); border-color:var(--deep)}
.btn--ghost{background:transparent; color:var(--deep)}
.btn--ghost:hover{background:var(--paper-2); border-color:var(--deep); color:var(--deep)}

/* ---- hero / service status banner ---- */
/* Single column, stated once here rather than left to the partial's inline style. Shout's
   two-column hero exists to hold a 400px schematic; serviceStatusBlock has no schematic
   field at all (that is why it is not heroBlock), so a second column is 54px of nothing. */
.hero{padding:64px 0 44px; background:linear-gradient(180deg,var(--paper-2),var(--paper))}
.hero .wrap{display:grid; grid-template-columns:1fr; gap:0}
.kicker{font:600 15px/1.45 var(--sans); color:var(--primary); margin:0 0 16px}
h1{font:700 clamp(36px,5.2vw,60px)/1.1 var(--sans); letter-spacing:-.022em; margin:0 0 22px; max-width:20ch}
h1 .o{color:var(--primary)}
.lead{font-size:22px; line-height:1.5; color:var(--ink); max-width:52ch; margin:0 0 30px}

/* Three headline figures. Sized so a percentage and a word both fit — the stats are
   "99.7% / of samples passed" shapes, not four-digit readouts, and a box drawn tight to
   the digits pushes the label onto two lines. */
.specs{display:flex; flex-wrap:wrap; gap:0; margin:0 0 30px; max-width:660px; background:var(--surface); border:1px solid var(--line); border-radius:var(--radius); overflow:hidden}
.specs div{flex:1 1 170px; padding:18px 20px; border-right:1px solid var(--line)}
.specs div:last-child{border-right:0}
.specs .n{font:700 32px/1.1 var(--sans); letter-spacing:-.02em; color:var(--deep)}
.specs .l{font:500 15px/1.4 var(--sans); color:var(--muted); margin-top:6px}
/* Shout marks its third stat red as a redaction joke. If the block partial keeps that
   tuple shape, red here means the one thing red is allowed to mean on this site — a live
   interruption — and it is honest either way. */
.specs .red{color:var(--incident)}
.cta-row{display:flex; gap:14px; flex-wrap:wrap}

/* ---- section heading ---- */
.shead{display:flex; align-items:flex-end; justify-content:space-between; gap:28px; margin-bottom:36px; border-bottom:2px solid var(--line); padding-bottom:16px}
.shead .idx{font:600 15px/1.45 var(--sans); color:var(--primary); margin-bottom:8px}
.shead h2{font:700 clamp(28px,3.4vw,40px)/1.15 var(--sans); letter-spacing:-.02em; margin:0; color:var(--ink)}
.shead p{font:400 16px/1.55 var(--sans); color:var(--muted); max-width:38ch; text-align:right; margin:0}

/* The breadcrumb, which rides on .kicker and has no rule AT ALL in the Shout sheet — an
   omission worth not propagating, since four page templates emit it. Underlined, because a
   crumb trail whose links are distinguished by colour alone fails 1.4.1 the moment the
   colour is the same family as the text beside it. */
.crumbs{display:flex; flex-wrap:wrap; align-items:center; gap:8px; color:var(--muted); font-weight:500}
.crumbs a{color:var(--primary); text-decoration:underline; text-underline-offset:3px; padding:6px 0}
.crumbs a:hover{color:var(--deep)}

/* ---- ruled card grid (.divs / .div) — the incidents list ----
   The container border, the hairlines and the negative-margin cell scheme all come from
   site-base.css and are theme-neutral; only the paint and the radius change. overflow:hidden
   is already on .divs there, so the radius clips the cells cleanly. */
.divs{background:var(--surface); border-color:var(--line); border-radius:var(--radius)}
.div{padding:28px 30px; transition:background .15s}
.div:hover{background:var(--paper-2)}
/* The reference — INC-2612. Tabular figures so a column of them lines up, which is the
   entire legitimate reason to reach for a monospace face, obtained here without one. */
.div .no{font:600 15px/1.4 var(--sans); font-variant-numeric:tabular-nums; color:var(--muted)}
.div .ic{width:40px; height:40px; margin:16px 0 12px}
.div .ic svg{width:100%; height:100%; stroke:var(--primary); fill:none; stroke-width:1.6}
.div h3{font:700 23px/1.3 var(--sans); letter-spacing:-.015em; margin:12px 0 8px; color:var(--ink)}
.div h3 a:hover{color:var(--deep); text-decoration:underline; text-underline-offset:3px}
.div .qn{font:600 15px/1.45 var(--sans); color:var(--muted)}
.div p{font-size:17px; line-height:1.55; color:var(--ink); margin:12px 0 0; max-width:48ch}

/* The severity badge. IN FLOW at the top of the card, NOT pinned to the corner the way
   Shout pins .clr: an incident heading is a sentence that runs the full width of the cell,
   and the corner badge collides with it. A pill, in sentence case — an upper-cased badge is
   a shout, and the sheet's own brief forbids it. */
.div .clr{display:inline-block; margin-top:14px; padding:7px 14px; border:1px solid currentColor; border-radius:999px; font:600 15px/1.2 var(--sans)}
/* The three tone classes are the shared vocabulary, and ViewHelpers.IncidentClass maps
   Incident→clr-red and Planned→clr-amber. Two colours per badge, and the split is the whole
   accessibility argument in one rule: the BORDER is the brand value as issued, which only
   has to clear 3:1 because it is a graphic; the TEXT is the darkened companion, because
   "Planned" is body-size type and #A86100 lands at 4.49:1 — a fail, by 0.01. */
.clr-amber{color:var(--planned-ink); border-color:var(--planned)}
.clr-orange{color:var(--primary); border-color:var(--primary)}
.clr-red{color:var(--incident); border-color:var(--incident)}
/* The same three tones inside .idx, where the incident page prints "INC-2612 · Incident"
   as one line. Colour alone never carries it — the word is right there. */
.idx .clr-amber,.idx .clr-red,.idx .clr-orange{font-weight:600}

/* ---- gapped card grid (.files / .file) — help articles and report options ---- */
.files{gap:20px}
/* A top rule in primary rather than a border-and-shadow lift, so a card reads as a card at
   rest and not only on hover — which a touch screen never delivers. */
.file{background:var(--surface); border:1px solid var(--line); border-top:4px solid var(--primary); border-radius:var(--radius); padding:24px; transition:box-shadow .15s, transform .15s}
.file:hover{transform:translateY(-2px); box-shadow:0 10px 24px rgba(15,42,56,.10)}
.file .fno{font:600 15px/1.4 var(--sans); font-variant-numeric:tabular-nums; color:var(--muted)}
.file h4{font:700 22px/1.3 var(--sans); letter-spacing:-.015em; margin:12px 0 10px; color:var(--ink)}
.file h4 a:hover{color:var(--deep); text-decoration:underline; text-underline-offset:3px}
.file .desc{font-size:17px; line-height:1.55; color:var(--ink)}
/* Two labelled facts per row on a report option ("Our response" / "Have ready"). Wraps
   rather than truncates: the strings are sentences, and §4.4 of the copy forbids shortening
   them. No min-height on .desc — Shout pins 42px there to keep four cards aligned, and a
   help summary that is one line short does not need padding out to match a neighbour. */
/* --line-2, not --line: this rule sits INSIDE a card whose own border is already --line,
   and two hairlines of equal weight make the card read as two stacked cards. */
.file .row{display:flex; flex-wrap:wrap; justify-content:space-between; gap:10px 20px; margin-top:16px; padding-top:12px; border-top:1px solid var(--line-2); font:500 15px/1.5 var(--sans); color:var(--muted)}
.file .foot{display:flex; flex-wrap:wrap; justify-content:space-between; align-items:center; gap:12px; margin-top:16px}
/* "When to report" is a phrase, not a status word, so this is a rounded rect that wraps
   rather than a nowrap pill that overflows its card. */
.file .status{padding:7px 14px; border-radius:var(--radius-sm); background:var(--paper-2); color:var(--deep); font:600 15px/1.35 var(--sans)}
/* Carries a cost, and the cost is usually the word "Free" — so this is emphasis, not a
   price tag, and it is not set at 22px display size. */
.file .price{font:700 18px/1.2 var(--sans); color:var(--all-clear-ink)}

/* ---- tinted band ---- */
.cat{background:var(--paper-2); border-top:1px solid var(--line); border-bottom:1px solid var(--line)}
/* Cards need to keep lifting off the ground when the ground itself is the tint. */
.cat .file{border-color:var(--line)}

/* ---- updates ticker ----
   The doubled-track marquee is genuinely theme-neutral, so the mechanism is kept and only
   the paint changes — and it is stopped outright under prefers-reduced-motion at the foot
   of this file, because a moving line of supply interruptions is precisely the content
   somebody needs to be able to hold still and read. Slower than Shout's 34s for the same
   reason: the sentences here are longer and they matter more. */
.ticker{background:var(--ink); color:var(--on-dark); overflow:hidden; white-space:nowrap; display:flex; align-items:center}
.ticker .label{flex:0 0 auto; align-self:stretch; display:flex; align-items:center; background:var(--primary); color:#fff; padding:16px 20px; font:600 16px/1.3 var(--sans); z-index:2}
.ticker .track{display:inline-flex; gap:48px; padding-left:48px; animation:marq 48s linear infinite}
.ticker:hover .track,.ticker:focus-within .track{animation-play-state:paused}
.ticker .track span{padding:16px 0; font:500 17px/1.3 var(--sans)}
.ticker .track span::before{content:"\2022  "; color:var(--on-dark-accent)}
@keyframes marq{to{transform:translateX(-50%)}}

/* ---- the dark band: contact strips and the report form ----
   .req is the ground contactStripBlock, ctaBlock and formBlock all share. Left-aligned, not
   centred: three of the four instances carry a phone number and a sentence explaining when
   to ring it, and centred body copy is harder to scan back into. */
.req{background:var(--ink); color:var(--on-dark)}
.req .wrap{text-align:left; padding-top:8px; padding-bottom:8px}
.req .k{font:600 15px/1.45 var(--sans); color:var(--on-dark-accent); margin:0 0 14px}
.req h2{font:700 clamp(28px,3.6vw,42px)/1.15 var(--sans); letter-spacing:-.02em; margin:0 0 16px; color:#fff}
.req h2 .o{color:var(--on-dark-accent)}
.req p{font-size:19px; line-height:1.6; color:var(--on-dark-muted); max-width:62ch; margin:0 0 24px}
/* The emergency number, which contactStripBlock emits as a <p class="kicker"> with an
   optional label and a tel: link. It is the single most useful string on the site when the
   site is being used in anger, so it is set at heading size and given a real tap target. */
.req .kicker{display:flex; flex-wrap:wrap; align-items:baseline; gap:6px 14px; color:var(--on-dark-muted); font-size:16px; margin:0 0 24px}
.req .kicker a{display:inline-block; padding:4px 0; color:#fff; font:700 30px/1.2 var(--sans); font-variant-numeric:tabular-nums; letter-spacing:-.01em; text-decoration:underline; text-underline-offset:5px; text-decoration-thickness:2px}
.req .btn{background:#fff; border-color:#fff; color:var(--deep)}
.req .btn:hover{background:var(--paper-2); border-color:var(--paper-2); color:var(--deep)}

/* ---- Umbraco Forms, inside the dark band ----
   The easiest thing in this file to forget and the loudest when missed: with no rules, the
   form renders in the browser's defaults — dark-on-light controls, unstyled labels — inside
   a near-black band, and the fields simply vanish. The selectors are Forms' own markup and
   are identical on both sites. */
.reqform{max-width:660px; margin:8px 0 0}
.reqform .umbraco-forms-caption{font:700 22px/1.3 var(--sans); color:#fff; margin:0 0 18px}
.reqform .umbraco-forms-field{margin-bottom:22px}
.reqform label{display:block; font:600 17px/1.45 var(--sans); color:var(--on-dark); margin-bottom:8px}
.reqform .umbraco-forms-tooltip,.reqform .help-block,.reqform small{display:block; font:400 15px/1.5 var(--sans); color:var(--on-dark-muted); margin-top:6px}
/* 17px, not 15: any control under 16px makes iOS Safari zoom the whole page on focus, which
   on a form somebody is filling in one-handed is a usability bug dressed as a type choice.
   The border is --line-control and not --line for the same reason it exists — 1.4.11 wants
   3:1 on the edge of a control, and a hairline good enough between paragraphs is not. */
.reqform input[type=text],.reqform input[type=email],.reqform input[type=tel],.reqform input[type=number],.reqform select,.reqform textarea{
  width:100%; min-height:48px; background:var(--surface); border:1px solid var(--line-control); color:var(--ink);
  font:400 17px/1.45 var(--sans); padding:12px 14px; border-radius:var(--radius-sm); outline:none}
.reqform input:focus-visible,.reqform select:focus-visible,.reqform textarea:focus-visible{border-color:var(--ink); outline:3px solid var(--on-dark); outline-offset:2px}
.reqform textarea{min-height:140px; resize:vertical}
/* Checkboxes and radios ship at ~13px and are the smallest targets on any form. */
.reqform input[type=checkbox],.reqform input[type=radio]{width:22px; height:22px; accent-color:var(--primary)}
.reqform .field-validation-error,.reqform .validation-summary-errors,.reqform .umbraco-forms-field.error label{color:#FFB4A9}
.reqform .field-validation-error{display:block; font:600 16px/1.45 var(--sans); margin-top:8px}
.reqform button,.reqform input[type=submit],.reqform .umbraco-forms-navigation input{
  min-height:var(--tap); padding:15px 28px; border:2px solid #fff; border-radius:var(--radius-sm);
  background:#fff; color:var(--deep); font:600 17px/1.2 var(--sans); cursor:pointer; transition:background .15s}
.reqform button:hover,.reqform input[type=submit]:hover,.reqform .umbraco-forms-navigation input:hover{background:var(--paper-2)}
/* The one place the all-clear green is used as issued. It is a 4px graphic rule, not text,
   which is why #1F8A6D is allowed here — 3.5:1 against --ink clears the 3:1 a non-text
   indicator needs, and the words beside it are set in a lightened green that clears 4.5:1.
   Colour is not carrying the message either way; the sentence Forms prints is. */
.reqform .umbraco-forms-submitmessage{border-left:4px solid var(--all-clear); padding:4px 0 4px 18px; font:600 19px/1.6 var(--sans); color:#9FE3C0}

/* ---- rich text prose ----
   Fifteen of Aldermere's twenty-nine blocks are prose. richTextBlock drops editor HTML
   straight into .wrap, and the Shout sheet styles none of it — invisible there because that
   preset's prose is single paragraphs, glaring here.

   Two scoping decisions, both load-bearing. `> .wrap >` keeps these rules off the h2 and p
   that .shead owns three levels down, and off .div p and .file .desc inside the card grids.
   `:not(.req)` keeps them off the dark band: .req p is (0,1,1) and .band > .wrap > p is
   (0,2,1), so without the :not() the prose colour would win and paint contactStripBlock's
   body copy dark-on-dark. */
.band:not(.req) > .wrap > h2{font:700 clamp(26px,3vw,34px)/1.2 var(--sans); letter-spacing:-.02em; margin:0 0 18px; max-width:26ch; color:var(--ink)}
.band:not(.req) > .wrap > h3{font:700 23px/1.3 var(--sans); letter-spacing:-.015em; margin:36px 0 12px; color:var(--ink)}
.band:not(.req) > .wrap > p{font-size:19px; line-height:1.7; color:var(--ink); max-width:66ch; margin:0 0 20px}
.band:not(.req) > .wrap > ul,.band:not(.req) > .wrap > ol{font-size:19px; line-height:1.7; color:var(--ink); max-width:66ch; margin:0 0 20px; padding-left:26px}
.band:not(.req) > .wrap > ul li,.band:not(.req) > .wrap > ol li{margin-bottom:10px}
.band:not(.req) > .wrap > blockquote{margin:0 0 22px; padding:6px 0 6px 22px; border-left:4px solid var(--primary); max-width:62ch; font-size:20px; color:var(--ink)}
/* The page templates put the summary in a bare <p class="lead"> as a direct child of .wrap,
   where the prose rule above out-specifies .lead (0,2,1) against (0,1,0). Restated at the
   same weight so the lead keeps its size instead of quietly becoming a paragraph. */
.band:not(.req) > .wrap > .lead{font-size:22px; line-height:1.5; max-width:52ch; margin:0 0 8px}
.band:not(.req) > .wrap a{color:var(--primary); text-decoration:underline; text-underline-offset:3px; text-decoration-thickness:1.5px}
.band:not(.req) > .wrap a:hover{color:var(--deep)}

/* ---- footer ---- */
footer{border-top:1px solid var(--line); background:var(--paper-2); padding:52px 0 30px}
footer .grid{display:grid; grid-template-columns:1.5fr 1fr 1fr 1fr; gap:36px; margin-bottom:36px}
footer .mk{font:700 25px/1.15 var(--sans); letter-spacing:-.02em; color:var(--ink)}
footer .mk b{color:var(--primary)}
/* Two of these on Aldermere: the supply blurb and the alternative-formats line. Both are
   real information a customer may need, so neither is set at chrome size. */
footer .blurb{font:400 16px/1.6 var(--sans); color:var(--muted); max-width:40ch; margin-top:16px}
footer h5{font:700 17px/1.3 var(--sans); color:var(--ink); margin:0 0 12px}
footer ul{list-style:none; margin:0; padding:0}
footer li{margin:0}
/* inline-flex + min-height rather than a line-height and a margin: it produces the 44px
   target and the spacing between rows in one declaration, and the target is the link
   itself rather than a gap beside it. */
footer li a{display:inline-flex; align-items:center; min-height:var(--tap); font:400 17px/1.4 var(--sans); color:var(--muted)}
footer li a:hover{color:var(--deep); text-decoration:underline; text-underline-offset:3px}
.fbar{display:flex; justify-content:space-between; align-items:center; gap:12px 24px; flex-wrap:wrap; border-top:1px solid var(--line); padding-top:20px; font:400 15px/1.6 var(--sans); color:var(--muted)}

/* ---- responsive ---- */
@media(max-width:900px){
  :root{--band-pad:48px}
  .hero{padding:44px 0 32px}
  .shead{flex-direction:column; align-items:flex-start; gap:12px}
  .shead p{text-align:left; max-width:none}
  footer .grid{grid-template-columns:1fr 1fr; gap:28px}
}
@media(max-width:600px){
  .specs div{flex:1 1 100%; border-right:0; border-bottom:1px solid var(--line)}
  .specs div:last-child{border-bottom:0}
  .topbar .hide-sm{display:none}
  .req .kicker a{font-size:26px}
  footer .grid{grid-template-columns:1fr}
}

/* ---- reduced motion ----
   Safe here in a way it is not on Shout, whose .reveal animates FROM opacity:0 — stopping
   that animation leaves a blank page. Nothing on this site needs to move in order to become
   readable, so everything can simply stop. */
@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  .ticker .track{animation:none}
  .file:hover{transform:none}
  *,*::before,*::after{animation-duration:.01ms !important; animation-iteration-count:1 !important; transition-duration:.01ms !important}
}
