/*!
 * GBZ420 shared shell layer v1 - header footprint, site-wide reassurance strip, footer
 * alignment and product-page presentation. Written 2026-09-23 (America/Los_Angeles) by the
 * shared-shell-fidelity task. Local copy only: web root C:\Codex\GBZ420\site (gbz420.test).
 *
 * References: C:\Codex\GBZ420\gbz 2\01-home-revised.png .. 06-page-gbz-prime.png
 * Contract  : docs/sitewide-maquettes-20260921/DESIGN-CONTRACT.md
 * Tokens    : assets/css/gbz-tokens.css (loaded from _partials/head.tpl)
 *
 * Rules for this file:
 *  1. Presentation only. No commerce data, price, stock, combination, cart or checkout behaviour
 *     is changed, hidden or reordered - every rule below changes size, position, spacing or type.
 *  2. Selectors are deliberately more specific than the generated theme bundle (body + id), so the
 *     file does not depend on the CCC bundle order.
 *  3. The single documented !important pair is on .afg-bogo-overlay, whose size the addifyfreegifts
 *     module sets through an inline style attribute. The real promotion rule stays visible.
 */

/* ----------------------------------------------------------------------------------------------
 * 1. Header footprint - reference measures ~155 px at 1440 (top band 116 px + 39 px menu band).
 *    Before: top bar 35 + .header-top 184 (25 px padding + 134 px logo) + menu band 40 = 259.
 * ------------------------------------------------------------------------------------------- */

body #header .header-nav {
    padding-top: 6px;
    padding-bottom: 6px;
}

body #header .header-top {
    padding-top: 8px;
    padding-bottom: 8px;
}

body #header #desktop_logo img {
    width: auto;
    height: 72px;
    max-height: 72px;
}

body #header .col-header-center #search_widget {
    max-width: 420px;
    margin-right: auto;
    margin-left: auto;
}

/* The theme sizes the search submit with `.search-widget .search-btn {
   position:absolute; right:0; height:100%; padding:0 1em }`, so its box is the
   icon plus two 14 px paddings: measured 42 x 45 at 1440 on every page tested
   (charter 11 wants a 44 x 44 touch target). min-width closes the 2 px gap and
   leaves the button's own padding, icon, colour and focus ring untouched. */
body #header #search_widget .search-btn {
    min-width: 44px;
}

/* ----------------------------------------------------------------------------------------------
 * 2. Shared 4-up reassurance strip - rendered by _partials/gbz-reassurance-strip.tpl.
 *    Items 1-3 are the live blockreassurance blocks, item 4 is the shop contact entry.
 * ------------------------------------------------------------------------------------------- */

body #gbz-reassurance-strip {
    background-color: var(--gbz-surface-alt);
    border-top: var(--gbz-hairline);
    border-bottom: var(--gbz-hairline);
}

body #gbz-reassurance-strip .gbz-reassurance-strip__inner {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    align-items: stretch;
}

/* The module widget keeps its own markup; its wrapper and list become transparent so the four
   items sit directly in the strip grid. */
body #gbz-reassurance-strip #block-reassurance,
body #gbz-reassurance-strip #block-reassurance > ul,
body #gbz-reassurance-strip .gbz-reassurance-strip__extra {
    display: contents;
}

/* The generated theme bundle styles #block-reassurance directly (#block-reassurance li,
   #block-reassurance li .block-reassurance-item). The extra .gbz-reassurance-strip__inner class
   keeps these rules ahead of it instead of depending on the bundle order. */
body #gbz-reassurance-strip #block-reassurance {
    margin-bottom: 0;
}

body #gbz-reassurance-strip #block-reassurance > ul {
    margin: 0;
    padding: 0;
}

body #gbz-reassurance-strip #block-reassurance li,
body #gbz-reassurance-strip .gbz-reassurance-strip__extra > li {
    list-style: none;
    margin: 0;
    padding: 0;
    border: 0;
}

body #gbz-reassurance-strip .gbz-reassurance-strip__inner .block-reassurance-item {
    display: flex;
    align-items: flex-start;
    gap: 14px;
    height: 100%;
    padding: 26px 20px;
}

body #gbz-reassurance-strip .gbz-reassurance-strip__inner .block-reassurance-item img,
body #gbz-reassurance-strip .gbz-reassurance-strip__inner .block-reassurance-item svg {
    flex: 0 0 46px;
    width: 46px;
    height: 46px;
    margin: 0 0 0 0;
}

