/* ============================================================
   Insight SRI — site.css

   THREE GLOBAL DIALS
   1. html{font-size}   type scale for the whole site (below).
   2. --col             width of the text/image column on desktop.
   3. --font / --body   the typeface. Currently a system grotesque:
                        Segoe UI Variable on Windows 11, SF on macOS.
                        Nothing to download, renders natively.

   TO SWITCH TO A WEBFONT: SELF-HOST IT. DO NOT LINK GOOGLE FONTS.
   Linking fonts.googleapis.com sends every visitor's IP address to
   Google on every page load. A German court (LG Munchen I, 3 O 17493/20,
   Jan 2022) found that to be a GDPR violation, and it would be the only
   third-party request this site makes. As built, insightsri.com sets no
   cookies and contacts no third party -- which is why it needs no cookie
   banner. A hosted font link forfeits that for a typeface.

   Self-hosting instead (two edits, no other changes, nothing external):
     a) put the .woff2 files in assets/fonts/ and declare them here:
        @font-face{font-family:'Inter';font-style:normal;font-weight:400;
          font-display:swap;src:url('../assets/fonts/inter-400.woff2') format('woff2')}
        ...one block per weight actually used (400/500/600).
     b) set both --font and --body below to:
        'Inter', system-ui, sans-serif
   Download the files from the foundry or fontsource.org, not from
   Google's CDN at runtime. Three weights is about 90KB total -- less
   than one of the photographs in the About strip.

   Current: a system grotesque. Nothing to download, nothing to disclose.
   Good alternatives if switching: Geist, Schibsted Grotesk,
   Instrument Sans. For an editorial look, pair 'Instrument Serif'
   on --font with 'Inter' on --body.
   ============================================================ */

:root{
  /* palette */
  --grey:      #706B60;
  --grey-up:   #7A7569;
  --grey-dn:   #615D53;
  --dark:      #3A3A3A;
  --maroon:    #880008;
  --maroon-lt: #C2323A;
  --paper:     #F3F1EC;
  --ink:       #2B2823;

  /* type — one family, hierarchy from size, weight and tracking */
  --font: "Segoe UI Variable Display","Segoe UI",system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif;
  --body: "Segoe UI Variable Text","Segoe UI",system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif;

  /* structure */
  --hair:  1px solid rgba(255,255,255,.13);
  --col:   100%;
  --nav-h: 88px;
  --gutter: clamp(1.1rem,3vw,2rem);
  --r:     10px;          /* corner radius */
  --r-pill: 999px;
  --nav-bg: rgba(97,93,83,.72);
}

/* PAGE 2 runs on the darker ground the layout brief specifies (#3A3A3A).
   Set on <body class="theme-dark">; everything else follows from these
   three values. */
