/**
 * Intervalens Cases — design system (Editorial-Minimal + 3 grafts)
 *
 * Namespace: .ivc-   ·   Tokens: --ivc-*   (derive from --intervalens-color-*)
 * Enqueued as `intervalens-cases-styles`. Montserrat is self-hosted by this
 * stylesheet via the @font-face below (font-display:swap, variable 100–900);
 * the fallback stack covers FOUT.
 *
 * House technique to beat an arbitrary WP theme: doubled-class selectors
 * (.ivc-x.ivc-x) raise specificity above theme resets without relying on them;
 * !important is used only where a theme is known to fight us (color/background/
 * layout on the card surfaces). Everything is scoped under .ivc-.
 *
 * @package Intervalens_Manager
 */

/* ============================================================== FONT ====== */
@font-face{font-family:'Montserrat';font-style:normal;font-weight:100 900;font-display:swap;src:url('../fonts/montserrat-latin-var.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;}

/* ============================================================= TOKENS ===== */
:root{
  --ivc-ink:#3F3F3F; /* theme charcoal */
  --ivc-ink-light:#6b6b6b; /* ~5:1 on #f8f8f8 — AA for small secondary labels */
  --ivc-hair:rgba(0,0,0,.1);
  --ivc-hair-soft:rgba(0,0,0,.08);
  --ivc-crimson: var(--intervalens-color-primary, #BC323F);
  --ivc-crimson-deep: var(--intervalens-color-secondary, #8A242E);
  --ivc-accent: var(--intervalens-color-accent, #D45A65);
  --ivc-badge-bg: var(--intervalens-color-badge-bg, #F2E0E2);
  --ivc-canvas:#fff;
  --ivc-canvas-off:#f8f8f8; /* theme light-background */
  --ivc-wine:#4A0D16;       /* theme wine — dark hero overlay */
  --ivc-white-80:var(--intervalens-color-white-80,rgba(255,255,255,.8));
  --ivc-white-40:var(--intervalens-color-white-40,rgba(255,255,255,.4));

  --ivc-font:"Montserrat",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;

  --ivc-fs-display:clamp(2.5rem,5.5vw,5.25rem);
  --ivc-fs-h2:clamp(1.75rem,3vw,2.75rem);
  --ivc-fs-metric:clamp(2.75rem,6vw,5rem);
  --ivc-fs-cardttl:clamp(1.25rem,1.6vw,1.6rem);
  --ivc-fs-body:1.0625rem;
  --ivc-fs-label:.6875rem;

  --ivc-air-lg:clamp(72px,10vw,160px);
  --ivc-air-md:clamp(40px,6vw,96px);
  --ivc-grid:1320px;
  --ivc-wide:1400px; /* theme content width */
  --ivc-round:var(--wp--custom--footer--border-radius-lg,clamp(40px,6vw,96px));     /* match the theme footer radius */
  --ivc-round-lap:var(--wp--custom--footer--border-radius-lg,clamp(40px,6vw,96px)); /* match the theme footer pull-up */
  --ivc-prose:68ch;
  --ivc-pad-inline:clamp(20px,6vw,80px);

  /* THE glass recipe — frosted caption plate, used ONCE per surface */
  --ivc-glass-bg:rgba(255,255,255,.72);
  --ivc-glass-blur:saturate(120%) blur(14px);
  --ivc-glass-border:1px solid rgba(255,255,255,.55);
  --ivc-glass-shadow:0 10px 30px -8px rgba(138,36,46,.18), 0 1px 0 rgba(255,255,255,.6) inset;

  --ivc-ease:cubic-bezier(.22,.61,.36,1);
}

/* ============================================== SCOPED RESET / BASELINE === */
/* Tame theme inheritance only inside our roots; never touch the global page. */
.ivc-root,
.ivc-root *,
.ivc-root *::before,
.ivc-root *::after{box-sizing:border-box;}
.ivc-root{
  font-family:var(--ivc-font);
  color:var(--ivc-ink);
  line-height:1.5;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}
.ivc-root img,
.ivc-root video{max-width:100%;display:block;}

/* ============================================= UNDERSCORE MOTIF (core) ==== */
.ivc-kicker.ivc-kicker{
  display:inline-block;
  font:600 var(--ivc-fs-label)/1 var(--ivc-font);
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--ivc-crimson)!important;
  padding-bottom:.5em;
  border-bottom:1px solid var(--ivc-crimson)!important;
  margin:0;
}
/* Smallest kicker instances bump to the deeper crimson for AA (per §E.3). */
.ivc-kicker--sm{color:var(--ivc-crimson-deep)!important;border-bottom-color:var(--ivc-crimson-deep)!important;}

/* ===================================================== GRID (cards) ======= */
.ivc-cases-grid.ivc-cases-grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(300px,1fr));
  gap:clamp(24px,3vw,48px);
  max-width:var(--ivc-grid);
  margin-inline:auto;
  padding-inline:var(--ivc-pad-inline);
  list-style:none;
}
.ivc-cases-grid.ivc-cases-grid>*{margin:0;padding:0;}
/* Honour an explicit column count from the shortcode at ≥960px. */
@media (min-width:960px){
  .ivc-cases-grid[data-columns="2"]{grid-template-columns:repeat(2,1fr);}
  .ivc-cases-grid[data-columns="3"]{grid-template-columns:repeat(3,1fr);}
  .ivc-cases-grid[data-columns="4"]{grid-template-columns:repeat(4,1fr);}
}
@media (min-width:600px) and (max-width:959px){
  .ivc-cases-grid.ivc-cases-grid{grid-template-columns:repeat(2,1fr);}
}
@media (max-width:599px){
  .ivc-cases-grid.ivc-cases-grid{grid-template-columns:1fr;}
}

/* ===================================================== CASE CARD ========== */
.ivc-case-card.ivc-case-card{
  position:relative;
  display:block;
  color:inherit;
  text-decoration:none;
  background:transparent;
  border:0;
  box-shadow:none;
}
/* Reveal: a clean fade + rise as each card scrolls in (no crimson lines). */
.ivc-reveal{
  opacity:0;transform:translateY(14px);
  transition:opacity .6s var(--ivc-ease),transform .6s var(--ivc-ease);
}
.ivc-revealed,
.no-js .ivc-reveal{opacity:1;transform:none;}

/* (1) Cover — clean full-bleed image, soft-rounded, hairline edge (no matte). */
.ivc-case-card.ivc-case-card .ivc-cover{
  position:relative;
  display:block;width:100%;
  aspect-ratio:4/5;
  border-radius:10px;
  overflow:hidden;
  background:var(--ivc-canvas-off);
  box-shadow:0 0 0 1px var(--ivc-hair-soft) inset;
}
.ivc-case-card.ivc-case-card .ivc-cover>img,
.ivc-case-card.ivc-case-card .ivc-cover>video,
.ivc-case-card.ivc-case-card .ivc-cover>.ph{display:block;}
.ivc-case-card.ivc-case-card .ivc-cover>img,
.ivc-case-card.ivc-case-card .ivc-cover>video{
  width:100%;height:100%;
  object-fit:cover;
  transition:transform .5s var(--ivc-ease);
  background:var(--ivc-canvas-off);
}
.ivc-case-card.ivc-case-card:hover .ivc-cover>img,
.ivc-case-card.ivc-case-card:hover .ivc-cover>video{transform:scale(1.04);}

/* Branded "no cover" placeholder — an intentional case mark, never a headshot. */
.ivc-case-card.ivc-case-card .ivc-cover>.ivc-cover-ph{
  display:flex;align-items:center;justify-content:center;
  width:100%;height:100%;
  background:var(--ivc-canvas-off);
  color:var(--ivc-crimson);
}
.ivc-cover-ph .ivc-cover-ph-mark{
  width:clamp(40px,22%,72px);height:auto;opacity:.42;
}

/* video glyph badge */
.ivc-video-badge{
  position:absolute;top:18px;right:18px;z-index:4;
  display:inline-flex;align-items:center;justify-content:center;
  width:30px;height:30px;border-radius:999px;
  background:var(--ivc-glass-bg);
  -webkit-backdrop-filter:var(--ivc-glass-blur);backdrop-filter:var(--ivc-glass-blur);
  border:var(--ivc-glass-border);
  box-shadow:0 4px 12px -4px rgba(138,36,46,.25);
  color:var(--ivc-crimson-deep);
}
.ivc-video-badge svg{width:12px;height:12px;display:block;}
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  .ivc-video-badge{background:rgba(255,255,255,.92);}
}

/* (2) Glass case panel — frosted, structured: client + "Case →" / headline /
   expertise + year. Light frosted glass with dark ink reads over light OR dark
   covers (the image shows through the blur), so it stays on the Intervalens
   light palette without forcing dark imagery. */
.ivc-case-card.ivc-case-card .ivc-panel{
  position:absolute;left:14px;right:14px;bottom:14px;z-index:2;
  display:flex;flex-direction:column;gap:.7rem;
  padding:15px 17px;border-radius:12px;overflow:hidden;
  background:rgba(255,255,255,.66)!important;
  -webkit-backdrop-filter:saturate(125%) blur(20px);backdrop-filter:saturate(125%) blur(20px);
  border:1px solid rgba(255,255,255,.55)!important;
  box-shadow:0 20px 50px -26px rgba(20,10,12,.7), 0 1px 0 rgba(255,255,255,.7) inset!important;
  transition:transform .3s var(--ivc-ease),background-color .3s var(--ivc-ease),box-shadow .3s var(--ivc-ease);
}
.ivc-case-card.ivc-case-card:hover .ivc-panel{
  transform:translateY(-3px);
  background:rgba(255,255,255,.74)!important;
  box-shadow:0 26px 56px -26px rgba(20,10,12,.72), 0 1px 0 rgba(255,255,255,.8) inset!important;
}
/* header — client + "Case →", with a hairline divider beneath */
.ivc-panel-head{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding-bottom:.6rem;border-bottom:1px solid rgba(63,63,63,.16);
}
.ivc-panel-client{
  font:600 .9rem/1.25 var(--ivc-font);color:var(--ivc-ink)!important;margin:0;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.ivc-panel-client--anon{font-weight:500;font-style:italic;color:var(--ivc-ink-light)!important;}
.ivc-panel-cta{
  display:inline-flex;align-items:center;gap:.4em;flex:0 0 auto;
  font:700 var(--ivc-fs-label)/1 var(--ivc-font);
  letter-spacing:.1em;text-transform:uppercase;
  color:var(--ivc-crimson-deep)!important;white-space:nowrap;
}
.ivc-panel-cta svg{width:14px;height:14px;display:block;transition:transform .25s var(--ivc-ease);}
.ivc-case-card.ivc-case-card:hover .ivc-panel-cta svg{transform:translateX(3px);}
/* headline */
.ivc-panel-title{
  margin:0;
  font:600 var(--ivc-fs-cardttl)/1.18 var(--ivc-font);
  color:var(--ivc-ink)!important;letter-spacing:-.01em;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
/* footer — expertise area + year */
.ivc-panel-foot{
  display:flex;align-items:baseline;justify-content:space-between;gap:12px;
}
.ivc-panel-area{
  font:700 var(--ivc-fs-label)/1.2 var(--ivc-font);
  letter-spacing:.12em;text-transform:uppercase;
  color:var(--ivc-crimson-deep)!important;
}
.ivc-panel-year{
  font:400 .8rem/1 var(--ivc-font);color:var(--ivc-ink-light)!important;
  font-variant-numeric:tabular-nums;white-space:nowrap;
}
.ivc-case-card.ivc-case-card:focus-visible{outline:2px solid var(--ivc-crimson);outline-offset:3px;}

/* No backdrop-filter support → make the panel opaque enough to stay readable. */
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  .ivc-case-card .ivc-panel{background:rgba(255,255,255,.92)!important;}
}

/* ===================================================== SINGLE PAGE ======== */
/* Rendered INSIDE the block theme: full-bleed dark wine hero (the glass header
   overlays it) -> light #f8f8f8 narrative -> #fff evidence panel -> consultants/
   closer that laps the footer via the theme round-bottom motif. Scoped to .ivc-
   and the single-case body class; no other page is touched. */

/* width tiers + shell */
.ivc-fullbleed{width:100vw;margin-inline:calc(50% - 50vw);}
.ivc-wide{max-width:var(--ivc-wide);margin-inline:auto;padding-inline:var(--ivc-pad-inline);}
.ivc-single.ivc-single{max-width:none;margin:0;padding:0;background:transparent;color:var(--ivc-ink);}
.ivc-single.ivc-root{overflow:visible;}

/* round-bottom: our radius matches the theme footer token; the theme's
   is-style-round-bottom class is also applied for parity + the global footer lap. */
.ivc-roundbottom{border-end-start-radius:var(--ivc-round);border-end-end-radius:var(--ivc-round);position:relative;z-index:1;}

/* Replaces the old header background hack. The dark hero is the first node and
   reaches y=0 under the fixed overlay header; main is the footer's direct sibling
   so the closer curve laps the footer regardless of nesting. */
body.single-intervalens_case main.wp-block-group,
body.single-intervalens_case .wp-block-post-content{padding-top:0;padding-bottom:0;margin-top:0;overflow:visible;}
/* kill the block-gap margin the theme puts above the first in-flow block so the
   dark hero reaches y=0 (no light strip above it under the fixed header) */
body.single-intervalens_case .wp-site-blocks > main.wp-block-group{margin-block-start:0;}
body.single-intervalens_case main.wp-block-group{position:relative;z-index:1;margin-bottom:calc(-1 * var(--ivc-round-lap));}

/* (1) dark hero — neutral charcoal (a la the --ivc-ink metrics text), NOT wine-red. A heavily
   transparent dark veil + vignette frames the title and lets cover media read naturally.
   ponytail: tune the charcoal + vignette alphas visually. */
.ivc-hero{
  position:relative;overflow:hidden;
  background:#3d3d3d;
  min-height:clamp(460px,60vh,620px);
  display:flex;align-items:flex-end;
  padding-block:clamp(96px,12vh,140px) clamp(40px,6vw,72px);
}
.ivc-hero-media{position:absolute;inset:0;z-index:0;}
.ivc-hero-media img,.ivc-hero-media video{width:100%;height:100%;object-fit:cover;}
/* Neutral dark veil: radial vignette + a bottom anchor for the white title. No red tint. */
.ivc-hero-scrim{position:absolute;inset:0;z-index:1;pointer-events:none;
  background:
    radial-gradient(120% 130% at 50% 34%,transparent 46%,rgba(0,0,0,.5) 100%),
    linear-gradient(to top,rgba(0,0,0,.5) 0%,transparent 42%);}
/* Over a cover, same neutral veil but a touch more transparent so the media reads through. */
.ivc-hero.ivc-has-cover .ivc-hero-scrim{
  background:
    radial-gradient(120% 130% at 50% 34%,transparent 52%,rgba(0,0,0,.45) 100%),
    linear-gradient(to top,rgba(0,0,0,.55) 0%,transparent 46%);}
/* Always-on gridline texture over the hero, regardless of cover content (1:1 designer asset). */
.ivc-hero-grid{position:absolute;inset:0;z-index:1;pointer-events:none;
  background:url("../images/gridlines.svg") center/cover no-repeat;}
.ivc-hero-inner{position:relative;z-index:2;width:100%;}
.ivc-kicker--ondark.ivc-kicker--ondark{color:var(--ivc-white-80)!important;border-bottom-color:var(--ivc-accent)!important;}
.ivc-hero-inner .ivc-title.ivc-title{
  margin:clamp(18px,2.4vw,28px) 0 0;color:#fff!important;max-width:20ch;text-wrap:balance;
  font:700 clamp(2.375rem,5.3vw,5.125rem)/1.02 var(--ivc-font);letter-spacing:-.02em;
}
.ivc-meta-line{display:flex;flex-wrap:wrap;align-items:center;gap:.6em;font:400 .9375rem/1.5 var(--ivc-font);}
.ivc-meta-line .ivc-dot{width:3px;height:3px;border-radius:999px;}
.ivc-meta-line .ivc-anon{font-style:italic;}
.ivc-meta-line--ondark{margin-top:clamp(18px,2vw,26px);color:var(--ivc-white-80);font-variant-numeric:tabular-nums;}
.ivc-meta-line--ondark .ivc-dot{background:var(--ivc-white-40);}
.ivc-meta-line--ondark strong{color:#fff;font-weight:600;}

/* (2) light narrative field — lifts under the hero curve */
.ivc-main{
  background:var(--ivc-canvas-off);
  margin-top:calc(-1 * var(--ivc-round));
  padding-top:calc(var(--ivc-round) + clamp(48px,7vw,96px));
  padding-bottom:var(--wp--preset--spacing--80,4rem);
}
/* continuation of the narrative AFTER the full-bleed What-if band — no hero-curve lift */
.ivc-main--cont{margin-top:0;padding-top:var(--wp--preset--spacing--70,3rem);}
/* Back link: right-aligned, tucked closer under the hero, with ONE continuous underline.
   The link is inline-flex, so the theme's text-decoration only underlines the text node and skips
   the arrow flex-item (leaving a gap). Kill that and draw a border-bottom across the whole element. */
.ivc-main .ivc-return{display:flex;width:max-content;margin-left:auto;
  align-items:center;gap:.4em;
  margin-top:calc(-1 * clamp(16px,2.5vw,40px));margin-bottom:clamp(24px,3.5vw,44px);
  font:600 var(--ivc-fs-label)/1 var(--ivc-font);letter-spacing:.14em;text-transform:uppercase;
  color:var(--ivc-crimson-deep);text-decoration:none!important;
  border-bottom:1px solid currentColor;padding-bottom:.4em;transition:color .2s var(--ivc-ease);}
.ivc-main .ivc-return *{text-decoration:none!important;}
.ivc-return:hover{color:var(--ivc-crimson);}
.ivc-return:focus-visible{outline:2px solid var(--ivc-crimson);outline-offset:3px;}
.ivc-movement{display:grid;grid-template-columns:minmax(150px,200px) minmax(0,66ch);
  gap:clamp(32px,5vw,80px);justify-content:start;padding-block:var(--wp--preset--spacing--70,3rem);}
.ivc-rail{position:sticky;top:120px;align-self:start;height:max-content;}
.ivc-rail-num{display:block;font:600 .75rem/1 var(--ivc-font);letter-spacing:.14em;
  color:var(--ivc-ink-light);font-variant-numeric:tabular-nums;margin-bottom:.7em;}
.ivc-rail-label{display:block;width:max-content;max-width:100%;
  font:600 var(--ivc-fs-label)/1 var(--ivc-font);letter-spacing:.14em;text-transform:uppercase;
  color:var(--ivc-crimson-deep);padding-bottom:.5em;border-bottom:1px solid var(--ivc-crimson);}
.ivc-reading{font:400 var(--ivc-fs-body)/1.65 var(--ivc-font);color:var(--ivc-ink);}
.ivc-reading h2{margin:0 0 .6em;font:600 var(--ivc-fs-h2)/1.1 var(--ivc-font);letter-spacing:-.01em;color:var(--ivc-ink);}
.ivc-reading p{margin:0 0 1em;}
.ivc-reading p:last-child{margin-bottom:0;}
.ivc-reading a{color:var(--ivc-crimson-deep);text-decoration:underline;text-underline-offset:.15em;}
.ivc-reading ul,.ivc-reading ol{margin:0 0 1em;padding-left:1.3em;}
.ivc-reading li{margin-bottom:.4em;}
/* (2b) What-if → its OWN full-bleed dark band (NO is-style-light-background) so the adaptive
   header flips to light/glass over it on EVERY screen. A wine→charcoal field with an off-centre
   crimson glow + faint gridlines sits BEHIND a frosted-glass card holding the question. */
.ivc-whatif{
  position:relative;
  background:
    radial-gradient(60% 95% at 80% 12%,rgba(170,40,55,.45) 0%,transparent 58%),
    radial-gradient(60% 90% at 8% 102%,rgba(74,13,22,.6) 0%,transparent 55%),
    linear-gradient(165deg,#2a0f15 0%,#1b1014 55%,#140d10 100%);
  padding-block:clamp(64px,9vw,128px);
}
.ivc-whatif::before{content:"";position:absolute;inset:0;pointer-events:none;
  background:url("../images/gridlines.svg") center/cover no-repeat;opacity:.5;}
.ivc-whatif .ivc-wide{position:relative;z-index:1;}
.ivc-whatif .ivc-movement{padding-block:0;}
.ivc-whatif .ivc-rail-num{color:var(--ivc-white-40);}
.ivc-whatif .ivc-rail-label{color:var(--ivc-white-80);border-bottom-color:var(--ivc-accent);}
/* frosted glass card holding the question — premium glassmorphism */
.ivc-whatif .ivc-reading{
  color:#fff;border-radius:16px;
  display:flex;flex-direction:column;justify-content:center;
  padding:clamp(32px,4.5vw,56px) clamp(28px,4.5vw,56px);
  background:linear-gradient(155deg,rgba(255,255,255,.12) 0%,rgba(255,255,255,.045) 100%);
  -webkit-backdrop-filter:blur(22px) saturate(135%);backdrop-filter:blur(22px) saturate(135%);
  border:1px solid rgba(255,255,255,.16);
  box-shadow:0 40px 90px -42px rgba(0,0,0,.7),0 1px 0 rgba(255,255,255,.22) inset,0 -1px 0 rgba(0,0,0,.22) inset;
}
.ivc-whatif .ivc-reading h2{font-style:italic;color:#fff;}
.ivc-whatif .ivc-reading a{color:var(--ivc-accent);text-decoration-color:var(--ivc-accent);}
.ivc-whatif .ivc-reading > :last-child{margin-bottom:0!important;} /* kill theme flow-margin → prose centres */
/* leading "What if" — bold + a soft crimson glow (NO underline); scrambled on scroll-in by cases.js.
   Ghost (real text, hidden) reserves the EXACT box; live layer is OUT OF FLOW (absolute) so its
   per-frame glyph-width changes can never shift the trailing sentence. */
.ivc-wi-scramble{position:relative;display:inline-block;font-weight:700;}
.ivc-wi-scramble__ghost{visibility:hidden;}
.ivc-wi-scramble__live{position:absolute;left:0;top:0;white-space:nowrap;
  text-shadow:0 0 22px rgba(212,90,101,.55);}
@media(max-width:900px){
  .ivc-movement{grid-template-columns:1fr;gap:var(--wp--preset--spacing--40,1rem);}
  .ivc-rail{position:static;}
}

/* (3) evidence/OUTCOMES — DARK atmospheric band. A shared wine/charcoal photo
   (public/images/outcomes-bg.jpg, reused across all cases) under a dark overlay keeps
   the white metrics legible and breaks up the otherwise-light page. Full-bleed → it must
   NOT carry is-style-light-background (dropped in PHP) so the header reverts to light/glass. */
.ivc-evidence{
  position:relative;
  background-color:#241a1d;
  /* Lighter, radial veil — keeps the centre (where the metrics sit) dark for legibility
     while letting the wine/charcoal image read through toward the edges. */
  background-image:
    radial-gradient(135% 120% at 50% 48%,rgba(16,10,13,.58) 0%,rgba(16,10,13,.46) 60%,rgba(12,8,10,.34) 100%),
    url("../images/outcomes-bg.jpg");
  background-size:cover;background-position:center;background-repeat:no-repeat;
  padding-block:var(--wp--preset--spacing--80,4rem);
}
/* white metrics — SCOPED to .ivc-evidence so shortcode metric bands on light surfaces
   keep their dark ink; the extra ancestor class beats the base !important. */
.ivc-evidence .ivc-metrics .ivc-value{color:#fff!important;}
.ivc-evidence .ivc-metrics .ivc-label{color:var(--ivc-white-80)!important;}
.ivc-evidence .ivc-metrics .ivc-metric{border-left-color:rgba(255,255,255,.2);}
.ivc-evidence .ivc-testimonial::before{color:var(--ivc-accent);opacity:.34;}
.ivc-evidence .ivc-testimonial-quote.ivc-testimonial-quote{color:#fff!important;}
.ivc-evidence .ivc-testimonial-cite{color:var(--ivc-white-80);}
.ivc-evidence .ivc-testimonial-cite::before{background:var(--ivc-accent);}
.ivc-section-label{display:block;width:max-content;
  font:600 var(--ivc-fs-label)/1 var(--ivc-font);letter-spacing:.14em;text-transform:uppercase;
  color:var(--ivc-crimson-deep);padding-bottom:.5em;border-bottom:1px solid var(--ivc-crimson);}
.ivc-evidence .ivc-testimonial{max-width:66ch;margin-inline:auto;margin-top:clamp(40px,6vw,72px);}

/* (4) consultants = the point of contact, or a guaranteed closer (round-bottom) */
.ivc-consultants{background:var(--ivc-canvas-off);
  padding-block:var(--wp--preset--spacing--80,4rem) calc(var(--wp--preset--spacing--80,4rem) + var(--ivc-round-lap));}
.ivc-section-label{margin:0 0 clamp(28px,4vw,44px);}
/* Borderless expert roster — left-aligned, multi-column, hairline-separated rows.
   No card chrome: avatar + body (name on top, role · contact icons inline below). */
.ivc-team-grid{list-style:none;margin:0;padding:0;display:grid;
  grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));
  column-gap:clamp(32px,4vw,64px);}
.ivc-consultants .ivc-card{
  display:flex;align-items:center;gap:clamp(14px,1.6vw,20px);
  padding:clamp(16px,2vw,22px) 0;
  border-bottom:1px solid var(--ivc-hair-soft);
  background:none;border-radius:0;box-shadow:none;}
.ivc-team-avatar{flex:0 0 auto;width:48px;height:48px;border-radius:999px;object-fit:cover;background:var(--ivc-canvas-off);}
.ivc-team-body{min-width:0;display:flex;flex-direction:column;gap:.2em;}
.ivc-team-name{font:600 1rem/1.25 var(--ivc-font);color:var(--ivc-ink);}
.ivc-team-meta{display:flex;align-items:center;flex-wrap:wrap;gap:.3em .8em;}
.ivc-team-role{font:400 .8125rem/1.3 var(--ivc-font);color:var(--ivc-ink-light);}
.ivc-contact{display:flex;gap:2px;margin:0;}
.ivc-contact-link{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;
  color:var(--ivc-crimson-deep);border-radius:6px;transition:color .2s var(--ivc-ease),background .2s var(--ivc-ease);}
.ivc-contact-link:hover{color:var(--ivc-crimson);background:rgba(188,50,63,.06);}
.ivc-contact-link:focus-visible{outline:2px solid var(--ivc-crimson);outline-offset:2px;}
.ivc-contact-link svg{width:16px;height:16px;stroke:currentColor;stroke-width:1.6;fill:none;stroke-linecap:round;stroke-linejoin:round;}
.ivc-closer-note{font:400 var(--ivc-fs-body)/1.6 var(--ivc-font);color:var(--ivc-ink);max-width:48ch;}
.ivc-closer-note a{color:var(--ivc-crimson-deep);border-bottom:1px solid var(--ivc-crimson);text-decoration:none;padding-bottom:2px;}
.ivc-closer-note a:hover{color:var(--ivc-crimson);}

/* ===================================================== METRICS band ======= */
.ivc-metrics.ivc-metrics{
  display:flex;flex-wrap:wrap;gap:0;
  padding-block:clamp(32px,5vw,64px);
  margin-top:0;
}
.ivc-metrics .ivc-metric{
  flex:1 1 0;min-width:160px;
  padding-inline:clamp(16px,3vw,40px);
  display:flex;flex-direction:column;gap:.5em;align-items:flex-start;
  border-left:1px solid var(--ivc-hair);
}
.ivc-metrics .ivc-metric:first-child{border-left:0;}
/* one metric → centered, oversized, alone */
.ivc-metrics[data-count="1"]{justify-content:center;}
.ivc-metrics[data-count="1"] .ivc-metric{flex:0 1 auto;align-items:center;text-align:center;border-left:0;}
.ivc-metrics .ivc-value{
  font:700 var(--ivc-fs-metric)/.95 var(--ivc-font);
  letter-spacing:-.03em;
  color:var(--ivc-ink)!important;
  font-variant-numeric:tabular-nums;
}
.ivc-metrics .ivc-label{
  font:600 var(--ivc-fs-label)/1.2 var(--ivc-font);
  letter-spacing:.14em;text-transform:uppercase;color:var(--ivc-ink-light)!important;
}
@media (max-width:720px){
  .ivc-metrics .ivc-metric{flex:1 1 calc(50% - 1px);min-width:0;}
  .ivc-metrics .ivc-metric:nth-child(2n+1){border-left:0;}
}

/* ===================================================== TESTIMONIAL ========= */
/* Attributed pull-quote — client voice. Oversized crimson quote motif over the
   restrained editorial type; cite picks up the underscore/kicker treatment. */
.ivc-testimonial{
  position:relative;
  max-width:var(--ivc-prose);
  margin:var(--ivc-air-md) 0 0;
  padding-left:clamp(28px,4vw,56px);
}
.ivc-testimonial::before{
  content:"\201C";position:absolute;left:-.04em;top:-.2em;pointer-events:none;
  font:700 clamp(3.5rem,7vw,6rem)/1 var(--ivc-font);
  color:var(--ivc-crimson);opacity:.18;
}
.ivc-testimonial-quote.ivc-testimonial-quote{
  margin:0;
  font:600 clamp(1.35rem,2.6vw,2.05rem)/1.32 var(--ivc-font);
  letter-spacing:-.01em;
  color:var(--ivc-ink)!important;
}
.ivc-testimonial-quote p{margin:0 0 .5em;}
.ivc-testimonial-quote p:last-child{margin-bottom:0;}
.ivc-testimonial-cite{
  display:flex;align-items:center;gap:.7em;
  margin-top:1.1em;
  font:600 var(--ivc-fs-label)/1.2 var(--ivc-font);
  letter-spacing:.14em;text-transform:uppercase;
  color:var(--ivc-crimson-deep);
}
.ivc-testimonial-cite::before{
  content:"";display:inline-block;width:26px;height:1px;background:var(--ivc-crimson);flex:0 0 auto;
}
.ivc-testimonial-cite cite{font-style:normal;}

/* ===================================================== LOGO BANNER ======== */
.ivc-logo-banner.ivc-logo-banner{
  position:relative;
  width:100vw;margin-inline:calc(50% - 50vw)!important;
  border-block:1px solid var(--ivc-crimson);
  padding-block:clamp(24px,4vw,40px);
  background:var(--ivc-canvas);
  overflow:hidden;
}
.ivc-logo-banner[data-bg="offwhite"]{background:var(--ivc-canvas-off);}
.ivc-logo-banner .ivc-banner-eyebrow{
  text-align:center;margin:0 0 clamp(18px,2.5vw,28px);
}
.ivc-logo-banner .ivc-viewport{
  overflow:hidden;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 120px,#000 calc(100% - 120px),transparent);
  mask-image:linear-gradient(90deg,transparent,#000 120px,#000 calc(100% - 120px),transparent);
}
.ivc-logo-banner .ivc-track{
  --ivc-logo-gap:clamp(48px,7vw,112px);
  display:flex;width:max-content;gap:var(--ivc-logo-gap);align-items:center;
  animation:ivc-marquee var(--ivc-marquee-duration,40s) linear infinite;
  will-change:transform;
}
.ivc-logo-banner[data-reverse="true"] .ivc-track{animation-direction:reverse;}
/* Pause on hover AND via the no-JS toggle below (touch + keyboard) — WCAG 2.2.2. */
.ivc-logo-banner .ivc-viewport:hover .ivc-track,
.ivc-pause-toggle:checked ~ .ivc-viewport .ivc-track{animation-play-state:paused;}

/* No-JS pause/play — a styled checkbox-hack control (keyboard + touch reachable). */
.ivc-pause-toggle{position:absolute;opacity:0;width:0;height:0;pointer-events:none;}
.ivc-pause-label{
  display:inline-flex;align-items:center;gap:.45em;
  margin:0 auto clamp(14px,2vw,22px);width:max-content;cursor:pointer;
  padding:.4em .8em;border:1px solid var(--ivc-crimson);border-radius:999px;
  font:600 var(--ivc-fs-label)/1 var(--ivc-font);letter-spacing:.12em;text-transform:uppercase;
  color:var(--ivc-crimson-deep);background:transparent;
  transition:color .2s var(--ivc-ease),background .2s var(--ivc-ease);
}
.ivc-pause-label:hover{background:var(--ivc-badge-bg);}
.ivc-pause-toggle:focus-visible ~ .ivc-pause-label{outline:2px solid var(--ivc-crimson);outline-offset:3px;}
.ivc-pause-label .ivc-pp-icon{width:9px;height:9px;display:block;color:var(--ivc-crimson);}
.ivc-pause-label .ivc-pp-pause,
.ivc-pause-label .ivc-pp-play{display:inline-flex;align-items:center;gap:.45em;}
.ivc-pause-label .ivc-pp-play,
.ivc-pause-toggle:checked ~ .ivc-pause-label .ivc-pp-pause{display:none;}
.ivc-pause-toggle:checked ~ .ivc-pause-label .ivc-pp-play{display:inline-flex;}
.ivc-logo-banner .ivc-logo{
  display:inline-flex;align-items:center;flex:0 0 auto;
}
.ivc-logo-banner .ivc-logo img,
.ivc-logo-banner .ivc-logo svg{
  height:clamp(28px,4vw,44px);width:auto;object-fit:contain;
  filter:grayscale(1) opacity(.55);
  transition:filter .24s var(--ivc-ease);
}
.ivc-logo-banner[data-mono="false"] .ivc-logo img,
.ivc-logo-banner[data-mono="false"] .ivc-logo svg{filter:none;}
.ivc-logo-banner .ivc-logo:hover img,
.ivc-logo-banner .ivc-logo:hover svg{filter:grayscale(0) opacity(1);}
.ivc-logo-banner a.ivc-logo{cursor:pointer;}
/* Both halves are identical, so one loop = half the track MINUS half a gap
   (the bridging gap between the halves) → pixel-seamless reset, no jump. */
@keyframes ivc-marquee{from{transform:translateX(0)}to{transform:translateX(calc(-50% - (var(--ivc-logo-gap) / 2)))}}

/* Too few logos → static centered row (no marquee). Mirrors reduced-motion. */
.ivc-logo-banner[data-static] .ivc-track{animation:none;flex-wrap:wrap;justify-content:center;width:auto;row-gap:clamp(20px,3vw,32px);}
.ivc-logo-banner[data-static] .ivc-logo--dup,
.ivc-logo-banner[data-static] .ivc-logo--rep{display:none;}
.ivc-logo-banner[data-static] .ivc-viewport{-webkit-mask-image:none;mask-image:none;}

/* ===================================================== MOTION SAFETY ====== */
@media (prefers-reduced-motion:reduce){
  .ivc-logo-banner .ivc-track{animation:none;flex-wrap:wrap;justify-content:center;width:auto;row-gap:clamp(20px,3vw,32px);}
  .ivc-logo-banner .ivc-logo--dup,
  .ivc-logo-banner .ivc-logo--rep{display:none;}
  .ivc-logo-banner .ivc-pause-toggle,
  .ivc-logo-banner .ivc-pause-label{display:none;}
  .ivc-logo-banner .ivc-viewport{-webkit-mask-image:none;mask-image:none;}
  .ivc-case-card *{transition:none!important;animation:none!important;}
  .ivc-case-card:hover .ivc-cover>img,
  .ivc-case-card:hover .ivc-cover>video{transform:none;}
  .ivc-reveal{opacity:1!important;transform:none!important;}
}

/* ============================================ CASES ARCHIVE — filter bar ==
   Full-catalogue grid ([intervalens_cases_archive]) with a client-side
   expertise filter (cases.js / initArchiveFilter). Pills are editorial: a
   hairline frame, small uppercase label, wide tracking; the active facet fills
   with the brand crimson and light ink. The card grid below reuses the shared
   .ivc-cases-grid (critical CSS + GRID section above), so only the bar, the
   item wrappers, and the empty state are new here.
   ------------------------------------------------------------------------- */
.ivc-cases-archive{display:block;}

/* Bar shares the cards' measure + inset so pills sit flush above column one. */
.ivc-archive-bar{
  display:flex;flex-wrap:wrap;align-items:center;
  gap:clamp(8px,1vw,12px);
  max-width:var(--ivc-grid);
  margin:0 auto clamp(28px,4vw,48px);
  padding-inline:var(--ivc-pad-inline);
}

.ivc-archive-pill{
  flex:0 0 auto;
  display:inline-flex;align-items:center;
  margin:0;
  padding:.72em 1.15em;
  font:600 var(--ivc-fs-label)/1 var(--ivc-font);
  letter-spacing:.14em;text-transform:uppercase;
  color:var(--ivc-ink-light);
  background:transparent;
  border:1px solid var(--ivc-hair);
  border-radius:2px;
  cursor:pointer;
  -webkit-appearance:none;appearance:none;
  transition:color .2s var(--ivc-ease),background-color .2s var(--ivc-ease),border-color .2s var(--ivc-ease);
}
.ivc-archive-pill:hover{
  color:var(--ivc-crimson-deep);
  border-color:var(--ivc-crimson);
  background:rgba(188,50,63,.05);
}
.ivc-archive-pill:focus-visible{
  outline:2px solid var(--ivc-crimson);
  outline-offset:3px;
}
/* Active facet — filled brand crimson, light ink; wins over :hover. */
.ivc-archive-pill.is-active,
.ivc-archive-pill.is-active:hover{
  color:#fff;
  background:var(--ivc-crimson-deep);
  border-color:var(--ivc-crimson-deep);
}

/* Plain block grid cell; the card inside styles itself (CASE CARD section). */
.ivc-archive-item{display:block;}
/* Author display:block above beats the UA [hidden] rule, so restore the JS filter's hide. */
.ivc-archive-item[hidden]{display:none;}

/* Shown by JS (hidden attr removed) when a filter leaves zero cards visible. */
.ivc-archive-empty{
  max-width:var(--ivc-grid);
  margin:clamp(24px,3vw,40px) auto 0;
  padding-inline:var(--ivc-pad-inline);
  font:400 var(--ivc-fs-body)/1.6 var(--ivc-font);
  color:var(--ivc-ink-light);
}
.ivc-archive-empty[hidden]{display:none;}

/* ==================================================== IVA — CASES ARCHIVE v2
   Redesigned /cases archive: dark-wine hero + in-flow filter/search bar +
   borderless glass cards + batched "Show more" reveal + wine CTA band
   (.iva-cta is a Gutenberg group on the /cases page, styled here).
   Namespace .iva- — STRICTLY ADDITIVE; never touches .ivc-* selectors used
   by live single-case pages.
   JS states on .iva-root (cases.js/initCasesArchiveV2): .iva-ready = JS is
   live (search field + Show-more become available); .iva-anim = motion
   allowed (never added under prefers-reduced-motion / no IO, so no-JS and
   reduced-motion never hide or animate content).
   -------------------------------------------------------------------------- */
/* .ivs-strip (the /services featured strip, section further down) reuses the
   .iva- card family verbatim, so it needs the same tokens in scope. Adding it
   to this selector list is purely additive — .iva-root/.iva-cta rendering is
   untouched. */
.iva-root,
.iva-cta,
.ivs-strip{
  --iva-wine:#4A0D16;
  --iva-crimson:#BC323F;
  --iva-crimson-deep:#8A242E;
  --iva-charcoal:#141413;
  --iva-paper:#F8F8F8;
  --iva-ink:#141413;
  --iva-ink-soft:rgba(20,20,19,.72);
  --iva-hair:rgba(20,20,19,.08);
  --iva-font:"Montserrat",system-ui,-apple-system,"Segoe UI",sans-serif;
  --iva-ease:cubic-bezier(.32,.72,0,1);
  /* The theme's real constrained width: contentSize 1400px + root padding
     token as gutters (theme.json settings.layout / styles.spacing.padding). */
  --iva-max:1400px;
  --iva-pad:var(--wp--preset--spacing--50,24px);
  --iva-wrap:calc(var(--iva-max) + 2*var(--iva-pad));
  /* Theme footer-curve tokens: footer.css pulls .site-footer up behind the
     section above by exactly these, so bottom curves land on charcoal. */
  --iva-curve:var(--wp--custom--footer--border-radius-lg,48px);
  --iva-curve-sm:var(--wp--custom--footer--border-radius-sm,32px);
  --iva-noise:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  font-family:var(--iva-font);
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}
.iva-root *,.iva-root *::before,.iva-root *::after,
.iva-cta *,.iva-cta *::before,.iva-cta *::after{box-sizing:border-box;}
.iva-root img{max-width:100%;display:block;}

/* Page shell: kill the theme's main gaps so the wine hero reaches y=0 under
   the overlay header and the CTA meets the footer. Scoped via :has() to the
   archive page only; harmless no-op where unsupported. */
main.wp-block-group:has(.iva-hero){padding-top:0!important;margin-top:0!important;
  padding-bottom:0!important;margin-bottom:0!important;}
.wp-site-blocks>main.wp-block-group:has(.iva-hero){margin-block-start:0!important;}

/* ---- HERO (dark wine — deliberately NO is-style-light-background) --------- */
.iva-hero.iva-hero{
  position:relative;overflow:hidden;
  width:100vw;max-width:100vw;margin-inline:calc(50% - 50vw);
  background:var(--iva-wine);color:#fff;
  border-end-start-radius:var(--iva-curve);border-end-end-radius:var(--iva-curve);
  padding:clamp(150px,20vh,225px) 0 clamp(96px,11vw,150px);
}
@media(max-width:768px){
  .iva-hero.iva-hero{border-end-start-radius:var(--iva-curve-sm);border-end-end-radius:var(--iva-curve-sm);}
}
.iva-hero-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
  opacity:.22;filter:saturate(.6) contrast(1.05);}
.iva-hero-veil{position:absolute;inset:0;pointer-events:none;
  background:
    linear-gradient(180deg,rgba(74,13,22,.60) 0%,rgba(74,13,22,.92) 85%),
    radial-gradient(900px 460px at 82% 115%,rgba(188,50,63,.30),transparent 60%);}
.iva-hero::after{content:"";position:absolute;inset:0;pointer-events:none;
  background-image:var(--iva-noise);opacity:.05;}
.iva-hero-inner{position:relative;z-index:1;max-width:var(--iva-wrap);
  margin-inline:auto;padding-inline:var(--iva-pad);}
.iva-h1.iva-h1{margin:0;max-width:16ch;text-wrap:balance;
  font:300 clamp(3rem,7vw,5.25rem)/1.02 var(--iva-font);
  letter-spacing:-.015em;text-transform:uppercase;color:#fff;}
.iva-hl{color:var(--iva-crimson);font-weight:600;}
.iva-sub.iva-sub{margin:clamp(24px,3.2vw,36px) 0 0;max-width:640px;text-wrap:pretty;
  font:300 clamp(1.0625rem,1.45vw,1.25rem)/1.6 var(--iva-font);
  color:rgba(255,255,255,.82);}

/* ---- LIGHT BODY (carries is-style-light-background → header flips dark) --- */
.iva-body.iva-body{position:relative;background:var(--iva-paper);
  width:100vw;max-width:100vw;margin-inline:calc(50% - 50vw);
  padding:clamp(48px,6vw,80px) 0 clamp(96px,12vw,150px);}

/* ---- FILTER / SEARCH BAR (in flow — NOT sticky) ---------------------------- */
.iva-controls{max-width:var(--iva-wrap);margin:0 auto;padding-inline:var(--iva-pad);}
.iva-bar{display:flex;flex-wrap:wrap;align-items:center;gap:14px 22px;
  padding-bottom:clamp(18px,2.4vw,26px);border-bottom:1px solid var(--iva-hair);}

/* Search: hidden until JS arms it (.iva-ready) — inert without JS. */
.iva-search{position:relative;display:none;align-items:center;flex:0 1 320px;min-width:220px;}
.iva-ready .iva-search{display:flex;}
.iva-search-ic{position:absolute;left:15px;top:50%;transform:translateY(-50%);
  width:15px;height:15px;color:rgba(20,20,19,.45);pointer-events:none;}
.iva-search-ic svg{width:100%;height:100%;display:block;}
.iva-search-input{width:100%;margin:0;padding:12px 40px;border-radius:999px;
  -webkit-appearance:none;appearance:none;background:#fff;color:var(--iva-ink);
  border:1px solid rgba(20,20,19,.10);
  font:500 13px/1.2 var(--iva-font);letter-spacing:.01em;
  transition:border-color .2s var(--iva-ease),box-shadow .2s var(--iva-ease);}
.iva-search-input::placeholder{color:rgba(20,20,19,.38);}
.iva-search-input:focus{outline:none;border-color:var(--iva-crimson);
  box-shadow:0 0 0 3px rgba(188,50,63,.15);}
.iva-search-input::-webkit-search-cancel-button,
.iva-search-input::-webkit-search-decoration{-webkit-appearance:none;appearance:none;}
.iva-search-clear{position:absolute;right:7px;top:50%;transform:translateY(-50%);
  display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;
  margin:0;padding:0;border:0;border-radius:999px;cursor:pointer;
  -webkit-appearance:none;appearance:none;
  background:rgba(20,20,19,.06);color:var(--iva-ink-soft);
  transition:background-color .2s var(--iva-ease),color .2s var(--iva-ease);}
.iva-search-clear:hover{background:var(--iva-crimson);color:#fff;}
.iva-search-clear:focus-visible{outline:2px solid var(--iva-crimson);outline-offset:2px;}
.iva-search-clear svg{width:12px;height:12px;display:block;}
.iva-search-clear[hidden]{display:none;}

.iva-chips{display:flex;align-items:center;gap:8px;flex:1 1 auto;overflow-x:auto;
  scrollbar-width:none;-webkit-overflow-scrolling:touch;padding:2px;}
.iva-chips::-webkit-scrollbar{display:none;}
.iva-chip{flex:0 0 auto;display:inline-flex;align-items:center;gap:9px;margin:0;
  padding:10px 16px;border-radius:999px;cursor:pointer;
  -webkit-appearance:none;appearance:none;
  font:600 11px/1 var(--iva-font);letter-spacing:.14em;text-transform:uppercase;
  color:var(--iva-ink-soft);background:#fff;border:1px solid rgba(20,20,19,.10);
  transition:color .2s var(--iva-ease),background-color .2s var(--iva-ease),
    border-color .2s var(--iva-ease),transform .2s var(--iva-ease);}
.iva-chip:hover{color:var(--iva-ink);border-color:rgba(20,20,19,.22);}
.iva-chip:active{transform:scale(.98);}
.iva-chip:focus-visible{outline:2px solid var(--iva-crimson);outline-offset:2px;}
.iva-chip[aria-pressed="true"],
.iva-chip[aria-pressed="true"]:hover{color:#fff;font-weight:700;
  background:var(--iva-crimson);border-color:var(--iva-crimson-deep);}
.iva-chip[aria-pressed="true"]:hover{background:var(--iva-crimson-deep);}
.iva-chip-count{font-variant-numeric:tabular-nums;font-size:10px;font-weight:700;line-height:1;
  padding:3px 7px;border-radius:999px;background:rgba(20,20,19,.06);color:var(--iva-ink-soft);}
.iva-chip[aria-pressed="true"] .iva-chip-count{background:rgba(255,255,255,.22);color:#fff;}
.iva-showing{margin:0 0 0 auto;white-space:nowrap;font:600 11px/1 var(--iva-font);
  letter-spacing:.14em;text-transform:uppercase;color:var(--iva-ink-soft);
  font-variant-numeric:tabular-nums;}
@media(max-width:767px){.iva-search{flex:1 1 100%;}}
@media(max-width:599px){.iva-showing{display:none;}}

/* ---- CARD GRID (full theme content width, all cards equal) ----------------- */
.iva-grid.iva-grid{max-width:var(--iva-wrap);margin:clamp(36px,4.5vw,56px) auto 0;
  padding-inline:var(--iva-pad);display:grid;grid-template-columns:1fr;gap:20px;}
@media(min-width:768px){
  .iva-grid.iva-grid{grid-template-columns:repeat(var(--iva-columns,2),minmax(0,1fr));gap:clamp(24px,2.5vw,36px);}
}
.iva-item{display:block;min-width:0;}
.iva-item[hidden]{display:none;}

/* Entrance: the hidden state exists ONLY under .iva-anim (added by cases.js
   when motion is allowed), so no-JS / reduced-motion never hides content.
   GPU-safe: transform + opacity only. --iva-i = stagger slot set by JS. */
.iva-anim .iva-reveal{opacity:0;transform:translateY(20px);
  transition:opacity .55s var(--iva-ease),transform .55s var(--iva-ease);
  transition-delay:calc(var(--iva-i,0)*55ms);}
.iva-anim .iva-reveal.iva-in{opacity:1;transform:none;}

/* ---- CARD (single borderless surface — shell/bezel removed) ---------------- */
.iva-card.iva-card{position:relative;display:block;height:100%;color:#fff;
  text-decoration:none;border-radius:20px;
  transition:transform .35s var(--iva-ease);}
.iva-card::after{content:"";position:absolute;inset:0;border-radius:20px;pointer-events:none;
  box-shadow:0 34px 70px -28px rgba(44,8,14,.5);opacity:0;transition:opacity .35s var(--iva-ease);}
.iva-card:hover,.iva-card:focus-visible{transform:translateY(-6px);}
.iva-card:hover::after,.iva-card:focus-visible::after{opacity:1;}
.iva-card:focus-visible{outline:2px solid var(--iva-crimson);outline-offset:4px;}
.iva-card-core{position:relative;display:block;overflow:hidden;height:100%;
  border-radius:20px;aspect-ratio:15/14;
  box-shadow:0 16px 44px -26px rgba(44,8,14,.4);
  background:
    radial-gradient(120% 90% at 80% 10%,rgba(188,50,63,.35) 0%,transparent 55%),
    linear-gradient(158deg,#4A0D16 0%,#141413 100%);}
/* No min-height anywhere: min-height + aspect-ratio transfers to a min-width
   that overflows narrow grid columns (cards overlap). */
@media(min-width:600px){.iva-card-core{aspect-ratio:8/5;}}
.iva-card-core>img{position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;transition:transform .5s var(--iva-ease);}
.iva-card:hover .iva-card-core>img{transform:scale(1.04);}
.iva-tint{position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(180deg,rgba(20,20,19,.18) 0%,rgba(20,20,19,0) 32%,rgba(20,20,19,.52) 100%);}
.iva-cat{position:absolute;top:20px;left:22px;right:22px;pointer-events:none;
  font:600 10px/1.4 var(--iva-font);letter-spacing:.26em;text-transform:uppercase;
  color:rgba(255,255,255,.88);text-shadow:0 1px 6px rgba(20,20,19,.55);}
.iva-glass{position:absolute;left:0;right:0;bottom:0;padding:20px 22px;
  background:linear-gradient(180deg,rgba(20,20,19,.10) 0%,rgba(20,20,19,.38) 100%);
  border-top:1px solid rgba(255,255,255,.14);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.10);}
@media(min-width:960px){
  @supports ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
    .iva-glass{background:rgba(255,255,255,.07);
      -webkit-backdrop-filter:blur(9px) saturate(1.3);backdrop-filter:blur(9px) saturate(1.3);}
  }
}
.iva-title{margin:0;font:600 clamp(1.125rem,1.6vw,1.3rem)/1.3 var(--iva-font);
  letter-spacing:-.005em;color:#fff;text-shadow:0 1px 10px rgba(20,20,19,.35);
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;}
/* Equal glass panels side by side: reserve exactly two title lines on desktop */
@media(min-width:600px){.iva-title{-webkit-line-clamp:2;min-height:2.6em;}}
.iva-meta{margin:10px 0 0;font:500 13px/1.4 var(--iva-font);color:rgba(255,255,255,.82);
  display:flex;align-items:baseline;min-width:0;}
.iva-meta-client{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.iva-meta-dot{flex:none;opacity:.45;margin:0 .45em;}
.iva-meta-period{flex:none;font-variant-numeric:tabular-nums;opacity:.85;white-space:nowrap;}
.iva-read{margin-top:16px;display:flex;align-items:center;justify-content:space-between;}
.iva-read-label{font:600 11px/1 var(--iva-font);letter-spacing:.12em;text-transform:uppercase;color:#fff;}
.iva-read-arrow{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;
  width:28px;height:28px;border-radius:999px;border:1px solid rgba(255,255,255,.35);color:#fff;
  transition:transform .25s var(--iva-ease),background-color .25s var(--iva-ease),border-color .25s var(--iva-ease);}
.iva-read-arrow svg{width:13px;height:13px;display:block;}
.iva-card:hover .iva-read-arrow{transform:translate(3px,-1px);
  background:var(--iva-crimson);border-color:var(--iva-crimson);}

/* ---- EMPTY STATE ------------------------------------------------------------ */
.iva-empty{max-width:var(--iva-wrap);margin:clamp(24px,3vw,40px) auto 0;
  padding-inline:var(--iva-pad);font:500 1rem/1.6 var(--iva-font);color:var(--iva-ink-soft);}
.iva-empty[hidden]{display:none;}

/* ---- SHOW-MORE (batched reveal; JS unhides it when more than 20 match) ------ */
.iva-more-wrap{display:flex;justify-content:center;max-width:var(--iva-wrap);
  margin:clamp(40px,5vw,60px) auto 0;padding-inline:var(--iva-pad);}
.iva-more{display:inline-flex;align-items:center;gap:14px;margin:0;
  padding:8px 8px 8px 26px;border:0;border-radius:999px;cursor:pointer;
  -webkit-appearance:none;appearance:none;
  background:var(--iva-charcoal);color:#fff;
  font:600 12px/1 var(--iva-font);letter-spacing:.14em;text-transform:uppercase;
  box-shadow:0 18px 44px -20px rgba(20,20,19,.55);
  transition:transform .25s var(--iva-ease),background-color .25s var(--iva-ease);}
.iva-more:hover{background:var(--iva-wine);transform:scale(1.03);}
.iva-more:active{transform:scale(.98);}
.iva-more:focus-visible{outline:2px solid var(--iva-crimson);outline-offset:3px;}
.iva-more[hidden]{display:none;}
.iva-more-count{font:700 10px/1 var(--iva-font);letter-spacing:.12em;
  padding:5px 9px;border-radius:999px;background:rgba(255,255,255,.14);
  color:rgba(255,255,255,.85);font-variant-numeric:tabular-nums;}
.iva-more-count[hidden]{display:none;}
.iva-more-ic{display:inline-flex;align-items:center;justify-content:center;
  width:36px;height:36px;border-radius:999px;background:rgba(255,255,255,.12);
  transition:transform .25s var(--iva-ease),background-color .25s var(--iva-ease);}
.iva-more-ic svg{width:15px;height:15px;display:block;}
.iva-more:hover .iva-more-ic{transform:translateY(2px);background:var(--iva-crimson);}

/* ---- CTA BAND (Gutenberg group .iva-cta.is-style-round-bottom on /cases) ----
   Full-bleed wine closing the page the theme's own way: squared top seam
   against the light body, theme-token rounded bottom. footer.css pulls the
   charcoal .site-footer up behind the last .is-style-round-bottom section by
   exactly the same token, so the corners always reveal #141413 — never white.
   A base darkening gradient settles the wine into the footer. */
.iva-cta.iva-cta{position:relative;overflow:hidden;z-index:1;
  width:100vw;margin-inline:calc(50% - 50vw);max-width:none;
  background:var(--iva-wine);color:#fff;margin-top:0;margin-bottom:0;
  border-end-start-radius:var(--iva-curve);border-end-end-radius:var(--iva-curve);}
@media(max-width:768px){
  .iva-cta.iva-cta{border-end-start-radius:var(--iva-curve-sm);border-end-end-radius:var(--iva-curve-sm);}
}
.iva-cta::before{content:"";position:absolute;inset:0;pointer-events:none;
  background:
    linear-gradient(180deg,rgba(20,20,19,0) 46%,rgba(20,20,19,.42) 100%),
    radial-gradient(720px 380px at 50% 118%,rgba(188,50,63,.26),transparent 62%);}
.iva-cta::after{content:"";position:absolute;inset:0;pointer-events:none;
  background-image:var(--iva-noise);opacity:.04;}
.iva-cta-inner{position:relative;z-index:1;max-width:800px;margin-inline:auto;
  padding:clamp(96px,12vw,150px) var(--iva-pad);text-align:center;}
.iva-cta-head{margin:0;text-wrap:balance;
  font:300 clamp(1.9rem,3.6vw,2.75rem)/1.25 var(--iva-font);color:#fff;}
.iva-btn{display:inline-flex;align-items:center;gap:14px;margin-top:clamp(28px,4vw,40px);
  padding:8px 8px 8px 28px;border-radius:999px;text-decoration:none;
  background:rgba(138,36,46,.85);border:1px solid rgba(255,255,255,.14);
  box-shadow:0 18px 44px -20px rgba(20,4,8,.6),inset 0 1px 1px rgba(255,255,255,.14);
  color:#fff;font:600 12px/1 var(--iva-font);letter-spacing:.14em;text-transform:uppercase;
  transition:transform .25s var(--iva-ease),background-color .25s var(--iva-ease);}
.iva-btn:hover{background:var(--iva-crimson-deep);transform:scale(1.03);}
.iva-btn:active{transform:scale(.98);}
.iva-btn:focus-visible{outline:2px solid #fff;outline-offset:3px;}
.iva-btn-ic{display:inline-flex;align-items:center;justify-content:center;
  width:40px;height:40px;border-radius:999px;background:rgba(255,255,255,.12);
  transition:transform .25s var(--iva-ease),background-color .25s var(--iva-ease);}
.iva-btn-ic svg{width:16px;height:16px;display:block;}
.iva-btn:hover .iva-btn-ic{transform:translate(3px,-1px);background:var(--iva-crimson);}

/* ---- MOTION SAFETY ------------------------------------------------------------ */
@media (prefers-reduced-motion:reduce){
  .iva-root *,.iva-root *::before,.iva-root *::after,
  .iva-cta *,.iva-cta *::before,.iva-cta *::after{transition:none!important;animation:none!important;}
  .iva-anim .iva-reveal{opacity:1;transform:none;}
  .iva-card:hover,.iva-card:focus-visible{transform:none;}
  .iva-card:hover .iva-card-core>img{transform:none;}
  .iva-btn:hover,.iva-more:hover{transform:none;}
}

/* ==================================================== IVS — FEATURED STRIP ===
   [intervalens_cases layout="strip"] — a horizontally scrollable row of
   featured-case cards for the /services pillars (user direction: the /cases
   card, cover-filling with the glassmorphism caption, but voiced whiter for
   the light /services sections).

   NO PARALLEL RECIPE: the strip template emits the archive's own classes
   (.iva-card / .iva-card-core / .iva-tint / .iva-glass / .iva-title /
   .iva-meta / .iva-read-arrow), so the cover treatment, 20px radius, wine
   fallback core and hover physics are the archive's actual rules and cannot
   drift. The .ivs-* companions carry ONLY the strip deviations: (1) the caption
   glass is re-voiced to the WHITER register; (2) the row is a scroll-snap
   carousel with a minimalist next control + edge-fade mask when the cards
   overflow; (3) a kicker label sits above the row. Strictly additive — no
   .iva-/.ivc- declaration is modified, so /cases (archive) is untouched.
   v1.9.0. --------------------------------------------------------------------- */

/* Block wrapper — top rhythm, accent token, kicker alignment. Mirrored (with
   !important) in the critical block; the page's FeaturedCases wrapper has its
   own top-margin zeroed, so the gap above each strip equals this clamp alone. */
.ivs-block{
  --ivs-accent:var(--iva-crimson,#BC323F);
  margin-top:clamp(48px,6vw,80px);
}
.ivs-block *,.ivs-block *::before,.ivs-block *::after{box-sizing:border-box;}

/* Kicker — the site's underscore-motif eyebrow (crimson, uppercase, wide
   tracking, hairline underline). Deeper crimson for AA against the light
   /services surfaces. Inline-block so it honours the block's text-align while
   the row underneath stays full-width. */
.ivs-kicker{
  display:inline-block;margin:0 0 clamp(14px,1.5vw,20px);
  font:600 11px/1 var(--iva-font);
  letter-spacing:.14em;text-transform:uppercase;
  color:var(--iva-crimson-deep,#8A242E);
  padding-bottom:.5em;border-bottom:1px solid currentColor;
}
.ivs-block--label-left{text-align:left;}
.ivs-block--label-right{text-align:right;}

/* Viewport — anchors the next control over the scroller. A positive bottom
   margin opens genuine breathing room below the strip: it clears the scroller's
   40px bottom padding (shadow room) and then adds section rhythm beneath, so the
   strip does not crowd whatever follows it. */
.ivs-viewport{position:relative;margin-bottom:clamp(24px,3.5vw,52px);}

/* Scroller — archive cards in a horizontal scroll-snap flex row. Vertical
   padding gives the hover lift (top) + card shadow (bottom) room, because
   overflow-x:auto forces overflow-y to clip. Native scrollbar hidden; the
   next control + edge fade carry the "there is more" affordance instead. */
.ivs-strip{
  display:flex;flex-wrap:nowrap;gap:clamp(18px,2vw,26px);
  margin:0;padding:8px 2px 40px;list-style:none;
  overflow-x:auto;overflow-y:hidden;
  scroll-snap-type:x proximity;scroll-padding-left:2px;
  -webkit-overflow-scrolling:touch;
  scrollbar-width:none;
}
.ivs-strip::-webkit-scrollbar{display:none;}
@media (min-width:960px){.ivs-strip{gap:clamp(22px,1.8vw,30px);}}

.ivs-strip>.ivs-card{flex:1 0 86%;scroll-snap-align:start;}
@media (min-width:600px){.ivs-strip>.ivs-card{flex-basis:46%;}}
@media (min-width:960px){.ivs-strip>.ivs-card{flex-basis:31.5%;}}
/* A single card should sit at a composed width, not full carousel width. */
.ivs-block[data-count="1"] .ivs-strip>.ivs-card{flex:0 0 min(100%,540px);}

/* Edge-fade affordance — a horizontal mask on the scroller fades cards toward
   whichever edge still has content off-screen (background-agnostic: masks to
   transparent, not to a bg colour). JS sets --ivs-fade-l/-r and toggles
   .is-scrollable only when the row overflows; without JS the mask is absent, so
   every card stays reachable by native scroll. The vertical axis is always
   opaque, so the hover lift is never clipped by the mask. */
.ivs-strip.is-scrollable{
  -webkit-mask:linear-gradient(90deg,
    transparent 0,#000 var(--ivs-fade-l,0px),
    #000 calc(100% - var(--ivs-fade-r,0px)),transparent 100%);
  mask:linear-gradient(90deg,
    transparent 0,#000 var(--ivs-fade-l,0px),
    #000 calc(100% - var(--ivs-fade-r,0px)),transparent 100%);
}

/* ---- MOBILE / TOUCH edge-fade geometry (<=959.98px) — v1.9.7 ----------------
   BOUNDARY (v1.9.7, do NOT "tidy" the .98 back to 959): the upper bound is
   959.98px, NOT 959px, and it pairs with the desktop min-width:960px rules. A
   plain 959/960 split leaves a sub-pixel dead-zone: at 959 CSS-px under a
   fractional devicePixelRatio (e.g. 1.5 — Windows 150% scaling, many Android
   phones) the layout viewport resolves to ~959.33px, so NEITHER max-width:959px
   NOR min-width:960px matches and the whole mobile retune below silently drops
   out (left fade stays 56px over the flush-left card, chevrons stay visible).
   959.98 closes the gap to 960 (0.02px is unaddressable at any real DPR), so
   exactly one side always matches. Bootstrap uses the same .98 technique.

   Defect (v1.9.5): the desktop fade is a symmetric 56px on both edges, but on
   the 1-up (<600px) and 2-up (600-959px) bands the focused card snaps FLUSH-
   LEFT, so at a mid-scroll rest the 56px LEFT fade bled ~54px straight over that
   card and the 56px RIGHT fade bled up to ~16px over its trailing edge — you
   could never see one whole, clean, un-faded card. Cure, mobile-scoped only
   (desktop >=960px has no override and keeps the 56px JS fallback verbatim):
     (1) kill the LEFT fade — a flush-left card must never be faded, and in a
         flush-left snap row the "there is more" hint only ever lives to the right;
     (2) retune the RIGHT fade to the card layout so it lands exactly on the
         trailing gap + neighbour sliver and never touches the focused card.
   Widths ride --ivs-fade-w-l / --ivs-fade-w-r (cases.js reads them and still
   collapses either to 0 at the far start/end). Percentages, so they track the
   card basis at every viewport (measured: 1-up card right edge ~85.6% of the
   scroller across 320-430px; 2-up second card ~94-95%). */
@media (max-width:959.98px){
  .ivs-strip{--ivs-fade-w-l:0px;}
  /* Touch bands: the bare chevrons are a pointer affordance, and once the left
     fade is gone the .ivs-prev chevron loses the light fade backdrop it was
     designed to read against. Native swipe + momentum + the right-edge fade and
     the visible peek carry the whole affordance on touch, so retire both. */
  .ivs-next,.ivs-prev{display:none!important;}
}
@media (max-width:599.98px){
  /* 1-up: card basis 86% -> fade stays opaque to 86%, clear of the card edge. */
  .ivs-strip{--ivs-fade-w-r:14%;}
}
@media (min-width:600px) and (max-width:959.98px){
  /* 2-up: two 46% cards fill ~94% -> fade opaque to ~95.5%, clear of card two. */
  .ivs-strip{--ivs-fade-w-r:4.5%;}
}

/* Pointer-drag on desktop (JS): free scroll while grabbing, then a JS-driven
   momentum glide + eased settle on release. Snap is suspended for the whole
   grab-and-glide (.is-dragging while held, .is-gliding through the inertia +
   settle tween) so native mandatory snapping can never yank the row back before
   the momentum resolves. Suppress link activation mid-drag. */
.ivs-strip.is-dragging{scroll-snap-type:none;cursor:grabbing;}
.ivs-strip.is-dragging a{pointer-events:none;}
.ivs-strip.is-gliding{scroll-snap-type:none;}

/* Scroll controls — two quiet, bare chevrons (right = .ivs-next, mirrored left
   = .ivs-prev). No disc, no border, no background: just the stroke, seated over
   the row's transparent edge-fade (the mask reveals the light page surface
   there, so a dark chevron reads on its own). A hairline drop-shadow keeps the
   stroke legible without any enclosure. Both render hidden; JS reveals each only
   when the row overflows — .ivs-next fades at the far end (.is-end), .ivs-prev
   fades at the far start (.is-start), so the left chevron is absent until you
   scroll away from the start and hidden entirely with no overflow. */
.ivs-next,
.ivs-prev{
  position:absolute;top:46%;transform:translateY(-50%);
  z-index:2;display:inline-flex;align-items:center;justify-content:center;
  width:40px;height:48px;margin:0;padding:0;border:0;background:none;cursor:pointer;
  -webkit-appearance:none;appearance:none;color:#141413;
  transition:opacity .35s var(--iva-ease),transform .35s var(--iva-ease),color .35s var(--iva-ease);
}
.ivs-next{right:4px;}
.ivs-prev{left:4px;}
.ivs-next[hidden],
.ivs-prev[hidden]{display:none;}
.ivs-next svg,
.ivs-prev svg{width:27px;height:27px;display:block;filter:drop-shadow(0 1px 2px rgba(20,20,19,.32));}
.ivs-next:hover{color:var(--ivs-accent);transform:translateY(-50%) translateX(3px);}
.ivs-prev:hover{color:var(--ivs-accent);transform:translateY(-50%) translateX(-3px);}
.ivs-next:active{transform:translateY(-50%) translateX(2px) scale(.94);}
.ivs-prev:active{transform:translateY(-50%) translateX(-2px) scale(.94);}
.ivs-next:focus-visible,
.ivs-prev:focus-visible{outline:2px solid var(--ivs-accent);outline-offset:3px;border-radius:4px;}
.ivs-next.is-end{opacity:0;pointer-events:none;}
.ivs-prev.is-start{opacity:0;pointer-events:none;}

/* --- CARD LOOK: the /cases card minus the mat — cover-filling core (20px
   radius, from the archive base), whiter caption glass, bottom scrim seat. --- */

/* Scrim seat — a monotonic-down gradient so white type stays legible over any
   cover. Alpha never decreases downward, so no dark line can resolve at the
   clipped bottom edge (the STRUCTURAL half of the fractional-DPR 1px-seam
   cure). Tuned against the brightest cover ("Performing 90 minutes…", a
   near-white light-trail): the ramp darkens the caption band enough that the
   WHITER glass on top still seats white type on a dark backdrop — measured
   worst-cover title background median ~12:1, 99.5th-percentile 4.6:1, meta
   ~13:1 (validator: text transparent + glass edge removed, brightest bg
   pixel). Without this, a near-white cover pixel bleeds through the whiter
   glass behind the title (contrast ~1:1). */
.ivs-strip .iva-tint{
  background:linear-gradient(180deg,
    rgba(20,20,19,0) 0%,
    rgba(20,20,19,0) 40%,
    rgba(20,20,19,.42) 58%,
    rgba(20,20,19,.74) 74%,
    rgba(20,20,19,.88) 100%);
}

/* Caption glass — the WHITER register (light /services voice: white .16→.09,
   blur+saturate+slight brightness, light top border). @supports is the only
   gate; the no-backdrop-filter fallback is a deliberate darker glass that still
   clears contrast. The panel overhangs the core by 1px on left/right/bottom and
   carries the core's own 20px bottom radius, so overflow:hidden on the core
   clips it flush — the HARDENING half of the seam cure (a light panel flush at
   a clipped fractional-DPR edge would otherwise flash a 1px dark line). */
.ivs-strip .ivs-glass.ivs-glass{
  background:linear-gradient(180deg,rgba(20,20,19,.36) 0%,rgba(20,20,19,.62) 100%);
  border-top:1px solid rgba(255,255,255,.16);
  border-radius:0 0 20px 20px;
  left:-1px;right:-1px;bottom:-1px;
}
@supports ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  .ivs-strip .ivs-glass.ivs-glass{
    background:linear-gradient(180deg,rgba(255,255,255,.16) 0%,rgba(255,255,255,.09) 100%);
    -webkit-backdrop-filter:blur(16px) saturate(1.4) brightness(1.05);
    backdrop-filter:blur(16px) saturate(1.4) brightness(1.05);
    border-top:1px solid rgba(255,255,255,.24);
    box-shadow:inset 0 1px 0 rgba(255,255,255,.30);
  }
}

/* Type — white on the glass, seated on the scrim. */
.ivs-strip .ivs-title.ivs-title{
  color:#fff;
  text-shadow:0 1px 12px rgba(20,20,19,.5),0 1px 2px rgba(20,20,19,.38);
}
/* Equal-height panels across the row: reserve 3 title lines >=960 so a long
   punchline isn't amputated while shorter titles still align. */
@media (min-width:960px){
  .ivs-strip .ivs-title.ivs-title{-webkit-line-clamp:3;min-height:3.9em;}
}
.ivs-strip .ivs-meta.ivs-meta{
  align-items:center;
  color:rgba(255,255,255,.95);
  text-shadow:0 1px 8px rgba(20,20,19,.5);
}
/* Anonymised client one-liners stay italic — font-style only; colour inherits
   the white meta above. */
.ivs-strip .iva-meta-client--anon{font-style:italic;}
.ivs-strip .ivs-arrow.ivs-arrow{margin-left:auto;border-color:rgba(255,255,255,.42);color:#fff;}

/* Hover — the archive lift + img scale, plus the per-strip accent arrow fill
   (accent="crimson|wine" -> --ivs-accent). Tinted card shadow. Do NOT animate
   backdrop-filter. */
.ivs-strip .iva-card:hover,
.ivs-strip .iva-card:focus-visible{transform:translateY(-6px);}
.ivs-strip .iva-card::after{box-shadow:0 30px 60px -30px rgba(74,13,22,.45);}
.ivs-strip .iva-card:hover .iva-read-arrow,
.ivs-strip .iva-card:focus-visible .iva-read-arrow{
  background:var(--ivs-accent);border-color:var(--ivs-accent);color:#fff;
}
.ivs-strip .iva-card:focus-visible{outline-color:var(--ivs-accent);outline-offset:4px;}

/* Pixel-seam utility (opt-in) — kills the hairline background-bleed between
   flush, differently-coloured full-bleed columns at fractional device-pixel
   ratios (Windows 125/150% scaling). Each non-last column overlaps its right
   neighbour by 1px; the later (right) column paints over the seam with its own
   colour, so the section background can never show through. Those (n-1) negative
   margins remove (n-1)px of row width, and because WP columns are fixed
   flex-basis with flex-grow:0 the row would fall short of the full-bleed edge —
   leaving a ~2-3px sliver of the section background at the far RIGHT (the fix in
   ≤1.9.4 introduced this). We give the LAST column flex-grow:1 so it absorbs
   exactly the reclaimed (n-1)px back to the container's right edge: the first
   n-1 columns keep their exact 25% rhythm and the last stretches sub-pixel-per-
   column to close both the seams AND the sliver, at any DPR. Colour-agnostic,
   count-agnostic, and inert until .ivs-colseam is present on a .wp-block-columns.
   Scoped to WP's own column-stack breakpoint (≥782px) so the stacked mobile
   layout (columns at flex-basis:100% on their own rows) is never touched. Used
   on the /services "How we approach" process band. */
@media (min-width:782px){
  .wp-block-columns.ivs-colseam>.wp-block-column{margin-right:-1px;}
  .wp-block-columns.ivs-colseam>.wp-block-column:last-child{margin-right:0;flex-grow:1;}
}

/* --- motion safety (the archive reduced-motion block is .iva-root-scoped, so
       the strip mirrors it) ------------------------------------------------- */
@media (prefers-reduced-motion:reduce){
  .ivs-strip,.ivs-strip *,.ivs-strip *::before,.ivs-strip *::after,
  .ivs-next,.ivs-prev{transition:none!important;animation:none!important;scroll-behavior:auto!important;}
  .ivs-strip{scroll-snap-type:none;}
  .ivs-strip .iva-card:hover,
  .ivs-strip .iva-card:focus-visible{transform:none;}
  .ivs-strip .iva-card:hover .iva-card-core>img{transform:none;}
}