body #gbz-reassurance-strip .block-reassurance-item__text {
    display: block;
    min-width: 0;
}

body #gbz-reassurance-strip .block-reassurance-item__title {
    display: block;
    color: var(--gbz-ink);
    font-size: 0.9375rem;
    font-weight: 700;
    line-height: 1.15;
    text-transform: uppercase;
}

body #gbz-reassurance-strip .block-reassurance-item__description {
    display: block;
    margin-top: 5px;
    color: var(--gbz-muted);
    font-size: 0.875rem;
    line-height: 1.35;
}

body #gbz-reassurance-strip .block-reassurance-item__description a {
    color: inherit;
    text-decoration: none;
}

body #gbz-reassurance-strip .block-reassurance-item__description a:hover,
body #gbz-reassurance-strip .block-reassurance-item__description a:focus {
    text-decoration: underline;
}

@media (max-width: 991px) {
    body #gbz-reassurance-strip .gbz-reassurance-strip__inner {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    body #gbz-reassurance-strip .gbz-reassurance-strip__inner .block-reassurance-item {
        padding: 20px 16px;
    }

    body #gbz-reassurance-strip .gbz-reassurance-strip__inner .block-reassurance-item img,
    body #gbz-reassurance-strip .gbz-reassurance-strip__inner .block-reassurance-item svg {
        flex: 0 0 38px;
        width: 38px;
        height: 38px;
    }
}

@media (max-width: 575px) {
    body #gbz-reassurance-strip .gbz-reassurance-strip__inner {
        grid-template-columns: minmax(0, 1fr);
    }

    body #gbz-reassurance-strip .gbz-reassurance-strip__inner .block-reassurance-item {
        padding: 14px 16px;
    }

    body #gbz-reassurance-strip .gbz-reassurance-strip__inner .block-reassurance-item img,
    body #gbz-reassurance-strip .gbz-reassurance-strip__inner .block-reassurance-item svg {
        flex: 0 0 28px;
        width: 28px;
        height: 28px;
    }
}

/* ----------------------------------------------------------------------------------------------
 * 2b. Tablet header (576-991 px). The theme hides .header-top below 992 px and falls back to the
 *     mobile bar, but only the <=575 px rule keeps the top strip on one line and nothing caps the
 *     fallback logo, so 768 px rendered a 260 px header (85 px wrapping strip + 175 px bar).
 *     Same treatment as the existing mobile rule, applied to the tablet range.
 * ------------------------------------------------------------------------------------------- */

@media (min-width: 576px) and (max-width: 991px) {
    body #header .header-nav .row.justify-content-between {
        flex-wrap: nowrap;
        align-items: center;
    }

    body #header .header-nav .left-nav {
        flex: 1 1 auto;
        width: auto;
        min-width: 0;
        max-width: none;
        overflow-x: auto;
        white-space: nowrap;
        scrollbar-width: none;
        -webkit-overflow-scrolling: touch;
    }

    body #header .header-nav .left-nav::-webkit-scrollbar {
        display: none;
    }

    body #header .header-nav .block-iqitlinksmanager-2,
    body #header .header-nav .block-iqitlinksmanager-2 ul {
        display: flex !important;
        width: max-content;
        flex-wrap: nowrap;
        align-items: center;
    }

    body #header .header-nav .right-nav {
        flex: 0 0 auto;
        width: auto;
        max-width: none;
        padding-left: 8px;
        white-space: nowrap;
    }

    body #mobile-header .col-mobile-logo img {
        width: auto;
        height: 76px;
        max-height: 76px;
    }
}

/* ----------------------------------------------------------------------------------------------
 * 3. Footer proportions - the four live footer blocks, aligned on the reference grid.
 * ------------------------------------------------------------------------------------------- */

body #footer #footer-container-main {
    padding-top: 32px;
    padding-bottom: 24px;
}

body #footer #footer-container-main .block-title {
    margin-bottom: 12px;
    padding-bottom: 0;
    font-size: 0.875rem;
    font-weight: 700;
    line-height: 1.2;
}

body #footer #footer-container-main .block-links ul > li {
    margin-bottom: 0;
    padding: 0;
}

body #footer #footer-container-main .block-links ul > li > a {
    display: inline-block;
    padding: 3px 0;
    font-size: 0.8125rem;
    line-height: 1.35;
}

body #footer #footer-container-main .block-iqitcontactpage .contact-rich {
    font-size: 0.8125rem;
    line-height: 1.35;
}

body #footer #footer-container-main .block-iqitcontactpage .contact-rich strong {
    font-size: 0.875rem;
    font-weight: 700;
}

