/* Redesign 44 — complete stylesheet for the 'request-quote' route (all design-system + page style blocks, in cascade order). */

body { margin: 0; font-family: var(--bm-font-body); background: var(--bm-canvas); }
    /* Rev 10 link boundary: content-link colours come from the DS :where(a) rules (tokens/base.css); no page-level bare a{} rules. */
    body.bq-sheet-open { overflow: hidden; }
    @keyframes bxqIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
    .bxq-step { animation: bxqIn 200ms cubic-bezier(0.2,0.8,0.2,1); }
    /* Rev 10 container-width contract: the field grids key off the FORM column's real width
       (a persistent rail or the side summary may already have consumed viewport width). */
    .bx-2col, .bx-3col { display: grid; grid-template-columns: 1fr; gap: 20px; }
    @container bqform (min-width: 500px) { .bx-2col { grid-template-columns: 1fr 1fr; } .bx-3col { grid-template-columns: 2fr 1fr 1.2fr; } }
    /* Rev 10 container-width contract: form + selected-items sit side-by-side ONLY when their
       actual container offers enough usable width (content-box ≥920px → form keeps ≥508px).
       Not a viewport decision — the persistent contextual rail already reduces the main column. */
    .bxq-wrap { container-type: inline-size; container-name: bq; }
    .bxq-formc { container-type: inline-size; container-name: bqform; }
    .bxq-layout { display: grid; grid-template-columns: minmax(0, 1fr); gap: 32px; align-items: start; }
    .bxq-panel { display: flex; }
    @container bq (min-width: 920px) {
      .bxq-layout { grid-template-columns: minmax(0, 1fr) minmax(300px, 380px); }
      .bxq-panel { display: flex; position: sticky; top: calc(var(--bm-header-visible-h, 76px) + 20px); max-height: calc(100dvh - var(--bm-header-visible-h, 76px) - 40px); overflow-y: auto; overscroll-behavior: contain; }
    }
    /* R75: the form's Selected items panel is the ONE authoritative summary. Below the desktop
       panel width it becomes a compact disclosure near the top of the form — no bottom sticky dock. */
    .bxq-dock, .bxq-pad { display: none !important; }
    .qx-toggle { display: none; width: 100%; align-items: center; justify-content: space-between; gap: 10px; padding: 14px 2px; background: transparent; border: none; border-bottom: 1px solid var(--bm-border-soft); cursor: pointer; text-align: left; min-height: 52px; box-sizing: border-box; }
    .qx-toggle .qx-chev { color: var(--bm-blue); transition: transform 220ms cubic-bezier(0.2,0.8,0.2,1); display: inline-flex; }
    .qx-body { display: contents; }
    @container bq (max-width: 919.98px) {
      .bxq-panel { order: -1; }
      .qx-toggle { display: flex; }
      .qx-head { display: none; }
      .bxq-panel:not(.is-open) .qx-body { display: none; }
      .bxq-panel.is-open .qx-body { display: flex; flex-direction: column; gap: 16px; }
      .bxq-panel.is-open .qx-toggle .qx-chev { transform: rotate(180deg); }
    }
    /* Rev 12 Request Quote grammar (contract-request-quote.html): a small number of pale-blue
       grouped surfaces, 16–20px radius, 20–24px internal spacing, 28–32px between groups, white
       fields/subpanels — never a box around every field. No schema/field/wording changes. */
    .bq-group { background: var(--bm-surface-blue); border-radius: 18px; padding: clamp(20px, 2.6vw, 24px); display: flex; flex-direction: column; gap: 20px; box-sizing: border-box; }
    /* Rev 18.3: the P6 date bridge (label markup, joined-chrome overrides, border restoration and the
       outside-click script) is DELETED. The shared DatePicker now ships the visible label, the one-press
       field chrome, the decorative untabbable glyph and pointerdown dismissal itself.

       Revision 18.3a: DatePicker now uses canonical tokens, so the temporary consumer definitions for
       --bm-border-field / --bm-label are DELETED. No page-level DatePicker workaround remains. */
    /* R4.25: compact three-column scroll picker (hour · minute · AM/PM), 7 rows visible, like the native one. */
    .bxq-tp { position: fixed; z-index: 70; box-sizing: border-box; background: #fff; border: 1px solid var(--bm-border); border-radius: 14px; padding: 6px; display: flex; gap: 4px; box-shadow: 0 12px 32px rgba(0,0,71,0.14), 0 2px 6px rgba(0,0,71,0.06); }
    .bxq-tp-col { display: flex; flex-direction: column; gap: 2px; height: 308px; overflow-y: auto; scrollbar-width: none; padding: 2px; scroll-snap-type: y proximity; }
    .bxq-tp-col::-webkit-scrollbar { display: none; }
    .bxq-tp-col > button { scroll-snap-align: start; }
    form.bxq-formc input[type="time"]::-webkit-calendar-picker-indicator { display: none; }
    .bxq-tp button:focus-visible { outline: 3px solid var(--bm-blue); outline-offset: 2px; }
    @media (prefers-reduced-motion: no-preference) { .bxq-tp { animation: bxq-tp-in 160ms cubic-bezier(0.2,0.8,0.2,1); } }
    @keyframes bxq-tp-in { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: none; } }
    .bxq-prog-full { display: flex; }
    .bxq-prog-compact { display: none; }
    @media (max-width: 767px) { .bxq-prog-full { display: none; } .bxq-prog-compact { display: flex; overflow-x: auto; padding-bottom: 2px; } }
    /* R4.20/R4.21 (owner-directed): both timelines span the full card width — the <ol> and its mount fill
       the wrapper so the flex-grow connectors between the steps stretch instead of stopping at 14–22px. */
    .bxq-prog-full > *, .bxq-prog-compact > *,
    .bxq-prog-full .bm-progress-timeline, .bxq-prog-compact .bm-progress-timeline { flex: 1 1 auto; width: 100%; min-width: 0; }
    .bxq-prog-full .bm-progress-timeline, .bxq-prog-compact .bm-progress-timeline { display: flex; }
    /* R4.22 (owner-directed): labels sit ABOVE the step circles in the full timeline; connectors are 4px and
       stay aligned to the 26px circle centre (row is column-reverse, so the circle is the bottom item). */
    .bxq-prog-full .bm-progress-step { flex-direction: column-reverse; align-items: center; gap: 6px; }
    .bxq-prog-full .bm-progress-step > span[aria-hidden]:not(.bm-progress-node) { white-space: normal; text-align: center; }
    .bxq-prog-full .bm-progress-timeline { align-items: flex-end; }
    /* Connector height/alignment are inline styles on the DS element, so they are set by _styleProgress()
       in the logic class (no !important — DS link/boundary rule). */
    .bx-shell { display: grid; grid-template-columns: minmax(0, 1fr); width: 100%; }
    .bx-shell-side { display: none; }
    .bx-shell-main { display: flex; flex-direction: column; min-width: 0; }
    @media (min-width: 1200px) {
      .bx-shell { grid-template-columns: clamp(280px, 21vw, 320px) minmax(0, 1fr); max-width: none; margin: 0; padding: 0; gap: 0; align-items: start; overflow: visible; }
      .bx-shell-side { display: block; position: sticky; top: var(--bm-header-visible-h, 76px); align-self: start; height: calc(100dvh - var(--bm-header-visible-h, 76px)); max-height: calc(100dvh - var(--bm-header-visible-h, 76px)); overflow-y: auto; overscroll-behavior: contain; scrollbar-gutter: stable; background: #fff; border-right: 1px solid var(--bm-border-soft); min-height: 0; }
      .bx-shell-main { gap: 32px; padding: 40px clamp(24px, 4vw, 64px) 48px; box-sizing: border-box; }
      .bx-shell-main > section { border-radius: 24px; }
    }
    @media (max-width: 1199px) { .bx-shell-main > section + section { border-top: 1px solid #E8EDF5; } }
    @media (prefers-reduced-motion: reduce) { * { transition: none !important; animation: none !important; } }
    /* removed (Rev 18.8): a page-level mobile veil (#bx-main .bm-hero::after, opaque var(--bm-navy)
       through the first 60% of the band) used to sit here. The bound DS now ships its own
       mobile-specific vertical .bm-hero__scrim, so the two stacked and the opaque page layer erased
       the artwork outright on phones while the DS's tuned scrim did nothing underneath. Mobile hero
       legibility is the design system's job. */
    /* Rev 18.4-R1 — HERO FIELD NO LONGER CROPPED. The Rev08F hero families are full-bleed
       background FIELDS: every file declares sc-camel-preserve-aspect-ratio="none" and paints the navy→cobalt
       surface itself, i.e. they are authored to stretch to whatever band they are given. The DS
       stylesheet nonetheless sets object-fit: cover on .bm-hero__art, which scales the field to
       COVER the band and clips whatever does not fit — so the artwork was cut off at the bottom
       (and the sides at some ratios) on every route that uses a hero family.
       object-fit: fill matches the SVG's own declaration: the whole field is shown, nothing is
       clipped, and because these are vector fields drawn for arbitrary band ratios there is no
       photographic distortion to worry about. */
    /* removed (Rev 18.8): the DS now ships object-fit:fill on .bm-hero__art. */

:root { --bm-header-h: 76px; --bm-header-visible-h: 76px; }
    body { margin: 0; padding-top: var(--bm-header-h); }
    [id] { scroll-margin-top: calc(var(--bm-header-h) + 16px); }
    /* R4.27 (owner-directed): catalog search in the header bar, in the slot the phone number used to occupy.
       The DS Header has no search slot, so the website adapter overlays the shared SiteSearch on the bar,
       aligned to the actions group (measured, re-measured on resize), and follows the bar's hide-on-scroll.
       Below 768px (where the phone link was already hidden) it becomes a 44px search button that opens a
       full-width search row under the bar. */
    /* The DS phone link is removed from the bar (owner). Its display/padding are inline (React-owned), so the
       page rule takes it out of flow and sight instead of fighting display — no !important. */
    .bxh-bar a[href="tel:8454997499"].bxh-hide-md { position: absolute; width: 0; height: 0; overflow: hidden; opacity: 0; visibility: hidden; pointer-events: none; margin: 0; }
    .bxh-search-slot { position: fixed; top: 14px; z-index: 201; height: 48px; display: flex; align-items: center; transition: opacity var(--bm-duration-base, 220ms) var(--bm-ease, ease), transform var(--bm-duration-base, 220ms) var(--bm-ease, ease); }
    .bxh-search-slot[data-hidden="true"] { opacity: 0; transform: translateY(-90px); pointer-events: none; }
    .bxh-search-btn { width: 44px; height: 44px; display: grid; place-items: center; background: transparent; border: 1px solid var(--bm-border); border-radius: 12px; cursor: pointer; color: var(--bm-navy); padding: 0; box-sizing: border-box; }
    .bxh-search-btn:hover { background: var(--bm-blue-mist, #F1F5FC); }
    .bxh-search-btn:focus-visible { outline: 3px solid var(--bm-blue); outline-offset: 2px; }
    .bxh-search-sheet { position: fixed; top: var(--bm-header-visible-h, 76px); left: 0; right: 0; z-index: 199; background: rgba(255,255,255,0.98); border-bottom: 1px solid var(--bm-border-soft); padding: 10px clamp(18px,3vw,40px) 14px; box-sizing: border-box; box-shadow: 0 12px 32px rgba(0,0,71,0.10); }
    @media (prefers-reduced-motion: reduce) { .bxh-search-slot { transition: none; } }

body { margin: 0; }
    /* Rev 12 rail scroll contract (contract-rail.html): the rail shell owns height; the nav yields
       (flex 0 1 auto, own scroll); the quote module is a min-height:0 flex column; ONLY the quote
       row list scrolls; the Review CTA is a non-scrolling sibling. No page-level clones, no
       competing overflow ancestors, no !important overflow workarounds, no trapped wheel. */
    .bxr { display: flex; flex-direction: column; height: 100%; min-height: 0; box-sizing: border-box; background: #fff; }
    .bxr-nav { flex: 0 1 auto; min-height: 0; overflow-y: auto; padding: 24px 20px 12px 20px; box-sizing: border-box; display: flex; flex-direction: column; }
    .bxr-cap { font: var(--bm-eyebrow); letter-spacing: 0.1em; text-transform: uppercase; color: var(--bm-muted); padding: 0 12px 12px; flex: none; }
    .bxr-back { display: flex; align-items: center; gap: 10px; min-height: 44px; padding: 0 12px; border-radius: 12px; color: var(--bm-blue); font: var(--bm-body-sm); font-weight: 700; text-decoration: none; transition: background 160ms; flex: none; }
    .bxr-back:hover { background: var(--bm-blue-mist, #F1F5FC); color: var(--bm-blue); }
    /* Rev 14: the redundant scope-heading path (.bxr-level/levelLabel/hasLevel) is REMOVED. */
    /* Rev 09/12 link boundary: row colours/current state come from the DS .bm-rail-link classed
       states (tokens/base.css — pale-blue current surface + 3px inset cobalt indicator, never
       yellow); local rules are layout-only. Light inset dividers between actionable rows. */
    .bxr-sep { border-top: 1px solid var(--bm-border-soft); margin: 0 12px; flex: none; }
    .bxr-item { display: flex; align-items: center; gap: 12px; min-height: 50px; padding: 0 12px; border-radius: 14px; font: var(--bm-title-md); transition: background 180ms cubic-bezier(0.2,0.8,0.2,1), color 180ms cubic-bezier(0.2,0.8,0.2,1); }
    .bxr-item[aria-current="true"] { color: var(--bm-blue); box-shadow: inset 3px 0 0 var(--bm-blue); }
    .bxr-plate { width: 34px; height: 34px; border-radius: 10px; background: var(--bm-blue-soft); border: 1px solid var(--bm-blue-border); display: grid; place-items: center; flex: none; color: var(--bm-blue); }
    .bxr-plate svg { width: 18px; height: 18px; display: block; }
    .bxq-mod { margin-top: auto; display: flex; flex-direction: column; min-height: 0; border-top: 1px solid var(--bm-border-soft); background: #fff; }
    /* Owner request (Sept 2026): the quote module anchors to the BOTTOM of the rail — heading and items sit
       directly above the Review quote CTA and grow upward as items are added, instead of hanging from the top. */
    .bxq-head { display: flex; align-items: center; gap: 4px; padding: 10px 14px 2px 14px; flex: none; margin-top: auto; }
    .bxq-toggle { flex: 1 1 auto; display: flex; align-items: center; gap: 10px; min-height: 44px; min-width: 0; padding: 0 10px; background: transparent; border: none; border-radius: 12px; cursor: pointer; text-align: left; transition: background 180ms cubic-bezier(0.2,0.8,0.2,1); }
    .bxq-toggle:hover { background: var(--bm-blue-mist, #F1F5FC); }
    .bxq-title { font: 700 14px/1.3 var(--bm-font-body); color: var(--bm-navy); }
    .bxq-chev { font-size: 10px; color: var(--bm-muted); transition: transform 220ms cubic-bezier(0.2,0.8,0.2,1); display: inline-block; }
    .bxq-preview { flex: 0 1 auto; min-height: 0; display: flex; flex-direction: column; padding: 0 14px 0 20px; box-sizing: border-box; }
    /* Only this list scrolls; wheel at its boundaries resumes page scroll (no overscroll trap). */
    .bxq-view { flex: 1 1 auto; min-height: 0; overflow-y: auto; scrollbar-gutter: stable; }
    .bxq-list { display: flex; flex-direction: column; }
    .bxq-row { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; padding: 9px 4px 9px 12px; border-top: 1px solid var(--bm-border-soft); }
    .bxq-list > .bxq-row:first-child { border-top: 0; }
    .bxq-thumb { width: 42px; height: 42px; display: flex; align-items: center; justify-content: center; flex: none; }
    .bxq-thumb img { max-width: 100%; max-height: 100%; width: auto; height: auto; object-fit: contain; }
    .bxq-name { font: 600 14px/1.3 var(--bm-font-body); color: inherit; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; min-width: 0; }
    /* Rev 18.3: the P6 overlay-anchor bridge is DELETED. QuotePreviewRow now ships `productHref`, so the
       shared component owns the combined thumbnail+title anchor, its no-underline blue hover/focus band,
       the pure-white image well and the controls-outside-the-link structure. No page-level override. */
    /* Rev 18.4-R1 — the rail deliberately shows NO price. Per-unit prices live on the product
       cards, the product page and the Request Quote review; in a 300px rail they crowded the row
       and forced the controls to wrap. Removing them also retires the wrap/gap workarounds the
       price line needed, so the row returns to the DS geometry: name, then stepper + remove. */
    /* removed (Rev 18.8): QuotePreviewRow's remove control now owns its destructive hover,
       so the page no longer needs !important to reach past the component's inline styles. */

    /* Rev 17.3 row detail link: thumbnail + name are one 44px-tall focusable target. Colour/hover/current
       states come from the shared .bm-rail-link contract in tokens/base.css — no local link restyling. */
    .bxq-detail { display: flex; align-items: center; gap: 8px; min-width: 0; flex: 1 1 120px; min-height: 44px; padding: 2px 4px 2px 0; border-radius: 10px; text-decoration: none; }
    .bxq-detail:focus-visible { outline: 3px solid var(--bm-blue); outline-offset: 2px; }
    /* QuantityStepper: DS component (Rev 10) per row; stepper + remove clustered right. */
    .bxq-ctl { display: flex; align-items: center; gap: 2px; flex-wrap: nowrap; flex-shrink: 0; margin-left: auto; }
    .bxq-x { width: 44px; height: 44px; margin: 0; border-radius: 12px; background: transparent; border: none; color: var(--bm-muted); display: grid; place-items: center; line-height: 0; padding: 0; cursor: pointer; align-self: center; transition: background 180ms cubic-bezier(0.2,0.8,0.2,1), color 180ms cubic-bezier(0.2,0.8,0.2,1); }
    .bxq-x:hover { background: #FFF1F1; color: #B42318; }
    .bxq-x:active { background: #FFE4E4; color: #B42318; }
    .bxq-x:focus-visible { background: #FFF1F1; color: #B42318; outline: 3px solid var(--bm-blue); outline-offset: -3px; }
    .bxq-x svg { width: 12px; height: 12px; flex: none; pointer-events: none; display: block; }
    .bxq-close { flex: none; }
    .bxq-close:hover { background: var(--bm-blue-mist, #F1F5FC); color: var(--bm-navy); }
    .bxq-close:active { background: var(--bm-blue-soft); color: var(--bm-navy); }
    .bxq-close:focus-visible { background: var(--bm-blue-mist, #F1F5FC); color: var(--bm-navy); outline: 3px solid var(--bm-blue); outline-offset: -3px; }
    .bxr-cta-region { flex: none; background: #fff; padding: 12px 20px 16px; box-sizing: border-box; display: flex; flex-direction: column; gap: 8px; }
    /* Rev 09 link boundary: CTA colours/states come from the DS .bm-rail-cta (tokens/base.css). */
    .bxr-cta { display: inline-flex; align-items: center; justify-content: center; text-align: center; gap: 10px; width: 100%; min-height: 48px; padding: 0 18px; border-radius: 9999px; border: 1.5px solid transparent; font: var(--bm-button); box-sizing: border-box; transition: background 220ms cubic-bezier(0.2,0.8,0.2,1), border-color 220ms cubic-bezier(0.2,0.8,0.2,1); }
    .bxr-qsum { font: var(--bm-body-sm); color: var(--bm-body); display: flex; align-items: center; gap: 8px; min-height: 24px; }
    .bxr-spacer { flex: 1 1 auto; }
    a:focus-visible, button:focus-visible { outline: 3px solid var(--bm-blue); outline-offset: 2px; }
    @media (prefers-reduced-motion: reduce) { .bxr * { transition: none !important; } }

body { margin: 0; }
    /* removed (Rev 18.8): QuotePreviewRow now takes `price`, so the row renders
       "$N \u00b7 1-day rental" itself. The custom-property + ::before bridge is gone. */

body { margin: 0; }
    /* Rev 10 link boundary: content-link colours come from the DS :where(a) rules; no bare a{} rules. Classed header/footer links own their states. */
    .bxf-grid { display: grid; grid-template-columns: minmax(110px, 0.7fr) minmax(130px, 1fr) minmax(130px, 0.9fr) minmax(110px, 0.8fr) minmax(300px, 1.2fr); gap: clamp(20px, 2.4vw, 32px); }
    /* Actions: compact group after the hours, side by side whenever the Contact track is ≥300px. */
    .bxf-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin-top: 14px; padding-top: 14px; border-top: 1px solid rgba(255,255,255,0.14); max-width: 380px; }
    .bxf-contact { container: bxfc / inline-size; }
    /* Rev 07 — tablet/narrow desktop: named areas, no auto-placement. Brand row, balanced
       three-column navigation row, then Contact as a compact full-width row. */
    @media (max-width: 1179px) {
      .bxf-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); grid-template-areas: "brand brand brand" "browse services company" "contact contact contact"; row-gap: 36px; }
      .bxf-brand { grid-area: brand; }
      .bxf-browse { grid-area: browse; }
      .bxf-services { grid-area: services; }
      .bxf-company { grid-area: company; }
      .bxf-contact { grid-area: contact; }
    }
    /* Rev 07 — mobile: brand, two-column nav subgrid (Browse tall left; Services + Company right), contact. */
    @media (max-width: 599px) {
      .bxf-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-areas: "brand brand" "browse services" "browse company" "contact contact"; column-gap: 24px; row-gap: 28px; }
    }
    @media (max-width: 419px) {
      .bxf-grid { grid-template-columns: 1fr; grid-template-areas: "brand" "browse" "services" "company" "contact"; row-gap: 26px; }
    }
    /* Stack equal full width only where two buttons genuinely can't fit; cap so pills don't oversize. */
    @media (max-width: 479px) { .bxf-actions { grid-template-columns: 1fr; max-width: 320px; } }
    /* Rev 08D — the footer stays full width; only its inner container follows the page measure.
       Defaults reproduce the previous centred 1360px container exactly; a page that publishes the
       --bx-footer-* hooks (home) aligns the inner grid to its main content column instead. */
    .bxf-inner { max-width: 1360px; margin: 0 auto; padding: 52px clamp(18px,3vw,48px) 28px; box-sizing: border-box; }
    @media (min-width: 1200px) {
      .bxf-inner {
        max-width: var(--bx-footer-max, 1360px);
        margin-left: var(--bx-footer-ml, auto);
        margin-right: var(--bx-footer-mr, auto);
        padding-left: var(--bx-footer-pl, clamp(18px,3vw,48px));
        padding-right: var(--bx-footer-pr, clamp(18px,3vw,48px));
      }
    }

body { margin: 0; }
    address { font-style: normal; }
    .bxcd { display: flex; flex-direction: column; }
    .bxcd-group { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
    /* footer variant: compact groups, subtle dividers */
    .bxcd-f { gap: 11px; }
    .bxcd-f .bxcd-group + .bxcd-group { border-top: 1px solid rgba(255,255,255,0.14); padding-top: 11px; }
    /* page variant: more air, light dividers */
    .bxcd-p { gap: 18px; }
    .bxcd-p .bxcd-group + .bxcd-group { border-top: 1px solid var(--bm-border-soft); padding-top: 18px; }
    /* hours grids — rows can never wrap internally */
    .bxcd-hours { margin: 0; }
    .bxcd-hours dt, .bxcd-hours dd { margin: 0; white-space: nowrap; }
    .bxcd-hours-f { display: grid; grid-template-columns: max-content max-content; justify-content: start; column-gap: 12px; row-gap: 5px; }
    .bxcd-hours-p { display: grid; grid-template-columns: minmax(0, 1fr) max-content; column-gap: 16px; row-gap: 6px; max-width: 340px; }
    @media (max-width: 379px) {
      .bxcd-hours-p { grid-template-columns: 1fr; row-gap: 2px; }
      .bxcd-hours-p dd { margin-bottom: 6px; }
    }
    /* Rev 07 — when the footer Contact block spans a full-width row (container ≥ 40rem),
       the three groups form a compact horizontal subgrid instead of one tall column. */
    @container bxfc (min-width: 40rem) {
      .bxcd-f { display: grid; grid-template-columns: repeat(3, minmax(0, max-content)); column-gap: clamp(32px, 8cqw, 88px); row-gap: 12px; align-items: start; }
      .bxcd-f > div:first-child { grid-column: 1 / -1; }
      .bxcd-f .bxcd-group + .bxcd-group { border-top: none; padding-top: 0; }
    }

body { margin: 0; }
    .bxs-input::placeholder { color: var(--bm-muted); }
    .bxs-input:focus-visible { outline: 3px solid var(--bm-blue); outline-offset: 2px; }
    .bxs-opt:hover, .bxs-opt[aria-selected="true"] { background: var(--bm-blue-mist, #F1F5FC); }
    .bxs-opt:focus-visible, .bxs-all:focus-visible { outline: 3px solid var(--bm-blue); outline-offset: -3px; }
    .bxs-all:hover { background: var(--bm-blue-mist, #F1F5FC); }

.bxh-nav-desktop{display:flex}.bxh-burger,.bxh-mobile-quote{display:none !important}.bxh-iconbtn{width:44px;height:44px;place-items:center;line-height:0;background:transparent;border:1px solid var(--bm-border);border-radius:12px;cursor:pointer;color:var(--bm-navy);padding:0;box-sizing:border-box}.bxh-iconbtn svg{display:block}.bxh-toast{position:fixed;left:50%;transform:translateX(-50%);bottom:14px;z-index:240;display:flex;align-items:center;gap:10px;background:#fff;color:var(--bm-ink);border:1px solid var(--bm-border);border-radius:16px;padding:5px 5px 5px 14px;box-shadow:0 10px 30px rgba(0,0,71,.16);max-width:min(420px,calc(100vw - 24px));box-sizing:border-box}.bxh-toast__text{overflow:hidden}.bxh-toast__text>span:first-child{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:1199px){.bxh-nav-desktop{display:none !important}.bxh-burger{display:grid !important}}@media(max-width:767px){.bxh-hide-md{display:none !important}}@media(max-width:479px){.bxh-hide-narrow{display:none !important}.bxh-mobile-quote{display:grid !important}}@media(prefers-reduced-motion:reduce){.bxh-bar{transition:none !important}}

.bm-hero{position:relative;overflow:hidden;background:var(--bm-hero-surface)}.bm-hero--field{background:var(--bm-navy)}.bm-hero__inner{position:relative;z-index:1;max-width:var(--bm-container);margin:0 auto;box-sizing:border-box}.bm-hero__copy{display:flex;flex-direction:column;gap:var(--bm-space-4);min-width:0}.bm-hero__eyebrow{font:var(--bm-eyebrow);letter-spacing:var(--bm-eyebrow-ls);text-transform:uppercase;color:var(--bm-blue)}.bm-hero__title{margin:0;text-wrap:pretty;color:var(--bm-navy)}.bm-hero__body{margin:0;text-wrap:pretty;color:var(--bm-body);max-width:var(--bm-hero-body-measure)}.bm-hero__phone{font:var(--bm-title-md);color:var(--bm-blue);text-decoration:none}.bm-hero__field{position:absolute;inset:0;z-index:0;display:block;pointer-events:none}.bm-hero__art{display:block;width:100%;height:100%;object-fit:fill}.bm-hero__scrim{position:absolute;inset:0;z-index:0;pointer-events:none;background:linear-gradient(90deg,rgba(0,0,71,.78) 0%,rgba(0,0,71,.58) 34%,rgba(0,0,71,.18) 60%,rgba(0,0,71,0) 78%)}@media(max-width:767px){.bm-hero__scrim{background:linear-gradient(180deg,rgba(0,0,71,.72) 0%,rgba(0,0,71,.5) 55%,rgba(0,0,71,.2) 100%)}}.bm-hero__crumb{font:var(--bm-caption);color:var(--bm-muted);line-height:1.4;display:flex;flex-wrap:wrap;align-items:center;gap:0}.bm-hero__crumb a{color:var(--bm-muted);text-decoration:none}.bm-hero__crumb a:hover,.bm-hero__crumb a:focus-visible{color:var(--bm-blue);text-decoration:underline}.bm-hero__crumb [aria-current]{color:var(--bm-ink)}.bm-hero--on-dark .bm-hero__crumb,.bm-hero--on-dark .bm-hero__crumb a{color:var(--bm-on-dark-muted)}.bm-hero--on-dark .bm-hero__crumb a:hover,.bm-hero--on-dark .bm-hero__crumb a:focus-visible{color:#fff}.bm-hero--on-dark .bm-hero__crumb [aria-current]{color:#fff}.bm-hero--center .bm-hero__inner{display:flex;flex-direction:column;justify-content:center}.bm-hero--on-dark .bm-hero__eyebrow{color:var(--bm-yellow)}.bm-hero--on-dark .bm-hero__title{color:#fff}.bm-hero--on-dark .bm-hero__body{color:var(--bm-on-dark-muted)}.bm-hero--on-dark .bm-hero__phone{color:#fff}.bm-hero--s2 .bm-hero__inner{padding:var(--bm-hero-s2-pad-y) var(--bm-hero-pad-x);min-height:var(--bm-hero-s2-min)}.bm-hero--s2 .bm-hero__copy{max-width:var(--bm-hero-copy-measure)}.bm-hero--s2 .bm-hero__title{font:var(--bm-display-lg);letter-spacing:var(--bm-display-lg-ls)}.bm-hero--s2 .bm-hero__body{font:var(--bm-body-lg)}@media(min-width:768px){.bm-hero--s2 .bm-hero__copy{max-width:56%}}.bm-hero--compact .bm-hero__inner{padding:var(--bm-hero-compact-pad-y) var(--bm-hero-pad-x);display:flex;align-items:center;min-height:var(--bm-hero-compact-env-390)}.bm-hero--compact .bm-hero__copy{max-width:var(--bm-hero-copy-measure)}.bm-hero--compact .bm-hero__title{font:var(--bm-heading-1);letter-spacing:var(--bm-heading-1-ls)}.bm-hero--compact .bm-hero__body{font:var(--bm-body-md)}@media(min-width:768px){.bm-hero--compact .bm-hero__inner{min-height:var(--bm-hero-compact-env-768)}.bm-hero--compact .bm-hero__copy{max-width:62%}}@media(min-width:1024px){.bm-hero--compact .bm-hero__inner{min-height:var(--bm-hero-compact-env-1024)}}@media(min-width:1440px){.bm-hero--compact .bm-hero__inner{min-height:var(--bm-hero-compact-env-1440)}}.bm-hero--band .bm-hero__inner{padding:var(--bm-hero-band-pad-y) var(--bm-hero-pad-x);display:flex;flex-direction:column;gap:var(--bm-space-3)}.bm-hero--band .bm-hero__title{font:var(--bm-heading-2)}.bm-hero--band .bm-hero__body{font:var(--bm-body-md)}.bm-hero--product-title{background:linear-gradient(180deg,#FFFFFF 0%,#DCE7F8 100%);border-bottom:1px solid var(--bm-border-soft)}.bm-hero--product-title .bm-hero__inner{padding:clamp(16px,2.2vw,26px) var(--bm-hero-pad-x)}.bm-hero--product-title .bm-hero__copy{gap:10px}.bm-hero--product-title .bm-hero__title{font:var(--bm-heading-1);letter-spacing:var(--bm-heading-1-ls);color:var(--bm-navy);max-width:30ch}.bm-hero__motif{display:flex;align-items:center;gap:8px}.bm-hero__motif-line{width:26px;height:2px;background:var(--bm-blue);border-radius:2px}.bm-hero__motif-dot{width:6px;height:6px;border-radius:50%;background:var(--bm-yellow)}.bm-hero__pill{display:inline-flex;align-items:center;height:26px;padding:0 12px;border-radius:9999px;background:#fff;border:1px solid var(--bm-border-soft);font:var(--bm-caption);font-weight:700;color:var(--bm-blue);width:fit-content}