/*
 * Twin Creek Media brand stylesheet
 *
 * Hand-written CSS for the site chrome and brand utility classes.
 * Previously stored inside the Bricks theme style in the database; moved to a
 * real file so it is diffable, lintable and reviewable in git.
 *
 * Design tokens (--tcm-*) are NOT here: they stay in Bricks Global Variables so
 * they remain pickable in the builder UI. This file consumes them.
 *
 * NOTE: Bricks sets html{font-size:62.5%}, so 1rem = 10px, not 16px.
 */

/* ---- Fonts: always from the --tcm-font-* tokens ------------------------
   Fonts are set HERE, from the three tokens, and nowhere else. Element settings
   in Bricks must not name a font: Bricks writes its font field as a quoted
   string, so it cannot hold var(--tcm-font-*), and a font named per element is
   a font that has to be found and changed element by element. The theme style
   carries sizes and weights only.

   The defaults cover almost everything - body text is the body face, headings
   are the display face, h3 is the script (the Figma type scale), h4 is body.
   Where an element needs a different face than it would inherit, give it one
   of the Twin Creek global classes in the builder: tcm-font-display,
   tcm-font-body or tcm-font-script. The fonts are requested in functions.php. */
body{font-family:var(--tcm-font-body)}
h1,h2,h5,h6{font-family:var(--tcm-font-display)}
h3{font-family:var(--tcm-font-script)}
h4{font-family:var(--tcm-font-body)}
button,input,select,textarea{font-family:inherit}
.tcm-font-display{font-family:var(--tcm-font-display)}
.tcm-font-body{font-family:var(--tcm-font-body)}
.tcm-font-script{font-family:var(--tcm-font-script)}

/* ---- TCM brand utility text styles (Figma Style Guide) ---- */
.tcm-eyebrow{font-family:var(--tcm-font-body);font-size:var(--tcm-eyebrow);letter-spacing:var(--tcm-track-eyebrow);text-transform:uppercase;line-height:1.1;font-weight:400}
/* Section eyebrows in page content (2026-09-24 redesign): a small label
   that names the section, 10px above its heading. The 2.4rem Style Guide
   size read as a second heading. Each eyebrow and the heading it labels sit
   in a "Heading group" div (.tcm-headgroup), so the gap is the same on every
   page whatever the spacing of the section around it. Use an eyebrow only
   when it says something the heading doesn't. The footer tagline keeps the
   Style Guide size (its own rule below). */
#brx-content .tcm-eyebrow{font-size:1.5rem;font-weight:500;letter-spacing:.16em;line-height:1.3;margin:0}
.tcm-headgroup{display:flex;flex-direction:column;gap:10px;width:100%}
.tcm-headgroup > *{margin-top:0 !important;margin-bottom:0 !important}
.tcm-callout{font-family:var(--tcm-font-body);font-size:var(--tcm-callout);letter-spacing:var(--tcm-track-callout);text-transform:uppercase;line-height:1.1;font-weight:600}
.tcm-subtext{font-family:var(--tcm-font-body);font-size:var(--tcm-subtext);line-height:1.71}
.tcm-h7{font-family:var(--tcm-font-body);font-size:var(--tcm-h7);line-height:1.2}
.tcm-script{font-family:var(--tcm-font-script);font-size:var(--tcm-h3-script);line-height:1.1}
.tcm-script-xl{font-family:var(--tcm-font-script);font-size:var(--tcm-h1-script);line-height:1.1}
.tcm-shadow{box-shadow:var(--tcm-shadow)}
.tcm-bg-primary-tint{background-color:var(--tcm-primary-tint)}
.tcm-bg-forest-tint{background-color:var(--tcm-forest-tint)}

/* ---- Paper ---------------------------------------------------------------
   One texture, tiled, shared by the map band and the Why grid. The tile is the
   Figma parchment mirrored into a 2x2 block: seamless by construction, with no
   edge matching to get wrong, and on a grain this fine the symmetry is
   invisible. Measured across the join, 0.00 difference against 1.11 between two
   random interior columns of the same image.

   The tone comes from the colour underneath rather than from the file, so it
   can be retuned in one place without re-exporting anything: --tcm-paper,
   the ground the texture multiplies into, is a Bricks global variable, so it
   is pickable in the builder. Only the tile lives here, because its url() is relative to this
   file. */
:root{
  --tcm-paper-tile:url("../brand/paper-tile.jpg");
  /* The orange brush stroke: the link underline and the headline swoop are the
     same mark, so it is defined once. A static tapered path, stretched to fit. */
  --tcm-brush:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 11' preserveAspectRatio='none'%3E%3Cpath d='M1 8.6C26 5 56 2.9 92 2.4c36-.5 71 .5 107 1.7-36 1.5-71 1.2-107 2-36 .8-66 1.8-91 4.3z' fill='%23f8981d'/%3E%3C/svg%3E");
}
.tcm-papered,
.tcm-map-band,
.tcm-paper-band,
.tcm-why{
  background-color:var(--tcm-paper);
  background-image:var(--tcm-paper-tile);
  background-repeat:repeat;
  background-blend-mode:multiply;
}

/* ---- Treasure map band ---------------------------------------------------
   Three layers instead of one flattened image, so the band works at any width:
   the paper tiles, the torn edges repeat, and only the artwork is fixed size.
   Figma ships this as a single 4096x2731 PNG with everything baked in, which
   cannot scale - stretch it and the tear stretches with it.

   The torn strips paint the PAGE colour in the shape OUTSIDE the paper, which
   cuts the tear out of the band. They are mirrored horizontally so they repeat
   with no seam however wide the viewport gets, and they hold their pixel height
   so the tear never stretches. */
.tcm-map-band,
.tcm-paper-band{
  position:relative;
  padding:110px 24px;
  overflow:hidden;
}
/* The strips are masks now, not white pictures (2026-10-14), so the tear takes
   the colour of whatever sits next to the band: white by default, or set
   --tcm-tear-above / --tcm-tear-below, e.g. with the utility classes below.
   .tcm-paper-band is the same band for any content (.tcm-map-band is the
   map's, which its script also looks for). */