/* The reference contact column separates address, phone and e-mail by spacing, not rules. */
body #footer #footer-container-main .block-iqitcontactpage .contact-rich hr {
    display: none;
}

/* The maquettes separate the footer columns with a hairline that starts at each column edge. */
@media (min-width: 992px) {
    body #footer #footer-container-main .container > .row > .block + .block {
        border-left: var(--gbz-hairline);
    }
}

/* ----------------------------------------------------------------------------------------------
 * 3b. Footer brand / about column - the maquettes show it as the first column of a compact
 *     five-column footer, directly below the reassurance band (gbz 2\01..06).
 * ------------------------------------------------------------------------------------------- */

body #footer #footer-container-main .gbz-footer-brand {
    flex: 1 1 24%;
    max-width: 24%;
}

body #footer #footer-container-main .gbz-footer-brand .block-title {
    margin-bottom: 8px;
}

body #footer #footer-container-main .gbz-footer-brand .block-title span {
    font-size: 1rem;
    font-weight: 700;
    line-height: 1.2;
    text-transform: none;
}

body #footer #footer-container-main .gbz-footer-brand__tagline {
    margin: 0 0 12px;
    color: var(--gbz-muted);
    font-size: 0.8125rem;
    line-height: 1.35;
}

body #footer #footer-container-main .gbz-footer-brand__links {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin: 0;
    padding: 0;
    list-style: none;
}

body #footer #footer-container-main .gbz-footer-brand__links > li {
    margin: 0;
    padding: 0;
}

body #footer #footer-container-main .gbz-footer-brand__links a {
    display: inline-block;
    padding: 5px 12px;
    border: var(--gbz-hairline-strong);
    border-radius: 6px;
    color: var(--gbz-ink);
    font-size: 0.8125rem;
    line-height: 1.25;
    text-decoration: none;
}

body #footer #footer-container-main .gbz-footer-brand__links a:hover,
body #footer #footer-container-main .gbz-footer-brand__links a:focus {
    border-color: var(--gbz-black);
    color: var(--gbz-black);
}

@media (max-width: 991px) {
    body #footer #footer-container-main .gbz-footer-brand {
        flex: 1 1 100%;
        max-width: 100%;
    }
}

/* 2026-09-23: the temporary home-only suppression of the Creative Elements "about" section
   (body#index .gbz-about-section) was removed after the home/Prime CE owner retired that section
   from the page-index documents 4170101 / 4170301 / 4170401 (stamp 20260923-085957). The home now
   renders four CE sections and no .gbz-about-section node, so the rule became dead code and the
   footer brand column in _partials/gbz-footer-brand.tpl is the single source of that copy. */

/* ----------------------------------------------------------------------------------------------
 * 4. Product page presentation - gallery frame and fill, thumbnails, display type, related row.
 *    Measured on gbz 2\05-product-thcx-godzilla-kush-hash.png (959 px wide, x1.5016 to 1440):
 *      gallery frame  x 35-534 / y 141-484  -> 499x343  -> 750x515 at 1440 (ratio 499:343)
 *      product art    x 112-463 / y 240-436 -> 352x197  -> 70.5 % of the frame width, 57.4 % of
 *                      its height
 *      thumbnails     three cards 149x118, 26 px gaps -> 224x177 at 1440
 *      buy column     x 570-922 -> 352 -> 496 px at 1440 (gallery 56.3 %, gap 4 %, buy 39.7 %)
 *      related row    four cards 213 px -> 320 px at 1440, 20 px gaps
 *    The catalogue shots are 960x960 WebP cut-outs whose opaque band is only 640 px wide, so the
 *    art is scaled inside the frames here; no catalogue file or image setting is touched.
 *    Real price, stock, offers, combinations and the add-to-cart flow are untouched.
 * ------------------------------------------------------------------------------------------- */

/* 4a. Column split (gallery wider than the purchase panel, like the maquette). */
body#product .gbz-product-page .product-info-row {
    grid-template-columns: minmax(0, 56.3fr) minmax(0, 39.7fr);
    column-gap: 4%;
}

/* 4a2. Product-page container: the maquette lays the page out on a 1332 px grid (content spans
   x 54-1386 at 1440) while the theme container is 1270 px. The wider box is scoped to the product
   page so the home, Prime and category layouts keep their current width. */
@media (min-width: 1200px) {
    body#product #wrapper > .container,
    body#product #header .container,
    body#product #inner-wrapper.container,
    body#product #footer .container {
        max-width: 1332px;
    }
}

