/* =============================================================
   ZenithNord — motion, cards and the yellow/plum accents
   Added 2026-08-27. Loads LAST, after an-light.css.

   WHERE EACH PIECE COMES FROM
   Nothing here is invented. Every pattern is lifted from a sister
   site that already works, so the four brands read as one family:

     scroll reveal    Nord Group   .js-anim [data-rv] / .rv-in
     card motion      EmberNord    lift + accent wipe + corner bloom
                                   + the rotating numbered chip
     company cards    Nord Group   .gw gateway cards, all four brands
     area cards       ArcticNord   .area-card + .area-pill

   THE ACCENTS
   Yellow was doing too little and the page read flat. It is now the
   primary accent everywhere — rules, chips, card tops, pills — and
   the hero's plum (#3E2246 / #231A44, straight off the dawn and
   sunset gradients) is the second, carrying the footer, the bands
   and the deep panels. The blue is gone entirely as of the fourth
   pass — the ground is a warm paper and every heading is plum.
   ============================================================= */

:root{
  --plum:#3E2246;        /* dawn gradient, stop 3 */
  --plum-deep:#231A44;   /* sunset gradient, stop 2 */
  --plum-wine:#6E2A3E;   /* dawn gradient, stop 4 */
  --gold:#FFC533;
  --gold-lit:#FFD873;
  --gold-deep:#C8952E;
  --ember:#E85E14;
  --ease-out:cubic-bezier(.22,.75,.3,1);
  --ease-pop:cubic-bezier(.34,1.56,.64,1);
}

/* =============================================================
   1. SCROLL REVEAL  (Nord Group)

   Nothing is hidden by CSS until the script adds .js-anim to
   <html>, so if the script fails or the visitor asked for reduced
   motion the page is simply static and fully visible. Content can
   never be left invisible by this file.
   ============================================================= */
.js-anim [data-rv]{
  opacity:0;
  translate:0 22px;
  transition:opacity .62s var(--ease-out), translate .62s var(--ease-out);
}
.js-anim [data-rv].rv-in{opacity:1;translate:0 0;}

/* the numbered chip pops in just behind its card */
.js-anim .step[data-rv] .cnum,
.js-anim .num-card[data-rv] .cnum{
  scale:.7;opacity:0;
  transition:scale .5s var(--ease-pop) .14s, opacity .38s .14s;
}
.js-anim .step[data-rv].rv-in .cnum,
.js-anim .num-card[data-rv].rv-in .cnum{scale:1;opacity:1;}

/* the rule under a section title wipes in from the left */
.js-anim .title-rule[data-rv]{
  opacity:1;translate:0 0;scale:0 1;transform-origin:left center;
  transition:scale .85s var(--ease-out);
}
.js-anim .title-rule[data-rv].rv-in{scale:1 1;}

@media(prefers-reduced-motion:reduce){
  .js-anim [data-rv],
  .js-anim .step[data-rv] .cnum,
  .js-anim .num-card[data-rv] .cnum,
  .js-anim .title-rule[data-rv]{
    opacity:1 !important;translate:none !important;scale:none !important;
    transition:none !important;
  }
}

/* the old always-on fade is replaced by the reveal above */
.reveal{opacity:1 !important;transform:none !important;}


/* =============================================================
   2. THE CARD  (EmberNord)

   Four things happen together on hover: the card lifts, an accent
   bar wipes across the top from the left, a soft accent bloom
   grows out of the top-right corner, and any numbered chip turns
   and grows. Applied to every card family on the page so they
   behave identically.
   ============================================================= */
.step,.why-item,.num-card,.service-card,.contact-block,.grp-card,.area-card{
  position:relative;
  isolation:isolate;
  overflow:hidden;
  transition:transform .34s var(--ease-out),
             box-shadow .34s var(--ease-out),
             border-color .34s var(--ease-out);
}
.step>*,.why-item>*,.num-card>*,.service-card>*,
.contact-block>*,.grp-card>*,.area-card>*{position:relative;z-index:1;}

/* the bar across the top */
.step::before,.why-item::before,.num-card::before,.area-card::before{
  content:"";position:absolute;left:0;right:0;top:0;height:4px;
  background:var(--gold);
  transform:scaleX(0);transform-origin:left;
  transition:transform .45s var(--ease-out);
  z-index:2;
}
.step:hover::before,.why-item:hover::before,
.num-card:hover::before,.area-card:hover::before{transform:scaleX(1);}

/* an-town.css uses .step::before as the CONNECTOR LINE between the numbered
   dots on the old vertical timeline, and gives the first and last step their
   own half-width variants:

       .step:first-child::before { left:50%; width:50%; }
       .step:last-child::before  { width:50%; }

   Those are two classes deep and beat the single-class rule above, so on a
   six-card grid the eyebrow came out half-width on cards 1 and 6 and full
   width on 2-5. Re-stating them at matching depth is the fix; the timeline
   they were drawn for no longer exists. */
.steps .step:first-child::before,
.steps .step:last-child::before,
.why-list .why-item:first-child::before,
.why-list .why-item:last-child::before{
  top:0;left:0;right:0;width:auto;height:4px;
  background:var(--gold);
  transform:scaleX(0);transform-origin:left;
}
.steps .step:first-child:hover::before,
.steps .step:last-child:hover::before,
.why-list .why-item:first-child:hover::before,
.why-list .why-item:last-child:hover::before{transform:scaleX(1);}

/* the bloom out of the top-right corner */
.step::after,.why-item::after,.num-card::after,.area-card::after{
  content:"";position:absolute;top:-40px;right:-40px;
  width:96px;height:96px;border-radius:50%;
  background:var(--gold);opacity:0;transform:scale(.4);
  transition:opacity .4s ease, transform .5s var(--ease-pop);
  pointer-events:none;z-index:0;
}
.step:hover::after,.why-item:hover::after,
.num-card:hover::after,.area-card:hover::after{opacity:.22;transform:scale(1);}

.step:hover,.why-item:hover,.num-card:hover,.area-card:hover{
  transform:translateY(-7px);
  box-shadow:0 30px 64px rgba(62,34,70,.20);
  border-color:var(--gold-deep);
}

/* the numbered chip */
.cnum{
  display:inline-flex;align-items:center;justify-content:center;
  width:38px;height:38px;border-radius:11px;
  background:var(--gold);color:var(--plum-deep);
  font-weight:900;font-size:1.02rem;line-height:1;
  margin-bottom:.85rem;
  box-shadow:0 4px 14px rgba(255,197,51,.34);
  transition:transform .42s var(--ease-pop), background .42s, color .42s;
}
.step:hover .cnum,.num-card:hover .cnum{
  transform:rotate(-6deg) scale(1.12);
  background:var(--plum-deep);color:var(--gold);
}


/* =============================================================
   3. THE THREE SECTIONS THAT READ FLAT

   "How the numbers actually work" was a two-column table, which is
   why it was tiring — you had to read every row to find anything.
   It becomes cards. The seven install stages and the return-detail
   list get the same card, so all three sections behave alike.
   ============================================================= */
.steps,.why-list,.num-grid{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(290px,1fr));
  gap:1.4rem;
  margin-top:2rem;
}
.steps::before,.spine::before{display:none;}   /* the old vertical spine */

