
@font-face{font-family:"Archivo";font-style:normal;font-weight:400 700;font-stretch:100% 122%;font-display:swap;src:url(fonts/archivo-basic-var.woff2) format("woff2");unicode-range:U+0020-007E,U+00A0-00BF,U+00D7,U+00F7,U+2013-2014,U+2018-2019,U+201C-201D,U+2022,U+2026,U+2122}
@font-face{font-family:"DM Mono";font-style:normal;font-weight:400;font-display:swap;src:url(fonts/dm-mono-basic-400.woff2) format("woff2");unicode-range:U+0020-007E,U+00A0,U+00A9,U+00B0,U+00B7,U+00D7,U+2013-2014,U+2019,U+2032-2033}
@font-face{font-family:"DM Mono";font-style:normal;font-weight:500;font-display:swap;src:url(fonts/dm-mono-basic-500.woff2) format("woff2");unicode-range:U+0020-007E,U+00A0,U+00A9,U+00B0,U+00B7,U+00D7,U+2013-2014,U+2019,U+2032-2033}

:root{
  --paper:#f5f6f3;--paper-2:#e9ebe6;--card:#fff;
  --graphite:#141815;--graphite-2:#333935;--slate:#5c635e;--caption:#6a716b;
  --rule:#c8ccc6;--rule-2:#b3b8b1;--rule-lt:rgba(245,246,243,.22);--rule-lt-2:rgba(245,246,243,.14);
  --forest:#054230;--forest-dk:#032d20;--forest-t:#afc7ba;--forest-p:#c8d8ce;
  --paper-t:#c6cac3;--paper-t-2:#969b94;--paper-t-3:#d9dcd6;
  --slot:#dddfda;--slot-line:#9aa09b;--slot-ink:#3e443f;
  --bad:#8a2018;--bad-bg:#f7edec;
  --mono:"DM Mono",ui-monospace,Menlo,monospace;
  --gutter:20px;
  --wh:112;
}
@media (min-width:560px){:root{--gutter:24px}}
@media (min-width:900px){:root{--gutter:clamp(32px,4.4vw,64px);--wh:118}}

html{-webkit-text-size-adjust:100%;text-size-adjust:100%;-webkit-tap-highlight-color:transparent}
body{margin:0;background:var(--paper);color:var(--graphite);font-family:"Archivo","Helvetica Neue",Arial,sans-serif;font-variation-settings:"wdth" 100;font-size:clamp(1rem,.977rem + .10vw,1.0625rem);line-height:1.65;-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}
@media (hover:hover) and (pointer:fine){a:hover{color:inherit}}
a,button,label,input,select,textarea,summary{touch-action:manipulation}
a:active,button:active{transition-duration:0s}
@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}
[id]{scroll-margin-top:16px}
@media (min-width:900px){[id]{scroll-margin-top:104px}}

/* the focus ring: forest, 2 px, 3 px off; paper on the dark grounds */
:focus-visible{outline:2px solid var(--forest);outline-offset:3px}
.facts :focus-visible,.process :focus-visible,.cta :focus-visible,.foot :focus-visible{outline-color:var(--paper)}

.skip{position:absolute;left:var(--gutter);top:12px;z-index:60;display:inline-flex;align-items:center;min-height:44px;padding:0 18px;background:var(--forest);color:var(--paper);font-weight:600;font-size:15px;border-radius:2px}
.skip:not(:focus){clip-path:inset(50%);width:1px;height:1px;min-height:0;padding:0;overflow:hidden;white-space:nowrap}
h1,h2,h3,h4{margin:0;font-variation-settings:"wdth" var(--wh);font-weight:600;line-height:1.02}
p{margin:0}
figure{margin:0}
img{display:block;max-width:100%;height:auto}
.m{font-family:var(--mono);font-variant-numeric:tabular-nums}
.wrap{width:100%;max-width:1440px;margin-inline:auto;padding-inline:max(var(--gutter),env(safe-area-inset-left,0px)) max(var(--gutter),env(safe-area-inset-right,0px));box-sizing:border-box}
.eyebrow{font-size:12px;letter-spacing:.18em;text-transform:uppercase;font-weight:600;color:var(--forest)}
.page{display:flex;flex-direction:column;min-height:100%}
.bare{padding-block:32px 64px}
.bare>*+*,.bare article>*+*,.bare section>*+*{margin-top:16px}
.bare h1{font-size:clamp(2.25rem,1.72rem + 2.17vw,3.5rem);letter-spacing:-.02em}
.bare h2{font-size:clamp(1.5rem,1.3rem + .8vw,2rem)}
main,.foot{overflow-wrap:anywhere}
main th,main dt{overflow-wrap:normal}
/* a job's or product's own page: lines a person can read (about 72
   characters), and the picture slot no taller than 420 px */
