/*! GBZ420 - subscription widget, GBZ PRIME gate and subscription blocks, charter override v1.
 *  Local copy only: C:\Codex\GBZ420\site (gbz420.test), PrestaShop 8.2.8, theme warehouse,
 *  reference route /fr/gbz-prime/pack-gbz-prime-thcx-fleurs-resines.
 *  Reference: docs\sitewide-maquettes-20260921\CHARTE-GRAPHIQUE.md (palette 3, forms 6.4/6.5,
 *  display type 4.5). Presentation only - no markup, price, renewal or checkout behaviour.
 *  Loader: linked from themes/warehouse/templates/_partials/head.tpl (integrator-owned).
 *  Part 1 - product page (sections A-J below): the product-page hook output
 *  (.gbzvs-product-widget*) and the Prime gate
 *  (.gbzvs-product-exclusive-wrap .gbzvs-prime-exclusive-card), plus the module's own
 *  product-page add-to-cart accent.
 *  Part 2 - the same module's cart, checkout and portal blocks (sections K-S below), the
 *  residue recorded by docs\sitewide-maquettes-20260921\qa-subscription-residue-20260924\
 *  REPORT.md finding F3: the cart summary and line note, the checkout payment-option block and
 *  its inline frame, the subscriptions dashboard, the subscription detail page, the hosted
 *  payment redirect, the payment recovery page and the card-replacement page. Listing surfaces
 *  still keep their existing styling: no selector below is reachable from a listing template.
 *  Load-order independence: the module rules stay in
 *  modules/gbzverifonesubscriptions/views/css/front.css and are bundled by
 *  classes/assets/CccReducer.php, which reuses an existing bundle for an unchanged file list.
 *  The gate rule and the add-to-cart rules below therefore carry a `body` prefix and win on
 *  specificity instead of relying on being linked after the bundle.
 *  Tokens: themes/warehouse/assets/css/gbz-tokens.css (values repeated as fallbacks).
 * ============================================================================================== */