.tcm-map-band::before,
.tcm-map-band::after,
.tcm-paper-band::before,
.tcm-paper-band::after{
  content:"";
  position:absolute; left:0; right:0; height:110px;
  z-index:1; pointer-events:none;
  -webkit-mask-repeat:repeat-x; mask-repeat:repeat-x;
  -webkit-mask-size:auto 110px; mask-size:auto 110px;
}
.tcm-map-band::before,
.tcm-paper-band::before{top:0;    background-color:var(--tcm-tear-above, #fff); -webkit-mask-image:url("../brand/torn-top.png");    mask-image:url("../brand/torn-top.png");    -webkit-mask-position:left top;    mask-position:left top}
.tcm-map-band::after,
.tcm-paper-band::after {bottom:0; background-color:var(--tcm-tear-below, #fff); -webkit-mask-image:url("../brand/torn-bottom.png"); mask-image:url("../brand/torn-bottom.png"); -webkit-mask-position:left bottom; mask-position:left bottom}
.tcm-tear-above-mist{--tcm-tear-above:var(--tcm-mist)}
.tcm-tear-above-navy{--tcm-tear-above:var(--tcm-navy)}
.tcm-tear-below-mist{--tcm-tear-below:var(--tcm-mist)}
.tcm-tear-below-navy{--tcm-tear-below:var(--tcm-navy)}
/* Torn over a photo (the client quotes' wood, on the homepage): no colour can
   match a photograph, so the band cuts its own bottom edge out instead and the
   next section tucks up under it, showing through the rip. The next section
   gets the 110px back as extra top padding. */
.tcm-tear-over{
  z-index:2; margin-bottom:-110px; padding-bottom:150px;
  -webkit-mask:url("../brand/torn-bottom.png") left bottom / auto 110px repeat-x, linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;
          mask:url("../brand/torn-bottom.png") left bottom / auto 110px repeat-x exclude, linear-gradient(#000 0 0);
}
.tcm-tear-over::after{display:none}
.tcm-tear-over + .tcm-quotes{padding-top:180px}

.tcm-map-art{display:block; width:100%; height:auto}

/* Map Journey (elements/map-journey.php): a 44px button over each green dot
   in the artwork, with a soft forest ring that breathes so the stops read as
   something to touch; the card is the timeline bubble's (.tcm-paddle__bubble)
   white card with its tail, a screen for the clip on top. */
.tcm-mapj{position:relative; width:100%}
.tcm-mapj__art{display:block; width:100%; height:auto}
/* The route layer, in the artwork's own 1700 x 988 units. At rest (and
   without script) everything is drawn; initMapJourneys() adds .is-ready to
   hide it, then .is-drawn when the map scrolls into view to play it:
   --draw is the whole run, and each pin and the X wait for their --at, the
   share of the route before them. */
.tcm-mapj{--draw:3.2s}
.tcm-mapj-lede{text-wrap:balance}
.tcm-mapj__route{position:absolute; inset:0; width:100%; height:100%; overflow:visible; pointer-events:none; z-index:1}
.tcm-mapj__trail{fill:none; stroke:var(--tcm-primary); stroke-width:7; stroke-linecap:round; stroke-dasharray:11 14}
.tcm-mapj__reveal{fill:none; stroke:#fff; stroke-width:24; stroke-linecap:round}
/* the journey so far: solid over the dashes, up to the open stop (--done) */
.tcm-mapj__done{
  fill:none; stroke:var(--tcm-primary); stroke-width:7; stroke-linecap:round;
  stroke-dasharray:var(--len, 3000) var(--len, 3000);
  stroke-dashoffset:calc(var(--len, 3000) * (1 - var(--done, 0)));
  opacity:0; transition:stroke-dashoffset .7s cubic-bezier(.45,.05,.35,1), opacity .25s ease .45s;
}
.tcm-mapj.has-done .tcm-mapj__done{opacity:1; transition:stroke-dashoffset .7s cubic-bezier(.45,.05,.35,1), opacity .15s ease}
.tcm-mapj__x path{fill:none; stroke:var(--tcm-primary); stroke-width:13; stroke-linecap:round}
.tcm-mapj__x{transform-box:fill-box; transform-origin:center}
.tcm-mapj__pinbody{transition:transform .35s cubic-bezier(.34,1.56,.64,1)}
.tcm-mapj__ring{fill:var(--tcm-paper); stroke:var(--tcm-primary); stroke-width:5}
.tcm-mapj__fill{fill:var(--tcm-forest)}
.tcm-mapj__pin.is-on .tcm-mapj__pinbody{transform:scale(1.45)}

.tcm-mapj.is-ready .tcm-mapj__reveal{stroke-dasharray:var(--len) var(--len); stroke-dashoffset:var(--len)}
.tcm-mapj.is-ready .tcm-mapj__pinbody{transform:scale(0)}
.tcm-mapj.is-ready .tcm-mapj__x{opacity:0; transform:scale(1.8) rotate(-12deg)}
.tcm-mapj.is-drawn .tcm-mapj__reveal{stroke-dashoffset:0; transition:stroke-dashoffset var(--draw) cubic-bezier(.45,.05,.35,1)}
.tcm-mapj.is-drawn .tcm-mapj__pinbody{transform:scale(1); transition:transform .5s cubic-bezier(.34,1.56,.64,1) calc(var(--draw) * var(--at, 0))}
.tcm-mapj.is-drawn .tcm-mapj__pin.is-on .tcm-mapj__pinbody{transform:scale(1.45); transition-delay:0s}
.tcm-mapj.is-drawn .tcm-mapj__x{opacity:1; transform:none; transition:opacity .15s ease var(--draw), transform .45s cubic-bezier(.34,1.56,.64,1) var(--draw)}
/* after the first run, hovering answers at once (no waiting for --at) */
.tcm-mapj.is-done .tcm-mapj__pinbody{transition:transform .35s cubic-bezier(.34,1.56,.64,1)}

.tcm-mapj__stops{margin:0; padding:0; list-style:none}
.tcm-mapj__stop{position:absolute; left:var(--x); top:var(--y); z-index:2; width:0; height:0}
.tcm-mapj.is-ready:not(.is-done) .tcm-mapj__dot::before{animation:none; opacity:0}
.tcm-mapj__stop.is-open{z-index:5}
.tcm-mapj__dot{
  position:absolute; left:-22px; top:-22px; width:44px; height:44px; padding:0;
  border:0; border-radius:50%; background:transparent; cursor:pointer;
}
.tcm-mapj__dot::before{
  content:""; position:absolute; inset:9px; border-radius:50%;
  border:3px solid var(--tcm-forest); opacity:0;
  animation:tcm-mapj-ring 2.6s ease-out infinite;
}
/* The ping spreads to about twice the hit area (BugHerd #55: easier to spot). */
.tcm-mapj__stop:nth-child(2n) .tcm-mapj__dot::before{animation-delay:.9s}
.tcm-mapj__stop:nth-child(3n) .tcm-mapj__dot::before{animation-delay:1.7s}
.tcm-mapj__stop.is-open .tcm-mapj__dot::before{animation:none; opacity:0}   /* the pin grows instead */
.tcm-mapj__dot:focus-visible{outline:2px solid var(--tcm-forest); outline-offset:2px}
@keyframes tcm-mapj-ring{0%{transform:scale(.6); opacity:1} 70%{transform:scale(2.4); opacity:0} 100%{opacity:0}}

/* The card is a Challenge Coaster (.tcm-coaster__face) in forest green: the
   site paper multiplied in twice at two scales (as on the team card's back),
   a thick card edge, a pressed inner rim, set down at a slight tilt. The clip
   sits inside the rim like a print. No tail: the growing pin says which stop. */
.tcm-mapj__card{
  position:absolute; left:0; bottom:28px; width:290px; padding:12px 12px 0;
  border-radius:22px; color:#fff;
  background-color:var(--tcm-forest);
  background-image:var(--tcm-paper-tile), var(--tcm-paper-tile);
  background-blend-mode:multiply;
  background-size:340px auto, 520px auto;
  background-position:0 0, 137px 61px;
  box-shadow:0 2px 0 #2a4f35, 0 3px 0 #22422c, 0 14px 28px rgba(11,11,11,.26);
  rotate:var(--tilt, -2deg);
  transform-origin:50% 100%; transform:translateX(calc(-50% + var(--shift, 0px))) scale(.6);
  opacity:0; visibility:hidden; pointer-events:none;
  transition:transform .35s cubic-bezier(.34,1.56,.64,1), opacity .2s ease, visibility 0s .35s;
}
.tcm-mapj__card::before{content:""; position:absolute; inset:7px; border-radius:16px; border:1.5px solid rgba(255,255,255,.14); pointer-events:none}
.tcm-mapj__stop:nth-child(4n+2) .tcm-mapj__card{--tilt:1.5deg}
.tcm-mapj__stop:nth-child(4n+3) .tcm-mapj__card{--tilt:-.8deg}
.tcm-mapj__stop:nth-child(4n) .tcm-mapj__card{--tilt:2.2deg}
.tcm-mapj__stop.is-open .tcm-mapj__card{
  opacity:1; visibility:visible; pointer-events:auto;
  transform:translateX(calc(-50% + var(--shift, 0px))) scale(1);
  transition:transform .35s cubic-bezier(.34,1.56,.64,1), opacity .2s ease;
}
.tcm-mapj__stop.is-below .tcm-mapj__card{bottom:auto; top:28px; transform-origin:50% 0}
.tcm-mapj__screen{display:block; position:relative; aspect-ratio:16/9; border-radius:12px; overflow:hidden; background:var(--tcm-navy); box-shadow:0 0 0 1px rgba(0,0,0,.18)}
.tcm-mapj__clip{display:block; width:100%; height:100%; object-fit:cover}
.tcm-mapj__soon{position:absolute; inset:0; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:10px; color:rgba(255,255,255,.75); font-size:1.1rem; letter-spacing:.14em; text-transform:uppercase}
.tcm-mapj__soon i{display:grid; place-items:center; width:40px; height:40px; border-radius:50%; background:var(--tcm-forest); color:#fff; font-size:1.3rem; padding-left:3px}
.tcm-mapj__text{display:block; padding:14px 10px 20px}
.tcm-mapj__title{display:block; font-family:var(--tcm-font-display); font-weight:600; font-size:2.1rem; line-height:1.2; text-wrap:balance}
.tcm-mapj__cap{display:block; margin-top:6px; font-size:1.4rem; line-height:1.5; color:rgba(255,255,255,.86)}
/* The watch card: a bigger stop card (same green coaster) holding a still
   of the video and a play button, set down in the empty lower-left of the
   map. It pops in after the route has drawn, and steps aside (shrinks and
   fades) while a stop is open, popping back when it closes. */
.tcm-mapj__watch{
  position:absolute; left:2.5%; top:54%; z-index:4; width:clamp(300px, 34%, 460px);
  display:block; padding:12px 12px 16px; border:0; border-radius:22px; text-align:left; cursor:pointer;
  color:#fff; font:inherit;
  background-color:var(--tcm-forest);
  background-image:var(--tcm-paper-tile), var(--tcm-paper-tile);
  background-blend-mode:multiply;
  background-size:340px auto, 520px auto;
  background-position:0 0, 137px 61px;
  box-shadow:0 2px 0 #2a4f35, 0 3px 0 #22422c, 0 18px 34px rgba(11,11,11,.3);
  rotate:-3deg; transform-origin:30% 100%;
  transition:transform .45s cubic-bezier(.34,1.56,.64,1), opacity .25s ease, rotate .45s ease;
}
.tcm-mapj__watch::before{content:""; position:absolute; inset:7px; border-radius:16px; border:1.5px solid rgba(255,255,255,.14); pointer-events:none}
.tcm-mapj__watchshot{position:relative; display:block; aspect-ratio:16/9; border-radius:12px; overflow:hidden; background:var(--tcm-navy) center/cover no-repeat}
.tcm-mapj__watchshot::after{content:""; position:absolute; inset:0; background:linear-gradient(0deg, rgba(0,0,0,.35), transparent 60%)}
.tcm-mapj__watchplay{
  position:absolute; left:4%; bottom:7%; z-index:1; width:clamp(52px, 5vw, 72px); height:clamp(52px, 5vw, 72px);   /* in the corner, clear of the title card */
  display:grid; place-items:center; border-radius:50%; padding-left:6px;
  background:var(--tcm-primary); color:#fff; font-size:clamp(18px, 1.7vw, 24px);
  box-shadow:0 0 0 8px rgba(248,152,29,.3);
  transition:transform .3s cubic-bezier(.34,1.56,.64,1), box-shadow .3s ease;
}
.tcm-mapj__watch:hover{rotate:-1.5deg}
.tcm-mapj__watch:hover .tcm-mapj__watchplay{transform:scale(1.08); box-shadow:0 0 0 14px rgba(248,152,29,.25)}
.tcm-mapj__watch:focus-visible{outline:3px solid var(--tcm-primary); outline-offset:4px}
.tcm-mapj__watchtext{display:flex; align-items:baseline; justify-content:space-between; gap:12px; padding:14px 8px 0}
.tcm-mapj__watchtext b{font-family:var(--tcm-font-display); font-weight:600; font-size:clamp(2.2rem, 2vw, 2.8rem); line-height:1.1}
.tcm-mapj__watchtext > span{flex:none; font-size:1.2rem; letter-spacing:.14em; text-transform:uppercase; opacity:.8}
.tcm-mapj.is-ready .tcm-mapj__watch{transform:translateY(24px) scale(.55); opacity:0}
.tcm-mapj.is-drawn .tcm-mapj__watch{transform:none; opacity:1; transition:transform .55s cubic-bezier(.34,1.56,.64,1) calc(var(--draw) + .3s), opacity .25s ease calc(var(--draw) + .3s)}
.tcm-mapj.is-done .tcm-mapj__watch{transition:transform .45s cubic-bezier(.34,1.56,.64,1), opacity .25s ease, rotate .45s ease}
/* once someone has opened a stop the card's intro is over: it answers at
   once, even if the route is still drawing */
.tcm-mapj.tcm-mapj.is-met .tcm-mapj__watch{transform:none; opacity:1; transition:transform .45s cubic-bezier(.34,1.56,.64,1), opacity .25s ease, rotate .45s ease}
/* while a stop is open the card steps aside, whatever state the draw is in
   (the doubled class outranks the rules above) */
.tcm-mapj.tcm-mapj.is-exploring .tcm-mapj__watch{transform:translateY(24px) scale(.55); opacity:0; pointer-events:none; transition:transform .3s ease, opacity .2s ease}

/* Video player (initVideoBoxes()): the lightbox's dark dialog with a 16:9 frame. */
.tcm-videobox__frame{position:relative; width:min(1200px, calc(100vw - 48px), calc((100vh - 140px) * 16 / 9)); aspect-ratio:16/9; border-radius:12px; overflow:hidden; background:#000; box-shadow:0 10px 40px rgba(0,0,0,.4)}
.tcm-videobox__frame video, .tcm-videobox__frame iframe{position:absolute; inset:0; width:100%; height:100%; border:0}
.tcm-videobox .tcm-lightbox__fig{padding:64px 24px}

@media (max-width:700px){
  .tcm-mapj__dot::before{inset:14px}   /* the dots sit close together: a smaller ring, same target */
  /* the art is drawn at a third of its size here: heavier line and pins */
  .tcm-mapj__trail{stroke-width:11; stroke-dasharray:16 20}
  .tcm-mapj__done{stroke-width:11}
  .tcm-mapj__ring{r:23px; stroke-width:7}
  .tcm-mapj__fill{r:13px}
  .tcm-mapj__card, .tcm-mapj__stop.is-below .tcm-mapj__card{
    position:fixed; left:16px; right:16px; top:auto; bottom:calc(16px + env(safe-area-inset-bottom, 0px)); width:auto;
    display:grid; grid-template-columns:44% minmax(0, 1fr); align-items:stretch; gap:0; padding:10px;
    rotate:0deg; transform-origin:50% 100%; transform:translateY(24px); z-index:50;
  }
  .tcm-mapj__stop.is-open .tcm-mapj__card{transform:none}
  .tcm-mapj__screen{aspect-ratio:auto; min-height:104px}
  .tcm-mapj__clip{position:absolute; inset:0}
  .tcm-mapj__text{padding:4px 6px 4px 14px; display:flex; flex-direction:column; justify-content:center}
  .tcm-mapj__soon{gap:6px; font-size:1rem}
  .tcm-mapj__soon i{width:32px; height:32px; font-size:1.1rem}
  .tcm-mapj__title{font-size:1.7rem}
  .tcm-mapj__cap{font-size:1.3rem}
  /* On a phone the map is too small to explore: the band holds only the
     watch card, centred, and the stops (and their cards) are not shown. */
  .tcm-mapj__art, .tcm-mapj__route, .tcm-mapj__stops{display:none}
  .tcm-mapj{padding-block:8px 40px}   /* clear of the torn edge */
  .tcm-mapj-lede{display:none}        /* there are no stops to hover on a phone */
  .tcm-mapj__watchplay{left:10px; bottom:10px; width:52px; height:52px; font-size:18px; padding-left:4px; box-shadow:0 0 0 6px rgba(248,152,29,.3)}
  .tcm-mapj__watch, .tcm-mapj.is-ready .tcm-mapj__watch, .tcm-mapj.is-drawn .tcm-mapj__watch{position:relative; left:auto; top:auto; width:100%; max-width:440px; margin:0 auto; rotate:-1.5deg; transform:none; opacity:1}
}
@media (prefers-reduced-motion:reduce){
  .tcm-mapj__dot::before{animation:none; opacity:.8; inset:9px}
  .tcm-mapj__pinbody, .tcm-mapj__done{transition:none !important}
  .tcm-mapj__card, .tcm-mapj__stop.is-open .tcm-mapj__card{transition:none}
}

@media (max-width:767px){
  /* the tear keeps its pixel height; the band just needs less air on a phone */
  .tcm-map-band, .tcm-paper-band{padding:86px 18px}
}

/* ---- Paddle 1: Map, detail ---------------------------------------------- */

/* Long-form copy. Bricks' rich text leaves paragraph margins to the theme, so
   the rhythm is set here rather than with empty paragraphs in the content. */
.tcm-prose p{margin:0 0 1.35em}
.tcm-prose p:last-child{margin-bottom:0}
/* The bold lead-ins step back up to heading ink, which is what separates them
   from the body copy around them as much as the weight does. */
.tcm-prose strong{font-weight:500;color:var(--tcm-ink)}

/* A designed photo frame: 16px radius, the TCM drop shadow, the 610x665 ratio.
   Put it on a Bricks Image element and whatever image goes in is cropped to
   the frame, so swapping the photo is a single pick in the Image control.
   The element currently holds tcm-placeholder-photo.jpg, a real image that is
   visibly a stand-in (see TODO.md). Placeholders are always real elements
   like this one, never a styled div, so they can be filled in the builder. */
.tcm-photo{
  display:block;
  aspect-ratio:610/665;
  height:auto;
  object-fit:cover;
  border-radius:16px;
  box-shadow:var(--tcm-shadow);
}
/* Taller, for a photo that runs beside long copy (the homepage's whiteboard). */
.tcm-photo.tcm-photo--tall{aspect-ratio:61/78}

/* Two IDs, for the same reason as the map CTA: Bricks emits its own
   #brxe-pd1row rule later in the document, and a single-ID media query here
   would tie and lose. */
@media (max-width:991px){
  #brxe-pd1sec #brxe-pd1row{flex-direction:column}
  #brxe-pd1sec #brxe-pd1left,
  #brxe-pd1sec #brxe-pd1photo{width:100%}
  /* the ratio is a portrait crop; full width at tablet makes it enormous */
  #brxe-pd1sec #brxe-pd1photo{aspect-ratio:16/10;max-width:610px;margin-inline:auto}
}

/* ---- Success stories ---------------------------------------------------- */

/* Heading on the left, "see all" on the right; stacks rather than squeezing
   the 48px serif heading on narrow screens. */
.tcm-section-head{flex-wrap:wrap}

.tcm-case-row{flex-wrap:wrap}
.tcm-case{
  /* 1 1 0 with min-width:0 so four cards share the row evenly and the long
     stat labels inside can wrap instead of forcing the card wider */
  flex:1 1 0; min-width:0;
  display:flex; flex-direction:column;
  background:var(--tcm-mist);
  border-radius:15px;
  overflow:hidden;
  /* the card's own shadow in Figma is 7.5px, half the global --tcm-shadow */
  box-shadow:0 0 7.5px rgba(11,11,11,.2);
}

/* Photo half. The logo sits at the top and the CTA at the bottom, both over
   the image, so this is a flex column with the two pushed apart. */
.tcm-case__media{
  position:relative;
  aspect-ratio:313/240;
  display:flex; flex-direction:column; align-items:flex-start;
  justify-content:space-between;
  padding:20px 19px;
}
.tcm-case__photo{
  position:absolute; inset:0; z-index:0;
  width:100%; height:100%; object-fit:cover;
}
/* Dark from the left, clear at the right, multiplied into the photograph -
   it darkens without flattening, so the white logo holds on a bright frame
   like the ski shot while the image still reads. */
.tcm-case__media::after{
  content:""; position:absolute; inset:0; z-index:1; pointer-events:none;
  background:linear-gradient(to left, rgba(255,255,255,0) 4%, rgba(11,11,11,.83) 96%);
  mix-blend-mode:multiply;
}
/* The left-to-right gradient alone is photo-dependent. Measured against the
   backdrop actually behind each logo, FH&P came in at 2.43:1 - its logo lands
   on a bright office window - against a 3:1 minimum. This top scrim darkens
   the band the logo sits in whatever the photograph does underneath. */
.tcm-case__media::before{
  content:""; position:absolute; left:0; right:0; top:0; height:58%;
  z-index:1; pointer-events:none;
  background:linear-gradient(to bottom, rgba(11,11,11,.62), rgba(11,11,11,0));
}
.tcm-case__logo{
  position:relative; z-index:2;
  width:auto; max-width:68%; max-height:80px; height:auto;
  object-fit:contain; object-position:left center;
}
.tcm-case__cta{position:relative; z-index:2}

.tcm-case__body{
  display:flex; flex-direction:column; gap:12px;
  padding:20px 19px 22px;
  flex:1;
}
/* Pushes the stats to the bottom so the rows line up across cards whose
   blurbs run to different lengths. */
.tcm-case__statswrap{margin-top:auto; container-type:inline-size}
/* The figures as a small ledger (2026-09-25): one figure per row with its
   label beside it. Every figure is the same fixed size on every card, so a
   long one (500,000+, 40k/month, Happier) never shrinks the others. The
   figure column is as wide as the card's widest figure, so the labels line
   up. The .tcm-stat wrappers step aside (display:contents) so figure and
   label are cells of one grid. */
.tcm-case__stats{display:grid; grid-template-columns:auto minmax(0, 1fr); column-gap:14px}
.tcm-case__stats .tcm-stat{display:contents}
/* Figures are set in the body face, bold - Thomas' rule for every number on
   the site, so results read as data rather than as headline type. */
.tcm-stat__v,
.tcm-stat__l{display:flex; align-items:center; padding:9px 0; border-top:1px solid rgba(11,11,11,.12)}
.tcm-stat__v{
  font-family:var(--tcm-font-body); font-weight:700; font-size:2.6rem;
  line-height:1; letter-spacing:-.01em; color:var(--tcm-ink); white-space:nowrap;
}
.tcm-stat__l{
  min-width:0; font-size:1.25rem; line-height:1.25; text-transform:uppercase;
  color:var(--tcm-ink); opacity:.7;
}
/* A card too narrow for figure and label side by side puts each label under
   its figure instead of squeezing it. */
@container (max-width:250px){
  .tcm-case__stats{grid-template-columns:minmax(0, 1fr)}
  .tcm-stat__l{padding-top:0; border-top:0}
}

@media (max-width:991px){
  /* two up below 991px */
  #brxe-sssec #brxe-ssrow .tcm-case{flex:1 1 calc(50% - 9px)}
}
@media (max-width:575px){
  #brxe-sssec #brxe-ssrow .tcm-case{flex:1 1 100%}
}

/* ---- Clients & Results: case grid, industry chips, logo grid ------------- */

/* The case query loop. Four across like the homepage row, but a grid, so a
   filtered set of two or three keeps the card width instead of stretching. */
.tcm-case-grid{
  display:grid; grid-template-columns:repeat(4, minmax(0, 1fr));
  gap:20px; width:100%;
}
.tcm-case-grid .tcm-case{flex:none}
/* Three across below 1200px: at four, a card is too narrow for 500,000+ or
   40k/month even with the figures shrunk. */
@media (max-width:1199px){ .tcm-case-grid{grid-template-columns:repeat(3, minmax(0, 1fr))} }
@media (max-width:899px){ .tcm-case-grid{grid-template-columns:repeat(2, minmax(0, 1fr))} }
@media (max-width:639px){ .tcm-case-grid{grid-template-columns:1fr} }

/* .tcm-case and the tiles set their own display, which beats the UA's
   [hidden] rule; the filter relies on [hidden] actually hiding. */
.tcm-case[hidden], .tcm-ltile[hidden], .tcm-fchip[hidden], .tcm-filter-empty[hidden], .tcm-lgrid__foot[hidden]{display:none !important}

/* One filter bar over both grids (Industry Filter element). Sticky, so it
   stays in view from the case studies down through the client logos. */
.tcm-filterbar{
  display:flex; flex-direction:column; align-items:center; gap:12px;
  width:100%; padding:18px 40px;
  background:rgba(255,255,255,.96);
}
.tcm-filterbar.is-sticky{position:sticky; top:var(--wp-admin--admin-bar--height, 0px); z-index:30}
@supports (backdrop-filter:blur(6px)){ .tcm-filterbar{background:rgba(255,255,255,.88); backdrop-filter:blur(8px)} }
.tcm-filterbar.is-stuck{box-shadow:0 6px 18px rgba(11,11,11,.08)}
.tcm-filterbar__label{
  margin:0; font-size:1.3rem; letter-spacing:.14em; text-transform:uppercase; color:var(--tcm-ink-muted);
}
.tcm-filter-count{margin:0; font-size:1.5rem; color:var(--tcm-ink-muted); text-align:center}
.tcm-filter-empty{margin:0; padding:28px 20px; border-radius:12px; background:var(--tcm-mist); font-size:1.6rem; text-align:center; width:100%}
@media (max-width:767px){ .tcm-filterbar{padding:12px 16px} }

/* Filter chips. Active = Forest, per the Figma page. */
.tcm-fchips{
  display:flex; flex-wrap:wrap; justify-content:center; gap:6px;
}
.tcm-fchip{
  font-family:var(--tcm-font-body); font-weight:500;
  font-size:1.25rem; line-height:1; letter-spacing:.08em; text-transform:uppercase;
  padding:9px 13px; border-radius:99px;
  border:1.5px solid rgba(11,11,11,.16);
  background:var(--tcm-white); color:var(--tcm-ink);
  cursor:pointer;
  transition:background-color .25s ease, border-color .25s ease, color .25s ease;
}
.tcm-fchip:hover{border-color:var(--tcm-forest)}
.tcm-fchip[aria-pressed="true"]{background:var(--tcm-forest); border-color:var(--tcm-forest); color:#fff}
.tcm-fchip:focus-visible{outline:2px solid var(--tcm-primary); outline-offset:2px}
/* Phones: ten wrapped chips fill a screen before the first card, so they
   become one row that scrolls sideways, running to the screen edges. */
@media (max-width:767px){
  .tcm-fchips{
    flex-wrap:nowrap; justify-content:flex-start;
    overflow-x:auto; overscroll-behavior-x:contain; scrollbar-width:none;
    width:calc(100% + 32px); margin-inline:-16px; padding:4px 16px;
    scroll-padding-inline:16px;
  }
  .tcm-fchips::-webkit-scrollbar{display:none}
  .tcm-fchip{flex:none}
}

/* Logo grid */
.tcm-lgrid-wrap{display:flex; flex-direction:column; align-items:center; gap:24px; width:100%}
/* Four across. The logo files are trimmed of their built-in margin, so at
   this size a logo is still well over twice what the old six-across grid
   showed. Two across on tablets and phones. */
.tcm-lgrid{
  list-style:none; margin:0; padding:0; width:100%;
  display:grid; grid-template-columns:repeat(4, minmax(0, 1fr)); gap:18px;
}
.tcm-ltile{position:relative; aspect-ratio:3/2}
.tcm-lgrid:not(.is-all):not(.is-filtered) .tcm-ltile.is-more{display:none}
/* White cards on the section's paper (option A, chosen 2026-09-23): the
   review-card look, lifting on hover to say the logo is a link. */
.tcm-ltile__in{
  position:absolute; inset:0;
  display:grid; place-items:center;
  padding:20px;
  border-radius:12px;
  background:var(--tcm-white);
  box-shadow:0 1px 2px rgba(11,11,11,.06), 0 6px 18px rgba(11,11,11,.07);
  transition:box-shadow .25s ease, transform .25s ease;
}
.tcm-ltile__img{
  max-width:86%; max-height:66%; width:auto; height:auto; object-fit:contain;
  filter:grayscale(1); opacity:.7;
  transition:filter .3s ease, opacity .3s ease;
}
.tcm-ltile:hover .tcm-ltile__img, .tcm-ltile__in:focus-visible .tcm-ltile__img{filter:none; opacity:1}
a.tcm-ltile__in:hover{transform:translateY(-3px); box-shadow:0 2px 4px rgba(11,11,11,.06), 0 12px 28px rgba(11,11,11,.12)}
@media (prefers-reduced-motion:reduce){ a.tcm-ltile__in:hover{transform:none} }
a.tcm-ltile__in:focus-visible{outline:2px solid var(--tcm-primary); outline-offset:2px}
.tcm-ltile__wm{
  font-family:var(--tcm-font-display); font-weight:600;
  font-size:2.2rem; line-height:1.2; text-align:center; color:#7a7a7a;
}
.tcm-lgrid__foot{display:flex; flex-direction:column; align-items:center; gap:14px}
.tcm-lgrid__count{font-size:1.4rem; color:var(--tcm-ink-muted)}
/* Same values as the homepage "see all" button, which Bricks writes per id. */
.tcm-lgrid__more{
  font-family:var(--tcm-font-body); font-weight:400;
  font-size:var(--tcm-chrome-micro); letter-spacing:var(--tcm-track-button);
  text-transform:uppercase; line-height:1.1;
  color:#fff; background-color:var(--tcm-primary);
  border:0; border-radius:10px; padding:11px 21px; cursor:pointer;
}
@media (max-width:991px){ .tcm-lgrid{grid-template-columns:repeat(2, minmax(0, 1fr)); gap:14px} }

/* ---- Client quotes slider ------------------------------------------------
   Figma node `testimonial-slider` (285:6739). Markup comes from the registered
   Bricks element in elements/testimonial-slider.php, so the quotes are a
   repeater in the builder rather than a hand-built stack of divs.

   The backdrop is two layers, not one. Figma puts an 80% slate fill in
   multiply over the photograph, and background-blend-mode cannot do that: it
   blends an image into the element's OWN background colour, not into a colour
   painted above it. So the photo is an <img> and the veil is a sibling with
   mix-blend-mode. `isolation:isolate` keeps that multiply inside the section -
   without it the veil would reach through and darken the page behind. */
.tcm-quotes{
  position:relative;
  isolation:isolate;
  overflow:hidden;
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:32px;
  padding:70px 80px;
}
.tcm-quotes__bg{
  position:absolute; inset:0; z-index:0;
  width:100%; height:100%;
  object-fit:cover; object-position:center;
  pointer-events:none;
}
.tcm-quotes__veil{
  position:absolute; inset:0; z-index:1;
  background-color:rgba(11,11,11,.66);   /* same darkness as the old 80% slate */
  mix-blend-mode:multiply;
  pointer-events:none;
}

/* Every quote sits in the same grid cell, so the section is as tall as the
   longest one and nothing jumps as they change. A slider that resizes itself
   mid-transition is the thing that makes these feel cheap. */
.tcm-quotes__stage{
  position:relative; z-index:2;
  display:grid;
  width:100%;
  max-width:1126px;                     /* Figma quote measure */
}
.tcm-quote{
  grid-area:1/1;
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:32px;
  margin:0;
  text-align:center;
  opacity:0;
  visibility:hidden;
  translate:var(--tcm-quote-off,40px) 0;
  /* Leaving: go quickly. The two quotes overlap for as long as both are part
     way through their fade, and superimposed text is unreadable, so the one on
     its way out clears before the one arriving is dense enough to read. */
  transition:opacity .26s ease, translate .55s cubic-bezier(.22,.61,.36,1),
             visibility 0s linear .55s;
}
.tcm-quote.is-current{
  opacity:1;
  visibility:visible;
  translate:0 0;
  transition:opacity .42s ease .14s, translate .55s cubic-bezier(.22,.61,.36,1),
             visibility 0s;
}

.tcm-quote__who{
  display:flex; flex-direction:column; align-items:center;
  gap:8px;
  margin:0;
}
.tcm-quote__name{
  font-family:var(--tcm-font-body);
  font-size:var(--tcm-button);
  letter-spacing:var(--tcm-track-button);
  text-transform:uppercase;
  color:var(--tcm-primary);
}
.tcm-quote__role{
  font-family:var(--tcm-font-body);
  font-size:var(--tcm-body);
  line-height:1.34;
  color:#fff;
  opacity:.7;
}

/* Bricks' own stylesheet gives every blockquote a 4px keyline, 30px of indent
   and 1.3em type. None of that belongs here - the quote marks are the quoting
   device in this design. */
.tcm-quote__body{
  margin:0;
  padding:0;
  border:0;
  font-size:inherit;
}
.tcm-quote__body p{
  margin:0;
  font-family:var(--tcm-font-display);
  font-weight:600;                      /* the headline weight */
  font-size:var(--tcm-h2);
  line-height:1.24;
  color:#fff;
}
.tcm-quote__hl{color:var(--tcm-primary)}

/* The quote marks belong to the design rather than to the copy, so they are
   generated here and the builder field stays clean text. Set in the quote's
   own face (Fraunces) and size, in orange; Water Brush marks read oddly and
   were dropped on 2026-09-24. */
.tcm-quote__body p::before,
.tcm-quote__body p::after{color:var(--tcm-primary)}
.tcm-quote__body p::before{content:"\201C"; margin-right:.04em}
.tcm-quote__body p::after{content:"\201D"; margin-left:.02em}

/* Matches the outlined button in the footer CTA (#brxe-ctabtn2), which Bricks
   writes as an #id rule. This one has no Bricks settings behind it, so the
   values live here. The ripple and the orange hover keyline come from the
   shared .tcm-btn-ghost rules further down. */
.tcm-quote__cta{
  font-family:var(--tcm-font-body);
  font-size:var(--tcm-button);
  letter-spacing:var(--tcm-track-button);
  text-transform:uppercase;
  line-height:1.1;
  color:#fff;
  border:2px solid #fff;
  border-radius:10px;
  padding:9px 17px;
}

.tcm-quotes__nav{
  position:relative; z-index:2;
  display:flex; align-items:center; gap:4px;
}
.tcm-quotes__dot,
.tcm-quotes__pause{
  width:24px; height:24px;          /* 24px target, per WCAG 2.5.8 */
  display:grid; place-items:center;
  padding:0; border:0;
  background:none;
  color:#fff;
  cursor:pointer;
}
.tcm-quotes__dot::before{
  content:"";
  width:10px; height:10px;
  border-radius:50%;
  border:1px solid rgba(255,255,255,.8);
  transition:background-color .3s ease, border-color .3s ease;
}
.tcm-quotes__dot:hover::before{border-color:#fff; background-color:rgba(255,255,255,.35)}
.tcm-quotes__dot.is-current::before{
  background-color:var(--tcm-primary);
  border-color:var(--tcm-primary);
}
.tcm-quotes__dot:focus-visible,
.tcm-quotes__pause:focus-visible{
  outline:2px solid #fff;
  outline-offset:2px;
  border-radius:4px;
}
.tcm-quotes__pause{margin-left:6px}
/* display:grid above outranks the UA's [hidden] rule, so restate it. The
   script hides the button when reduced motion means nothing will advance. */
.tcm-quotes__pause[hidden]{display:none}
.tcm-quotes__pause-icon{
  width:9px; height:11px;
  background:linear-gradient(to right,
    currentColor 0 3px, transparent 3px 6px, currentColor 6px 9px);
  opacity:.8;
  transition:opacity .3s ease;
}
.tcm-quotes__pause:hover .tcm-quotes__pause-icon{opacity:1}
/* Paused: the control now offers to start it again, so it shows a play glyph. */
.tcm-quotes.is-paused .tcm-quotes__pause-icon{
  width:0; height:0;
  background:none;
  border-left:10px solid currentColor;
  border-top:6px solid transparent;
  border-bottom:6px solid transparent;
}

/* Previous / next: Figma's "hand-drawn-arrow 1" and "2" (323:6955, 234:5377),
   loose layers over the Homepage slider. A textured white chevron and nothing
   else - no circle, no fill - so the artwork is the button. Its 141px Figma box
   is mostly empty margin; the glyph is about 43x55, set here at that size from
   a 2x crop of the 2048px source. Figma puts the glyphs ~52px in from each
   edge and level with the middle line of the quote, which sits about 39px
   below the section's centre because the name block is above it.
   The button is larger than the glyph so it is a comfortable target. */
.tcm-quotes__arrow{
  position:absolute; z-index:3;
  top:calc(50% + 39px); translate:0 -50%;
  width:72px; height:88px;
  padding:0; border:0;
  background:url("../brand/quote-arrow.png") center / 44px 55px no-repeat;
  cursor:pointer;
  opacity:.9;
  transition:opacity .3s ease, transform .3s cubic-bezier(.22,.61,.36,1);
}
.tcm-quotes__arrow--prev{left:34px; transform:scaleX(-1)}     /* Figma rotates arrow 2 by 180deg */
.tcm-quotes__arrow--next{right:34px}
/* Figma has no hover state; a nudge outward says "this moves the slider". */
.tcm-quotes__arrow:hover{opacity:1}
.tcm-quotes__arrow--next:hover{transform:translateX(4px)}
.tcm-quotes__arrow--prev:hover{transform:scaleX(-1) translateX(4px)}
.tcm-quotes__arrow:focus-visible{outline:2px solid #fff; outline-offset:-6px; border-radius:8px}

@media (max-width:991px){
  .tcm-quotes{padding:56px 64px; gap:28px}
  .tcm-quotes__arrow{top:50%; width:52px; height:72px; background-size:32px 40px}
  .tcm-quotes__arrow--prev{left:6px}
  .tcm-quotes__arrow--next{right:6px}
  .tcm-quote{gap:26px}
}
@media (max-width:640px){
  .tcm-quotes{padding:48px 24px}
  /* No side room for them on a phone: they drop to the dots row, one at
     each end, so every control sits together under the quote. */
  .tcm-quotes__arrow{top:auto; bottom:38px; translate:none; width:44px; height:44px; background-size:24px 30px}
  .tcm-quotes__arrow--prev{left:24px}
  .tcm-quotes__arrow--next{right:24px}
  .tcm-quote__body p{line-height:1.3}
}

/* Honour the OS setting: the quotes still change, they just cut rather than
   travel. initQuoteSliders() also refuses to advance on its own under this. */
@media (prefers-reduced-motion:reduce){
  .tcm-quote{
    translate:none;
    transition:opacity .01ms, visibility 0s;
  }
  .tcm-quote.is-current{translate:none; transition:opacity .01ms, visibility 0s}
}

/* ---- Why Twin Creek ----------------------------------------------------- */

/* Parchment ground, and the two paper-curl textures behind the top row, are
   decoration only - referenced straight from the theme rather than sideloaded,
   so they never need to exist as media-library rows to render. The three
   hand-drawn illustrations ARE in the library: they are content. */
/* the section's paper is the shared tile - see .tcm-papered above */

.tcm-why-grid{
  display:grid;
  grid-template-columns:repeat(3, 1fr);
  width:100%;
  border:1px solid rgba(11,11,11,.11);
  border-radius:15px;
  /* NOT overflow:hidden. That is the obvious way to clip the box backgrounds to
     the rounded outer corners, but it also traps the unrolling panel inside the
     grid. The corners are rounded on the corner boxes themselves instead, which
     means the set of corner boxes has to be restated at every breakpoint. */
}
/* :nth-child(n) rather than a bare .tcm-why-box, so each breakpoint's reset
   matches the specificity of the rules it is resetting. A plain class selector
   loses to nth-child and the old corners survive into the new layout. */
/* Bricks emits align-items:flex-start on the block at ID specificity, so grid
   items do not fill their row. That was invisible while every card was about
   the same height; now that one is sized to the copy behind its face, its
   row-mates stopped short and left their hairlines stranded mid-row. Two
   ancestors deep to outrank it. */
#brxe-whysec .tcm-why-grid{align-items:stretch}

.tcm-why-box:nth-child(n){border-radius:0}
.tcm-why-box:nth-child(1){border-top-left-radius:15px}
.tcm-why-box:nth-child(3){border-top-right-radius:15px}
.tcm-why-box:nth-child(4){border-bottom-left-radius:15px}
.tcm-why-box:nth-child(6){border-bottom-right-radius:15px}
.tcm-why-box{
  position:relative;
  display:flex; flex-direction:column; align-items:center;
  /* top-aligned, not centred. Centring makes the title's position depend on
     how many lines the body below it runs to, which drifted the row-2 titles
     by 13px where one box had a fourth line. */
  justify-content:flex-start;
  gap:16px;
  padding:40px;
  min-height:320px;
  text-align:center;
  /* hairlines drawn on the inside edges only, so the rounded outer border
     stays a single unbroken line */
  border-right:1px solid rgba(11,11,11,.11);
  border-bottom:1px solid rgba(11,11,11,.11);
}
.tcm-why-box:nth-child(3n){border-right:0}
.tcm-why-box:nth-last-child(-n+3){border-bottom:0}

/* The paper texture that used to sit on the top row is gone: it had a torn
   corner baked into it, and that corner is now a real element that moves. It
   also appears only where there is something underneath to tear into, so it
   reads as an affordance rather than as decoration. */

/* Both media types occupy the same 114px slot, so every title in a row starts
   at the same offset from the top of its box whatever sits above it. */
.tcm-why-ill{width:auto; height:114px; object-fit:contain}
.tcm-why-icon{
  height:114px;
  display:flex; align-items:center; justify-content:center;
}
.tcm-why-icon i{font-size:4.8rem; color:var(--tcm-ink)}

@media (max-width:991px){
  .tcm-why-grid{grid-template-columns:repeat(2, 1fr)}
  .tcm-why-box:nth-child(n){border-radius:0}
  .tcm-why-box:nth-child(1){border-top-left-radius:15px}
  .tcm-why-box:nth-child(2){border-top-right-radius:15px}
  .tcm-why-box:nth-child(5){border-bottom-left-radius:15px}
  .tcm-why-box:nth-child(6){border-bottom-right-radius:15px}
  /* the 3n / -n+3 rules above are wrong at two columns */
  .tcm-why-box:nth-child(3n){border-right:1px solid rgba(11,11,11,.11)}
  .tcm-why-box:nth-child(2n){border-right:0}
  .tcm-why-box:nth-last-child(-n+3){border-bottom:1px solid rgba(11,11,11,.11)}
  .tcm-why-box:nth-last-child(-n+2){border-bottom:0}
}
@media (max-width:575px){
  .tcm-why-grid{grid-template-columns:1fr}
  .tcm-why-box:nth-child(n){border-radius:0}
  .tcm-why-box:nth-child(1){border-radius:15px 15px 0 0}
  .tcm-why-box:nth-child(6){border-radius:0 0 15px 15px}
  .tcm-why-box{min-height:0; padding:34px 24px}
  /* must restate the same specificity the two-column block used, or its
     nth-child(3n) rule keeps a right border on box 3 at one column */
  .tcm-why-box,
  .tcm-why-box:nth-child(2n),
  .tcm-why-box:nth-child(3n){border-right:0}

  .tcm-why-box:nth-last-child(-n+3),
  .tcm-why-box:nth-last-child(-n+2){border-bottom:1px solid rgba(11,11,11,.11)}
  .tcm-why-box:last-child{border-bottom:0}
}

/* ---- Why grid: tear the card open ---------------------------------------
   One interaction at every width. The card's face is torn away from the
   bottom-right corner toward the top-left, revealing copy that was already
   sitting behind it, and the torn corner that used to be printed on these
   cards is the thing doing the tearing.

   Because the copy is behind the face rather than below it, the card has to be
   tall enough to hold it whether it is open or shut - its min-height comes from
   the measured copy. On desktop that costs nothing: these cards already stood
   around 400px for their own content. */
.tcm-why-box{
  position:relative;
  overflow:hidden;                       /* keeps the flap and the torn edge
                                            inside the card's rounded corner */

  /* The cut lives here, on the card, and NOT on :root - which is where it was
     first written, and why it silently did nothing. A var() nested inside a
     custom property is substituted at the element the property is DECLARED on,
     not where it is used. These paths refer to --tcm-why-bw/--tcm-why-bh, which
     tcm-interactions.js sets on this element; declared at :root those names
     resolve against <html>, where they do not exist, so the whole value came
     out guaranteed-invalid and clip-path computed to `none`.

     Declared here they resolve correctly, and before the script has run they
     are simply absent - which leaves the card unclipped and whole, exactly the
     right thing to show when nothing can animate. */
  /* --- BEGIN generated tear edge (tools/gen-tear-edge.py) --- */
  /* traces the flap's far edge, then its chord (slope -0.9807) beyond it */
  /* Only ONE path is emitted, and it never animates. The wrapper that */
  /* carries it slides instead, so the reveal is a transform and runs  */
  /* on the compositor in step with the flap. See tcm-brand.css.       */
  --tcm-tear-clip:polygon(calc(4.0000 * var(--tcm-why-bw) + 3.0000 * var(--tcm-why-bh)) calc(-3.1425 * var(--tcm-why-bw) - 1.9420 * var(--tcm-why-bh)), calc(1.0000 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.2006 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.9970 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.1969 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.9933 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.1914 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.9872 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.1835 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.9811 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.1762 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.9750 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.1707 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.9690 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.1653 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.9629 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.1610 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.9568 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.1567 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.9507 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.1531 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.9446 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.1494 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.9385 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.1464 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.9324 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.1427 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.9263 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.1397 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.9203 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.1360 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.9142 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.1312 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.9081 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.1263 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.9020 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.1208 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.8959 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.1153 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.8898 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.1093 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.8837 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.1032 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.8777 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.0971 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.8716 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.0904 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.8655 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.0837 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.8594 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.0776 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.8533 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.0709 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.8472 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.0648 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.8411 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.0587 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.8350 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.0527 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.8290 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.0472 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.8229 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.0405 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.8168 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.0326 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.8107 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.0234 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.8046 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.0137 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.7985 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.0052 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(0.7955 * var(--tcm-why-bw) + 0.0000 * var(--tcm-why-bh)) calc(-0.0000 * var(--tcm-why-bw) + 1.0000 * var(--tcm-why-bh)), calc(-2.2045 * var(--tcm-why-bw) - 3.0000 * var(--tcm-why-bh)) calc(2.9420 * var(--tcm-why-bw) + 3.9420 * var(--tcm-why-bh)), calc(-6.0000 * var(--tcm-why-bw) - 6.0000 * var(--tcm-why-bh)) calc(2.9420 * var(--tcm-why-bw) + 3.9420 * var(--tcm-why-bh)), calc(-6.0000 * var(--tcm-why-bw) - 6.0000 * var(--tcm-why-bh)) calc(-3.1425 * var(--tcm-why-bw) - 1.9420 * var(--tcm-why-bh)));
  --tcm-tear-travel:1.05;
  --tcm-tear-angle:-44.44deg;
  --tcm-tear-anchor-x:0.7955;
  /* --- END generated tear edge --- */
}
.tcm-why-box:has(.tcm-why-panel){min-height:var(--tcm-why-h, auto)}

/* The reveal, and why it is built this way.
   ----------------------------------------------------------------------
   The obvious build animates clip-path on the face. It works, and it looks
   wrong next to the flap: clip-path animates on the main thread while the
   flap's `translate` runs on the compositor, so the two drift apart frame to
   frame and the cut appears to stutter behind a perfectly smooth flap.
   Measured: 61 frames, none longer than 16.8ms, one transition start, no
   cancels - nothing was dropping. They were simply on different threads.

   So nothing animates the cut. The wrapper carries a STATIC clip and slides;
   the face inside slides back by exactly the same amount and therefore never
   moves. Both are transforms, both composited, both in step with the flap. */
.tcm-why-cut{
  position:absolute; inset:0; z-index:2;
  clip-path:var(--tcm-tear-clip);
  translate:0 0;
  transition:translate .82s cubic-bezier(.22,.61,.36,1);
}
.tcm-why-box.is-open .tcm-why-cut{
  translate:calc(-1 * var(--tcm-tear-travel) * var(--tcm-why-bw))
            calc(-1 * var(--tcm-tear-travel) * var(--tcm-why-bh));
}

.tcm-why-face{
  position:absolute; inset:0;
  display:flex; flex-direction:column; align-items:center; justify-content:space-evenly;
  gap:10px;
  padding:34px 30px 66px;                /* foot clearance for the toggle */
  text-align:center;
  /* A white sheet, not parchment. The torn corner artwork IS white paper, so a
     white card makes the graphic literal: you tear a sheet off and the paper
     desk underneath shows through. It also lifts the card's own text off the
     warm ground. */
  background:#fff;
  /* the exact inverse of the wrapper's slide, so the card's front stays put
     while the clip edge travels across it */
  translate:0 0;
  transition:translate .82s cubic-bezier(.22,.61,.36,1);
}
.tcm-why-box.is-open .tcm-why-face{
  translate:calc(var(--tcm-tear-travel) * var(--tcm-why-bw))
            calc(var(--tcm-tear-travel) * var(--tcm-why-bh));
}

/* The shadow the torn edge throws onto the sheet below. A strip rotated to the
   cut's angle, sliding on the same transition - its own pixels never change,
   so it rasterises once. It replaces a drop-shadow filter on the face, which
   had to re-blur the whole card on every frame of the reveal. */
.tcm-why-box:has(.tcm-why-panel)::before{
  content:"";
  position:absolute; z-index:1; pointer-events:none;
  left:0; top:0;
  width:calc(8 * (var(--tcm-why-bw, 400px) + var(--tcm-why-bh, 400px)));
  height:20px;
  background:linear-gradient(to bottom, rgba(11,11,11,.22), rgba(11,11,11,0));
  transform-origin:0 0;
  transform:translate(calc(var(--tcm-tear-anchor-x) * var(--tcm-why-bw)), var(--tcm-why-bh))
            rotate(var(--tcm-tear-angle))
            translateX(-50%);
  /* Hidden while the card is shut. The strip runs along the STRAIGHT part of
     the cut, but at rest the only cut in view is the curved part tucked under
     the flap, and the flap artwork brings its own shadow there. With both
     showing, the parchment lightened in the gap between them and read as a
     sliver of white along the curl. It appears the instant the card opens and
     fades only once it has closed again, so the travelling tear always has
     its shadow. */
  opacity:0;
  transition:transform .82s cubic-bezier(.22,.61,.36,1), opacity .18s ease .7s;
}
.tcm-why-box.is-open::before{
  opacity:1;
  transition:transform .82s cubic-bezier(.22,.61,.36,1), opacity 0s;
  transform:translate(
              calc(var(--tcm-tear-anchor-x) * var(--tcm-why-bw) - var(--tcm-tear-travel) * var(--tcm-why-bw)),
              calc(var(--tcm-why-bh) - var(--tcm-tear-travel) * var(--tcm-why-bh)))
            rotate(var(--tcm-tear-angle))
            translateX(-50%);
}

/* The torn corner itself, lifted straight out of the paper texture that used to
   be printed on these cards. Its two ragged edges meet in a corner that already
   points up and left, so it travels along the diagonal unrotated, leading the
   tear. It now appears ONLY on cards that have something underneath, which
   turns it from decoration into the affordance that says so. */
.tcm-why-box:has(.tcm-why-panel)::after{
  content:"";
  position:absolute; z-index:3; pointer-events:none;
  /* flush into the corner at its drawn proportions, the way it sits in the
     Figma. The cut is derived from this placement, not the other way round. */
  right:0; bottom:0;
  width:28%; aspect-ratio:460 / 335;
  background:url("../brand/why-tear-corner.png") center / contain no-repeat;
  translate:0 0;
  transition:translate .82s cubic-bezier(.22,.61,.36,1);
}
/* The flap and the cut travel together, both off the same generated value, so
   they cannot drift apart.

   The card's size has to come in as a variable. Percentages on `translate`
   resolve against the element's OWN box, so -90% here would move the flap 90%
   of its own width - roughly a quarter of the distance - and it would trail
   the tear it is meant to be leading. tcm-interactions.js keeps these current. */
.tcm-why-box.is-open::after{
  translate:calc(-1 * var(--tcm-tear-travel) * var(--tcm-why-bw, 100%))
            calc(-1 * var(--tcm-tear-travel) * var(--tcm-why-bh, 100%));
}

/* The panel stops being a panel and becomes the sheet underneath. It carries
   the paper colour, not the copy does: the copy must keep its natural height
   for the card to be measured from it, and a background on something with a
   natural height would leave bare card above and below whenever the face
   happens to be the taller of the two layers. */
.tcm-why-panel{
  position:absolute; inset:0; z-index:0; pointer-events:auto;
  display:flex; flex-direction:column; justify-content:center;
  /* the parchment the card is lying on, so tearing the sheet away reveals the
     desk rather than another sheet */
  background-color:var(--tcm-paper);
  background-image:var(--tcm-paper-tile);
  background-blend-mode:multiply;
}
.tcm-why-paper{
  border:0;
  background:transparent;
  padding:34px 30px 66px;                /* same foot clearance as the face */
}
.tcm-why-paper p{margin:0}
.tcm-why-paper p + p{margin-top:1.1em}

/* The toggle floats above both layers. It cannot live inside the face: the face
   is torn away completely, and a close control that goes with it is no close
   control at all. */
.tcm-why-more{
  position:absolute; left:0; right:0; bottom:18px; z-index:4;
  margin:0;
  display:inline-flex; align-items:center; justify-content:center;
  border:0; box-shadow:none; text-decoration:none;
  cursor:pointer;
}
.tcm-why-more i{font-size:1rem; transition:transform .42s cubic-bezier(.22,.61,.36,1)}
.tcm-why-box.is-open .tcm-why-more i{transform:rotate(90deg)}

@media (max-width:575px){
  .tcm-why-face,
  .tcm-why-paper{padding:30px 24px 58px}
  /* smaller and tighter than on wider screens purely to keep the card's height
     down - it has to fit this copy whether it is open or shut. Two ancestors
     deep to beat the element rule Bricks emits for the text size. */
  #brxe-whysec .tcm-why-paper{font-size:1.4rem; line-height:1.56}
}

@media (prefers-reduced-motion:reduce){
  .tcm-why-cut,.tcm-why-face,.tcm-why-more i,
  .tcm-why-box:has(.tcm-why-panel)::before,
  .tcm-why-box:has(.tcm-why-panel)::after{
    transition-duration:.01ms !important;
  }
}

/* ---- Footer CTA ---------------------------------------------------------
   The photograph is a Bricks background on the section itself, not a rule in
   here, so it can be swapped and repositioned in the builder like any other
   background. One image, used whole: at its natural 4032px it is wider than any
   viewport, so centring it means a wider screen simply reveals more of the
   scene while the band holds its height. Nothing in this file sets it - Bricks
   writes element settings as #id rules, so anything here would fight it.

   The sky in that photograph is transparent, and what shows through it is the
   same parchment the Why grid above is printed on, so the two sections read as
   one continuous sheet with a landscape sitting on it.

   That parchment cannot be a second background layer on the section, because
   Bricks owns background-image here and offers a single slot. It is a pseudo
   element at z-index -1 instead, which paints behind its own parent's
   background as long as the parent is not a stacking context. .tcm-cta is
   position:relative with no z-index, so it is not one: do not add a z-index,
   opacity, transform, filter or isolation to this section without moving the
   paper somewhere else first. For the same reason the section's background
   COLOUR is deliberately left unset in Bricks - an opaque colour there would
   paint over the paper. The colour lives on the pseudo element instead. */
.tcm-cta{position:relative}
.tcm-cta::after{
  content:"";
  position:absolute; inset:0; z-index:-1; pointer-events:none;
  background-color:var(--tcm-paper);
  background-image:var(--tcm-paper-tile);
  background-repeat:repeat;
  background-blend-mode:multiply;
}
/* The scene's sky is transparent, so the ground behind it shows through.
   Paper by default; pick the variant that matches the section above so the
   ridge line meets it with no seam. Global classes in the builder
   (Twin Creek category): tcm-cta--white, tcm-cta--mist. */
.tcm-cta.tcm-cta--white::after{background-color:var(--tcm-white); background-image:none}
.tcm-cta.tcm-cta--mist::after{background-color:var(--tcm-mist); background-image:none}

/* At phone widths only a tenth of the scene is visible, and the bright band of
   water across the middle of it can land behind the buttons - measured 2.17:1
   for the outlined one against white. A soft scrim restores the copy without
   touching the photograph, its framing, or anything set in the builder. It
   starts below the ridge line rather than at the top edge, so the parchment
   showing through the sky stays parchment instead of going muddy. */
@media (max-width:767px){
  .tcm-cta::before{
    content:"";
    position:absolute; inset:0; z-index:0; pointer-events:none;
    background:linear-gradient(to bottom,
      rgba(11,11,11,0) 15%,
      rgba(11,11,11,.58) 27%,
      rgba(11,11,11,.58) 86%,
      rgba(11,11,11,0) 100%);
  }
  .tcm-cta > *{position:relative; z-index:1}
}



.tcm-cta-btns{flex-wrap:wrap}

/* Outlined variant. The ripple fills with slate, so the label and the keyline
   both stay legible as it lands. */
/* Bricks fills every .bricks-button from
   `.bricks-button:not([class*="bricks-background-"]):not([class*="bricks-color-"]):not(.outline)`,
   which is four classes of specificity. A bare .tcm-btn-ghost loses to it, so
   until now the class only looked like it worked: the buttons that read as
   outlined were the ones where Bricks ALSO wrote an #id rule with a
   transparent fill. Match its shape and add one class, so the utility is
   honest on its own wherever it is used. */
.tcm-btn-ghost{background-color:transparent}
.bricks-button.tcm-btn-ghost:not([class*="bricks-background-"]):not([class*="bricks-color-"]):not(.outline){
  background-color:transparent;
}

/* ---- Hero -------------------------------------------------------------- */

/* The script word inside the hero headline. Sized in em so it keeps the
   Figma ratio (116/96) as the clamped h1 scales down. */
.tcm-script,
.tcm-script-hero{
  font-family:var(--tcm-font-script);
  font-size:1.21em;
  color:var(--tcm-primary);
  font-weight:400;
}

/* ---- Background Video element (elements/background-video.php) ----------
   The poster image lives on the section itself, so if the video never loads
   nothing changes visually. The root has NO z-index on purpose: it must not be
   a stacking context, or the pause button could not rise above the section's
   content while the video and veil stay beneath it. */
.tcm-bgvideo{position:absolute;inset:0;pointer-events:none}
.tcm-bgvideo__media,
.tcm-bgvideo__veil{position:absolute;inset:0;z-index:0;overflow:hidden}
.tcm-bgvideo__media video{
  position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
  opacity:0;transition:opacity .6s ease;
}
.tcm-bgvideo__media video.is-ready{opacity:1}
/* The veil darkens the whole frame evenly; any directional scrim for the text
   sits above it as its own layer (the hero's is #brxe-herovel). Its colour is
   the element's "Darkening overlay" control. Fades in with the video, so the
   still image underneath keeps the exposure it was graded at. */
.tcm-bgvideo__veil{background-color:rgba(11,11,11,.4);opacity:0;transition:opacity .6s ease}
.tcm-bgvideo:has(video.is-ready) .tcm-bgvideo__veil{opacity:1}

/* Bottom right, above the content (the hero row is z-index 2) and matched to
   the quote slider's arrows. */
.tcm-bgvideo__pause{
  position:absolute; z-index:3; right:28px; bottom:28px;
  width:44px; height:44px;
  display:grid; place-items:center;
  padding:0;
  border:2px solid rgba(255,255,255,.8);
  border-radius:50%;
  background:rgba(11,11,11,.35);
  color:#fff;
  cursor:pointer;
  pointer-events:auto;
  transition:border-color .3s ease, color .3s ease, background-color .3s ease;
}
.tcm-bgvideo__pause[hidden]{display:none}
.tcm-bgvideo__pause i{font-size:1.3rem; line-height:1}
.tcm-bgvideo__pause .fa-play{margin-left:2px}      /* optical centring */
.tcm-bgvideo__pause:hover{border-color:var(--tcm-primary); color:var(--tcm-primary); background:rgba(11,11,11,.55)}
.tcm-bgvideo__pause:focus-visible{outline:2px solid #fff; outline-offset:3px}
@media (max-width:767px){
  .tcm-bgvideo__pause{right:18px; bottom:18px; width:40px; height:40px}
}

/* Scrim. Measured: the brightest 10% of background behind the H1 was 1.4:1
   against a 3:1 minimum for large text, because the sunset punches through
   between the letters. Weighted to the left, where the text sits, so the
   photograph keeps its sky on the right. */
#brxe-herovel{
  position:absolute;inset:0;z-index:1;pointer-events:none;
  background:
    linear-gradient(90deg, rgba(11,11,11,.82) 0%, rgba(11,11,11,.66) 38%, rgba(11,11,11,.30) 66%, rgba(11,11,11,.06) 100%),
    linear-gradient(180deg, rgba(11,11,11,.30) 0%, rgba(11,11,11,0) 30%, rgba(11,11,11,.28) 100%);
}

/* Scroll cue */
#brxe-heroscr{opacity:.85}
#brxe-heroscr i{font-size:12px}

/* NOTE: these need the section ID as well. Bricks emits its own per-element
   CSS (#brxe-herorow{...}) AFTER this stylesheet, so a single-ID selector ties
   on specificity and loses on order. Prefixing wins without !important. */
@media (max-width:900px){
  #brxe-herosec #brxe-herorow{flex-direction:column;align-items:flex-start;row-gap:30px}
  #brxe-herosec #brxe-herorul{display:none}
  #brxe-herosec #brxe-herolft,
  #brxe-herosec #brxe-herorgt{width:100%}
}
/* ---- Map / Make / Move (homepage) ---------------------------------------
   The Marketing Services columns (.tcm-paddle-col, below), with the step and
   its timing above each head and the longer homepage paragraph under the
   lede. Order: the FAQ's green hand-drawn arrow on each divider, pointing on
   to the next step (down, when the steps stack). */
.tcm-paddle-col__step{margin:0 0 10px; font-size:1.2rem; font-weight:600; letter-spacing:.14em; text-transform:uppercase; line-height:1.3; color:var(--tcm-primary)}
.tcm-paddle-cols--steps .tcm-paddle-col__out{margin:4px 0 14px}
.tcm-paddle-col__body{margin:0; max-width:36ch}
/* No circle and no box: the divider itself has a gap where the arrow sits
   (border-image, below), so the arrow works on any ground, the paper band
   included (it sat on a white box until 2026-10-14, which showed on paper).
   The PNG has wide margins, so the mask overhangs the arrow's box. */
.tcm-step-arrow{position:absolute !important; left:-20px; top:20px; width:40px; height:56px; z-index:2 !important}
.tcm-paddle-cols--steps .tcm-paddle-col + .tcm-paddle-col{border-image:linear-gradient(to bottom, rgba(11,11,11,.12) 0 10px, transparent 10px 86px, rgba(11,11,11,.12) 86px) 1}
.tcm-step-arrow::before{
  content:""; position:absolute; inset:-18px -22px; background:var(--tcm-forest);
  -webkit-mask:url("../brand/hand-arrow.png") center/100% 100% no-repeat;
          mask:url("../brand/hand-arrow.png") center/100% 100% no-repeat;
}
/* The heading above (the mega menu's icon and name) and Start here below. */
.tcm-3ps-head{display:flex; align-items:center; justify-content:center; gap:18px; flex-wrap:wrap}
.tcm-3ps-head img{height:clamp(48px, 4.4vw, 64px); width:auto}
.tcm-3ps-head h2{margin:0; text-align:center}
.tcm-3ps-foot{display:flex; justify-content:center; width:100%; margin-top:48px}
@media (max-width:900px){
  .tcm-paddle-cols--steps .tcm-paddle-col + .tcm-paddle-col{padding-top:44px; border-image:linear-gradient(to right, rgba(11,11,11,.12) 0 calc(50% - 38px), transparent calc(50% - 38px) calc(50% + 38px), rgba(11,11,11,.12) calc(50% + 38px)) 1}
  .tcm-step-arrow{left:50%; top:-20px; margin-left:-28px; width:56px; height:40px}
  .tcm-step-arrow::before{inset:-22px -18px; transform:rotate(90deg)}
  .tcm-paddle-col__body{max-width:none}
}

@media (max-width:767px){
  #brxe-herosec #brxe-heroscr{display:none}
  #brxe-herosec{padding-top:64px;padding-bottom:64px}
}

/* Header height, consumed by the mega menu's max-height guard. */
#brx-header{--tcm-header-h:100px}

/* ---- Header + footer chrome ---- */
/* Chevrons are Font Awesome (bundled with Bricks), rendered as <i>, so they
   size by font-size and need no rotation - the old custom SVG pointed down and
   was rotated -90deg. Custom SVG is reserved for the hand-drawn brand marks
   (phone, social, flag), which keep their own sizing below. */
#brx-header .bricks-button i{font-size:12px;line-height:1}
#brx-footer .brxe-text-link i{font-size:11px;line-height:1}
#brx-header .bricks-nav-menu a:not(.bricks-button){color:#fff;text-decoration:none}
#brx-footer a{text-decoration:none}
#brx-header .brxe-image img,#brx-footer .brxe-image img{height:auto;width:100%}
/* The "your marketing partner" callout sits lighter than everything around it
   so it reads as a statement rather than competing with the 600-weight labels. */
#brx-footer .tcm-eyebrow{
  font-size:var(--tcm-chrome-eyebrow);
  line-height:1.35;
  font-weight:var(--tcm-weight-callout);
}
#brx-footer #brxe-fcar00{white-space:nowrap}

/* ---- Mega menu ----
   Width/left come from megaMenuSelector (#brx-header). Bricks anchors `top` to the <li> bottom,
   which sits above the header's bottom edge, so the panel overlapped the logo and CTA.
   Bricks' data-mega-menu-vertical would fix this but is only emitted by the `dropdown` element,
   not `nav-menu`, so set top explicitly: top = headerBottom - liTop (li is 24px tall).
     single row : header 100px, li centred at 38px -> 62px
     two rows   : header 112px, li at 72px         -> 40px                                   */
#brx-header .bricks-nav-menu>li>.brx-megamenu{
  background-color:var(--tcm-navy);
  box-shadow:0 12px 24px rgba(0,0,0,.25);
  /* 2px under the header's bottom edge: the li sits on a subpixel, and an
     exact fit left a hairline gap that showed the page and could drop the
     hover on the way down (2026-10-17). The panel paints above the header. */
  top:60px;
  /* Hard guarantee: the panel opens flush under the header, so the tallest it
     may ever be is the viewport minus the header. Scrolls only if it still
     does not fit (very short screens, or the stacked layout below 991px). */
  max-height:calc(100vh - var(--tcm-header-h,100px));
  overflow-y:auto;
  overscroll-behavior:contain;
}
/* thin scrollbar, only visible if the guard actually engages */
#brx-header .bricks-nav-menu>li>.brx-megamenu{scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.28) transparent}
#brx-header .bricks-nav-menu>li>.brx-megamenu::-webkit-scrollbar{width:8px}
#brx-header .bricks-nav-menu>li>.brx-megamenu::-webkit-scrollbar-thumb{background:rgba(255,255,255,.28);border-radius:8px}

/* ---- Mobile menu toggle ----
   Bricks' own display:none is unlayered with :where() (zero specificity) while its display:block
   sits inside @layer bricks - unlayered always wins, so override it here. */
#brx-header .bricks-mobile-menu-toggle{position:relative;width:32px;height:22px;padding:0;border:0;background:none;cursor:pointer;flex:0 0 auto}
#brx-header .bricks-mobile-menu-toggle .bar-top,#brx-header .bricks-mobile-menu-toggle .bar-center,#brx-header .bricks-mobile-menu-toggle .bar-bottom{position:absolute;left:0;width:32px;min-width:32px;height:3px;background-color:#fff;border-radius:2px}
#brx-header .bricks-mobile-menu-toggle .bar-top{top:0}
#brx-header .bricks-mobile-menu-toggle .bar-center{top:9px}
#brx-header .bricks-mobile-menu-toggle .bar-bottom{top:18px}

/* Open state (Bricks adds .show-mobile-menu to .brxe-nav-menu).
   Bricks converges both bars on top:50% and rotates them into an X, but its
   selector is 4 classes and ours carries an ID, so our resting top:0/18px won
   and the bars rotated 18px apart - producing a lopsided ">" that overflowed
   the toggle box. Restate the converge at ID specificity. */
#brx-header .brxe-nav-menu.show-mobile-menu .bricks-mobile-menu-toggle .bar-top,
#brx-header .brxe-nav-menu.show-mobile-menu .bricks-mobile-menu-toggle .bar-bottom{
  top:50%;
  margin-top:-1.5px;
}
#brx-header .brxe-nav-menu.show-mobile-menu .bricks-mobile-menu-toggle .bar-center{opacity:0}

/* Panel. Bricks defaults to a 300px drawer, which on a 390px phone leaves a
   strip of the page showing through with no backdrop. Full width instead. */
#brx-header .bricks-mobile-menu-wrapper{background-color:var(--tcm-navy);width:100%;max-width:100%}
/* Bricks paints the panel with a ::before in its own near-black (#23282d),
   which sits above the wrapper's own background. Recolour it to TCM navy. */
#brx-header .bricks-mobile-menu-wrapper::before{background-color:var(--tcm-navy)}

#brx-header .bricks-mobile-menu{padding:80px 28px 48px}
/* Bricks ships the mobile menu links at line-height:60px, which with padding
   gave 88px-tall rows and a very airy list. Reset it. */
#brx-header .bricks-mobile-menu a{color:#fff;font-size:var(--tcm-chrome-micro);text-transform:uppercase;letter-spacing:var(--tcm-track-button);line-height:1.25;padding:13px 0;display:inline-block}

/* Services and Industries now carry real child menu items, so each surface
   gets the right one: the mega menu template on desktop, the plain accordion
   submenu on mobile. Bricks renders BOTH into the markup. */
@media (min-width:768px){
  #brx-header .bricks-nav-menu .brx-has-megamenu > .sub-menu{display:none}
}
@media (max-width:767px){
  /* the mega menu panel is far too large for a drawer */
  #brx-header .bricks-mobile-menu .brx-megamenu{display:none}
}

/* Submenu caret. Bricks ships its own inline SVG; swap it for the bundled
   Font Awesome chevron so it matches every other chevron on the site.
   Points down when collapsed, flips up when open (down rather than right
   since 2026-10-14: these open a menu below, not a page). Bricks sets
   aria-expanded on the button, which is the correct hook and needs no extra
   class. */
#brx-header .brx-submenu-toggle > button{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  background:none;
  border:0;
  padding:0 0 0 10px;
  color:#fff;
  cursor:pointer;
}
#brx-header .brx-submenu-toggle > button svg{display:none}
#brx-header .brx-submenu-toggle > button::after{
  font-family:"Font Awesome 6 Solid";
  font-weight:900;
  content:"\f078";              /* chevron-down */
  font-size:11px;
  line-height:1;
  display:block;
  transition:transform .25s cubic-bezier(.22,.61,.36,1);
}
#brx-header .brx-submenu-toggle > button[aria-expanded="true"]::after{
  transform:rotate(180deg);
}

/* Mobile submenu list */
#brx-header .bricks-mobile-menu .sub-menu{
  padding:2px 0 10px 18px;
  display:flex;
  flex-direction:column;
}
#brx-header .bricks-mobile-menu .sub-menu a{
  font-size:1.5rem;
  font-weight:300;
  letter-spacing:.06em;
  padding:9px 0;
  opacity:.9;
}

/* Mobile menu foot: contact block + CTA, injected by tcm-interactions.js.
   The header's phone and CTA are hidden below 767px, so without this a phone
   has no click-to-call and no primary action anywhere in the chrome.
   margin-top:auto pins it to the bottom of the flex column Bricks provides. */
#brx-header .tcm-mobile-foot{
  margin-top:auto;
  padding:28px 28px 40px;
  display:flex;
  flex-direction:column;
  align-items:flex-start;
  gap:14px;
  border-top:1px solid rgba(255,255,255,.14);
}
#brx-header .tcm-mobile-foot__label{
  margin:0;
  font-family:var(--tcm-font-body);
  font-size:var(--tcm-chrome-micro);
  font-weight:600;
  letter-spacing:var(--tcm-track-button);
  text-transform:uppercase;
  line-height:1.1;
  color:#fff;
}
#brx-header .tcm-mobile-foot__link{
  font-family:var(--tcm-font-body);
  font-size:var(--tcm-chrome-micro);
  font-weight:300;
  letter-spacing:var(--tcm-track-button);
  text-transform:uppercase;
  line-height:1.3;
  color:#fff;
  text-decoration:none;
  padding:2px 0;
}
#brx-header .tcm-mobile-foot__link:focus-visible{outline:2px solid var(--tcm-primary);outline-offset:3px}
#brx-header .tcm-mobile-foot__cta{
  margin-top:6px;
  display:inline-flex;
  align-items:center;
  gap:10px;
  font-family:var(--tcm-font-body);
  font-size:var(--tcm-chrome-micro);
  font-weight:400;
  letter-spacing:var(--tcm-track-button);
  text-transform:uppercase;
  line-height:1.1;
  color:#fff;
  text-decoration:none;
  background:var(--tcm-primary);
  border-radius:12px;
  padding:14px 28px;
}