/* 4b. Gallery frame with the visible hairline the maquette shows, and the art filling it. */
body#product .gbz-product-page .product-cover {
    aspect-ratio: 499 / 343;
    border: var(--gbz-hairline);
    overflow: hidden;
}

body#product .gbz-product-page .product-cover .product-images-large,
body#product .gbz-product-page .product-cover .product-images-large .swiper-wrapper,
body#product .gbz-product-page .product-cover .product-images-large .swiper-slide,
body#product .gbz-product-page .product-cover .product-images-large picture {
    height: 100%;
}

body#product .gbz-product-page .product-cover .product-images-large img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    /* Scale calibrated on the maquette by measuring the resin width on the frame's centre row:
       reference 340 px inside a 496 px frame (68.5 %); live 63.1 % at scale 1.16, so the factor is
       1.16 * 68.5/63.1 = 1.26. */
    transform: scale(1.26);
    transform-origin: 50% 50%;
}

/* 4c. Thumbnails: three across the gallery width (swiper is initialised for five per view, so the
   width override is the second documented !important). */
body#product .gbz-product-page #product-images-thumbs .swiper-slide {
    box-sizing: border-box;
    padding-right: 18px;
    width: 33.3333% !important;
}

body#product .gbz-product-page #product-images-thumbs .swiper-slide:last-child {
    padding-right: 0;
}

body#product .gbz-product-page #product-images-thumbs .thumb-container {
    overflow: hidden;
}

body#product .gbz-product-page #product-images-thumbs img {
    aspect-ratio: 149 / 118;
    object-fit: cover;
    /* Same calibration as the gallery: reference resin fills 91.1 % of the thumb tile width,
       live 98.6 % at scale 1.25, so 1.25 * 91.1/98.6 = 1.15. */
    transform: scale(1.15);
}

/* 4d. Display type: the maquette sets the title and the price in a heavy condensed face (about
   60-67 px and 72 px at 1440). The self-hosted "GBZ Anton" face (declared in gbz-tokens.css) is
   the match; Bahnschrift Condensed and Karla follow for a machine without the webfont and for the
   few codepoints Anton does not carry.

   2026-09-23 typography pass: the maquette also sets the accordion labels, the trust list titles
   and the recommendation card prices in that same heavy face, and it is visibly wider than Karla
   at equal weight. Those three selectors join the list here (family declared once); their sizes
   stay next to their layout in gbz-product-v4.css. Measured on
   gbz 2/05-product-thcx-godzilla-kush-hash.png against the live 1440 width (x1.483):
   accordion label ink 15 px -> 22 px, trust title ink 13 px -> 19 px, card price ink 14 px -> 21 px,
   while the live page rendered 15, 8 and 15 px of ink in Karla. */
body#product .gbz-product-page .page-title,
body#product .gbz-product-page .current-price .product-price,
body#product .gbz-product-page .gbz-product-chip--label,
body#product .gbz-product-page .product-accessories .section-title,
body#product .gbz-product-page .product-prices .product-price,
body#product .gbz-product-page #productdaas-accordion > .card .title > a,
body#product .gbz-product-page .gbz-product-service > summary,
body#product .gbz-product-page .gbz-product-reassurance .blockreassurance_product__text .block-title,
body#product .gbz-product-page .product-accessories .product-miniature .product-price {
    font-family: "GBZ Anton", "Bahnschrift SemiBold Condensed", "Bahnschrift Condensed", "Bahnschrift", "Arial Narrow", "Helvetica Neue", Karla, sans-serif;
}

body#product .gbz-product-page .page-title {
    /* px, not rem: this theme sets html font-size 14px. In "GBZ Anton" the longest line,
       "GODZILLA KUSH HASH", measures 493 px at 64 px against a 496 px column, so 64 px keeps the
       maquette's two-line break and its 60-67 px display size. */
    font-size: clamp(30px, 4.4vw, 64px);
    line-height: 0.95;
    margin-bottom: var(--gbz-space-4);
}

/* The maquette breaks the title as "RÉSINE THCX / GODZILLA KUSH HASH". At 1440 the column is
   520 px and "RÉSINE THCX GODZILLA" measures 519 px in Anton at the rendered 63.4 px, so the
   browser fitted it on line 1 and broke after GODZILLA instead. Capping the measure below that
   (line 2, "GODZILLA KUSH HASH", is 493 px) restores the reference break without touching the
   product name. Desktop only: the mobile column is narrower than the cap already. */