.step,.why-item,.num-card{
  background:var(--card,#fff);
  border:1.5px solid var(--line,rgba(62,34,70,.16));
  border-radius:16px;
  padding:1.7rem 1.5rem;
  display:flex;flex-direction:column;
}
.step b,.why-item b,.num-card b{
  display:block;font-size:1.1rem;font-weight:800;
  color:var(--ink,#3E2246);margin-bottom:.55rem;letter-spacing:-.01em;
}
.step p,.why-item p,.num-card p{
  font-size:.93rem;line-height:1.72;color:var(--body,#4A3358);margin:0;flex:1;
}
/* the question a card answers, above its heading */
.num-card .q{
  display:block;font-size:.7rem;font-weight:800;letter-spacing:.14em;
  text-transform:uppercase;color:var(--warm,#A83A2A);margin-bottom:.5rem;
}
.step::before,.why-item::before{background:var(--gold);}
.why-item{border-left:none;}


/* =============================================================
   4. COMPANY CARDS  (Nord Group .gw)

   All four brands, the group site's own treatment: logo plate left,
   trade in the brand's colour, body, then a footed link whose arrow
   slides on hover. Each card carries its brand accent as --gw-c.
   ============================================================= */
.gw-grid{
  display:grid;grid-template-columns:repeat(4,1fr);gap:1rem;margin-top:2rem;
}
@media(max-width:1000px){.gw-grid{grid-template-columns:repeat(2,1fr);}}
@media(max-width:560px){.gw-grid{grid-template-columns:1fr;}}

.gw{
  --gw-c:var(--gold);
  position:relative;display:flex;flex-direction:column;height:100%;
  background:var(--card,#fff);
  border:1px solid var(--line,rgba(62,34,70,.16));
  border-radius:16px;padding:26px 22px 22px;
  text-decoration:none;overflow:hidden;
  transition:transform .24s var(--ease-out),box-shadow .24s var(--ease-out),border-color .24s;
}
.gw::before{content:'';position:absolute;inset:0 0 auto;height:5px;background:var(--gw-c);}
.gw:hover{transform:translateY(-6px);box-shadow:0 22px 50px rgba(62,34,70,.18);border-color:transparent;}
.gw-logo{height:70px;display:flex;align-items:center;margin-bottom:16px;}
.gw-logo img{max-height:70px;max-width:100%;width:auto;object-fit:contain;object-position:left center;}
.gw-logo .gw-fb{display:none;font-weight:800;font-size:1.25rem;letter-spacing:-.02em;color:var(--ink,#3E2246);}
.gw-logo.nologo img{display:none;}
.gw-logo.nologo .gw-fb{display:block;}
.gw-tag{
  font-size:.72rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;
  color:var(--gw-c);margin:0 0 12px;
}
.gw-body{flex:1 1 auto;}
.gw-body p{font-size:.9rem;line-height:1.65;color:var(--body,#4A3358);margin:0;}
.gw-go{
  margin-top:18px;padding-top:14px;border-top:1px solid var(--line,rgba(62,34,70,.16));
  display:inline-flex;align-items:center;gap:8px;
  font-size:.86rem;font-weight:700;color:var(--ink,#3E2246);
}
.gw-go .arw{transition:transform .18s;}
.gw:hover .gw-go .arw{transform:translateX(4px);}

/* brand accents, sampled from each logo — the group site's own values */
.gw--arctic{--gw-c:#5292B9;}
.gw--ember {--gw-c:#E06C2D;}
.gw--aura  {--gw-c:#12A093;}
.gw--zenith{--gw-c:#ECB53E;}
/* our own card, marked as the one you are already on */
.gw--zenith{background:linear-gradient(180deg,rgba(255,197,51,.14),rgba(255,197,51,.04));}
.gw--zenith .gw-here{
  position:absolute;top:14px;right:14px;
  font-size:.58rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;
  color:var(--plum-deep);background:var(--gold);
  padding:.22rem .5rem;border-radius:999px;
}


/* =============================================================
   5. WHERE WE WORK  (ArcticNord .area-card)

   Was a flat row of unlinked pills. Becomes ArcticNord's county
   cards, each one a heading that links to the county page with its
   towns as pills underneath — which is also the shape that carries
   the internal linking the town pages need.
   ============================================================= */
.areas-cards{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));
  gap:1.5rem;margin-top:2rem;
}
.area-card{
  background:linear-gradient(135deg,rgba(255,197,51,.16) 0%,rgba(255,197,51,.05) 100%);
  border:1.5px solid rgba(255,197,51,.5);
  border-radius:16px;padding:1.75rem;
  box-shadow:inset 0 4px 0 0 var(--gold),0 10px 30px rgba(62,34,70,.10);
}
.area-card:hover{box-shadow:inset 0 4px 0 0 var(--gold-lit),0 18px 46px rgba(62,34,70,.20);}
.area-card h3{font-size:1.15rem;font-weight:800;margin:0 0 1rem;}
.area-card h3 a{color:var(--ink,#3E2246);text-decoration:none;transition:color .2s;}
.area-card h3 a:hover{color:var(--warm,#A83A2A);}
.area-card .area-pills{display:flex;flex-wrap:wrap;gap:.5rem;}
.area-card a.area-pill{
  font-size:.78rem;color:var(--body,#4A3358);
  border:1px solid rgba(62,34,70,.24);border-radius:20px;
  padding:.3rem .8rem;white-space:nowrap;text-decoration:none;
  transition:border-color .2s,color .2s,background .2s;
}
.area-card a.area-pill:hover{
  border-color:var(--gold-deep);color:var(--ink,#3E2246);background:rgba(255,197,51,.30);
}


/* =============================================================
   6. MORE YELLOW, AND THE HERO'S PLUM

   A rule under every section title, plum for the alternating bands
   and the deep panels, and yellow doing the accent work it was not
   doing before.
   ============================================================= */
.title-rule{
  display:block;width:104px;height:5px;border-radius:3px;
  background:linear-gradient(90deg,var(--gold),var(--ember));
  margin:.9rem 0 1.1rem;
}

/* Headings move off the blue and onto the plum. The blue stays as the
   ground and the body copy; plum now carries every title, which is what
   makes the yellow/plum pairing read as the brand rather than as two
   accents on a blue site. 12.6:1 on the page, 13.8:1 on a white card.
   Titles sitting ON a plum band stay white — those rules are more
   specific and come later. */
.section-title{
  color:var(--plum) !important;
  margin-bottom:.2rem;
}
.step b,.why-item b,.num-card b,
.service-card h3,.contact-block h4,
.area-card h3 a,.zone h3,.srow h3,
.split h3,.psplit h3,.grp-card b,
details summary{color:var(--plum) !important;}

/* the eyebrow above a title, and the small caps labels */
.land-eyebrow,.split-kicker{color:var(--warm) !important;}

/* =============================================================
   THE PLUM BANDS

   Yellow and plum is the pairing the site is built on, so the
   alternating band is plum rather than grey. Every section that
   takes it is listed here once, and everything that sits on it is
   coloured once, so a new plum section is a one-line change.

   Location pages use aria-label because their section has the town
   name in it — "Our services in Mansfield" — and there are 56 of
   them with no shared class to hook.
   ============================================================= */
#process,#group,#what-we-install,
section[aria-label="Quote"],
section[aria-label="Why choose ZenithNord"],
section[aria-label^="Our services in"]{
  background:linear-gradient(180deg,var(--plum-deep),var(--plum)) !important;
  border-top:4px solid var(--gold);
}

/* copy on the plum */
#process .section-title,#group .section-title,#what-we-install .section-title,
section[aria-label="Why choose ZenithNord"] .section-title,
section[aria-label^="Our services in"] .section-title{color:#fff !important;}

#process .section-subtitle,#group .section-subtitle,#what-we-install .section-subtitle,
section[aria-label="Why choose ZenithNord"] .section-subtitle,
section[aria-label^="Our services in"] .section-subtitle{color:#E8DCEC !important;}

/* White cards lift off the plum. :not(.gw--field) matters — SOLARFIELD keeps
   its navy, and because this rule carries !important a plain
   "#group .gw--field{background:...}" could never win against it no matter
   how specific it was. That is why the SOLARFIELD card stayed white with a
   white-ink logo on it through two attempted fixes: the first missed the
   specificity, the second was still losing to this !important. */
#process .step,#group .gw:not(.gw--field){
  background:#fff !important;
  border-color:rgba(255,255,255,.18) !important;
  box-shadow:0 18px 44px rgba(10,8,20,.30) !important;
}
#process .step:hover,#group .gw:hover{
  box-shadow:0 30px 64px rgba(10,8,20,.42) !important;
}

/* The service cards wear their yellow bar as an INSET box-shadow, not a
   border — so the flat "0 18px 44px" above wiped it out, and with it the
   hover state that swaps the bar to ember. The drop shadow has to carry the
   inset along with it. That is what lost the eyebrows and the animation. */
#what-we-install .service-card,
section[aria-label^="Our services in"] .service-card{
  background:#fff !important;
  border-color:rgba(255,255,255,.18) !important;
  box-shadow:inset 0 4px 0 0 var(--gold),0 18px 44px rgba(10,8,20,.30) !important;
}
#what-we-install .service-card:hover,
section[aria-label^="Our services in"] .service-card:hover{
  transform:translateY(-7px);
  box-shadow:inset 0 4px 0 0 var(--ember),0 30px 64px rgba(10,8,20,.42) !important;
}

/* the stats strip — 0% VAT, EV miles, MCS, counties */
section[aria-label="At a glance"]{
  background:linear-gradient(180deg,var(--plum-deep),var(--plum)) !important;
  border-top:4px solid var(--gold);
}
section[aria-label="At a glance"] .statband{
  border-top:none !important;border-bottom:none !important;
}
section[aria-label="At a glance"] .statband b{color:var(--gold) !important;}
section[aria-label="At a glance"] .statband span{color:#E8DCEC !important;}

/* The link pills under "What we do" were dark red, which was right on a
   light ground and unreadable on plum. */
#what-we-install .inline-links a,
section[aria-label^="Our services in"] .inline-links a{
  color:#FFD873 !important;
  border-color:rgba(255,216,115,.42) !important;
  background:rgba(255,255,255,.05) !important;
}
#what-we-install .inline-links a:hover,
section[aria-label^="Our services in"] .inline-links a:hover{
  background:var(--gold) !important;color:var(--plum-deep) !important;
  border-color:var(--gold) !important;
}

/* =============================================================
   COMMON QUESTIONS

   The FAQ carried an inline background:#1B1E22, which the light
   theme was catching and turning into --band. That made it a
   THIRD ground — neither the paper above it nor the plum bands
   elsewhere — which is why it read as not belonging. It joins the
   plum bands, and the accordions are restyled for a dark ground.
   ============================================================= */
#faq{
  background:linear-gradient(180deg,var(--plum-deep),var(--plum)) !important;
  border-top:4px solid var(--gold);
}
#faq .section-title{color:#fff !important;}
#faq .section-subtitle{color:#E8DCEC !important;}
#faq details{
  background:rgba(255,255,255,.05);
  border:1px solid rgba(255,197,51,.20) !important;
  border-radius:12px;
  margin-bottom:.7rem;
  padding:0 1.15rem;
  transition:background .25s var(--ease-out),border-color .25s var(--ease-out);
}
#faq details:hover{background:rgba(255,197,51,.10);border-color:rgba(255,197,51,.42) !important;}
#faq details[open]{background:rgba(255,197,51,.12);border-color:var(--gold) !important;}
#faq summary{
  color:#fff !important;
  padding:1.05rem 0;
  font-weight:700;
}
#faq summary .plus{color:var(--gold) !important;}
#faq details p,#faq details li{color:#E8DCEC !important;}
#faq details a{color:var(--gold) !important;}


/* the engineering quote — plum ground, gold rule, gold attribution */
section[aria-label="Quote"] .quoteband{
  border-left-color:var(--gold);
  padding-left:2rem;
}
section[aria-label="Quote"] .quoteband p{color:#fff !important;}
section[aria-label="Quote"] .quoteband cite{color:var(--gold) !important;}


/* =============================================================
   "WHY ... CALLS US BACK"

   Four numbered rows of unbroken prose on a flat ground. Same
   content, given the card the rest of the site uses so the eye has
   edges to work with.
   ============================================================= */
/* an-town.css builds this as a numbered TIMELINE, not cards, and the
   leftovers were fighting the grid:

       .spine     { padding-left:3.4rem }      <- indented the whole grid
       .spine::before { the vertical rule }
       .srow      { position:relative; padding:0 0 2.2rem }
       .srow .num { position:absolute; left:-3.4rem }  <- chip OUTSIDE the card
       .srow h3   { color:#fff }               <- white on a white card
       .srow p    { color:#D7D3CB }

   The chip being pulled 3.4rem to the left of its own card is why the first
   one looked misplaced, and the white heading is why the writing vanished.
   Every one of those is overridden below rather than relied on to lose a
   specificity contest, because this section has to survive an-town.css
   loading before it on 56 pages. */
section[aria-label="Why choose ZenithNord"] .spine{
  display:grid !important;
  grid-template-columns:repeat(auto-fit,minmax(290px,1fr)) !important;
  gap:1.4rem !important;
  margin-top:2rem !important;
  padding-left:0 !important;
  position:static !important;
}
section[aria-label="Why choose ZenithNord"] .spine::before{display:none !important;}

/* These were white cards with plum text and it still could not be read, so
   they are dark cards with white text instead — which cannot fail whichever
   rule wins the background, because both are set here together. A deeper
   plum than the band behind them, with a gold top edge, so they still read
   as raised rather than as a hole in the section. */
section[aria-label="Why choose ZenithNord"] .srow{
  position:relative !important;
  background:#160F2E !important;
  border:1px solid rgba(255,197,51,.28) !important;
  border-top:4px solid var(--gold) !important;
  border-radius:16px !important;
  padding:1.7rem 1.5rem !important;
  box-shadow:0 18px 44px rgba(8,5,18,.42) !important;
  display:flex !important;flex-direction:column !important;
  overflow:hidden;isolation:isolate;
  transition:transform .34s var(--ease-out),box-shadow .34s var(--ease-out);
}
section[aria-label="Why choose ZenithNord"] .srow:hover{
  transform:translateY(-7px);
  box-shadow:0 30px 64px rgba(10,8,20,.42) !important;
}
section[aria-label="Why choose ZenithNord"] .srow .num{
  position:static !important;
  left:auto !important;top:auto !important;
  width:38px !important;height:38px !important;
  border-radius:11px !important;
  display:inline-flex !important;align-items:center;justify-content:center;
  background:var(--gold) !important;color:var(--plum-deep) !important;
  border:none !important;
  font-weight:900 !important;font-size:1.02rem !important;
  margin-bottom:.85rem !important;
  box-shadow:0 4px 14px rgba(255,197,51,.34);
  transition:transform .42s var(--ease-pop),background .42s,color .42s;
}
section[aria-label="Why choose ZenithNord"] .srow:hover .num{
  transform:rotate(-6deg) scale(1.12);
  background:var(--plum-deep) !important;color:var(--gold) !important;
}
section[aria-label="Why choose ZenithNord"] .srow h3,
section[aria-label="Why choose ZenithNord"] .srow h3 *{
  font-size:1.1rem !important;font-weight:800;
  color:#FFFFFF !important;margin:0 0 .55rem !important;
}
section[aria-label="Why choose ZenithNord"] .srow p,
section[aria-label="Why choose ZenithNord"] .srow p *,
section[aria-label="Why choose ZenithNord"] .srow li{
  font-size:.93rem !important;line-height:1.72;
  color:#E8DCEC !important;margin:0 !important;flex:1;
}
section[aria-label="Why choose ZenithNord"] .srow a{color:var(--gold) !important;}


/* =============================================================
   "THE ROOFS HERE, AND WHAT THEY DECIDE"

   A tabbed panel of long prose with nothing to break it up. The
   tabs become proper pills and the panel becomes a card, so the
   run of text has a container rather than floating on the page.
   ============================================================= */
#an-local-detail .zsw{
  display:flex;flex-wrap:wrap;gap:.6rem;margin:1.6rem 0 1.2rem;
}
#an-local-detail .zsw button{
  font-size:.82rem;font-weight:700;
  padding:.55rem 1.1rem;border-radius:999px;
  border:1.5px solid var(--edge,rgba(62,34,70,.30));
  background:transparent;color:var(--body,#4A3358);cursor:pointer;
  transition:background .2s,color .2s,border-color .2s;
}
#an-local-detail .zsw button:hover{border-color:var(--gold-deep);background:rgba(255,197,51,.18);}
#an-local-detail .zsw button[aria-selected="true"]{
  background:var(--gold);border-color:var(--gold);
  color:var(--plum-deep);box-shadow:0 4px 14px rgba(255,197,51,.30);
}
#an-local-detail .zone{
  background:var(--card,#fff);
  border:1.5px solid var(--line,rgba(62,34,70,.16));
  border-top:4px solid var(--gold);
  border-radius:16px;padding:1.8rem 1.7rem;
  box-shadow:0 8px 26px rgba(62,34,70,.10);
}
#an-local-detail .zone h3{
  font-size:1.15rem;font-weight:800;color:var(--ink,#3E2246);margin:0 0 .7rem;
}
#an-local-detail .zone p{
  font-size:.95rem;line-height:1.75;color:var(--body,#4A3358);
}
#an-local-detail .zone p+p{margin-top:.9rem;}

/* the closing call to action, in plum rather than flat ink */
.cta-panel{background:linear-gradient(135deg,var(--plum-deep),var(--plum-wine)) !important;}

/* statband figures carry the gold */
.statband b{color:var(--warm,#A83A2A);}


/* =============================================================
   7. THE FOOTER

   It was a pale grey band and it died at the bottom of the page.
   It is now the brand yellow with the hero's plum as its ink,
   which is 10.2:1 and the strongest pairing the palette has.
   ============================================================= */
footer{
  background:linear-gradient(180deg,var(--gold) 0%,#F0B429 100%) !important;
  border-top:5px solid var(--plum-deep) !important;
  color:var(--plum-deep) !important;
}
footer h5{color:var(--plum-deep) !important;letter-spacing:.1em;text-transform:uppercase;font-size:.74rem;}
footer p,footer a,footer .foot-col a,footer .foot-bottom p{color:#3A2A10 !important;}
footer a{text-decoration:none;transition:color .2s;}
footer a:hover{color:var(--plum-deep) !important;text-decoration:underline;}
footer .foot-legal{color:#5A4620 !important;}
footer .foot-bottom{border-top:1px solid rgba(35,26,68,.24) !important;}
/* The logo ships white-on-transparent, which vanished on the yellow. It was
   getting a plum plate to survive, which looked like a patch. There is now a
   footer variant of the artwork instead — sun recoloured white, wordmark
   recoloured plum — so it sits directly on the yellow with no plate, and can
   be run larger. See assets/zenithnord-logo-footer.png. */
/* Sized the way the rest of the site sizes it — height-driven, width auto —
   just larger than the original 52px. Setting width:auto AND height:auto
   made it width-driven off the 1540px source instead, which changed the
   whole proportion of the footer. */
footer .foot-logo{
  background:none;padding:0;
  height:78px;width:auto;max-width:100%;
  margin-bottom:1rem;
}

/* SOLARFIELD's lockup is white-on-navy and is not a Nord brand, so its card
   carries the navy rather than white — the same treatment the Qualis site
   gives it. */
/* SOLARFIELD's lockup is white-on-navy and it is not a Nord brand, so its
   card carries the navy rather than white — the treatment the Qualis site
   gives it.

   These carry #group deliberately. The band rule above is "#group .gw", which
   is id+class and outranks a bare ".gw--field" — so the plain class version
   of this lost to the white background and put a white logo on a white card.
   Matching its specificity is the fix; !important would work too but would
   then have to be fought again by anything later. */
#group .gw--field{
  --gw-c:#0B3D7C;
  background:#05214D !important;
  border-color:#05214D !important;
}
#group .gw--field .gw-tag{color:#8FB6E8 !important;}
#group .gw--field .gw-body p{color:#C7D9F0 !important;}
#group .gw--field .gw-go{color:#fff !important;border-top-color:rgba(255,255,255,.22) !important;}
#group .gw--field .gw-fb{color:#fff !important;}
#group .gw--field:hover{border-color:var(--gold) !important;}


/* The two links closing the group section — "Qualis Energy" and "How we
   work". .inline-links a is the dark red used on light grounds, and this
   section is plum, so they were unreadable. Only #what-we-install had been
   given the light treatment; this one had been missed. */
#group .inline-links a{
  color:#fff !important;
  border-color:rgba(255,255,255,.34) !important;
  background:rgba(255,255,255,.06) !important;
}
#group .inline-links a:hover{
  background:var(--gold) !important;
  color:var(--plum-deep) !important;
  border-color:var(--gold) !important;
}

/* =============================================================
   8. THE FIGURE CARDS

   The three figures are drawn on a 760x300 canvas, but their plate
   was running the full column width — about 1198px — so the SVG was
   being scaled up a little over 1.5x and the block stood ~470px
   tall. Everything inside grew with it: 10.5px labels rendering at
   16.6px, a card far bigger than the drawing needed.

   Capped near the artwork's own width and centred, so the figure
   sits at roughly its drawn size and the card is only as big as the
   thing inside it.
   ============================================================= */
.psplit-art{
  display:block !important;      /* index's inline CSS had this as flex, which
                                    put the caption BESIDE the drawing, inside
                                    the plate, instead of underneath it */
  max-width:min(860px,100%);
  margin-left:auto;margin-right:auto;
  padding:.55rem .55rem .15rem;
}
/* index's inline CSS forces aspect-ratio:4/3 on these — written when the
   figures really were 4:3. Mine are 760x300, so the browser made a 4:3 box
   and preserveAspectRatio letterboxed the drawing inside it: a small figure
   marooned in a tall plate. Let the viewBox decide the height. */
.psplit-art svg{
  width:100% !important;
  height:auto !important;
  aspect-ratio:auto !important;
  display:block;
}

/* EVERY FIGURE DEFINES ITS OWN INK.

   The drawings are painted with var(--sun), var(--acc) and friends. Those
   were only ever declared in index.html's inline <style id="an-vars">, so on
   the 56 town pages and the other templates --sun was UNDEFINED: the fill
   fell back to the initial value, black, and every panel rendered as a black
   rectangle at 34% opacity over a dark roof. Grey mush, on 56 pages.

   Declaring them on the figures themselves means a drawing carries its own
   palette wherever it is dropped, and cannot be broken again by a page that
   happens not to load one particular stylesheet. Scoped to the figures, not
   :root, because --warm already means something different site-wide. */
.figr,.fig3,.lc-svg,.sart,
.psplit-art svg,.lc-art svg,.split-art svg,.dg-art svg,.dg svg{
  --sun:#FFC533;
  --acc:#FFC533;
  --acc-l:#FFD873;
  --ok:#6EEA9B;
  --cold:#ECB53E;
  --cold-t:#E8DCEC;
  --roof:#1A1030;
}


/* THE PANELS WERE MUD.

   Each panel is var(--sun) at fill-opacity .34, and the roof beneath it is
   --roof. That was tuned against the old blue plate; over the new #1A1030
   plum it composites to rgb(104,78,49) — a dark olive. Raising the alpha
   puts the gold back: .72 over #1A1030 lands at rgb(191,146,50). */
.figr .p rect{fill-opacity:.72 !important;}
.figr .p path[fill-opacity]{fill-opacity:.72 !important;}
.figr .shade path[fill-opacity]{fill-opacity:.20 !important;}
.figr .p line,.figr .p path[stroke]{stroke-opacity:.65 !important;}

/* these are diagrams, not photographs — the caption belongs under the
   plate, not floated over the drawing on a dark gradient */
.psplit-art figcaption{
  position:static !important;
  background:none !important;
  padding:.6rem .2rem .5rem;
  text-align:center;
  font-size:.72rem;font-weight:800;letter-spacing:.11em;
  text-transform:uppercase;
  color:#FFD873 !important;
}

/* =============================================================
   7a. THE NAV DROPDOWNS

   an-light.css set ".drop-menu{background:initial}" meaning to
   leave it dark. "initial" for background is TRANSPARENT, not
   dark — so the panel showed whatever was behind it. Over the
   hero that happened to be a night sky and it looked right; over
   any light section it became pale-text-on-pale-page, unreadable.

   The nav is sticky now, so a dropdown can open over anything on
   the page. It carries its own opaque plum wherever it lands.
   ============================================================= */
.drop-menu{
  background:var(--plum-deep) !important;
  border:1px solid rgba(255,197,51,.30) !important;
  border-radius:12px !important;
  box-shadow:0 18px 44px rgba(16,10,32,.46) !important;
  overflow:hidden;
}
.drop-menu a{background:transparent !important;color:#F1E9F4 !important;}
.drop-menu a small{color:#C3B2CC !important;}
.drop-menu a:hover{background:rgba(255,197,51,.16) !important;color:#fff !important;}
.drop-menu li.drop-group{
  background:transparent !important;
  color:var(--gold) !important;
  letter-spacing:.14em;text-transform:uppercase;
}


/* =============================================================
   8a. THE DEAD BAND UNDER THE HERO

   Below the skyline the hero paints .chero-ground — 131px of flat
   #16181C, a leftover from the graphite build that belongs to
   neither the sky above it nor the plum band below. On screen it
   read as a black gap between two finished things.

   It becomes the handover: the horizon's own dark, resolving into
   the plum that the next section starts with.
   ============================================================= */
.chero-ground{
  background:linear-gradient(180deg,#0B0810 0%,#150E28 45%,var(--plum-deep) 100%) !important;
}


/* =============================================================
   8c. VERY WIDE SCREENS

   The content column is 1200px. On a 3440px ultrawide that leaves
   1080px of empty page either side and everything reads marooned
   in the middle. Widen the column in two steps rather than letting
   it stretch — long measures are hard to read, so the text blocks
   inside stay capped.
   ============================================================= */
@media(min-width:1700px){
  .section-inner{max-width:1400px;}
  #solar-cfg{max-width:1260px;}
  .psplit-art,.lc-art{max-width:min(1000px,100%);}
}
@media(min-width:2400px){
  .section-inner{max-width:1600px;}
  #solar-cfg{max-width:1400px;}
  .section-subtitle{max-width:820px;}
}


/* =============================================================
   8b. THE STICKY HEADER

   The town pages already had position:sticky from an-town.css, but
   index carried "position:relative" in its own inline block — so
   the nav followed you down on 56 pages and scrolled away on the
   other 13. Set here, after both, so all 69 behave alike.

   The nav sits BEFORE <header class="chero"> in the markup, and it
   has to stay there: a sticky element is clipped by any ancestor
   with overflow other than visible, and .chero-fx uses
   overflow:hidden to keep the sky inside the hero. Move the nav
   inside the header and it would stop sticking.
   ============================================================= */
/* Nothing here may change the nav's HEIGHT. The stuck state used to shrink
   the padding and reveal the logo, which changed the header's height, which
   changed the document height, which moved the scroll position, which
   re-evaluated the stuck state — a feedback loop that showed up as the nav
   juddering while you scrolled or hovered. Colour and shadow only. */
#topnav{
  position:sticky !important;
  top:0;
  z-index:1000;
  transition:background .28s var(--ease-out),
             box-shadow .28s var(--ease-out),
             border-color .28s var(--ease-out);
}

/* Once you leave the top it firms up: near-opaque plum, a little
   shorter, a shadow to separate it from the page, and the logo
   appears — it is hidden at rest because the hero already shows a
   big one. .is-stuck is added by an-motion.js. */
#topnav.is-stuck{
  background:rgba(35,26,68,.97) !important;
  box-shadow:0 10px 30px rgba(35,26,68,.30);
  border-bottom-color:var(--gold) !important;
}

@media(prefers-reduced-motion:reduce){#topnav{transition:none;}}


/* =============================================================
   9. THE LOCATION PAGES

   The 56 town pages carry their own template, and three things on
   it were actually broken rather than merely plain.
   ============================================================= */

/* The coverage band was the last big light-blue block on the page.
   Plum and yellow, like #process and #group. */
#local{
  background:linear-gradient(180deg,var(--plum-deep),var(--plum)) !important;
  border-top:4px solid var(--gold);
}
#local .section-title{color:#fff !important;}
#local .section-subtitle{color:#E8DCEC !important;}
#local a.area-pill,#local span.area-pill{
  color:#F3E9F6 !important;border-color:rgba(255,197,51,.42) !important;
  background:rgba(255,255,255,.06) !important;
}
#local a.area-pill:hover{
  background:var(--gold) !important;color:var(--plum-deep) !important;
  border-color:var(--gold) !important;
}
/* the town you are already on */
#local span.area-pill{background:var(--gold) !important;color:var(--plum-deep) !important;
  border-color:var(--gold) !important;font-weight:800;}

/* The service tiles were rendering "&#1E2126;" — a colour hex that had been
   swallowed into a numeric entity, so three of the four icons were literal
   junk characters. They are real SVGs now and inherit this colour. */
.service-icon{
  display:inline-flex;align-items:center;justify-content:center;
  width:46px;height:46px;border-radius:12px;
  background:rgba(255,197,51,.18);color:var(--warm,#A83A2A);
  margin-bottom:.9rem;
}
.service-card:hover .service-icon{background:var(--gold);color:var(--plum-deep);}

/* The installation diagram used to sit inside the town hero, animating
   constantly behind the headline. The town pages now open with the same
   day-cycle sky as the homepage, and the diagram has moved into a section
   of its own below it — where it is a figure rather than a distraction, so
   it is allowed to run. The rule that used to freeze it is gone with the
   .lc-hero it was scoped to. */
/* The town figure is presented exactly like the homepage figures. an-town.css
   had it at width:min(680px,94%) with a -1.4rem bottom margin, so it was
   narrower than the main page's and pulled up into whatever followed. */
.lc-art{
  width:auto !important;
  max-width:min(860px,100%) !important;
  margin:2.2rem auto 0 !important;
  padding:.55rem .55rem .15rem;
}


/* =============================================================
   YELLOW THAT LANDED ON WHITE

   an-town.css was written for the dark site, so a run of small
   text is #FFD873 — 1.5:1 on a white card, effectively invisible.
   Each one moves to plum or to the dawn ember, and the numbered
   discs become gold chips with dark ink rather than gold text.
   ============================================================= */
.service-more{color:var(--warm) !important;}
.service-card:hover .service-more{color:var(--plum) !important;}
details summary .plus{color:var(--warm) !important;}
.chg div .lab{color:var(--warm) !important;}
.zhill{color:var(--gold-deep) !important;}
.tag{
  background:rgba(255,197,51,.20) !important;
  color:var(--plum) !important;
  border:1px solid rgba(255,197,51,.55) !important;
}

/* the numbered discs on the town steps: gold disc, plum figure */
.step .dot,.srow .num{
  background:var(--gold) !important;
  color:var(--plum-deep) !important;
  border-color:var(--gold-deep) !important;
}
.step:hover .dot,.srow:hover .num{
  background:var(--plum-deep) !important;
  color:var(--gold) !important;
  border-color:var(--plum-deep) !important;
}

/* THE PARTNER STRIP

   The four SVGs it used were stamped "PLACEHOLDER WORDMARK — replace with
   supplied .png" and never were: hand-set letterforms standing in for real
   marks. The strip also named Fox ESS, which is not one of the four
   accreditations. Set as type in our own face instead — accurate, legible,
   and not a guess at somebody's trademark. Drop real logo files in and this
   can go back to <img>. */
/* The real accreditation badges, supplied 27 Aug. They arrive at wildly
   different aspect ratios — Tesla 1.66, BYD lockup 2.95, SolarEdge 3.27,
   SolaX 3.48 — and the Tesla badge has its grey panel baked into the
   artwork rather than being transparent. Each one therefore sits on its own
   white tile at a common height, so the row reads as one set instead of four
   unrelated pictures. */
/* The accreditation strip sits on the plum, and the badges are white
   reversed-out versions sitting straight on it — no tiles, no plates.

   Making those white took more than flattening every inked pixel: two of
   the four are reversed-out artwork. The Battery-Box roundel is dark text
   inside a light circle, and SolarEdge's "edge" is white type knocked out
   of a red block. Whitening everything turned the first into a solid disc
   and the second into a blank slab. So alpha is driven by how DARK each
   pixel was — the ink carries, the paper and the knocked-out letterforms
   drop away, and the marks stay themselves. See *-white.png. */
section[aria-label="Equipment partners"]{
  background:linear-gradient(180deg,var(--plum-deep),var(--plum)) !important;
  border-top:4px solid var(--gold);
  padding:2.6rem 0 2.4rem;
}
section[aria-label="Equipment partners"] .land-eyebrow{
  color:var(--gold) !important;
}
.lc-badges{
  display:flex;flex-wrap:wrap;justify-content:center;align-items:center;
  gap:1.4rem 3rem;margin-top:1.4rem;
}
.lc-badges img{
  height:60px;width:auto;max-width:220px;
  object-fit:contain;display:block;
  opacity:.92;
  transition:opacity .25s var(--ease-out),transform .25s var(--ease-out);
}
.lc-badges img:hover{opacity:1;transform:translateY(-3px);}
@media(max-width:700px){
  .lc-badges{gap:1.1rem 1.9rem;}
  .lc-badges img{height:44px;max-width:150px;}
}

/* the same four inside the configurator, which sits on the deep sky panel —
   so there the tile is a light plate rather than pure white */
#solar-cfg .cfg-brandrow{
  display:flex;flex-wrap:wrap;justify-content:center;align-items:stretch;gap:.7rem;
}
/* the configurator panel is already the deep sky, so the same white badges
   sit straight on it too — no plate */
#solar-cfg .cfg-brandrow{gap:1.2rem 2.6rem;}
#solar-cfg .cfg-brand{
  display:flex;align-items:center;justify-content:center;
  width:auto;height:auto;padding:0;
  background:none !important;border:none;
  transition:transform .25s var(--ease-out),opacity .25s;
}
#solar-cfg .cfg-brand img{
  height:52px;width:auto;max-width:200px;object-fit:contain;display:block;opacity:.92;
}
#solar-cfg .cfg-brand:hover{transform:translateY(-3px);}
#solar-cfg .cfg-brand:hover img{opacity:1;}
@media(max-width:700px){#solar-cfg .cfg-brand img{height:40px;max-width:140px;}}


/* =============================================================
   10. THE PHONE

   The number stays on the page, but it stops being a headline
   button competing with the configurator. People should size a
   system first; ringing is the fallback, not the front door.
   ============================================================= */
.hero-cta a[href^="tel:"],.chero-cta a[href^="tel:"]{
  background:none !important;
  border:1px solid rgba(255,255,255,.34) !important;
  color:#FAF6EE !important;
  font-weight:600 !important;
  box-shadow:none !important;
}
.hero-cta a[href^="tel:"]:hover,.chero-cta a[href^="tel:"]:hover{
  border-color:var(--gold) !important;color:var(--gold) !important;
}


/* =============================================================
   10b. THE "WHAT WE FIT" AND "LEARN" PAGES

   Eight pages — how-we-work, solar-panels, battery-storage,
   ev-charging, choosing-your-system, design-process,
   installation-commissioning and the case study — were a single
   <div class="article"> of bare <h2> and <p>. They also carried
   12KB of inline CSS and NO an-town.css, so none of the site's
   components existed on them: no section styling, no cards, no
   typography. Raw black text on white, which is exactly how they
   looked.

   an-town.css is now linked on all eight, and each <h2> and the
   prose under it is wrapped as a card with the numbered chip and
   the reveal every other section uses.
   ============================================================= */
.article{max-width:none;}
.art-lead{
  max-width:70ch;margin:0 0 2.2rem;
  font-size:1.06rem;line-height:1.8;color:var(--body);
}
.art-lead p{font-size:1.06rem;line-height:1.8;color:var(--body);}
.art-lead p:first-child{
  font-size:1.16rem;color:var(--soft);
}

.art-grid{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(340px,1fr));
  gap:1.4rem;
  align-items:start;
}
.art-block{
  position:relative;isolation:isolate;overflow:hidden;
  background:var(--card);
  border:1.5px solid var(--line);
  border-radius:16px;
  padding:1.8rem 1.6rem;
  transition:transform .34s var(--ease-out),
             box-shadow .34s var(--ease-out),
             border-color .34s var(--ease-out);
}
.art-block>*{position:relative;z-index:1;}
.art-block::before{
  content:"";position:absolute;left:0;right:0;top:0;height:4px;
  background:var(--gold);transform:scaleX(0);transform-origin:left;
  transition:transform .45s var(--ease-out);z-index:2;
}
.art-block::after{
  content:"";position:absolute;top:-40px;right:-40px;
  width:96px;height:96px;border-radius:50%;
  background:var(--gold);opacity:0;transform:scale(.4);
  transition:opacity .4s ease,transform .5s var(--ease-pop);
  pointer-events:none;z-index:0;
}
.art-block:hover{
  transform:translateY(-7px);
  box-shadow:0 30px 64px rgba(62,34,70,.20);
  border-color:var(--gold-deep);
}
.art-block:hover::before{transform:scaleX(1);}
.art-block:hover::after{opacity:.22;transform:scale(1);}
.art-block:hover .cnum{
  transform:rotate(-6deg) scale(1.12);
  background:var(--plum-deep);color:var(--gold);
}
.art-block h2{
  font-size:1.18rem;font-weight:800;line-height:1.3;
  color:var(--ink) !important;margin:0 0 .7rem;letter-spacing:-.01em;
}
.art-block p{
  font-size:.95rem;line-height:1.75;color:var(--body);margin:0 0 .8rem;
}
.art-block p:last-child{margin-bottom:0;}
.art-block ul,.art-block ol{margin:.6rem 0 .8rem 1.1rem;}
.art-block li{
  font-size:.95rem;line-height:1.7;color:var(--body);margin-bottom:.4rem;
}
.art-block strong,.art-block b{color:var(--ink);}
.art-block a{color:var(--warm);}

/* the closing line and its button */
.ctaline{
  max-width:70ch;margin:2.6rem auto 1.1rem;text-align:center;
  font-size:1.05rem;line-height:1.75;color:var(--body);
}
.btn-cta{
  display:inline-flex;align-items:center;gap:.5rem;
  background:var(--gold);color:var(--plum-deep);
  font-weight:800;font-size:.98rem;
  padding:.85rem 1.6rem;border-radius:999px;
  text-decoration:none;
  box-shadow:0 8px 22px rgba(255,197,51,.34);
  transition:transform .25s var(--ease-out),background .25s,box-shadow .25s;
}
.btn-cta:hover{
  background:var(--plum-deep);color:var(--gold);
  transform:translateY(-3px);
  box-shadow:0 14px 32px rgba(35,26,68,.30);
}
/* centre the button under the line */
.ctaline+.btn-cta{display:flex;width:max-content;margin:0 auto 1rem;}


/* =============================================================
   11. THE FOOTER LAYOUT, FOR EVERY PAGE

   index.html carries its footer layout in an inline <style> block
   and the town pages get theirs from an-town.css — but the three
   legal pages have neither, so their footer collapsed to a stack
   of unstyled links while every other page had columns. The layout
   lives here now, so one footer serves all 69 pages. Colour is
   handled by the yellow block above.
   ============================================================= */
.foot-inner{max-width:1200px;margin:0 auto;padding:0 1.25rem;}
/* Five children — brand, Contact, What we fit, Company, Nord Group — but the
   grid was declared with four columns, so Nord Group dropped onto a second
   row on its own under the logo. */
.foot-cols{
  display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr 1.2fr;
  gap:2rem;align-items:start;
}
@media(max-width:1200px){.foot-cols{grid-template-columns:1.6fr 1fr 1fr;}}
@media(max-width:900px){.foot-cols{grid-template-columns:1fr 1fr;}}
@media(max-width:560px){.foot-cols{grid-template-columns:1fr;}}
.foot-brand p{font-size:.88rem;max-width:340px;line-height:1.7;}
.foot-col h5{font-size:.95rem;font-weight:800;margin-bottom:.8rem;}
.foot-col p{font-size:.86rem;margin-bottom:.6rem;line-height:1.65;}
.foot-col a{text-decoration:none;transition:color .2s;}
.foot-links-v{display:flex;flex-direction:column;gap:.5rem;}
.foot-links-v a{font-size:.86rem;}
.foot-bottom{margin-top:2.25rem;padding-top:1.4rem;}
.foot-bottom p{font-size:.84rem;}
footer{padding:3rem 0 2.2rem;}


/* =============================================================
   12. THE LEGAL PAGES

   cookie-policy, privacy-policy and terms are their own mini
   template — two of them, in fact, with different variable names —
   and neither was ever converted off the dark theme:

     cookie-policy   :root{--bg:#101216; --text:#E4E1DA}
     privacy + terms :root{--ink:#131519; --white:#F5F3EF}

   body{background/color} is overridden by an-light.css because
   that loads later, so the page went light. But their headings are
   plain "h1,h2,h3{color:#fff}" and their copy is "p,li{color:
   var(--text)}" — bare element selectors that nothing in the light
   theme targets. So white headings and cream body text ended up on
   a near-white page. That is why none of it could be read.

   Scoped to body.legal so it cannot reach the other 66 pages.
   ============================================================= */
body.legal{background:var(--page) !important;color:var(--ink) !important;}
body.legal .wrap{max-width:840px;margin:0 auto;padding:3rem 1.4rem 4.5rem;}

body.legal h1{color:var(--plum) !important;font-size:clamp(1.9rem,4vw,2.4rem);margin:0 0 .4rem;}
body.legal h2{color:var(--plum) !important;font-size:1.3rem;margin:2.4rem 0 .7rem;}
body.legal h3{color:var(--plum) !important;font-size:1.06rem;margin:1.5rem 0 .45rem;}
body.legal p,body.legal li,body.legal td{color:var(--body) !important;font-size:.95rem;line-height:1.75;}
body.legal small,body.legal .muted,body.legal .updated,body.legal .tag{color:var(--mute) !important;}
/* Scoped 27 Aug 2026: this was `body.legal a`, which repainted the top nav,
   the footer and the cookie banner ember as well as the document — 2.08:1
   on the dark nav, 2.65:1 on the gold footer. The ember link belongs to the
   document text only. */
body.legal .legal-doc a,
body.legal .wrap > p a,
body.legal .callout a{color:var(--warm) !important;}
body.legal .legal-doc a:hover,
body.legal .wrap > p a:hover,
body.legal .callout a:hover{color:var(--plum) !important;}

/* a rule under the title, as everywhere else */
body.legal h1{border-bottom:4px solid var(--gold);padding-bottom:.7rem;}

/* the tables in the cookie policy */
body.legal table{width:100%;border-collapse:collapse;margin:1.2rem 0;}
body.legal th{
  background:var(--plum-deep) !important;color:#fff !important;
  text-align:left;padding:.7rem .8rem;font-size:.84rem;
  border:1px solid var(--plum) !important;
}
body.legal td{
  padding:.7rem .8rem;vertical-align:top;
  border:1px solid var(--line) !important;background:var(--card);
}
body.legal tbody tr:nth-child(even) td{background:var(--band);}

/* their buttons were gold-on-dark */
body.legal .btn{
  background:var(--gold) !important;color:var(--plum-deep) !important;
  border:none;border-radius:50px;padding:.7rem 1.3rem;
  font-weight:800;cursor:pointer;text-decoration:none;display:inline-block;
}
body.legal .btn:hover{background:var(--plum-deep) !important;color:var(--gold) !important;}

/* the footer on these pages had its own thin-line treatment */
body.legal footer{border-top:5px solid var(--plum-deep) !important;}
body.legal .foot-links a{color:#3A2A10 !important;font-size:.86rem;text-decoration:none;}
body.legal .foot-legal{text-align:left;}


/* =============================================================
   TALK TO US ABOUT SOLAR

   The grid was "align-items:start", so the left column stopped
   wherever its last card ended while the enquiry form ran on —
   leaving the two sides ragged. The column stretches to the
   form's height now and the cards space out to fill it, so both
   sides finish level.
   ============================================================= */
.contact-content{align-items:stretch !important;}
.contact-info{
  height:100%;
  display:flex;flex-direction:column;
  justify-content:space-between;
  gap:1.4rem;
}
/* the hours card takes up any slack rather than the gaps growing
   without limit on a very long form */
.contact-info .hours-card{margin-top:auto;}
@media(max-width:900px){
  .contact-content{align-items:start !important;}
  .contact-info{height:auto;justify-content:flex-start;gap:1.4rem;}
  .contact-info .hours-card{margin-top:0;}
}


/* opening hours, lifted out of the contact column into its own card */
.hours-card{
  background:var(--plum-deep);color:#fff;
  border-radius:14px;padding:1.2rem 1.3rem;
  border-top:4px solid var(--gold);
}
.hours-card h5{color:var(--gold) !important;margin-bottom:.7rem;}
.hours-card dl{margin:0;display:grid;grid-template-columns:1fr auto;gap:.42rem .9rem;}
.hours-card dt{font-size:.86rem;color:#E8DCEC;}
.hours-card dd{margin:0;font-size:.86rem;font-weight:700;color:#fff;text-align:right;}
.hours-card .hours-note{
  margin:.9rem 0 0;padding-top:.75rem;border-top:1px solid rgba(255,255,255,.18);
  font-size:.78rem;color:#CDBBD4 !important;
}

/* ====================================================================
   CONTENT-PAGE LAYER  — added 27 Aug 2026
   The eight content pages were a single section holding one flat grid
   of text cards. They now use the same components as the town pages,
   which needs two things the town pages never did: an alternating
   ground, and a lighter hero.
   ==================================================================== */

/* ---- alternating section ground ---- */
.band{background:var(--band,#F3E7D2) !important;}
.band+.band{background:var(--page,#FAF6EE) !important;}

/* ---- gold text sitting on the paper ground ----
   Gold is #FFC533: 1.47:1 on paper, which is not a colour, it is a
   rumour. On the plum and gradient grounds it is correct and stays.
   This only catches gold that has landed on the light ground.        */
.article a,
.section-inner>p a,
.art-lead a,
p.ctaline a{color:var(--warm,#A83A2A);}

/* ---- the compact content-page hero ----
   index keeps the full day-to-night cycle. Everywhere else it cost
   660px, sixteen concurrently animating layers and a stalled
   compositor, to say the page title.                                 */
.chero.chero--slim{min-height:0;height:auto;}
.chero.chero--slim .chero-in{padding:4.2rem 2rem 3.4rem;}
.chero.chero--slim .sky-dawn,
.chero.chero--slim .sky-day,
.chero.chero--slim .sky-set,
.chero.chero--slim .chero-stars,
.chero.chero--slim .chero-moon,
.chero.chero--slim .sun-rays,
.chero.chero--slim .glow-warm{display:none !important;}
.chero.chero--slim .sky-night{
  opacity:1 !important;animation:none !important;
  background:linear-gradient(150deg,#231A44 0%,#3E2246 52%,#5C2E4A 100%);}
.chero.chero--slim .chero-disc{
  animation:none !important;
  top:auto;bottom:-84px;right:6%;left:auto;
  width:200px;height:200px;opacity:.28;}
.chero.chero--slim .chero-skyline{opacity:.30;}
.chero.chero--slim .chero-ground{display:none;}
.chero.chero--slim .hero-logo{display:none;}
.chero.chero--slim h1{font-size:clamp(2rem,4.6vw,3.1rem);margin:.3rem 0 .8rem;}
.chero.chero--slim .sub{max-width:64ch;}
@media(max-width:760px){.chero.chero--slim .chero-in{padding:3rem 1.25rem 2.4rem;}}

/* ---- the lead figure on a content page ---- */
.lc-art .art-lead{margin-top:2rem;}

/* ---- legal pages: give the prose a readable measure and rhythm ---- */
.legal-doc{max-width:78ch;margin:0 auto;}
.legal-doc h2{
  font-size:1.32rem;font-weight:800;color:var(--ink,#3E2246);
  margin:2.6rem 0 .5rem;padding-top:1.6rem;
  border-top:1px solid var(--line,rgba(62,34,70,.16));letter-spacing:-.01em;}
.legal-doc h2:first-child{border-top:0;padding-top:0;margin-top:0;}
.legal-doc h3{font-size:1.02rem;font-weight:800;color:var(--soft,#5C4269);margin:1.5rem 0 .4rem;}
.legal-doc p,.legal-doc li{font-size:.97rem;line-height:1.8;color:var(--body,#4A3358);}
.legal-doc p{margin:0 0 .9rem;}
.legal-doc ul,.legal-doc ol{margin:.6rem 0 1.1rem 1.2rem;}
.legal-doc li{margin-bottom:.45rem;}
.legal-doc a{color:var(--warm,#A83A2A);}
.legal-doc table{width:100%;border-collapse:collapse;margin:1rem 0 1.6rem;font-size:.92rem;}
.legal-doc th,.legal-doc td{
  text-align:left;padding:.62rem .7rem;
  border:1px solid var(--line,rgba(62,34,70,.16));color:var(--body,#4A3358);}
.legal-doc th{background:var(--band,#F3E7D2);color:var(--ink,#3E2246);font-weight:800;}
.legal-doc .legal-meta{
  display:inline-block;font-size:.8rem;font-weight:700;letter-spacing:.04em;
  text-transform:uppercase;color:var(--mute,#6B5477);
  background:var(--band,#F3E7D2);border-radius:999px;padding:.4rem .95rem;margin-bottom:1.8rem;}
.legal-toc{
  background:#fff;border:1.5px solid var(--line,rgba(62,34,70,.16));
  border-radius:14px;padding:1.4rem 1.6rem;margin:0 0 2.6rem;}
.legal-toc b{display:block;color:var(--ink,#3E2246);font-size:.96rem;margin-bottom:.6rem;}
.legal-toc ol{margin:0 0 0 1.1rem;columns:2;column-gap:2rem;}
.legal-toc li{margin-bottom:.35rem;font-size:.9rem;}
.legal-toc a{color:var(--warm,#A83A2A);text-decoration:none;}
.legal-toc a:hover{text-decoration:underline;}
@media(max-width:700px){.legal-toc ol{columns:1;}}

/* .art-lead must never inherit the plum plate .lc-art sits on: dark plum
   body text on a dark plum panel is invisible. It belongs on the page. */
.lc-art+.art-lead{margin:2.2rem auto 0;max-width:70ch;}
.lc-art .art-lead{color:#EDE4F2;}

/* the eyebrow on the slim hero: --warm is a 5.2:1 ember on paper, but
   this hero is plum, so it needs the light gold instead. */
.chero--slim .land-eyebrow{color:#FFD873 !important;}
.chero--slim .land-note{color:#C9B8D2 !important;}

/* Placeholder highlight: a soft tint only. No dashed or dotted borders —
   they read as a rendering fault rather than as an editorial note. */
.ph{background:rgba(255,197,51,.18) !important;color:var(--ink,#3E2246) !important;
    border:0 !important;border-radius:3px;padding:0 .2em;}

/* ---- legal pages ----
   body.legal was written before the plum hero existed, so its h1 rule
   painted the hero title plum-on-plum. Inside the hero it must be light. */
body.legal .chero h1,
body.legal .chero .land-eyebrow,
body.legal .chero .sub{color:#fff !important;}
body.legal .chero .land-eyebrow{color:#FFD873 !important;}
body.legal .chero h1{text-shadow:0 2px 18px rgba(0,0,0,.35);}
/* the doc column keeps its own measure; .legal-doc supplies the rhythm */
body.legal .wrap{padding-top:2.6rem;}