/* Phone menu: Services and Industries drill-down panels (initMobilePanels in
   tcm-interactions.js, data from inc/mobile-nav.php). Each panel covers the
   menu and slides in from the right; the one it leaves eases off left. */
#brx-header .tcm-mnav-item .tcm-mnav-sub{
  display:block; margin-top:4px; font-size:1.3rem; font-weight:300; letter-spacing:0; text-transform:none;
  color:rgba(255,255,255,.7);
}
#brx-header .tcm-mnav-item > .brx-submenu-toggle > button::after{content:"\f054"} /* chevron-right: opens a panel */
#brx-header .tcm-mnav-item > .brx-submenu-toggle > button[aria-expanded="true"]::after{transform:none}
#brx-header .bricks-mobile-menu-wrapper{overflow-x:hidden}
#brx-header .bricks-mobile-menu-wrapper.tcm-mnav-open{overflow-y:hidden}
#brx-header .tcm-mnav__panel{
  position:absolute; inset:0; z-index:2; overflow-y:auto; overscroll-behavior:contain;
  padding:0 0 48px; background:var(--tcm-navy); color:#fff;
  transform:translateX(100%); visibility:hidden;
  transition:transform .28s cubic-bezier(.22,.61,.36,1), visibility 0s .28s;
}
#brx-header .tcm-mnav__panel.is-current{transform:none; visibility:visible; transition:transform .28s cubic-bezier(.22,.61,.36,1), visibility 0s}
#brx-header .tcm-mnav__panel.is-left{transform:translateX(-30%)}
/* Back stays put while a long stage scrolls under it, level with the menu's X.
   The gap above is a margin: sticky offsets count from inside the panel's padding. */
#brx-header .tcm-mnav__back{
  position:sticky; top:0; z-index:1; width:100%;
  display:flex; align-items:center; gap:10px; margin:62px 0 6px; padding:18px 28px 14px; background:var(--tcm-navy); border:0; cursor:pointer;
  font-family:var(--tcm-font-body); font-size:var(--tcm-chrome-micro); font-weight:400; letter-spacing:var(--tcm-track-button);
  text-transform:uppercase; line-height:1.25; color:rgba(255,255,255,.8);
}
#brx-header .tcm-mnav__back::before{font-family:"Font Awesome 6 Solid"; font-weight:900; content:"\f053"; font-size:11px; line-height:1}
#brx-header .tcm-mnav__title{
  margin:0; padding:4px 28px 10px; font-family:var(--tcm-font-body); font-size:var(--tcm-chrome-micro); font-weight:600;
  letter-spacing:var(--tcm-track-button); text-transform:uppercase; color:var(--tcm-primary);
}
#brx-header .tcm-mnav__row{
  display:flex; align-items:center; justify-content:space-between; gap:14px; width:100%; margin:0; padding:16px 28px;
  background:none; border:0; border-top:1px solid rgba(255,255,255,.12); cursor:pointer; text-align:left; text-decoration:none;
  font-family:var(--tcm-font-body); color:#fff;
}
#brx-header .tcm-mnav__row:last-child{border-bottom:1px solid rgba(255,255,255,.12)}
#brx-header .tcm-mnav__text{display:flex; flex-direction:column; gap:4px; min-width:0}
#brx-header .tcm-mnav__t{font-size:var(--tcm-chrome-micro); font-weight:400; letter-spacing:var(--tcm-track-button); text-transform:uppercase; line-height:1.25}
#brx-header .tcm-mnav__s{font-size:1.3rem; font-weight:300; line-height:1.35; color:rgba(255,255,255,.7)}
#brx-header .tcm-mnav__chev::after{font-family:"Font Awesome 6 Solid"; font-weight:900; content:"\f054"; font-size:11px; line-height:1; display:block}
#brx-header .tcm-mnav__head{display:flex; align-items:baseline; flex-wrap:wrap; gap:4px 14px; padding:0 28px 8px}
#brx-header .tcm-mnav__word{font-family:var(--tcm-font-script); font-size:4.4rem; line-height:1; color:#fff}
#brx-header .tcm-mnav__plain{font-size:1.4rem; font-weight:300; color:rgba(255,255,255,.75)}
#brx-header .tcm-mnav__group{
  margin:0; padding:20px 28px 6px; font-family:var(--tcm-font-body); font-size:1.2rem; font-weight:600; line-height:1.3;
  letter-spacing:.14em; text-transform:uppercase; color:var(--tcm-primary);
}
#brx-header .tcm-mnav__list{margin:0 0 4px; padding:0; list-style:none}
#brx-header .tcm-mnav__list a{
  display:block; padding:9px 28px; font-family:var(--tcm-font-body); font-size:1.5rem; font-weight:300; letter-spacing:.02em;
  line-height:1.35; text-transform:none; color:#fff; opacity:.92;
}
#brx-header .tcm-mnav__panel .tcm-mnav__row[href]{margin-top:16px}
#brx-header .tcm-mnav__panel .tcm-mnav__row[data-push] + .tcm-mnav__row[href]{margin-top:0}
#brx-header .tcm-mnav a:focus-visible,#brx-header .tcm-mnav button:focus-visible{outline:2px solid var(--tcm-primary); outline-offset:-2px}
@media (prefers-reduced-motion:reduce){
  #brx-header .tcm-mnav__panel,#brx-header .tcm-mnav__panel.is-current{transition:none}
}

/* ---- STATE 2: menu drops to its own row (single row needs ~1473px at 16px nav type) ---- */
@media (max-width:1499px){
#brx-header #brxe-hrow00{flex-wrap:wrap;height:auto;row-gap:12px;padding-top:16px;padding-bottom:16px}
#brx-header #brxe-hlogo0{order:1}
#brx-header #brxe-hcta00{order:2}
#brx-header #brxe-hnav00{order:3;width:100%}
#brx-header #brxe-hnav00 .bricks-nav-menu{width:100%;justify-content:center;flex-wrap:wrap}
#brx-header .bricks-nav-menu>li>.brx-megamenu{top:38px}
#brx-header{--tcm-header-h:112px}
}

/* Services mega menu: a stage's groups and links, from the Service posts
   (elements/service-groups.php, Menu style). The links keep the old
   hand-made ones' type; each group gets a small orange label, the site's
   small-label style. The header's hover underline already covers them
   (#brx-header .bricks-nav-menu a). */
.tcm-svc-menu{display:flex; flex-direction:column; gap:16px}
.tcm-svc-menu__label{
  margin:0 0 4px; font-family:var(--tcm-font-body); font-size:1.2rem; font-weight:600; line-height:1.3;
  letter-spacing:.14em; text-transform:uppercase; color:var(--tcm-primary);
}
.tcm-svc-menu ul{margin:0; padding:0; list-style:none; display:flex; flex-direction:column; gap:5px}
/* the header's nav rules give list items a 27px line; match the link */
#brx-header .tcm-svc-menu li{margin:0; padding:0; font-size:var(--tcm-mega-link); line-height:1.35}
#brx-header .tcm-svc-menu a{
  display:inline-block; font-family:var(--tcm-font-body); font-weight:300; font-size:var(--tcm-mega-link);
  line-height:1.35; letter-spacing:0; text-transform:none; color:#fff;
}

/* ---- Footer + mega menu columns stack ---- */
@media (max-width:991px){
#brx-footer #brxe-frow00{flex-direction:column;row-gap:40px}
#brx-footer #brxe-fcol01,#brx-footer #brxe-fcol02,#brx-footer #brxe-fcol03{width:100%}
#brx-header .brx-megamenu .brxe-block{flex-direction:column;row-gap:28px}
#brx-header .brx-megamenu .brxe-div{width:100%}
}

/* Between ~768 and 900 the logo (300px) plus the phone and CTA no longer fit
   one row, so the CTA wrapped and the header grew to three rows / 160px.
   Shrink the logo and tighten the CTA so it stays two rows down to 768. */
@media (max-width:900px){
#brx-header #brxe-hlogo0{width:220px}
#brx-header #brxe-hcta00{column-gap:16px}
}

/* ---- STATE 1b: laptops (992-1499px) keep ONE row (2026-10-17, option B).
   Smaller logo, nav type and button. The phone becomes a pill: the number
   shows when there is room; below 1300px it folds into a round icon that
   opens out to the left on hover or keyboard focus, over the nav, so the
   number is always one hover away. The phone link's rules carry an extra id:
   the brush-underline rules further down would otherwise win. ---- */
@media (min-width:992px) and (max-width:1499px){
#brx-header{--tcm-header-h:80px}
#brx-header #brxe-hrow00{flex-wrap:nowrap;height:80px;padding-top:0;padding-bottom:0;column-gap:20px}
#brx-header #brxe-hlogo0{order:1;flex:none;width:clamp(190px, 17vw, 240px)}
#brx-header #brxe-hnav00{order:2;width:auto;flex:1 1 auto;min-width:0}
#brx-header #brxe-hnav00 .bricks-nav-menu{justify-content:center;flex-wrap:nowrap}
#brx-header #brxe-hnav00 .bricks-nav-menu > li{margin-left:clamp(16px, 2vw, 28px)}
#brx-header #brxe-hnav00 .bricks-nav-menu > li:first-child{margin-left:0}
#brx-header #brxe-hnav00 .bricks-nav-menu a{font-size:clamp(14px, 1.15vw, 15px);letter-spacing:.09em}
/* li centred in 80px, ~22px tall: top = 80 - 28.75, less 2px of overlap (see the mega menu note) */
#brx-header .bricks-nav-menu>li>.brx-megamenu{top:49px}
#brx-header #brxe-hcta00{order:3;flex:none;column-gap:14px}
#brx-header #brxe-hbtn00{font-size:13px;padding:11px 20px;letter-spacing:.1em}
#brx-header #brxe-hph000{position:relative;display:flex;justify-content:flex-end;align-items:center;height:44px;min-width:44px;column-gap:0}
#brx-header #brxe-hphic0{position:absolute;right:11px;top:11px;width:22px;height:22px;z-index:2;pointer-events:none}
#brx-header #brxe-hph000 #brxe-hphtx0{
  display:flex;align-items:center;justify-content:flex-end;height:44px;box-sizing:border-box;
  padding:0 44px 0 18px;border:1px solid rgba(255,255,255,.35);border-radius:999px;background:var(--tcm-navy);
  white-space:nowrap;overflow:hidden;font-size:14px;letter-spacing:.06em;
  transition:max-width .3s cubic-bezier(.22,.61,.36,1),padding .3s cubic-bezier(.22,.61,.36,1),border-color .2s ease;
}
#brx-header #brxe-hph000 #brxe-hphtx0::after{display:none}
#brx-header #brxe-hph000 #brxe-hphtx0:hover,#brx-header #brxe-hph000 #brxe-hphtx0:focus-visible{border-color:var(--tcm-primary);outline:none}
}
@media (min-width:992px) and (max-width:1299px){
#brx-header #brxe-hph000{width:44px}
/* folded: only the icon shows; the number is clipped off the left */
#brx-header #brxe-hph000 #brxe-hphtx0{position:absolute;right:0;top:0;z-index:1;width:max-content;max-width:44px;padding-left:0}
#brx-header #brxe-hph000 #brxe-hphtx0:hover,#brx-header #brxe-hph000 #brxe-hphtx0:focus-visible{max-width:260px;padding-left:18px}
}
/* small laptops / tablets in landscape: tighter still */
@media (min-width:992px) and (max-width:1099px){
#brx-header #brxe-hrow00{column-gap:16px}
#brx-header #brxe-hlogo0{width:170px}
#brx-header #brxe-hnav00 .bricks-nav-menu > li{margin-left:14px}
#brx-header #brxe-hnav00 .bricks-nav-menu a{font-size:13.5px;letter-spacing:.07em}
#brx-header #brxe-hcta00{column-gap:10px}
#brx-header #brxe-hbtn00{padding:10px 16px;letter-spacing:.08em}
}
@media (min-width:992px) and (max-width:1299px) and (prefers-reduced-motion:reduce){
#brx-header #brxe-hph000 #brxe-hphtx0{transition:none}
}

/* ---- STATE 3: hamburger. Phone + CTA are hidden here. ---- */
@media (max-width:767px){
#brx-header #brxe-hnav00 .bricks-mobile-menu-toggle{display:block}
#brx-header #brxe-hnav00 .bricks-nav-menu-wrapper{display:none}
#brx-header #brxe-hsect0{padding-left:20px;padding-right:20px}
#brx-header #brxe-hrow00{flex-wrap:nowrap;padding-top:14px;padding-bottom:14px}
#brx-header #brxe-hlogo0{order:1;width:200px;max-width:52vw}
#brx-header #brxe-hnav00{order:2;width:auto}
#brx-header #brxe-hcta00{display:none}
}

/* ---- Header sticks, slides away while scrolling down, comes back on the way
   up (initRevealHeader in tcm-interactions.js). Phones since 2026-10-16, every
   width since 2026-10-17. Moved with `top`, not a transform: a transform would
   make the header the containing block of the fixed mobile menu panel and
   shrink the open menu to the header's size. ---- */
#brx-header{position:sticky; top:var(--wp-admin--admin-bar--height, 0px); z-index:999; transition:top .25s ease}
#brx-header.tcm-hdr-away{top:calc(-1 * var(--tcm-hdr-h, 100px) - 4px)}
.tcm-filterbar.is-sticky{top:calc(var(--wp-admin--admin-bar--height, 0px) + var(--tcm-hdr-shown, 0px)); transition:top .25s ease}
/* the admin bar scrolls with the page on small screens */
@media (max-width:600px){ #brx-header{top:0} }
@media (prefers-reduced-motion:reduce){
#brx-header,.tcm-filterbar.is-sticky{transition:none}
}

/* ---- Link hover: brush-stroke underline ---------------------------------
   The mark is a static tapered SVG; a clip reveals it left to right, so the
   stroke keeps its drawn character at any link width rather than stretching.

   IMPORTANT: the mark is absolutely positioned with a negative offset and adds
   NO padding. The mega menu's `top` is derived from the <li> being 24px tall
   (see the mega menu note above), so growing the link box would misplace it. */
/* Selector note: Bricks wraps any link that has a submenu -
     li > div.brx-submenu-toggle > a
   while plain items are just li > a. Targeting `li > a` therefore missed
   Services and Industries entirely, which is why the two mega menu items had
   no hover at all. `.bricks-nav-menu a` covers every shape, including the
   links inside .brx-megamenu (which lives inside the same li). */
#brx-header .bricks-nav-menu a:not(.bricks-button),
#brx-header #brxe-hphtx0,
#brx-footer .brxe-text-link{
  position:relative;
}
#brx-header .bricks-nav-menu a:not(.bricks-button)::after,
#brx-header #brxe-hphtx0::after,
#brx-footer .brxe-text-link::after{
  content:"";
  position:absolute;
  left:0; right:0; bottom:-7px; height:11px;
  z-index:999;                     /* above the panel, which Bricks sets to 998 */
  background:var(--tcm-brush) no-repeat left center/100% 100%;
  clip-path:inset(0 100% 0 0);
  transition:clip-path .34s cubic-bezier(.22,.61,.36,1);
  pointer-events:none;
}
#brx-header .bricks-nav-menu a:not(.bricks-button):hover::after,
#brx-header .bricks-nav-menu a:not(.bricks-button):focus-visible::after,
#brx-header #brxe-hphtx0:hover::after,
#brx-header #brxe-hphtx0:focus-visible::after,
#brx-footer .brxe-text-link:hover::after,
#brx-footer .brxe-text-link:focus-visible::after{
  clip-path:inset(0 0 0 0);
}

/* ---- Headline emphasis: the swoop -------------------------------------
   Italicise words in any heading and they get the orange brush stroke instead
   of italics. In the Bricks builder: select the words in the heading, then the
   I button in the inline toolbar (or Cmd+I). That writes <i>; typing <em> by
   hand works the same. Emphasis in a heading is always the swoop - one rule,
   nothing to remember.

   i:not([class]) because Font Awesome icons are also <i> elements, always
   with a class; the editor's italic never has one. .tcm-swoop is kept for the
   rare case outside a heading.

   The stroke is the link brush (--tcm-brush), sized in em so it scales with
   the heading, behind the letters and across the baseline, so it reads as a
   stroke of the brush under the word rather than a ruled underline. nowrap
   keeps the words and their stroke on one line. */
:is(h1,h2,h3,h4,h5,h6) :is(em, i:not([class])),
.tcm-swoop{
  position:relative;
  z-index:0;
  font-style:normal;
  white-space:nowrap;
}
:is(h1,h2,h3,h4,h5,h6) :is(em, i:not([class]))::after,
.tcm-swoop::after{
  content:"";
  position:absolute;
  left:-2%; right:-2%;
  bottom:-.08em; height:.3em;
  z-index:-1;
  background:var(--tcm-brush) no-repeat left center/100% 100%;
  pointer-events:none;
}

/* Inside an article an italic heading is the writer's emphasis (often a
   whole pull quote), not the accent: plain italics that wrap, no stroke. */
.tcm-article :is(h2,h3,h4,h5,h6) :is(em, i:not([class])){font-style:italic; white-space:normal}
.tcm-article :is(h2,h3,h4,h5,h6) :is(em, i:not([class]))::after{content:none}

/* Keep the parent item underlined for as long as its mega menu is open.
   Without this the mark vanishes the moment the pointer leaves the link to
   enter the panel, so the item being browsed looks unselected. */
#brx-header .bricks-nav-menu > li.open > a::after,
#brx-header .bricks-nav-menu > li.open > .brx-submenu-toggle > a::after{
  clip-path:inset(0 0 0 0);
}

/* ---- Button hover: ripple from the pointer ------------------------------
   The effect specified in the Figma Motion Notes for the lead-magnet download
   button, applied to every button. Pointer position comes from
   assets/js/tcm-interactions.js.

   The orange keyline is not decoration: the header is already navy, so a
   bare slate ripple would dissolve the button into the chrome. It must be a
   POSITIVE z-index pseudo-element - negative-z children paint after the
   element's own background, so an inset ring or border would be covered. */
:is(#brx-header,#brx-footer,main) .bricks-button:not(.tcm-why-more){
  position:relative;
  overflow:hidden;
  isolation:isolate;
}
:is(#brx-header,#brx-footer,main) .bricks-button:not(.tcm-why-more)::before{
  content:"";
  position:absolute; z-index:-1;
  left:var(--tcm-x,50%); top:var(--tcm-y,50%);
  /* aspect-ratio keeps it a true circle at any button width. Sizing by
     percentage of the button means a wide button still gets fully covered,
     without hard-coding a pixel diameter. */
  width:0; aspect-ratio:1; height:auto; border-radius:50%;
  background:var(--tcm-navy);
  transform:translate(-50%,-50%);
  transition:width .5s cubic-bezier(.22,.61,.36,1);
}
:is(#brx-header,#brx-footer,main) .bricks-button:not(.tcm-why-more)::after{
  content:"";
  position:absolute; inset:0; z-index:1; pointer-events:none;
  border:2px solid var(--tcm-primary);
  /* inherit, not a literal: the header CTA is 12px but the mega menu's
     "start here" is a 99px pill, and a fixed radius shows at the ends */
  border-radius:inherit;
  opacity:0;
  transition:opacity .35s ease;
}
/* 210%. The circle is centred on the pointer, so its RADIUS has to reach the
   far corner - diameter >= 2*sqrt(w^2+h^2), which is ~203% of width for a wide
   short button. 250% cleared the button in ~190ms and spent the rest of the
   half second growing out of sight; 210% covers with a little margin while
   keeping most of the duration on-screen. */
:is(#brx-header,#brx-footer,main) .bricks-button:not(.tcm-why-more):is(:hover,:focus-visible)::before{
  width:210%;
}
:is(#brx-header,#brx-footer,main) .bricks-button:not(.tcm-why-more):is(:hover,:focus-visible)::after{
  opacity:1;
}

/* The outlined CTA is the one button that already carries a keyline of its own.
   The shared orange ring is an inset pseudo-element, so it lands a pixel inside
   that white border and you see both at once - two outlines, a pixel apart.

   So this button opts out of the ring and moves the colour onto the border it
   already has - one outline, drawn at the button's true edge rather than inset.
   The border is 2px so it carries the same weight as the ring the solid buttons
   get, and the button's padding is 1px lighter per side to compensate, keeping
   it the same size as the solid button beside it. */
:is(#brx-header,#brx-footer,main) .bricks-button.tcm-btn-ghost{
  transition:border-color .35s ease;
}
:is(#brx-header,#brx-footer,main) .bricks-button.tcm-btn-ghost:is(:hover,:focus-visible){
  border-color:var(--tcm-primary);
}
:is(#brx-header,#brx-footer,main) .bricks-button.tcm-btn-ghost::after{
  content:none;
}

/* Honour the OS setting: state changes still happen, they just do not travel.
   Each selector here must be the SAME shape as the rule it switches off, or it
   loses on specificity and does nothing. `li > a::after` and a bare
   `.bricks-button::before` both did exactly that: :not() adds a class's worth,
   so the underline and the ripple kept animating for reduced-motion visitors. */