.bare article{max-width:72ch}
.bare article .slot{max-height:420px}
.bare p a{position:relative;display:inline-block;min-width:44px;padding-block:12px;margin-block:-12px;text-decoration:underline}

/* buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;min-height:54px;padding:0 28px;border:1.5px solid var(--forest);border-radius:2px;background:var(--forest);color:var(--paper);font-weight:600;font-size:16px;line-height:1.2;cursor:pointer;transition:background-color .16s,border-color .16s,color .16s;box-sizing:border-box}
.btn--ghost{background:transparent;color:var(--graphite);border-color:var(--graphite)}
.btn--on{background:var(--paper);border-color:var(--paper);color:var(--forest)}
.btn--ghost-on{background:transparent;border-color:var(--paper);color:var(--paper)}
.btn:active{background:var(--forest-dk);border-color:var(--forest-dk);color:var(--forest-t)}
.btn--ghost:active{background:var(--graphite);color:var(--paper-t)}
@media (hover:hover) and (pointer:fine){
  .btn:hover{background:var(--forest-dk);border-color:var(--forest-dk);color:var(--paper)}
  .btn--ghost:hover{background:var(--graphite);color:var(--paper);border-color:var(--graphite)}
  .btn--on:hover{background:var(--forest-t);border-color:var(--forest-t);color:var(--forest)}
  .btn--ghost-on:hover{background:var(--paper);border-color:var(--paper);color:var(--forest)}
}
.btn--bar{min-height:46px;padding:0 18px;font-size:15px}

/* the picture slot. SPEC (looks and photo slots): an EMPTY slot (only its
   "coming" note inside) shows nothing public, so it is not drawn. Its
   rules stay for the day a slot holds a picture. */
.slot{aspect-ratio:16/9;background:var(--slot);border:1px solid var(--slot-line);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;text-align:center;padding:16px;box-sizing:border-box}
.slot .note{font-size:11px;letter-spacing:.18em;text-transform:uppercase;font-weight:600;color:var(--slot-ink)}
.slot:has(>.note:only-child){display:none}
/* a slot holding a job photo (P3a). job page: the photo whole, full
   column width, never cropped; a card: cropped to 4:3 */