@media (min-width: 992px) {
    body#product .gbz-product-page .page-title {
        max-width: 500px;
    }
}

body#product .gbz-product-page .current-price .product-price {
    font-size: clamp(34px, 5vw, 72px);
    line-height: 1;
}

/* 4e. Related row: four cards per view like the maquette (was five at 250 px). */
body#product .gbz-product-page .product-accessories .swiper-slide {
    box-sizing: border-box;
    padding-right: 20px;
    width: 25% !important;
}

body#product .gbz-product-page .product-accessories .swiper-slide:last-child {
    padding-right: 0;
}

body#product .gbz-product-page .product-accessories .product-miniature {
    width: 100%;
}

/* The maquette's recommendation cards are 320x345 at 1440 with a landscape product frame; the live
   catalogue derivatives are portrait (236x305) with the product in a narrow horizontal band.
   Measured on the six shots this product recommends (product rows inside the 305 px height):
   pollen 116-245, pre-roll 113-195, Apple Fritter 64-219, Blueberry 88-224, Girl Scout Cookie
   96-240, Californian Hash 68-242 - union 64-245, centred on the image. A 20:17 frame with a
   centred `cover` crop keeps rows 52-253, i.e. every product fully visible with an 8-12 px margin,
   while the art is scaled 1.30x instead of 0.84x under `contain`. Height 260 + caption = 344 px,
   against the maquette's ~345 px. No catalogue file is changed and nothing is distorted. */
body#product .gbz-product-page .product-accessories .product-miniature .thumbnail-container {
    aspect-ratio: 20 / 17;
    overflow: hidden;
}

/* Every step of the anchor > picture > img chain needs a definite height, otherwise the portrait
   source keeps its intrinsic ratio, overflows the frame and loses its bottom. */
body#product .gbz-product-page .product-accessories .product-miniature .thumbnail-container > a.thumbnail,
body#product .gbz-product-page .product-accessories .product-miniature .thumbnail-container picture {
    display: block;
    height: 100%;
    width: 100%;
}

body#product .gbz-product-page .product-accessories .product-miniature .thumbnail-container img {
    display: block;
    height: 100%;
    width: 100%;
    object-fit: cover;
    object-position: 50% 50%;
    transform: none;
}

/* 4f. The existing FAQ block stays exactly as the module renders it. It already sits after the
   related row, i.e. last before the footer, which is the position the brief asks for; no rule is
   added here so its height and behaviour stay untouched. */

/* 4g. Promo badge. The module sizes it through an inline style attribute, so this pair is the
   third documented !important. The live "buy 1 get 2" rule stays visible at badge scale in the
   top-right corner, away from the product art and the "Promo !" flag. */
body#product .gbz-product-page .product-cover .afg-bogo-overlay {
    top: 10px;
    right: 10px;
    bottom: auto;
    left: auto;
    width: 96px !important;
    max-width: 96px !important;
    height: 96px;
}

body#product .gbz-product-page .product-cover .afg-bogo-overlay img {
    width: 96px;
    max-width: 96px;
    height: 96px;
    object-fit: contain;
    transform: none;
}

@media (max-width: 991.98px) {
    /* Tablets: two recommendation cards per view instead of four 187 px cards. */
    body#product .gbz-product-page .product-accessories .swiper-slide {
        padding-right: 12px;
        width: 50% !important;
    }
}

@media (max-width: 767.98px) {
    body#product .gbz-product-page .product-info-row {
        column-gap: 0;
        grid-template-columns: minmax(0, 1fr);
    }

    body#product .gbz-product-page #product-images-thumbs .swiper-slide {
        padding-right: 10px;
    }

    body#product .gbz-product-page #product-images-thumbs img,
    body#product .gbz-product-page .product-cover .product-images-large img {
        transform: scale(1.1);
    }
}