body.theme-dark{
  --nav-bg: rgba(46,46,46,.78);
  background:var(--dark);
  background-image:linear-gradient(180deg,#434343 0%,#3A3A3A 42%,#313131 100%);
}

html{font-size:150%; scroll-behavior:smooth; scroll-padding-top:var(--nav-h)}

@media (min-width:1000px){
  :root{ --col: min(60vw, 1500px) }
}

*{box-sizing:border-box;margin:0;padding:0}
body{
  font-family:var(--body);
  font-size:.78rem;
  font-weight:400;
  /* 1.45 is about as tight as a 60%-width column takes before the eye
     starts losing its place returning to the left margin */
  line-height:1.45;
  color:var(--paper);
  background:var(--grey);
  background-image:linear-gradient(180deg,var(--grey-up) 0%,var(--grey) 38%,var(--grey-dn) 100%);
  background-attachment:fixed;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}
.page{width:100%}
/* friction against the one-gesture saves; see initImageGuard() in
   js/site.js. File covers inside .fcard are exempt — those are meant
   to be saveable. */
img{display:block;max-width:100%}
img:not(.fcard__cover),video{
  -webkit-touch-callout:none;-webkit-user-drag:none;user-select:none;
}
a{color:inherit}
.sr-only{
  position:absolute;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;
}
.wrap{width:100%;max-width:var(--col);margin:0 auto;padding:0 var(--gutter)}

/* small tracked label, used for every caption-scale item */
.label{
  font-family:var(--body);font-size:.58rem;font-weight:500;
  letter-spacing:.13em;text-transform:uppercase;opacity:.82;line-height:1.3;
}

/* ---------- nav --------------------------------------------- */
.nav{
  position:fixed;inset:0 0 auto 0;z-index:100;
  background:var(--nav-bg);
  backdrop-filter:saturate(140%) blur(14px);
  -webkit-backdrop-filter:saturate(140%) blur(14px);
  border-bottom:var(--hair);
  transition:transform .3s cubic-bezier(.4,0,.2,1);
  will-change:transform;
}
.nav--hidden{transform:translateY(-100%)}
.nav__inner{
  width:100%;max-width:var(--col);margin:0 auto;min-height:var(--nav-h);
  display:flex;align-items:center;gap:1rem;padding:0 var(--gutter);
}
.nav__brand{display:flex;align-items:center;flex:0 0 auto}
.nav__brand img{height:56px;width:auto}
.nav__links{
  margin-left:auto;display:flex;flex-wrap:wrap;align-items:center;
  gap:.45rem 1.05rem;
  font-family:var(--body);font-size:.6rem;font-weight:500;letter-spacing:.02em;
}
.nav__links a{
  color:var(--paper);text-decoration:none;text-align:center;line-height:1.2;
  padding:.35em 0;border-bottom:1.5px solid transparent;
  transition:color .18s,border-color .18s;
}
.nav__links a:hover,.nav__links a:focus-visible{border-bottom-color:var(--maroon-lt)}
.nav__links a[aria-current="page"]{border-bottom-color:var(--paper)}

/* ---------- v1 hero (legacy page only) ---------------------- */
.hero{position:relative;overflow:hidden;background:#C98B6E}
.hero img{width:100%;height:auto;object-fit:cover;object-position:72% 42%}
.hero__strap{
  position:absolute;left:0;right:0;bottom:0;
  padding:clamp(2rem,8vw,5rem) 0 clamp(.6rem,1.6vw,1.1rem);
  background:linear-gradient(180deg,rgba(255,255,255,0) 0%,rgba(255,255,255,.55) 55%,rgba(255,255,255,.8) 100%);
  text-align:center;color:var(--maroon);
}
.hero__since{font-style:italic;font-size:.7rem;letter-spacing:.4em;margin-bottom:.35rem}
.hero__line{font-size:1rem;letter-spacing:.28em;word-spacing:.4em;line-height:1.35}

/* ---------- section frame ----------------------------------- */
.section{
  border-top:var(--hair);
  /* condensed rhythm, tightened again 26 Sep. Was 1.3/3.3/2.6 over
     1.4/3.5/2.8; roughly 30% less air top and bottom. */
  padding:clamp(.9rem,2.3vw,1.8rem) 0 clamp(1rem,2.4vw,1.9rem);
}
.section--first{border-top:none}
/* same treatment as .page-title: one family, hierarchy from size and
   weight. Revert to weight 600 / -.02em for the old, heavier headings. */
.section__title{
  font-family:var(--font);font-size:1.8rem;font-weight:300;
  letter-spacing:-.012em;line-height:1.06;
}
.section__title::before{
  content:"";display:block;width:2.1rem;height:2px;
  background:var(--maroon-lt);margin-bottom:.7rem;border-radius:2px;
}
.section__title--nobar::before{display:none}
.accent{
  width:2.1rem;height:2px;background:var(--maroon-lt);
  border-radius:2px;margin-bottom:.9rem;
}
/* red left rule — the pull-quote treatment, reused */
.redrule{border-left:2px solid var(--maroon-lt);padding-left:1rem}
.section__lede{
  font-size:.78rem;line-height:1.45;opacity:.9;
  max-width:62ch;margin-top:.9rem;
}
.btn{
  font-family:var(--body);font-size:.62rem;font-weight:500;letter-spacing:.03em;
  background:transparent;color:var(--paper);
  border:1px solid rgba(243,241,236,.5);border-radius:var(--r-pill);
  padding:.62em 1.6em;cursor:pointer;text-decoration:none;display:inline-block;
  transition:background .2s,color .2s,border-color .2s,transform .08s;
}
.btn:hover{background:var(--paper);color:var(--ink);border-color:var(--paper)}
.btn:active{transform:translateY(1px)}
.btn-row{display:flex;justify-content:center;margin-top:clamp(1.4rem,3vw,2rem)}
.counter{font-size:.6rem;letter-spacing:.08em;opacity:.75;font-variant-numeric:tabular-nums}
.counter b{font-weight:600;opacity:1}

/* ---------- opener (v2) ------------------------------------- */
.opener{padding-top:calc(var(--nav-h) + clamp(1.1rem,3vw,2.5rem))}
.opener__grid{
  display:grid;grid-template-columns:1fr minmax(0,12rem);
  gap:clamp(1.2rem,3.5vw,2.6rem);align-items:start;
}
.proposition{
  font-family:var(--font);font-size:2rem;font-weight:600;
  letter-spacing:-.026em;line-height:1.02;
}
.proposition span{display:block}
.opener__sub{
  font-family:var(--font);font-size:1rem;font-weight:400;
  letter-spacing:-.01em;line-height:1.3;opacity:.82;margin-top:.7rem;
}
.opener__lede{font-size:.78rem;line-height:1.65;margin-top:clamp(1.1rem,2.4vw,1.6rem);opacity:.95}
.opener__foot{
  display:grid;grid-template-columns:1fr auto;
  gap:clamp(1rem,3vw,2.4rem);align-items:stretch;
  margin-top:clamp(1.1rem,2.4vw,1.6rem);
}
.opener__pull{
  font-size:.84rem;font-style:italic;line-height:1.5;
  padding-left:1rem;max-width:50ch;margin:0;
  border-left:2px solid var(--maroon-lt);
  display:flex;align-items:center;
}
/* signature fills the quote's height; width follows its own proportions */
.signature{display:flex;align-items:center;justify-content:flex-end}
.signature img{
  height:100%;width:auto;max-height:3.4rem;max-width:10.5rem;
  object-fit:contain;opacity:.9;
}
/* the radius belongs on the image, not the figure — the figure's box
   ends below the caption, so clipping there rounded only the top */
.portrait-sm{}
.portrait-sm img{width:100%;height:auto;border-radius:var(--r);display:block}
.portrait-sm figcaption{
  font-family:var(--body);font-size:.55rem;font-weight:500;letter-spacing:.13em;
  text-transform:uppercase;opacity:.75;margin-top:.55rem;text-align:center;
}
.proof{
  display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(.8rem,2vw,1.6rem);
  margin-top:clamp(1.2rem,2.6vw,1.8rem);border-top:var(--hair);
  padding-top:clamp(1.1rem,2.4vw,1.5rem);
}
.proof__n{
  font-family:var(--font);font-size:1.65rem;font-weight:600;
  letter-spacing:-.03em;line-height:1;font-variant-numeric:tabular-nums;
}
.proof__l{
  font-family:var(--body);font-size:.56rem;font-weight:500;letter-spacing:.13em;
  text-transform:uppercase;opacity:.75;margin-top:.5rem;line-height:1.3;
}

/* ---------- projects carousel ------------------------------- */
.carousel{
  position:relative;display:flex;align-items:center;
  --card-w:min(780px, 54vw);   /* the active window; 16:9 sets its height */
  --standby:.74;               /* how far the cards either side shrink */
}
.track{
  display:flex;align-items:center;gap:clamp(4px,.6vw,10px);
  overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;
  padding:10px calc((100% - var(--card-w))/2);scrollbar-width:none;
}
.track::-webkit-scrollbar{display:none}
.card{
  flex:0 0 var(--card-w);aspect-ratio:16/9;scroll-snap-align:center;
  position:relative;border-radius:var(--r);overflow:hidden;background:#24221e;
  filter:grayscale(1) brightness(.6);opacity:.4;transform:scale(var(--standby));
  transition:filter .55s,opacity .55s,transform .55s,box-shadow .55s;cursor:pointer;
}
.card.active{
  filter:none;opacity:1;transform:scale(1);
  box-shadow:0 26px 60px -24px rgba(0,0,0,.65);cursor:default;
}
.card__media{position:absolute;inset:0}
.card__media img,.card__media video{width:100%;height:100%;object-fit:cover}
.card__media--tint{
  background:linear-gradient(115deg,var(--h1),var(--h2),var(--h1));
  background-size:260% 260%;animation:drift 9s ease-in-out infinite;
}
.card:not(.active) .card__media--tint{animation-play-state:paused}
@keyframes drift{0%{background-position:0% 50%}50%{background-position:100% 50%}100%{background-position:0% 50%}}
.card__veil{
  position:absolute;inset:0;z-index:1;
  background:linear-gradient(180deg,rgba(0,0,0,0) 30%,rgba(0,0,0,.18) 55%,
              rgba(0,0,0,.42) 78%,rgba(0,0,0,.62) 100%);
}
.card__overlay{
  position:absolute;left:0;right:0;bottom:0;z-index:2;padding:clamp(14px,2vw,22px);
  opacity:0;transform:translateY(10px);transition:opacity .45s .05s,transform .45s .05s;
  /* its own gradient, so pale footage cannot swallow the words */
  background:linear-gradient(180deg,rgba(18,16,14,0) 0%,rgba(18,16,14,.34) 30%,
             rgba(18,16,14,.58) 66%,rgba(18,16,14,.68) 100%);
  backdrop-filter:blur(1.5px);
  -webkit-backdrop-filter:blur(1.5px);
  text-shadow:0 1px 6px rgba(0,0,0,.55);
}
.card.active .card__overlay{opacity:1;transform:none}
.card__title{
  font-family:var(--font);font-size:1.05rem;font-weight:600;letter-spacing:-.02em;
  color:#fff;line-height:1.1;margin-bottom:.5rem;
}
.card__title b{color:#FF8A8A;font-weight:600}
.card__blurb{
  font-size:.68rem;line-height:1.5;color:rgba(255,255,255,.92);max-width:44ch;
  margin-bottom:0;
}
.card__files{
  position:absolute;right:clamp(12px,1.6vw,18px);bottom:clamp(12px,1.6vw,18px);
  z-index:3;display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.45rem;
  max-width:40%;
  opacity:0;transform:translateY(8px);
  transition:opacity .45s .05s,transform .45s .05s;
}
.card.active .card__files{opacity:1;transform:none}
.filemark{position:relative;display:block;width:1.35rem;line-height:0}
.filemark svg{width:100%;height:auto;display:block;
  filter:drop-shadow(0 1px 3px rgba(0,0,0,.45))}
/* needs to out-rank `.filemark svg`, which sets width:100% */
.filemark svg.filemark__lock{
  position:absolute;right:-.1rem;bottom:-.08rem;width:.62rem;height:auto;
}
.nav-arrow{
  position:absolute;z-index:5;top:50%;transform:translateY(-50%);
  width:2.2rem;height:2.2rem;border:1px solid rgba(255,255,255,.28);
  border-radius:var(--r-pill);cursor:pointer;
  background:rgba(20,18,15,.42);backdrop-filter:blur(8px);
  color:#fff;font-size:.9rem;line-height:1;
  display:flex;align-items:center;justify-content:center;transition:background .25s;
}
.nav-arrow:hover{background:rgba(20,18,15,.7)}
.nav-arrow:focus-visible{outline:2px solid #fff;outline-offset:2px}
.nav-arrow.prev{left:clamp(6px,1.6vw,18px)}
.nav-arrow.next{right:clamp(6px,1.6vw,18px)}
.footrow{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-top:clamp(1.2rem,2.6vw,1.8rem)}
.footrow .btn{margin:0 auto}

/* ---------- clients: bars + logo strip ---------------------- */
.bars{display:grid;gap:clamp(8px,1.2vw,12px);margin-top:clamp(1.6rem,3.5vw,2.4rem)}
.bar{display:grid;grid-template-columns:minmax(7rem,10.5rem) 1fr auto;align-items:center;gap:.8rem}
.bar__label{font-size:.64rem;text-align:right;line-height:1.25;opacity:.85}
.bar__track{background:rgba(0,0,0,.16);height:.62rem;border-radius:var(--r-pill);overflow:hidden}
.bar__fill{
  height:100%;width:0;border-radius:var(--r-pill);
  background:linear-gradient(90deg,rgba(243,241,236,.55),var(--paper));
  transition:width 1.5s cubic-bezier(.22,.7,.25,1);
}
.bar__val{
  font-family:var(--font);font-size:.74rem;font-weight:600;letter-spacing:-.01em;
  min-width:4.4rem;font-variant-numeric:tabular-nums;
}
/* A continuous run that drifts sideways in --rows rows. Fixed height
   whatever the number of marks: rows x --slot-h, the row gap, and the
   panel's own padding. Nothing else. */
.logostrip{
  --rows:2;               /* rows of marks */
  --row-gap:.5rem;
  --slot-h:1.85rem;       /* logo box height — the panel's only size input */
  --slot-min:2.4rem;      /* narrowest box (tall square marks)  */
  --slot-max:6.6rem;      /* widest box (long wordmarks)        */
  --slot-gap:1.35rem;     /* space between marks                */
  --fade:2.6rem;          /* soft edge under the arrows */
  margin-top:clamp(1.8rem,4vw,2.6rem);
  background:rgba(243,241,236,.94);
  border-radius:var(--r);
  padding:.5rem 0;
  position:relative;
  overflow:hidden;
}
.logostrip__viewport{
  overflow-x:auto;overflow-y:hidden;
  scrollbar-width:none;-ms-overflow-style:none;
  cursor:grab;
  /* fade the marks out at both edges so the run reads as continuous */
  mask-image:linear-gradient(90deg,transparent 0,#000 var(--fade),
             #000 calc(100% - var(--fade)),transparent 100%);
  -webkit-mask-image:linear-gradient(90deg,transparent 0,#000 var(--fade),
             #000 calc(100% - var(--fade)),transparent 100%);
}
.logostrip__viewport::-webkit-scrollbar{display:none}
.logostrip__viewport.dragging{cursor:grabbing}
.logostrip__viewport:focus-visible{outline:2px solid var(--maroon-lt);outline-offset:-2px}
.logostrip__rail{
  display:grid;grid-auto-flow:column;
  grid-template-rows:repeat(var(--rows),var(--slot-h));
  column-gap:var(--slot-gap);row-gap:var(--row-gap);
  justify-items:center;align-items:center;width:max-content;
}
.logoslot{
  /* width comes from the mark's own aspect ratio (set inline by site.js
     from the pixel sizes in js/logos.js), so no mark carries dead space.
     A grid column is as wide as the wider of its two marks. */
  height:var(--slot-h);
  display:flex;align-items:center;justify-content:center;text-align:center;
  border-radius:6px;
}
.logoslot img{
  max-height:100%;max-width:100%;width:auto;object-fit:contain;
  /* logos supplied on a white ground blend into the off-white panel */
  mix-blend-mode:multiply;
  -webkit-user-drag:none;user-select:none;
}
.logostrip--color .logoslot img{mix-blend-mode:normal}
/* fallback while a mark has no image file yet */
.logoslot--text{
  background:rgba(43,40,35,.05);padding:0 .5rem;
  font-size:.52rem;line-height:1.2;color:#6b6659;filter:grayscale(1);
}
.logostrip .nav-arrow{
  width:1.7rem;height:1.7rem;font-size:.8rem;
  background:rgba(243,241,236,.82);border-color:rgba(43,40,35,.16);color:#4a463d;
  backdrop-filter:none;
}
.logostrip .nav-arrow:hover{background:#fff;color:var(--ink)}
.logostrip .nav-arrow.prev{left:.35rem}
.logostrip .nav-arrow.next{right:.35rem}

/* ---------- Iain block -------------------------------------- */
/* full-width banner photo leading the section */
.bio__banner{
  position:relative;border-radius:var(--r);overflow:hidden;
  margin-top:clamp(1.2rem,2.6vw,1.8rem);
}
.bio__banner img{width:100%;height:auto;display:block}
.bio__li{
  position:absolute;right:10px;bottom:10px;width:1.5rem;height:1.5rem;border-radius:6px;
  background:rgba(10,102,194,.92);color:#fff;font-weight:600;font-size:.6rem;
  display:flex;align-items:center;justify-content:center;text-decoration:none;
}
.bio__text{font-size:.78rem;line-height:1.65;margin-top:clamp(.6rem,1.4vw,1rem)}
.bio__text p{margin-bottom:.9rem}
.bio__text p:last-child{margin-bottom:0}
.bio__kicker{
  font-family:var(--font);font-size:.98rem;font-weight:600;letter-spacing:-.015em;
  line-height:1.25;margin-bottom:.9rem;
}
.quotes{margin-top:clamp(1.6rem,3.4vw,2.4rem);min-height:4.6rem;display:flex;align-items:center;justify-content:center}
.quotes--lead{
  margin-top:clamp(1.1rem,2.4vw,1.6rem);
  margin-bottom:clamp(1.4rem,3vw,2rem);
  min-height:4.2rem;
}
.quote{
  font-size:.82rem;font-style:italic;text-align:center;max-width:56ch;line-height:1.55;
  opacity:0;transition:opacity .85s;position:absolute;pointer-events:none;
}
.quote.on{opacity:.95;position:static;pointer-events:auto}

/* ---------- ventures ---------------------------------------- */
.ventures__text{font-size:.78rem;line-height:1.65;margin-top:clamp(1rem,2.4vw,1.5rem)}
.ventures__hook{
  font-family:var(--font);font-size:1rem;font-weight:600;letter-spacing:-.015em;
  line-height:1.3;margin-bottom:1rem;
}
.ventures__text p{margin-bottom:.9rem}
.strip-label{text-align:center;margin-top:clamp(1.6rem,3.4vw,2.2rem)}

/* ---------- contact ----------------------------------------- */
.cities{
  display:flex;flex-wrap:wrap;justify-content:center;
  gap:.4rem clamp(1rem,2.6vw,2.2rem);
  margin-top:clamp(1.1rem,2.4vw,1.6rem);
}
.contact__note{
  font-style:italic;text-align:center;font-size:.76rem;opacity:.88;
  margin:.45rem auto 0;max-width:62ch;
}
.contact__address{line-height:1.35;font-size:.76rem}
.contact__address strong{display:block;margin-bottom:.35rem;font-weight:600}
.contact__reach{margin-top:.9rem;line-height:1.5}
.contact__grid{
  display:grid;grid-template-columns:1fr 1fr;gap:clamp(1.2rem,3vw,2.2rem);
  align-items:start;margin-top:clamp(1.8rem,4vw,2.6rem);
}
.contact__block{font-size:.76rem;line-height:1.7}
.contact__block a{color:var(--paper);text-decoration:none;border-bottom:1px solid rgba(243,241,236,.35)}
.contact__block a:hover{border-bottom-color:var(--paper)}
.contact__block strong{font-weight:600}
/* Map slot: drop a file in at assets/img/map-dc.jpg and it appears.
   Until then the note below shows instead. Box is about 1.9:1 —
   supply roughly 1000x520 for a crisp result on a retina screen. */
.map{
  position:relative;border:var(--hair);border-radius:var(--r);
  background:rgba(0,0,0,.16);overflow:hidden;
  height:clamp(160px,15vw,220px);
}
.map__img{width:100%;height:100%;object-fit:cover;display:block;position:relative;z-index:1}
.map__await{
  position:absolute;inset:0;z-index:0;display:flex;align-items:center;justify-content:center;
  text-align:center;padding:1.2rem;font-size:.62rem;opacity:.55;
}

.form{margin:clamp(2rem,4vw,3rem) auto 0;max-width:33rem}
.form__row{margin-bottom:.9rem}
.form label{display:block;margin-bottom:.4rem}
.form select,.form input,.form textarea{
  width:100%;font-family:var(--body);font-size:.72rem;padding:.65em .8em;
  border:1px solid rgba(243,241,236,.28);border-radius:8px;
  background:rgba(0,0,0,.14);color:var(--paper);
  transition:border-color .2s,background .2s;
}
.form select option{color:var(--ink)}
.form input::placeholder,.form textarea::placeholder{color:rgba(243,241,236,.45)}
.form select:focus,.form input:focus,.form textarea:focus{
  outline:none;border-color:var(--maroon-lt);background:rgba(0,0,0,.2);
}
.form textarea{min-height:5rem;resize:vertical}
.form__hint{font-size:.58rem;opacity:.65;margin-top:.4rem}
.form__resp{
  font-size:.74rem;line-height:1.55;margin-top:1.1rem;
  background:rgba(243,241,236,.95);color:var(--ink);
  padding:.8em .9em;border-radius:8px;display:none;
}
.form__resp.on{display:block}
.form .btn{margin-top:.3rem}
.sitefoot{
  border-top:var(--hair);padding:1.6rem 0;text-align:center;
  font-size:.56rem;letter-spacing:.1em;text-transform:uppercase;opacity:.55;
}

/* honeypot: off-screen rather than display:none, because some bots skip
   anything display:none. Never focusable, never announced. */
.hp{position:absolute;left:-9999px;top:auto;width:1px;height:1px;overflow:hidden}

/* ---------- page 2: about ----------------------------------- */
/* the portrait sits in the corner and the bio runs round it, the same
   float the project entries use — see .pentry__media */
.bio{margin-top:clamp(1.2rem,2.6vw,1.8rem)}
.bio::after{content:"";display:block;clear:both}
.bio p{font-size:.78rem;line-height:1.45;margin-bottom:.8rem}
.bio p:last-child{margin-bottom:0}
.bio__portrait{margin:0 0 clamp(.8rem,2vw,1.1rem)}
.bio__portrait img{width:100%;height:auto;border-radius:var(--r);display:block}
@media (min-width:860px){
  /* Two columns, not a float. A float lets the tail of the text wrap back under
     the photo, and how many lines do that depends entirely on the viewport:
     measured 3 lines at 1280, 2 at 1440 (which stranded a single word), 0 at
     1680 and above. A grid is width-independent, and it matches the territories
     below. Cost: empty ground under the photo at narrower desktop widths —
     the same shape the territories already have. */
  .bio{display:grid;grid-template-columns:13rem 1fr;column-gap:1.5rem;align-items:start}
  .bio::after{display:none}
  .bio--close{display:block}
  .bio__portrait{width:auto;margin:.2rem 0 0}
}

/* photographs: one row, drifting, not clickable and not enlarging */
.logostrip--photos{
  --rows:1;
  --slot-h:4.5rem;      /* photo height — the strip's only size input */
  --slot-min:3.1rem;
  --slot-max:8.1rem;
  --slot-gap:.4rem;
  --fade:2rem;
  background:none;padding:0;
}
.logostrip--photos .logoslot{border-radius:6px;overflow:hidden}
.logostrip--photos .logoslot img{
  width:100%;height:100%;max-width:none;max-height:none;object-fit:cover;
  mix-blend-mode:normal;
}
.logostrip--photos .nav-arrow{
  background:rgba(20,18,15,.5);border-color:rgba(255,255,255,.22);color:var(--paper);
  backdrop-filter:blur(2px);
}
.logostrip--photos .nav-arrow:hover{background:rgba(20,18,15,.72);color:var(--paper)}

/* indented from the main column, ragged left so the right edge runs
   straight — the layout brief asks for the smooth line */
.highlights{
  list-style:none;margin-top:clamp(1rem,2.4vw,1.5rem);
  padding:0 clamp(0rem,3vw,3rem);
}
/* Bulleted, not right-justified: nine items of very different lengths —
   one runs four lines — and a straight right edge left the left edge
   ragged, which is the harder one to read a list against. */
.highlights li{
  font-size:.74rem;line-height:1.45;
  position:relative;padding-left:1.15rem;margin-bottom:.7rem;
}
.highlights li::before{
  content:"";position:absolute;left:0;top:.52em;
  width:.3rem;height:.3rem;border-radius:50%;
  background:var(--maroon-lt);
}
.highlights li:last-child{margin-bottom:0}

/* ---------- page 2: citations and testimonials -------------- */
/* one shared attribution block: name on its own line, role beneath */
.tcite cite,.tlead cite,.tquote cite{
  display:block;font-style:normal;margin-top:.5rem;
  font-size:.58rem;letter-spacing:.05em;line-height:1.35;
}
.tcite cite span,.tlead cite span,.tquote cite span{
  display:block;font-size:.54rem;letter-spacing:.04em;opacity:.6;margin-top:.1rem;
}

/* a short citation closing a territory, set off by the site's pull-quote
   rule so it reads as a different voice from the evidence above it */
.tcite{
  margin-top:clamp(.9rem,2vw,1.2rem);
  border-left:2px solid var(--maroon-lt);padding-left:.9rem;
}
.tcite p{font-size:.74rem;line-height:1.4;font-style:italic}

/* the band. One focal quote, then four in a grid — five equal boxes
   would have nothing to look at first. */
.said{margin-top:clamp(.2rem,1vw,.6rem)}
.said__cap{text-align:center;opacity:.55}
.tlead{
  text-align:center;max-width:34rem;
  margin:clamp(1rem,2.4vw,1.6rem) auto clamp(1.4rem,3vw,2.2rem);
}
.tlead p{
  font-family:var(--font);font-weight:300;font-style:italic;
  font-size:clamp(1.1rem,2.7vw,1.6rem);line-height:1.2;letter-spacing:-.01em;
}
.tlead cite{opacity:.8}
.tgrid{display:grid;gap:clamp(1.1rem,2.6vw,1.7rem) clamp(1.4rem,3.4vw,2.6rem)}
@media (min-width:860px){ .tgrid{grid-template-columns:1fr 1fr} }
.tquote{border-top:var(--hair);padding-top:.8rem}
.tquote p{font-size:.74rem;line-height:1.45;font-style:italic;opacity:.94}

/* ---------- page 2 v2: territories -------------------------- */
.aboutnow{
  margin-top:clamp(1.2rem,2.6vw,1.8rem);max-width:34rem;
}
/* italic, matching the home page's equivalent callout */
.aboutnow p{font-size:.78rem;line-height:1.45;font-style:italic}
/* the strip now leads this section, so the closing paragraph needs
   clearing from it rather than sitting hard underneath */
.bio--close{margin-top:clamp(1rem,2.4vw,1.5rem)}
.bio--close p{max-width:52rem}

.terrs{margin-top:clamp(.4rem,1vw,.8rem)}
/* label and quote left, evidence right — the same shape as the home
   page bars. The five quotes down the left edge are the scannable
   view, which is why nothing here hides behind a click. */
.terr{
  display:grid;gap:.5rem clamp(1.2rem,3vw,2.2rem);
  padding:clamp(1rem,2.2vw,1.5rem) 0;border-top:var(--hair);
}
.terr:first-child{border-top:none;padding-top:0}
@media (min-width:860px){
  .terr{grid-template-columns:minmax(0,10fr) minmax(0,21fr);align-items:start}
}
.terr__label{
  font-family:var(--font);font-weight:500;font-size:.66rem;
  letter-spacing:.09em;text-transform:uppercase;line-height:1.3;
  opacity:.75;
}
.terr__quote{
  font-family:var(--font);font-weight:300;font-style:italic;
  font-size:.92rem;line-height:1.28;letter-spacing:-.008em;
  margin-top:.5rem;
}
.terr__body{font-size:.76rem;line-height:1.45}
.terr__body em{font-style:italic}
.terr__body::after{content:"";display:block;clear:both}
.terr__media{margin:0 0 .6rem;border-radius:var(--r);overflow:hidden;max-width:9rem}
.terr__media img{width:100%;height:auto;display:block}
@media (min-width:860px){
  .terr__media{float:right;width:9rem;margin:.15rem 0 .7rem 1.1rem}
}
.aboutfoot{gap:.6rem;flex-wrap:wrap}
.aboutfoot .btn{margin:0}

/* ---------- page 3: sectors + services ---------------------- */
/* clears the fixed nav on the inner pages */
.page-top{padding-top:calc(var(--nav-h) + clamp(1rem,2.6vw,2rem))}
.page-title{
  font-family:var(--font);font-weight:300;letter-spacing:-.012em;line-height:1.02;
  font-size:clamp(1.5rem,4.4vw,2.6rem);
}
.page-lede{font-size:.82rem;line-height:1.6;margin-top:.7rem;opacity:.95;max-width:42rem}
/* one sentence per line, centred under the title */
.page-lede--split{max-width:none;text-align:center;margin-top:clamp(.8rem,2vw,1.2rem)}
.page-lede--split span{display:block}

/* Sectors: a statement, not a control. Set as a masthead-style block —
   plain words in a fixed grid, hairline rules, nothing that looks
   pressable, because nothing here is. */
.sectors{
  list-style:none;display:grid;grid-template-columns:repeat(5,1fr);
  margin-top:clamp(1rem,2.4vw,1.5rem);
  border-top:var(--hair);border-bottom:var(--hair);
}
.sectors li{
  padding:.75rem .5rem;text-align:center;
  font-size:.66rem;line-height:1.3;letter-spacing:.055em;text-transform:uppercase;
  opacity:.9;border-left:var(--hair);
}
.sectors li:nth-child(5n+1){border-left:none}
.sectors li:nth-child(n+6){border-top:var(--hair)}

/* eight tiles over one shared panel: the page keeps a stable height
   and only the open service's logos are ever in the DOM */
.services{
  display:grid;grid-template-columns:repeat(4,1fr);
  gap:.55rem;margin-top:clamp(1rem,2.4vw,1.5rem);
}
.stile{
  font-family:var(--body);font-size:.7rem;line-height:1.25;letter-spacing:.015em;
  color:var(--paper);background:rgba(243,241,236,.10);
  border:1px solid rgba(243,241,236,.16);border-radius:var(--r);
  padding:.9rem .7rem;min-height:3.5rem;cursor:pointer;text-align:center;
  display:flex;align-items:center;justify-content:center;
  transition:background .18s ease,color .18s ease,border-color .18s ease;
}
.stile:hover{background:rgba(243,241,236,.18)}
.stile:focus-visible{outline:2px solid var(--maroon-lt);outline-offset:2px}
.stile[aria-selected="true"]{
  background:var(--paper);color:var(--ink);border-color:var(--paper);font-weight:600;
}
.spanel{margin-top:clamp(.9rem,2vw,1.3rem)}

/* tagline and marks share one light card, so the whole answer to
   "what is this service" is a single object on the page */
.scard{
  background:rgba(243,241,236,.94);color:var(--ink);
  border-radius:var(--r);border-top:2px solid var(--maroon);
  padding:clamp(.6rem,1.3vw,.85rem) clamp(1rem,2.6vw,1.8rem) clamp(1rem,2.2vw,1.4rem);
}
.scard__line{
  font-size:.8rem;font-style:italic;line-height:1.5;
  max-width:42rem;margin:0 auto;text-align:center;
}
/* the whole line is italic, so an emphasis goes upright to stay emphatic */
.scard__line em{font-style:normal}
.scard__cap{
  margin-top:clamp(1rem,2.2vw,1.4rem);text-align:center;
  color:var(--ink);opacity:.5;
}

/* even columns, every row centred — including a short last row, which a
   plain grid would leave hanging to the left */
.logogrid{
  /* five to a row at the desktop column width: a 13-mark service then
     falls 5/5/3 rather than 4/4/4/1, which leaves one mark stranded */
  --cell:5.6rem;--cell-h:2.1rem;
  display:flex;flex-wrap:wrap;justify-content:center;
  gap:.7rem 0;margin-top:.7rem;
}
.logogrid__cell{
  flex:0 0 var(--cell);height:var(--cell-h);
  display:flex;align-items:center;justify-content:center;
}
.logogrid__cell img{
  max-width:82%;max-height:100%;width:auto;object-fit:contain;
  mix-blend-mode:multiply;-webkit-user-drag:none;user-select:none;
}
.logogrid__cell--txt{
  font-size:.52rem;line-height:1.2;color:#6b6659;text-align:center;padding:0 .35rem;
}
.spanel .btn-row{margin-top:clamp(1rem,2.2vw,1.4rem)}

/* ---------- page 3: selected projects ----------------------- */
.plist{margin-top:clamp(1.4rem,3vw,2.2rem)}
.pentry{
  padding-bottom:clamp(1.3rem,2.8vw,2rem);margin-bottom:clamp(1.3rem,2.8vw,2rem);
  border-bottom:var(--hair);
}
.pentry__title{
  font-family:var(--font);font-weight:300;letter-spacing:-.012em;line-height:1.1;
  font-size:1.15rem;margin-bottom:.5rem;
}
.pentry__body p{font-size:.76rem;line-height:1.45;margin-bottom:.65rem}
.pentry__body p:last-of-type{margin-bottom:0}

/* small media in one corner with the copy wrapping round and under it,
   side alternating down the page. A float rather than a grid column:
   in a column, a long entry leaves a tall empty gap beside the image.
   --pmw is the only size input. */
.pentry__cols{--pmw:15rem}
.pentry__cols::after{content:"";display:block;clear:both}
.pentry__media{margin:0;border-radius:var(--r);overflow:hidden}
@media (min-width:860px){
  .pentry__media{float:left;width:var(--pmw);margin:.15rem 1.5rem .8rem 0}
  .pentry--flip .pentry__media{float:right;margin:.15rem 0 .8rem 1.5rem}
}
@media (max-width:859px){
  .pentry__media{margin-bottom:clamp(.8rem,2vw,1.1rem)}
}
.pentry__media img{width:100%;height:auto;display:block}
.pentry__media--video{aspect-ratio:16/9;background:rgba(0,0,0,.22)}
.pentry__media--video video{width:100%;height:100%;object-fit:cover;display:block}
/* one class for every image credit on the site — Projects entries and
   the About territory photo both use it. Sized to hold a gallery name
   on a single line, and set tight to the image it belongs to. */
.pentry__credit{
  font-size:.42rem;letter-spacing:.04em;text-transform:uppercase;
  line-height:1.3;opacity:.45;padding:.18rem .05rem 0;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}

/* client marks on the dark ground. The source PNGs are greyscale on
   white: inverting them and screen-blending drops the white away, so a
   long list does not need a paper panel behind every entry. */
.plogos{clear:both;display:flex;flex-wrap:wrap;align-items:center;gap:.5rem 1rem;margin-top:.9rem}
.plogos__slot{height:1.4rem;display:inline-flex;align-items:center}
.plogos__slot img{
  height:100%;width:auto;max-width:5rem;object-fit:contain;
  filter:invert(1) contrast(1.05);mix-blend-mode:screen;opacity:.82;
  -webkit-user-drag:none;user-select:none;
}
/* fallback: marks on paper, as everywhere else on the site */
.plogos--panel{background:rgba(243,241,236,.94);border-radius:6px;padding:.5rem .7rem}
.plogos--panel .plogos__slot img{filter:none;mix-blend-mode:multiply;opacity:1}

/* file marks: each one wears its own first page. Covers are title
   pages, so the box crops from the top — the masthead is the part
   worth showing. */
.filerow{
  clear:both;display:flex;flex-wrap:wrap;align-items:flex-start;
  gap:.65rem .45rem;margin-top:clamp(1rem,2.2vw,1.3rem);
}
/* --fw is set so that eight marks — Colonel Blood's full set — sit on
   one row at the desktop column width. Every file row uses it. */
.fcard{
  --fw:3.5rem;
  display:flex;flex-direction:column;gap:.3rem;width:var(--fw);
  font-family:var(--body);font-size:.5rem;letter-spacing:.01em;line-height:1.3;
  color:var(--paper);text-align:left;text-decoration:none;
  background:none;border:none;padding:0;cursor:pointer;
}
.fcard__face{
  position:relative;display:block;width:100%;aspect-ratio:4/3;
  border-radius:4px;overflow:hidden;background:#EDEBE6;
  box-shadow:0 2px 6px rgba(0,0,0,.32);
  transition:transform .16s ease,box-shadow .16s ease;
}
.fcard:hover .fcard__face{transform:translateY(-2px);box-shadow:0 6px 14px rgba(0,0,0,.42)}
.fcard:focus-visible .fcard__face{outline:2px solid var(--maroon-lt);outline-offset:2px}
.fcard__cover{width:100%;height:100%;object-fit:cover;object-position:top center;display:block}
.fcard__blank{width:62%;height:auto;margin:14% auto 0;display:block;opacity:.55}
.fcard__badge{
  position:absolute;right:.12rem;bottom:.12rem;
  font-size:.34rem;font-weight:700;letter-spacing:.03em;color:#fff;
  padding:.05rem .18rem;border-radius:2px;line-height:1.35;
}
.fcard__lock{
  position:absolute;left:.12rem;bottom:.12rem;width:.52rem;height:auto;
}
.fcard.is-locked .fcard__face{opacity:.72}
.fcard.is-locked:hover .fcard__face{opacity:1}
.fcard__label{opacity:.85}
.fcard:hover .fcard__label{opacity:1}

/* the brief run: two columns of short entries */
.plist__more{margin:clamp(.4rem,1.4vw,1rem) 0 .9rem}
.pbriefs{display:grid;gap:clamp(1rem,2.4vw,1.6rem) clamp(1.4rem,3.4vw,2.6rem)}
@media (min-width:860px){ .pbriefs{grid-template-columns:1fr 1fr} }
.pbrief__title{
  font-family:var(--font);font-weight:500;font-size:.8rem;letter-spacing:-.004em;
  margin-bottom:.25rem;
}
.pbrief__text{font-size:.72rem;line-height:1.45;opacity:.92}

/* ---------- page 4: downloads ------------------------------- */
.dnotes{
  margin-top:clamp(1.2rem,2.6vw,1.8rem);
  border-left:2px solid var(--maroon-lt);padding-left:1rem;
  max-width:44rem;
}
.dnotes p{font-size:.7rem;line-height:1.45;opacity:.9}
.dnotes p + p{margin-top:.5rem}
.dnotes strong{font-weight:600;opacity:1}

.dlist{margin-top:clamp(1.2rem,2.6vw,1.8rem)}
.dgroup{padding:clamp(.9rem,2vw,1.3rem) 0;border-bottom:var(--hair)}
.dgroup:last-child{border-bottom:none}
.dgroup__title{
  font-family:var(--font);font-weight:300;letter-spacing:-.008em;
  font-size:1rem;line-height:1.15;
}
/* the company intro leads the list, so it carries the accent rule */
.dgroup--lead{border-top:2px solid var(--maroon);padding-top:1rem}
.dgroup .filerow{margin-top:.8rem}

/* the featured clip: square, because a CT scan is */
.dfeature{
  display:grid;gap:clamp(.9rem,2.2vw,1.5rem);
  padding-bottom:clamp(1.2rem,2.6vw,1.8rem);margin-bottom:clamp(.4rem,1vw,.8rem);
  border-bottom:var(--hair);
}
@media (min-width:860px){
  .dfeature{grid-template-columns:13rem minmax(0,1fr);align-items:start}
}
.dfeature__media{
  margin:0;border-radius:var(--r);overflow:hidden;
  aspect-ratio:1/1;background:rgba(0,0,0,.28);max-width:13rem;
}
.dfeature__media video{width:100%;height:100%;object-fit:cover;display:block}
.dfeature__text{font-size:.76rem;line-height:1.45;margin-top:.5rem}

.dband .filerow{margin-top:clamp(1rem,2.2vw,1.4rem)}

/* ---------- the locked-file notice -------------------------- */
.lockdlg{
  /* the reset's *{margin:0} removes the UA margin:auto that centres a
     modal dialog, so put it back explicitly */
  margin:auto;
  border:none;border-radius:var(--r);padding:clamp(1.3rem,3vw,2rem);
  max-width:24rem;width:calc(100% - 2rem);
  background:var(--paper);color:var(--ink);
  box-shadow:0 24px 60px rgba(0,0,0,.45);
}
.lockdlg::backdrop{background:rgba(20,18,15,.62);backdrop-filter:blur(2px)}
.lockdlg__h{
  font-family:var(--font);font-weight:300;font-size:1.1rem;letter-spacing:-.01em;
  margin-bottom:.6rem;
}
.lockdlg__p{font-size:.72rem;line-height:1.6;margin-bottom:.5rem}
.lockdlg__p a{color:var(--maroon);border-bottom:1px solid rgba(136,0,8,.35);text-decoration:none}
.lockdlg .btn{color:var(--ink);border-color:rgba(43,40,35,.3);margin:0 auto}
.lockdlg .btn:hover{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.lockdlg .btn-row{margin-top:1.1rem}

/* ---------- responsive -------------------------------------- */
@media (max-width:760px){
  html{font-size:118%}
  /* logo left and larger, links spread edge to edge — the centred stack
     read as a collapsed desktop header rather than a designed one, and
     left-aligning also matches the desktop arrangement */
  .nav__inner{flex-wrap:wrap;gap:.45rem;padding:.6rem var(--gutter);min-height:0;justify-content:flex-start}
  .nav__brand{width:100%;justify-content:flex-start}
  .nav__brand img{height:54px}
  .nav__links{width:100%;margin-left:0;justify-content:space-between;gap:.2rem;font-size:.62rem}
  .hero img{height:300px}
  .hero__line{letter-spacing:.08em;word-spacing:.24em}
  .opener{padding-top:calc(var(--nav-h) + .8rem)}
  /* keep the portrait BESIDE the text, not stacked under it. The
     headline is one word per line already, so a narrow column costs
     it nothing. */
  .opener__grid{grid-template-columns:1fr minmax(0,8rem);gap:1rem}
  .proposition{font-size:1.4rem}
  .opener__sub{font-size:.92rem}
  .portrait-sm{max-width:none}   /* sized by its grid column now */
  .opener__foot{grid-template-columns:1fr auto;gap:.8rem}   /* signature stays beside the quote */
  .signature{justify-content:flex-end;align-items:flex-end;padding:0}
  .signature img{max-height:2.4rem;max-width:5.4rem}
  .proof{grid-template-columns:repeat(2,1fr);gap:1.1rem}
  .proof__n{font-size:1.3rem}
  /* ---- carousel: one card at a time, NOT centred ------------------
     The desktop track centres its cards with
         padding: 10px calc((100% - var(--card-w))/2)
     iOS Safari mishandles horizontal padding on a scrolling flex
     container (long-standing WebKit bug), so every snap position shifts
     and the active card lands ~150px left of centre — title cut
     mid-word, dead space to its right. Chromium computes it correctly,
     which is why this survived desktop testing.
     The fix deletes the arithmetic rather than correcting it: full-width
     cards, snap to START, no track padding. The shrunken peek cards were
     284px of unreadable thumbnail at this width anyway.
     Card is 100vw: a percentage flex-basis collapses to zero inside this
     scroll container. Radius goes to 0 because a rounded corner against
     the screen edge reads as a mistake. */
  /* .carousel is display:flex and .track is a flex item with
     overflow-x:auto. Chromium resolves that item to the container
     width; iOS SAFARI COLLAPSES IT TO ZERO once the side padding that
     was propping it open is removed. A 0-width scrollport clips every
     card, so the carousel renders as blank space of exactly card
     height -- with the video inside playing, unseen. It also breaks
     scrollTo(), which subtracts track.clientWidth/2 and so lands half
     a card off every time. Block layout + an explicit width removes
     the dependency on flex sizing entirely. Do not restore flex here
     without checking track.clientWidth on a real iPhone. */
  .carousel{--card-w:100vw;--standby:1;display:block}
  .track{padding:10px 0;gap:0;width:100%;min-width:0}
  .card{scroll-snap-align:start;border-radius:0}
  /* NO transform and NO filter on the cards, and this is why the home
     carousel videos were dead on iOS while the Projects page played
     fine: an inline <video> inside a transformed or filtered ancestor
     does not composite in iOS Safari — you get the poster and nothing
     else. .card carries transform:scale() and filter:grayscale(); the
     Projects page media carries neither. Setting --standby:1 was not
     enough, because scale(1) is still a transform.
     With one card per screen there is no inactive state to signal. */
  .card,.card.active{transform:none;filter:none;opacity:1;transition:box-shadow .55s}
  .carousel .nav-arrow{top:32%;width:1.8rem;height:1.8rem}
  .card__title{font-size:.9rem;margin-bottom:.3rem}
  .card__overlay{padding:10px 12px}
  .card__blurb{
    font-size:.62rem;line-height:1.35;
    display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;
  }
  /* file marks move to the TOP of the card on a phone: at full-bleed
     width the overlay text runs the whole card, and bottom-right put
     the icons straight on top of the blurb's last line */
  .card__files{gap:.35rem;right:10px;top:10px;bottom:auto;max-width:46%}
  .filemark{width:1.05rem}
  .logostrip{--slot-h:1.7rem;--slot-min:2.1rem;--slot-max:5.6rem;--slot-gap:1.05rem;--fade:1.6rem;padding:.4rem 0}
  /* the rotating quote sat as italic centred text directly against
     italic body text, with nothing to separate them */
  .quotes{border-top:var(--hair);border-bottom:var(--hair);padding:1rem 0;margin-top:1.4rem}
  .quotes--lead{border:none;padding:0}
  .contact__grid{grid-template-columns:1fr}
  /* the map is decorative and was pushing the form off-screen.
     NOTE: .map itself has height:clamp(160px,15vw,220px) — capping the
     IMAGE instead left a gap between it and the bottom of the box. */
  .map{height:7.5rem}
  /* label on its own line; bar and value side by side, as on desktop */
  .bar{grid-template-columns:1fr auto;gap:.18rem .7rem;align-items:center}
  .bar__label{grid-column:1 / -1;text-align:left}
  .bar__track{grid-column:1;height:.78rem}
  .bar__val{grid-column:2;min-width:0;white-space:nowrap;font-size:.78rem}
  .services{grid-template-columns:repeat(2,1fr)}
  .stile{font-size:.64rem;padding:.75rem .5rem;min-height:3rem}
  .scard{padding:.6rem .8rem 1rem}
  .scard__line{font-size:.72rem}
  .logogrid{--cell:5rem;--cell-h:1.8rem}
  .sectors{grid-template-columns:repeat(2,1fr)}
  .sectors li{font-size:.6rem;padding:.6rem .4rem;letter-spacing:.045em}
  .sectors li:nth-child(5n+1){border-left:var(--hair)}
  .sectors li:nth-child(odd){border-left:none}
  .sectors li:nth-child(n+3){border-top:var(--hair)}
  .pentry__title{font-size:1.02rem}
  .plogos__slot{height:1.25rem}
  .plogos__slot img{max-width:4.2rem}
  .fcard{--fw:3.2rem;font-size:.46rem}
  .dgroup__title{font-size:.9rem}
  .dfeature__media{max-width:none}
  /* --hair is rgba(255,255,255,.13) — all but invisible on #3A3A3A,
     so the five territories ran together as one block of text */
  .terr{border-top:1px solid rgba(255,255,255,.28);padding:1.5rem 0 1.3rem}
  .terr__label{color:var(--maroon-lt);opacity:1}
  .terr__quote{font-size:.84rem}
  .tlead p{font-size:1rem}
  .terr__label{font-size:.6rem}
  .logostrip--photos{--slot-h:3.8rem;--slot-max:6.7rem;--fade:1.2rem}
  .highlights li{font-size:.7rem;margin-bottom:.6rem}
}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  .nav{transition:none}
  .track{scroll-behavior:auto}
  .card__media--tint{animation:none}
  .card,.card__overlay,.bar__fill,.quote{transition:none}
}