.slot--pic,.slot--card{display:block;padding:0;border:0;background:var(--slot)}
.slot--pic{aspect-ratio:auto}
.bare article .slot--pic{max-height:none}
.slot--pic img{display:block;width:100%;height:auto}
article .slot--pic+.slot--pic{margin-top:16px}
.slot--card{aspect-ratio:4/3;overflow:hidden}
.slot--card img{display:block;width:100%;height:100%;object-fit:cover}
/* /gallery: 1 across, 2 at >= 500, 3 at >= 900; every photo cropped 4:3 */
.gallery{list-style:none;margin:24px 0 0;padding:0;display:grid;grid-template-columns:minmax(0,1fr);gap:12px}
.gallery a{display:block;aspect-ratio:4/3;overflow:hidden;background:var(--slot)}
.gallery img{display:block;width:100%;height:100%;object-fit:cover}
@media (min-width:500px){.gallery{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (min-width:900px){.gallery{grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}}

/* ---------------------------------------------------------------- masthead */
/* phone: not sticky; the name full width, then Menu and the quote side by side */
.mast{background:var(--paper);border-bottom:1px solid var(--rule)}
.mast-in{display:flex;flex-wrap:wrap;align-items:center;gap:12px;row-gap:16px;padding-block:12px}
.brand{display:flex;align-items:center;width:100%;min-height:56px;font-variation-settings:"wdth" 118;font-weight:600;font-size:22px;line-height:1.05;letter-spacing:-.01em;color:var(--graphite)}
.brand:empty{display:none}
.nav{display:flex;flex-direction:column;width:100%;border-top:1px solid var(--rule)}
.nav a{display:flex;align-items:center;min-height:48px;border-bottom:1px solid var(--rule);font-size:1rem;font-weight:500;color:var(--graphite)}
.nav a[aria-current]{color:var(--forest)}
.nav a:active{background:rgba(0,0,0,.05)}
.navtoggle{display:none;flex:1 1 0;box-sizing:content-box;align-items:center;justify-content:center;gap:10px;min-height:46px;padding:0 18px;border:1.5px solid var(--graphite);border-radius:2px;background:transparent;color:var(--graphite);font-family:inherit;font-variation-settings:inherit;font-weight:600;font-size:15px;line-height:1.2;cursor:pointer}
.navtoggle:active{background:rgba(0,0,0,.05)}
.menu-mark{display:block;width:16px;height:10px;border-top:1.5px solid currentColor;border-bottom:1.5px solid currentColor;box-sizing:border-box}
.mast .btn--bar{flex:1 1 0}
@media (scripting:enabled) and (max-width:899px){
  .navtoggle{display:inline-flex}
  .nav{display:none}
  .nav.is-open{display:flex}
}
@media (min-width:900px){
  .mast{position:sticky;top:0;z-index:40}
  .mast-in{flex-wrap:nowrap;gap:24px;min-height:92px;box-sizing:border-box}
  .brand{width:auto;min-height:64px;margin-right:auto;font-size:24px}
  .navtoggle{display:none}
  .nav{flex-direction:row;width:auto;border-top:0;gap:28px}
  .brand:empty+.navtoggle+.nav{margin-left:auto}
  .nav a{display:block;min-height:0;padding-block:4px;border-bottom:1px solid transparent;font-size:15px;transition:border-color .16s}
  .nav a[aria-current]{color:var(--graphite);border-bottom-color:var(--graphite)}
  .mast .btn--bar{flex:none;padding:0 22px}
}
@media (min-width:900px) and (hover:hover) and (pointer:fine){.nav a:hover{border-bottom-color:var(--forest);color:var(--graphite)}}
@media (min-width:900px) and (pointer:coarse){.nav a{display:flex;align-items:center;justify-content:center;min-height:44px;min-width:44px;padding-block:0}}

/* ---------------------------------------------------------------- hero */
/* the reference's hero words: 40/56 on a phone, the heading at the h1
   step, the 64 px graphite bar, the lead, the buttons full width on a
   phone and side by side from 560 */
.hero{border-bottom:1px solid var(--rule);background:var(--paper)}
.hero-in{padding-block:40px 56px;display:flex;flex-direction:column;gap:28px}
.hero h1{font-size:clamp(2.25rem,1.72rem + 2.17vw,3.5rem);letter-spacing:-.02em;color:var(--graphite)}
.hero h1:empty,.hero h1:empty+.hero-bar{display:none}
.hero-bar{width:64px;height:2px;background:var(--graphite)}
.lead{font-size:clamp(18px,16.886px + .2857vw,21px);line-height:1.45;color:var(--graphite-2)}
.hero-in>p:not(.lead){color:var(--graphite-2);max-width:48ch}
.hero-actions{display:flex;flex-direction:column;gap:14px}
.hero-actions .btn{width:100%}
@media (min-width:560px){
  .hero-actions{flex-direction:row;flex-wrap:wrap}
  .hero-actions .btn{width:auto}
}
@media (min-width:900px){
  .hero-in{padding-block:72px 80px;gap:24px}
  .hero h1{line-height:1;font-variation-settings:"wdth" 118;max-width:16ch}
  .hero .lead{max-width:48ch}
  .hero-actions{margin-top:4px}
}
@media (min-width:1400px){.hero-in{padding-block:96px}}

/* ---------------------------------------------------------------- sections */
/* the reference's rhythm: 56 px on a phone, 96 from 900; paper sections
   one after another split by a hairline; about on paper-2, process on
   graphite */
.sec{padding-block:56px;background:var(--paper)}
.sec+.sec{border-top:1px solid var(--rule)}
.sec.about,.sec.process,.sec.about+.sec,.sec.process+.sec{border-top:0}
.split{display:flex;flex-direction:column;gap:24px}
.sec-title{display:flex;flex-direction:column;gap:12px}
.sec-title h1,.sec-title h2{font-size:clamp(2.25rem,1.72rem + 2.17vw,3.5rem);letter-spacing:-.02em}
.split>div:not(.sec-title)>.lead{margin-bottom:24px;max-width:48ch}
@media (min-width:900px){
  .sec{padding-block:96px}
  .sec-title h1,.sec-title h2{line-height:.96}
  .split>div:not(.sec-title)>.lead{margin-bottom:40px}
}
/* from 1000 the heading sits beside its words (about, where we work); a
   list (services, products, jobs, process) runs the full width under its
   heading, as the reference's lists do */
@media (min-width:1000px){
  .split{display:grid;grid-template-columns:minmax(300px,420px) minmax(0,1fr);column-gap:64px;row-gap:48px;align-items:start}
  .services .split,.products .split,.jobs .split,.process .split{display:flex;align-items:stretch;gap:48px}
}

/* A LIST OF CARDS (services, products, jobs), in the reference's idiom:
   no boxes; a graphite rule on top, each item a hairline row on a phone,
   two then three across, names in forest */
.cards{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:minmax(0,1fr);border-top:1px solid var(--graphite)}
.cards>li{border-bottom:1px solid var(--rule-2)}
.card{display:flex;flex-direction:column;gap:8px;height:100%;box-sizing:border-box;padding-block:24px;color:inherit;transition:background-color .18s cubic-bezier(.22,.61,.36,1)}
.card:active{background:var(--paper-2)}
.card h2,.card h3{font-variation-settings:"wdth" var(--wh);font-weight:600;font-size:22px;line-height:1.12;color:var(--forest)}
.card .meta{font-size:13px;letter-spacing:.12em;text-transform:uppercase;font-weight:600;color:var(--slate)}
.card p{color:var(--graphite-2)}
@media (min-width:720px){.cards{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:48px}}
@media (min-width:900px){
  .card{padding-block:32px}
  .card h2,.card h3{font-size:27px;font-variation-settings:"wdth" 116}
}
@media (min-width:1100px){.cards--3{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (hover:hover) and (pointer:fine){a.card:hover h2,a.card:hover h3{text-decoration:underline;text-underline-offset:4px;text-decoration-thickness:1.5px}}
.more{display:inline-flex;align-items:center;min-height:44px;margin-top:16px;font-weight:600;text-decoration:underline;text-underline-offset:3px}

/* service areas: the reference's town list, names split by a dot,
   between a graphite rule and a hairline */
.areas{list-style:none;margin:0;padding:16px 0;display:flex;flex-wrap:wrap;border-top:1px solid var(--graphite);border-bottom:1px solid var(--rule);color:var(--graphite-2)}
.areas li:not(:last-child)::after{content:"·";padding-inline:.5em;color:var(--caption)}

.svcmap{margin:0 0 24px;padding:0;max-width:100%}
.svcmap svg{display:block;width:100%;max-width:100%;height:auto}
.svcmap--small{max-width:640px}
.svcmap .bg{fill:var(--paper,#f5f6f3)}
.svcmap .fo,.svcmap .fi,.svcmap .es{stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}
.svcmap .fo{fill:var(--paper-2,#e9ebe6);stroke:var(--rule,#c8ccc6);stroke-width:.75}
.svcmap .fi{fill:var(--forest-p,#c8d8ce);stroke:var(--forest,#054230);stroke-width:.6}
.svcmap .es{fill:none;stroke:var(--graphite,#141815);stroke-width:1.75}
.svcmap text{font-family:var(--mono,ui-monospace,Menlo,monospace);letter-spacing:.12em;font-weight:500;paint-order:stroke;stroke-linejoin:round}
.svcmap .ci,.svcmap .st{text-transform:uppercase}
.svcmap .ci{font-size:16px;fill:var(--forest,#054230);font-weight:400;text-anchor:middle;stroke:var(--forest-p,#c8d8ce);stroke-width:2px}
.svcmap .st{font-size:20px;letter-spacing:.3em;fill:var(--graphite,#141815);stroke:var(--paper-2,#e9ebe6);stroke-width:3px}
.svcmap .town{font-family:"Archivo","Helvetica Neue",Arial,sans-serif;letter-spacing:0;font-size:18px;font-weight:600;fill:var(--graphite,#141815);stroke:var(--forest-p,#c8d8ce);stroke-width:3.5px}
.svcmap .dot{fill:var(--graphite,#141815);stroke:var(--paper,#f5f6f3);stroke-width:1.5px}
/* names are viewBox units: on a phone they would print about 4px tall, so a
   narrow map shows shapes and dots only (the list beside it names them) */
@media (max-width:700px){.svcmap .ci,.svcmap .town,.svcmap .st{display:none}}

/* the about facts: the reference's forest fact strip as a plate,
   eyebrow labels in forest-t */
.facts{display:grid;grid-template-columns:minmax(0,1fr);margin:8px 0 0;padding:4px 20px;background:var(--forest);color:var(--paper);border-radius:2px}
.facts div{padding-block:18px;border-bottom:1px solid var(--rule-lt);display:flex;flex-direction:column;gap:8px}
.facts div:last-child{border-bottom:0}
.facts dt{font-size:12px;letter-spacing:.18em;text-transform:uppercase;font-weight:600;color:var(--forest-t)}
.facts dd{margin:0}
@media (min-width:720px){
  .facts{grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);padding:4px 0}
  .facts div{padding:28px 32px;border-bottom:0;border-right:1px solid var(--rule-lt)}
  .facts div:last-child{border-right:0}
}

/* ---------------------------------------------------------------- who we are */
.about{background:var(--paper-2)}
.about-body{display:flex;flex-direction:column;gap:24px;color:var(--graphite-2)}
@media (min-width:900px){.about-body{max-width:68ch}}

/* ---------------------------------------------------------------- how it goes */
.process{background:var(--graphite);color:var(--paper-t);padding-block:64px}
.process .eyebrow{color:var(--paper-t-2)}
.process h1,.process h2{color:var(--paper)}
.process .lead,.process p{color:var(--paper-t)}
.steps{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.step{display:grid;grid-template-columns:56px minmax(0,1fr);column-gap:16px;row-gap:8px;padding-block:20px;border-top:1px solid var(--rule-lt)}
.step:last-child{border-bottom:1px solid var(--rule-lt)}
.step-n{grid-row:span 2;font-size:36px;line-height:1;color:var(--paper-t-2)}
.step-t{font-weight:600;line-height:1.3;color:var(--paper)}
.step-b{font-size:1rem;line-height:1.55;color:var(--paper-t-3)}
@media (min-width:900px){.process{padding-block:112px}}
@media (min-width:1100px){
  .steps{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:32px;border-top:1px solid var(--rule-lt);padding-top:32px}
  .step,.step:last-child{display:flex;flex-direction:column;gap:14px;padding:0;border:0}
  .step-n{font-size:51px}
}

/* a job's or product's facts */
.kv{display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 16px;margin:0}
.kv dt{font-weight:600;color:var(--slate)}
.kv dd{margin:0}

/* ---------------------------------------------------------------- the quote band */
/* forest, the only centred thing on the page */
.cta{background:var(--forest);color:var(--paper);text-align:center;padding-block:64px}
.cta-in{display:flex;flex-direction:column;align-items:center;gap:24px}
.cta h1,.cta h2{font-size:clamp(40px,28.11px + 3.048vw,72px);letter-spacing:-.02em}
.cta .lead{color:var(--forest-p)}
.cta-actions{display:flex;flex-direction:column;gap:14px;width:100%}
.cta-actions:empty{display:none}
.cta-actions .btn{width:100%}
@media (min-width:560px){
  .cta-actions{flex-direction:row;flex-wrap:wrap;justify-content:center;width:auto}
  .cta-actions .btn{width:auto}
}
@media (min-width:900px){
  .cta{padding-block:112px}
  .cta-in{gap:28px}
  .cta h1,.cta h2{line-height:.96;max-width:18ch}
  .cta .lead{max-width:48ch}
}

/* THE QUOTE FORM: one column, at most 620 px, 24 px between fields, left
   aligned in the centred band. Label above, the eyebrow's size, forest-p
   on the forest ground; 16 px type (iOS zooms below it), 48 px fields.
   .hp is the honeypot: off-screen, never display:none; its input is
   itself 1 x 1 px and transparent. .qerr is a refused post's error
   block, above the submit. */
.qform{position:relative;display:flex;flex-direction:column;gap:24px;width:100%;max-width:620px;text-align:left}
.field{display:flex;flex-direction:column;gap:8px}
.field label{font-size:12px;letter-spacing:.18em;text-transform:uppercase;font-weight:600;line-height:1.4;color:var(--forest-p)}
.field input,.field textarea{box-sizing:border-box;width:100%;min-height:48px;margin:0;padding:12px 14px;border:1px solid var(--slate);border-radius:2px;background:var(--card);color:var(--graphite);font:inherit;font-size:16px;line-height:1.4}
.field textarea{min-height:120px;resize:vertical}
.field input:focus,.field textarea:focus{border-color:var(--forest)}
.qform .btn{width:100%}
.qabout{color:var(--forest-p);font-weight:600}
.hp{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.hp input{box-sizing:border-box;width:1px;height:1px;min-width:0;margin:0;padding:0;border:0;opacity:0}
.qerr{scroll-margin-top:160px;box-sizing:border-box;width:100%;padding:12px 16px;border:1px solid var(--bad);border-radius:2px;background:var(--bad-bg);color:var(--bad);font-weight:600;line-height:1.4}
.qerr p{margin:0}
@media (min-width:900px){.qerr{scroll-margin-top:calc(104px + 160px)}.field textarea{min-height:140px}}

/* ---------------------------------------------------------------- footer */
/* graphite; the name; 44 px link rows on a phone, 32 px targets where the
   pointer is fine from 900 */
.foot{background:var(--graphite);color:var(--paper-t);padding:56px 0 calc(40px + env(safe-area-inset-bottom,0px))}
.foot-top{display:flex;flex-direction:column;gap:32px}
.foot-name{font-variation-settings:"wdth" var(--wh);font-weight:600;font-size:26px;line-height:1.1;color:var(--paper)}
.foot-links{display:flex;flex-direction:column;gap:32px}
.foot h2{color:var(--paper-t-2);font-variation-settings:"wdth" 100;margin-bottom:8px}
.foot ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.foot li{display:flex;align-items:center;min-height:44px;font-size:15px}
.foot a{color:var(--paper);font-size:15px;display:flex;align-items:center;min-height:44px;min-width:44px}
.foot a:active{background:rgba(255,255,255,.08);text-decoration:underline}
.foot-base{margin-top:32px;border-top:1px solid var(--rule-lt-2);padding-top:24px;display:flex;flex-direction:column;gap:8px;font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--paper-t-2)}
@media (min-width:720px){.foot-links{flex-direction:row;gap:64px}.foot-links>div{width:220px}}
@media (min-width:900px){
  .foot{padding:72px 0 40px}
  .foot-top{display:grid;grid-template-columns:minmax(0,1fr) 220px 220px;gap:64px}
  .foot-links{display:contents}
  .foot-links>div{width:auto}
  .foot-name{font-size:28px;font-variation-settings:"wdth" 118}
  .foot h2{margin-bottom:16px;line-height:1.65}
  .foot ul{gap:10px}
  .foot li{min-height:0}
  .foot a{display:inline-block;min-height:0;min-width:32px;padding-block:4px;margin-block:-4px}
  .foot-base{margin-top:56px;flex-direction:row;justify-content:space-between;gap:24px}
}
@media (min-width:900px) and (pointer:coarse){
  .foot ul{gap:0}
  .foot li{min-height:44px}
  .foot a{display:flex;min-height:44px;min-width:44px;padding-block:0;margin-block:0}
}
@media (hover:hover) and (pointer:fine){.foot a:hover{color:var(--paper-t-3);text-decoration:underline}}

/* ---------------------------------------------------------------- call-now bar */
/* phones only (<= 700 px), never in print: one tel: button fixed to the
   bottom, forest with paper words; the page gets the bar's height as bottom
   padding so the footer scrolls clear of it */
.callbar{display:none}
@media screen and (max-width:700px){
  .has-callbar{padding-bottom:calc(65px + env(safe-area-inset-bottom,0px))}
  .callbar{display:block;position:fixed;left:0;right:0;bottom:0;z-index:50;background:var(--forest);border-top:1px solid var(--forest-dk);padding:0 var(--gutter) env(safe-area-inset-bottom,0px)}
  .callbar-btn{display:flex;align-items:center;justify-content:center;min-height:64px;color:var(--paper);font-weight:600;font-size:17px;line-height:1.2;text-align:center}
  .callbar-btn:active{background:var(--forest-dk);color:var(--forest-t)}
  .callbar :focus-visible,.callbar-btn:focus-visible{outline-color:var(--paper);outline-offset:-4px}
}
@media print{.callbar{display:none}.has-callbar{padding-bottom:0}}

/* ---------------------------------------------------------------- the preview bar */
/* signed in only (worker.js previewBar), never on the plain page: fixed to
   the bottom, above everything, in fixed neutral colours so it reads the
   same on every scheme. Phone: the names on one line, Back and Use this
   look under them (96 px); from 560 px one row (72 px). The page gets the
   bar's height as bottom padding; the Call-now bar (phones) sits on top of
   it, and the padding grows by the Call-now bar's 65 px. */
.pv{position:fixed;left:0;right:0;bottom:0;z-index:70;box-sizing:border-box;height:calc(96px + env(safe-area-inset-bottom,0px));padding:8px var(--gutter) calc(8px + env(safe-area-inset-bottom,0px));display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-rows:24px 48px;gap:8px 10px;align-items:center;background:#141815;color:#fff;border-top:2px solid #fff;font-size:15px;line-height:1.2}
.pv-name{grid-column:1/-1;margin:0;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pv-back{display:flex;align-items:center;justify-content:center;box-sizing:border-box;height:48px;padding:0 18px;border:1.5px solid #fff;border-radius:2px;color:#fff;font-weight:600}
.pv-use{margin:0;min-width:0}
.pv-btn{box-sizing:border-box;width:100%;height:48px;padding:0 18px;border:1.5px solid #fff;border-radius:2px;background:#fff;color:#141815;font:inherit;font-weight:600;cursor:pointer}
.pv a:focus-visible,.pv-btn:focus-visible{outline:3px solid #fff;outline-offset:2px}
.has-pv{padding-bottom:calc(96px + env(safe-area-inset-bottom,0px))}
@media (min-width:560px){
  .pv{height:calc(72px + env(safe-area-inset-bottom,0px));grid-template-columns:minmax(0,1fr) auto auto;grid-template-rows:48px;gap:12px}
  .pv-name{grid-column:auto}
  .pv-btn{width:auto}
  .has-pv{padding-bottom:calc(72px + env(safe-area-inset-bottom,0px))}
}
@media screen and (max-width:700px){
  .has-pv .callbar{bottom:calc(96px + env(safe-area-inset-bottom,0px));padding-bottom:0}
  .has-pv.has-callbar{padding-bottom:calc(161px + env(safe-area-inset-bottom,0px))}
}
@media screen and (min-width:560px) and (max-width:700px){
  .has-pv .callbar{bottom:calc(72px + env(safe-area-inset-bottom,0px))}
  .has-pv.has-callbar{padding-bottom:calc(137px + env(safe-area-inset-bottom,0px))}
}
@media print{.pv{display:none}.has-pv{padding-bottom:0}}