/* 4h. GBZ Prime packs and exclusives (2026-09-23). The Prime catalogue shots carry the "GBZ420 Prime"
   wordmark in the top-right corner, so they are the one family where the 4b calibration cuts through
   visible artwork. Measured on 592-gbz_pdp.jpg (product 173): the art fills rows 88-843 and cols
   34-938 of 960, while the centred 1.26 `cover` window keeps only rows 219-741 and cols 99-861 -
   the wordmark loses its top 13.6 % and the pack its bottom 10.5 %; across the line the worst bottom
   loss is 17.8 %. The Prime files this rule is calibrated on are 589 / 591 / 592 / 593 / 776 / 780 /
   820; their content boxes together span rows 84-912 and cols 0-951 of the 960 px square. `contain`
   without a zoom keeps the whole derivative inside the frame at every width, so subject and wordmark
   stay complete; the art then fills about 65 % of the frame width against the maquette's 70.5 %
   reference, and no catalogue file, image setting or other page is touched. The hook is the body
   class PrestaShop builds from the product link_rewrite, which reads "gbz-prime" in all three active
   languages (pack-gbz-prime-*, exclusive-gbz-prime-*, FR exclusivite-gbz-prime-*, DE
   exklusiv-gbz-prime-*). Every other PDP - the approved Godzilla Kush page included - keeps 4b/4c
   exactly as they are. Thumbnails follow the same no-crop rule: the 452x584 portrait derivative is
   fitted whole inside the 149:118 tile (its content sits at rows 105-495, cols 16-447). */
body#product[class*="gbz-prime"] .gbz-product-page .product-cover .product-images-large img {
    object-fit: contain;
    transform: none;
}

body#product[class*="gbz-prime"] .gbz-product-page #product-images-thumbs img {
    object-fit: contain;
    transform: none;
}

/* 4i. PDP reassurance icons (2026-09-23). The blockreassurance pack2 SVGs are black on disk, but the
   module's front script injects them inline and rewrites every path fill to its configured #F19D76
   (measured on the product block: 3 items x 2 paths, all rgb(241,157,118), identical in FR/EN/DE and
   at 1260/1440/390). The maquette reference draws those three icons solid black beside the black
   titles, so this one rule puts the injected paths back on the charte's black token. A CSS `fill`
   outranks the fill="..." presentation attribute, so only the colour changes: geometry, size and all
   other PDPs' markup stay as they are. The site-wide strip (#gbz-reassurance-strip) is not injected
   (0 inline SVG paths there) and keeps its own rendering. */
body#product .gbz-product-page .gbz-product-reassurance .blockreassurance_product__item svg path,
body:not(#product) .blockreassurance_product__item svg path {
    fill: var(--gbz-black);
}

/* 4i-bis. The same injected colour on the other two surfaces that render the block (2026-09-24,
   postfix-visual pass). Served markup check: `blockreassurance_product__item` appears in exactly
   three families - `body#product` (the PDP, already covered above), the cart page and the checkout
   - 3 items and 3 `img.svg.invisible` on each, 0 on home/listing/CMS/contact/Prime. The module's
   front script inlines those images and rewrites every path fill to its own `PSR_ICON_COLOR`, so
   the cart line and the checkout reassurance block carried the same rgb(241,157,118) peach as the
   PDP before 2026-09-23. Only three generic pictograms live in this block (lock, carrier, parcel),
   and on disk all three pack2 SVGs are black (`fill="#000000"`), so this restores the file colour
   instead of inventing one. Scope is the block itself, never a brand mark: the Facebook / Google
   sign-in pills are `iqitsociallogin` markup, match no selector here and keep their own paint, and
   the site-wide `#gbz-reassurance-strip` injects no inline SVG paths. Reversible by deleting this
   selector list. */

/* ----------------------------------------------------------------------------------------------
 * 5. Coordinated with the home/Prime CE owner (2026-09-23): the Prime hero headline uses the same
 *    self-hosted display face instead of the Google font the local resolver blocks. Measured with
 *    the face applied at the live 63 px: "DÉBLOQUEZ" 256 px, "L'EXPÉRIENCE" 308 px, "PRIME." 161 px
 *    (Karla was 396 / 460 / 217). Scaled to the reference's 73 px the longest line is 357 px, so the
 *    reference's 359 px measure holds the three lines. The CE-side measure stays with its owner.
 * ------------------------------------------------------------------------------------------- */

body .gbz-prime-headline .elementor-heading-title {
    font-family: "GBZ Anton", "Bahnschrift SemiBold Condensed", "Bahnschrift Condensed", Bahnschrift, "Arial Narrow", Karla, sans-serif;
}

/* Product carousels: Swiper's percentage slide height follows each card's
   content. Let the flex row stretch these slides to its tallest real card,
   including availability messages, without clipping text or fixing a height. */
body .elementor-widget-product-carousel .swiper-slide:has(> .product-card) {
    display: flex;
    height: auto;
}

body .elementor-widget-product-carousel .swiper-slide > .product-card {
    flex: 1 1 auto;
    height: auto;
    min-width: 0;
}

body .elementor-widget-product-carousel .swiper-slide > .product-card > .product-bottom {
    margin-top: 0;
}