@media (prefers-reduced-motion:reduce){
  #brx-header .bricks-nav-menu a:not(.bricks-button)::after,
  #brx-header #brxe-hphtx0::after,
  #brx-footer .brxe-text-link::after,
  :is(#brx-header,#brx-footer,main) .bricks-button:not(.tcm-why-more)::before,
  :is(#brx-header,#brx-footer,main) .bricks-button:not(.tcm-why-more)::after,
  :is(#brx-header,#brx-footer,main) .bricks-button.tcm-btn-ghost{
    transition-duration:.01ms;
  }
}

/* =========================================================================
   TEAM PAGE (Figma "Team Page", 238:169)
   Section IDs on this page start with `tm`. Rules that must beat a Bricks
   #id rule carry the section ID as well, for the reason given in the hero
   notes above.
   ========================================================================= */

/* Spacing on this page comes from each wrapper's gap, not from the theme's
   default heading and paragraph margins, which doubled every gap. An element
   given its own margin in Bricks still wins (#id beats this). */
[id^="brxe-tm"] :is(h1,h2,h3,h4,h5,h6,p){margin-block:0}
[id^="brxe-tm"] .tcm-prose p:not(:last-child){margin-bottom:1.1em}

/* ---- Inner page header: headline + a stack of photos --------------------
   The three photos are ordinary Image elements, so each is swapped in the
   builder. They sit in one grid cell and are fanned by rotation; clicking
   the stack (initPhotoStacks) sends the top photo to the back. */
.tcm-stack{
  position:relative;
  display:grid;
  width:min(100%, 490px);
  aspect-ratio:460/360;
  margin-inline:auto;
  cursor:pointer;
  -webkit-tap-highlight-color:transparent;
}
.tcm-stack .tcm-stack__photo{
  grid-area:1/1;
  width:100%; height:100%;
  object-fit:cover;
  border-radius:16px;
  border:7px solid #fff;
  box-shadow:0 0 20px rgba(11,11,11,.22);
  transition:transform .7s cubic-bezier(.22,.61,.36,1);
  --r:0deg; --x:0px; --y:0px;
  transform:translate(var(--x), var(--y)) rotate(var(--r));
}
/* Resting positions from Figma: 0.88deg at the back, -2.52 in the middle,
   4.22 on top. Before the script runs, DOM order decides; after, data-pos. */
/* Order in the HTML sets the stack only until the script takes over; after
   that the slot (data-pos) decides. Without :not([data-pos]) the nth-child
   rules tied with the data-pos ones and the later rule won, so the third
   photo in the HTML stayed on top after a shuffle. */
.tcm-stack .tcm-stack__photo:nth-child(1):not([data-pos]),
.tcm-stack .tcm-stack__photo[data-pos="2"]{--r:.9deg;  --x:22px; --y:-8px;  z-index:1}
.tcm-stack .tcm-stack__photo:nth-child(2):not([data-pos]),
.tcm-stack .tcm-stack__photo[data-pos="1"]{--r:-2.5deg; --x:6px;  --y:6px;  z-index:2}
.tcm-stack .tcm-stack__photo:nth-child(3):not([data-pos]),
.tcm-stack .tcm-stack__photo[data-pos="0"]{--r:4.2deg; --x:-10px; --y:12px; z-index:3}
@media (hover:hover){
  .tcm-stack:hover .tcm-stack__photo[data-pos="2"]{--r:6deg;  --x:64px;  --y:-18px}
  .tcm-stack:hover .tcm-stack__photo[data-pos="1"]{--r:-6deg; --x:-44px; --y:4px}
  .tcm-stack:hover .tcm-stack__photo[data-pos="0"]{--r:2deg;  --x:-6px;  --y:18px}
}
.tcm-stack:focus-visible{outline:2px solid #fff; outline-offset:12px; border-radius:18px}
/* The photo on its way out swings clear of the stack to the right, then
   tucks in at the back. z-index flips at the halfway point, while it is off
   to the side, so it never cuts through the photos in front. It starts from
   exactly where the photo was (--tcm-from, captured by the script) and ends
   at the back slot's own position (var(--x/--y/--r), resting or fanned out
   on hover), so nothing snaps when the animation hands back to the slot. */
.tcm-stack .tcm-stack__photo.is-leaving{animation:tcm-stack-out .9s cubic-bezier(.45,0,.25,1) both}
@keyframes tcm-stack-out{
  0%  {transform:var(--tcm-from, translate(-10px, 12px) rotate(4.2deg)); z-index:4}
  48% {transform:translate(58%, -2%) rotate(11deg); z-index:4}
  52% {transform:translate(58%, -2%) rotate(11deg); z-index:0}
  100%{transform:translate(var(--x), var(--y)) rotate(var(--r)); z-index:0}
}
.tcm-stack__pause{
  position:absolute; right:-14px; bottom:-18px; z-index:5;
  width:34px; height:34px;
  display:grid; place-items:center;
  padding:0;
  border:2px solid rgba(255,255,255,.8); border-radius:50%;
  background:rgba(11,11,11,.35); color:#fff;
  font-size:1.1rem;
  cursor:pointer;
  transition:border-color .3s ease, color .3s ease;
}
.tcm-stack__pause .fa-play{margin-left:2px}
.tcm-stack__pause:hover{border-color:var(--tcm-primary); color:var(--tcm-primary)}
.tcm-stack__pause:focus-visible{outline:2px solid #fff; outline-offset:3px}

@media (max-width:991px){
  #brxe-tmhero #brxe-tmherorow{flex-direction:column; align-items:flex-start; row-gap:56px}
  #brxe-tmhero #brxe-tmherotxt,
  #brxe-tmhero #brxe-tmherostack{width:100%}
}

/* ---- Hybrid model: three columns ---------------------------------------- */
.tcm-hybrid{display:grid; grid-template-columns:repeat(3, 1fr); gap:32px; width:100%}
.tcm-hybrid__card{
  display:flex; flex-direction:column; align-items:flex-start; gap:16px;
  padding:40px 36px;
  border-radius:16px;
}
.tcm-hybrid__card:nth-child(1){background:var(--tcm-paper)}
.tcm-hybrid__card:nth-child(2){background:var(--tcm-forest-tint)}
.tcm-hybrid__card:nth-child(3){background:var(--tcm-mist)}
/* On a mist or paper section the tinted cards disappear: white instead. */
.tcm-hybrid--white .tcm-hybrid__card{background:#fff}
.tcm-tag{
  display:inline-block;
  padding:5px 14px;
  border-radius:9px;
  font-family:var(--tcm-font-body);
  font-size:1.2rem; font-weight:600; line-height:1.4;
  letter-spacing:.1em; text-transform:uppercase;
}
/* The Figma tag on the paper card was paper on paper, so it had no pill at
   all. Each tag now takes a 15% tint of its own colour. */
.tcm-tag--orange{background:var(--tcm-primary-tint-15); color:var(--tcm-primary)}
.tcm-tag--forest{background:var(--tcm-forest-tint-15); color:var(--tcm-forest)}
.tcm-tag--muted {background:rgba(85,85,85,.12);        color:var(--tcm-ink-muted)}
@media (max-width:991px){
  .tcm-hybrid{grid-template-columns:1fr; gap:18px}
  .tcm-hybrid__card{padding:30px 26px}
}

/* ---- Photo strip --------------------------------------------------------
   Five Image elements in a row at the Figma widths (278/247/419/205/273), so
   they keep their proportions as the row narrows. A scrolling strip on
   phones, where five across would be matchsticks. */
.tcm-strip{
  display:flex; gap:16px; justify-content:center;
  width:100%;
  padding:6px 16px 20px;
}
.tcm-strip .tcm-strip__photo{
  flex:278 1 0; min-width:0;
  height:306px;
  object-fit:cover;
  border-radius:16px;
  box-shadow:0 0 15px rgba(11,11,11,.18);
  transition:transform .45s cubic-bezier(.22,.61,.36,1);
}
.tcm-strip .tcm-strip__photo:nth-child(2){flex-grow:247}
.tcm-strip .tcm-strip__photo:nth-child(3){flex-grow:419}
.tcm-strip .tcm-strip__photo:nth-child(4){flex-grow:205}
.tcm-strip .tcm-strip__photo:nth-child(5){flex-grow:273}
@media (hover:hover){
  .tcm-strip .tcm-strip__photo:hover{transform:translateY(-6px) rotate(-1deg)}
  .tcm-strip .tcm-strip__photo:nth-child(even):hover{transform:translateY(-6px) rotate(1deg)}
}
@media (max-width:767px){
  .tcm-strip{
    justify-content:flex-start;
    overflow-x:auto; scroll-snap-type:x mandatory;
    scrollbar-width:none;
  }
  .tcm-strip::-webkit-scrollbar{display:none}
  .tcm-strip .tcm-strip__photo{flex:0 0 72%; height:280px; scroll-snap-align:center}
}

/* two text columns that stack */
.tcm-cols{display:grid; grid-template-columns:1fr 1fr; gap:48px 83px; width:100%}
/* Split intro: a heading group on the left, its copy and button on the right
   (the Team page's "How we work"). Stacks on narrow screens. */
.tcm-split{display:grid; grid-template-columns:1fr 1fr; gap:40px 64px; align-items:center; width:100%}
.tcm-split > .tcm-headgroup{align-items:flex-start}
@media (max-width:900px){ .tcm-split{grid-template-columns:1fr; gap:24px} }
@media (max-width:900px){ .tcm-cols{grid-template-columns:1fr} }

/* a text link with a chevron, used for "meet the team" and friends */
.tcm-textlink{
  display:inline-flex; align-items:center; gap:10px;
  font-family:var(--tcm-font-body);
  font-size:var(--tcm-button); letter-spacing:var(--tcm-track-button);
  text-transform:uppercase; line-height:1.2;
  color:var(--tcm-ink);
  text-decoration:none;
  position:relative;
}
.tcm-textlink i{font-size:1.1rem}
.tcm-textlink::after{
  content:""; position:absolute; left:0; right:0; bottom:-7px; height:11px;
  background:var(--tcm-brush) no-repeat left center/100% 100%;
  clip-path:inset(0 100% 0 0);
  transition:clip-path .34s cubic-bezier(.22,.61,.36,1);
  pointer-events:none;
}
.tcm-textlink:hover::after,.tcm-textlink:focus-visible::after{clip-path:inset(0 0 0 0)}

/* ---- Stats bar ---------------------------------------------------------- */
.tcm-statbar{display:grid; grid-template-columns:repeat(4, 1fr); width:100%}
.tcm-statbar__item{
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:8px;
  padding:4px 24px;
  text-align:center;
}
.tcm-statbar__item + .tcm-statbar__item{border-left:1px solid rgba(255,255,255,.15)}
.tcm-statbar__v{
  font-family:var(--tcm-font-body); font-weight:700;
  font-size:clamp(4rem, 3.9vw, 5.6rem); line-height:1.1;
  color:var(--tcm-primary);
}
.tcm-statbar__l{
  font-family:var(--tcm-font-body);
  font-size:clamp(1.4rem, 1.4vw, 2rem); letter-spacing:.2em; line-height:1.35;
  text-transform:uppercase;
  color:var(--tcm-mist); opacity:.8;
  /* Figma broke "PARTNERSHIPS" mid-word at its 231px box. Words stay whole. */
  overflow-wrap:normal; word-break:normal; hyphens:none;
}
@media (max-width:767px){
  .tcm-statbar{grid-template-columns:1fr 1fr; row-gap:34px}
  .tcm-statbar__item:nth-child(3){border-left:0}
}

/* ---- Team grid + Team Card (elements/team-card.php) ---------------------
   The card's head room is padding on the card itself, so the photo can rise
   above the face without overflowing anything that clips. The two faces sit
   in one grid cell, so the card is as tall as the taller face and nothing
   jumps when it turns over. */
.tcm-tgrid{
  display:grid;
  grid-template-columns:repeat(4, minmax(0, 1fr));
  gap:36px 24px;
  width:100%;
}
@media (max-width:1180px){ .tcm-tgrid{grid-template-columns:repeat(3, minmax(0, 1fr))} }
@media (max-width:860px) { .tcm-tgrid{grid-template-columns:repeat(2, minmax(0, 1fr)); gap:28px 18px} }
@media (max-width:540px) { .tcm-tgrid{grid-template-columns:minmax(0, 340px); justify-content:center} }

.tcm-tcard{
  --tcm-tcard-head:60px;
  --tcm-tcard-ease:cubic-bezier(.22,.61,.36,1);
  position:relative;
  padding-top:var(--tcm-tcard-head);
  perspective:1600px;
  cursor:pointer;
  -webkit-tap-highlight-color:transparent;
}
.tcm-tcard__inner{
  position:relative;
  display:grid;
  height:100%;
  transform-style:preserve-3d;
  transition:transform .8s var(--tcm-tcard-ease);
}
.tcm-tcard.is-flipped .tcm-tcard__inner{transform:rotateY(180deg)}
/* A small turn on hover says "this card has another side". */
@media (hover:hover){
  .tcm-tcard:hover .tcm-tcard__inner{transform:rotateY(-9deg)}
  .tcm-tcard.is-flipped:hover .tcm-tcard__inner{transform:rotateY(171deg)}
}

.tcm-tcard__face{
  grid-area:1/1;
  display:flex; flex-direction:column;
  border-radius:16px;
  box-shadow:0 0 15px rgba(11,11,11,.18);
  -webkit-backface-visibility:hidden;
  backface-visibility:hidden;
}

/* Front */
.tcm-tcard__front{position:relative; background:#fff}
/* LinkedIn (2026-10-15): the flip chevron's twin, bottom left of the front.
   Same size and tint; it fills forest when hovered itself, not with the card,
   so the chevron stays the card's main control. */
.tcm-tcard__li{
  position:absolute; left:16px; bottom:16px; z-index:5;
  width:36px; height:36px;
  display:grid; place-items:center;
  border-radius:50%;
  background:var(--tcm-forest-tint-15);
  color:var(--tcm-forest);
  text-decoration:none;
  transition:background-color .3s ease, color .3s ease;
}
.tcm-tcard__li:hover{background:var(--tcm-forest); color:#fff}
.tcm-tcard__li:focus-visible{outline:2px solid var(--tcm-primary); outline-offset:3px}
.tcm-tcard__media{
  position:relative;
  aspect-ratio:311/292;
  border-radius:16px 16px 0 0;
  /* the drawn landscape; the backdrop control sets the variable */
  background:var(--tcm-tcard-bg) var(--tcm-tcard-bgx, 50%) center / cover no-repeat, var(--tcm-paper);
  border-bottom:4px solid var(--tcm-forest);
}
.tcm-tcard .tcm-tcard__photo{
  position:absolute; left:50%; bottom:0;
  height:calc(100% + var(--tcm-tcard-head));
  width:auto; max-width:none;
  translate:-50% 0;
  object-fit:contain; object-position:bottom center;
  transform-origin:50% 100%;
  transition:scale .5s var(--tcm-tcard-ease);
  pointer-events:none;
}
@media (hover:hover){
  .tcm-tcard:hover .tcm-tcard__photo,
  .tcm-tcard:hover .tcm-tcard__shade > span{scale:1.035}   /* the silhouette on the back grows with the photo, so the turn stays seamless */
}
.tcm-tcard__body{
  flex:1;
  display:flex; flex-direction:column; gap:6px;
  padding:18px 24px 56px;           /* foot room for the flip chevron */
  background:var(--tcm-forest-tint);
  border-radius:0 0 16px 16px;
}
.tcm-tcard__name{
  margin:0;
  font-family:var(--tcm-font-display);
  font-size:var(--tcm-h5); font-weight:600; line-height:1.15;
  color:var(--tcm-ink);
}
.tcm-tcard__role{
  margin:0 0 6px;
  font-family:var(--tcm-font-body);
  font-size:1.15rem; font-weight:600; letter-spacing:.08em; line-height:1.4;
  text-transform:uppercase;
  color:var(--tcm-primary);
}
.tcm-tcard__bio{
  margin:0;
  font-size:1.4rem; font-weight:300; line-height:1.55;
  color:var(--tcm-ink);
}

/* Back: the Figma "My Why" card. Forest, with the parchment multiplied in so
   it reads as a painted card rather than a flat fill. */
.tcm-tcard__back{
  transform:rotateY(180deg);
  gap:14px;
  padding:30px 26px 60px;
  background-color:var(--tcm-forest);
  background-image:var(--tcm-paper-tile);
  background-blend-mode:multiply;
  color:#fff;
}
/* The person turned around (2026-10-15): the photo as a darker-green
   silhouette, mirrored, in exactly the front's media box, so it seems to turn
   with the card. The head rises above the card like on the front (the back no
   longer clips its overflow), and it fades out lower down so the shape never
   ends in a hard line. */
.tcm-tcard__back > *{position:relative; z-index:1}
.tcm-tcard__back > .tcm-tcard__shade{
  position:absolute; z-index:0; top:0; left:0; right:0;
  aspect-ratio:311/292;
  border-bottom:4px solid transparent;   /* the front's media box has a 4px rule the photo stands on */
  pointer-events:none;
}
.tcm-tcard__shade > span{
  position:absolute; left:50%; bottom:0;
  height:calc(100% + var(--tcm-tcard-head));
  aspect-ratio:var(--tcm-tcard-ratio, 2/3);
  translate:-50% 0;
  transform:scaleX(-1);
  transform-origin:50% 100%;                         /* grows from the feet, like the photo */
  transition:scale .5s var(--tcm-tcard-ease);
  background:#2a4d35;
  /* Keep every edge of the box empty: the photos' outermost columns are not
     quite transparent, and while the card is tilted and scaled on hover the
     GPU samples a pixel past the top edge, which showed as a hairline above
     the head. So the box is trimmed and the fade starts transparent. */
  clip-path:inset(3px 2px 0);
  -webkit-mask:var(--tcm-tcard-photo) center bottom / contain no-repeat, linear-gradient(transparent, #000 6px, #000 70%, transparent);
  -webkit-mask-composite:source-in;
          mask:var(--tcm-tcard-photo) center bottom / contain no-repeat intersect, linear-gradient(transparent, #000 6px, #000 70%, transparent);
}
/* The sketch and the silhouette mask are CSS images, which ignore lazy loading, so
   all 13 cards fetched them on load (about 1.4 MB on Team). They switch on when a
   card nears the screen (is-near, initTeamCards); <noscript> in the element shows them. */
.tcm-tcard:not(.is-near) .tcm-tcard__media{background:var(--tcm-paper)}
.tcm-tcard:not(.is-near) .tcm-tcard__shade > span{-webkit-mask:none; mask:none; visibility:hidden}
.tcm-tcard__why-title{
  margin:0;
  font-family:var(--tcm-font-display);
  font-size:4rem; font-weight:600; line-height:1;
  color:#fff;
}
.tcm-tcard__why-title span{
  font-family:var(--tcm-font-script); font-weight:400;
  font-size:1.2em;
  margin-left:.08em;
}
.tcm-tcard__why-title::after{
  content:""; display:block;
  width:38px; height:3px; margin-top:16px;
  border-radius:2px;
  background:var(--tcm-primary);
}
.tcm-tcard__why{margin:0; padding:0; border:0; font-size:inherit}
.tcm-tcard__why p{
  margin:0;
  font-family:var(--tcm-font-display);
  font-size:1.75rem; font-weight:600; line-height:1.45;
  color:#fff;
}
.tcm-tcard__why p::before{content:"\201C"}
.tcm-tcard__why p::after{content:"\201D"}
.tcm-tcard__sign{margin-top:auto; display:flex; flex-direction:column; align-items:flex-start; gap:2px}
.tcm-tcard__sig-script{
  font-family:var(--tcm-font-script);
  font-size:5.4rem; line-height:1;
  color:#fff;
  rotate:-5deg;
  transform-origin:left bottom;
  margin-bottom:10px;
}
.tcm-tcard__sig-img{width:auto; max-width:70%; max-height:80px; object-fit:contain}
/* .tcm-tcard__sig-name (the name under the signature) was removed 2026-10-15 */

/* The one control: a chevron in the bottom-right corner of whichever face is
   showing. Round, so it reads as a button without needing a label. */
.tcm-tcard__flip{
  position:absolute; right:16px; bottom:16px; z-index:5;
  width:36px; height:36px;
  display:grid; place-items:center;
  padding:0; margin:0;
  border:0; border-radius:50%;
  background:var(--tcm-forest-tint-15);
  color:var(--tcm-forest);
  font-size:1.2rem;
  cursor:pointer;
  transition:background-color .3s ease, color .3s ease;
}
.tcm-tcard__flip i{transition:transform .45s var(--tcm-tcard-ease)}
.tcm-tcard:hover .tcm-tcard__flip{background:var(--tcm-forest); color:#fff}
.tcm-tcard.is-flipped .tcm-tcard__flip{background:rgba(255,255,255,.16); color:#fff}
.tcm-tcard.is-flipped:hover .tcm-tcard__flip{background:#fff; color:var(--tcm-forest)}
.tcm-tcard.is-flipped .tcm-tcard__flip i{transform:rotate(180deg)}
.tcm-tcard__flip:focus-visible{outline:2px solid var(--tcm-primary); outline-offset:3px}
.tcm-tcard .screen-reader-text{
  position:absolute; width:1px; height:1px; overflow:hidden;
  clip:rect(0 0 0 0); clip-path:inset(50%); white-space:nowrap;
}

@media (max-width:540px){
  .tcm-tcard__why p{font-size:1.9rem}
}

/* Reduced motion: the card still changes sides, it just crossfades. */
@media (prefers-reduced-motion:reduce){
  .tcm-tcard__inner,
  .tcm-tcard.is-flipped .tcm-tcard__inner,
  .tcm-tcard:hover .tcm-tcard__inner{transform:none; transition:none}
  .tcm-tcard__back{transform:none; opacity:0; transition:opacity .2s linear}
  .tcm-tcard__front{transition:opacity .2s linear}
  .tcm-tcard.is-flipped .tcm-tcard__back{opacity:1}
  .tcm-tcard.is-flipped .tcm-tcard__front{opacity:0}
  .tcm-tcard__photo, .tcm-tcard__shade > span{transition:none}
}

/* ---- Video cards -------------------------------------------------------- */
.tcm-vgrid{display:grid; grid-template-columns:1fr 1fr; gap:48px 20px; width:100%}
.tcm-vcard{display:flex; flex-direction:column; gap:10px}
.tcm-vcard .brxe-video{
  aspect-ratio:16/9;
  border-radius:16px;
  overflow:hidden;
  background:#1b2030;
  margin-bottom:14px;
}
/* The play control gets the same hover as every other button: a slate fill
   growing from the middle and an orange keyline. Bricks centres the icon
   with transform:translate(-50%,-50%), so nothing here may set transform.
   The icon is Font Awesome's <i>, whose ::before is the glyph, so the fill is
   ::after (behind the glyph inside its own stacking context) and the keyline
   is an outline, which paints above the fill. */
.tcm-vcard .bricks-video-overlay-icon{
  width:72px; height:72px;
  display:grid; place-items:center;
  border-radius:50%;
  background:var(--tcm-primary);
  color:#fff; font-size:2.2rem;
  padding-left:4px;
  overflow:hidden; isolation:isolate;
  outline:2px solid transparent; outline-offset:-2px;
  transition:outline-color .35s ease;
}
.tcm-vcard .bricks-video-overlay-icon::after{
  content:"";
  position:absolute; left:50%; top:50%; z-index:-1;
  width:0; aspect-ratio:1; border-radius:50%;
  background:var(--tcm-navy);
  transform:translate(-50%,-50%);
  transition:width .5s cubic-bezier(.22,.61,.36,1);
}
.tcm-vcard .brxe-video:hover .bricks-video-overlay-icon,
.tcm-vcard .bricks-video-overlay-icon:focus-visible{outline-color:var(--tcm-primary)}
.tcm-vcard .brxe-video:hover .bricks-video-overlay-icon::after,
.tcm-vcard .bricks-video-overlay-icon:focus-visible::after{width:150%}
@media (prefers-reduced-motion:reduce){
  .tcm-vcard .bricks-video-overlay-icon,
  .tcm-vcard .bricks-video-overlay-icon::after{transition-duration:.01ms}
}
@media (max-width:767px){ .tcm-vgrid{grid-template-columns:1fr} }

/* ---- Logo marquee (elements/logo-marquee.php) --------------------------- */
.tcm-marquee{
  position:relative;
  width:100%;
  overflow:hidden;
  -webkit-mask-image:linear-gradient(90deg, transparent, #000 7%, #000 93%, transparent);
          mask-image:linear-gradient(90deg, transparent, #000 7%, #000 93%, transparent);
}
.tcm-marquee__track{
  display:flex; width:max-content;
  animation:tcm-marquee var(--tcm-marquee-dur, 60s) linear infinite;
}
.tcm-marquee__list{
  display:flex; align-items:center;
  gap:var(--tcm-marquee-gap, 72px);
  padding:10px var(--tcm-marquee-gap, 72px) 10px 0;
  margin:0; list-style:none;
}
.tcm-marquee__item{flex:none; margin:0}
.tcm-marquee .tcm-marquee__img{
  display:block;
  height:var(--tcm-marquee-h, 130px); width:auto; max-width:none;
  object-fit:contain;
}
.tcm-marquee:hover .tcm-marquee__track,
.tcm-marquee:focus-within .tcm-marquee__track,
.tcm-marquee.is-paused .tcm-marquee__track{animation-play-state:paused}
@keyframes tcm-marquee{to{transform:translateX(-50%)}}
.tcm-marquee__pause{
  position:absolute; right:10px; bottom:0; z-index:2;
  width:32px; height:32px;
  display:grid; place-items:center;
  padding:0; border:1px solid rgba(11,11,11,.25); border-radius:50%;
  background:#fff; color:var(--tcm-ink);
  font-size:1rem;
  cursor:pointer;
  opacity:.55; transition:opacity .3s ease;
}
.tcm-marquee__pause:hover,.tcm-marquee__pause:focus-visible{opacity:1}
/* No JavaScript: the logos' sources are never swapped in (logo-marquee.php), so a
   <noscript> copy shows them as a still, wrapped row instead. */
.tcm-marquee.is-static{-webkit-mask-image:none; mask-image:none}
.tcm-marquee.is-static .tcm-marquee__list{flex-wrap:wrap; justify-content:center; row-gap:28px; padding:0}
.tcm-marquee__pause[hidden]{display:none}
@media (max-width:767px){ .tcm-marquee{--tcm-marquee-h:96px; --tcm-marquee-gap:44px} }
@media (prefers-reduced-motion:reduce){
  .tcm-marquee{-webkit-mask-image:none; mask-image:none}
  .tcm-marquee__track{animation:none; width:auto}
  .tcm-marquee__list{flex-wrap:wrap; justify-content:center; row-gap:28px; padding:0}
  .tcm-marquee__list[aria-hidden]{display:none}
}

/* ---- Moving-image pause button (Header Slider, Masonry Scroller) -------- */
/* WCAG 2.2.2: motion that runs longer than five seconds needs a control that
   stops it. Hover and keyboard focus pause as well. initMotionPause(). */
.tcm-motion-pause{
  position:absolute; right:14px; bottom:14px; z-index:3;
  width:32px; height:32px;
  display:grid; place-items:center;
  padding:0; border:1px solid rgba(11,11,11,.25); border-radius:50%;
  background:#fff; color:var(--tcm-ink); font-size:1rem;
  cursor:pointer; opacity:.6; transition:opacity .3s ease;
}
.tcm-motion-pause:hover,.tcm-motion-pause:focus-visible{opacity:1}
.tcm-motion-pause[hidden]{display:none}

/* ---- Header Slider (elements/header-slider.php) ------------------------- */
/* Columns of photos drifting in alternate directions. Each track holds its
   list twice and moves by half its height, so the loop is seamless; the
   tiles use margin rather than gap so that half is exact. */
.tcm-hslider{position:relative; width:100%; height:100%; min-height:520px; overflow:hidden}
.tcm-hslider__cols{
  position:absolute; inset:0;
  display:grid; grid-template-columns:repeat(var(--tcm-hs-cols, 3), minmax(0, 1fr)); gap:16px;
}
.tcm-hslider__track{
  display:flex; flex-direction:column;
  animation:tcm-hs-up var(--tcm-hs-dur, 48s) linear infinite;
}
.tcm-hslider__col.is-down .tcm-hslider__track{animation-name:tcm-hs-down}
/* third column starts part-way through, so columns 1 and 3 do not march in step */
.tcm-hslider__col:nth-child(3) .tcm-hslider__track{animation-delay:calc(var(--tcm-hs-dur, 48s) * -.4)}
.tcm-hslider__tile{margin:0 0 16px; border-radius:15px; overflow:hidden; aspect-ratio:3/4}
.tcm-hslider__tile.is-s1{aspect-ratio:1/1}
.tcm-hslider__tile.is-s2{aspect-ratio:4/5}
.tcm-hslider__tile.is-s3{aspect-ratio:5/4}
.tcm-hslider__img{display:block; width:100%; height:100%; object-fit:cover}
.tcm-hslider:hover .tcm-hslider__track,
.tcm-hslider:focus-within .tcm-hslider__track,
.tcm-hslider.is-paused .tcm-hslider__track{animation-play-state:paused}
@keyframes tcm-hs-up{from{transform:translateY(0)} to{transform:translateY(-50%)}}
@keyframes tcm-hs-down{from{transform:translateY(-50%)} to{transform:translateY(0)}}
@media (prefers-reduced-motion:reduce){ .tcm-hslider__track{animation:none} }

/* ---- Masonry Scroller (elements/masonry-scroller.php) ------------------- */
/* One strip, drifting left: a large image, then two stacked, alternating.
   Every size is a share of the strip height (--tcm-ms-h), so one number
   scales the whole pattern. */
.tcm-masonry{--tcm-ms-h:560px; --tcm-ms-g:24px; position:relative; width:100%; overflow:hidden}
.tcm-masonry__track{display:flex; width:max-content; animation:tcm-marquee var(--tcm-ms-dur, 40s) linear infinite}
.tcm-masonry__list{display:flex; height:var(--tcm-ms-h); margin:0; padding:0; list-style:none}
.tcm-masonry__col{
  flex:none; margin:0 var(--tcm-ms-g) 0 0;
  display:flex; flex-direction:column; justify-content:center; gap:var(--tcm-ms-g);
}
.tcm-masonry__tile{
  display:block; width:100%; padding:0; border:0; background:none; cursor:zoom-in;
  border-radius:16px; overflow:hidden;
}
.tcm-masonry__tile .tcm-masonry__img{transition:transform .5s ease}
.tcm-masonry__tile:hover .tcm-masonry__img{transform:scale(1.03)}
.tcm-masonry__tile:focus-visible{outline:3px solid var(--tcm-primary); outline-offset:3px}

/* Lightbox (initLightbox): a native <dialog>, so focus is trapped and Escape
   closes it for free. */
.tcm-lightbox{
  width:100vw; height:100vh; max-width:none; max-height:none; margin:0; padding:0;
  border:0; background:rgba(11,11,11,.92); color:#fff;
}
.tcm-lightbox::backdrop{background:transparent}
.tcm-lightbox[open]{display:grid; place-items:center}
.tcm-lightbox__fig{margin:0; display:flex; flex-direction:column; align-items:center; gap:14px; padding:64px 88px}
.tcm-lightbox__img{max-width:min(1400px, calc(100vw - 176px)); max-height:calc(100vh - 170px); width:auto; height:auto; border-radius:10px; box-shadow:0 10px 40px rgba(0,0,0,.4)}
.tcm-lightbox__cap{font-size:1.5rem; color:var(--tcm-mist); text-align:center; min-height:1.5em}
.tcm-lightbox__btn{
  position:absolute; display:grid; place-items:center;
  width:48px; height:48px; padding:0; border:0; border-radius:50%;
  background:rgba(255,255,255,.12); color:#fff; font-size:1.8rem; cursor:pointer;
  transition:background-color .25s ease;
}
.tcm-lightbox__btn:hover,.tcm-lightbox__btn:focus-visible{background:var(--tcm-primary); outline:none}
.tcm-lightbox__close{top:20px; right:20px}
.tcm-lightbox__prev{left:20px; top:50%; translate:0 -50%}
.tcm-lightbox__next{right:20px; top:50%; translate:0 -50%}
@media (max-width:767px){
  .tcm-lightbox__fig{padding:64px 12px 80px}
  .tcm-lightbox__img{max-width:calc(100vw - 24px)}
  .tcm-lightbox__prev,.tcm-lightbox__next{top:auto; bottom:20px; translate:none}
}
.tcm-masonry__img{display:block; width:100%; height:100%; object-fit:cover}
.tcm-masonry__col.is-large{width:calc(var(--tcm-ms-h) * .54)}
.tcm-masonry__col.is-portrait .tcm-masonry__tile{height:calc(var(--tcm-ms-h) * .72)}
.tcm-masonry__col.is-square .tcm-masonry__tile{height:calc(var(--tcm-ms-h) * .54)}
.tcm-masonry__col.is-stack{width:calc(var(--tcm-ms-h) * .43)}
.tcm-masonry__col.is-stack .tcm-masonry__tile{height:calc(var(--tcm-ms-h) * .43)}
.tcm-masonry__col.is-stack .tcm-masonry__tile:last-child{height:calc(var(--tcm-ms-h) * .57 - var(--tcm-ms-g))}
.tcm-masonry__col.is-flip .tcm-masonry__tile:first-child{height:calc(var(--tcm-ms-h) * .57 - var(--tcm-ms-g))}
.tcm-masonry__col.is-flip .tcm-masonry__tile:last-child{height:calc(var(--tcm-ms-h) * .43)}
.tcm-masonry:hover .tcm-masonry__track,
.tcm-masonry:focus-within .tcm-masonry__track,
.tcm-masonry.is-paused .tcm-masonry__track{animation-play-state:paused}
@media (max-width:767px){ .tcm-masonry{--tcm-ms-h:360px; --tcm-ms-g:14px} }
/* Reduced motion: a still strip the visitor can scroll sideways instead. */
@media (prefers-reduced-motion:reduce){
  .tcm-masonry{overflow-x:auto}
  .tcm-masonry__track{animation:none}
  .tcm-masonry__list[aria-hidden]{display:none}
}

/* ---- Reviews wall (elements/reviews.php) -------------------------------- */
.tcm-reviews{display:flex; flex-direction:column; align-items:center; gap:28px; width:100%}
.tcm-reviews__wall{
  width:100%;
  columns:var(--tcm-reviews-cols, 4) 260px;
  column-gap:20px;
  margin:0; padding:0; list-style:none;
}
.tcm-review{break-inside:avoid; margin:0 0 20px}
.tcm-review figure{
  margin:0;
  display:flex; flex-direction:column; gap:14px;
  padding:22px 22px 24px;
  border-radius:12px;
  background:var(--tcm-mist);
}
.tcm-review__top{display:flex; align-items:center; justify-content:space-between}
.tcm-review__stars{display:inline-flex; gap:3px; color:var(--tcm-primary); font-size:1.5rem}
.tcm-review__g{width:22px; height:22px}
.tcm-review__text{margin:0; padding:0; border:0; font-size:inherit}
.tcm-review__text p{margin:0; font-family:var(--tcm-font-body); font-style:normal; font-size:1.5rem; font-weight:300; line-height:1.55; color:var(--tcm-ink)}
.tcm-review__text p + p{margin-top:.8em}
.tcm-review:not(.is-open) .tcm-review__text{
  display:-webkit-box;
  -webkit-box-orient:vertical;
  -webkit-line-clamp:var(--tcm-reviews-lines, 8);
  line-clamp:var(--tcm-reviews-lines, 8);
  overflow:hidden;
}
.tcm-review__more{
  align-self:flex-start;
  margin-top:-6px; padding:2px 0;
  border:0; background:none;
  font-size:1.4rem; font-weight:400;
  color:var(--tcm-ink-muted);
  text-decoration:underline; text-underline-offset:3px;
  cursor:pointer;
}
.tcm-review__more[hidden]{display:none}
.tcm-review__who{display:flex; flex-direction:column; gap:2px; margin:0; text-align:left}
.tcm-review__name{font-size:1.6rem; font-weight:600; color:var(--tcm-ink)}
.tcm-review__date{font-size:1.3rem; color:var(--tcm-ink-muted)}
.tcm-reviews__source{
  display:inline-flex; align-items:center; gap:10px;
  font-size:var(--tcm-button); letter-spacing:var(--tcm-track-button); text-transform:uppercase;
  color:var(--tcm-ink); text-decoration:none;
}

/* ---- Community: the community board -------------------------------------
   Option A of the redesign (2026-09-23): the section reads as a board on the
   parchment. Taped prints of the team and Kelowna, two "ticket" cards for how
   we give, the supported organizations pinned up as notes (Pinboard element),
   and a photo card for the land acknowledgement beside the DEI card.
   The tape is one shared mark, a translucent orange strip. */
.tcm-give{--tcm-tape:rgba(248,152,29,.3)}
.tcm-give__top{display:grid; grid-template-columns:1.05fr .95fr; gap:70px; align-items:center}

/* Taped prints. Each is an ordinary Image element in a div, so the photo is
   swapped in the builder. The second print overlaps the first. */
.tcm-snaps{display:grid; grid-template-columns:1fr; position:relative; padding:20px 10px 30px}
.tcm-snap{
  grid-area:1/1;
  position:relative;
  background:#fff;
  padding:12px 12px 54px;
  box-shadow:0 12px 30px rgba(11,11,11,.2);
  transition:rotate .45s cubic-bezier(.22,.61,.36,1), translate .45s cubic-bezier(.22,.61,.36,1);
}
.tcm-snap::before{
  content:""; position:absolute; top:-15px; left:50%; translate:-50% 0;
  width:110px; height:32px; rotate:-4deg;
  background:var(--tcm-tape);
  box-shadow:0 1px 2px rgba(11,11,11,.08);
}
/* 58% and 64%: the second print starts right of the first one's centre, so
   the first caption stays readable under the overlap. */
.tcm-snap:nth-child(1){width:58%; justify-self:start; align-self:start; rotate:-4deg}
.tcm-snap:nth-child(2){width:64%; justify-self:end; align-self:end; margin-top:130px; rotate:2.5deg; z-index:1}
.tcm-snap:nth-child(2)::before{rotate:5deg}
@media (hover:hover){
  .tcm-snaps:hover .tcm-snap:nth-child(1){rotate:-6deg; translate:-10px -6px}
  .tcm-snaps:hover .tcm-snap:nth-child(2){rotate:1deg; translate:8px 4px}
}
/* the first print's caption sits left, clear of the print overlapping it */
.tcm-snap:nth-child(1) .tcm-snap__cap{text-align:left; padding-left:20px}
.tcm-snap .tcm-snap__img{display:block; width:100%; height:auto; aspect-ratio:4/3.1; object-fit:cover}
.tcm-snap__cap{
  position:absolute; left:0; right:0; bottom:10px; margin:0;
  text-align:center;
  font-family:var(--tcm-font-script); font-size:3.4rem; line-height:1;
  color:var(--tcm-ink);
}

/* Tickets: a figure on a stub, a dashed tear line, the copy. */
.tcm-tickets{display:grid; grid-template-columns:1fr 1fr; gap:28px; margin-top:80px}
.tcm-ticket{
  display:grid; grid-template-columns:auto 1fr; gap:30px; align-items:center;
  padding:34px 36px;
  background:#fff;
  border-radius:14px;
  box-shadow:0 0 15px rgba(11,11,11,.12);
}
.tcm-ticket:nth-child(1){rotate:-1deg}
.tcm-ticket:nth-child(2){rotate:.8deg}
.tcm-ticket__stub{
  width:190px;                       /* a fixed stub, so "Pro bono" breaks onto
                                        two lines like "$500" sits on one */
  padding-right:30px;
  border-right:2px dashed rgba(11,11,11,.13);
}
[id^="brxe-tm"] .tcm-ticket__big{
  font-family:var(--tcm-font-body); font-weight:700;
  font-size:clamp(4.4rem, 4vw, 6rem); line-height:.95; letter-spacing:-.02em;
  color:var(--tcm-primary);
}
.tcm-ticket__small{
  margin-top:10px !important;
  font-size:1.3rem; font-weight:400; letter-spacing:.14em; line-height:1.3;
  text-transform:uppercase;
  color:var(--tcm-ink-muted);
}

.tcm-board-head{display:flex; align-items:baseline; justify-content:space-between; gap:20px; flex-wrap:wrap; margin:96px 0 30px}
.tcm-board-head__count{font-family:var(--tcm-font-script); font-size:3.2rem; line-height:1; color:var(--tcm-primary); rotate:-3deg}

/* Pinboard (elements/pinboard.php). The tilt comes from the note's place in
   the grid, so the board looks hand-pinned without anyone setting angles. */
.tcm-pinboard{
  display:grid;
  grid-template-columns:repeat(var(--tcm-pin-cols, 6), minmax(0, 1fr));
  gap:26px 22px;
  margin:0; padding:0; list-style:none;
}
.tcm-pin{
  position:relative;
  aspect-ratio:1.35;
  display:grid; place-items:center;
  padding:18px;
  margin:0;
  background:#fff;
  box-shadow:0 6px 14px rgba(11,11,11,.12);
  transition:rotate .35s cubic-bezier(.22,.61,.36,1), translate .35s cubic-bezier(.22,.61,.36,1), box-shadow .35s ease;
}
.tcm-pin::before{
  content:""; position:absolute; top:-9px; left:50%; translate:-50% 0;
  width:64px; height:20px;
  background:var(--tcm-tape);
}
.tcm-pin:nth-child(3n){rotate:-2.2deg}
.tcm-pin:nth-child(3n+1){rotate:1.6deg}
.tcm-pin:nth-child(4n+2){rotate:-.6deg}
.tcm-pin:nth-child(2n)::before{rotate:-6deg}
.tcm-pin:nth-child(5n)::before{rotate:8deg}
@media (hover:hover){
  .tcm-pin:hover{rotate:0deg; translate:0 -4px; box-shadow:0 12px 22px rgba(11,11,11,.16)}
}
.tcm-pin .tcm-pin__img{width:100%; height:100%; max-height:78px; object-fit:contain}
.tcm-pin__link{display:contents}

/* Home + DEI: one card split in two. The photo half is a div with a Bricks
   background, so the photo is swapped in the builder's Background control. */
.tcm-home{
  display:grid; grid-template-columns:1fr 1fr;
  margin-top:104px;
  border-radius:18px; overflow:hidden;
  background:#fff;
  box-shadow:0 0 20px rgba(11,11,11,.14);
}
.tcm-home__photo{
  position:relative; isolation:isolate;
  min-height:440px;
  display:flex; flex-direction:column; justify-content:flex-end; align-items:flex-start; gap:14px;
  padding:40px;
}
.tcm-home__photo::before{
  content:""; position:absolute; inset:0; z-index:-1;
  background:linear-gradient(0deg, rgba(11,11,11,.84), rgba(11,11,11,.55) 60%, rgba(11,11,11,.25));
}
.tcm-home__dei{display:flex; flex-direction:column; justify-content:center; gap:16px; padding:44px}

@media (max-width:991px){
  .tcm-give__top{grid-template-columns:1fr; gap:40px}
  .tcm-snaps{max-width:560px; width:100%; margin-inline:auto}
  .tcm-tickets{grid-template-columns:1fr; gap:22px; margin-top:56px}
  /* grid-template-columns, not the variable: Bricks writes the Columns
     setting as an #id rule, which a class rule setting the variable loses to */
  .tcm-pinboard{grid-template-columns:repeat(4, minmax(0, 1fr))}
  .tcm-home{grid-template-columns:1fr; margin-top:72px}
  .tcm-home__photo{min-height:420px}
}
@media (max-width:575px){
  .tcm-pinboard{grid-template-columns:repeat(2, minmax(0, 1fr)); gap:20px 16px}
  .tcm-ticket__stub{width:auto}
  .tcm-ticket{grid-template-columns:1fr; gap:18px; padding:28px 26px}
  .tcm-ticket__stub{border-right:0; padding:0 0 18px; border-bottom:2px dashed rgba(11,11,11,.13)}
  .tcm-home__photo,.tcm-home__dei{padding:30px 26px}
  .tcm-snap__cap{font-size:2.8rem}
}
@media (prefers-reduced-motion:reduce){
  .tcm-snap,.tcm-pin{transition:none}
}

/* ---- Bricks builder: make the layered pieces selectable ------------------
   Several things here are absolutely positioned on top of one another. A Why
   card is three stacked layers - the tear wrapper, the card front and the
   copy hidden behind it - and the hero has a video layer and a scrim over its
   text. That is right on the front end and unusable in the builder, where you
   cannot click what is underneath something else.

   Bricks adds `bricks-is-frontend` to <body> on the front end only (see its
   setup.php), so everything below applies to the builder canvas alone and can
   never reach a visitor. !important is needed because Bricks writes element
   settings as #id rules, which outrank any class selector here.

   The effect is simply that the layers stand in normal flow, one after
   another, so each can be seen, clicked and edited. */
body:not(.bricks-is-frontend) .tcm-why-cut,
body:not(.bricks-is-frontend) .tcm-why-face,
body:not(.bricks-is-frontend) .tcm-why-panel,
body:not(.bricks-is-frontend) .tcm-why-more,
body:not(.bricks-is-frontend) .tcm-case__photo,
body:not(.bricks-is-frontend) .tcm-case__logo,
body:not(.bricks-is-frontend) .tcm-case__cta,
body:not(.bricks-is-frontend) .tcm-bgvideo,
body:not(.bricks-is-frontend) .tcm-bgvideo__media,
body:not(.bricks-is-frontend) .tcm-bgvideo__media video,
body:not(.bricks-is-frontend) #brxe-herovel{
  position:static !important;
  inset:auto !important;
  clip-path:none !important;
  translate:none !important;
  z-index:auto !important;
}

/* the containers that were sized to hold those overlays */
body:not(.bricks-is-frontend) .tcm-why-box{min-height:0 !important}
body:not(.bricks-is-frontend) .tcm-case__media{
  aspect-ratio:auto !important;
  display:block !important;
}
body:not(.bricks-is-frontend) .tcm-case__photo{width:100% !important; height:auto !important}
body:not(.bricks-is-frontend) .tcm-why-face{background:#fff !important}
/* the background video shows its first frame in the builder, in flow, at a
   size you can click; the veil would only grey it out */
body:not(.bricks-is-frontend) .tcm-bgvideo__media video{display:block; width:100% !important; height:auto !important; opacity:1 !important}
body:not(.bricks-is-frontend) .tcm-bgvideo__veil{display:none !important}

/* decorative pseudo-elements: the torn flap, the card gradient and the tear
   strips all sit over the top of real content and cannot be selected anyway */
body:not(.bricks-is-frontend) .tcm-why-box::after,
body:not(.bricks-is-frontend) .tcm-why-box::before,
body:not(.bricks-is-frontend) .tcm-case__media::after,
body:not(.bricks-is-frontend) .tcm-case__media::before{display:none !important}

/* Team page, builder only: the photo stack lies flat so each photo can be
   picked, and the team cards stop turning under the cursor. */
body:not(.bricks-is-frontend) .tcm-stack{display:flex !important; gap:8px; aspect-ratio:auto !important}
body:not(.bricks-is-frontend) .tcm-stack .tcm-stack__photo{transform:none !important; width:32% !important; height:auto !important}
body:not(.bricks-is-frontend) .tcm-tcard:hover .tcm-tcard__inner{transform:none}
body:not(.bricks-is-frontend) .tcm-tcard.is-flipped:hover .tcm-tcard__inner{transform:rotateY(180deg)}

/* =========================================================================
   CONTACT PAGE (Figma "Contact Page", 342:578)
   Section IDs on this page start with `cn`. Same margin reset as the Team
   page: spacing comes from each wrapper's gap.
   ========================================================================= */
[id^="brxe-cn"] :is(h1,h2,h3,h4,h5,h6,p){margin-block:0}
.tcm-contact-list .screen-reader-text,
.tcm-map .screen-reader-text{
  position:absolute; width:1px; height:1px; overflow:hidden;
  clip:rect(0 0 0 0); clip-path:inset(50%); white-space:nowrap;
}

/* ---- Hero: headline + form card ----------------------------------------- */
.tcm-contact-hero__text{flex:1 1 0; min-width:0}
.tcm-form-card{
  flex:0 1 637px; min-width:0;
  background:rgba(255,255,255,.96);
  border-radius:16px;
  padding:44px 56px 48px;
  box-shadow:0 24px 60px rgba(11,11,11,.28);
  /* the hero button and the forest band both jump here; clear the header */
  scroll-margin-top:120px;
}
@media (max-width:991px){
  #brxe-cnhero #brxe-cnherorow{flex-direction:column; align-items:stretch}
  .tcm-form-card{flex-basis:auto}
}
@media (max-width:575px){
  .tcm-form-card{padding:32px 22px 32px}
  /* Bricks writes each field's width as an #id rule, hence the !important */
  .tcm-form .form-group:not(.submit-button-wrapper){width:100% !important; padding-left:0 !important; padding-right:0 !important}
}

/* ---- The message form (Bricks' own Form element, class tcm-form) --------
   Bricks lays the fields out as a wrapping row of .form-group blocks whose
   width is the field's "Width (%)". Half-width fields get a gutter from their
   own padding so two still fit one row. */
.tcm-form{--tcm-field-h:50px; row-gap:0}
.tcm-form .form-group{padding:0 0 20px}
.tcm-form .form-group:nth-child(odd):is(:nth-child(1),:nth-child(3)){padding-right:8px}
.tcm-form .form-group:is(:nth-child(2),:nth-child(4)){padding-left:8px}
.tcm-form label{
  display:block; margin-bottom:8px;
  text-transform:none; letter-spacing:normal;
  font-size:var(--tcm-subtext); line-height:1.4; font-weight:400;
  color:var(--tcm-ink);
}
.tcm-form label .required{color:var(--tcm-ink-muted)}
.tcm-form :is(input[type="text"],input[type="email"],input[type="tel"],textarea){
  width:100%;
  min-height:var(--tcm-field-h);
  padding:12px 16px;
  font-size:1.6rem; line-height:1.4; font-weight:400;
  color:var(--tcm-ink);
  background:#f9f8f6;
  border:1.5px solid rgba(11,11,11,.15);
  border-radius:8px;
  transition:border-color .2s ease, box-shadow .2s ease, background-color .2s ease;
}
.tcm-form textarea{resize:vertical; min-height:140px}
.tcm-form ::placeholder{color:rgba(11,11,11,.4); opacity:1}
.tcm-form :is(input,textarea):hover{border-color:rgba(11,11,11,.3)}
.tcm-form :is(input,textarea):focus{
  outline:none; background:#fff;
  border-color:var(--tcm-forest);
  box-shadow:0 0 0 3px var(--tcm-forest-tint-15);
}
.tcm-form .form-group.html{padding-bottom:16px}
.tcm-form__note{margin:0; font-size:var(--tcm-subtext); line-height:1.5; color:var(--tcm-ink-muted)}
.tcm-form .submit-button-wrapper{padding:0; width:auto}
.tcm-form .bricks-button[type="submit"]{
  background-color:var(--tcm-primary); color:#fff;
  font-size:var(--tcm-chrome-micro); letter-spacing:var(--tcm-track-button);
  text-transform:uppercase; line-height:1.1; font-weight:400;
  padding:14px 26px; border-radius:10px; gap:10px;
}
.tcm-form .message{font-size:1.6rem; border-radius:8px}
/* Thank-you card (initQuoteThanks in tcm-interactions.js): the form folds
   away and the success message becomes a paper coaster, the same paper,
   card edge and pressed rim as the Challenge Coasters. */
.tcm-form.is-sent > .form-group{display:none}
.tcm-form .message.success:has(.tcm-sent){
  position:relative; width:100%; margin:8px 0 6px; padding:48px 28px 44px;
  border-radius:22px; color:var(--tcm-ink); rotate:-1deg;
  background-color:#efe7dc;
  background-image:var(--tcm-paper-tile), var(--tcm-paper-tile);
  background-blend-mode:multiply;
  background-size:340px auto, 520px auto;
  background-position:0 0, 137px 61px;
  box-shadow:0 2px 0 #cbbca7, 0 3px 0 #bfae96, 0 12px 24px rgba(11,11,11,.16);
  animation:tcm-sent-in .45s cubic-bezier(.22,.61,.36,1) both;
}
.tcm-form .message.success:has(.tcm-sent)::before{content:""; position:absolute; inset:10px; border-radius:15px; border:1.5px solid rgba(11,11,11,.09); pointer-events:none}
.tcm-form .message.success:focus{outline:none}
.tcm-sent{position:relative; width:100%; display:flex; flex-direction:column; align-items:center; text-align:center; gap:14px}
.tcm-sent__icon{width:64px; height:64px; border-radius:50%; background:var(--tcm-primary); color:#fff; display:grid; place-items:center; font-size:2.6rem}
.tcm-sent__title{margin:0; font-family:var(--tcm-font-script); font-size:clamp(4.4rem, 12vw, 5.6rem); line-height:1; color:var(--tcm-navy); white-space:nowrap}
.tcm-sent__text{margin:0; max-width:34ch; font-size:1.8rem; line-height:1.5; color:var(--tcm-ink)}
.tcm-sent__more{margin:4px 0 0; max-width:40ch; font-size:1.5rem; line-height:1.5; color:var(--tcm-ink-muted)}
.tcm-sent__more a{color:var(--tcm-ink); text-decoration:underline; text-underline-offset:3px}
.tcm-sent__more a[href^="tel"]{white-space:nowrap}
@keyframes tcm-sent-in{from{opacity:0; translate:0 12px; rotate:-3deg}}
@media (prefers-reduced-motion:reduce){ .tcm-form .message.success:has(.tcm-sent){animation:none} }

/* ---- Contact details + map --------------------------------------------- */
.tcm-contact-split,
.tcm-contact-split.brxe-block{
  display:grid;
  align-items:stretch;
  grid-template-columns:minmax(0, 609fr) minmax(0, 831fr);
}
.tcm-contact-split__info{padding:80px 70px 80px clamp(40px, 7.1vw, 102px)}
.tcm-contact-split__map{position:relative; min-height:640px}
@media (max-width:991px){
  .tcm-contact-split.brxe-block{grid-template-columns:1fr}
  .tcm-contact-split__info{padding:64px 40px}
  .tcm-contact-split__map{min-height:420px}
}
@media (max-width:575px){
  .tcm-contact-split__info{padding:56px 20px}
  .tcm-contact-split__map{min-height:360px}
}

/* The swoop, as a rule under a heading: the same brush as the link underline. */
.tcm-brush-rule{width:88px; height:10px; background:var(--tcm-brush) no-repeat left center/100% 100%}

/* Contact Details element (elements/contact-details.php) */
.tcm-contact-list{display:flex; flex-direction:column; gap:28px; margin:0; width:100%}
.tcm-contact-list__group{display:flex; flex-direction:column; gap:4px; position:relative}
.tcm-contact-list--rules .tcm-contact-list__group + .tcm-contact-list__group{padding-top:28px}
.tcm-contact-list--rules .tcm-contact-list__group + .tcm-contact-list__group::before{
  content:""; position:absolute; top:0; left:0;
  width:min(378px, 100%); height:1px; background:var(--tcm-forest); opacity:.45;
}
.tcm-contact-list dd{margin:0}
.tcm-contact-list__label{
  margin-bottom:4px;
  font-size:var(--tcm-callout); letter-spacing:var(--tcm-track-callout);
  text-transform:uppercase; font-weight:600; line-height:1.1;
  color:var(--tcm-primary);
}
/* Every number is Lexend Bold, and the emails and address match them. */
.tcm-contact-list__value{font-size:var(--tcm-body); line-height:1.4; font-weight:700; color:var(--tcm-ink)}
/* Links take the site's link hover: the orange brush drawn in left to right,
   the same mark and timing as the header and footer links. inline-block so
   the two-line address gets one stroke under its whole block. */
.tcm-contact-list__value a{color:inherit; text-decoration:none; position:relative; display:inline-block}
.tcm-contact-list__value a::after{
  content:"";
  position:absolute;
  left:0; right:0; bottom:-7px; height:11px;
  background:var(--tcm-brush) no-repeat left center/100% 100%;
  clip-path:inset(0 100% 0 0);
  transition:clip-path .34s cubic-bezier(.22,.61,.36,1);
  pointer-events:none;
}
.tcm-contact-list__value a:hover::after,
.tcm-contact-list__value a:focus-visible::after{clip-path:inset(0 0 0 0)}
.tcm-contact-list__value a:focus-visible{outline:2px solid var(--tcm-forest); outline-offset:4px; border-radius:2px}
@media (prefers-reduced-motion:reduce){
  .tcm-contact-list__value a::after{transition-duration:.01ms}
}
.tcm-contact-list__note{margin-top:4px !important; font-size:var(--tcm-subtext); line-height:1.5; font-weight:300; color:var(--tcm-ink-muted)}

.tcm-social-icon{transition:transform .2s ease}
.tcm-social-icon:hover{transform:translateY(-3px)}
.tcm-social-icon svg{display:block}

/* Map Embed element (elements/map-embed.php) */
.tcm-map{position:absolute; inset:0; background:#e8e6e1}
.tcm-contact-split__map .tcm-map{position:absolute}
.tcm-map__frame{display:block; width:100%; height:100%; border:0}
.tcm-map--soft .tcm-map__frame{filter:saturate(.55) contrast(.96); transition:filter .4s ease}
.tcm-map--soft:hover .tcm-map__frame{filter:none}
.tcm-map__directions{
  position:absolute; right:16px; top:16px; z-index:1;
  display:inline-flex; align-items:center; gap:10px;
  padding:12px 20px; border-radius:99px;
  background:#fff; color:var(--tcm-ink);
  font-size:var(--tcm-chrome-micro); letter-spacing:var(--tcm-track-button);
  text-transform:uppercase; line-height:1.1;
  box-shadow:0 6px 20px rgba(11,11,11,.22);
  transition:background-color .2s ease, color .2s ease;
}
.tcm-map__directions i{color:var(--tcm-primary); transition:color .2s ease}
.tcm-map__directions:hover,
.tcm-map__directions:focus-visible{background:var(--tcm-forest); color:#fff}
.tcm-map__directions:hover i,
.tcm-map__directions:focus-visible i{color:#fff}

/* ---- Numbered Steps element (elements/steps.php) ------------------------ */
.tcm-steps{list-style:none; margin:0; padding:0; width:100%}
.tcm-step__title{
  font-family:var(--tcm-font-body); font-size:var(--tcm-h7); font-weight:400; line-height:1.2;
  color:var(--tcm-ink);
}
.tcm-step__text{font-size:var(--tcm-body); font-weight:300; line-height:1.5; color:var(--tcm-ink-muted)}
/* Every number is Lexend Bold. */
.tcm-step__num{font-family:var(--tcm-font-body); font-weight:700; font-size:2rem; line-height:1; color:var(--tcm-ink)}

/* Timeline: markers on a line, a card beside each. The line is drawn per
   step, from each marker down to the next, so it stops at the last icon
   however tall the cards are. Without script (or with reduced motion) it is
   solid orange, the finished route. With initStepTimelines() running
   (.is-tracking) the segments turn into a dashed track and a solid orange
   line fills over them as the reader scrolls: --tcm-steps-span is the
   distance from first to last marker, --tcm-steps-p the progress, 0 to 1. */
.tcm-steps--timeline{--tcm-marker:96px; --tcm-steps-gap-y:28px; position:relative; display:flex; flex-direction:column; gap:var(--tcm-steps-gap-y)}
.tcm-steps--timeline .tcm-step:not(:last-child)::before{
  content:""; position:absolute; z-index:-1; width:3px;
  left:calc(var(--tcm-marker) / 2 - 1.5px);
  top:calc(var(--tcm-marker) / 2);
  height:calc(100% + var(--tcm-steps-gap-y));
  background:var(--tcm-primary);
}
.tcm-steps--timeline.is-tracking .tcm-step:not(:last-child)::before{
  background:repeating-linear-gradient(to bottom, color-mix(in srgb, var(--tcm-primary) 45%, transparent) 0 8px, transparent 8px 16px);
}
.tcm-steps--timeline.is-tracking::after{
  content:""; position:absolute; width:3px; border-radius:2px;
  left:calc(var(--tcm-marker) / 2 - 1.5px);
  top:calc(var(--tcm-marker) / 2);
  height:calc(var(--tcm-steps-span, 0px) * var(--tcm-steps-p, 0));
  background:var(--tcm-primary);
}
.tcm-steps--timeline .tcm-step{
  position:relative; z-index:1;
  display:grid; grid-template-columns:var(--tcm-marker) minmax(0, 1fr); column-gap:32px; align-items:start;
}
.tcm-step__marker{
  width:var(--tcm-marker); height:var(--tcm-marker); border-radius:50%;
  display:grid; place-items:center;
  background:#fff; border:3px solid var(--tcm-primary);
  transition:border-color .35s ease, transform .35s cubic-bezier(.22,.61,.36,1);
}
.tcm-step__icon{width:66%; height:66%; object-fit:contain; display:block}
/* Steps the line has not reached yet wait in a quiet border (script only). */
.tcm-steps--timeline.is-tracking .tcm-step:not(.is-reached) .tcm-step__marker{border-color:#e3ddd3}
.tcm-steps--timeline.is-tracking .tcm-step.is-reached .tcm-step__marker{transform:scale(1.04)}
.tcm-step__card{background:var(--tcm-mist); border-radius:14px; padding:24px 28px; display:flex; flex-direction:column; gap:8px}
.tcm-step__meta{
  font-size:var(--tcm-callout); letter-spacing:var(--tcm-track-callout);
  text-transform:uppercase; font-weight:600; line-height:1.1;
  color:var(--tcm-primary);   /* small orange text: the standing brand call, see TODO */
}
/* The finale: the last step is the payoff, in navy. */
.tcm-steps--finale .tcm-step:last-child .tcm-step__card{background:var(--tcm-navy)}
.tcm-steps--finale .tcm-step:last-child :is(.tcm-step__title){color:#fff}
.tcm-steps--finale .tcm-step:last-child .tcm-step__text{color:rgba(255,255,255,.85)}
@media (max-width:575px){
  .tcm-steps--timeline{--tcm-marker:64px; --tcm-steps-gap-y:20px}
  .tcm-steps--timeline .tcm-step{column-gap:16px}
  .tcm-step__card{padding:20px}
}
@media (prefers-reduced-motion:reduce){
  .tcm-step__marker{transition:none}
}

/* Row: numbered badges side by side, joined by a dashed trail. */
.tcm-steps--row{
  --tcm-steps-gap:48px;
  display:grid; grid-template-columns:repeat(var(--tcm-steps-n, 4), minmax(0, 1fr));
  gap:40px var(--tcm-steps-gap);
}
.tcm-steps--row .tcm-step{position:relative; display:flex; flex-direction:column; align-items:flex-start; gap:16px}
.tcm-steps--row .tcm-step__num{
  display:grid; place-items:center;
  width:56px; height:56px; border-radius:50%;
  background:var(--tcm-primary);
  position:relative; z-index:1;
}
.tcm-steps--trail .tcm-step:not(:last-child)::before{
  content:""; position:absolute; top:27px; height:0;
  left:72px; right:calc(-1 * var(--tcm-steps-gap) + 16px);
  border-top:2px dashed color-mix(in srgb, var(--tcm-primary) 55%, transparent);
}
@media (max-width:991px){
  .tcm-steps--row{grid-template-columns:repeat(2, minmax(0, 1fr))}
  .tcm-steps--trail .tcm-step::before{display:none}
}
@media (max-width:575px){
  .tcm-steps--row{grid-template-columns:1fr; gap:32px}
}

/* ---- What happens next: heading column + timeline ---------------------- */
.tcm-next{display:grid; grid-template-columns:minmax(0, 5fr) minmax(0, 7fr); column-gap:90px; row-gap:48px; align-items:start}
.tcm-next__intro{position:sticky; top:48px}
/* The promises: a rich-text list, each line ticked in forest. */
.tcm-checks ul{list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:14px}
.tcm-checks li{display:flex; gap:12px; align-items:center; font-size:1.7rem; line-height:1.4; color:var(--tcm-ink)}
.tcm-checks li::before{
  content:""; flex:0 0 24px; height:24px; border-radius:50%;
  background:var(--tcm-forest-tint-15) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='M5 10.5l3 3 7-7' fill='none' stroke='%23366444' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/15px no-repeat;
}
@media (max-width:991px){
  .tcm-next{grid-template-columns:1fr}
  .tcm-next__intro{position:static}
}

/* ---- FAQ Accordion element (elements/faq.php) --------------------------- */
.tcm-faq{
  width:100%;
  background:#fff; border-radius:20px; padding:12px 0;
  box-shadow:0 10px 40px rgba(11,11,11,.08);
  interpolate-size:allow-keywords;
}
.tcm-faq__item + .tcm-faq__item{border-top:1px solid #e5e7eb}
/* The 12px under the question lives on the item, not as a negative margin on
   the answer: while an item closes, a negative margin collapses through the
   shrinking ::details-content box and stops counting on the last frame, which
   made the item jump 12px taller as it finished closing (2026-10-15). */
.tcm-faq__item{padding-bottom:12px}
.tcm-faq__q{
  list-style:none; cursor:pointer;
  display:flex; align-items:center; justify-content:space-between; gap:32px;
  padding:30px 40px 18px;
}
.tcm-faq__q::-webkit-details-marker{display:none}
.tcm-faq__qtext{
  font-family:var(--tcm-font-display); font-weight:600;
  font-size:var(--tcm-h5); line-height:1.25; color:var(--tcm-ink);
}
.tcm-faq__toggle{
  flex:0 0 40px; height:40px; border-radius:50%;
  background:var(--tcm-mist); position:relative;
  transition:background-color .25s ease;
}
/* Figma's hand-drawn arrow (the homepage slider's), used as a mask so it takes
   the forest colour; it points down when shut and up when open. */
.tcm-faq__toggle::before{
  content:""; position:absolute; inset:-7px;
  background:var(--tcm-forest);
  -webkit-mask:url("../brand/hand-arrow.png") center/100% 100% no-repeat;
          mask:url("../brand/hand-arrow.png") center/100% 100% no-repeat;
  transform:rotate(90deg);
  transition:transform .35s cubic-bezier(.22,.61,.36,1), background-color .25s ease;
}
.tcm-faq__item[open] .tcm-faq__toggle::before{transform:rotate(-90deg)}
.tcm-faq__q:hover .tcm-faq__toggle{background:var(--tcm-forest)}
.tcm-faq__q:hover .tcm-faq__toggle::before{background:#fff}
.tcm-faq__q:hover .tcm-faq__qtext{color:var(--tcm-forest)}
.tcm-faq__q:focus-visible{outline:2px solid var(--tcm-forest); outline-offset:-4px; border-radius:12px}
.tcm-faq__a{padding:0 112px 20px 40px}
.tcm-faq__a p{margin:0; font-size:var(--tcm-body); font-weight:300; line-height:1.55; color:var(--tcm-ink-muted)}
.tcm-faq__a p + p{margin-top:1em}
/* Height animates where ::details-content is supported; elsewhere it opens
   instantly, which is also what reduced motion gets. */
.tcm-faq__item::details-content{
  block-size:0; overflow:clip;
  transition:block-size .4s cubic-bezier(.22,.61,.36,1), content-visibility .4s allow-discrete;
}
.tcm-faq__item[open]::details-content{block-size:auto}
@media (max-width:767px){
  .tcm-faq__q{padding:24px 22px 12px; gap:18px}
  .tcm-faq__a{padding:0 22px 14px}
}
@media (prefers-reduced-motion:reduce){
  .tcm-faq__item::details-content,
  .tcm-faq__toggle::before{transition:none}
}

/* ---- Case study page (template "Case Study starter") -------------------- */
/* Figma: "Case Study: Northern Escape Heli-Skiing" (580:1068). The header is
   two halves: copy on the left, and the Header Slider filling the right half
   to the screen edge and the full header height. The copy sits exactly where
   the Team and Results headers put theirs: a 1150px row with 40px gutters,
   the text 48% of that row wide. */
.tcm-cs-hero__row{display:grid; grid-template-columns:minmax(0, 1fr) minmax(0, 1fr); width:100%; min-height:650px}
.tcm-cs-hero__text{
  display:flex; flex-direction:column; justify-content:center; align-items:flex-start; gap:26px;
  padding:80px 16px 96px max(40px, calc((100vw - 1150px) / 2));
}
.tcm-cs-hero__text > *{max-width:calc(min(1150px, 100vw - 80px) * .48)}
.tcm-cs-hero__media{position:relative; min-height:420px}
.tcm-cs-hero__media .tcm-hslider{position:absolute; inset:0; min-height:0}
.tcm-cs-hero__logo{height:64px; width:auto; max-width:260px; object-fit:contain; object-position:left center}
@media (max-width:991px){
  .tcm-cs-hero__row{grid-template-columns:1fr}
  .tcm-cs-hero__text{padding:80px 40px 56px}
  .tcm-cs-hero__text > *{max-width:none}
}

/* Stat chips in the header: Orange 5% on navy, figures in Lexend Bold like
   every number on the site. */
.tcm-cs-chips{display:flex; flex-wrap:wrap; gap:15px}
.tcm-cs-chip{
  display:flex; flex-direction:column; gap:2px;
  flex:1 1 0; min-width:118px; max-width:190px; padding:8px 14px 10px;
  border-radius:8px; background:rgba(248,152,29,.08);
}
.tcm-cs-chip__v{font-family:var(--tcm-font-body); font-weight:700; font-size:2.8rem; line-height:1.25; color:var(--tcm-primary)}
.tcm-cs-chip__l{font-size:1.4rem; line-height:1.5; color:#fff}
@media (max-width:575px){
  .tcm-cs-chips{gap:8px}
  .tcm-cs-chip{min-width:0; padding:8px 10px}
  .tcm-cs-chip__v{font-size:2.3rem}
  .tcm-cs-chip__l{font-size:1.2rem; line-height:1.35}
}

/* Story: copy left, image right */
.tcm-cs-split{display:grid; grid-template-columns:minmax(0, 1.1fr) minmax(0, 1fr); gap:64px; align-items:start}
.tcm-cs-split__img{width:100%; height:100%; min-height:420px; object-fit:cover; border-radius:15px}
@media (max-width:991px){ .tcm-cs-split{grid-template-columns:1fr; gap:40px} .tcm-cs-split__img{min-height:0; aspect-ratio:4/3} }
.tcm-cs-prose p{margin:0 0 1.2em}
.tcm-cs-prose p:last-child{margin-bottom:0}
.tcm-cs-prose :is(ul, ol){margin:0 0 1.2em}   /* a list mid-text keeps the paragraph rhythm */
.tcm-cs-prose :is(ul, ol):last-child{margin-bottom:0}

/* Results: three big figures, Ink / Orange / Forest as in Figma */
.tcm-cs-results{display:grid; grid-template-columns:repeat(3, minmax(0, 1fr)); gap:48px; width:100%}
.tcm-cs-result{display:flex; flex-direction:column; gap:10px}
.tcm-cs-result__v{font-family:var(--tcm-font-body); font-weight:700; font-size:clamp(5.2rem, 5vw, 7.2rem); line-height:1; color:var(--tcm-ink)}
.tcm-cs-result:nth-child(2) .tcm-cs-result__v{color:var(--tcm-primary)}
.tcm-cs-result:nth-child(3) .tcm-cs-result__v{color:var(--tcm-forest)}
.tcm-cs-result__l{font-family:var(--tcm-font-display); font-weight:600; font-size:clamp(2.4rem, 2.2vw, 3.2rem); line-height:1.2; color:var(--tcm-ink)}
@media (max-width:767px){ .tcm-cs-results{grid-template-columns:1fr; gap:36px} }

/* Services provided: Map / Make / Move columns */
.tcm-cs-services{display:grid; grid-template-columns:repeat(3, minmax(0, 1fr)); gap:48px; width:100%}
/* The heads and lists match the Marketing Services columns exactly (see
   .tcm-paddle-col__top / __word / .tcm-paddle-list): every icon the same
   HEIGHT, not the same width, so the flat canoe and the tall fire sit
   level; the same script size; the same plain list. */
.tcm-cs-service__head{display:flex; align-items:center; gap:16px; margin-bottom:18px}
.tcm-cs-service__icon{height:clamp(56px, 5.5vw, 76px); width:auto}
.tcm-cs-service__word{font-family:var(--tcm-font-script); font-size:clamp(5.2rem, 5vw, 6.8rem); line-height:.9; color:var(--tcm-ink)}
.tcm-cs-list ul{margin:0; padding:0; list-style:none}
.tcm-cs-list li{padding:3px 0; font-size:1.5rem; line-height:1.3}
@media (max-width:767px){ .tcm-cs-services{grid-template-columns:1fr; gap:32px} }

/* Video band, on paper so it runs into the paper edge of the footer CTA
   below: testimonial video left, quote right. The quote marks are generated
   like the quote slider's, so the field is plain text. */
.tcm-cs-video{display:grid; grid-template-columns:minmax(0, 1fr) minmax(0, 1fr); gap:64px; align-items:center; width:100%}
.tcm-cs-quote{
  margin:0; padding:0; border:0;
  font-family:var(--tcm-font-display); font-weight:600;
  font-size:clamp(2.6rem, 2.4vw, 3.4rem); line-height:1.3; color:var(--tcm-ink); text-align:center;
}
.tcm-cs-quote::before,
.tcm-cs-quote::after{color:var(--tcm-primary)}
.tcm-cs-quote::before{content:"\201C"; margin-right:.04em}
.tcm-cs-quote::after{content:"\201D"; margin-left:.02em}
@media (max-width:991px){ .tcm-cs-video{grid-template-columns:1fr; gap:40px} }
/* A photo in place of the video (when the client has no testimonial video): the
   same frame. No media at all: the quote alone, centred, the name under it. */
.tcm-vcard .brxe-image{display:block; width:100%; aspect-ratio:16/9; border-radius:16px; overflow:hidden; margin-bottom:14px}
.tcm-vcard .brxe-image img, .tcm-vcard img.brxe-image{width:100%; height:100%; object-fit:cover}
.tcm-cs-video:not(:has(.tcm-vcard)){grid-template-columns:minmax(0, 860px); justify-content:center; gap:20px}
.tcm-cs-quote__who{margin:0; text-align:center; font-weight:300; font-size:var(--tcm-body); line-height:1.5; color:var(--tcm-ink-muted)}

/* ---- Marketing Services page ------------------------------------------- */

/* Challenge Coasters (elements/challenge-coasters.php). Paper coasters set
   down on the Mist section, each at a slight tilt, flipping to the answer.
   Chosen 2026-09-23 (option A, on Mist, "How we help" as a small label). */
.tcm-coasters{--tcm-coaster:270px; position:relative; width:100%}
.tcm-coasters__track{
  display:flex; gap:28px;
  overflow-x:auto; scroll-snap-type:x mandatory; scrollbar-width:none;
  padding:26px max(40px, calc((100vw - 1150px) / 2)) 34px;
  scroll-padding-inline:max(40px, calc((100vw - 1150px) / 2));
  cursor:grab;
}
.tcm-coasters__track::-webkit-scrollbar{display:none}
.tcm-coasters__track.is-dragging{cursor:grabbing; scroll-snap-type:none}
.tcm-coaster{
  flex:none; width:var(--tcm-coaster); height:var(--tcm-coaster);
  padding:0; border:0; background:none; font:inherit; color:inherit; text-align:left;
  perspective:1200px; scroll-snap-align:start; cursor:pointer;
}
.tcm-coaster__inner{
  position:relative; display:block; width:100%; height:100%;
  transform-style:preserve-3d;
  transition:transform .7s cubic-bezier(.3,.7,.2,1), translate .3s ease;
}
.tcm-coaster:nth-child(4n+1) .tcm-coaster__inner{rotate:-2deg}
.tcm-coaster:nth-child(4n+2) .tcm-coaster__inner{rotate:1.5deg}
.tcm-coaster:nth-child(4n+3) .tcm-coaster__inner{rotate:-.8deg}
.tcm-coaster:nth-child(4n) .tcm-coaster__inner{rotate:2.2deg}
.tcm-coaster:hover .tcm-coaster__inner{translate:0 -5px}
.tcm-coaster[aria-pressed="true"] .tcm-coaster__inner{transform:rotateY(180deg)}
.tcm-coaster__face{
  position:absolute; inset:0;
  display:flex; flex-direction:column; gap:12px;
  padding:26px 24px 22px;
  border-radius:22px;
  backface-visibility:hidden; -webkit-backface-visibility:hidden;
  /* the site paper, twice at different scales so the grain shows at card size */
  background-color:#efe7dc;
  background-image:var(--tcm-paper-tile), var(--tcm-paper-tile);
  background-blend-mode:multiply;
  background-size:340px auto, 520px auto;
  background-position:0 0, 137px 61px;
  /* a thick card edge, then the shadow it throws on the table */
  box-shadow:0 2px 0 #cbbca7, 0 3px 0 #bfae96, 0 12px 24px rgba(11,11,11,.16);
}
/* pressed inner rim */
.tcm-coaster__face::before{content:""; position:absolute; inset:9px; border-radius:15px; border:1.5px solid rgba(11,11,11,.09); pointer-events:none}
.tcm-coaster__back{transform:rotateY(180deg)}
.tcm-coaster__tag{font-family:var(--tcm-font-body); font-weight:600; font-size:1.1rem; line-height:1; letter-spacing:.14em; text-transform:uppercase; color:var(--tcm-primary)}
.tcm-coaster__challenge{font-family:var(--tcm-font-display); font-weight:600; font-size:2.1rem; line-height:1.28; color:var(--tcm-ink); text-wrap:balance}
.tcm-coaster__solution{font-family:var(--tcm-font-display); font-weight:600; font-size:1.8rem; line-height:1.3; color:var(--tcm-ink); text-wrap:balance}
.tcm-coaster__advantage{font-size:1.4rem; line-height:1.5; color:var(--tcm-ink-muted)}
.tcm-coaster__hint{
  margin-top:auto; display:flex; align-items:center; gap:8px;
  font-family:var(--tcm-font-body); font-weight:500; font-size:1.1rem; line-height:1; letter-spacing:.12em; text-transform:uppercase;
  color:var(--tcm-forest);
}
.tcm-coaster__hint i{width:26px; height:26px; border-radius:50%; display:grid; place-items:center; background:var(--tcm-forest-tint-15); font-size:1.1rem}
.tcm-coaster:focus-visible{outline:none}
.tcm-coaster:focus-visible .tcm-coaster__face{outline:3px solid var(--tcm-primary); outline-offset:4px}
.tcm-coasters__ctrl{display:flex; align-items:center; justify-content:center; gap:18px}
/* the hand-drawn arrow from the quote slider, masked so it can be ink here */
.tcm-coasters__arrow{
  width:56px; height:56px; padding:0; border:0; cursor:pointer;
  background-color:var(--tcm-ink);
  -webkit-mask:url("../brand/quote-arrow.png") center / 32px 40px no-repeat;
          mask:url("../brand/quote-arrow.png") center / 32px 40px no-repeat;
  transition:transform .25s ease, background-color .25s ease;
}
.tcm-coasters__arrow--prev{transform:scaleX(-1)}
.tcm-coasters__arrow:hover{background-color:var(--tcm-primary)}
.tcm-coasters__arrow--next:hover{transform:translateX(3px)}
.tcm-coasters__arrow--prev:hover{transform:scaleX(-1) translateX(3px)}
.tcm-coasters__arrow:disabled{opacity:.25; cursor:default; background-color:var(--tcm-ink)}
.tcm-coasters__arrow:focus-visible{outline:2px solid var(--tcm-primary); outline-offset:2px; border-radius:8px}
.tcm-coasters__count{font-size:1.4rem; font-weight:500; letter-spacing:.1em; min-width:5ch; text-align:center; font-variant-numeric:tabular-nums}
@media (max-width:640px){
  .tcm-coasters{--tcm-coaster:240px}
  .tcm-coasters__track{gap:20px; padding-inline:24px; scroll-padding-inline:24px}
  .tcm-coaster__challenge{font-size:1.9rem}
}
@media (prefers-reduced-motion:reduce){
  .tcm-coaster__inner{transition:none}
  .tcm-coaster:hover .tcm-coaster__inner{translate:none}
}

/* Paddle Timeline (elements/paddle-timeline.php), on navy. */
.tcm-paddle{position:relative; width:100%; padding-bottom:30px; color:#fff; text-align:left}
.tcm-paddle__paths{position:relative; height:52px}
.tcm-paddle__path{position:absolute; top:10px; height:42px; border:1.5px dashed rgba(255,255,255,.45); border-bottom:0; border-radius:10px 10px 0 0}
.tcm-paddle__path b{position:absolute; top:-10px; left:50%; transform:translateX(-50%); padding:0 12px; background:var(--tcm-navy); font-weight:500; font-size:1.3rem; letter-spacing:.1em; text-transform:uppercase; white-space:nowrap}
.tcm-paddle__path small{display:block; margin-top:3px; font-weight:300; font-size:1.2rem; letter-spacing:0; text-transform:none; text-align:center; opacity:.72}
.tcm-paddle__path.is-quick{left:16.5%; width:50%}
.tcm-paddle__path.is-full{left:67.5%; right:0; border-right:0; border-radius:10px 0 0 0}
.tcm-paddle__path.is-full::after{content:""; position:absolute; right:-12px; top:-6px; border-left:10px solid rgba(255,255,255,.7); border-top:5.5px solid transparent; border-bottom:5.5px solid transparent}
.tcm-paddle__rail{position:relative; height:74px}
/* The line is a creek (BugHerd #31, option A of the preview, 2026-10-14):
   one gentle wave, Map light blue, Make white, Move dashed white, drifting
   slowly downstream. The wave is one continuous strip across the whole line:
   each stage's ::before spans the full line (the stage itself is not
   positioned, so the line is its containing block) and the stage clips it
   with clip-path, so the three stay in phase where they meet. A tile is one
   wavelength (92px); Move's dashes are a mask with a 23px period (4 to a
   tile), and both move exactly one tile per loop, so there is no seam. */
.tcm-paddle{--tcm-creek:#9fd3ef}
.tcm-paddle__line{position:absolute; left:0; right:0; bottom:-5px; height:14px; display:grid; grid-template-columns:1fr 1fr 1fr; gap:6px}
.tcm-paddle__line i{display:block; height:14px; clip-path:inset(0)}
.tcm-paddle__line i::before{content:""; position:absolute; inset:0; background-repeat:repeat-x; background-size:92px 14px; animation:tcm-creek 7s linear infinite}
.tcm-paddle__line i:nth-child(1)::before{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='92' height='14' viewBox='0 0 92 14'%3E%3Cpath d='M0 7Q23-3 46 7T92 7' fill='none' stroke='%239fd3ef' stroke-width='3.5' stroke-linecap='round'/%3E%3C/svg%3E")}
.tcm-paddle__line i:nth-child(2)::before,
.tcm-paddle__line i:nth-child(3)::before{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='92' height='14' viewBox='0 0 92 14'%3E%3Cpath d='M0 7Q23-3 46 7T92 7' fill='none' stroke='%23ffffff' stroke-width='3.5' stroke-linecap='round'/%3E%3C/svg%3E")}
.tcm-paddle__line i:nth-child(3){
  -webkit-mask:repeating-linear-gradient(90deg, #000 0 14px, transparent 14px 23px) 0 0 / 92px 100%;
          mask:repeating-linear-gradient(90deg, #000 0 14px, transparent 14px 23px) 0 0 / 92px 100%;
  animation:tcm-creek-dash 7s linear infinite;
}
.tcm-paddle__line::after{content:""; position:absolute; right:-12px; top:0; border-left:10px solid #fff; border-top:7px solid transparent; border-bottom:7px solid transparent}
@keyframes tcm-creek{from{background-position-x:0} to{background-position-x:92px}}
@keyframes tcm-creek-dash{from{-webkit-mask-position:0 0; mask-position:0 0} to{-webkit-mask-position:92px 0; mask-position:92px 0}}
.tcm-paddle__stops{display:grid; grid-template-columns:1fr 1fr 1fr; margin-top:14px}
.tcm-paddle__stops div{font-size:1.3rem; font-weight:500; letter-spacing:.12em; text-transform:uppercase; opacity:.55; transition:opacity .3s ease, color .3s ease}
.tcm-paddle.is-idle .tcm-paddle__stops div{opacity:.85}
.tcm-paddle__stops div span{margin-left:8px; font-weight:300; opacity:.8}
.tcm-paddle__stops div.is-here{opacity:1}
.tcm-paddle__stops div[data-i="0"].is-here{color:var(--tcm-creek)}
/* the canoe: optional. Everything reads without it. */
.tcm-paddle__canoe{position:absolute; bottom:-1px; left:2%; z-index:3; width:86px; padding:0; border:0; background:none; cursor:grab; touch-action:none; transform:translateX(-50%)}
.tcm-paddle__canoe img{display:block; width:100%; height:auto; filter:invert(1) brightness(1.15) drop-shadow(0 3px 3px rgba(0,0,0,.35)); transform-origin:50% 90%; animation:tcm-bob 3.2s ease-in-out infinite}
.tcm-paddle__canoe.is-flip img{animation-name:tcm-bob-flip}
.tcm-paddle__canoe.is-dragging{cursor:grabbing}
.tcm-paddle__canoe.is-dragging img{animation-duration:.9s}
.tcm-paddle__canoe:focus-visible{outline:2px solid var(--tcm-primary); outline-offset:4px; border-radius:8px}
@keyframes tcm-bob{0%,100%{transform:translateY(0) rotate(0)} 50%{transform:translateY(-3px) rotate(-2deg)}}
@keyframes tcm-bob-flip{0%,100%{transform:scaleX(-1) translateY(0) rotate(0)} 50%{transform:scaleX(-1) translateY(-3px) rotate(-2deg)}}
.tcm-paddle__tip{position:absolute; left:50%; top:-18px; color:#fff; transform:translate(-50%, 4px); font-size:1.1rem; font-weight:500; line-height:1; letter-spacing:.1em; text-transform:uppercase; white-space:nowrap; opacity:0; pointer-events:none; transition:opacity .2s ease, transform .2s ease}
.tcm-paddle__canoe:hover .tcm-paddle__tip, .tcm-paddle__canoe:focus-visible .tcm-paddle__tip{opacity:.8; transform:translate(-50%, 0)}
.tcm-paddle__canoe.is-used .tcm-paddle__tip{display:none}
.tcm-paddle__bubble{
  position:absolute; bottom:84px; left:0; z-index:4; max-width:260px;
  padding:11px 14px 12px; border-radius:14px;
  background:#fff; color:var(--tcm-ink); box-shadow:0 10px 24px rgba(0,0,0,.25);
  font-size:1.4rem; line-height:1.35;
  pointer-events:none; opacity:0;
  transform-origin:var(--tx, 50%) 100%; transform:scale(.6);
  transition:transform .35s cubic-bezier(.34,1.56,.64,1), opacity .2s ease;
}
.tcm-paddle__bubble.is-on{opacity:1; transform:scale(1)}
.tcm-paddle__bubble b{display:block; margin-bottom:2px; font-family:var(--tcm-font-display); font-weight:600; font-size:1.5rem}
.tcm-paddle__bubble::after{content:""; position:absolute; bottom:-8px; left:var(--tx, 50%); transform:translateX(-50%); border-left:9px solid transparent; border-right:9px solid transparent; border-top:9px solid #fff}
@media (max-width:700px){
  .tcm-paddle__path small{display:none}
  .tcm-paddle__path b{font-size:1.1rem; letter-spacing:.06em}
  .tcm-paddle__stops div{font-size:1.1rem; letter-spacing:.06em}
  .tcm-paddle__stops div span{display:block; margin:2px 0 0}
  .tcm-paddle__canoe{width:66px}
  .tcm-paddle__bubble{max-width:210px; font-size:1.3rem}
}
@media (prefers-reduced-motion:reduce){
  .tcm-paddle__canoe img{animation:none}
  .tcm-paddle__line i, .tcm-paddle__line i::before{animation:none}
  .tcm-paddle__bubble, .tcm-paddle__stops div, .tcm-paddle__tip{transition:none}
}
/* The three stage columns under the timeline, lit by the canoe. */
.tcm-paddle-cols{display:grid; grid-template-columns:repeat(3, minmax(0, 1fr)); width:100%}
.tcm-paddle-col{position:relative; padding:0 clamp(20px, 2.6vw, 40px); border-left:1px solid rgba(11,11,11,.12)}
.tcm-paddle-col:first-child{border-left:0; padding-left:0}
.tcm-paddle-col:last-child{padding-right:0}
.tcm-paddle-col::before{
  content:""; position:absolute; inset:-26px 12px; z-index:0; pointer-events:none;
  border-radius:18px; background:rgba(255,255,255,.6); box-shadow:0 8px 24px rgba(11,11,11,.06);
  opacity:0; transition:opacity .35s ease;
}
.tcm-paddle-col:first-child::before{left:-24px}
.tcm-paddle-col:last-child::before{right:-24px}
.tcm-paddle-col > *{position:relative; z-index:1}
.tcm-paddle-col.is-lit::before{opacity:1}
.tcm-paddle-col__top{display:flex; align-items:center; gap:16px; margin-bottom:10px}
.tcm-paddle-col__top img{height:clamp(56px, 5.5vw, 76px); width:auto}
/* Hover video (initHoverVideos): the clip sits over its image and multiplies
   its white away. Multiply needs the column's own ground as backdrop, so the
   head row must not open a stacking context (z-index:auto still paints it
   above the lit ::before, which comes first in tree order). A clip that
   reaches past its image (Move's rear paddle, Make's flame tips) gets its
   box from data-hover-video-bleed, set inline by the script. The swap is a
   short crossfade, since Make's clip is not the exact same drawing. */
.tcm-paddle-col > .tcm-paddle-col__top:has(.tcm-hovervid){z-index:auto}
.tcm-hovervid-wrap{position:relative; display:block; flex:none; line-height:0}
.tcm-hovervid__media{position:absolute; top:0; left:0; width:100%; height:100%; object-fit:fill; mix-blend-mode:multiply; opacity:0; pointer-events:none; transition:opacity .3s ease}
.tcm-hovervid__svg svg{display:block; width:100%; height:100%}
.tcm-hovervid-wrap img{transition:opacity .3s ease}
.tcm-hovervid-wrap.is-playing .tcm-hovervid__media{opacity:1}
.tcm-hovervid-wrap.is-playing img{opacity:0}
.tcm-paddle-col__word{font-family:var(--tcm-font-script); font-size:clamp(5.2rem, 5vw, 6.8rem); line-height:.9; color:var(--tcm-ink)}
.tcm-paddle-col__out{min-height:3.9em; margin:6px 0 26px}
/* Light list type in ink; the group headings set their own weight. */
.tcm-paddle-list, .tcm-svc-groups{font-weight:300; color:var(--tcm-ink)}
.tcm-paddle-list h3, .tcm-paddle-list h4{margin:0 0 6px; font-family:var(--tcm-font-display); font-weight:600; font-size:1.8rem}
.tcm-paddle-list ul{margin:0 0 22px; padding:0; list-style:none}
.tcm-paddle-list li{padding:3px 0; font-size:1.5rem; line-height:1.3}
/* Move never ends: a dotted loop down the right of its list, drawn by script
   from the first service to the last (arrow in at the top, dot at the end). */
.tcm-cycle{position:relative; width:fit-content; max-width:100%; padding-right:40px}
.tcm-loopline{position:absolute; right:4px; width:26px; border:1.5px dashed var(--tcm-forest); border-left:0; border-radius:0 8px 8px 0; pointer-events:none}
.tcm-loopline::before{content:""; position:absolute; left:-7px; top:-6.5px; border-right:8px solid var(--tcm-forest); border-top:5px solid transparent; border-bottom:5px solid transparent}
.tcm-loopline::after{content:""; position:absolute; left:-5px; bottom:-4.5px; width:7px; height:7px; border-radius:50%; background:var(--tcm-forest)}
@media (max-width:900px){
  .tcm-paddle-cols{grid-template-columns:1fr; gap:44px}
  .tcm-paddle-col, .tcm-paddle-col:first-child, .tcm-paddle-col:last-child{padding:0; border-left:0}
  .tcm-paddle-col + .tcm-paddle-col{border-top:1px solid rgba(11,11,11,.12); padding-top:36px}
  .tcm-paddle-col::before, .tcm-paddle-col:first-child::before, .tcm-paddle-col:last-child::before{left:-12px; right:-12px}
  .tcm-paddle-col__out{min-height:0}
}

/* Paddle detail sections: copy beside a card or a photo. */
.tcm-detail{display:grid; grid-template-columns:minmax(0, 1.15fr) minmax(0, 1fr); gap:clamp(40px, 5vw, 80px); align-items:center; width:100%}
.tcm-detail.is-flip > :first-child{order:2}
/* A part of a service with no picture: the text alone, at reading width. */
.tcm-detail.is-text{grid-template-columns:minmax(0, 760px); justify-content:center}
.tcm-detail__top{display:flex; align-items:center; gap:14px}
.tcm-detail__top{gap:18px}
/* Same height for all three, like the homepage columns (76px there), scaled
   up a little for the bigger stage words here. Was 120-180px, which made the
   wide canoe dwarf the others. */
.tcm-detail__top img{height:clamp(84px, 7.6vw, 108px); width:auto}
.tcm-detail__img{width:100%; aspect-ratio:4/3; object-fit:cover; border-radius:15px}
.tcm-roadmap{padding:36px 34px; border-radius:16px; background:var(--tcm-primary-tint)}
.tcm-roadmap ul{margin:0 0 16px; padding:0; list-style:none}
.tcm-roadmap li{padding:2px 0 2px 18px; position:relative; font-size:1.5rem; line-height:1.4}
.tcm-roadmap li::before{content:"\2013"; position:absolute; left:0; color:var(--tcm-ink-muted)}
.tcm-roadmap h4{margin:14px 0 6px; font-family:var(--tcm-font-display); font-weight:600; font-size:1.6rem}
@media (max-width:991px){ .tcm-detail{grid-template-columns:minmax(0, 1fr)} .tcm-detail.is-flip > :first-child{order:0} }

/* Fit Checklist (elements/fit-checklist.php), a white card on navy. */
.tcm-fit{width:100%; display:flex; flex-direction:column; align-items:center; gap:28px}
.tcm-fit__card{width:100%; border-radius:16px; background:var(--tcm-mist); overflow:hidden}
.tcm-fit__group{margin:0; border:0; padding:44px clamp(24px, 4vw, 56px) 40px; min-width:0}
.tcm-fit__group + .tcm-fit__group{border-top:1px solid rgba(11,11,11,.08)}
.tcm-fit__label{
  float:left; width:100%; padding:0; margin-bottom:16px;
  font-size:1.5rem; font-weight:500; letter-spacing:.16em; text-transform:uppercase; color:var(--tcm-primary); line-height:1.3;
}
.tcm-fit__label::after{content:""; display:block; width:36px; height:3px; margin-top:14px; border-radius:2px; background:var(--tcm-primary)}
.tcm-fit__title{clear:both; margin:0 0 18px; font-family:var(--tcm-font-display); font-weight:600; font-size:clamp(2rem, 1.8vw, 2.4rem); line-height:1.25; color:var(--tcm-ink)}
.tcm-fit__item{display:flex; gap:16px; align-items:flex-start; padding:8px 0}
.tcm-fit__item label{display:block; padding-top:2px}
.tcm-fit__body{min-width:0}
.tcm-fit__sectors{display:flex; flex-wrap:wrap; gap:8px; margin:12px 0 4px; padding:0; list-style:none}
.tcm-fit__sectors a{display:block; padding:8px 14px; border-radius:99px; border:1.5px solid rgba(11,11,11,.18); background:#fff; color:var(--tcm-ink); font-size:1.35rem; line-height:1.3; text-decoration:none; transition:border-color .2s ease}
.tcm-fit__sectors a:hover, .tcm-fit__sectors a:focus-visible{border-color:var(--tcm-primary); color:var(--tcm-ink)}
/* padding:0 and box-sizing matter: a Bricks form rule gives inputs 12px of
   side padding, which stretched these into 28x20 rectangles. */
.tcm-fit__item input{
  flex:none; appearance:none; -webkit-appearance:none; margin:0; padding:0; box-sizing:border-box;
  width:28px; height:28px; min-width:28px; border-radius:6px; border:2px solid var(--tcm-navy); background:#fff; cursor:pointer;
  display:grid; place-items:center; transition:background-color .2s ease, border-color .2s ease;
}
.tcm-fit__item input::after{content:""; width:13px; height:7px; border:3px solid #fff; border-top:0; border-right:0; transform:rotate(-45deg) translate(1px, -1px); opacity:0}
.tcm-fit__item input:checked{background:var(--tcm-forest); border-color:var(--tcm-forest)}
.tcm-fit__item input:checked::after{opacity:1}
.tcm-fit__item input:focus-visible{outline:2px solid var(--tcm-primary); outline-offset:2px}
.tcm-fit__item label{font-size:1.6rem; line-height:1.6; color:var(--tcm-ink); cursor:pointer}
.tcm-fit__item label strong{font-weight:600}
.tcm-fit__result{display:flex; flex-wrap:wrap; align-items:center; justify-content:center; gap:14px 24px; color:#fff; text-align:center}
.tcm-fit__count{margin:0; font-size:1.8rem}
.tcm-fit.is-good .tcm-fit__count{color:var(--tcm-primary)}
.tcm-fit__cta{
  display:inline-flex; align-items:center; gap:10px;
  font-size:var(--tcm-chrome-micro); letter-spacing:var(--tcm-track-button); text-transform:uppercase; line-height:1.1;
  color:#fff; background-color:var(--tcm-primary); border-radius:10px; padding:11px 21px;
}

/* Trees in front: a tree-lined river scene overlapping the content above it
   (the contact form card on Marketing Services). Figma: "Footer CTA" in the
   FAQs section (656:5195): the river-with-canoes photo, sky transparent, full
   width, showing its top 78% (the crop starts 4.7% down), with the foot of
   the form card behind the treetops. The layer sits above the content
   and lets clicks through; the card keeps empty room at its foot. */
.tcm-trees{position:relative; isolation:isolate; padding-bottom:calc(max(380px, 40vw) - 88px)}
/* The layer overlaps the card's last 88px. The tallest treetop sits ~68px
   below the layer's top edge at every width, so it lands ~73px above the
   card's foot: just touching the bottom of the Send button, which sits 72px
   up (2026-10-17; at 170px it reached past the button). */
/* Cropped shorter (BugHerd #58): about 10% to 64% of the photo, from just
   under the tallest treetops to just past the canoes; most of the empty
   water below is gone. */
.tcm-trees::after{
  content:""; position:absolute; left:0; right:0; bottom:0; z-index:2; pointer-events:none;
  height:max(380px, 40vw);
  background:url("../brand/trees-river-canoes.webp") center 21% / cover no-repeat;
}
.tcm-form-card.is-under-trees{padding-bottom:72px}
/* Only the form card should sit under the trees. Once the row narrows, the
   column beside it grows taller than the card and its content would slip
   under the ridge, so the details move above and the card comes last. */
@media (max-width:1199px){
  .tcm-trees__row{flex-direction:column !important; align-items:stretch !important}
  .tcm-trees__row > *{width:100% !important; order:1}
  .tcm-trees__row > .tcm-form-card{order:2}
}
@media (max-width:767px){
  .tcm-trees{padding-bottom:340px}
  .tcm-trees::after{height:480px; background-position:center top}
  .tcm-form-card.is-under-trees{padding-bottom:56px}
}

/* Orange-dot list (beside the form on Marketing Services, as in Figma). */
.tcm-dot-list{margin:0; padding:0; list-style:none}
.tcm-dot-list li{position:relative; padding:4px 0 4px 22px}
.tcm-dot-list li::before{content:""; position:absolute; left:2px; top:.85em; width:8px; height:8px; border-radius:50%; background:var(--tcm-primary)}

/* ---- Stage pages: Map / Make / Move ------------------------------------ */
/* Figma: "Marketing Services: MAP" (577:1082), the template for all three. */

/* Hero card: the stage icon on a paper coaster, the same object as the
   Challenge Coasters on Marketing Services (paper, rounded corners, pressed
   rim, thick edge), set down at a slight tilt. Replaced the curled-corner
   paper on 2026-09-24. */
.tcm-stage-card{
  position:relative; width:min(340px, 100%); aspect-ratio:1;
  display:grid; place-items:center;
  border-radius:34px;
  background-color:#efe7dc;
  background-image:var(--tcm-paper-tile), var(--tcm-paper-tile);
  background-blend-mode:multiply;
  background-size:420px auto, 640px auto;
  background-position:0 0, 137px 61px;
  box-shadow:0 3px 0 #cbbca7, 0 5px 0 #bfae96, 0 22px 40px rgba(0,0,0,.35);
  rotate:-3deg;
}
.tcm-stage-card::before{content:""; position:absolute; inset:13px; border-radius:23px; border:2px solid rgba(11,11,11,.09); pointer-events:none}
.tcm-stage-card img{position:relative; width:62%; height:auto}
.tcm-stage-hero__word{font-family:var(--tcm-font-script); font-size:clamp(9rem, 11vw, 15rem); line-height:.9; color:var(--tcm-primary)}
/* Water Brush's capitals swash well above the line box, so under the
   breadcrumbs the word needs room of its own (in em, so it scales with it). */
.tcm-crumbs ~ .tcm-stage-hero__word{margin-top:.2em}

/* Stage Steps (elements/stage-steps.php): full-width chevron bar. */
.tcm-steps{width:100%}
.tcm-steps__list{display:grid; grid-template-columns:repeat(var(--tcm-steps-n, 3), minmax(0, 1fr)); margin:0; padding:0; list-style:none}
.tcm-steps__item{position:relative; background:var(--tcm-primary)}
.tcm-steps__item:nth-child(3n+2){background:var(--tcm-navy)}
.tcm-steps__item:nth-child(3n){background:var(--tcm-forest)}
/* the hand-drawn arrow sits on the join, pointing into the next step */
.tcm-steps__item + .tcm-steps__item::before{
  content:""; position:absolute; left:-18px; top:50%; z-index:2; translate:0 -50%;
  width:36px; height:46px; background:url("../brand/quote-arrow.png") center / contain no-repeat;
  pointer-events:none;
}
.tcm-steps__link{
  display:flex; align-items:center; justify-content:center; min-height:104px; padding:18px 36px;
  font-family:var(--tcm-font-display); font-weight:600; font-size:clamp(1.8rem, 1.6vw, 2.2rem); line-height:1.2; text-align:center;
  color:#fff; text-decoration:none;
  box-shadow:inset 0 -5px 0 transparent; transition:box-shadow .25s ease, background-color .25s ease;
}
.tcm-steps__link:hover{background:rgba(255,255,255,.08)}
.tcm-steps__link[aria-current="true"]{box-shadow:inset 0 -5px 0 rgba(255,255,255,.85)}
.tcm-steps__link:focus-visible{outline:3px solid #fff; outline-offset:-6px}
@media (max-width:767px){
  .tcm-steps__list{grid-template-columns:minmax(0, 1fr)}
  .tcm-steps__item + .tcm-steps__item::before{left:50%; top:-16px; translate:-50% 0; rotate:90deg; width:26px; height:32px}
  .tcm-steps__link{min-height:68px}
}

/* Service List (elements/service-list.php). */
.tcm-svcs{display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:44px 64px; margin:0; padding:0; list-style:none; width:100%}
.tcm-svc{display:flex; gap:22px; align-items:flex-start}
.tcm-svc__icon{flex:none; width:84px; height:84px; object-fit:contain}
.tcm-svc__icon--letter{display:grid; place-items:center; border-radius:12px; background:var(--tcm-primary-tint); font-family:var(--tcm-font-display); font-weight:600; font-size:3rem; color:var(--tcm-navy)}
.tcm-svc__body{display:flex; flex-direction:column; align-items:flex-start; gap:8px; min-width:0}
.tcm-svc__name{margin:0; font-family:var(--tcm-font-display); font-weight:600; font-size:2.2rem; line-height:1.25; color:var(--tcm-primary)}
.tcm-svc__text{margin:0; font-size:1.6rem; line-height:1.55; color:var(--tcm-ink)}
.tcm-svcs__photo{grid-row:span 2; min-height:360px}
.tcm-svcs__img{width:100%; height:100%; object-fit:cover; border-radius:15px}
@media (max-width:900px){
  .tcm-svcs{grid-template-columns:minmax(0, 1fr); gap:36px}
  .tcm-svcs__photo{grid-row:auto; min-height:0; aspect-ratio:4/3}
}
@media (max-width:480px){ .tcm-svc__icon{width:60px; height:60px} }

/* Stage Pager (elements/stage-pager.php): previous / next stage at the foot
   of the Map, Make and Move pages. The next stage is the loud one (navy,
   orange arrow); the previous stays on white. Whole cards are the links. */
.tcm-pager{width:100%; display:flex; flex-direction:column; align-items:center; gap:40px}
.tcm-pager__cards{display:grid; grid-template-columns:minmax(0, 1fr) minmax(0, 1fr); gap:28px; width:100%}
.tcm-pager__card{
  display:flex; align-items:center; gap:24px; padding:28px 32px; border-radius:20px;
  background:#fff; border:2px solid rgba(11,11,11,.08); color:var(--tcm-ink); text-decoration:none;
  box-shadow:0 10px 30px rgba(11,11,11,.08);
  transition:border-color .25s ease, transform .25s ease, box-shadow .25s ease;
}
.tcm-pager__card:hover{border-color:var(--tcm-primary); transform:translateY(-3px); box-shadow:0 16px 36px rgba(11,11,11,.12)}
.tcm-pager__card:focus-visible{outline:3px solid var(--tcm-primary); outline-offset:3px}
.tcm-pager__card.is-next{justify-content:flex-end; text-align:right; background:var(--tcm-navy); border-color:var(--tcm-navy); color:#fff}
.tcm-pager__card.is-next:hover{border-color:var(--tcm-primary)}
.tcm-pager__icon{flex:none; width:96px; height:auto}
.tcm-pager__card.is-next .tcm-pager__icon{filter:invert(1) brightness(1.1)}
.tcm-pager__txt{flex:1; display:flex; flex-direction:column; gap:2px; min-width:0}
.tcm-pager__label{font-size:1.3rem; font-weight:600; letter-spacing:.14em; text-transform:uppercase; opacity:.65}
.tcm-pager__word{font-family:var(--tcm-font-script); font-size:clamp(4.4rem, 4vw, 5.6rem); line-height:1.05; color:var(--tcm-primary)}
.tcm-pager__line{font-size:1.6rem; line-height:1.45}
.tcm-pager__arrow{
  flex:none; display:grid; place-items:center; width:52px; height:52px; border-radius:50%;
  background:var(--tcm-primary); color:#fff; font-size:1.6rem; transition:transform .25s ease;
}
.tcm-pager__arrow.is-prev i{transform:rotate(180deg)}
.tcm-pager__card:hover .tcm-pager__arrow{transform:translateX(4px)}
.tcm-pager__card:hover .tcm-pager__arrow.is-prev{transform:translateX(-4px)}
@media (max-width:767px){
  .tcm-pager__cards{grid-template-columns:minmax(0, 1fr)}
  .tcm-pager__card{padding:22px 20px; gap:16px}
  .tcm-pager__card.is-next{order:-1}
  .tcm-pager__icon{width:60px}
  .tcm-pager__word{font-size:4.6rem}
  .tcm-pager__arrow{width:44px; height:44px}
}

/* ---- Service pages (post type "service") -------------------------------- */
/* Figma: "Service Page" (279:319), Google Ads: PPC & Display. The header
   icon sits on the same coaster as the stage pages (.tcm-stage-card). */
/* Breadcrumbs (elements/breadcrumbs.php) at the top of service, case study
   and stage page headers, in the site's small-label style. White for the navy headers;
   on a light section set the element's Typography colour instead. Links are
   that colour dimmed, the current page full, the chevrons and this service's
   stage orange. */
.tcm-crumbs{color:#fff; font-size:1.3rem; font-weight:600; line-height:1.4; letter-spacing:.14em; text-transform:uppercase}
.tcm-crumbs ol{display:flex; flex-wrap:wrap; align-items:center; gap:6px 0; margin:0; padding:0; list-style:none}
.tcm-crumbs li{display:inline-flex; align-items:center}
.tcm-crumbs a{
  color:inherit; opacity:.62; text-decoration:none; padding-bottom:2px;
  background:linear-gradient(currentColor, currentColor) 0 100% / 0 1px no-repeat;
  transition:opacity .2s ease, background-size .25s ease;
}
.tcm-crumbs a:hover, .tcm-crumbs a:focus-visible{opacity:1; background-size:100% 1px}
.tcm-crumbs__sep{flex:none; margin:0 12px; color:var(--tcm-primary)}
.tcm-crumbs__stages a{opacity:.45}
.tcm-crumbs__stages .is-on{opacity:1; color:var(--tcm-primary)}
.tcm-crumbs__dot{width:4px; height:4px; margin:0 9px; border-radius:50%; background:currentColor; opacity:.3}
.tcm-crumbs [aria-current]{opacity:1}
.tcm-svc-hero__title{margin:0; font-family:var(--tcm-font-display); font-weight:600; font-size:clamp(4.4rem, 5vw, 7.2rem); line-height:1.02; color:#fff}
.tcm-svc-hero__script{display:block; font-family:var(--tcm-font-script); font-weight:400; font-size:1.25em; line-height:1; color:var(--tcm-primary)}
/* Stats bar: the small note under a label (service pages). */
.tcm-statbar__n{margin:6px 0 0; font-size:1.3rem; line-height:1.45; color:rgba(255,255,255,.7); max-width:24ch; margin-inline:auto}

/* ---- Text links: the one approved style --------------------------------
   The Style Guide's "Text link" (820:2): orange, uppercase, button tracking,
   a chevron, and the orange brush drawn in left to right on hover, the same
   mark and timing as the header and footer links. Applies to every Bricks
   Text Link inside page content and to the Service List's "Explore service"
   links, so no link needs styling of its own. */
#brx-content .brxe-text-link,
.tcm-svc__link,
.tcm-pager__back,
.tcm-bpost__read,
.tcm-iov-card__link,
.tcm-bmore-nav__newer{
  position:relative; display:inline-flex; align-items:center; gap:8px;
  font-family:var(--tcm-font-body); font-weight:400;
  font-size:var(--tcm-button); line-height:1.2;
  letter-spacing:var(--tcm-track-button); text-transform:uppercase;
  color:var(--tcm-primary); text-decoration:none;
}
#brx-content .brxe-text-link i,
.tcm-bpost__read i,
.tcm-iov-card__link i,
.tcm-svc__link i,
.tcm-pager__back i{font-size:.75em; line-height:1}
#brx-content .brxe-text-link::after,
.tcm-bpost__read::after,
.tcm-bmore-nav__newer::after,
.tcm-iov-card__link::after,
.tcm-svc__link::after,
.tcm-pager__back::after{
  content:""; position:absolute; left:0; right:0; bottom:-7px; height:11px;
  background:var(--tcm-brush) no-repeat left center/100% 100%;
  clip-path:inset(0 100% 0 0);
  transition:clip-path .34s cubic-bezier(.22,.61,.36,1);
  pointer-events:none;
}
#brx-content .brxe-text-link:hover::after,
#brx-content .brxe-text-link:focus-visible::after,
.tcm-bmore-nav__newer:hover::after,
.tcm-bmore-nav__newer:focus-visible::after,
.tcm-bpost:hover .tcm-bpost__read::after,
.tcm-bpost:focus-visible .tcm-bpost__read::after,
.tcm-bfeat:hover .tcm-bpost__read::after,
.tcm-bfeat:focus-visible .tcm-bpost__read::after,
.tcm-iov-card:hover .tcm-iov-card__link::after,
.tcm-iov-card:focus-visible .tcm-iov-card__link::after,
.tcm-svc__link:hover::after,
.tcm-pager__back:hover::after,
.tcm-svc__link:focus-visible::after,
.tcm-pager__back:focus-visible::after{clip-path:inset(0 0 0 0)}
#brx-content .brxe-text-link:focus-visible,
.tcm-svc__link:focus-visible,
.tcm-pager__back:focus-visible{outline:2px solid var(--tcm-primary); outline-offset:4px; border-radius:2px}
@media (prefers-reduced-motion:reduce){
  #brx-content .brxe-text-link::after, .tcm-svc__link::after, .tcm-pager__back::after{transition-duration:.01ms}
}

/* ---- Quote band (under the 3 Paddle System) ------------------------------
   Figma: the "Quote" band from the original 3 Paddle section (James Shaw).
   Navy, the quote centred in Fraunces, the name in orange beside the
   wordmark. */
.tcm-quote-band{display:flex; flex-direction:column; align-items:center; gap:18px; text-align:center}
.tcm-quote-band__q{
  margin:0; padding:0; border:0; max-width:62ch;
  font-family:var(--tcm-font-display); font-weight:600;
  font-size:clamp(1.9rem, 1.6vw, 2.3rem); line-height:1.45; color:#fff;
}
.tcm-quote-band__q::before,.tcm-quote-band__q::after{color:var(--tcm-primary)}
.tcm-quote-band__q::before{content:"\201C"; margin-right:.04em}
.tcm-quote-band__q::after{content:"\201D"; margin-left:.02em}
.tcm-quote-band__who{display:flex; align-items:center; justify-content:center; flex-wrap:wrap; gap:12px 16px; margin:0}
.tcm-quote-band__name{font-size:var(--tcm-button); letter-spacing:var(--tcm-track-button); text-transform:uppercase; color:var(--tcm-primary)}
.tcm-quote-band__who img{height:26px; width:auto}
/* Detail sections: the script word matches the larger icon beside it. */
.tcm-detail__top .tcm-paddle-col__word{font-size:clamp(6.4rem, 7vw, 9.6rem)}
/* Phones: small and inline, like the homepage columns (Thomas, 2026-10-16). The old
   rule let the icon grow to 62% of the screen width, which made it huge. */
@media (max-width:560px){
  .tcm-detail__top{flex-wrap:nowrap; gap:12px}
  .tcm-detail__top img{height:60px; width:auto; max-width:none; flex:none}
  .tcm-detail__top .tcm-paddle-col__word{font-size:5.2rem}
}

/* ---- Industry pages (post type "industry") -------------------------------
   Figma: "Industry Page V2 - Construction" (466:690). */

/* Hero: the photo under a navy veil that is heaviest behind the copy. */
.tcm-ind-hero__veil{
  position:absolute; inset:0; z-index:1; pointer-events:none;
  background:linear-gradient(90deg, rgba(34,65,93,.9) 0%, rgba(34,65,93,.72) 45%, rgba(34,65,93,.35) 100%);
}
@media (max-width:767px){ .tcm-ind-hero__veil{background:rgba(34,65,93,.78)} }

/* Resource Download (elements/resource.php): the hand-drawn brochure, then
   the offer and its download button. */
.tcm-resource{display:flex; align-items:center; gap:32px 56px; width:100%}
.tcm-resource__icon{flex:none; width:clamp(130px, 14vw, 190px); height:auto}
.tcm-resource__text{display:flex; flex-direction:column; align-items:flex-start; gap:14px; max-width:760px}
.tcm-resource__title{margin:0; font-family:var(--tcm-font-display); font-weight:600; font-size:clamp(3rem, 3vw, 4rem); line-height:1.2; color:var(--tcm-ink)}
.tcm-resource__lede{margin:0; font-weight:300; font-size:var(--tcm-body); line-height:1.5; color:var(--tcm-ink)}
@media (max-width:640px){ .tcm-resource{flex-direction:column; align-items:flex-start} .tcm-resource__icon{width:120px} }

/* Funnel (elements/funnel.php): figures | funnel | notes. The funnel is one
   triangle (clip-path on the list) cut into bands by white gaps, like the PDF
   guide; the last band is the point. Figures sit level with their bands; the
   arrows run out from both sides in forest green. */
.tcm-funnel{
  --tcm-band:66px; --tcm-gap:6px;
  display:grid; grid-template-columns:minmax(0, 1fr) minmax(0, 1.2fr) minmax(0, 1fr);
  align-items:start; gap:0 24px; width:100%;
}
.tcm-funnel ol, .tcm-funnel ul{margin:0; padding:0; list-style:none}
.tcm-funnel__arrow{flex:none; width:56px; height:14px; color:var(--tcm-forest)}
.tcm-funnel__figures li{height:var(--tcm-band); display:flex; align-items:center; justify-content:flex-end; gap:14px}
.tcm-funnel__fig{display:flex; flex-direction:column; align-items:flex-end; text-align:right}
.tcm-funnel__value{font-family:var(--tcm-font-body); font-weight:700; font-size:2.2rem; line-height:1.1; color:var(--tcm-primary)}
.tcm-funnel__caption{font-size:1.4rem; line-height:1.3; color:var(--tcm-ink)}
.tcm-funnel__icon{flex:none; display:grid; place-items:center; width:44px; height:44px; border-radius:50%; background:var(--tcm-navy); color:#fff; font-size:1.7rem}
.tcm-funnel__icon svg{width:18px; height:18px; fill:currentColor}
.tcm-funnel__bands{clip-path:polygon(0 0, 100% 0, 50% 100%)}
.tcm-funnel__bands li{
  height:var(--tcm-band); border-bottom:var(--tcm-gap) solid #fff;
  display:flex; justify-content:center; align-items:center; text-align:center;
  background:color-mix(in srgb, var(--tcm-navy) calc(100% - var(--i) * 13%), #9fb0c2);
  background-clip:padding-box;
}
.tcm-funnel__bands li:last-child{height:calc(var(--tcm-band) * 1.7); border-bottom:0; align-items:flex-start; padding-top:12px}
/* the label fits the triangle's visible width at that band's height */
.tcm-funnel__bands span{max-width:calc((1 - (var(--i) + .75) / (var(--tcm-funnel-n) + .7)) * 90%); font-size:1.2rem; font-weight:600; letter-spacing:.14em; text-transform:uppercase; line-height:1.2; color:#fff}
.tcm-funnel__bands li:last-child span{max-width:none; width:min-content; font-size:1.1rem; letter-spacing:.1em}
.tcm-funnel__total{margin:14px 0 0; text-align:center; font-family:var(--tcm-font-body); font-weight:700; font-size:2.2rem; color:var(--tcm-ink)}
.tcm-funnel .tcm-funnel__notes{display:flex; flex-direction:column; justify-content:space-around; gap:28px; min-height:calc(var(--tcm-band) * var(--tcm-funnel-n))}
.tcm-funnel__notes li{display:flex; align-items:flex-start; gap:14px; font-family:var(--tcm-font-body); font-weight:700; font-size:1.6rem; line-height:1.4; color:var(--tcm-forest)}
.tcm-funnel__notes .tcm-funnel__arrow{margin-top:.45em}
@media (max-width:991px){
  .tcm-funnel{grid-template-columns:minmax(0, 1fr) minmax(0, 1.2fr); gap:0 20px}
  .tcm-funnel .tcm-funnel__notes{grid-column:1 / -1; min-height:0; margin-top:40px}
  .tcm-funnel__notes .tcm-funnel__arrow{rotate:90deg; margin-top:.3em; width:28px}
}
@media (max-width:600px){
  .tcm-funnel{--tcm-band:60px; --tcm-gap:4px; grid-template-columns:minmax(0, .85fr) minmax(0, 1.15fr); gap:0 10px}
  .tcm-funnel__icon, .tcm-funnel__figures .tcm-funnel__arrow{display:none}
  .tcm-funnel__value{font-size:1.8rem}
  .tcm-funnel__caption{font-size:1.2rem}
  .tcm-funnel__bands span{font-size:calc(1rem - var(--i) * .05rem); letter-spacing:max(0em, calc(.08em - var(--i) * .016em))}
  .tcm-funnel__bands li:last-child{padding-top:4px}
  .tcm-funnel__bands li:last-child span{max-width:none; width:min-content; font-size:.8rem; letter-spacing:0}
  .tcm-funnel .tcm-funnel__notes{margin-top:36px; gap:18px}
  .tcm-funnel__notes li{font-size:1.5rem}
}

/* Case Feature (elements/case-feature.php): the story and its figures on
   navy, the client's quote over the lake below. */
.tcm-feature{width:100%; border-radius:16px; overflow:hidden; background:var(--tcm-navy); color:#fff; box-shadow:0 18px 40px rgba(11,11,11,.14)}
.tcm-feature__top{display:grid; grid-template-columns:minmax(0, 1.5fr) minmax(0, 1fr); gap:40px; align-items:center; padding:clamp(28px, 4vw, 48px)}
.tcm-feature__story{display:flex; flex-direction:column; align-items:flex-start; gap:14px}
.tcm-feature__logo{display:block; height:56px; width:auto; max-width:240px; object-fit:contain; object-position:left center; margin:6px 0 2px}
.tcm-feature__label{margin:0; font-size:1.3rem; font-weight:600; letter-spacing:.14em; text-transform:uppercase; color:var(--tcm-primary)}
.tcm-feature__title{margin:0; font-family:var(--tcm-font-display); font-weight:600; font-size:clamp(2.6rem, 2.4vw, 3.4rem); line-height:1.2; color:#fff}
.tcm-feature__text{margin:0 0 8px; font-weight:300; font-size:1.7rem; line-height:1.6; color:rgba(255,255,255,.88)}
.tcm-feature__stats{margin:0; padding:10px 28px; border-radius:12px; background:var(--tcm-mist); color:var(--tcm-ink)}
.tcm-feature__stat{display:flex; flex-direction:column; align-items:center; gap:4px; padding:16px 0; text-align:center}
.tcm-feature__stat + .tcm-feature__stat{border-top:1px solid rgba(11,11,11,.12)}
.tcm-feature__v{font-family:var(--tcm-font-body); font-weight:700; font-size:3.4rem; line-height:1; color:var(--tcm-primary)}
.tcm-feature__l{font-size:1.25rem; letter-spacing:.12em; text-transform:uppercase; line-height:1.3}
.tcm-feature__quote{
  margin:0; padding:clamp(40px, 5vw, 64px) clamp(24px, 6vw, 96px);
  display:flex; flex-direction:column; align-items:center; gap:20px; text-align:center;
  position:relative; isolation:isolate;
  background:url("../brand/community-lake.jpg") center / cover no-repeat;
}
/* The photo is the case study's own featured image (a dynamic background on
   the element, BugHerd #56), with the lake as the fallback. The darkening sits
   on its own layer so swapping the photo never loses it. */
.tcm-feature__quote::before{content:""; position:absolute; inset:0; z-index:-1; background:linear-gradient(rgba(11,11,11,.55), rgba(11,11,11,.7))}
.tcm-feature__quote .tcm-quote-band__q{max-width:56ch; font-size:clamp(2rem, 1.9vw, 2.6rem)}
.tcm-feature__quote .tcm-quote-band__name{margin:0}
.tcm-feature__logo{order:0}
@media (max-width:767px){ .tcm-feature__top{grid-template-columns:minmax(0, 1fr)} }
/* Case study cards on an industry page: three across, as in Figma. */
.tcm-case-grid.is-industry{grid-template-columns:repeat(3, minmax(0, 1fr)); max-width:980px; margin-inline:auto}
/* Two or four cards: two across, so no card is left on its own. */
.tcm-case-grid.is-industry:has(> :nth-child(2):last-child),
.tcm-case-grid.is-industry:has(> :nth-child(4):last-child){grid-template-columns:repeat(2, minmax(0, 1fr)); max-width:660px}
@media (max-width:899px){ .tcm-case-grid.is-industry{grid-template-columns:repeat(2, minmax(0, 1fr))} }
@media (max-width:639px){ .tcm-case-grid.is-industry{grid-template-columns:minmax(0, 1fr)} }

/* Recommended services on an industry page (Service Groups, Table style):
   an orange highlighter, like the marker in the PDF guide, and a note in
   the heading face above the table. */
.tcm-paddle-list li.is-rec{
  width:fit-content; margin-left:-4px; padding-inline:4px; border-radius:2px; font-weight:400;
  background:linear-gradient(transparent 12%, rgba(248,152,29,.32) 12%, rgba(248,152,29,.32) 88%, transparent 88%);
}
.tcm-rec-note{margin:0 0 36px; font-family:var(--tcm-font-display); font-weight:600; font-size:clamp(1.9rem, 1.8vw, 2.4rem); line-height:1.3; text-align:center; color:var(--tcm-forest)}
/* The note sits in the shared 3 Paddle System component, so it is on every
   page that uses it; it only means something where services are highlighted. */
body:not(.single-industry) .tcm-rec-note{display:none}
.tcm-rec-note mark{padding:0 4px; border-radius:2px; color:inherit; background:linear-gradient(transparent 12%, rgba(248,152,29,.32) 12%, rgba(248,152,29,.32) 88%, transparent 88%)}

/* ---- Industries mega menu (template "Mega Menu — Industries") -----------
   Chosen 2026-09-26: the industries with their headline ROI (option A), and
   the "Not sure where you fit?" call panel (from option B). The list is a
   query loop over the industry pages; {tcm_ind_roi} reads each page's funnel
   total. The header's underline hover is switched off here: the rows light
   up instead. */
.tcm-imenu__title{margin:0; padding-bottom:20px; width:100%; border-bottom:1px solid rgba(255,255,255,.16); font-family:var(--tcm-font-display); font-weight:600; font-size:clamp(2.4rem, 2.2vw, 3rem); line-height:1.15; color:#fff}
.tcm-imenu{display:grid; grid-template-columns:minmax(0, 2fr) minmax(0, 1fr); gap:40px; width:100%; margin-top:22px; align-items:start}
.tcm-imenu__list{display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); column-gap:32px}
#brx-header .tcm-imenu__item{display:flex; align-items:center; gap:12px; padding:12px 6px; border-bottom:1px solid rgba(255,255,255,.1); color:#fff; text-decoration:none; transition:background-color .2s ease}
#brx-header .tcm-imenu__item::after{content:none}
#brx-header .tcm-imenu__item:hover, #brx-header .tcm-imenu__item:focus-visible{background:rgba(255,255,255,.07)}
.tcm-imenu__name{flex:1; font-family:var(--tcm-font-body); font-weight:300; font-size:var(--tcm-mega-link); line-height:1.3}
.tcm-imenu__roi{font-family:var(--tcm-font-body); font-weight:700; font-size:1.5rem; color:var(--tcm-primary); white-space:nowrap}
.tcm-imenu__chev{font-size:1rem; color:#fff; opacity:.55; transition:transform .2s ease, opacity .2s ease}
#brx-header .tcm-imenu__item:hover .tcm-imenu__chev{opacity:1; transform:translateX(3px)}
.tcm-imenu__note{margin:16px 0 0; font-size:1.2rem; color:rgba(255,255,255,.55)}
.tcm-imenu__call{display:flex; flex-direction:column; align-items:flex-start; gap:14px; padding:28px; border-radius:14px; background:rgba(255,255,255,.07)}
.tcm-imenu__label{margin:0; font-size:1.2rem; font-weight:600; letter-spacing:.14em; text-transform:uppercase; color:var(--tcm-primary)}
.tcm-imenu__callh{margin:0; font-family:var(--tcm-font-display); font-weight:600; font-size:clamp(2.4rem, 2.2vw, 3rem); line-height:1.15; color:#fff}
.tcm-imenu__callp{margin:0; font-weight:300; font-size:1.6rem; line-height:1.5; color:#fff}
.tcm-imenu__phone{margin:0; font-size:1.4rem; color:rgba(255,255,255,.8)}
#brx-header .tcm-imenu__phone a{color:#fff; text-decoration:underline; text-underline-offset:3px}
#brx-header .tcm-imenu__phone a::after{content:none}

/* ---- Industries overview (/industries/) --------------------------------
   Header with a paper coaster, a card per industry page (query loop: the
   page's Featured image, {tcm_ind_roi}, its Intro line), what every industry
   page offers, and a call panel for everyone else. */
.tcm-iov-lede{margin:0; font-weight:300; font-size:clamp(1.8rem, 1.5vw, 2.2rem); line-height:1.45; color:rgba(255,255,255,.9)}
.tcm-iov-coaster{flex:none; width:min(300px, 100%); display:flex; flex-direction:column; align-items:center; justify-content:center; text-align:center; padding:0 30px}
.tcm-iov-coaster__v{position:relative; margin:0; font-family:var(--tcm-font-body); font-weight:700; font-size:9rem; line-height:1; color:var(--tcm-primary)}
.tcm-iov-coaster__l{position:relative; margin:8px 0 0; font-size:1.4rem; letter-spacing:.12em; text-transform:uppercase; line-height:1.4; color:var(--tcm-ink)}
.tcm-iov-grid{display:grid; grid-template-columns:repeat(3, minmax(0, 1fr)); gap:24px; width:100%; margin-top:44px}
.tcm-iov-card{display:flex; flex-direction:column; border-radius:16px; overflow:hidden; background:#fff; color:var(--tcm-ink); text-decoration:none; box-shadow:0 10px 28px rgba(11,11,11,.08); transition:transform .25s ease, box-shadow .25s ease}
.tcm-iov-card:hover, .tcm-iov-card:focus-visible{transform:translateY(-4px); box-shadow:0 18px 38px rgba(11,11,11,.14)}
.tcm-iov-card:focus-visible{outline:3px solid var(--tcm-primary); outline-offset:3px}
.tcm-iov-card__img{position:relative; height:170px; width:100%}
.tcm-iov-roi{position:absolute; top:12px; right:12px; padding:6px 11px; border-radius:99px; background:var(--tcm-primary); color:#fff; font-weight:700; font-size:1.3rem; line-height:1.2}
.tcm-iov-card__body{flex:1; display:flex; flex-direction:column; gap:10px; padding:20px 22px 22px}
.tcm-iov-card__title{margin:0; font-family:var(--tcm-font-display); font-weight:600; font-size:2.2rem; line-height:1.2}
.tcm-iov-card__text{margin:0; font-weight:300; font-size:1.5rem; line-height:1.5}
.tcm-iov-card__link{align-self:flex-start; margin-top:auto; padding-top:6px}   /* the approved text link (see "Text link"), brush on card hover */
.tcm-iov-note{margin:22px 0 0; text-align:center; font-size:1.3rem; color:var(--tcm-ink-muted)}
.tcm-iov-steps{display:grid; grid-template-columns:repeat(3, minmax(0, 1fr)); gap:40px; width:100%; margin-top:48px; text-align:center}
.tcm-iov-step{display:flex; flex-direction:column; align-items:center; gap:12px}
.tcm-iov-step img{height:120px; width:auto}
.tcm-iov-step h3{margin:0; font-family:var(--tcm-font-display); font-weight:600; font-size:2.2rem; line-height:1.2; color:var(--tcm-ink)}
.tcm-iov-step p{margin:0; max-width:32ch; font-weight:300; font-size:1.6rem; line-height:1.5; color:var(--tcm-ink)}
.tcm-iov-callout{display:grid !important; grid-template-columns:minmax(0, 1.6fr) minmax(0, 1fr); gap:48px; align-items:center}
.tcm-iov-phone{margin:0; font-size:1.5rem; color:rgba(255,255,255,.85)}
.tcm-iov-phone a{color:#fff; font-weight:600}
@media (max-width:991px){ .tcm-iov-grid{grid-template-columns:repeat(2, minmax(0, 1fr))} .tcm-iov-callout{grid-template-columns:minmax(0, 1fr)} }
@media (max-width:640px){ .tcm-iov-grid, .tcm-iov-steps{grid-template-columns:minmax(0, 1fr)} .tcm-iov-coaster{width:240px} .tcm-iov-coaster__v{font-size:7rem} }

/* ---- Learn (/blog/) and articles -----------------------------------------
   The newest article pinned in the header, category chips (a Bricks radio
   filter in button mode, styled like the Results page chips), the article
   grid with "load more", and the free guide band. Category tags are coloured
   per category through data-topic. */
.tcm-bfeat{flex:0 0 470px; max-width:100%; display:flex; flex-direction:column; border-radius:16px; overflow:hidden; background:#fff; color:var(--tcm-ink); text-decoration:none; box-shadow:0 18px 40px rgba(0,0,0,.3); rotate:1.5deg; transition:rotate .3s ease, transform .3s ease}
.tcm-bfeat:hover, .tcm-bfeat:focus-visible{rotate:0deg; transform:translateY(-3px)}
.tcm-bfeat__img{height:220px; width:100%}
.tcm-bfeat__body{display:flex; flex-direction:column; gap:10px; padding:22px 24px 24px}
.tcm-btag{margin:0; font-size:1.15rem; font-weight:600; letter-spacing:.14em; text-transform:uppercase; line-height:1.3; color:var(--tcm-ink-muted)}
.tcm-btag[data-topic="strategy"]{color:#c46f0a}
.tcm-btag[data-topic="design"]{color:var(--tcm-navy)}
.tcm-btag[data-topic="advertising"]{color:var(--tcm-forest)}
.tcm-bpost__title{margin:0; font-family:var(--tcm-font-display); font-weight:600; font-size:2.2rem; line-height:1.25; color:var(--tcm-ink)}
.tcm-bpost__text{margin:0; font-weight:300; font-size:1.5rem; line-height:1.5; color:var(--tcm-ink); display:-webkit-box; -webkit-line-clamp:3; -webkit-box-orient:vertical; overflow:hidden}
.tcm-bpost__date{margin:0; font-size:1.3rem; color:var(--tcm-ink-muted)}
/* Date, then category, on one line at the top of each card */
.tcm-bpost__meta{display:flex; flex-wrap:wrap; align-items:baseline; gap:4px 10px; margin:0}
.tcm-bpost__meta .tcm-bpost__date{font-size:1.25rem; letter-spacing:.04em}
.tcm-bpost__meta .tcm-btag::before{content:"·"; margin-right:10px; color:var(--tcm-ink-muted); font-weight:400}
.tcm-bpost__read{align-self:flex-start; margin-top:auto; padding-top:6px}
/* chips */
/* Since Bricks 2.4 the filter is a <fieldset> (with a visually hidden legend,
   "Group label" in the element) around a <ul class="brx-filter-options">,
   so the row layout sits on the list, not the root. */
.tcm-bchips{margin:0; padding:0; border:0; min-width:0}
.tcm-bchips .brx-filter-options{display:flex; flex-wrap:wrap; justify-content:center; gap:6px; margin:0; padding:0; list-style:none}
.tcm-bchips li{margin:0}
#brx-content .tcm-bchips .bricks-button{
  font-family:var(--tcm-font-body); font-weight:500; font-size:1.25rem; line-height:1; letter-spacing:.08em; text-transform:uppercase;
  padding:9px 13px; border-radius:99px; border:1.5px solid rgba(11,11,11,.16); background:var(--tcm-white); color:var(--tcm-ink);
  cursor:pointer; box-shadow:none; transition:background-color .25s ease, border-color .25s ease, color .25s ease;
}
#brx-content .tcm-bchips .bricks-button::after, #brx-content .tcm-bchips .bricks-button::before{content:none}
#brx-content .tcm-bchips .bricks-button:hover{border-color:var(--tcm-forest)}
#brx-content .tcm-bchips .brx-option-active .bricks-button,
#brx-content .tcm-bchips .bricks-button.brx-option-active{background:var(--tcm-forest); border-color:var(--tcm-forest); color:#fff}
.tcm-bchips .brx-option-count{margin-left:6px; font-weight:400; color:var(--tcm-ink-muted)}
.tcm-bchips .brx-option-active .brx-option-count{color:rgba(255,255,255,.75)}
/* The Year chip: a chip that opens a small grid of years with their counts. */
.tcm-bchips{position:relative}
.tcm-bchips .brx-filter-options{align-items:center}
.tcm-yearchip-li{position:relative}
.tcm-yearchip summary{list-style:none; cursor:pointer; display:inline-flex; align-items:center; gap:8px}
.tcm-yearchip summary::-webkit-details-marker{display:none}
.tcm-yearchip summary i{font-size:1rem; transition:transform .2s ease}
.tcm-yearchip[open] summary i{transform:rotate(180deg)}
#brx-content .tcm-bchips .tcm-yearchip[open] summary:not(.brx-option-active){border-color:var(--tcm-forest)}
.tcm-yearchip__pop{position:absolute; right:0; top:calc(100% + 8px); z-index:30; width:300px; padding:14px; border-radius:14px; background:#fff; box-shadow:0 12px 30px rgba(11,11,11,.16); display:grid; grid-template-columns:repeat(3, minmax(0, 1fr)); gap:4px; text-align:left}
.tcm-yearchip__pop a{display:flex; justify-content:space-between; align-items:baseline; padding:8px 10px; border-radius:8px; font-size:1.5rem; color:var(--tcm-ink); text-decoration:none; font-variant-numeric:tabular-nums}
.tcm-yearchip__pop a span{font-size:1.1rem; color:var(--tcm-ink-muted)}
.tcm-yearchip__pop a:hover, .tcm-yearchip__pop a:focus-visible{background:var(--tcm-mist)}
.tcm-yearchip__pop a.is-on{background:var(--tcm-forest); color:#fff}
.tcm-yearchip__pop a.is-on span{color:rgba(255,255,255,.75)}
.tcm-yearchip__pop .tcm-yearchip__all{grid-column:1 / -1; font-size:1.2rem; font-weight:600; letter-spacing:.12em; text-transform:uppercase; color:var(--tcm-forest)}
/* phones: the chips scroll sideways, so the grid opens from the bar, full width (not clipped by the row) */
@media (max-width:767px){
  .tcm-yearchip-li{position:static}
  .tcm-yearchip__pop{left:0; right:0; width:auto}
}
.tcm-bchips input:focus-visible + .bricks-button{outline:2px solid var(--tcm-primary); outline-offset:2px}
/* grid */
.tcm-bgrid{display:grid; grid-template-columns:repeat(3, minmax(0, 1fr)); gap:40px 28px; width:100%}
.tcm-bpost{display:flex; flex-direction:column; color:var(--tcm-ink); text-decoration:none}
.tcm-bpost__img{aspect-ratio:16/10; width:100%; border-radius:14px; transition:transform .3s ease}
.tcm-bpost:hover .tcm-bpost__img{transform:scale(1.02)}
.tcm-bpost:hover .tcm-bpost__title{text-decoration:underline; text-decoration-color:var(--tcm-primary); text-underline-offset:4px}
.tcm-bpost__body{flex:1; display:flex; flex-direction:column; gap:8px; padding:16px 2px 0}
/* Keep reading (article template): the Industries card, on the paper background */
.tcm-bpost--card{border-radius:16px; overflow:hidden; background:#fff; box-shadow:0 10px 28px rgba(11,11,11,.08); transition:transform .25s ease, box-shadow .25s ease}
.tcm-bpost--card:hover, .tcm-bpost--card:focus-visible{transform:translateY(-4px); box-shadow:0 18px 38px rgba(11,11,11,.14)}
.tcm-bpost--card:focus-visible{outline:3px solid var(--tcm-primary); outline-offset:3px}
.tcm-bpost--card .tcm-bpost__img{border-radius:0; aspect-ratio:auto; height:170px}
.tcm-bpost--card:hover .tcm-bpost__img{transform:none}
.tcm-bpost--card:hover .tcm-bpost__title{text-decoration:none}
.tcm-bpost--card .tcm-bpost__body{gap:10px; padding:20px 22px 22px}
.tcm-bgrid:has(> .tcm-bpost--card){gap:24px}
/* the paging control: the orange button over a trail of pages (elements/load-more.php) */
.tcm-bmore-trail{display:flex; align-items:center; width:min(560px, 100%); margin:6px 0 0; padding:0; list-style:none}
.tcm-bmore-trail li{display:flex; align-items:center; flex:1 1 0; margin:0}
.tcm-bmore-trail li:first-child{flex:0 0 auto}
.tcm-bmore-trail__line{flex:1 1 auto; height:0; border-top:3px dashed rgba(248,152,29,.45)}
.tcm-bmore-trail li.is-done .tcm-bmore-trail__line, .tcm-bmore-trail li.is-on .tcm-bmore-trail__line{border-top-style:solid; border-top-color:var(--tcm-primary)}
.tcm-bmore-trail__dot{flex:none; display:grid; place-items:center; width:30px; height:30px; border-radius:50%; border:3px solid var(--tcm-primary); background:var(--tcm-paper); color:var(--tcm-ink); font-size:1.2rem; font-weight:600; line-height:1; text-decoration:none; font-variant-numeric:tabular-nums; transition:transform .2s ease}
a.tcm-bmore-trail__dot:hover, a.tcm-bmore-trail__dot:focus-visible{transform:scale(1.15)}
.tcm-bmore-trail li.is-done .tcm-bmore-trail__dot{background:var(--tcm-primary); color:#fff}
.tcm-bmore-trail li.is-on .tcm-bmore-trail__dot{width:38px; height:38px; border-color:var(--tcm-forest); background:var(--tcm-forest); color:#fff}
.tcm-bmore-trail .is-gap{flex:1.6 1 0}   /* the skipped pages: a longer stretch of the same line */
/* Paging under the grid (elements/load-more.php): a link to the next page, loaded in place */
.tcm-bmore-nav{display:flex; flex-direction:column; align-items:center; gap:12px; width:100%; margin-top:8px}
.tcm-bmore-nav__status{margin:0; font-size:1.3rem; color:var(--tcm-ink-muted)}
.tcm-bmore-nav__status:empty{display:none}
/* Topic chips as links (elements/topic-chips.php) */
#brx-content .tcm-bchips a.bricks-button{text-decoration:none}
#brx-content .tcm-bchips a.bricks-button:focus-visible{outline:2px solid var(--tcm-primary); outline-offset:2px}
/* guide band */
.tcm-bguide{display:flex !important; flex-direction:row !important; align-items:center; gap:48px}
.tcm-bguide__icon{width:190px; height:auto !important; flex:none; align-self:center}   /* keep its proportions; the row would stretch it */
.tcm-bguide__text{margin:0; font-weight:300; font-size:1.8rem; line-height:1.5; color:var(--tcm-ink)}
.tcm-bguide__chips{display:flex; flex-wrap:wrap; gap:8px; margin-top:6px}
.tcm-bguide__chip{padding:8px 14px; border-radius:99px; border:1.5px solid rgba(11,11,11,.18); background:#fff; color:var(--tcm-ink); font-size:1.35rem; text-decoration:none; transition:border-color .2s ease, color .2s ease}
.tcm-bguide__chip:hover, .tcm-bguide__chip:focus-visible{border-color:var(--tcm-primary); color:var(--tcm-ink)}
@media (max-width:991px){ .tcm-bgrid{grid-template-columns:repeat(2, minmax(0, 1fr))} .tcm-bfeat{flex:none; width:100%; rotate:0deg} }
@media (max-width:640px){
  .tcm-bgrid{grid-template-columns:minmax(0, 1fr)}
  .tcm-bguide{flex-direction:column !important; align-items:flex-start}
  .tcm-bguide__icon{width:130px}
  .tcm-bchips{width:calc(100% + 32px); margin-inline:-16px}
  .tcm-bchips .brx-filter-options{flex-wrap:nowrap; justify-content:flex-start; overflow-x:auto; scrollbar-width:none; padding:4px 16px}
  .tcm-bchips li{flex:none}
}
/* Article (template "Article (blog post)"): navy header, the photo lifting
   out of it, then the text in a reading column. The old articles use <h3>
   for their subheads, which the site sets in the script face, so inside an
   article every heading is set in the display face instead. */
.tcm-article__crumbs{display:flex; align-items:center; gap:10px; margin:0; font-size:1.3rem; font-weight:600; letter-spacing:.14em; text-transform:uppercase; color:rgba(255,255,255,.7)}
.tcm-article__crumbs a{color:inherit; text-decoration:none}
.tcm-article__crumbs a:hover{color:#fff}
.tcm-article__crumbs i{font-size:.8em; color:var(--tcm-primary)}
.tcm-article__crumbs span{color:var(--tcm-primary)}
.tcm-article__title{margin:0; font-family:var(--tcm-font-display); font-weight:600; font-size:clamp(3.6rem, 4vw, 5.6rem); line-height:1.1; color:#fff}
.tcm-article__meta{margin:0; font-size:1.5rem; color:rgba(255,255,255,.75)}
.tcm-article-lead{width:100%; display:flex; flex-direction:column; align-items:center; gap:14px; margin-top:-110px}
.tcm-article-lead.is-none{display:none}
#brxe-atop:has(~ #brxe-amain .tcm-article-lead.is-none){padding-bottom:72px}   /* nothing overlaps the header: close it up */
#brxe-amain:has(.tcm-article-lead.is-none){padding-top:56px}
.tcm-article__hero{width:100%; max-height:560px; object-fit:cover; border-radius:18px; box-shadow:0 22px 50px rgba(11,11,11,.25)}
.tcm-article__hero.is-tall{width:auto; max-width:100%; max-height:720px; object-fit:contain}
.tcm-article__hero--video{aspect-ratio:16/9; overflow:hidden; background:#000}
.tcm-article__hero--video iframe{display:block; width:100%; height:100%; border:0}
.tcm-article{width:100%; max-width:760px; font-weight:300; font-size:1.8rem; line-height:1.7; color:var(--tcm-ink)}
.tcm-article > * + *{margin-top:1.1em}
.tcm-article h2, .tcm-article h3, .tcm-article h4{margin:1.8em 0 .5em; font-family:var(--tcm-font-display); font-weight:600; line-height:1.25; color:var(--tcm-ink)}
.tcm-article h2{font-size:3.2rem}
.tcm-article h3{font-size:2.6rem}
.tcm-article h4{font-size:2.1rem}
.tcm-article h3 strong, .tcm-article h2 strong{font-weight:inherit}
.tcm-article h6{margin:0 0 1.5em; font-family:var(--tcm-font-body); font-weight:400; font-size:1.4rem; letter-spacing:.02em; line-height:1.5; color:var(--tcm-ink-muted)}
.tcm-article h6 a{color:inherit}
.tcm-article a{color:var(--tcm-navy); text-decoration:underline; text-decoration-color:var(--tcm-primary); text-underline-offset:3px}
.tcm-article a:hover{color:var(--tcm-primary)}
.tcm-article strong, .tcm-article b{font-weight:600}
.tcm-article ul, .tcm-article ol{padding-left:1.3em}
.tcm-article li + li{margin-top:.4em}
.tcm-article img{display:block; max-width:100%; height:auto; margin:1.6em auto 0; border-radius:12px}
.tcm-article .caption{margin-top:.6em; text-align:center; color:var(--tcm-ink-muted); line-height:1.4}
.tcm-article blockquote{margin:1.6em 0; padding:0 0 0 22px; border-left:3px solid var(--tcm-primary); font-family:var(--tcm-font-display); font-weight:600; font-size:2.2rem; line-height:1.45}
.tcm-article iframe{display:block; width:100%; aspect-ratio:16/9; height:auto; border:0; border-radius:12px; margin-top:1.6em}
/* empty paragraphs the old site left behind (a block paragraph is never empty
   in this way, and one with text that ends in a line break must still show) */
.tcm-article p:empty, .tcm-article p:not(.wp-block-paragraph):has(> br:only-child){display:none}
/* Option B (2026-09-29): text in a 760px column; side-by-side images, galleries,
   tables and "Wide width" blocks widen to 1100px. Old articles bring Bootstrap
   rows (.row > .col-*); new ones use the Columns, Gallery and Table blocks. */
.tcm-article section > * + *{margin-top:1.1em}
.tcm-article h1{margin:1.8em 0 .5em; font-family:var(--tcm-font-display); font-weight:600; font-size:3.2rem; line-height:1.25; color:var(--tcm-ink)}
.tcm-article .row{display:grid; grid-template-columns:repeat(12, minmax(0, 1fr)); gap:32px; align-items:start}
.tcm-article .row > [class*="col-"]{grid-column:span 6}
/* Bootstrap widths: col-lg-* for mid-size screens, col-xl-* (which wins) from 1200px */
.tcm-article .row > .col-lg-3{grid-column:span 3}
.tcm-article .row > .col-lg-4{grid-column:span 4}
.tcm-article .row > .col-lg-8{grid-column:span 8}
.tcm-article .row > .col-lg-9{grid-column:span 9}
.tcm-article .row > .col-lg-12{grid-column:span 12}
@media (min-width:1200px){
  .tcm-article .row > .col-xl-3{grid-column:span 3}
  .tcm-article .row > .col-xl-4{grid-column:span 4}
  .tcm-article .row > .col-xl-6{grid-column:span 6}
  .tcm-article .row > .col-xl-8{grid-column:span 8}
  .tcm-article .row > .col-xl-9{grid-column:span 9}
  .tcm-article .row > .col-xl-12{grid-column:span 12}
}
.tcm-article .tcm-video iframe{margin-top:0}
.tcm-article .row > [class*="col-"] > div > :first-child, .tcm-article .row img{margin-top:0}
.tcm-article .row img{width:100%}
.tcm-article .caption{font-size:1.4rem}
.tcm-article hr{border:0; border-top:1px solid rgba(11,11,11,.12); margin:2.4em 0}
.tcm-article table{width:100%; border-collapse:collapse; font-size:1.5rem; line-height:1.45}
.tcm-article td, .tcm-article th{padding:10px 12px; border-bottom:1px solid rgba(11,11,11,.1); text-align:left; vertical-align:top}
/* every article table gets the same header row: navy, small capitals */
.tcm-article thead th{padding:14px 16px; border-bottom:0; background:var(--tcm-navy); color:#fff; font-size:1.15rem; font-weight:600; letter-spacing:.08em; text-transform:uppercase}
.tcm-article thead th:first-child{border-radius:8px 0 0 0}
.tcm-article thead th:last-child{border-radius:0 8px 0 0}
.tcm-article .wp-block-table thead{border-bottom:0}
.tcm-article .wp-block-table td, .tcm-article .wp-block-table th{border-left:0; border-right:0; border-top:0}
/* an Embed block sizes its own player (responsive embeds): no extra ratio or gap */
.tcm-article .wp-block-embed{margin-top:1.6em}
.tcm-article .wp-block-embed__wrapper iframe{margin-top:0; aspect-ratio:auto; height:100%; border-radius:12px}
.tcm-article figure{margin-left:0; margin-right:0}
.tcm-article figcaption{margin-top:.6em; font-size:1.4rem; text-align:center; color:var(--tcm-ink-muted); line-height:1.4}
.tcm-article > .row, .tcm-article section > .row, .tcm-article .container > .row, .tcm-article > table, .tcm-article section > table,
.tcm-article .wp-block-columns, .tcm-article .wp-block-gallery, .tcm-article .wp-block-table, .tcm-article .alignwide, .tcm-article .alignfull{
  width:min(1100px, calc(100vw - 64px)); max-width:none; margin-left:50%; transform:translateX(-50%)}
.tcm-article .wp-block-table{overflow-x:auto}
.tcm-article .wp-block-table table{width:100%}
.tcm-article .alignwide img, .tcm-article .alignfull img{width:100%}
/* Pullquote, Buttons and Video blocks (offered in the editor since 2026-09-30):
   a centred take on the article quote, the approved orange button, a
   rounded player. tcm-editor.css mirrors these. */
.tcm-article .wp-block-pullquote{margin:2em 0; padding:1.2em 0; border-top:1px solid rgba(11,11,11,.12); border-bottom:1px solid rgba(11,11,11,.12); text-align:center}
.tcm-article .wp-block-pullquote blockquote{margin:0; padding:0; border:0; font-size:2.8rem; line-height:1.35}
.tcm-article .wp-block-pullquote cite, .tcm-article .wp-block-quote cite{display:block; margin-top:.8em; font-family:var(--tcm-font-body); font-style:normal; font-weight:500; font-size:1.3rem; letter-spacing:.12em; text-transform:uppercase; color:var(--tcm-primary)}
.tcm-article .wp-block-quote p{margin:0}
.tcm-article .wp-block-quote p + p{margin-top:.6em}
.tcm-article .wp-block-buttons{margin-top:1.6em}
.tcm-article .wp-block-button__link{display:inline-flex; align-items:center; gap:10px; padding:13px 28px; border-radius:10px; background:var(--tcm-primary); color:#fff; font-family:var(--tcm-font-body); font-weight:400; font-size:var(--tcm-chrome-micro); letter-spacing:var(--tcm-track-button); line-height:1.1; text-transform:uppercase; text-decoration:none; transition:background-color .2s ease}
.tcm-article .wp-block-button__link:hover{background:#e0850e; color:#fff}
.tcm-article .wp-block-button.is-style-outline .wp-block-button__link{background:transparent; color:var(--tcm-ink); border:2px solid currentColor; padding:11px 26px}
.tcm-article .wp-block-video video{display:block; width:100%; border-radius:12px}
.tcm-article__herocap{margin:0; max-width:760px; font-size:1.4rem; line-height:1.4; text-align:center; color:var(--tcm-ink-muted)}
.tcm-article__herocap:empty{display:none}
@media (max-width:767px){
  .tcm-article .row{grid-template-columns:minmax(0, 1fr); gap:20px} .tcm-article .row > [class*="col-"]{grid-column:1 / -1}
  .tcm-article > .row, .tcm-article section > .row, .tcm-article .container > .row, .tcm-article > table, .tcm-article section > table,
  .tcm-article .wp-block-columns, .tcm-article .wp-block-gallery, .tcm-article .wp-block-table, .tcm-article .alignwide, .tcm-article .alignfull{width:100%; margin-left:0; transform:none}
  .tcm-article table{display:block; max-width:100%; overflow-x:auto}   /* wide tables scroll inside the column */
}
@media (max-width:640px){ .tcm-article{font-size:1.7rem} .tcm-article-lead{margin-top:-90px} .tcm-article__hero{border-radius:12px} .tcm-article h3{font-size:2.3rem} }

/* 404 (template "404 (page not found)"): "Up the creek without a paddle".
   Paper, the headline on the left (it stays put), the trail map on the right:
   elements/lost-map.php, initLostMaps() in tcm-interactions.js. */
.tcm-404{position:relative; overflow:hidden}
.tcm-404__layout{display:grid !important; grid-template-columns:minmax(0, 5fr) minmax(0, 7fr); gap:40px; align-items:start}
.tcm-404__text{position:sticky; top:150px; display:flex; flex-direction:column; align-items:flex-start; gap:22px; padding-top:40px}
#brx-content .tcm-404 .tcm-svc-hero__title{color:var(--tcm-ink)}
#brx-content .tcm-404 .tcm-iov-lede{color:var(--tcm-ink)}
.tcm-404 .tcm-cta-btns{justify-content:flex-start}
#brx-content .tcm-404 .bricks-button.tcm-btn-ghost{color:var(--tcm-ink); border-color:rgba(11,11,11,.35)}
.tcm-404__aside{margin:6px 0 0; font-size:1.4rem; line-height:1.5; color:var(--tcm-ink-muted)}

.tcm-lostmap{position:relative; width:100%; height:1180px}
.tcm-lostmap__creek{position:absolute; inset:0; width:100%; height:100%; overflow:visible}
.tcm-lostmap__water{fill:none; stroke:#9dbac6; stroke-opacity:.55; stroke-width:34; stroke-linecap:round; vector-effect:non-scaling-stroke}
.tcm-lostmap__bank{fill:none; stroke:var(--tcm-navy); stroke-opacity:.18; stroke-width:40; stroke-linecap:round; vector-effect:non-scaling-stroke; stroke-dasharray:1 7}
.tcm-lostmap__trail{fill:none; stroke:var(--tcm-navy); stroke-opacity:.7; stroke-width:2; stroke-linecap:round; stroke-dasharray:2 11; vector-effect:non-scaling-stroke}
.tcm-lostmap__start{position:absolute; left:50%; top:0; margin:0; display:flex; align-items:center; gap:10px; transform:translate(-14px, -70%);
  font-family:var(--tcm-font-display); font-weight:600; font-size:1.9rem; line-height:1; color:var(--tcm-forest); white-space:nowrap}
.tcm-lostmap__x{font-family:var(--tcm-font-body); font-weight:700; font-size:2.2rem; color:var(--tcm-primary)}
.tcm-lostmap__marks{margin:0; padding:0; list-style:none}
.tcm-lostmap.is-mapped .tcm-lostmap__marks li{position:absolute; width:0; height:0}
.tcm-lostmap.is-mapped .tcm-lostmap__marks li::before{content:""; position:absolute; left:0; top:0; width:12px; height:12px; border-radius:50%; transform:translate(-50%, -50%);
  background:var(--tcm-primary); box-shadow:0 0 0 3px #efe5d6, 0 0 0 4.5px rgba(34,65,93,.5)}
.tcm-lostmark{display:flex; align-items:center; gap:14px; width:max-content; max-width:300px; color:var(--tcm-ink); text-decoration:none}
.tcm-lostmap.is-mapped .tcm-lostmark{position:absolute; left:0; top:0; transform:translate(38px, -50%)}
.tcm-lostmap.is-mapped li.is-left .tcm-lostmark{transform:translate(calc(-100% - 38px), -50%); flex-direction:row-reverse; text-align:right}
.tcm-lostmark__icon{flex:none; width:84px; height:84px; object-fit:contain; transition:transform .35s cubic-bezier(.22,.61,.36,1)}
.tcm-lostmark__text{display:flex; flex-direction:column; gap:4px}
.tcm-lostmark__label{font-family:var(--tcm-font-display); font-weight:600; font-size:2.2rem; line-height:1.15; transition:color .25s ease}
.tcm-lostmark__line{font-weight:300; font-size:1.45rem; line-height:1.4}
.tcm-lostmark:hover .tcm-lostmark__label, .tcm-lostmark:focus-visible .tcm-lostmark__label, li.is-near .tcm-lostmark__label{color:#c46f0a}
.tcm-lostmark:hover .tcm-lostmark__icon, .tcm-lostmark:focus-visible .tcm-lostmark__icon, li.is-near .tcm-lostmark__icon{transform:scale(1.1) rotate(-3deg)}
.tcm-lostmark:focus-visible{outline:2px solid var(--tcm-primary); outline-offset:6px; border-radius:8px}
.tcm-lostmap__canoe{position:absolute; left:0; top:0; width:150px; height:auto; pointer-events:none; will-change:transform; animation:tcm-drift 3.2s ease-in-out infinite; z-index:2}
@keyframes tcm-drift{0%,100%{translate:0 0} 50%{translate:0 -4px}}
/* Without JavaScript: no creek, the landmarks as a list */
.tcm-lostmap:not(.is-mapped){height:auto}
.tcm-lostmap:not(.is-mapped) :is(.tcm-lostmap__creek, .tcm-lostmap__start, .tcm-lostmap__canoe){display:none}
.tcm-lostmap:not(.is-mapped) .tcm-lostmap__marks{display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:24px}
@media (max-width:991px){
  .tcm-404__layout{grid-template-columns:minmax(0, 1fr); gap:24px}
  .tcm-404__text{position:static; padding-top:0}
  .tcm-lostmap{height:1250px}
  .tcm-lostmark__icon{width:58px; height:58px}
  .tcm-lostmark{gap:10px; max-width:44vw}
  .tcm-lostmark__label{font-size:1.8rem}
  .tcm-lostmark__line{font-size:1.3rem}
  .tcm-lostmap.is-mapped .tcm-lostmark{transform:translate(20px, -50%)}
  .tcm-lostmap.is-mapped li.is-left .tcm-lostmark{transform:translate(calc(-100% - 20px), -50%)}
  .tcm-lostmap__canoe{width:110px}
  .tcm-lostmap__start{font-size:1.6rem}
}
@media (prefers-reduced-motion:reduce){ .tcm-lostmap__canoe{animation:none} .tcm-lostmark__icon{transition:none} }

/* Careers (inc/careers.php): the job status pill (header crumbs, cards) */
.tcm-jobstatus{display:inline-block; padding:3px 10px; border-radius:99px; font-size:1.15rem; font-weight:600; letter-spacing:.1em; text-transform:uppercase; line-height:1.4; color:#fff; background:rgba(255,255,255,.18)}
.tcm-article__crumbs .tcm-jobstatus[data-status="open"], .tcm-jobstatus[data-status="open"]{background:var(--tcm-forest); color:#fff}
.tcm-jobcard .tcm-jobstatus{color:var(--tcm-ink-muted); background:var(--tcm-mist)}
.tcm-apply__text{color:var(--tcm-ink) !important}
/* Careers overview: open roles as wide cards, past roles as a compact list */
.tcm-joblist{display:flex; flex-direction:column; gap:16px; width:100%}
.tcm-jobcard{display:flex; align-items:center; justify-content:space-between; gap:24px 40px; padding:28px 32px; border-radius:16px; background:#fff; color:var(--tcm-ink); text-decoration:none;
  box-shadow:0 10px 28px rgba(11,11,11,.08); transition:transform .25s ease, box-shadow .25s ease}
.tcm-jobcard:hover, .tcm-jobcard:focus-visible{transform:translateY(-3px); box-shadow:0 18px 38px rgba(11,11,11,.14)}
.tcm-jobcard:focus-visible{outline:3px solid var(--tcm-primary); outline-offset:3px}
.tcm-jobcard__text{display:flex; flex-direction:column; align-items:flex-start; gap:8px; max-width:760px}
.tcm-jobcard__title{margin:0; font-family:var(--tcm-font-display); font-weight:600; font-size:2.6rem; line-height:1.2}
.tcm-jobcard__meta{margin:0; font-size:1.4rem; color:var(--tcm-ink-muted)}
.tcm-jobcard__meta:empty{display:none}
.tcm-jobcard__summary{margin:0; font-weight:300; font-size:1.6rem; line-height:1.55}
.tcm-jobcard .tcm-iov-card__link{flex:none; margin-top:0; padding-top:0; white-space:nowrap}
.tcm-jobcard:hover .tcm-iov-card__link::after, .tcm-jobcard:focus-visible .tcm-iov-card__link::after{clip-path:inset(0 0 0 0)}
.tcm-joblist__none{margin:0; font-size:1.7rem}
.tcm-jobrows{display:flex; flex-direction:column; width:100%; border-top:1px solid rgba(11,11,11,.12)}
.tcm-jobrow{display:grid; grid-template-columns:minmax(0, 1fr) auto auto; align-items:center; gap:8px 24px; padding:14px 4px; border-bottom:1px solid rgba(11,11,11,.12); color:var(--tcm-ink); text-decoration:none}
.tcm-jobrow:hover .tcm-jobrow__title, .tcm-jobrow:focus-visible .tcm-jobrow__title{text-decoration:underline; text-decoration-color:var(--tcm-primary); text-underline-offset:4px}
.tcm-jobrow__title{font-family:var(--tcm-font-display); font-weight:600; font-size:1.9rem; line-height:1.3}
.tcm-jobrow__date{font-size:1.4rem; color:var(--tcm-ink-muted)}
#brxe-crpasth{font-size:2.6rem}
.tcm-statbar--3{grid-template-columns:repeat(3, 1fr)}
.tcm-igfeed{width:100%; max-width:1100px}
.tcm-igfeed iframe{display:block; width:100%; min-height:260px; border:0; overflow:hidden}
.tcm-careers-video{width:100%; max-width:960px}
@media (max-width:767px){
  .tcm-jobcard{flex-direction:column; align-items:flex-start; padding:24px 22px}
  .tcm-jobrow{grid-template-columns:minmax(0, 1fr) auto}
  .tcm-jobrow__date{grid-row:2; font-size:1.3rem}
}

/* Discovery Document (elements/discovery-form.php): a white card on paper,
   one step at a time once tcm-interactions.js runs (.is-stepped). Fields
   share the contact form's look (.tcm-form). */
.tcm-disc{width:100%; max-width:880px; margin:0 auto; padding:40px 48px 44px; border-radius:16px; background:#fff; box-shadow:0 24px 60px rgba(11,11,11,.14); scroll-margin-top:120px}
.tcm-disc__anchor{position:absolute; margin-top:-120px}
/* Steps: shared */
.tcm-disc__progress{margin:0 0 36px; padding:0; list-style:none}
.tcm-disc__progress li{position:relative; min-width:0}
.tcm-disc__progress li.is-done{cursor:pointer}
.tcm-disc__icon img{display:block; width:100%; height:100%; object-fit:contain}
.tcm-disc__num{display:none}
.tcm-disc__text{display:flex; flex-direction:column; gap:2px; min-width:0}
.tcm-disc__stepno{font-size:1.15rem; font-weight:600; letter-spacing:.14em; text-transform:uppercase; color:var(--tcm-ink-muted)}
.tcm-disc__label{font-family:var(--tcm-font-display); font-weight:600; font-size:1.75rem; line-height:1.2; color:var(--tcm-ink-muted)}
.tcm-disc__hint{font-size:1.3rem; line-height:1.35; color:var(--tcm-ink-muted)}
.tcm-disc__progress li[aria-current="step"] .tcm-disc__label, .tcm-disc__progress li.is-done .tcm-disc__label{color:var(--tcm-ink)}
.tcm-disc__progress li[aria-current="step"] .tcm-disc__stepno{color:var(--tcm-primary)}
.tcm-disc__progress li.is-done .tcm-disc__stepno{color:var(--tcm-forest)}

/* A. Trail: icon badges on a dashed path */
.tcm-disc--trail .tcm-disc__progress{display:grid; grid-template-columns:repeat(4, minmax(0, 1fr))}
.tcm-disc--trail .tcm-disc__progress li{display:flex; flex-direction:column; align-items:center; gap:10px; text-align:center}
.tcm-disc--trail .tcm-disc__progress li + li::before{content:""; position:absolute; top:38px; right:calc(50% + 46px); left:calc(-50% + 46px); border-top:2px dashed rgba(11,11,11,.22)}
.tcm-disc--trail .tcm-disc__progress li:is(.is-done, [aria-current="step"]) + li:is(.is-done, [aria-current="step"])::before{border-top-color:var(--tcm-forest); border-top-style:solid}
.tcm-disc--trail .tcm-disc__icon{position:relative; display:block; width:76px; height:76px; padding:12px; border-radius:50%; background:#fff; border:2px solid rgba(11,11,11,.14); transition:border-color .25s ease, box-shadow .25s ease, transform .25s ease}
.tcm-disc--trail li:not(.is-done):not([aria-current="step"]) .tcm-disc__icon img{opacity:.45}
.tcm-disc--trail li[aria-current="step"] .tcm-disc__icon{border:3px solid var(--tcm-primary); box-shadow:0 0 0 6px var(--tcm-primary-tint-15); transform:scale(1.06)}
.tcm-disc--trail li.is-done .tcm-disc__icon{border-color:var(--tcm-forest)}
.tcm-disc--trail li.is-done .tcm-disc__icon::after{content:""; position:absolute; right:-4px; bottom:-2px; width:24px; height:24px; border-radius:50%; background:var(--tcm-forest) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M2.5 6.2l2.3 2.3 4.7-5' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/13px no-repeat; box-shadow:0 0 0 3px #fff}
.tcm-disc--trail .tcm-disc__hint{display:none}
.tcm-disc--trail .tcm-disc__text{align-items:center}

@media (max-width:767px){
  .tcm-disc--trail .tcm-disc__icon{width:54px; height:54px; padding:8px}
  .tcm-disc--trail .tcm-disc__progress li + li::before{top:27px; right:calc(50% + 34px); left:calc(-50% + 34px)}
  .tcm-disc__stepno{display:none}
  .tcm-disc__label{font-size:1.35rem}
}
.tcm-disc__step{display:flex; flex-direction:column; gap:22px}
.tcm-disc__step + .tcm-disc__step{margin-top:48px}
.tcm-disc.is-stepped .tcm-disc__step + .tcm-disc__step{margin-top:0}
.tcm-disc__step[hidden]{display:none !important}
.tcm-disc__title{position:relative; margin:0; font-family:var(--tcm-font-display); font-weight:600; font-size:3rem; line-height:1.2; outline:none}
.tcm-disc__of{position:absolute; width:1px; height:1px; overflow:hidden; clip-path:inset(50%); white-space:nowrap}   /* "Step 3 of 4": the trail shows it; kept for screen readers */
.tcm-disc__intro{margin:-8px 0 0; font-weight:300; font-size:1.7rem; line-height:1.5}
.tcm-disc__fields{display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:18px 16px}
.tcm-disc__field{display:flex; flex-direction:column; gap:8px; min-width:0; margin:0; padding:0; border:0}
.tcm-disc__field--wide{grid-column:1 / -1}
.tcm-disc__field[hidden]{display:none}
.tcm-disc label, .tcm-disc legend{font-size:var(--tcm-subtext); line-height:1.4; color:var(--tcm-ink)}
.tcm-disc legend{margin-bottom:10px; padding:0}
.tcm-disc__req{color:var(--tcm-primary)}
.tcm-disc :is(input[type="text"],input[type="email"],input[type="tel"],input[type="url"],textarea){
  width:100%; min-height:50px; padding:12px 16px; font:inherit; font-size:1.6rem; line-height:1.4; color:var(--tcm-ink);
  background:#f9f8f6; border:1.5px solid rgba(11,11,11,.15); border-radius:8px; transition:border-color .2s ease, box-shadow .2s ease, background-color .2s ease}
.tcm-disc textarea{resize:vertical; min-height:120px}
.tcm-disc :is(input,textarea):hover{border-color:rgba(11,11,11,.3)}
.tcm-disc :is(input,textarea):focus{outline:none; background:#fff; border-color:var(--tcm-forest); box-shadow:0 0 0 3px var(--tcm-forest-tint-15)}
.tcm-disc [aria-invalid="true"]{border-color:#c0392b !important}
.tcm-disc__msg{margin:0; font-size:1.35rem; color:#b03a2e}
.tcm-disc__msg:empty{display:none}
/* choices as tappable chips */
.tcm-disc__options{display:flex; flex-wrap:wrap; gap:8px}
.tcm-disc__option, .tcm-disc__check{position:relative; display:inline-flex; cursor:pointer}
.tcm-disc__option input, .tcm-disc__check input{position:absolute; opacity:0; width:1px; height:1px}
.tcm-disc__option span, .tcm-disc__check span{display:inline-flex; align-items:center; gap:8px; padding:9px 14px; border-radius:99px; border:1.5px solid rgba(11,11,11,.18); background:#fff; font-size:1.45rem; line-height:1.3; transition:border-color .2s ease, background-color .2s ease, color .2s ease}
.tcm-disc__check span::before{content:""; flex:none; width:14px; height:14px; border-radius:4px; border:1.5px solid rgba(11,11,11,.35); background:#fff}
.tcm-disc__option:hover span, .tcm-disc__check:hover span{border-color:var(--tcm-forest)}
.tcm-disc__option input:checked + span, .tcm-disc__check input:checked + span{background:var(--tcm-forest); border-color:var(--tcm-forest); color:#fff}
.tcm-disc__check input:checked + span::before{border-color:#fff; background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M2.5 6.2l2.3 2.3 4.7-5' fill='none' stroke='%23366444' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/10px no-repeat}
.tcm-disc :is(.tcm-disc__option, .tcm-disc__check) input:focus-visible + span{outline:2px solid var(--tcm-primary); outline-offset:2px}
.tcm-disc__note{margin:8px 0 0; padding:10px 14px; border-radius:8px; background:var(--tcm-primary-tint-15); font-size:1.4rem; line-height:1.45}
.tcm-disc__note[hidden]{display:none}
/* services: one collapsible panel per stage */
.tcm-disc__stages{display:flex; flex-direction:column; gap:12px}
.tcm-disc__stage{border:1.5px solid rgba(11,11,11,.12); border-radius:12px; background:#fcfbf9}
.tcm-disc__stage > summary{display:flex; align-items:center; justify-content:space-between; gap:16px; padding:16px 20px; cursor:pointer; list-style:none}
.tcm-disc__stage > summary::-webkit-details-marker{display:none}
.tcm-disc__stage > summary::after{content:""; flex:none; width:8px; height:8px; margin:0 4px 4px 0; border-right:2px solid var(--tcm-ink-muted); border-bottom:2px solid var(--tcm-ink-muted); transform:rotate(45deg); transition:transform .2s ease}
.tcm-disc__stage[open] > summary::after{transform:rotate(225deg); margin-bottom:-4px}
.tcm-disc__stage > summary:focus-visible{outline:2px solid var(--tcm-primary); outline-offset:2px; border-radius:12px}
.tcm-disc__stage-name{font-family:var(--tcm-font-display); font-weight:600; font-size:2rem}
.tcm-disc__stage-count{margin-left:auto; font-size:1.35rem; color:var(--tcm-ink-muted)}
.tcm-disc__stage-count.is-picked{color:var(--tcm-forest); font-weight:600}
.tcm-disc__groups{display:flex; flex-direction:column; gap:18px; padding:4px 20px 22px}
.tcm-disc__group{display:flex; flex-wrap:wrap; gap:8px; margin:0; padding:0; border:0}
.tcm-disc__group legend{width:100%; margin-bottom:8px; font-size:1.25rem; font-weight:600; letter-spacing:.12em; text-transform:uppercase; color:var(--tcm-ink-muted)}
.tcm-disc__nav{display:flex; justify-content:space-between; gap:12px; margin-top:8px}
.tcm-disc__nav .tcm-disc__next, .tcm-disc__nav .tcm-disc__send{margin-left:auto}
/* the approved primary and outline buttons, as on the contact form */
.tcm-disc .tcm-disc__nav .bricks-button{display:inline-flex; align-items:center; gap:10px; padding:14px 26px; border-radius:10px;
  font-size:var(--tcm-chrome-micro); letter-spacing:var(--tcm-track-button); text-transform:uppercase; line-height:1.1; font-weight:400; cursor:pointer}
.tcm-disc .tcm-disc__nav .bricks-button:not(.tcm-btn-ghost){background-color:var(--tcm-primary); color:#fff; border:0}
.tcm-disc .tcm-disc__nav .bricks-button i{font-size:.8em}
.tcm-disc .is-loading{opacity:.6; cursor:progress}
.tcm-disc__status{margin:16px 0 0; font-size:1.5rem; color:var(--tcm-ink-muted)}
.tcm-disc__status:empty{display:none}
.tcm-disc__error{margin:0 0 20px; padding:12px 16px; border-radius:8px; background:#fdecea; color:#8e2b20}
.tcm-disc__decoy{position:absolute !important; left:-10000px; width:1px; height:1px; overflow:hidden}
.tcm-disc__done{text-align:center; padding:24px 0; outline:none}
.tcm-disc__done h2{margin:0 0 12px; font-family:var(--tcm-font-display); font-weight:600; font-size:3.2rem}
.tcm-disc__done p{margin:0 auto; max-width:560px; font-weight:300; font-size:1.8rem; line-height:1.5}
@media (max-width:767px){
  .tcm-disc{padding:28px 20px 30px}
  .tcm-disc__fields{grid-template-columns:minmax(0, 1fr)}
  .tcm-disc__title{font-size:2.5rem}
  .tcm-disc__nav{flex-wrap:wrap}
}

/* Live Google reviews (Reviews Wall with an embed token): the widget from
   reviews.twincreekmedia.com fills the section's width. The min-height gives
   its lazy loader something to see before it has drawn anything. */
.tcm-reviews-embed{width:100%; max-width:1280px; min-height:240px; margin-inline:auto}
.tcm-reviews-embed:has([data-romw-initialized]), .tcm-reviews-embed:has(iframe){min-height:0}
.tcm-reviews-embed [data-romw-token]{min-height:1px}   /* a zero-height box never counts as "in view" for the lazy loader */

/* Company directory (elements/directory.php) on the Contact page: the Team
   cards' green body, without the photo. */
#directory{scroll-margin-top:110px}
.tcm-dir{display:grid; grid-template-columns:repeat(4, minmax(0, 1fr)); gap:24px; width:100%; margin:0; padding:0; list-style:none}
.tcm-dcard{display:flex; flex-direction:column; border-radius:16px; overflow:hidden; background:#f5f7f6;   /* the Team cards' forest tint as seen on white, solid so it holds on paper */ box-shadow:0 0 15px rgba(11,11,11,.12)}
.tcm-dcard__body{flex:1; display:flex; flex-direction:column; gap:6px; padding:18px 22px 22px}
.tcm-dcard__name{margin:0; font-family:var(--tcm-font-display); font-size:var(--tcm-h5); font-weight:600; line-height:1.15; color:var(--tcm-ink)}
.tcm-dcard__role{margin:0 0 8px; font-size:1.15rem; font-weight:600; letter-spacing:.08em; line-height:1.4; text-transform:uppercase; color:var(--tcm-primary)}
.tcm-dcard__ways{display:flex; flex-direction:column; gap:8px; margin:auto 0 0; padding:0; list-style:none}
.tcm-dcard__ways a{display:inline-flex; align-items:center; gap:10px; max-width:100%; font-size:1.45rem; line-height:1.35; color:var(--tcm-ink); text-decoration:none; overflow-wrap:break-word}
.tcm-dcard__ways a:hover span, .tcm-dcard__ways a:focus-visible span{text-decoration:underline; text-decoration-color:var(--tcm-primary); text-underline-offset:3px}
.tcm-dcard__ways i{flex:none; display:grid; place-items:center; width:28px; height:28px; border-radius:50%; background:#fff; color:var(--tcm-forest); font-size:1.2rem}
.tcm-dcard__ext{color:var(--tcm-ink-muted)}
@media (max-width:1100px){ .tcm-dir{grid-template-columns:repeat(3, minmax(0, 1fr))} }
@media (max-width:860px){ .tcm-dir{grid-template-columns:repeat(2, minmax(0, 1fr))} }
@media (max-width:560px){ .tcm-dir{grid-template-columns:minmax(0, 1fr)} }

/* "Know someone here?" then, on its own line, the company directory link (as on the live site) */
.tcm-knowsomeone{display:flex; flex-direction:column; align-items:flex-start; gap:6px}
.tcm-knowsomeone__q{margin:0; font-size:1.6rem; line-height:1.4; color:var(--tcm-ink)}

/* Cards for articles with no picture: a team sketch by topic (inc/blog.php).
   !important: Bricks hides backgrounds on lazy elements until they scroll in. */
.tcm-sketch{background:var(--tcm-paper) center/cover no-repeat}
.tcm-sketch.tcm-sketch--strategy{background-image:url("../brand/team-sketch-summit.jpg") !important}
.tcm-sketch.tcm-sketch--design{background-image:url("../brand/team-sketch-forest.jpg") !important}
.tcm-sketch.tcm-sketch--advertising{background-image:url("../brand/team-sketch-lake.jpg") !important}
.tcm-sketch.tcm-sketch--company{background-image:url("../brand/team-sketch-campfire.jpg") !important}

/* Service pages: the website platform comparison (Website Design, E-commerce),
   a wide part of its own, styled like the article tables. */
.tcm-detail.is-text:has(.tcm-compare){grid-template-columns:minmax(0, 1100px)}
.tcm-table-scroll{max-width:100%; overflow-x:auto; margin-top:20px}
.tcm-compare{width:100%; min-width:760px; border-collapse:collapse; font-size:1.45rem; line-height:1.45}
.tcm-compare th, .tcm-compare td{padding:12px 14px; border-bottom:1px solid rgba(11,11,11,.1); text-align:left; vertical-align:top; font-weight:300}
.tcm-compare tbody th{font-weight:600; white-space:nowrap}
.tcm-compare thead th{padding:14px 16px; border-bottom:0; background:var(--tcm-navy); color:#fff; font-size:1.15rem; font-weight:600; letter-spacing:.08em; text-transform:uppercase}
.tcm-compare thead th:first-child{border-radius:8px 0 0 0}
.tcm-compare thead th:last-child{border-radius:0 8px 0 0}
/* A long part of a service: the picture stays in view beside the text instead of
   floating halfway down it (build-page.py adds .is-long). */
@media (min-width:992px){ .tcm-detail.is-long{align-items:start} .tcm-detail.is-long > .tcm-detail__img{position:sticky; top:140px} }

/* Service names in the 3 Paddle lists, linked to their pages (Service Groups,
   "Link to the service pages"): the list's own colour, a fine underline on hover. */
.tcm-svc-link{color:inherit; text-decoration:none; text-underline-offset:3px; text-decoration-thickness:1px; text-decoration-color:color-mix(in srgb, currentColor 45%, transparent); transition:text-decoration-color .15s ease}
.tcm-svc-link:hover, .tcm-svc-link:focus-visible{text-decoration-line:underline}
.tcm-svc-link:focus-visible{outline:2px solid var(--tcm-primary); outline-offset:2px; border-radius:2px}
/* The quote with the name under it (case studies, 2026-10-01). */
.tcm-cs-quote__wrap{display:flex; flex-direction:column; gap:20px}

/* ---- Mobile fixes (2026-10-16, from a 360px sweep of every page) ---------
   A plain 1fr grid column cannot shrink below its widest unbreakable content,
   so a logo or a row of stat chips made the whole column wider than the phone
   and the hero text was cut off at the right edge. minmax(0, 1fr) lets it shrink. */
@media (max-width:991px){
  .tcm-cs-hero__row{grid-template-columns:minmax(0, 1fr)}
  /* the rule above it (.tcm-cs-hero__text > *{max-width:none}) also lifted the logo's cap */
  .tcm-cs-hero__text > .tcm-cs-hero__logo{max-width:min(260px, 100%)}
}
/* Stat bars: two columns that can shrink, tighter tracking and padding so long
   labels ("CONSUMPTION", "PERFORMANCE") fit whole; the 3-up variant included
   (its desktop rule came later in this file and kept three columns on phones). */
@media (max-width:767px){
  .tcm-statbar, .tcm-statbar.tcm-statbar--3{grid-template-columns:repeat(2, minmax(0, 1fr))}
  .tcm-statbar--3 .tcm-statbar__item:nth-child(3){border-left:0; grid-column:1 / -1}
  .tcm-statbar__item{padding:4px 12px; min-width:0}
  .tcm-statbar__l{letter-spacing:.12em}
}
/* 404 map: the start label ran off the right edge on phones, and the canoe
   covers its start; on phones it sits just past the canoe, on two lines. */
@media (max-width:600px){
  .tcm-lostmap__start{font-size:1.5rem; gap:6px; white-space:normal; width:130px; line-height:1.15; align-items:flex-start; transform:translate(40px, -60%)}
  .tcm-lostmap__x{display:none}
}
/* Articles: long handles and addresses wrap instead of widening the page. */
.tcm-article :is(p, li, a, td){overflow-wrap:break-word}
/* Safety net: nothing may make a phone page scroll sideways. clip, not hidden,
   so position:sticky keeps working. */
html, body{overflow-x:clip}
/* Bricks locks the page under the open phone menu with body{overflow:hidden}.
   That turns <body> into a scroll container, which unhooks the sticky header:
   it jumped back to the top of the page, taking the menu's X with it, while
   the page itself still scrolled underneath. Lock the viewport (<html>)
   instead and keep <body> a plain clipper (2026-10-17). */
html:has(> body.no-scroll){overflow:hidden}
html body.no-scroll{overflow-x:clip; overflow-y:visible}
/* Comparison tables: the scroll wrapper only scrolls if its parents may be
   narrower than the table (grid and flex items default to min-width:auto). */
.tcm-detail > *, .tcm-detail .tcm-cs-prose{min-width:0}
/* Funnel on phones: taller rows and a wider figures column, so a long caption
   ("add to cart, web forms, Google profile calls, ...") stays in its row. */
@media (max-width:600px){
  .tcm-funnel{--tcm-band:78px; grid-template-columns:minmax(0, 1fr) minmax(0, 1fr)}
  .tcm-funnel__caption{font-size:1.15rem; line-height:1.25}
}
/* ...and phones get told it scrolls. */
@media (max-width:767px){
  .tcm-table-scroll::before{content:"Swipe to compare \2192"; display:block; position:sticky; left:0; margin:0 0 8px; font-size:1.2rem; font-weight:600; letter-spacing:.08em; text-transform:uppercase; color:var(--tcm-primary)}
}
/* 3 Paddle System timeline (river, canoe, quick-win / full campaign): hidden on
   phones (Thomas, 2026-10-16); the stacked Map / Make / Move below carries it. */
@media (max-width:767px){
  .tcm-paddle{display:none}
  /* the timeline was the blue band's bottom spacing */
  .brxe-pshead:has(.tcm-paddle){padding-bottom:72px}
}