.gbzvs-product-widget-wrap .gbzvs-product-widget,
.gbzvs-product-exclusive-wrap .gbzvs-prime-exclusive-card {
  --gbzvs-pdp-accent: var(--gbz-accent, #d4fa0a);
  --gbzvs-pdp-accent-ink: var(--gbz-accent-ink, #000000);
  --gbzvs-pdp-ink: var(--gbz-ink, #101010);
  --gbzvs-pdp-black: var(--gbz-black, #000000);
  --gbzvs-pdp-white: var(--gbz-white, #ffffff);
  --gbzvs-pdp-surface-alt: var(--gbz-surface-alt, #f6f6f6);
  --gbzvs-pdp-muted: var(--gbz-muted, #5f5f5f);
  --gbzvs-pdp-on-dark-muted: var(--gbz-on-dark-muted, rgba(255, 255, 255, 0.78));
  --gbzvs-pdp-hairline-color: var(--gbz-hairline-color, #e6e6e6);
  --gbzvs-pdp-hairline-strong: var(--gbz-hairline-color-strong, #d0d0d0);
  --gbzvs-pdp-radius: var(--gbz-radius-sm, 2px);
  --gbzvs-pdp-pill: var(--gbz-radius-pill, 999px);
  --gbzvs-pdp-display: "GBZ Anton", "Bahnschrift SemiBold Condensed", "Bahnschrift Condensed",
    "Bahnschrift", "Arial Narrow", "Helvetica Neue", Karla, sans-serif;
}

/* A. Widget shell: white field, 1 px hairline, near-square corners, no shadow. */
.gbzvs-product-widget-wrap .gbzvs-product-widget {
  border: 1px solid var(--gbzvs-pdp-hairline-color);
  border-radius: var(--gbzvs-pdp-radius);
  background: var(--gbzvs-pdp-white);
  box-shadow: none;
}

/* B. Chips: rectangular lime field with black label (charter 6.5). */
.gbzvs-product-widget-wrap .gbzvs-product-widget__eyebrow,
.gbzvs-product-widget-wrap .gbzvs-product-widget__hero-kicker,
.gbzvs-product-widget-wrap .gbzvs-choice-card__badge,
.gbzvs-product-widget-wrap .gbzvs-vip-highlight__badge,
.gbzvs-product-exclusive-wrap .gbzvs-prime-exclusive-card__badge {
  border-radius: var(--gbzvs-pdp-radius);
  background: var(--gbzvs-pdp-accent);
  color: var(--gbzvs-pdp-accent-ink);
  font-size: 12px;
  font-weight: 700;
}

.gbzvs-product-widget-wrap .gbzvs-choice-card__badge--plain,
.gbzvs-product-widget-wrap .gbzvs-product-widget__info-pill {
  border: 1px solid var(--gbzvs-pdp-hairline-color);
  border-radius: var(--gbzvs-pdp-radius);
  background: var(--gbzvs-pdp-white);
  color: var(--gbzvs-pdp-ink);
  font-size: 12px;
}

/* C. Display type: strong condensed headings from the shared display face. */
.gbzvs-product-widget-wrap .gbzvs-product-widget__head strong {
  color: var(--gbzvs-pdp-black);
  font-family: var(--gbzvs-pdp-display);
  font-weight: 700;
  line-height: 1.12;
  text-transform: uppercase;
}

.gbzvs-product-widget-wrap .gbzvs-product-widget__hero-copy strong,
.gbzvs-product-widget-wrap .gbzvs-product-widget__summary-card strong,
.gbzvs-product-widget-wrap .gbzvs-vip-highlight__head strong {
  color: var(--gbzvs-pdp-black);
  font-family: var(--gbzvs-pdp-display);
  font-weight: 700;
}

.gbzvs-product-widget-wrap .gbzvs-product-widget__head span,
.gbzvs-product-widget-wrap .gbzvs-product-widget__subline,
.gbzvs-product-widget-wrap .gbzvs-product-widget__hero-price small,
.gbzvs-product-widget-wrap .gbzvs-product-widget__summary-card small,
.gbzvs-product-widget-wrap .gbzvs-product-widget__microcopy span {
  color: var(--gbzvs-pdp-muted);
}

/* D. Offer cards: flat white panels separated by hairlines, lime rule on the selected card. */
.gbzvs-product-widget-wrap .gbzvs-choice-card {
  border: 1px solid var(--gbzvs-pdp-hairline-color);
  border-radius: var(--gbzvs-pdp-radius);
  background: var(--gbzvs-pdp-white);
  box-shadow: none;
  -webkit-tap-highlight-color: rgba(212, 250, 10, 0.22);
  transition: border-color 0.15s ease, background-color 0.15s ease;
}

.gbzvs-product-widget-wrap .gbzvs-choice-card:hover,
.gbzvs-product-widget-wrap .gbzvs-choice-card:focus {
  border-color: var(--gbzvs-pdp-black);
  box-shadow: none;
}

.gbzvs-product-widget-wrap .gbzvs-choice-card:focus-visible {
  border-color: var(--gbzvs-pdp-black);
  outline: 2px solid var(--gbzvs-pdp-black);
  outline-offset: 2px;
  box-shadow: none;
}

.gbzvs-product-widget-wrap .gbzvs-choice-card.is-selected,
.gbzvs-product-widget-wrap .gbzvs-choice-card--one-time.is-selected,
.gbzvs-product-widget-wrap .gbzvs-choice-card--subscribe.is-selected {
  border-color: var(--gbzvs-pdp-black);
  background: var(--gbzvs-pdp-white);
  box-shadow: none;
  transform: none;
}

.gbzvs-product-widget-wrap .gbzvs-choice-card.is-selected::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 3px;
  background: var(--gbzvs-pdp-accent);
}

.gbzvs-product-widget-wrap .gbzvs-choice-card__title,
.gbzvs-product-widget-wrap .gbzvs-choice-card__discount,
.gbzvs-product-widget-wrap .gbzvs-product-widget__availability-link {
  color: var(--gbzvs-pdp-ink);
}

.gbzvs-product-widget-wrap .gbzvs-choice-card__price {
  color: var(--gbzvs-pdp-black);
  font-family: var(--gbzvs-pdp-display);
  font-size: var(--gbz-fs-price, 1.5rem);
  font-weight: 700;
  line-height: 1.15;
}

.gbzvs-product-widget-wrap .gbzvs-choice-card__compare,
.gbzvs-product-widget-wrap .gbzvs-choice-card__copy {
  color: var(--gbzvs-pdp-muted);
}

.gbzvs-product-widget-wrap .gbzvs-choice-card__saving {
  padding: 2px 7px;
  border-radius: var(--gbzvs-pdp-radius);
  background: var(--gbzvs-pdp-accent);
  color: var(--gbzvs-pdp-accent-ink);
  font-weight: 700;
}

.gbzvs-product-widget-wrap .gbzvs-product-widget--subscription-unavailable .gbzvs-choice-card--subscribe.is-disabled {
  border-color: var(--gbzvs-pdp-hairline-strong);
  background: var(--gbzvs-pdp-surface-alt);
  box-shadow: none;
}

/* E. Notices and availability. */
.gbzvs-product-widget-wrap .gbzvs-product-widget__server-notice,
.gbzvs-product-widget-wrap .gbzvs-product-widget__availability,
.gbzvs-product-widget-wrap .gbzvs-choice-card__blocked-note {
  border: 1px solid var(--gbzvs-pdp-hairline-strong);
  border-radius: var(--gbzvs-pdp-radius);
  background: var(--gbzvs-pdp-surface-alt);
  color: var(--gbzvs-pdp-ink);
}

.gbzvs-product-widget-wrap .gbzvs-product-widget__server-notice {
  border-left: 3px solid var(--gbzvs-pdp-black);
}

.gbzvs-product-widget-wrap .gbzvs-product-widget__availability.is-emphasized {
  border-color: var(--gbzvs-pdp-black);
  box-shadow: none;
}

.gbzvs-product-widget-wrap .gbzvs-product-widget__availability strong {
  color: var(--gbzvs-pdp-black);
}

/* F. Price panel, tabs and summary panels. */
.gbzvs-product-widget-wrap .gbzvs-product-widget__hero-price,
.gbzvs-product-widget-wrap .gbzvs-product-widget__summary-card {
  border: 1px solid var(--gbzvs-pdp-hairline-color);
  border-radius: var(--gbzvs-pdp-radius);
  background: var(--gbzvs-pdp-white);
  box-shadow: none;
}

.gbzvs-product-widget-wrap .gbzvs-product-widget__info {
  background: var(--gbzvs-pdp-white);
  box-shadow: none;
}

.gbzvs-product-widget-wrap .gbzvs-product-widget__hero-price strong {
  color: var(--gbzvs-pdp-black);
  font-family: var(--gbzvs-pdp-display);
}

.gbzvs-product-widget-wrap .gbzvs-product-tabs {
  gap: 0;
  padding: 0;
  border: 1px solid var(--gbzvs-pdp-hairline-color);
  border-radius: var(--gbzvs-pdp-radius);
  background: var(--gbzvs-pdp-white);
  box-shadow: none;
}

body .gbzvs-product-widget-wrap .gbzvs-product-tab {
  border: 0;
  border-radius: 0;
  background: transparent;
  color: var(--gbzvs-pdp-ink);
  font-family: var(--gbzvs-pdp-display);
  font-size: 12px;
  font-weight: 700;
  min-height: 44px;
  box-shadow: none;
}

.gbzvs-product-widget-wrap .gbzvs-product-tab + .gbzvs-product-tab {
  border-left: 1px solid var(--gbzvs-pdp-hairline-color);
}

body .gbzvs-product-widget-wrap .gbzvs-product-tab::after {
  left: 0;
  right: 0;
  bottom: 0;
  height: 2px;
  border-radius: 0;
  background: transparent;
}

body .gbzvs-product-widget-wrap .gbzvs-product-tab:hover,
body .gbzvs-product-widget-wrap .gbzvs-product-tab:focus {
  background: var(--gbzvs-pdp-surface-alt);
  color: var(--gbzvs-pdp-black);
  box-shadow: none;
  transform: none;
}

.gbzvs-product-widget-wrap .gbzvs-product-tab.is-active {
  border-color: var(--gbzvs-pdp-hairline-color);
  background: var(--gbzvs-pdp-accent);
  color: var(--gbzvs-pdp-accent-ink);
  box-shadow: none;
  transform: none;
}

.gbzvs-product-widget-wrap .gbzvs-product-tab.is-active::after {
  background: transparent;
}

body .gbzvs-product-widget-wrap .gbzvs-product-tab:focus-visible {
  outline: 2px solid var(--gbzvs-pdp-black);
  outline-offset: -3px;
  box-shadow: none;
}

.gbzvs-product-widget-wrap .gbzvs-product-widget__hero-price span,
.gbzvs-product-widget-wrap .gbzvs-product-widget__summary-card span {
  color: var(--gbzvs-pdp-muted);
  font-size: 12px;
}

.gbzvs-product-widget-wrap .gbzvs-product-widget__summary-points span {
  border: 1px solid var(--gbzvs-pdp-hairline-color);
  border-radius: var(--gbzvs-pdp-radius);
  background: var(--gbzvs-pdp-white);
  color: var(--gbzvs-pdp-ink);
  font-size: 12px;
}

.gbzvs-product-widget-wrap .gbzvs-product-widget__subdate {
  border-radius: var(--gbzvs-pdp-radius);
  background: var(--gbzvs-pdp-accent);
  color: var(--gbzvs-pdp-accent-ink);
  font-size: 12px;
}

/* G. GBZ PRIME panel: black band, lime chip, hairline perk panels. */
.gbzvs-product-widget-wrap .gbzvs-vip-highlight {
  border: 1px solid var(--gbzvs-pdp-black);
  border-radius: var(--gbzvs-pdp-radius);
  background: var(--gbzvs-pdp-black);
  color: var(--gbzvs-pdp-white);
}

.gbzvs-product-widget-wrap .gbzvs-vip-highlight__head strong {
  color: var(--gbzvs-pdp-white);
}

.gbzvs-product-widget-wrap .gbzvs-vip-highlight p {
  color: var(--gbzvs-pdp-on-dark-muted);
}

.gbzvs-product-widget-wrap .gbzvs-product-widget__prime-perks span {
  border: 1px solid var(--gbzvs-pdp-hairline-color);
  border-left: 3px solid var(--gbzvs-pdp-accent);
  border-radius: var(--gbzvs-pdp-radius);
  background: var(--gbzvs-pdp-white);
  color: var(--gbzvs-pdp-ink);
}

.gbzvs-product-widget-wrap .gbzvs-product-widget__microcopy {
  border-top: 1px solid var(--gbzvs-pdp-hairline-color);
}

/* H. Prime gate on the product page: black band, lime chip, pill CTA in the accent. */
body .gbzvs-product-exclusive-wrap .gbzvs-prime-exclusive-card {
  border: 1px solid var(--gbzvs-pdp-black);
  border-radius: var(--gbzvs-pdp-radius);
  background: var(--gbzvs-pdp-black);
  color: var(--gbzvs-pdp-white);
  box-shadow: none;
}

.gbzvs-product-exclusive-wrap .gbzvs-prime-exclusive-card__badge {
  border-radius: var(--gbzvs-pdp-radius);
  background: var(--gbzvs-pdp-accent);
  color: var(--gbzvs-pdp-accent-ink);
  font-size: 12px;
  font-weight: 700;
}

.gbzvs-product-exclusive-wrap .gbzvs-prime-exclusive-card__title {
  color: var(--gbzvs-pdp-white);
  font-family: var(--gbzvs-pdp-display);
  font-weight: 700;
  line-height: 1.15;
  text-transform: uppercase;
}

.gbzvs-product-exclusive-wrap .gbzvs-prime-exclusive-card__copy {
  color: var(--gbzvs-pdp-on-dark-muted);
}

.gbzvs-product-exclusive-wrap .gbzvs-prime-exclusive-card__actions .btn {
  align-items: center;
  display: inline-flex;
  justify-content: center;
  min-height: 44px;
  padding: 12px 22px;
  border: 1px solid var(--gbzvs-pdp-accent);
  border-radius: var(--gbzvs-pdp-pill);
  background: var(--gbzvs-pdp-accent);
  color: var(--gbzvs-pdp-accent-ink);
  font-weight: 700;
  text-decoration: none;
}

.gbzvs-product-exclusive-wrap .gbzvs-prime-exclusive-card__actions .btn:hover,
.gbzvs-product-exclusive-wrap .gbzvs-prime-exclusive-card__actions .btn:focus,
.gbzvs-product-exclusive-wrap .gbzvs-prime-exclusive-card__actions .btn:active {
  border-color: var(--gbzvs-pdp-white);
  background: var(--gbzvs-pdp-white);
  color: var(--gbzvs-pdp-black);
}

.gbzvs-product-exclusive-wrap .gbzvs-prime-exclusive-card__actions .btn:focus-visible {
  /* The band is black, so the focus ring has to outrank the theme's black ring on #product. */
  outline: 2px solid var(--gbzvs-pdp-white) !important;
  outline-offset: 2px !important;
}

.gbzvs-product-exclusive-wrap .gbzvs-prime-exclusive-card.is-eligible {
  border-color: var(--gbzvs-pdp-hairline-color);
  background: var(--gbzvs-pdp-white);
  color: var(--gbzvs-pdp-ink);
}

.gbzvs-product-exclusive-wrap .gbzvs-prime-exclusive-card.is-eligible .gbzvs-prime-exclusive-card__title {
  color: var(--gbzvs-pdp-black);
}

.gbzvs-product-exclusive-wrap .gbzvs-prime-exclusive-card.is-eligible .gbzvs-prime-exclusive-card__copy {
  color: var(--gbzvs-pdp-muted);
}

/* I. Product-page add-to-cart accent driven by the widget (subscription mode): black pill,
 *    lime on hover/focus with black ink. Behaviour, label swaps and states are untouched. */
body :is(#add-to-cart-or-refresh, .js-product-add-to-cart) :is(.add-to-cart.gbzvs-add-to-cart--subscription,
  .add-to-cart.gbzvs-add-to-cart--subscription:active,
  .add-to-cart.gbzvs-add-to-cart--subscription.disabled,
  .add-to-cart.gbzvs-add-to-cart--subscription[disabled]) {
  border-color: var(--gbz-black, #000000) !important;
  background: var(--gbz-black, #000000) !important;
  background-image: none !important;
  border-radius: var(--gbz-radius-pill, 999px);
  color: var(--gbz-white, #ffffff) !important;
  box-shadow: none;
  -webkit-text-fill-color: var(--gbz-white, #ffffff) !important;
}

body :is(#add-to-cart-or-refresh, .js-product-add-to-cart) :is(.add-to-cart.gbzvs-add-to-cart--subscription:hover,
  .add-to-cart.gbzvs-add-to-cart--subscription:focus) {
  border-color: var(--gbz-accent, #d4fa0a) !important;
  background: var(--gbz-accent, #d4fa0a) !important;
  background-image: none !important;
  color: var(--gbz-accent-ink, #000000) !important;
  box-shadow: none !important;
  -webkit-text-fill-color: var(--gbz-accent-ink, #000000) !important;
}

body :is(#add-to-cart-or-refresh, .js-product-add-to-cart) :is(.add-to-cart.gbzvs-add-to-cart--subscription,
  .add-to-cart.gbzvs-add-to-cart--subscription.disabled,
  .add-to-cart.gbzvs-add-to-cart--subscription[disabled]) :is(.bag-icon, .js-gbzvs-add-to-cart-label) {
  color: var(--gbz-white, #ffffff) !important;
  -webkit-text-fill-color: var(--gbz-white, #ffffff) !important;
}

body :is(#add-to-cart-or-refresh, .js-product-add-to-cart) :is(.add-to-cart.gbzvs-add-to-cart--subscription:hover,
  .add-to-cart.gbzvs-add-to-cart--subscription:focus) :is(.bag-icon, .js-gbzvs-add-to-cart-label) {
  color: var(--gbz-accent-ink, #000000) !important;
  -webkit-text-fill-color: var(--gbz-accent-ink, #000000) !important;
}

/* Locked by the Prime gate or by an unavailable subscription: the module's grey "disabled"
 * palette keeps the block visible instead of reading as an active black CTA. */
body :is(#add-to-cart-or-refresh, .js-product-add-to-cart) .add-to-cart.gbzvs-add-to-cart--subscription.gbzvs-add-to-cart--locked {
  border-color: var(--gbz-hairline-color-strong, #d0d0d0) !important;
  background: var(--gbz-surface-alt, #f6f6f6) !important;
  color: var(--gbz-muted, #5f5f5f) !important;
  -webkit-text-fill-color: var(--gbz-muted, #5f5f5f) !important;
}

body :is(#add-to-cart-or-refresh, .js-product-add-to-cart) .add-to-cart.gbzvs-add-to-cart--subscription.gbzvs-add-to-cart--locked :is(.bag-icon, .js-gbzvs-add-to-cart-label) {
  color: var(--gbz-muted, #5f5f5f) !important;
  -webkit-text-fill-color: var(--gbz-muted, #5f5f5f) !important;
}

/* J. Responsive: the tab strip stacks under 768 px, so the separators follow the stacking axis. */
@media (max-width: 767px) {
  .gbzvs-product-widget-wrap .gbzvs-product-tab + .gbzvs-product-tab {
    border-left: 0;
    border-top: 1px solid var(--gbzvs-pdp-hairline-color);
  }
}

/* ==============================================================================================
 * PART 2 - the module's cart, checkout and portal blocks (charter level B, section 2.1).
 *
 * Findings this part answers (qa-subscription-residue-20260924\REPORT.md, F3): the cart summary,
 * the checkout payment-option block and every portal surface were still styled only by
 * modules\gbzverifonesubscriptions\views\css\front.css - amber 1 px #e6cf93 hairlines, 12 to 28 px
 * corner radii, drop shadows, warm gradients and no display face. This part consumes the shared
 * tokens and applies the same decisions part 1 already encodes for the product page: black / lime
 * / white, 1 px hairlines, 2 px panel radius, no shadow, "GBZ Anton" headings, 44 px interactive
 * floors.
 *
 * Rules for this part:
 *  1. Presentation only. No display, visibility, order, markup or behaviour change: the consent
 *     text, the error and warning blocks, the forms, the hidden inputs, the payment logos and the
 *     hosted-payment iframes keep their place, their text and their bytes. Nothing here sets
 *     `display: none`, `visibility` or `content: none` on a content node (the only neutralised
 *     box is the empty decorative circle painted by the module's own `::before` on the Prime
 *     dashboard card).
 *  2. Semantic feedback stays out of scope, exactly like the checkout layer: `.alert-danger`,
 *     `.alert-warning`, `.alert-success`, `.gbzvs-payment-form__error`, the
 *     `.gbzvs-subscription-card--tone-*` status tints, the `.gbzvs-status--*` pills, the
 *     `.gbzvs-help-box--warning` notice and every `.gbzvs-recovery-alert--*` variant keep the
 *     values the module gives them; only their geometry (radius, hairline, shadow) is normalised
 *     where the surrounding panel is neutral.
 *  3. Every selector carries the `body` prefix and mirrors the module's own selector, so the rule
 *     wins against `front.css` however PrestaShop's CCC reducer orders the bundled sheet. No
 *     other family can match: each selector names a `.gbzvs-*` class the module renders.
 *  4. Tokens are consumed as `var(--gbz-*)` and never redeclared. The only custom properties
 *     written here are the local `--gbzvs-blk-*` aliases below, which are private to this sheet.
 *  5. No price, date, cadence, product name, translation or status word is written here.
 * ============================================================================================== */

/* K. Local aliases for the non-PDP blocks: the shared tokens, with the same fallbacks part 1
 *    uses. Declared once on `body`, consumed by every rule below. */
body {
  --gbzvs-blk-accent: var(--gbz-accent, #d4fa0a);
  --gbzvs-blk-accent-ink: var(--gbz-accent-ink, #000000);
  --gbzvs-blk-ink: var(--gbz-ink, #101010);
  --gbzvs-blk-black: var(--gbz-black, #000000);
  --gbzvs-blk-white: var(--gbz-white, #ffffff);
  --gbzvs-blk-surface-alt: var(--gbz-surface-alt, #f6f6f6);
  --gbzvs-blk-muted: var(--gbz-muted, #5f5f5f);
  --gbzvs-blk-on-dark-muted: var(--gbz-on-dark-muted, rgba(255, 255, 255, 0.78));
  --gbzvs-blk-hairline: var(--gbz-hairline, 1px solid #e6e6e6);
  --gbzvs-blk-hairline-strong: var(--gbz-hairline-strong, 1px solid #d0d0d0);
  --gbzvs-blk-radius: var(--gbz-radius-sm, 2px);
  --gbzvs-blk-pill: var(--gbz-radius-pill, 999px);
  --gbzvs-blk-shadow: var(--gbz-shadow, none);
  --gbzvs-blk-space-2: var(--gbz-space-2, 8px);
  --gbzvs-blk-space-3: var(--gbz-space-3, 12px);
  --gbzvs-blk-transition: var(--gbz-transition, color 0.15s ease, background-color 0.15s ease, border-color 0.15s ease);
  --gbzvs-blk-display: "GBZ Anton", "Bahnschrift SemiBold Condensed", "Bahnschrift Condensed",
    "Bahnschrift", "Arial Narrow", "Helvetica Neue", Karla, sans-serif;
}

/* L. Cart page: the subscription summary block and the per-line note.
 *    Measured before: 14 px amber panels with a warm gradient and a drop shadow
 *    (front.css:15-26 and :136-142). */

body .gbzvs-cart-summary__box {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
  box-shadow: var(--gbzvs-blk-shadow);
}

body .gbzvs-cart-summary__badge {
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-accent);
  color: var(--gbzvs-blk-accent-ink);
}

body .gbzvs-cart-summary__header h4 {
  color: var(--gbzvs-blk-black);
  font-family: var(--gbzvs-blk-display);
  letter-spacing: 0;
  line-height: 1.15;
  text-transform: uppercase;
}

body .gbzvs-cart-summary__header p {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-cart-summary__total-card {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
  box-shadow: var(--gbzvs-blk-shadow);
}

body .gbzvs-cart-summary__total-card--renewal,
body .gbzvs-checkout-summary-tile.is-dominant,
body .gbzvs-checkout-card__metric.is-dominant {
  background: var(--gbzvs-blk-surface-alt);
  box-shadow: var(--gbzvs-blk-shadow);
}

body .gbzvs-cart-summary__total-card span {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-cart-summary__total-card strong {
  color: var(--gbzvs-blk-black);
  font-family: var(--gbzvs-blk-display);
}

body .gbzvs-cart-summary__total-card small {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-cart-summary__section-title,
body .gbzvs-checkout-card__copy strong,
body .gbzvs-checkout-panel-card strong {
  color: var(--gbzvs-blk-black);
  display: block;
  font-family: var(--gbzvs-blk-display);
  letter-spacing: 0;
  line-height: 1.2;
  text-transform: uppercase;
}

body .gbzvs-cart-summary__section-title::after,
body .gbzvs-checkout-card__copy strong::after,
body .gbzvs-checkout-panel-card strong::after,
body .gbzvs-section-heading h2::after,
body .gbzvs-page-hero h1::after,
body .gbzvs-membership-hero h1::after,
body .gbzvs-recovery-hero h1::after,
body .gbzvs-payment-redirect__header h1::after {
  background-color: var(--gbzvs-blk-accent);
  content: "";
  display: block;
  height: 3px;
  margin-top: var(--gbzvs-blk-space-2);
  width: 44px;
}

body .gbzvs-cart-summary__item {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
}

body .gbzvs-cart-summary__item-name {
  color: var(--gbzvs-blk-ink);
}

body .gbzvs-cart-summary__item-meta {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-cart-summary__item-price {
  color: var(--gbzvs-blk-black);
  font-family: var(--gbzvs-blk-display);
}

body .gbzvs-cart-line-note {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
}

body .gbzvs-cart-line-note__badge {
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-accent);
  color: var(--gbzvs-blk-accent-ink);
}

body .gbzvs-cart-line-note__content strong {
  color: var(--gbzvs-blk-black);
}

body .gbzvs-cart-line-note__content span {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-cart-line-note__content em {
  color: var(--gbzvs-blk-ink);
}

/* L2. The PRIME band inside the cart summary: the one black band of the block, lime chip and
 *     lime markers on dark, exactly the treatment the product page gives the same content. */

body .gbzvs-vip-banner {
  border: var(--gbzvs-blk-hairline-strong);
  border-color: var(--gbzvs-blk-black);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-black);
  box-shadow: var(--gbzvs-blk-shadow);
}

body .gbzvs-vip-banner__badge {
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-accent);
  color: var(--gbzvs-blk-accent-ink);
}

body .gbzvs-vip-banner__content strong {
  color: var(--gbzvs-blk-white);
  font-family: var(--gbzvs-blk-display);
  letter-spacing: 0;
  text-transform: uppercase;
}

body .gbzvs-vip-banner__content p,
body .gbzvs-vip-banner__content small {
  color: var(--gbzvs-blk-on-dark-muted);
}

body .gbzvs-vip-banner__content .gbzvs-perk-list li {
  color: var(--gbzvs-blk-on-dark-muted);
}

body .gbzvs-vip-banner__content .gbzvs-perk-list li::before {
  background: var(--gbzvs-blk-accent);
  border-radius: var(--gbzvs-blk-radius);
}

body .gbzvs-vip-banner :is(a, button):focus-visible {
  outline-color: var(--gbzvs-blk-accent);
}

/* L3. Commitment highlight and the three term cards. */

body .gbzvs-commitment-highlight {
  border: var(--gbzvs-blk-hairline-strong);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
  box-shadow: var(--gbzvs-blk-shadow);
}

body .gbzvs-commitment-highlight__eyebrow {
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-accent);
  color: var(--gbzvs-blk-accent-ink);
}

body .gbzvs-commitment-highlight__title {
  color: var(--gbzvs-blk-black);
  font-family: var(--gbzvs-blk-display);
  letter-spacing: 0;
  text-transform: uppercase;
}

body .gbzvs-commitment-highlight__date {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-surface-alt);
}

body .gbzvs-commitment-highlight__date span {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-commitment-highlight__date strong {
  color: var(--gbzvs-blk-black);
  font-family: var(--gbzvs-blk-display);
}

body .gbzvs-commitment-highlight__copy {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-term-card {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
}

body .gbzvs-term-card__label,
body .gbzvs-term-card small {
  color: var(--gbzvs-blk-muted);
}

/* L4. List markers shared by the cart, the checkout and the portal blocks: black ink squares on
 *     the light surfaces (17.48:1 against white), lime only where the marker sits on the black
 *     PRIME band. Kept decorative: the text of each line carries the meaning. */

body .gbzvs-perk-list li,
body .gbzvs-page-list li {
  color: var(--gbzvs-blk-ink);
}

body .gbzvs-perk-list li::before,
body .gbzvs-page-list li::before {
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-black);
}

body .gbzvs-guide-premium .gbzvs-page-list li::marker {
  color: var(--gbzvs-blk-black);
}

/* M. Checkout: the subscription payment-option block inside body#checkout.
 *    The payment method list, its logos, the order button and the conditions checkbox are not
 *    touched; only the subscription block's own surfaces, chips, tabs and controls move. */

body .gbzvs-checkout-info,
body .gbzvs-checkout-card {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
  box-shadow: var(--gbzvs-blk-shadow);
}

body .gbzvs-checkout-info__badge {
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-accent);
  color: var(--gbzvs-blk-accent-ink);
}

body .gbzvs-checkout-card__copy p,
body .gbzvs-checkout-card__muted,
body .gbzvs-checkout-panel-card p,
body .gbzvs-checkout-panel-card li {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-checkout-card__metric,
body .gbzvs-checkout-summary-tile,
body .gbzvs-checkout-panel-card {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
  box-shadow: var(--gbzvs-blk-shadow);
}

body .gbzvs-checkout-card__metric span,
body .gbzvs-checkout-summary-tile span {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-checkout-card__metric strong,
body .gbzvs-checkout-summary-tile strong {
  color: var(--gbzvs-blk-black);
  font-family: var(--gbzvs-blk-display);
}

body .gbzvs-checkout-card__metric small,
body .gbzvs-checkout-summary-tile small {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-checkout-tab {
  align-items: center;
  border: var(--gbzvs-blk-hairline-strong);
  border-radius: var(--gbzvs-blk-pill);
  background: var(--gbzvs-blk-white);
  color: var(--gbzvs-blk-ink);
  display: inline-flex;
  justify-content: center;
  min-height: 44px;
  min-width: 44px;
  transition: var(--gbzvs-blk-transition);
}

body .gbzvs-checkout-tab.is-active {
  border-color: var(--gbzvs-blk-black);
  background: var(--gbzvs-blk-black);
  color: var(--gbzvs-blk-white);
  box-shadow: var(--gbzvs-blk-shadow);
}

body .gbzvs-checkout-tab:hover,
body .gbzvs-checkout-tab:focus {
  border-color: var(--gbzvs-blk-accent);
  background: var(--gbzvs-blk-accent);
  color: var(--gbzvs-blk-accent-ink);
}

body .gbzvs-checkout-tab.is-active:hover,
body .gbzvs-checkout-tab.is-active:focus,
body .gbzvs-checkout-tab.is-active:focus-visible {
  border-color: var(--gbzvs-blk-accent);
  background: var(--gbzvs-blk-accent);
  color: var(--gbzvs-blk-accent-ink);
  outline-color: var(--gbzvs-blk-black);
}

body .gbzvs-checkout-summary-pills span {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
  color: var(--gbzvs-blk-ink);
}

body .gbzvs-checkout-card__consent {
  border: var(--gbzvs-blk-hairline-strong);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
}

/* The consent row is a real control: its floor grows, its text, checkbox and state colours do
 * not change, and `.gbzvs-checkout-card.is-invalid` keeps the module's own invalid tint. */
body .gbzvs-checkout-card__consent-label {
  color: var(--gbzvs-blk-ink);
  min-height: 44px;
}

body .gbzvs-inline-checkout__panel {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
  box-shadow: var(--gbzvs-blk-shadow);
}

body .gbzvs-inline-checkout__title {
  color: var(--gbzvs-blk-black);
  font-family: var(--gbzvs-blk-display);
  letter-spacing: 0;
  text-transform: uppercase;
}

body .gbzvs-inline-checkout__copy,
body .gbzvs-inline-checkout__hint {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-inline-checkout__locked {
  border: var(--gbzvs-blk-hairline-strong);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-surface-alt);
  color: var(--gbzvs-blk-ink);
}

body .gbzvs-inline-checkout__frame-shell {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-surface-alt);
}

body .gbzvs-inline-checkout__loader {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-inline-checkout__loader-spinner {
  border-color: var(--gbzvs-blk-hairline-strong);
  border-radius: var(--gbzvs-blk-pill);
  border-top-color: var(--gbzvs-blk-black);
}

body .gbzvs-inline-checkout__window-toggle {
  align-items: center;
  border: var(--gbzvs-blk-hairline-strong);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
  color: var(--gbzvs-blk-ink);
  display: inline-flex;
  justify-content: center;
  min-height: 44px;
  min-width: 44px;
}

body .gbzvs-inline-checkout__window-toggle:hover,
body .gbzvs-inline-checkout__window-toggle:focus {
  border-color: var(--gbzvs-blk-black);
  color: var(--gbzvs-blk-black);
}

body .gbzvs-inline-checkout__window-toggle:focus-visible {
  outline: 2px solid var(--gbzvs-blk-black);
  outline-offset: 2px;
}

/* N. Portal: the subscriptions dashboard (module-gbzverifonesubscriptions-subscriptions). */

body .gbzvs-membership-hero {
  border: var(--gbzvs-blk-hairline-strong);
  border-color: var(--gbzvs-blk-black);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-black);
  box-shadow: var(--gbzvs-blk-shadow);
}

body .gbzvs-membership-hero h1 {
  color: var(--gbzvs-blk-white);
  font-family: var(--gbzvs-blk-display);
  font-size: clamp(30px, 3.6vw, 56px);
  letter-spacing: 0;
  line-height: 1.02;
  text-transform: uppercase;
}

body .gbzvs-membership-hero p {
  color: var(--gbzvs-blk-on-dark-muted);
}

body .gbzvs-membership-hero :is(a, button):focus-visible {
  outline-color: var(--gbzvs-blk-accent);
}

body .gbzvs-page-hero__badge {
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-accent);
  color: var(--gbzvs-blk-accent-ink);
}

body .gbzvs-prime-dashboard-card,
body .gbzvs-plan-card,
body .gbzvs-empty-premium,
body .gbzvs-guide-premium {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
  box-shadow: var(--gbzvs-blk-shadow);
}

/* The module paints an empty 340 px circle behind the Prime card as decoration; the charter
 * separates by hairline and band, so the box is neutralised (no content, no layout change). */
body .gbzvs-prime-dashboard-card:before,
body .gbzvs-prime-dashboard-card--subscription:before {
  content: none;
}

body .gbzvs-prime-dashboard-card__crest,
body .gbzvs-membership-fact__icon,
body .gbzvs-benefit-grid i {
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-accent);
  color: var(--gbzvs-blk-accent-ink);
  box-shadow: var(--gbzvs-blk-shadow);
}

body .gbzvs-prime-dashboard-card h2,
body .gbzvs-section-heading h2 {
  color: var(--gbzvs-blk-black);
  font-family: var(--gbzvs-blk-display);
  letter-spacing: 0;
  text-transform: uppercase;
}

body .gbzvs-prime-dashboard-card p,
body .gbzvs-section-heading p,
body .gbzvs-prime-source-note span {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-membership-fact {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
  box-shadow: var(--gbzvs-blk-shadow);
}

body .gbzvs-membership-fact > span:not(.gbzvs-membership-fact__icon) {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-membership-fact strong,
body .gbzvs-prime-source-note strong {
  color: var(--gbzvs-blk-black);
}

body .gbzvs-membership-fact strong {
  font-family: var(--gbzvs-blk-display);
}

body .gbzvs-prime-source-note {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-surface-alt);
}

body .gbzvs-prime-subscription-spotlight {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
  box-shadow: var(--gbzvs-blk-shadow);
}

body .gbzvs-prime-subscription-spotlight__media {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-surface-alt);
  color: var(--gbzvs-blk-ink);
}

body .gbzvs-prime-subscription-spotlight__body strong,
body .gbzvs-prime-subscription-spotlight__facts b {
  color: var(--gbzvs-blk-black);
  font-family: var(--gbzvs-blk-display);
  letter-spacing: 0;
}

body .gbzvs-prime-subscription-spotlight__body small {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-prime-subscription-spotlight__facts span {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
}

body .gbzvs-prime-subscription-spotlight__facts em {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-benefit-strip {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
}

body .gbzvs-benefit-strip h3 {
  color: var(--gbzvs-blk-black);
  font-family: var(--gbzvs-blk-display);
  letter-spacing: 0;
  text-transform: uppercase;
}

body .gbzvs-benefit-grid span {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
  color: var(--gbzvs-blk-ink);
}

body .gbzvs-account-stat {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
  box-shadow: var(--gbzvs-blk-shadow);
}

body .gbzvs-account-stats--premium .gbzvs-account-stat {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
  box-shadow: var(--gbzvs-blk-shadow);
}

body .gbzvs-account-stat__label {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-account-stat__value {
  color: var(--gbzvs-blk-black);
  font-family: var(--gbzvs-blk-display);
  letter-spacing: 0;
}

body .gbzvs-plan-card__media {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-surface-alt);
}

body .gbzvs-plan-card__media span,
body .gbzvs-plan-card__facts em {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-plan-card__top h3,
body .gbzvs-plan-card__facts strong,
body .gbzvs-empty-premium h3,
body .gbzvs-guide-premium h3 {
  color: var(--gbzvs-blk-black);
  font-family: var(--gbzvs-blk-display);
  letter-spacing: 0;
}

body .gbzvs-plan-card__top p {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-plan-card__facts span {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
}

/* N2. Plan-card geometry: the card must stay readable at every container width.
 *
 *     Two module rules decide the shape and both are width-blind:
 *       - `.gbzvs-subscription-list--premium` keeps the listing's
 *         `repeat(auto-fit, minmax(300px, 1fr))`, so a ~900 px column renders TWO cards of ~442 px;
 *       - `.gbzvs-plan-card__facts` is `repeat(3, minmax(0, 1fr))`, so the three meta tiles inside
 *         such a card fall to ~80 px each.
 *     Measured on the first delivery at a 1425 px host: the card body was 260,5 px wide and each
 *     meta tile 80,16 x 203,2 px, with the labels wrapping letter by letter. The card's media
 *     column also stretched to the 969,63 px row height.
 *
 *     The layout below is intrinsic - it reacts to the space the block actually has, not to the
 *     viewport, so it holds on the real dashboard column, in the injected fixtures and in any
 *     future container:
 *       1. the listing asks for a 560 px card and falls back to `min(560px, 100%)`, so any column
 *          narrower than ~926 px renders ONE card per row and a wider one renders two;
 *       2. the three meta tiles are `auto-fit` with a 205 px floor, so they render three, two or
 *          one per row depending on the card - never 80 px. The floor is set by the longest label
 *          word of the three languages, measured in the fixtures: DE "Wiederkehrender" is 150 px
 *          wide, so a tile must expose ~180 px of text box, which 205 px does with margin;
 *       3. `overflow-wrap` is `break-word`, not the module's `anywhere`: a word is only broken when
 *          it cannot fit on a line of its own, which is what keeps "MONTANT RÉCURRENT" and
 *          "PROCHAIN RENOUVELLEMENT" whole;
 *       4. the media column stops stretching to the row height and keeps the module's own slot.
 *     The earlier overflow guard is kept: the content track is pinned and the actions row may wrap.
 *     Presentation only: nothing is clipped, hidden or ellipsised, and no value is cut. */
body .gbzvs-subscription-list--premium {
  grid-template-columns: repeat(auto-fit, minmax(min(560px, 100%), 1fr));
}

body .gbzvs-plan-card__facts {
  grid-template-columns: repeat(auto-fit, minmax(min(205px, 100%), 1fr));
}

/* The same floor is applied to the two other label grids of the dashboard: the module renders
 * `.gbzvs-membership-facts` as `repeat(4, minmax(0, 1fr))` and `.gbzvs-benefit-grid` as
 * `repeat(5, minmax(0, 1fr))`, which at a ~630 px column leaves ~150 px and ~110 px per tile - the
 * German tiles then broke inside words ("Freig/esch/altet", "Kostenlo/ser"). Both grids now place
 * as many 205 px tiles as the column allows and wrap the rest onto the next row. */
body .gbzvs-membership-facts,
body .gbzvs-benefit-grid {
  grid-template-columns: repeat(auto-fit, minmax(min(205px, 100%), 1fr));
}

body .gbzvs-plan-card__media {
  align-self: start;
  max-width: 100%;
}

body .gbzvs-plan-card__content {
  grid-template-columns: minmax(0, 1fr);
}

body .gbzvs-plan-card__top,
body .gbzvs-plan-card__top > *,
body .gbzvs-plan-card__badges,
body .gbzvs-plan-card__facts,
body .gbzvs-plan-card__facts span,
body .gbzvs-plan-card__actions,
body .gbzvs-plan-card__actions form {
  max-width: 100%;
  min-width: 0;
}

/* The actions row is `nowrap` in the module, so a control that does not fit is pushed past the
 * card edge instead of wrapping (measured: the CTA's right edge landed 30 px beyond the card at
 * 390 px). Allowing the row to wrap only changes the layout of a row that would otherwise
 * overflow; no width, order or visibility is set here. */
body .gbzvs-plan-card__actions {
  flex-wrap: wrap;
}

body .gbzvs-plan-card__actions .btn {
  max-width: 100%;
}

body .gbzvs-plan-card__top h3,
body .gbzvs-plan-card__top p,
body .gbzvs-plan-card__facts strong,
body .gbzvs-plan-card__facts em {
  overflow-wrap: break-word;
}

/* O. Portal: the subscription detail page (module-gbzverifonesubscriptions-subscription). */

body .gbzvs-page-hero {
  border: var(--gbzvs-blk-hairline-strong);
  border-color: var(--gbzvs-blk-black);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-black);
  box-shadow: var(--gbzvs-blk-shadow);
}

body .gbzvs-page-hero h1 {
  color: var(--gbzvs-blk-white);
  font-family: var(--gbzvs-blk-display);
  font-size: clamp(30px, 3.6vw, 56px);
  letter-spacing: 0;
  line-height: 1.02;
  text-transform: uppercase;
}

body .gbzvs-page-hero p {
  color: var(--gbzvs-blk-on-dark-muted);
}

body .gbzvs-page-hero :is(a, button):focus-visible {
  outline-color: var(--gbzvs-blk-accent);
}

body .gbzvs-subscription-card {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
  box-shadow: var(--gbzvs-blk-shadow);
}

body .gbzvs-subscription-card h3 {
  color: var(--gbzvs-blk-black);
  font-family: var(--gbzvs-blk-display);
  letter-spacing: 0;
  text-transform: uppercase;
}

body .gbzvs-subscription-card p {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-subscription-card .table-responsive {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
}

body .gbzvs-subscription-card .table thead th {
  border-bottom: var(--gbzvs-blk-hairline-strong);
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-subscription-card .table tbody td {
  border-top: var(--gbzvs-blk-hairline);
  color: var(--gbzvs-blk-ink);
}

body .gbzvs-subscription-card--vip-overview {
  background: var(--gbzvs-blk-white);
}

body .gbzvs-subscription-page .gbzvs-page-hero--detail,
body .gbzvs-subscription-page .gbzvs-subscription-card {
  border-radius: var(--gbzvs-blk-radius);
  box-shadow: var(--gbzvs-blk-shadow);
}

/* The fact panels only exist inside `.gbzvs-subscription-page` (front\subscription.tpl:6 opens
 * the section, :68 opens the first fact), so one page-scoped rule both covers them and outranks
 * the module's own `.gbzvs-subscription-page .gbzvs-fact` (front.css) without a second rule. */
body .gbzvs-subscription-page .gbzvs-fact {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
}

body .gbzvs-fact span {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-fact strong {
  color: var(--gbzvs-blk-black);
  font-family: var(--gbzvs-blk-display);
}

body .gbzvs-fact small {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-help {
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-accent);
  color: var(--gbzvs-blk-accent-ink);
}

body .gbzvs-help-box {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
  color: var(--gbzvs-blk-ink);
}

body .gbzvs-help-box--soft {
  border-color: var(--gbz-hairline-color, #e6e6e6);
  background: var(--gbzvs-blk-surface-alt);
  color: var(--gbzvs-blk-muted);
}

/* The `--warning` notice is semantic feedback: the generic panel rule above would win on
 * specificity, so its own warm tone is restated here with the values the module ships
 * (front.css, `.gbzvs-help-box--warning`). Only the corner radius follows the charter. */
body .gbzvs-help-box--warning {
  border-color: #f2c66d;
  background: #fff5db;
  color: #7a5312;
}

body .gbzvs-inline-note {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-inline-form .form-control {
  border: var(--gbzvs-blk-hairline-strong);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
  box-shadow: var(--gbzvs-blk-shadow);
}

body .gbzvs-inline-form .form-control:focus {
  border-color: var(--gbzvs-blk-black);
  box-shadow: var(--gbzvs-blk-shadow);
  outline: 2px solid var(--gbzvs-blk-black);
  outline-offset: 2px;
}

/* P. Portal: the hosted payment redirect page (front\redirect.tpl). */

body .gbzvs-payment-redirect,
body .gbzvs-recovery-shell {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
  box-shadow: var(--gbzvs-blk-shadow);
}

body .gbzvs-payment-redirect__badge,
body .gbzvs-payment-redirect__eyebrow {
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-accent);
  color: var(--gbzvs-blk-accent-ink);
}

body .gbzvs-payment-redirect__header h1 {
  color: var(--gbzvs-blk-black);
  font-family: var(--gbzvs-blk-display);
  letter-spacing: 0;
  text-transform: uppercase;
}

body .gbzvs-payment-redirect__header p,
body .gbzvs-payment-redirect__amount-card p,
body .gbzvs-payment-redirect__status-copy p {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-payment-redirect__amount {
  color: var(--gbzvs-blk-black);
  font-family: var(--gbzvs-blk-display);
  letter-spacing: 0;
}

body .gbzvs-payment-redirect__amount-card,
body .gbzvs-payment-redirect__facts {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
  box-shadow: var(--gbzvs-blk-shadow);
}

body .gbzvs-payment-redirect__fact dt {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-payment-redirect__fact dd {
  color: var(--gbzvs-blk-ink);
}

body .gbzvs-payment-redirect__notice {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-surface-alt);
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-payment-redirect__status {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
}

body .gbzvs-payment-redirect__status-copy strong {
  color: var(--gbzvs-blk-black);
  font-family: var(--gbzvs-blk-display);
  letter-spacing: 0;
}

body .gbzvs-payment-redirect__spinner {
  border-color: var(--gbz-hairline-color-strong, #d0d0d0);
  border-radius: var(--gbzvs-blk-pill);
  border-top-color: var(--gbzvs-blk-black);
}

body .gbzvs-payment-redirect__frame-wrap {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-surface-alt);
}

body .gbzvs-payment-redirect__hint {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-payment-redirect__actions .btn {
  align-items: center;
  border: var(--gbzvs-blk-hairline-strong);
  border-radius: var(--gbzvs-blk-pill);
  background: var(--gbzvs-blk-white);
  color: var(--gbzvs-blk-ink);
  display: inline-flex;
  justify-content: center;
  min-height: 44px;
  transition: var(--gbzvs-blk-transition);
}

body .gbzvs-payment-redirect__actions .btn-primary {
  border-color: var(--gbzvs-blk-black);
  background: var(--gbzvs-blk-black);
  color: var(--gbzvs-blk-white);
}

body .gbzvs-payment-redirect__actions .btn:hover,
body .gbzvs-payment-redirect__actions .btn:focus {
  border-color: var(--gbzvs-blk-accent);
  background: var(--gbzvs-blk-accent);
  color: var(--gbzvs-blk-accent-ink);
}

body .gbzvs-payment-redirect__actions .btn-primary:hover,
body .gbzvs-payment-redirect__actions .btn-primary:focus {
  border-color: var(--gbzvs-blk-accent);
  background: var(--gbzvs-blk-accent);
  color: var(--gbzvs-blk-accent-ink);
}

/* Q. Portal: payment recovery and card replacement (front\recovery.tpl, front\card_replacement.tpl).
 *    The alert variants are semantic feedback and stay exactly as the module renders them. */

body .gbzvs-recovery-hero h1 {
  color: var(--gbzvs-blk-black);
  font-family: var(--gbzvs-blk-display);
  letter-spacing: 0;
  text-transform: uppercase;
}

body .gbzvs-recovery-hero p {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-recovery-eyebrow {
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-accent);
  color: var(--gbzvs-blk-accent-ink);
}

body .gbzvs-recovery-card {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
  box-shadow: var(--gbzvs-blk-shadow);
}

body .gbzvs-recovery-card--action {
  background: var(--gbzvs-blk-white);
}

body .gbzvs-recovery-card h2 {
  color: var(--gbzvs-blk-black);
  font-family: var(--gbzvs-blk-display);
  letter-spacing: 0;
  text-transform: uppercase;
}

body .gbzvs-recovery-price {
  color: var(--gbzvs-blk-black);
  font-family: var(--gbzvs-blk-display);
  letter-spacing: 0;
}

body .gbzvs-recovery-card--action p,
body .gbzvs-recovery-trust p {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-recovery-summary dt,
body .gbzvs-recovery-kicker {
  color: var(--gbzvs-blk-muted);
}

body .gbzvs-recovery-summary dd {
  color: var(--gbzvs-blk-black);
  font-family: var(--gbzvs-blk-display);
}

body .gbzvs-recovery-status {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-surface-alt);
  color: var(--gbzvs-blk-ink);
}

body .gbzvs-recovery-steps li {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
  color: var(--gbzvs-blk-ink);
}

body .gbzvs-recovery-steps span {
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-accent);
  color: var(--gbzvs-blk-accent-ink);
}

body .gbzvs-recovery-steps strong {
  color: var(--gbzvs-blk-black);
}

body .gbzvs-recovery-trust div {
  border: var(--gbzvs-blk-hairline);
  border-radius: var(--gbzvs-blk-radius);
  background: var(--gbzvs-blk-white);
}

body .gbzvs-recovery-trust strong {
  color: var(--gbzvs-blk-black);
  font-family: var(--gbzvs-blk-display);
  letter-spacing: 0;
}

/* R. Primary calls to action in those blocks: black pill, white label, lime on hover and focus
 *    (charter 6.5). Secondary buttons keep the theme's own colours - only their touch floor and
 *    focus ring move - so a paused row and a primary action stay visually distinct. */

body .gbzvs-recovery-cta {
  align-items: center;
  border: 1px solid var(--gbzvs-blk-black);
  border-radius: var(--gbzvs-blk-pill);
  background: var(--gbzvs-blk-black);
  background-image: none;
  color: var(--gbzvs-blk-white);
  display: inline-flex;
  justify-content: center;
  min-height: 44px;
  transition: var(--gbzvs-blk-transition);
}

body .gbzvs-recovery-cta:hover,
body .gbzvs-recovery-cta:focus {
  border-color: var(--gbzvs-blk-accent);
  background: var(--gbzvs-blk-accent);
  background-image: none;
  color: var(--gbzvs-blk-accent-ink);
}

body .gbzvs-page-actions .btn,
body .gbzvs-plan-card__actions .btn,
body .gbzvs-empty-premium .btn,
body .gbzvs-prime-subscription-spotlight .btn,
body .gbzvs-subscription-card .btn {
  align-items: center;
  border-radius: var(--gbzvs-blk-pill);
  display: inline-flex;
  justify-content: center;
  min-height: 44px;
  transition: var(--gbzvs-blk-transition);
}

body .gbzvs-page-actions .btn-primary,
body .gbzvs-plan-card__actions .btn,
body .gbzvs-empty-premium .btn,
body .gbzvs-prime-subscription-spotlight .btn {
  border: 1px solid var(--gbzvs-blk-black);
  background: var(--gbzvs-blk-black);
  background-image: none;
  color: var(--gbzvs-blk-white) !important;
}

body .gbzvs-page-actions .btn-primary:hover,
body .gbzvs-page-actions .btn-primary:focus,
body .gbzvs-plan-card__actions .btn:hover,
body .gbzvs-plan-card__actions .btn:focus,
body .gbzvs-empty-premium .btn:hover,
body .gbzvs-empty-premium .btn:focus,
body .gbzvs-prime-subscription-spotlight .btn:hover,
body .gbzvs-prime-subscription-spotlight .btn:focus {
  border-color: var(--gbzvs-blk-accent);
  background: var(--gbzvs-blk-accent);
  background-image: none;
  color: var(--gbzvs-blk-accent-ink) !important;
}

body .gbzvs-cart-summary :is(a, button, input, select, textarea):focus-visible,
body .gbzvs-cart-line-note :is(a, button, input, select, textarea):focus-visible,
body .gbzvs-checkout-info :is(a, button, input, select, textarea):focus-visible,
body .gbzvs-checkout-card :is(a, button, input, select, textarea):focus-visible,
body .gbzvs-subscriptions-page :is(a, button, input, select, textarea):focus-visible,
body .gbzvs-subscription-page :is(a, button, input, select, textarea):focus-visible,
body .gbzvs-payment-redirect :is(a, button, input, select, textarea):focus-visible,
body .gbzvs-recovery-page :is(a, button, input, select, textarea):focus-visible {
  outline: 2px solid var(--gbzvs-blk-black);
  outline-offset: 2px;
}

body .gbzvs-recovery-page .gbzvs-recovery-cta:focus-visible,
body .gbzvs-subscriptions-page .gbzvs-plan-card__actions .btn:focus-visible {
  outline-color: var(--gbzvs-blk-accent);
}

/* S. Responsive: the module already stacks these blocks under its own breakpoints. Only the
 *    display scale and the tab strip follow the stacking, so no rule below changes a column
 *    count or an order. */
@media (max-width: 991px) {
  body .gbzvs-membership-hero h1,
  body .gbzvs-page-hero h1 {
    font-size: 34px;
  }
}

@media (max-width: 575px) {
  body .gbzvs-checkout-tab {
    min-height: 44px;
  }

  body .gbzvs-membership-hero h1,
  body .gbzvs-page-hero h1 {
    font-size: 30px;
    line-height: 1.05;
  }
}
