.container{width:min(var(--container),calc(100% - 2*var(--space-5)));margin-inline:auto}

.btn{display:inline-flex;align-items:center;justify-content:center;min-height:46px;padding:0 var(--space-6);border-radius:var(--radius-chip);font-weight:700;border:1.5px solid transparent;cursor:pointer;transition:transform .12s ease,background .16s ease}
.btn:hover{transform:translateY(-1px)}
.btn-primary{color:#fff;background:var(--ink)}
.btn-primary:hover{background:var(--ink-dark)}

.site-header{position:sticky;top:0;z-index:50;background:color-mix(in srgb,var(--paper) 92%,transparent);backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}
.header-inner{display:flex;align-items:center;gap:var(--space-6);padding:var(--space-4) 0}
.topnav{display:flex;gap:var(--space-5);margin-left:auto;font-weight:600}
.topnav a{color:var(--ink);border-radius:var(--radius-nav);padding:var(--space-1) var(--space-2)}
.topnav a:hover{color:var(--accent)}
.topnav a[aria-current="page"]{color:var(--accent)}

.nav-toggle{display:none;margin-left:auto;flex-direction:column;gap:4px;background:none;border:0;padding:var(--space-2);cursor:pointer;border-radius:var(--radius-nav)}
.nav-toggle span{display:block;width:22px;height:2px;background:var(--ink)}
.mobilenav{display:none;flex-direction:column;padding:var(--space-3) var(--space-5) var(--space-5);border-top:1px solid var(--line);background:var(--card)}
.mobilenav a{padding:var(--space-3) 0;font-weight:600;border-bottom:1px solid var(--line)}
.mobilenav[hidden]{display:none}

.site-footer{margin-top:var(--space-7);background:var(--ink);color:var(--line)}
.footer-inner{display:flex;flex-wrap:wrap;gap:var(--space-4) var(--space-6);align-items:center;padding:var(--space-7) 0}
.footer-brand{font-family:var(--font-heading);font-weight:800;margin:0}
.footer-nav{display:flex;gap:var(--space-5);margin-left:auto}
.footer-nav a:hover{color:#fff}
.footer-legal{width:100%;color:var(--muted);font-size:var(--text-small);margin:var(--space-4) 0 0}

@media (max-width:820px){
  .topnav{display:none}
  .header-inner .btn-primary{display:none}
  .nav-toggle{display:flex}
  .mobilenav:not([hidden]){display:flex}
}


/* ===========================================================================
   Sun State International — site design layer
   The tokens carry colour, type and spacing; this file carries the handful of
   structural decisions the handoff makes that tokens alone cannot express:
   the 48px page gutter, the 90px section rhythm, hard-edged chrome, and the
   contrast rules for text on the near-black chrome and the red accent bands.
   Everything below is scoped to platform block classes or to a node id.
   =========================================================================== */

/* The handoff sets text-wrap: pretty on <body>, so every heading and paragraph
   on the site is laid out with it. It is the reason its headings break where
   they do — without it the same text, at the same size in the same box, keeps
   one more word on the first line and strands the last. */
body { text-wrap: pretty; }


/* --- Page gutter -----------------------------------------------------------
   blocks.css pins a section's container to --space-4; the handoff's gutter is
   48px / 32px / 20px, which is what layout.padDesktop et al. already record. */
.bz-section > .bz-container { padding-inline: var(--container-pad); }
@media (max-width: 1100px) { .bz-section > .bz-container { padding-inline: var(--container-pad-tablet); } }
@media (max-width: 640px)  { .bz-section > .bz-container { padding-inline: var(--container-pad-mobile); } }

/* --- Section rhythm --------------------------------------------------------
   The handoff's own token says 120px, but the sections it draws almost all use
   90 (68 of them) with 80 and 100 next; 120 appears nowhere. Sections ask for
   the band rhythm with paddingY 10, so that is what 10 means here. 8 and 9 stay
   64/80 for tighter bands. */
:root { --space-10: 90px; }
/* The handoff separates the dark *chrome* (#141414 — header, footer, the type
   rail, the legal hero) from --color-ink (#242424), which is body text and the
   contact band. The platform has one ink token, so the chrome values live here. */
:root {
  --chrome: #141414;
  --chrome-line: #333333;
  --chrome-text: #EDEDED;
  --chrome-body: #C7C1B4;
  --chrome-meta: #A0A0A0;
  --chrome-label: #8A8A8A;
  --chrome-dim: #B5B5B5;
  --body-text: #3f3f3f;
}
@media (max-width: 640px) {
  :root { --space-8: 48px; --space-9: 56px; --space-10: 64px; }
}


/* --- Block padding ---------------------------------------------------------
   blocks.css opens every block with 16px of vertical padding. The handoff sets
   its rhythm with margins on the headings and gaps on the grids instead, so the
   padding doubles every gap it participates in. Zeroing it here puts the two
   models back in step; spacing that is wanted is asked for explicitly. */
.bz-block { padding-block: 0; }

/* --- Type ------------------------------------------------------------------ */
body { color: #242424; font-size: var(--text-body); line-height: var(--leading-body); }
h1, h2, h3, h4, h5, h6 { font-family: var(--font-heading); letter-spacing: normal; }
/* The handoff tracks in only its display headings: 32 of them carry -.01em and
   not one of its 227 section headings does. */
.bz-block h1 { letter-spacing: -0.01em; }
.bz-block h2, .bz-block h3, .bz-block h4 { letter-spacing: normal; }
.bz-block h1 { font-size: var(--text-h1); line-height: 1.05; }
.bz-block h2 { font-size: var(--text-h2); line-height: 1.6; }
.bz-block h3 { font-size: var(--text-h3); }
@media (max-width: 1100px) { .bz-block h1 { font-size: 46px; } }
@media (max-width: 640px) {
  .bz-block h1 { font-size: 30px; }
  .bz-block h2 { font-size: 28px; }
  .bz-block h3 { font-size: 24px; }
}

/* The handoff's eyebrow: tracked-out micro-label, muted on light, not accent. */
.bz-block .bz-eyebrow, .bz-eyebrow {
  font: 700 var(--text-eyebrow) / 1 var(--font-body);
  letter-spacing: 0.16em;
  color: var(--muted);
  margin-bottom: 18px;
}
.bz-section--bg-ink .bz-eyebrow, .bz-col--bg-ink .bz-eyebrow { color: #E2E2E2; }
.bz-section--bg-accent .bz-eyebrow { color: rgba(255,255,255,.9); }
.bz-lede { color: #3f3f3f; font-size: var(--text-body); line-height: 1.7; max-width: 62ch; }
.bz-section--bg-ink .bz-lede, .bz-lede--on-dark { color: #C7C1B4; }
.bz-block p { line-height: 1.7; }

/* --- Colour on dark chrome and on the accent band --------------------------
   The handoff states these as their own tokens rather than opacities so the
   contrast is explicit; keep them explicit here too. */
.bz-section--bg-ink, .bz-col--bg-ink { color: #EDEDED; }
.bz-section--bg-ink p, .bz-col--bg-ink p { color: #C7C1B4; }
.bz-section--bg-accent, .bz-col--bg-accent { color: #fff; }
.bz-section--bg-accent :is(h1,h2,h3,h4,h5,h6), .bz-col--bg-accent :is(h1,h2,h3,h4,h5,h6) { color: #fff; }
.bz-section--bg-accent a, .bz-col--bg-accent a { color: #fff; }

/* --- Buttons ---------------------------------------------------------------
   One primitive, hard edges, display face at 700, hover darkens the fill.
   There is no scale or bounce anywhere in this system. */
.bz-btn {
  min-height: 46px;
  padding: 0 16px;
  border-radius: 0;
  gap: 8px;
  /* base.css sets .btn in --font-display: the all-caps display face IS the
     button style here, not a text-transform. Only .btn--secondary and
     .btn--ghost drop back to the body face (below). */
  font: 700 var(--text-small) / 1.6 var(--font-heading);
}
/* A component's optional button is a CTA with an empty label when the placement
   leaves it out; the renderer still emits the anchor. Hide the empty ones. */
.bz-btn:empty { display: none; }
/* Every CTA on the site, primary or secondary, on any band: white with black
   text and an 8px corner, turning orange (--accent-dark) with white text when
   hovered, pressed or focused. This is the "Built a spec?" band's look, drawn
   once here so no page or component paints its own. The 1px black edge keeps a
   white button visible on a white or light-grey band; on a dark band it
   disappears into the background. The white is a literal because a dark page
   redefines --card as a dark grey, and the doubled class outranks the
   renderer's transparent secondary on a dark hero. */
.bz-btn:is(.bz-btn--primary, .bz-btn--secondary) {
  background: #fff; color: #000;
  border: 1px solid #000; border-radius: 8px;
  transition: background-color .15s ease, border-color .15s ease, color .15s ease;
}
.bz-btn:is(.bz-btn--primary, .bz-btn--secondary):is(:hover, :active, :focus-visible) {
  background: var(--accent-dark); border-color: var(--accent-dark); color: #fff;
}
.bz-btn:is(.bz-btn--primary, .bz-btn--secondary):focus-visible {
  outline: 2px solid var(--accent-dark); outline-offset: 3px;
}
.bz-btn--link {
  /* A text link in this design is text, not a box: the base button's 1.5px
     transparent border would add 3px to its height. */
  min-height: 0; padding: 0; border: 0; background: none;
  color: var(--accent);
  text-decoration: none;
}
.bz-btn--link:hover { text-decoration: underline; text-underline-offset: 3px; }
.bz-btn--on-dark.bz-btn--link { color: #fff; }

/* --- Form controls --------------------------------------------------------- */
.bz-input, .bz-field select, .bz-field textarea {
  min-height: 50px; border-radius: 0; padding: 12px 14px;
  background: var(--paper); border: 1px solid var(--line);
  font-family: var(--font-body); font-size: 15px;
}
.bz-field textarea { min-height: 140px; }

/* The handoff sets a form on the page rather than in a card, repeats no title,
   and pairs the short fields two to a row. */
.bz-form {
  background: none; border: 0; border-radius: 0; padding: 0; max-width: none;
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px 20px;
}
.bz-form__t { display: none; }
.bz-field { grid-column: span 1; gap: 8px; }
.bz-field:has(textarea), .bz-field--consent, .bz-field--hp { grid-column: 1 / -1; }
.bz-form > button, .bz-form__status, .bz-form > .bz-btn { grid-column: 1 / -1; justify-self: start; }
.bz-label { font: 700 11px / 1 var(--font-body); letter-spacing: 0.1em; text-transform: uppercase; color: var(--muted); }
@media (max-width: 640px) { .bz-form { grid-template-columns: minmax(0, 1fr); } .bz-field { grid-column: 1 / -1; } }
.bz-label {
  font: 700 var(--text-eyebrow) / 1.4 var(--font-body);
  letter-spacing: 0.1em; text-transform: uppercase; color: var(--muted);
}
.bz-req { color: var(--accent); }

/* --- Cards and rules -------------------------------------------------------
   Resting surfaces separate with a 1px line, never a shadow; shadow is for
   floating chrome only. */
.bz-card, .bz-quick, .bz-service, .bz-person, .bz-post, .bz-quote {
  border-radius: 0;
  border: 1px solid var(--line);
  background: var(--card);
  box-shadow: none;
}
.bz-hr { border-color: var(--line); }

/* --- FAQ accordion ---------------------------------------------------------
   The handoff draws 132 of these; the platform's faq widget renders native
   <details>, which needs no script and is open-able in the editor. */
/* The handoff's FAQ band holds a 900px well; every page's is the same shape. */
.bz-section:has(.bz-faqs) { padding-block: 100px; }
.bz-section:has(.bz-faqs) > .bz-container { max-width: calc(900px + 2 * var(--container-pad)); }
@media (max-width: 640px) { .bz-section:has(.bz-faqs) { padding-block: 64px; } }
.bz-section:has(.bz-faqs) .bz-block h2 { font-size: 32px; margin-bottom: 40px; }
.bz-section:has(.bz-faqs) .bz-eyebrow { margin-bottom: 18px; }
.bz-faqs { border-top: 1px solid var(--line); gap: 0; }
.bz-faq { background: none; border: 0; border-bottom: 1px solid var(--line); border-radius: 0; padding: 0; }
.bz-faq > summary {
  display: flex; align-items: center; justify-content: space-between; gap: var(--space-4);
  padding: 22px 0; cursor: pointer; list-style: none;
  font: 700 17px / 1.6 var(--font-heading); color: var(--ink);
}
.bz-faq > summary::-webkit-details-marker { display: none; }
.bz-faq > summary::after { content: "+"; font-weight: 400; font-size: 22px; color: var(--accent); line-height: 1; transition: transform .18s ease; }
.bz-faq[open] > summary::after { transform: rotate(45deg); }
.bz-block .bz-faq__a { margin-top: 0; padding: 0 0 24px; color: var(--body-text); font-size: 15px; line-height: 1.7; max-width: 760px; }

/* --- Photography -----------------------------------------------------------
   Every photograph in the handoff is still a slot. The placeholder art ships as
   an image so each one stays a real, replaceable image block on the canvas. */
img[src$="photo-placeholder.svg"] { width: 100%; height: 100%; object-fit: cover; background: #D8D8D8; }

/* --- Hero ------------------------------------------------------------------
   Scrim at rgba(20,20,20,.68), per the handoff's --scrim-hero. */
.bz-block--hero { position: relative; background: var(--chrome); color: #fff; padding-block: 96px; text-align: center; }
.bz-hero__img { opacity: 1; }
.bz-block--hero .bz-hero__bg::after {
  content: ""; position: absolute; inset: 0; background: rgba(20,20,20,.68); pointer-events: none;
}
.bz-block--hero .bz-hero__copy { max-width: 960px; margin-inline: auto; }
.bz-block--hero h1, .bz-block--hero h2 {
  color: #fff; font-size: 44px; line-height: 1.14; letter-spacing: -0.01em; margin: 0 0 20px;
}
.bz-block--hero .bz-hero__sub {
  color: #E2E2E2; font-size: 17px; line-height: 1.7; max-width: 700px; margin: 0 auto 30px;
}
.bz-block--hero .bz-eyebrow { color: #E2E2E2; margin-bottom: 22px; }
.bz-block--hero .bz-btns { justify-content: center; gap: 14px; margin-block: 0; }
.bz-block--hero .bz-btn { min-height: 48px; padding: 0 26px; }
@media (max-width: 1100px) {
  .bz-block--hero { padding-block: 72px; }
  .bz-block--hero h1, .bz-block--hero h2 { font-size: 36px; }
}
@media (max-width: 640px) {
  .bz-block--hero { padding-block: 56px; }
  .bz-block--hero h1, .bz-block--hero h2 { font-size: 30px; }
}

/* --- Chrome: header, utility bar, footer ----------------------------------- */
.bz-menu--horizontal .bz-nav, .bz-menu--mega .bz-nav { gap: var(--space-4); }
.bz-navitem > a, .bz-navlabel { font-family: var(--font-body); font-weight: 600; }
.bz-menu--mega .bz-nav > .bz-navitem > a { padding: 8px 10px; }
.bz-subnav { border-radius: 0; box-shadow: 0 12px 30px rgba(0,0,0,.18); }

/* --- Image blocks that fill their node ------------------------------------
   An image block nests block > container > figure > img. A `height: 100%` on
   the figure resolves against the container, so the container has to carry the
   height too or the picture keeps its intrinsic 16:9 and leaves a gap. With an
   auto-height block all three resolve to auto, so this is inert everywhere it
   is not wanted. */
.bz-block--image > .bz-container,
.bz-block--image .bz-figure { height: 100%; }
.bz-block--image .bz-figure { margin: 0; }

/* --- Stacked rows collapse to one track ----------------------------------
   blocks.css stacks a row by setting `grid-column: 1 / -1` on its columns, but
   the row keeps twelve tracks and eleven gaps. At this site's 48px gap and 20px
   mobile gutter that is 528px of gap inside a 350px container, so the row runs
   off the side of a phone. Collapsing the template to a single track at the
   same breakpoints the platform stacks at fixes it without touching the
   renderer. (Worth reporting: the same arithmetic bites any site whose gap is
   larger than about a twelfth of the mobile content width.) */
@media (max-width: 640px) {
  .bz-row--stack-tablet,
  .bz-row--stack-mobile { grid-template-columns: minmax(0, 1fr); }
}
@media (min-width: 641px) and (max-width: 1100px) {
  .bz-row--stack-tablet { grid-template-columns: minmax(0, 1fr); }
}

/* --- Testimonial cards ----------------------------------------------------
   The handoff draws a plain white card with a rule, the quote at 15px and the
   attribution under it. Stars are not part of that design, so they are hidden
   here and shown again only where a page actually rates something. */
.bz-quote {
  border-radius: 0;
  padding: 32px;
  display: flex;
  flex-direction: column;
  gap: 18px;
}
.bz-quote blockquote { font-size: 15px; line-height: 1.7; color: #3f3f3f; margin: 0 }
.bz-quote figcaption { gap: 4px }
.bz-quote__n { font: 700 13px/1.4 var(--font-body); color: var(--ink) }
.bz-quote__r { font-size: 13px; color: var(--muted) }
.bz-stars { display: none }

/* --- Stat bands -----------------------------------------------------------
   Three figures with a tracked-out caps label, the way the handoff sets them:
   the number in ink at display weight, the label small and muted, each in its
   own bordered card across the full width of the band. blocks.css draws this
   block as a dark two-column claim-and-figures split; the handoff's is a plain
   row of cards on the page, so the split is undone here. */
.bz-block--statBand { background: none; color: inherit; padding-block: 0; }
.bz-block--statBand .bz-band { display: block; }
.bz-block--statBand .bz-stat { border: 0; padding: 32px 28px; background: var(--ink); }
.bz-block--statBand .bz-stats { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 24px; }
.bz-block--statBand .bz-stat__v { color: #fff; }
.bz-block--statBand .bz-stat__l { color: var(--chrome-meta); letter-spacing: 0.14em; }
.bz-stats { grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: var(--space-6) }

.bz-stat__v { font: 800 38px/1 var(--font-heading); color: var(--ink) }
.bz-stat__l {
  font: 700 11px/1.4 var(--font-body);
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--muted);
  margin-top: 12px;
}
.bz-section--bg-ink .bz-stat__v { color: #fff }
.bz-section--bg-ink .bz-stat__l { color: #A0A0A0 }

/* --- Inventory listing cards ---------------------------------------------
   The live inventory widget's card, dressed as the handoff's listing card:
   photo, title, price, spec chips and a hard-edged rule around it. */
.bz-card { border-radius: 0; overflow: hidden; display: flex; flex-direction: column; height: 100% }
.bz-card img, .bz-card .bz-photo { width: 100%; aspect-ratio: 16 / 10; object-fit: cover }
.bz-card__body { padding: 22px; display: flex; flex-direction: column; gap: 10px }
.bz-card__t { font: 800 17px/1.3 var(--font-heading); color: var(--ink); text-transform: uppercase }
.bz-card__m { font: 800 22px/1 var(--font-heading); color: var(--ink) }
.bz-card__facts { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 }
.bz-card__facts > div {
  display: inline-flex; align-items: baseline; gap: 5px;
  border: 1px solid var(--line); padding: 6px 9px;
  font-size: 12px; color: var(--muted);
}
.bz-card__facts dt { order: 2; font-weight: 400 }
.bz-card__facts dd { order: 1; margin: 0; font-weight: 700; color: var(--ink) }


/* --- Feature lists ---------------------------------------------------------
   The handoff draws a `list` as a ruled column of plain statements, not a grid
   of titled cards: a hairline above each item, 15px body copy, no heading face.
   blocks.css sets the item title on an <h3>, which `.bz-block h3` then sizes at
   the display step, so these have to win on specificity. */
.bz-block--list .bz-grid { gap: 0 24px; }
.bz-feature { border-top: 1px solid var(--line); padding: 16px 0; }
.bz-block .bz-feature__t { font: 400 15px / 1.5 var(--font-body); color: var(--body-text); margin: 0; }
.bz-block .bz-feature__d { font-size: 15px; line-height: 1.5; color: var(--muted); margin: 0; }

/* --- Responsive steps, taken from the handoff's own two breakpoints ----------
   The handoff drops .grid-3 and .grid-4 to two-up below 1100px and every grid
   to one-up below 640px, and keeps its 48px page gutter until 640px. The
   platform's own breakpoints are the same two widths. A column's span is an
   inline custom property, so these steps have to outrank it. Rows the author
   marked "never stack" — the header and utility bars — are left alone. */
@media (min-width: 641px) and (max-width: 1100px) {
  .bz-row:not(.bz-row--stack-never):not(.bz-row--stack-tablet) > .bz-col[style*="--bz-span:3"],
  .bz-row:not(.bz-row--stack-never):not(.bz-row--stack-tablet) > .bz-col[style*="--bz-span:4"] {
    --bz-span: 6 !important;
  }
}
/* Below 640px the handoff sets every section heading to 26px, whatever size it
   carries at desktop. Two attributes so a page's own desktop size, set at
   (0,1,1), does not keep winning here. */
@media (max-width: 640px) {
  .bz-section .bz-block h2 { font-size: 26px; }
}
/* The FAQ band sets its own 32px heading at a higher specificity, so the 26px
   mobile step has to be said again at that weight. */
@media (max-width: 640px) {
  .bz-section:has(.bz-faqs) .bz-block h2 { font-size: 26px; }
}


/* --- Band content width ----------------------------------------------------
   The handoff draws two band geometries and the split is exact: all 93 bands
   with no background cap the SECTION at 1280px, so the 48px gutter eats into
   it and their content is 1184 wide; all 54 bands that paint a background
   (paper, ink, chrome) put the gutter on the section and a 1280px wrapper
   inside it, so their colour runs full-bleed and their content is a full 1280.
   A white/card band is never one of the 54 - it has no background to bleed. */
.bz-section--bg-paper > .bz-container,
.bz-section--bg-ink > .bz-container,
.bz-section--bg-accent > .bz-container {
  max-width: calc(1280px + 2 * var(--container-pad));
}
@media (max-width: 1100px) {
  .bz-section--bg-paper > .bz-container,
  .bz-section--bg-ink > .bz-container,
  .bz-section--bg-accent > .bz-container {
    max-width: calc(1280px + 2 * var(--container-pad-tablet));
  }
}
@media (max-width: 640px) {
  .bz-section--bg-paper > .bz-container,
  .bz-section--bg-ink > .bz-container,
  .bz-section--bg-accent > .bz-container {
    max-width: calc(1280px + 2 * var(--container-pad-mobile));
  }
}


/* --- Mega panel anchoring --------------------------------------------------
   blocks.css centres the viewport-wide panel on its trigger
   (left:50%; translateX(-50%); width:100vw), which only lands correctly when
   the trigger happens to sit mid-viewport. This header's nav is right-aligned,
   so every panel was offset by its trigger's position and ran off the right
   edge - "Location Details" by 446px. Worth reporting upstream: any right- or
   left-aligned mega nav hits this.

   So the panel is hung off the nav list rather than off the item that owns it:
   the item goes out of the positioning flow and the <ul> becomes the containing
   block. That fixes both halves of it. The panel's left edge lines up with the
   first nav item and it is at least as wide as the bar, so whichever item the
   pointer is on it is directly above the panel and can be moved straight down
   into it. And it is only as wide as it needs to be: stretched edge to edge, a
   three-column panel on a 1440px viewport left ~750px of empty white either
   side of the links, which read as a broken band rather than a menu.
   `width: max-content` sizes it to the columns it holds and no wider, and the
   max-width keeps it inside the page gutter at any viewport.

   Below 1100px the panel is the platform's stacked disclosure, which is already
   the right shape, so none of this applies there.
   (No ancestor may clip overflow for this to work - see CLAUDE.md 4a.) */
.bz-menu--mega .bz-nav { position: relative; }
.bz-menu--mega .bz-nav > .bz-navitem--has-sub { position: static; }
@media (min-width: 1101px) {
  .bz-menu--mega .bz-nav > .bz-navitem--has-sub > .bz-subnav {
    left: 0;
    right: auto;
    transform: none;
    min-width: 100%;
    width: max-content;
    max-width: calc(100vw - 2 * var(--container-pad));
    flex-wrap: wrap;
    justify-content: flex-start;
    border: 1px solid var(--line);
  }
}
.bz-block--categoryGrid .bz-card img, .bz-card .bz-photo {
    width: 100%;
    aspect-ratio: 16 / 10;
    object-fit: contain;
}
.bz-widget--inventory-search {
    display: block;
    max-width: 500px;
    width: 100%;
}

/* --- Blog post masthead ----------------------------------------------------
   scripts/build.mjs composes a post's date, title and cover ahead of its node
   tree: an eyebrow and an h1 inside a .bz-prose well, then the cover image in
   a full .bz-container. Three things need saying here, none of which the post
   document can reach.

   The well is 68ch while the cover is the full 1280 container, so the date and
   the title started 270px inside the picture's left edge and inside every
   section of the body below it. The masthead's measure is set to the container
   so the whole article shares one left edge; the h1 keeps a headline measure of
   its own instead.

   .bz-block's vertical padding is zeroed further up this file, which is right
   for a band inside a section and wrong for the first thing in the article: the
   date landed on the header's bottom edge. The band gets its own rhythm back.

   And --text-h1 is 64px, which is the size a homepage hero's headline is set
   at, not a post title's; at that size a normal title ran five lines deep.

   The h1 runs the full container rather than a headline measure of its own. A
   capped measure re-created the thing the well above was widened to fix: the
   title broke over three lines and stopped short of the cover image's right
   edge, so the masthead read as a narrower column sitting on a wider article.
   Full width, one shared left and right edge, and `text-wrap: balance` keeps a
   long title's lines even instead of leaving one word on the last one. */

article > .bz-block:first-child { padding-top: var(--space-7); padding-bottom: var(--space-6); }
article > .bz-block:first-child > .bz-container.bz-prose { max-width: var(--container); }
article > .bz-block:first-child .bz-eyebrow { margin-bottom: 14px; }
article > .bz-block:first-child h1 {
  font-size: 52px; line-height: 1.08; margin: 0 0 var(--space-5);
  max-width: none; text-wrap: balance;
}
/* The cover is emitted at 1200x630 whatever the file's own proportions are, so
   a 400x250 thumbnail off the old site was stretched to a wider box. Cropping
   to a fixed ratio keeps every post's cover the same shape and none of them
   distorted. */
article > .bz-block:first-child > .bz-container:not(.bz-prose) img {
  display: block; width: 100%; height: auto; aspect-ratio: 16 / 9; object-fit: cover;
}
@media (max-width: 1100px) { article > .bz-block:first-child h1 { font-size: 40px; } }
@media (max-width: 640px)  { article > .bz-block:first-child h1 { font-size: 30px; } }

/* --- Subheadings inside a post --------------------------------------------
   Two things a post needs that an ordinary page does not.

   .bz-block + .bz-block zeroes a block's top padding, which is right for two
   stacked bands and leaves a subheading sitting on the paragraph above it.

   And --text-h3 is 30px against an h2 at 34px - close enough that a subheading
   inside an article read as another section heading rather than a step below
   one. Both are scoped to `article`, which only a post emits. */
article .bz-block + .bz-block--heading { padding-top: var(--space-6); }
/* Same cause, between two paragraphs: .bz-block's padding is zeroed site-wide
   and a text block's last <p> drops its margin, so a paragraph that is its own
   block butted straight against the one before it. Inside a post that is the
   normal case, because a list or a subheading splits what was one block in two.
   This restores the same 16px a paragraph gets inside a single block. */
article .bz-block--text + .bz-block--text { padding-top: var(--space-4); }
article .bz-block h3 { font-size: 22px; }

/* --- Lists inside a post ---------------------------------------------------
   The Feature list block is the only list primitive the renderer has, and it
   draws items bare: no marker, and a 24px grid gap sized for a three-up card
   band rather than for four consecutive bullets. Inside a post's prose that
   reads as a paragraph someone broke by accident, which is exactly how the
   run-on lines it replaced read.

   These rules are scoped to `article`, which only a post page emits, so a
   Feature list used as a card band on an ordinary page is untouched. */
/* .bz-block + .bz-block zeroes a block's top padding, which is right for two
   stacked bands and wrong for a list sitting between two paragraphs: the
   bullets touched the line that introduces them and the one that follows. */
article .bz-block--list { padding-block: var(--space-3); }
article .bz-block--list .bz-grid { gap: 2px 24px; }
/* The rule above the block styles an item as a divided table row - a border and
   16px of padding - which is right for the spec rows it was written for and
   reads as a table dropped into the prose here. */
article .bz-block--list .bz-feature {
  position: relative; border-top: 0; padding: 2px 0 2px 1.35em;
}
article .bz-block--list .bz-feature::before {
  content: ""; position: absolute; left: 0.2em; top: 0.62em;
  width: 7px; height: 7px; background: var(--accent);
}
/* An item is emitted as a heading because that is the block's shape. In a post
   it is a bullet, so it is set in body type rather than at heading weight. */
article .bz-block--list .bz-feature__t { font: 400 var(--text-body) / 1.6 var(--font-body); margin: 0; }
article .bz-block--list .bz-feature__d { margin-top: 2px; }

/* --- Long-form posts --------------------------------------------------------
   Every post built on the blog design shares one article layout: the Post hero,
   then an `article` section holding an `art-row` of two columns — `art-side`
   (the Post contents rail and a promo card) and `art-body` (the prose) — then
   `related` (Latest posts) and the Contact CTA band. Those five node ids are the
   contract a post opts into; the rules here are written once instead of in each
   post's own CSS, so a change to the article's type or rhythm is one edit.

   Boxes inside the prose — callouts, the rail's promo card, the two-column
   cards — carry their border, padding and label type as node styles, so they
   are restyled on the canvas and keep their look when a dealer duplicates one.
   What is left for this layer is what a node style cannot say: the grid, the
   sticky rail, and the prose typography of the blocks directly in the body. */

[data-bz-node="article"].bz-section { padding-block: 64px 0; }
[data-bz-node="article"].bz-section > .bz-container { max-width: 1180px; }
[data-bz-node="art-row"] { grid-template-columns: 240px minmax(0, 1fr); gap: 64px; }
[data-bz-node="art-row"] > .bz-col { grid-column: auto; }
/* The rail travels with the prose: the column sticks as one, so the list and
   the promo card under it stay together. `align-self: start` is what gives a
   sticky grid item room to move. */
[data-bz-node="art-side"] { position: sticky; top: 24px; align-self: start; }

/* Every block inside the article sets its own rhythm with margins, the way the
   design's prose does, so the padding the site layer puts between stacked
   blocks is handed back rather than doubling every gap. */
[data-bz-node="art-body"] .bz-block,
[data-bz-node="art-body"] .bz-block + .bz-block,
[data-bz-node="art-side"] .bz-block,
[data-bz-node="art-side"] .bz-block + .bz-block { padding-block: 0; }
[data-bz-node="art-body"] .bz-text,
[data-bz-node="art-side"] .bz-text { max-width: none; }
[data-bz-node="art-body"] .bz-container,
[data-bz-node="art-side"] .bz-container { padding-inline: 0; max-width: none; }
/* A text block's type comes from its node styles inside a box, so a paragraph
   there inherits rather than restating the prose size. */
[data-bz-node="art-body"] .bz-col .bz-block--text p,
[data-bz-node="art-side"] .bz-block--text p { font: inherit; color: inherit; letter-spacing: inherit; text-transform: inherit; margin: 0; }

/* The prose: 17px/1.8 body against 28px headings, the lede a step up in ink.
   The headings carry the ids the rail links to, so each keeps a scroll margin. */
[data-bz-node="art-body"] > .bz-block--heading h2 {
  font-size: 28px; line-height: 1.22; letter-spacing: -0.01em;
  margin: 52px 0 16px; scroll-margin-top: 24px; text-wrap: wrap;
}
[data-bz-node="art-body"] .bz-block--heading h3 { font-size: 19px; line-height: 1.3; margin: 30px 0 12px; text-transform: none; }
[data-bz-node="art-body"] .bz-col .bz-block--heading h3 { margin-top: 0; }
[data-bz-node="art-body"] > .bz-block--text p {
  font-size: 17px; line-height: 1.8; color: var(--body-text); margin: 0 0 18px; text-wrap: pretty;
}
[data-bz-node="art-body"] .bz-block--text strong { color: var(--ink); }
[data-bz-node="art-body"] > [data-bz-node="lede"] p { font-size: 19px; line-height: 1.75; color: var(--ink); }
[data-bz-node="art-body"] .bz-block--text a { color: var(--accent); }
[data-bz-node="art-body"] .ss-prose-list { margin: 0 0 20px; padding-left: 20px; max-width: none; }
[data-bz-node="art-body"] .ss-prose-list li { font-size: 16px; line-height: 1.75; margin: 0 0 6px; }
[data-bz-node="art-body"] .ss-prose-list li::marker { color: currentColor; }
[data-bz-node="art-body"] .bz-col .ss-prose-list { margin: 0; }
[data-bz-node="art-body"] .bz-col .ss-prose-list li:last-child { margin-bottom: 0; }
[data-bz-node="art-body"] .bz-row { margin-inline: 0; }

/* Definition rows inside a post are the design's label/detail table (the
   diesel diagnostic's smoke colours): a 130px bold label, ruled underneath. */
[data-bz-node="art-body"] .ss-def { border-top: 0; margin: 8px 0 20px; }
[data-bz-node="art-body"] .ss-def__r { grid-template-columns: 130px minmax(0, 1fr); gap: 0; padding: 0; }
[data-bz-node="art-body"] .ss-def__l,
[data-bz-node="art-body"] .ss-def__t { padding: 14px; font-size: 15px; line-height: 1.6; }
[data-bz-node="art-body"] .ss-def__l { font-weight: 800; color: var(--ink); }
/* A Feature list inside a post is the design's grid of bordered title-and-
   sentence cards, four across (DOT inspection points, tyre factors). */
[data-bz-node="art-body"] .bz-block--list { margin: 8px 0 24px; }
[data-bz-node="art-body"] .bz-block--list .bz-grid { gap: 16px; }
[data-bz-node="art-body"] .bz-block--list .bz-grid--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
[data-bz-node="art-body"] .bz-block--list .bz-feature { position: static; border: 1px solid var(--line); padding: 20px; background: none; box-shadow: none; }
[data-bz-node="art-body"] .bz-block--list .bz-feature::before { content: none; }
[data-bz-node="art-body"] .bz-block--list .bz-feature__t { font: 800 19px / 1.3 var(--font-heading); color: var(--ink); text-transform: none; margin: 0 0 12px; }
[data-bz-node="art-body"] .bz-block--list .bz-feature__d { font-size: 14.5px; line-height: 1.8; color: var(--body-text); margin: 0; }
/* A Stat band inside a post is two white cells on a hairline grid, the first
   figure in the accent — not the dark band it is on a page. */
[data-bz-node="art-body"] .bz-block--statBand .bz-stats {
  grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1px; background: var(--line);
  border: 1px solid var(--line); margin: 8px 0 34px;
}
[data-bz-node="art-body"] .bz-block--statBand .bz-stat { background: var(--card); padding: 30px 28px; }
[data-bz-node="art-body"] .bz-block--statBand .bz-stat__v { font: 800 34px / 1.5 var(--font-heading); color: var(--ink); margin: 0 0 6px; }
[data-bz-node="art-body"] .bz-block--statBand .bz-stat:first-child .bz-stat__v { color: var(--accent); }
[data-bz-node="art-body"] .bz-block--statBand .bz-stat__l { font: 400 14px / 1.8 var(--font-body); letter-spacing: 0; text-transform: none; color: var(--body-text); margin: 0; }
/* A photograph in its own column is shown whole, not cropped. */
[data-bz-node="art-body"] .bz-col .bz-figure { margin: 0; }
[data-bz-node="art-body"] .bz-col .bz-block--image img { width: 100%; height: auto; display: block; }

/* A numbered section heading ("Mistake #1"): the badge and the heading sit in
   one row laid out by node styles; the heading is set as the prose h2, with no
   margin of its own because the row carries it. */
[data-bz-node="art-body"] .bz-col > .bz-block--heading h2 {
  font-size: 28px; line-height: 1.22; letter-spacing: -0.01em; margin: 0; scroll-margin-top: 24px; text-wrap: wrap;
}
[data-bz-node="art-body"] [data-bz-node$="-num"] { font-family: var(--font-heading); text-align: center; }
[data-bz-node="art-body"] [data-bz-node$="-badge"] { width: 36px; }

/* A numbered section ("01"): the row's node styles set a 56px / 1fr grid, so its two
   columns take the tracks rather than their twelve-column spans, and the body column
   carries the prose type the article's own paragraphs have. */
[data-bz-node="art-body"] [data-bz-node^="numbered-"][data-bz-type="row"] > .bz-col { grid-column: auto; }
[data-bz-node="art-body"] [data-bz-node^="numbered-"][data-bz-node$="-body"] .bz-block--text p {
  font-size: 17px; line-height: 1.8; color: var(--body-text); margin: 0 0 18px; text-wrap: pretty;
}
[data-bz-node="art-body"] [data-bz-node^="numbered-"][data-bz-node$="-body"] .bz-block--heading h3 { margin: 0 0 12px; }
/* A ruled section ("1. Upfront Cost vs Long-Term Value"): a column ruled across the top by
   node styles, holding the prose at the article's own measure. */
[data-bz-node="art-body"] [data-bz-node^="diff-"][data-bz-type="column"] .bz-block--text p {
  font-size: 17px; line-height: 1.8; color: var(--body-text); margin: 0 0 18px; text-wrap: pretty;
}
[data-bz-node="art-body"] [data-bz-node^="diff-"][data-bz-type="column"] .bz-block--heading h3 { margin: 0 0 8px; }
[data-bz-node="art-body"] [data-bz-node^="diff-"][data-bz-type="column"] .ss-prose-list { margin: 0; padding-left: 20px; }
[data-bz-node="art-body"] [data-bz-node^="diff-"][data-bz-type="column"] .ss-prose-list li { font-size: 16px; line-height: 1.75; margin: 0 0 6px; }

/* A row of arrow links sits 14px apart. */
[data-bz-node="art-body"] .bz-col .bz-btns { gap: 14px; }

/* In-body photographs are cropped to 380px (240px at phone width), whatever
   the upload's proportions. */
[data-bz-node="art-body"] > .bz-block--image { margin: 36px 0; }
[data-bz-node="art-body"] > .bz-block--image .bz-figure { margin: 0; }
[data-bz-node="art-body"] > .bz-block--image img { width: 100%; height: 380px; object-fit: cover; display: block; border-radius: 0; }

/* Buttons: the link style in a callout or the rail is the design's 15px arrow
   link; a row of two is 48px tall and drawn like every other CTA. */
[data-bz-node="art-body"] .bz-btns,
[data-bz-node="art-side"] .bz-btns { margin-block: 0; }
[data-bz-node="art-body"] > .bz-block--buttons .bz-btns { gap: 14px; margin: 40px 0 8px; }
[data-bz-node="art-body"] > .bz-block--buttons .bz-btn {
  min-height: 48px; padding: 0 26px;
}

@media (prefers-reduced-motion: no-preference) {
  html:has([data-bz-node="art-toc"]) { scroll-behavior: smooth; }
}

/* A post's own FAQ band, when it has one. */
[data-bz-node="faq"].bz-section { padding-block: 90px; }

/* Keep reading — the platform's Latest posts block, dressed as the design's
   card: a 180px crop, the date over the title, no excerpt. */
[data-bz-node="related"].bz-section { padding-block: 80px; }
[data-bz-node="related-h"] h2 { font-size: 32px; margin: 0 0 40px; }
[data-bz-node="related-posts"] .bz-sechead { display: none; }
[data-bz-node="related-posts"] .bz-grid { gap: 24px; grid-template-columns: repeat(3, minmax(0, 1fr)); }
[data-bz-node="related-posts"] .bz-card { border: 1px solid var(--line); background: var(--card); }
[data-bz-node="related-posts"] .bz-card img,
[data-bz-node="related-posts"] .bz-card .bz-photo { height: 180px; aspect-ratio: auto; object-fit: cover; }
[data-bz-node="related-posts"] .bz-card__body { padding: 22px; gap: 0; }
[data-bz-node="related-posts"] .bz-card__m { font-size: 12px; color: var(--muted); margin-bottom: 10px; }
[data-bz-node="related-posts"] .bz-card__t {
  font: 800 18px / 1.3 var(--font-heading); color: var(--ink); text-transform: none; margin-bottom: 14px;
}
[data-bz-node="related-posts"] .bz-post__d { display: none; }
/* The whole card is the link, so the design's "Read more →" is drawn rather
   than authored as a second anchor to the same destination. */
[data-bz-node="related-posts"] .bz-card__body::after {
  content: "Read more \2192"; font: 700 14px / 1 var(--font-body); color: var(--accent); margin-top: auto;
}
[data-bz-node="related-posts"] .bz-card:hover .bz-card__t { color: var(--accent); }
[data-bz-node="related-cta"] .bz-btns { margin: 34px 0 0; }

@media (max-width: 1100px) {
  [data-bz-node="art-row"] { grid-template-columns: minmax(0, 1fr); gap: 36px; }
  [data-bz-node="art-body"] .bz-block--list .bz-grid--4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  [data-bz-node="art-body"] .bz-block--statBand .bz-stats { grid-template-columns: minmax(0, 1fr); }
  [data-bz-node="art-side"] { position: static; }
  [data-bz-node="related-posts"] .bz-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
  [data-bz-node="article"].bz-section { padding-block: 40px 0; }
  [data-bz-node="art-body"] > .bz-block--heading h2 { font-size: 23px; margin-top: 40px; }
  [data-bz-node="art-body"] .bz-col > .bz-block--heading h2 { font-size: 23px; }
  [data-bz-node="art-body"] > [data-bz-node="lede"] p { font-size: 17px; }
  [data-bz-node="art-body"] .bz-row > .bz-col { grid-column: 1 / -1; }
  [data-bz-node="art-body"] > .bz-block--image img { height: 240px; }
  [data-bz-node="art-body"] .ss-def__r { grid-template-columns: 90px minmax(0, 1fr); }
  [data-bz-node="art-body"] .bz-block--list .bz-grid--4 { grid-template-columns: minmax(0, 1fr); }
  [data-bz-node="related-posts"] .bz-grid { grid-template-columns: minmax(0, 1fr); }
  [data-bz-node="faq"].bz-section,
  [data-bz-node="related"].bz-section { padding-block: 64px; }
}


/* --- Buttons: one typography for the whole site -----------------------------
   Before this, 41 rules across this file, ten components, three templates and
   nine page stylesheets each set a button's face, size, weight or case, and the
   site rendered eleven different button typographies. The pair that showed it
   worst sat side by side in a CTA band: a primary in the display face, which
   can only draw caps, beside a secondary in the body face showing the label as
   typed — "CALL (800) 741-7566" next to "Contact us".

   The case is stated here rather than left to the typeface. The display face is
   dropped for buttons: it cannot render lowercase at all, so nothing set in it
   can ever match anything set in the body face. The body face at 700 with an
   explicit uppercase gives primaries the same caps they already had, and lets
   every other button match them whatever case the label was typed in on the
   Buttons screen. */
.bz-btn {
  font: 700 13px/1.2 var(--font-body);
  letter-spacing: 0.04em;
  text-transform: uppercase;
}
/* A text link is text rather than a box, so it keeps sentence case. */
.bz-btn--link {
  font: 600 14px/1.6 var(--font-body);
  letter-spacing: 0;
  text-transform: none;
}
/* A carousel arrow is a glyph, not a word, so it keeps a glyph's size. Stated
   once here for both rails rather than differently in each component. */
[data-bz-node="lr-nav"] .bz-btn,
[data-bz-node="tr-nav"] .bz-btn {
  font: 400 16px/1 var(--font-body);
  letter-spacing: 0;
  text-transform: none;
}



/* --- Phone: the rules the rest of this file assumed a mouse for --------------
   Everything above is written for a pointer on a wide screen. These are the
   places where that assumption costs a visitor on a phone something real. */
@media (max-width: 640px) {
  /* iOS Safari zooms the whole page in whenever a field whose text is under
     16px takes focus, and every control on this site was 15px. The zoom is not
     undone when the field blurs: the visitor is left mid-form on a page wider
     than the screen, panning sideways to read it. Raised on the controls only,
     so nothing else about the forms changes. */
  .bz-input, .bz-select, .bz-textarea,
  .bz-field input, .bz-field select, .bz-field textarea,
  input[type="text"], input[type="email"], input[type="tel"], input[type="date"],
  input[type="number"], input[type="search"], input[type="url"], select, textarea {
    font-size: 16px;
  }

  /* The eyebrow token is 11px, which reads as a considered small-caps label at
     arm's length and as noise at phone distance. One token, so every eyebrow,
     field label, breadcrumb, byline and chip built on it moves together. */
  :root { --text-eyebrow: 0.75rem; }

  /* Touch targets. A text link here is deliberately text rather than a box, so
     it carries no padding and stands 22px tall — half of what a thumb needs.
     The padding added back is cancelled by an equal negative margin, so the
     target grows to 44px and nothing on the page moves. Used only where the
     links stand alone; a stacked list is given real height instead, below. */
  .bz-btns > .bz-btn--link,
  .bz-loclist .bz-loc__p {
    padding-block: 11px;
    margin-block: -11px;
  }

  /* Stacked navigation — footer columns and the open header drawer. These sit
     one under another, so the negative-margin trick would make neighbouring
     targets overlap and swallow each other's taps. The list is allowed to grow
     instead. */
  .bz-menu--vertical .bz-navitem > a,
  .bz-menu--vertical .bz-navitem > .bz-navlabel,
  .bz-menu--horizontal .bz-navitem > a {
    padding-block: 9px;
  }

  /* A checkbox is 13px of native control. The label already toggles it, so the
     whole row is made the target rather than the box alone. */
  .bz-choices .bz-choice,
  .bz-field--consent .bz-choice {
    min-height: 44px;
    align-items: center;
  }
  .bz-choice input[type="checkbox"],
  .bz-choice input[type="radio"] {
    width: 20px;
    height: 20px;
    flex: 0 0 20px;
  }
}
.bz-phones span.bz-phone__l {
    display: none;
}
ul.bz-phones.bz-bare {
    display: none;
}
.bz-searchbar__chips {
    display: none;
}
.bz-widget.bz-widget--locations-pinmap {
    display: none;
}
/* --- Phone: hero photographs cover their band --------------------------------
   The platform's `.bz-block img { height: auto }` outranks the hero's own
   `.bz-hero__img { height: 100% }`, so on a phone every hero photo drew at its
   natural shape — a strip across the top of the band, with the rest bare. On
   desktop the band is shorter than the photo, which is why it only shows here.
   Phone only; every hero on the site, so a page built tomorrow has it too. */
@media (max-width: 640px) {
  .bz-block--hero .bz-hero__bg .bz-hero__img {
    height: 100%;
    object-fit: cover;
    object-position: center;
  }
}


/* --- Carried from the site template: the Chromium node-style re-arm rule and
   the footer's legal strip. Its header and utility-bar rules describe chrome
   this template does not have, so they are deliberately not carried. */
/* --- Node styles: re-arm them for Chromium ---------------------------------
   The renderer emits every node's own styles as `[data-bz-node="id"][data-bz-node]`,
   doubling the attribute to win on specificity. Past a certain stylesheet
   shape Chromium stops matching that form: the rules parse, they are in
   `document.styleSheets`, `el.matches()` on the same selector returns true —
   and the style engine never applies them. On the Press Kit page that meant
   every bordered card, on the page and inside its components alike, computed
   to no padding, no background and no border.
   One rule whose subject is the bare attribute restores all of them, and it
   has to live in this stylesheet: the site-wide Custom code block is a
   separate <style> and does not reach it, and a template's CSS is the only
   thing in this one that every page carries. The custom property it sets is
   inert — the rule exists only to be present. Worth reporting upstream: the
   renderer could emit `[data-bz-node="id"]:not(#_)` for the same specificity
   without the doubled attribute, and nothing downstream would have to know.
   =========================================================================== */
[data-bz-node] { --bz-node-styles: on; }

/* The footer band is the "Site footer" component; its rules travel with it.
   Only the legal strip below the content area is styled here. */
[data-bz-node="footer-legal"] { border-top: 1px solid #333; }

[data-bz-node="footer-legal"] p,
[data-bz-node="footer-legal"] .bz-navitem > a { color: #8A8A8A; font-size: 12px; }

/* The legal strip and the "Built by BuzzNerd" line that close the footer. */
[data-bz-node="footer-legal"] { background: var(--chrome); padding-block: 0 48px; }

[data-bz-node="footer-legal-row"] { border-top: 1px solid var(--chrome-line); padding-top: 24px; }

[data-bz-node="footer-copy"] p { font-size: 12px; line-height: 1.6; color: var(--chrome-label); margin: 0; }

[data-bz-node="footer-legal-nav"] .bz-nav { gap: 20px; }

[data-bz-node="footer-legal-nav"] .bz-navitem,
[data-bz-node="footer-legal-nav"] .bz-navitem > a { font-size: 12px; line-height: 1.6; font-weight: 400; color: var(--chrome-label); padding: 0; }

/* Desktop: copyright left, "Built by BuzzNerd" centred, legal links right, on
   one line. The outer tracks are equal so the middle one sits on the page's
   centre whatever the copy on either side measures. */
@media (min-width: 1101px) {
  [data-bz-node="footer-legal-row"] { grid-template-columns: 1fr auto 1fr; }
  [data-bz-node="footer-legal-row"] > .bz-col { grid-column: auto; }
}
/* Narrower, the three do not fit one line: copyright and legal links share it
   and the credit drops to its own centred line beneath, as before. */
@media (min-width: 641px) and (max-width: 1100px) {
  [data-bz-node="footer-legal-row"] > .bz-col { grid-column: span 6; }
  [data-bz-node="footer-legal-row"] > [data-bz-node="footer-built"] { grid-column: 1 / -1; }
}
@media (max-width: 1100px) {
  [data-bz-node="footer-legal-row"] { row-gap: 36px; }
  [data-bz-node="footer-built"] { order: 3; }
}
[data-bz-node="footer-built"] .bz-block { padding-block: 0; }

[data-bz-node="footer-built"] { display: flex; align-items: center; justify-content: center; gap: 8px; }

[data-bz-node="footer-built"] .bz-block { padding-block: 0; width: auto; }

[data-bz-node="footer-built-t"] p { color: #8A8A8A; font-size: 12px; margin: 0; }

[data-bz-node="footer-built-logo"] .bz-figure { margin: 0; }

/* The file carries a transparent margin so the bolt's tips and the TM are not
   clipped at the edge; 18px keeps the wordmark itself at the 16px it was. */
[data-bz-node="footer-built-logo"] img { height: 18px; width: auto; }

[data-bz-node="footer-legal-row"] { align-items: center; }

/* ===========================================================================
   New Home chrome — the brand site's floating navigation
   ---------------------------------------------------------------------------
   This stylesheet is loaded only on the pages this template wraps, and it wraps
   the "New Home" page alone, so nothing here can reach the live home page. Every
   rule is scoped to this template's own node ids.

   The brand site floats its navigation over the hero: the logo sits on the
   photograph at the left, the nav is a dark bar inset from the right, and the
   mega panel hangs directly under that bar, matching its width exactly. So the
   header is taken out of flow and laid over the page's first section rather
   than stacked above it, and the red utility bar the site template carries is
   not in this template at all.

   The panel is still the platform's: `main-nav` is a `menu` block with layout
   "mega" over the three-level "Main navigation - mega (New Home)" menu, so the
   columns, the hover and keyboard handling, the Escape key and the sub-1100px
   disclosure all come from the renderer. Nothing here is scripted.
   =========================================================================== */

/* --- The header ------------------------------------------------------------
   This template wraps the whole site, and the pages under it do not all open
   the same way. The design floats the bar over the page's opening band, which
   only reads while that band is dark enough to carry a white logo. Two kinds
   are: an `ink` section (the homepage's video hero) and a `hero` block, which
   the site's own layer draws on --chrome. Between them that is 30 of the 31
   pages here. A blog post opens on the Post hero component instead — a
   photograph under the same scrim — which the platform nests inside the post's
   <article> rather than as main's first child, so it is named on its own below.
   A post without it keeps the date-and-title masthead on the page surface, and
   that, like a page with nothing on it yet, keeps the header's own band.

   So the header carries its own dark band by default and gives it up only
   where there is something dark underneath to float on. `:has()` reads that
   off the rendered page rather than asking each page to declare it, so a page
   built tomorrow gets the right treatment without anyone remembering this. */
[data-bz-node="site-header"] {
  position: relative;
  z-index: 60;
  background: var(--chrome);
  border: 0;
  padding-block: 24px;
  overflow: visible;
}

/* The float, where the opening band can carry it. */
body:has(main > :first-child.bz-section--bg-ink) [data-bz-node="site-header"],
body:has(main > :first-child.bz-block--hero) [data-bz-node="site-header"],
body:has(main > article [data-bz-section="post-hero"]) [data-bz-node="site-header"] {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  background: none;
}
[data-bz-node="header-row"] {
  display: flex;
  align-items: center;
  gap: 24px;
  padding-inline: var(--container-pad);
  overflow: visible;
}
[data-bz-node="header-brand"] { flex: 0 0 auto; }
[data-bz-node="header-brand"] .bz-brand { display: flex; line-height: 0; }
[data-bz-node="site-header"] .bz-logo__img { height: 56px; width: auto; }

/* The bar. `position: relative` on it is what the panel hangs from, and that is
   the whole reason the panel comes out exactly as wide as the bar. */
[data-bz-node="header-bar"] {
  position: relative;
  flex: 0 0 auto;
  margin-left: auto;
  /* Measured off the reference: a warm near-black, not the site's colder
     --chrome (#141414). Kept literal because it is this template's own
     surface, not a token the rest of the site shares. */
  background: #272623;
  border-radius: 2px;
  padding: 0 4px;
  /* The panel below shares this element's left and right edges, so the bar's
     width is the panel's. It takes the room the logo leaves, up to the width
     the reference's own panel measures (1079px), and shrinks below that rather
     than overflowing on a narrow desktop. */
  flex: 0 0 auto;
}
[data-bz-node="header-bar-row"] {
  display: flex;
  align-items: center;
  gap: 8px;
  min-height: 50px;
  overflow: visible;
}
[data-bz-node="header-nav"] { flex: 0 0 auto; min-width: 0; }
[data-bz-node="header-cta"] { flex: 0 0 auto; }
/* Items spread across the bar instead of bunching at one end, so the width the
   panel needs never shows up as a single empty pocket. */
[data-bz-node="header-bar"] [data-bz-menu="main-mega"] {
  flex: 0 1 auto;
  flex-wrap: nowrap;
}
[data-bz-node="header-bar"] .bz-block { padding-block: 0; }
[data-bz-node="header-bar"] .bz-btns { margin-block: 0; }
[data-bz-node="header-cta"] .bz-btn {
  min-height: 38px;
  padding: 0 15px;
  gap: 8px;
  white-space: nowrap;
}

/* Where the header floats, the band under it needs clearance for its copy. The
   photograph still runs to the top of the page — that is the point — only the
   text moves down. Stated for both opening bands, since the two carry their own
   padding in different units. */
body:has(main > :first-child.bz-section--bg-ink) main > .bz-section:first-child {
  padding-top: calc(var(--bz-pad, var(--space-7)) + 96px);
}
body:has(main > :first-child.bz-block--hero) main > .bz-block--hero:first-child {
  padding-top: 200px;
}
/* The Post hero takes the hero block's clearance, so a post's photograph starts
   at the top of the page and its breadcrumb sits where every other page's
   eyebrow does. */
main > article [data-bz-section="post-hero"] > .bz-section {
  padding-top: 200px;
}

/* --- The bar's items -------------------------------------------------------
   Caps and tracked out, and the open item takes a lit chip with an accent rule
   under it — the brand site's tab treatment. Both are drawn inside the item's
   own box, so neither can change the bar's height. */
[data-bz-node="header-bar"] .bz-nav { gap: 2px; }
[data-bz-node="header-bar"] [data-bz-menu="main-mega"] > .bz-navitem > a,
[data-bz-node="header-bar"] [data-bz-menu="main-mega"] > .bz-navitem > .bz-navlabel {
  position: relative;
  padding: 13px 15px;
  font: 500 13px/1.2 var(--font-body);
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: #FFFFFF;
  border-radius: 2px;
  transition: background-color 0.16s ease;
}
[data-bz-node="header-bar"] [data-bz-menu="main-mega"] > .bz-navitem > a::before {
  content: "";
  position: absolute;
  left: 15px;
  right: 15px;
  /* 6px under the cap line, as the reference sets it — measured, not eyeballed. */
  bottom: 15px;
  height: 1px;
  background: #FFFFFF;
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform 0.16s ease;
}
[data-bz-node="header-bar"] [data-bz-menu="main-mega"] > .bz-navitem:hover > a,
[data-bz-node="header-bar"] [data-bz-menu="main-mega"] > .bz-navitem:focus-within > a,
[data-bz-node="header-bar"] [data-bz-menu="main-mega"] > .bz-navitem[data-open] > a {
  background: #41413E;
  color: #FFFFFF;
}
[data-bz-node="header-bar"] [data-bz-menu="main-mega"] > .bz-navitem:hover > a::before,
[data-bz-node="header-bar"] [data-bz-menu="main-mega"] > .bz-navitem:focus-within > a::before,
[data-bz-node="header-bar"] [data-bz-menu="main-mega"] > .bz-navitem[data-open] > a::before {
  transform: scaleX(1);
}
@media (prefers-reduced-motion: reduce) {
  [data-bz-node="header-bar"] [data-bz-menu="main-mega"] > .bz-navitem > a,
  [data-bz-node="header-bar"] [data-bz-menu="main-mega"] > .bz-navitem > a::before { transition: none; }
}

@media (min-width: 1101px) {
  /* --- The panel ----------------------------------------------------------
     The site-wide rules in Design -> Custom code hang every mega panel off the
     nav list, because the platform's own `left: 50%` centres it on the item
     that owns it and a right-aligned bar then pushes it off the right edge.
     Here the bar itself is the containing block instead, which fixes that
     outright and is also what makes the panel and the bar share their edges.
     Worth reporting upstream — blocks.css could anchor a mega panel to the
     menu's own wrapper for everyone and drop the `left: 50%` entirely. */
  [data-bz-node="header-bar"] .bz-menu--mega .bz-nav,
  [data-bz-node="header-bar"] .bz-menu--mega .bz-nav > .bz-navitem--has-sub { position: static; }

  /* The groups flow down one column and into the next, which is how the brand
     site's first column carries two headings and its second carries one.
     `display` is restated on all three open states because setting it here
     would otherwise out-specify the platform's own show/hide. */

  /* --- The gap between a trigger and its panel ----------------------------
     The panel hangs 9px below the trigger, and those 9px were dead ground:
     the pointer left the trigger, :hover dropped, and the panel closed before
     the pointer could reach it. A bridge across the gap keeps the pointer
     inside the item the whole way down.

     It is drawn on the panel, so it only exists while the panel is open, and
     it spans the panel rather than the trigger so a diagonal move towards a
     link on the far side is covered too. It stops exactly at the trigger's
     bottom edge — every trigger shares that edge at every desktop width — so
     it never sits over a neighbouring trigger and cannot swallow the hover
     that would open one. ::after already draws the panel's photograph. */
  [data-bz-node="header-bar"] .bz-menu--mega .bz-nav > .bz-navitem--has-sub > .bz-subnav::before {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    top: -9px;
    height: 9px;
  }
  [data-bz-node="header-bar"] .bz-menu--mega .bz-nav > .bz-navitem--has-sub > .bz-subnav {
    display: none;
    /* Anchored to the bar's right edge and given the reference panel's own
       width (1079px measured), rather than being tied to the bar's width. The
       bar is narrower than the reference's — six short labels where it has five
       long ones — and at the reference's 19px type a bar-width panel wraps half
       its links. Capped to the page gutters so it never overhangs. */
    left: 0;
    right: 0;
    top: calc(100% + 5px);
    transform: none;
    width: auto;
    min-width: 0;
    max-width: none;
    min-height: 320px;
    padding: 30px 260px 30px 32px;
    /* Stated rather than left to --card. The platform builds one site-wide
       /styles/chrome.css from the DEFAULT template's chrome and links it on
       every page, so its `[data-bz-node="site-header"] .bz-subnav {background:#fff}`
       reaches this template's header too — both templates name their header
       node `site-header`. The panel was white here by accident rather than by
       decision, which only showed up when the dark variant could not turn it
       off. Worth reporting upstream: a template's chrome CSS should not be
       served to pages that template does not wrap. */
    background: #FFFFFF;
    border: 0;
    box-shadow: 0 20px 46px rgba(0, 0, 0, 0.28);
    columns: 2;
    column-gap: 32px;
    border-radius: 2px;
  }
  [data-bz-node="header-bar"] .bz-menu--mega .bz-nav > .bz-navitem--has-sub:hover > .bz-subnav,
  [data-bz-node="header-bar"] .bz-menu--mega .bz-nav > .bz-navitem--has-sub:focus-within > .bz-subnav,
  [data-bz-node="header-bar"] .bz-menu--mega .bz-nav > .bz-navitem--has-sub[data-open] > .bz-subnav {
    display: block;
  }
  [data-bz-node="header-bar"] .bz-menu--mega .bz-nav > .bz-navitem--has-sub > .bz-subnav > .bz-navitem {
    display: block;
    width: auto;
    min-width: 0;
    break-inside: avoid;
    margin-bottom: 30px;
  }

  /* --- The photograph -------------------------------------------------------
     A background on a pseudo-element rather than on the panel, so it crops to
     fill instead of letterboxing, and so it stays out of the column flow and
     cannot affect the panel's hover area — the pointer has to stay inside the
     panel for it to remain open, and this sits inside it.

     The honest limit: this is a picture set in the template's Custom code, not
     an image block, because a `menu` block has nowhere to carry one. It is
     swapped here rather than picked from the media library. Worth reporting
     upstream — a mega item that could name a panel image would make the six
     rules below unnecessary and put the picture on the canvas, where a dealer
     could change it. */
  [data-bz-node="header-bar"] .bz-menu--mega .bz-nav > .bz-navitem--has-sub > .bz-subnav::after {
    content: "";
    position: absolute;
    top: 50%;
    right: 30px;
    width: 200px;
    height: 200px;
    transform: translateY(-50%);
    background-color: var(--paper);
    background-position: center;
    background-size: cover;
    background-repeat: no-repeat;
    border-radius: 4px;
  }
  [data-bz-node="header-bar"] [data-bz-menu="main-mega"] > .bz-navitem:nth-child(1) > .bz-subnav::after {
    background-image: url("https://vendure.buzznerdrv.com/assets/source/41/whatsapp-image-2026-09-16-at-10.46.17-pm.jpeg"); /* Trucks */
  }
  [data-bz-node="header-bar"] [data-bz-menu="main-mega"] > .bz-navitem:nth-child(2) > .bz-subnav::after {
    background-image: url("https://vendure.buzznerdrv.com/assets/source/9b/whatsapp-image-2026-09-16-at-10.44.39-pm.jpeg"); /* Trailers & Bus */
  }
  [data-bz-node="header-bar"] [data-bz-menu="main-mega"] > .bz-navitem:nth-child(3) > .bz-subnav::after {
    background-image: url("https://vendure.buzznerdrv.com/assets/source/a8/sun-state-international-parts-counter-florida-scaled-1__02.jpg"); /* Parts */
  }
  [data-bz-node="header-bar"] [data-bz-menu="main-mega"] > .bz-navitem:nth-child(4) > .bz-subnav::after {
    background-image: url("https://vendure.buzznerdrv.com/assets/source/9e/commercial-truck-service-1-1.jpg"); /* Service */
  }
  [data-bz-node="header-bar"] [data-bz-menu="main-mega"] > .bz-navitem:nth-child(5) > .bz-subnav::after {
    background-image: url("https://vendure.buzznerdrv.com/assets/source/89/vision-action-oriented-2.jpg"); /* About */
  }
  [data-bz-node="header-bar"] [data-bz-menu="main-mega"] > .bz-navitem:nth-child(6) > .bz-subnav::after {
    background-image: url("https://vendure.buzznerdrv.com/assets/source/e2/whatsapp-image-2026-09-16-at-10.49.40-pm.jpeg"); /* Locations */
  }
}

/* --- Group headings --------------------------------------------------------
   Plain, bold and set in ink, with no rule under them: the brand site's panel
   is a page of links, not a table. Set in the body face on purpose — the
   display face (INTL Headline) draws caps whatever `text-transform` says, and
   these headings are mixed case. */
[data-bz-node="header-bar"] .bz-menu--mega .bz-subnav > .bz-navitem > .bz-navlabel {
  display: block;
  padding: 0;
  font: 700 1rem/30px var(--font-body);
  letter-spacing: 0;
  text-transform: capitalize;
  color: #000000;
}

/* --- The links under a heading ---------------------------------------------
   The nav block is set in caps for the bar; inside the panel the brand site
   sets them in sentence case, so that is undone here rather than on the node. */
[data-bz-node="header-bar"] .bz-menu--mega .bz-subnav .bz-subnav { gap: 0; margin-top: 0; }
[data-bz-node="header-bar"] .bz-menu--mega .bz-subnav .bz-subnav > .bz-navitem > a {
  display: block;
  padding: 0;
  font: 400 1rem/30px var(--font-body);
  letter-spacing: 0;
  text-transform: capitalize;
  color: #3B3C39;
  text-decoration: none;
}
[data-bz-node="header-bar"] .bz-menu--mega .bz-subnav .bz-subnav > .bz-navitem > a:hover,
[data-bz-node="header-bar"] .bz-menu--mega .bz-subnav .bz-subnav > .bz-navitem > a:focus-visible,
[data-bz-node="header-bar"] .bz-menu--mega .bz-subnav .bz-subnav > .bz-navitem > a[aria-current="page"] {
  color: #3B3C39;
  text-decoration: underline;
  text-decoration-color: #000000;
  text-decoration-thickness: 2px;
  text-underline-offset: 6px;
}

/* --- Below 1100px ----------------------------------------------------------
   The platform turns the panel into the stacked disclosure behind the menu
   button. It wants none of the card chrome, a 268px photograph has nowhere to
   go on a phone, and two columns of links do not fit either. */
@media (min-width: 1101px) and (max-width: 1320px) {
  [data-bz-node="header-bar"] [data-bz-menu="main-mega"] > .bz-navitem > a { padding-inline: 9px; }
  [data-bz-node="header-bar"] [data-bz-menu="main-mega"] > .bz-navitem > a::before { left: 9px; right: 9px; }
  [data-bz-node="site-header"] .bz-logo__img { height: 46px; }
}

@media (max-width: 1100px) {
  [data-bz-node="header-bar"] { max-width: none; padding: 0 12px; }
  [data-bz-node="header-bar-row"] { min-height: 52px; }
  [data-bz-node="site-header"] .bz-logo__img { height: 40px; }
  [data-bz-node="site-header"] .bz-menu-toggle { border-color: #444; color: var(--chrome-text); }
  /* The panel is positioned against the bar, and the bar is only as wide as the
     hamburger and the phone button beside it — 180px. A three-level menu drawn
     into 180px wraps "Brochures & Specifications" onto two lines and leaves
     half the screen empty. Dropping the bar out of the positioning chain hands
     the panel to the header band, which spans the screen, so it can be given
     the width of one. */
  [data-bz-node="header-bar"] { position: static; }
  [data-bz-node="header-bar"] .bz-menu-wrap[data-open] > .bz-menu {
    background: #fff;
    z-index: 60;
    left: auto;
    right: 12px;
    width: min(420px, calc(100vw - 24px));
    max-width: none;
    top: 84px;
    max-height: calc(100vh - 104px);
    overflow-y: auto;
  }
  /* The list sizes each row to its own label, which in a panel this wide leaves
     the trigger for "Parts" four characters wide. Stretching the rows gives the
     whole width of the drawer as the target. */
  [data-bz-node="header-bar"] .bz-menu-wrap[data-open] .bz-nav { align-items: stretch; }
  [data-bz-node="header-bar"] .bz-menu-wrap[data-open] .bz-navitem > a { color: var(--ink); }
  [data-bz-node="header-bar"] .bz-menu--mega .bz-nav > .bz-navitem--has-sub > .bz-subnav {
    columns: auto;
    padding: 4px 0 16px;
    gap: 18px;
    box-shadow: none;
  }
  [data-bz-node="header-bar"] .bz-menu--mega .bz-nav > .bz-navitem--has-sub > .bz-subnav::after { display: none; }
  [data-bz-node="header-bar"] [data-bz-menu="main-mega"] > .bz-navitem > a { padding: 9px 0; }
  [data-bz-node="header-bar"] [data-bz-menu="main-mega"] > .bz-navitem > a::before { display: none; }
  [data-bz-node="header-bar"] [data-bz-menu="main-mega"] > .bz-navitem:hover > a { background: none; }
  [data-bz-node="header-cta"] .bz-btn { min-height: 38px; padding: 0 12px; }
  body:has(main > :first-child.bz-section--bg-ink) main > .bz-section:first-child {
    padding-top: calc(var(--bz-pad, var(--space-7)) + 64px);
  }
  body:has(main > :first-child.bz-block--hero) main > .bz-block--hero:first-child,
  main > article [data-bz-section="post-hero"] > .bz-section {
    padding-top: 150px;
  }
}

@media (max-width: 640px) {
  /* The legal strip sets padding: 0 on its links, which leaves them 19px tall —
     the smallest targets left on the site. Height rather than an overhanging hit
     area, because they sit in a row and would otherwise overlap each other. */
  [data-bz-node="footer-legal-nav"] .bz-navitem > a { display: block; padding-block: 10px; }
  /* The legal links are set to the right of the copyright line, which the menu
     block carries as bz-menu--end on its own wrapper rather than on the list.
     Stacked, that right edge leaves them starting 106px in from everything else
     in the footer. */
  [data-bz-node="footer-legal-nav"] .bz-nav { gap: 8px 20px; }
  [data-bz-node="footer-legal-nav"] .bz-menu { justify-content: flex-start; }
}


/* --- Buttons ---------------------------------------------------------------
   The site design layer draws every button with a hard 0 edge. These pages
   round them instead — the header's phone CTA, the hero's, and every button
   inside the page's bands and its footer. */
.bz-btn { border-radius: 8px; }

/* The "Choose a type" rail is a shared component and styles its own buttons —
   10px on the Buy Now CTAs, a 50% circle on its carousel arrows — so a plain
   .bz-btn rule does not reach them. Overridden here rather than in the
   component, which other pages place too. The `main` prefix is what wins on
   specificity; the component's rules are otherwise identical in weight. */
main [data-bz-section="type-rail"] [data-bz-node^="tr-slide-cta"] .bz-btn,
main [data-bz-section="type-rail"] [data-bz-node="tr-nav"] .bz-btn { border-radius: 8px; }

/* --- Phone: the header row has a floor wider than the screen -----------------
   The row never stacks, so its two columns keep their natural widths: the
   lockup is 4.1:1, so at 40px tall it is 164px, and the bar holding the
   hamburger and the phone button is 180px. With the gutters that is a 416px
   floor — wider than every phone sold, so the bar was pushed off the right
   edge and the page scrolled sideways under it.

   Grid items refuse to shrink below their content by default. The brand column
   is released and the lockup scales into whatever the bar leaves. */
@media (max-width: 640px) {
  /* The row carries 48px gutters, a quarter of a phone's width, and they do not
     even line up with the 20px the page's own containers use — so the lockup sat
     inset from the copy beneath it. Matching the page gutter buys back 56px,
     which is most of what the row was short. */
  [data-bz-node="header-row"] { padding-inline: 20px; gap: 12px; }
  [data-bz-node="header-brand"] { min-width: 0; flex-shrink: 1; }
  [data-bz-node="site-header"] .bz-logo { max-width: 100%; display: block; }
  [data-bz-node="site-header"] .bz-logo__img {
    height: auto;
    max-height: 36px;
    max-width: 100%;
    width: auto;
  }
}
/* The lockup now shrinks to make room, so the row fits at any width and this
   is a legibility line rather than a fit one: sharing the row costs the lockup
   20px of width for every 20px of screen lost, and by 360px it is down to
   128x31 — the last size at which "International | Sun State" can still be
   read. Below that the number gives way instead. The hamburger stays, and
   Contact is one tap inside it. Every mainstream phone is 360 or wider, the
   375px iPhone SE and mini included, so in practice the number stays. */
@media (max-width: 359px) {
  [data-bz-node="header-cta"] { display: none; }
}

/* --- Phone: a balanced header ----------------------------------------------
   The lockup was capped at 36px tall while the bar beside it kept its tablet
   sizes, so the hamburger and the phone button outweighed the brand. On a
   phone the bar is tightened, which gives the lockup the room to grow to 44px.
   Phone only; desktop and tablet are untouched. */
@media (max-width: 640px) {
  [data-bz-node="site-header"] .bz-logo__img { max-height: 44px; }
  [data-bz-node="header-bar"] { padding: 0 4px; }
  [data-bz-node="header-bar-row"] { min-height: 42px; gap: 6px; }
  [data-bz-node="site-header"] .bz-menu-toggle { width: 32px; height: 32px; padding: 0; gap: 3px; align-items: center; justify-content: center; }
  [data-bz-node="site-header"] .bz-menu-toggle span { width: 16px; }
  [data-bz-node="header-cta"] .bz-btn {
    min-height: 32px;
    padding: 0 10px;
    font-size: 12px;
    letter-spacing: .02em;
  }
}

/* --- Sticky menu bar ------------------------------------------------------
   The menu bar stays pinned to the top of the window on every page, the way
   the International brand site's does; the logo and the header band scroll
   away with the page. The platform's `scrollstate` behaviour on the header
   marks it [data-bz-scrolled] the moment the page moves, and only then is the
   bar taken out to `position: fixed` — at exactly the place it already sits
   (measured per breakpoint below), so it never jumps. Without the script, and
   on the Design canvas, the header is simply its resting self. */
html {
  --sticky-bar-top: 27px;
  --sticky-bar-row: 56px;
  --sticky-bar-right: var(--container-pad);
  --sticky-bar-bottom: 77px;
  scroll-padding-top: calc(var(--sticky-bar-bottom) + 16px);
}
@media (min-width: 1101px) and (max-width: 1320px) {
  html { --sticky-bar-top: 24px; --sticky-bar-row: 50px; --sticky-bar-bottom: 74px; }
}
@media (max-width: 1100px) {
  html { --sticky-bar-top: 24px; --sticky-bar-row: 52px; --sticky-bar-bottom: 76px; }
}
@media (max-width: 640px) {
  html { --sticky-bar-top: 25px; --sticky-bar-row: 44px; --sticky-bar-right: 20px; --sticky-bar-bottom: 67px; }
}

/* Pinned: the bar leaves the header row for the window, at the same spot. The
   row keeps the bar's height so the header band never shrinks under it. */
[data-bz-node="site-header"][data-bz-scrolled] [data-bz-node="header-row"] {
  min-height: var(--sticky-bar-row);
}
[data-bz-node="site-header"][data-bz-scrolled] [data-bz-node="header-bar"] {
  position: fixed;
  top: var(--sticky-bar-top);
  right: var(--sticky-bar-right);
  z-index: 60;
}
/* Below 1101px the bar's drawer hangs from the header band, 84px from the top
   of the page. With the bar pinned the band has scrolled away, so the drawer is
   held at the same 84px from the top of the window instead — the place it
   opens at the top of the page — and keeps its own scroll for a long list. */
@media (max-width: 1100px) {
  [data-bz-node="site-header"][data-bz-scrolled] [data-bz-node="header-bar"] .bz-menu-wrap[data-open] > .bz-menu {
    position: fixed;
  }
}

/* Anything the page scrolls to — a post's contents links, an #anchor in a URL —
   lands below the pinned bar rather than under it, and the post's sticky
   contents rail parks beneath it instead of behind it. */
body [data-bz-node="art-side"] { top: calc(var(--sticky-bar-bottom) + 24px); }
