/*
  Delta Parts — consolidated single-product (PDP) stylesheet.

  OWNERSHIP: this file is enqueued by DeltaParts\Assets only on WooCommerce
  single-product pages (is_product()). It bundles the PDP sheets that previously
  had NO enqueue owner (they were meant to be hand-copied into the theme), plus
  the plugin's own showcase sheet:

    - wordpress_migration/bricks-pdp/css/delta-pdp-scoped.css  (shell/layout)
    - wordpress_migration/bricks-pdp/css/delta-woo-pdp.css     (Woo form + sticky CTA)
    - delta-parts-plugin/assets/css/showcase-pdp.css           (switcher + tattoo; deleted)

  The GALLERY sheet (delta-gallery.css) is deliberately NOT bundled here: it is
  a self-contained artifact enqueued by bricks-pdp/php/delta-product-gallery.php
  (conditional on is_product), so folding it in would double-load it. It moves
  into the plugin later, when the gallery PHP/JS move too.

  Those bricks-pdp/css/* files remain in place as the human-readable migration
  reference; this bundle is the runtime copy. The frozen design-of-record lives
  in wordpress_migration/bricks-pdp-v1/ (see its FROZEN.md).

  DESIGN TOKENS are NOT defined here. Every var(--*) resolves against
  bricks-global/css/delta-global.css, enqueued site-wide (handle `delta-global`).
  Custom properties resolve at compute time, so load order does not matter; the
  token sheet only has to be present on the page, which it always is.

  Sections below, in order:
    A. PDP shell / layout / editorial   (was delta-pdp-scoped.css)
    B. WooCommerce form + sticky CTA     (was delta-woo-pdp.css)
    C. Family-switcher skin + Tattoo     (new skin + was showcase-pdp.css)
*/


/* ==================================================================
   SECTION A — PDP shell / layout / editorial (was delta-pdp-scoped.css)
   ================================================================== */

/*
  Scoped PDP stylesheet for WordPress/WooCommerce/Bricks.

  Ported from interactive_prototype/v1/styles/{base,product}.css.

  Design tokens are NOT defined here. They come from bricks-global/css/
  delta-global.css, loaded site-wide. Do not reintroduce a token block: a
  second definition shadows the global one inside .delta-pdp only, which
  silently forks the two on the first value change and breaks the global
  responsive overrides in this subtree.

  Start with this file as the single enqueued PDP stylesheet. Split into
  smaller files only after the Bricks template stabilizes.
*/

/*
  `width`/`flex-basis` are here because `#brx-content` is a flex container on
  product pages. WooCommerce/Bricks ship `.single-product { display: flex;
  flex-wrap: wrap }` to lay out the DEFAULT single-product template — gallery
  left, `.summary` right, wrapping on mobile. This template replaces that
  markup entirely, so the flex context is vestigial, but it still applies.

  The consequence is that `.delta-pdp` becomes a flex item, and a flex item is
  `flex: 0 1 auto` — it sizes to its content and does not stretch. Packed at
  `flex-start`, the PDP then sits at its content width with dead space to the
  right of the sticky sidebar. It only shows when the viewport is WIDER than
  that content width, so zooming out reveals it and zooming in hides it: below
  that width the item shrinks to fit and the layout looks correct.

  This restores the block-level stretch the prototype got for free, in the
  same way and for the same reason as `.nav { width: 100% }` in
  ../../bricks-header/css/delta-header.css.

  `flex-basis` is the declaration that actually does the work while the flex
  context exists; `width` covers the case where it does not, so the rule holds
  if WooCommerce ever drops that layout or the class lands on a non-item.

  The alternative — `body.single-product #brx-content { display: block }` —
  addresses the root cause but reaches outside the `.delta-pdp` scope to
  restyle a WooCommerce container, and would silently change how any sibling
  Woo output on the page lays out. Filling the line is the smaller claim.
*/
.delta-pdp {
  width: 100%;
  flex-basis: 100%;
  font-family: var(--f-body);
  color: var(--c-text);
  background: var(--c-bg-white);
}

.delta-pdp *,
.delta-pdp *::before,
.delta-pdp *::after {
  box-sizing: border-box;
}

.delta-pdp .container {
  width: 100%;
  max-width: var(--container-max);
  margin-inline: auto;
  padding-inline: var(--container-pad);
}

.delta-pdp .section-label {
  font-size: var(--fs-11);
  font-weight: var(--fw-semi);
  letter-spacing: var(--ls-wider);
  text-transform: uppercase;
  color: var(--c-text-muted);
  margin-bottom: var(--sp-2);
}

.delta-pdp .accent-dot {
  color: var(--c-accent);
}

.delta-pdp .section-title {
  font-family: var(--f-head);
  font-size: var(--fs-56);
  font-weight: var(--fw-black);
  line-height: var(--lh-tight);
  letter-spacing: var(--ls-tight);
  text-transform: uppercase;
  margin: 0;
}

/*
  Scaffold links. These are real design elements whose destination product does
  not exist yet — see the `data-delta-scaffold` note in product.html. The rule
  only removes underlines; it must not make them look disabled, because they are
  meant to read as finished surface.
*/
.delta-pdp [data-delta-scaffold] {
  text-decoration: none;
}

/* ── LAYOUT ── */

.delta-pdp .pdp-layout {
  display: grid;
  /* Sidebar is deliberately hefty, not delicate — a wide config panel gives the
     buy box presence to match the client's massive-product range. The gallery
     is `1fr`, so it simply absorbs whatever the panel does not take (≈1000px at
     a 1440px container even here). Steps down to 400/340 at narrower widths. */
  grid-template-columns: 1fr 440px;
  align-items: start;
}

.delta-pdp .pdp-content {
  min-width: 0; /* prevent grid blowout */
}

.delta-pdp .pdp-editorial {
  display: block;
}

.delta-pdp .pdp-sidebar {
  position: sticky;
  top: var(--nav-h);
  height: calc(100vh - var(--nav-h));
  overflow-y: auto;
  background: var(--c-bg-dark-2);
  border-left: 1px solid var(--c-border-dark);
  scrollbar-width: thin;
  scrollbar-color: var(--c-border-dark) transparent;
}

.delta-pdp .pdp-sidebar::-webkit-scrollbar {
  width: 4px;
}

.delta-pdp .pdp-sidebar::-webkit-scrollbar-thumb {
  background: var(--c-border-dark);
  border-radius: 2px;
}

/* ── GALLERY ──
   Section frame only. The gallery itself is [delta_product_gallery], styled by
   delta-gallery.css — which is not scoped to `.delta-pdp`, because it loads on
   every product while this file loads for one SKU. The gallery owns its own
   width cap (`--pdp-gallery-max`) and centering, so this wrapper only supplies
   the section's background and padding. */

.delta-pdp .pdp-gallery-section {
  background: var(--c-bg-white);
  padding: var(--sp-8) var(--container-pad);
}

.delta-pdp .pdp-product-gallery {
  width: 100%;
}

/* ── CONFIG PANEL ── */

.delta-pdp .pdp-config {
  padding: var(--sp-6);
  display: flex;
  flex-direction: column;
  gap: var(--sp-5);
}

.delta-pdp .pdp-config__name-row {
  display: flex;
  align-items: flex-start;
  gap: var(--sp-3);
  flex-wrap: wrap;
}

.delta-pdp .pdp-config__badge {
  font-size: var(--fs-10);
  font-weight: var(--fw-semi);
  background: var(--c-accent);
  color: #fff;
  padding: 4px 8px;
  border-radius: var(--radius-sm);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  flex-shrink: 0;
  align-self: center;
  margin-top: 4px;
}

/* The design places this subtitle as a static Text element (.pdp-config__sub).
   Live, it is the native Woo short description, which Woo emits as
   <div class="woocommerce-product-details__short-description"><p>…</p></div>
   and which matches no other scoped rule. Style both so the subtitle reads the
   same whichever renders it; keeping the dynamic excerpt lets the copy stay
   editable per product. */
.delta-pdp .pdp-config__sub,
.delta-pdp .woocommerce-product-details__short-description {
  font-size: var(--fs-13);
  color: var(--c-text-inv-muted);
  margin: var(--sp-2) 0 0;
}

/* Woo wraps the excerpt in a <p>; drop its default block margins (font-size and
   color inherit from the wrapper) so the wrapper's margin is the only spacing. */
.delta-pdp .woocommerce-product-details__short-description p {
  margin: 0;
}

.delta-pdp .pdp-config__price-row {
  display: flex;
  align-items: baseline;
  gap: var(--sp-3);
  padding-block: var(--sp-3);
  border-top: 1px solid var(--c-border-dark);
  border-bottom: 1px solid var(--c-border-dark);
}

.delta-pdp .pdp-config__price-note {
  font-size: var(--fs-11);
  color: var(--c-text-inv-muted);
}

/* Premium holders move the price into the sticky CTA bar (StickyRange.php +
   `.pdp-sticky-range` in Section B): the range rides pinned there so it never
   scrolls out of view on a long sidebar, and the exact price swaps in on
   selection. That makes this top row redundant on premium, so hide it — the
   range there is the single price surface. Standard products have no sticky
   wrap to pin to, so they keep this row as their only price. */
.delta-product-premium .delta-pdp .pdp-config__price-row {
  display: none;
}

/* ── GROUPED NAVIGATION ──
   Serie, Variante and Look all navigate to OTHER products; the form below them
   configures THIS one. Styled alike and interleaved, the two read as one
   top-to-bottom configurator — so a buyer who changes Look after choosing a
   Modell silently loses that choice to a page load. One labelled group over the
   three link groups marks the whole zone as "this swaps the product" and
   separates it from the form. Wraps the series picker, Variante and Look. */

.delta-pdp .pdp-group {
  display: flex;
  flex-direction: column;
  gap: var(--sp-4);
  padding: var(--sp-4) 0;
  border-top: 1px solid var(--c-border-dark);
  border-bottom: 1px solid var(--c-border-dark);
}

.delta-pdp .pdp-group__label {
  font-size: var(--fs-11);
  font-weight: var(--fw-semi);
  letter-spacing: var(--ls-wider);
  text-transform: uppercase;
  color: var(--c-text-inv-muted);
}

/* ── SERIES PICKER ──
   Links to sibling products, not form controls. The active entry is a <span>,
   the rest are <a>. */

.delta-pdp .pdp-series-picker {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--sp-2);
}

.delta-pdp .pdp-series-btn {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 2px;
  background: var(--c-bg-dark);
  border: 1px solid var(--c-border-dark);
  border-radius: var(--radius-sm);
  /* Tightened from `sp-3 sp-4`: the cards read loose, not large. Name +
     one-line description only — a per-card price was tried and pulled, because
     on a premium line the buyer does not decide on the 30-40 EUR spread between
     families, so it was noise. The exact price surfaces in the sticky bar. */
  padding: var(--sp-2) var(--sp-3);
  cursor: pointer;
  transition: border-color var(--t-fast);
  text-align: left;
  width: 100%;
}

.delta-pdp .pdp-series-btn:hover {
  border-color: rgba(255, 255, 255, 0.2);
}

.delta-pdp .pdp-series-btn.is-active {
  border-color: var(--c-accent);
  background: rgba(236, 102, 8, 0.07);
  cursor: default;
}

.delta-pdp .pdp-series-btn__name {
  font-family: var(--f-head);
  font-size: var(--fs-16);
  font-weight: var(--fw-bold);
  letter-spacing: var(--ls-tight);
  text-transform: uppercase;
  color: var(--c-text-inv-muted);
  transition: color var(--t-fast);
}

.delta-pdp .pdp-series-btn:hover .pdp-series-btn__name {
  color: var(--c-text-inv);
}

.delta-pdp .pdp-series-btn.is-active .pdp-series-btn__name {
  color: var(--c-accent);
}

.delta-pdp .pdp-series-btn__desc {
  font-size: var(--fs-11);
  font-weight: var(--fw-semi);
  letter-spacing: var(--ls-wide);
  text-transform: uppercase;
  color: var(--c-text-inv-muted);
  opacity: 0.5;
  transition: opacity var(--t-fast);
}

.delta-pdp .pdp-series-btn.is-active .pdp-series-btn__desc {
  opacity: 0.7;
}

/* ── TOGGLES ── */

.delta-pdp .pdp-toggles {
  display: flex;
  gap: var(--sp-2);
  flex-wrap: wrap;
}

.delta-pdp .pdp-toggle {
  background: var(--c-bg-dark);
  border: 1px solid var(--c-border-dark);
  border-radius: var(--radius-sm);
  color: var(--c-text-inv-muted);
  font-family: var(--f-body);
  font-size: var(--fs-12);
  padding: var(--sp-2) var(--sp-4);
  cursor: pointer;
  transition: border-color var(--t-fast), color var(--t-fast);
  white-space: nowrap;
}

.delta-pdp a.pdp-toggle:hover {
  border-color: rgba(255, 255, 255, 0.25);
  color: var(--c-text-inv);
}

.delta-pdp .pdp-toggle.is-active {
  border-color: var(--c-accent);
  color: var(--c-text-inv);
  cursor: default;
}

/* ── SWATCHES ── */

.delta-pdp .pdp-swatches {
  display: flex;
  gap: var(--sp-2);
  flex-wrap: wrap;
}

.delta-pdp .pdp-swatch {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  background: var(--c-bg-dark);
  border: 1px solid var(--c-border-dark);
  border-radius: var(--radius-sm);
  color: var(--c-text-inv-muted);
  font-family: var(--f-body);
  font-size: var(--fs-12);
  padding: var(--sp-2) var(--sp-3);
  cursor: pointer;
  transition: border-color var(--t-fast), color var(--t-fast);
  white-space: nowrap;
}

.delta-pdp a.pdp-swatch:hover {
  border-color: rgba(255, 255, 255, 0.25);
  color: var(--c-text-inv);
}

.delta-pdp .pdp-swatch.is-active {
  border-color: var(--c-accent);
  color: var(--c-text-inv);
  cursor: default;
}

.delta-pdp .pdp-swatch__dot {
  width: 14px;
  height: 14px;
  border-radius: 50%;
  flex-shrink: 0;
}

/* Finishes. In the prototype these were inline styles; as real product looks
   they belong here, so a new look is one rule rather than an HTML edit. */
.delta-pdp .pdp-swatch__dot--dark-black {
  background: #1c1c1c;
  border: 1px solid rgba(255, 255, 255, 0.2);
}

.delta-pdp .pdp-swatch__dot--contrast-cut {
  background: linear-gradient(135deg, #1c1c1c 50%, #d8d8d8 50%);
}

.delta-pdp .pdp-swatch__dot--naked {
  background: linear-gradient(135deg, #b8b8b8, #f0f0f0);
  border: 1px solid rgba(255, 255, 255, 0.15);
}

/* ── ACCESSORIES (Zubehör) ──
   A PAGE-BODY section, not a sidebar/form slice. These are separate purchasable
   PRODUCTS (own SKU, stock, price), curated per product via WooCommerce
   cross-sells and shown as a checkbox card grid: tick a card and it is added to
   the cart alongside the holder. That add-together behaviour is not native
   (Woo cross-sells only surface in the cart) — production needs a small custom
   bridge or a Frequently-Bought-Together plugin. See the "Two Kinds Of Extra"
   section in shop_data/STATUS.md.

   Lives on a light editorial background like `.pdp-reviews`, so it uses the
   light-theme tokens, not the sidebar's inverse tokens. Contrast the in-form
   OPTIONS ZONE (delta-woo-pdp.css), which is priced OPTIONS with no SKU.

   The earlier form-slice `.pdp-accessories`/`.pdp-accessories__label` (and,
   before that, the `.pdp-secondary-*` accordion) were removed; accessories are
   no longer options and no longer live in the form. */

.delta-pdp .pdp-accessories {
  background: var(--c-bg-white);
  padding-block: var(--sp-16);
}

.delta-pdp .pdp-accessories__header {
  margin-bottom: var(--sp-10);
}

.delta-pdp .pdp-accessories__grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
  gap: var(--sp-5);
}

/* The whole card is the label, so clicking anywhere toggles the checkbox. */
.delta-pdp .pdp-accessory-card {
  display: flex;
  align-items: center;
  gap: var(--sp-4);
  padding: var(--sp-4);
  border: 1px solid var(--c-border-light);
  cursor: pointer;
  transition: border-color var(--t-fast);
}

.delta-pdp .pdp-accessory-card:hover {
  border-color: var(--c-accent);
}

/* Placeholder media box: the accessory product images are not imported yet, so
   this stands in for the product thumbnail the dynamic render will show. */
.delta-pdp .pdp-accessory-card__media {
  flex: 0 0 auto;
  width: 4rem;
  height: 4rem;
  border-radius: var(--radius-sm);
  background: var(--c-bg-light);
  border: 1px solid var(--c-border-light);
}

.delta-pdp .pdp-accessory-card__body {
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}

.delta-pdp .pdp-accessory-card__name {
  font-size: var(--fs-14);
  font-weight: var(--fw-semi);
  line-height: var(--lh-tight);
  color: var(--c-text);
}

.delta-pdp .pdp-accessory-card__price {
  font-size: var(--fs-13);
  color: var(--c-text-muted);
}

.delta-pdp .pdp-accessory-card__check {
  flex: 0 0 auto;
  width: 1.25rem;
  height: 1.25rem;
  accent-color: var(--c-accent);
  cursor: pointer;
}

/* ── OPTIONS ──
   The live form is WooCommerce's; these classes exist for the PHP-rendered
   plate-size field and any static option markup kept in the Bricks tree. */

.delta-pdp .pdp-options {
  display: flex;
  flex-direction: column;
  gap: var(--sp-4);
}

.delta-pdp .pdp-option {
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
}

.delta-pdp .pdp-option__label {
  font-size: var(--fs-11);
  font-weight: var(--fw-semi);
  color: var(--c-text-inv-muted);
  text-transform: uppercase;
  letter-spacing: var(--ls-wide);
}

.delta-pdp .pdp-option__req {
  color: var(--c-accent);
}

/* ── TRUST ── */

.delta-pdp .pdp-trust {
  list-style: none;
  padding: var(--sp-4) 0 0;
  margin: 0;
  border-top: 1px solid var(--c-border-dark);
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--sp-3) var(--sp-4);
}

.delta-pdp .pdp-trust__item {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  font-size: var(--fs-12);
  color: var(--c-text-inv-muted);
}

.delta-pdp .pdp-trust__item svg {
  flex-shrink: 0;
  color: var(--c-accent);
}

/* ── FEATURE STRIP ── */

.delta-pdp .pdp-features {
  background: var(--c-bg-light);
  padding-block: var(--sp-12);
}

.delta-pdp .pdp-features__grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--sp-8);
}

.delta-pdp .pdp-feature {
  display: flex;
  flex-direction: column;
  gap: var(--sp-3);
}

.delta-pdp .pdp-feature__icon {
  color: var(--c-accent);
}

.delta-pdp .pdp-feature__title {
  font-family: var(--f-head);
  font-size: var(--fs-18);
  font-weight: var(--fw-bold);
  color: var(--c-text);
  text-transform: uppercase;
  letter-spacing: var(--ls-tight);
  line-height: var(--lh-tight);
  margin: 0;
}

.delta-pdp .pdp-feature__text {
  font-size: var(--fs-13);
  color: var(--c-text-muted);
  line-height: var(--lh-base);
  margin: 0;
}

/* ── ATMOSPHERE (full-bleed) ── */

.delta-pdp .pdp-atmosphere {
  position: relative;
  height: 72vh;
  min-height: 480px;
  overflow: hidden;
  background: var(--c-bg-dark-3);
}

.delta-pdp .pdp-atmosphere__img,
.delta-pdp .pdp-atmosphere > figure,
.delta-pdp .pdp-atmosphere > figure img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 40%;
  display: block;
  margin: 0;
}

.delta-pdp .pdp-atmosphere__overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(to right, rgba(0, 0, 0, 0.72) 0%, rgba(0, 0, 0, 0.25) 55%, transparent 100%);
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  padding: var(--sp-12) var(--container-pad);
}

.delta-pdp .pdp-atmosphere__headline {
  font-family: var(--f-head);
  font-size: clamp(2.8rem, 6vw, 5rem);
  font-weight: var(--fw-black);
  text-transform: uppercase;
  color: var(--c-text-inv);
  line-height: var(--lh-tight);
  margin: var(--sp-3) 0 0;
}

/* ── DETAIL SPLIT ── */

.delta-pdp .pdp-split {
  background: var(--c-bg-white);
  padding-block: var(--sp-4);
}

.delta-pdp .pdp-split + .pdp-split {
  padding-block-start: var(--sp-8);
}

.delta-pdp .pdp-split__layout {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--sp-12);
  align-items: center;
}

.delta-pdp .pdp-split__media {
  border-radius: var(--radius);
  overflow: hidden;
  max-height: clamp(360px, 55vh, 560px);
  background: var(--c-bg-light);
}

.delta-pdp .pdp-split__img,
.delta-pdp .pdp-split__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.delta-pdp .pdp-split__content {
  display: flex;
  flex-direction: column;
  gap: var(--sp-4);
}

.delta-pdp .pdp-split__title {
  font-family: var(--f-head);
  font-size: clamp(2rem, 4vw, 3rem);
  font-weight: var(--fw-black);
  text-transform: uppercase;
  color: var(--c-text);
  line-height: var(--lh-tight);
  margin: 0;
}

.delta-pdp .pdp-split__text {
  font-size: var(--fs-14);
  color: var(--c-text-muted);
  line-height: var(--lh-base);
  margin: 0;
}

.delta-pdp .pdp-split__list {
  list-style: none;
  padding: 0;
  margin: var(--sp-2) 0 0;
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
}

.delta-pdp .pdp-split__list li {
  position: relative;
  padding-left: var(--sp-5);
  color: var(--c-text-muted);
  font-size: var(--fs-13);
}

.delta-pdp .pdp-split__list li::before {
  content: "\2014";
  position: absolute;
  left: 0;
  color: var(--c-accent);
  font-weight: var(--fw-bold);
}

/* ── CRAFT (full-bleed) ── */

.delta-pdp .pdp-craft {
  position: relative;
  min-height: 420px;
  overflow: hidden;
  background: var(--c-bg-dark-3);
}

.delta-pdp .pdp-craft__img,
.delta-pdp .pdp-craft > figure,
.delta-pdp .pdp-craft > figure img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  margin: 0;
}

.delta-pdp .pdp-craft__overlay {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  align-items: flex-end;
  text-align: right;
  padding: var(--sp-12) var(--container-pad);
  background: linear-gradient(to left, rgba(0, 0, 0, 0.75), rgba(0, 0, 0, 0.2) 60%, transparent);
}

.delta-pdp .pdp-craft__headline {
  font-family: var(--f-head);
  font-size: clamp(2.2rem, 4.5vw, 3.8rem);
  font-weight: var(--fw-black);
  text-transform: uppercase;
  color: var(--c-text-inv);
  line-height: var(--lh-tight);
  margin: var(--sp-3) 0 0;
}

.delta-pdp .pdp-craft__body {
  max-width: 400px;
  margin: var(--sp-3) 0 0;
  font-size: var(--fs-14);
  line-height: var(--lh-base);
  color: rgba(255, 255, 255, 0.7);
}

/* ── REVIEWS ── */

.delta-pdp .pdp-reviews {
  background: var(--c-bg-white);
  padding-block: var(--sp-16);
}

.delta-pdp .pdp-reviews__header {
  margin-bottom: var(--sp-10);
}

.delta-pdp .pdp-reviews__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--sp-4);
}

.delta-pdp .review-card {
  border: 1px solid var(--c-border-light);
  padding: var(--sp-6);
  display: flex;
  flex-direction: column;
  gap: var(--sp-5);
}

.delta-pdp .review-card__text {
  font-size: var(--fs-14);
  line-height: var(--lh-base);
  color: var(--c-text);
  margin: 0;
}

.delta-pdp .review-card__footer {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: var(--sp-3);
}

.delta-pdp .review-card__author {
  font-size: var(--fs-12);
  font-weight: var(--fw-bold);
  letter-spacing: var(--ls-wide);
  text-transform: uppercase;
  margin: 0;
}

.delta-pdp .review-card__bike {
  font-size: var(--fs-11);
  color: var(--c-text-muted);
  letter-spacing: var(--ls-wide);
  text-transform: uppercase;
  margin: 2px 0 0;
}

.delta-pdp .review-card__stars {
  color: var(--c-accent);
  font-size: var(--fs-14);
  letter-spacing: 2px;
  white-space: nowrap;
}

/* ── BRAND / IN THE BOX ── */

.delta-pdp .pdp-brand {
  background: var(--c-bg-dark-2);
  padding-block: var(--sp-16);
}

.delta-pdp .pdp-brand__layout {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--sp-12);
  align-items: center;
}

.delta-pdp .pdp-brand__text {
  display: flex;
  flex-direction: column;
  gap: var(--sp-4);
}

.delta-pdp .pdp-brand__title {
  font-family: var(--f-head);
  font-size: clamp(2rem, 4vw, 3rem);
  font-weight: var(--fw-black);
  text-transform: uppercase;
  color: var(--c-text-inv);
  line-height: var(--lh-tight);
  margin: 0;
}

.delta-pdp .pdp-brand__intro {
  font-size: var(--fs-14);
  color: var(--c-text-inv-muted);
  line-height: var(--lh-base);
  margin: 0;
}

.delta-pdp .pdp-brand__list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
}

.delta-pdp .pdp-brand__list li {
  position: relative;
  padding-left: var(--sp-6);
  font-size: var(--fs-14);
  color: var(--c-text-inv);
}

.delta-pdp .pdp-brand__list li::before {
  content: "\2713";
  position: absolute;
  left: 0;
  color: var(--c-accent);
  font-weight: var(--fw-bold);
}

.delta-pdp .pdp-brand__note {
  font-size: var(--fs-13);
  color: var(--c-text-inv-muted);
  margin: 0;
}

.delta-pdp .pdp-brand__link {
  color: var(--c-accent);
  text-decoration: none;
}

.delta-pdp .pdp-brand__link:hover {
  text-decoration: underline;
}

.delta-pdp .pdp-brand__media {
  border-radius: var(--radius);
  overflow: hidden;
}

.delta-pdp .pdp-brand__img {
  width: 100%;
  height: auto;
  display: block;
}

/* The section-label sits on light backgrounds by default; these two sections
   are dark. */
.delta-pdp .pdp-brand .section-label,
.delta-pdp .pdp-atmosphere .section-label,
.delta-pdp .pdp-craft .section-label {
  color: var(--c-text-inv-muted);
}

/* ── RESPONSIVE ── */

@media (max-width: 1200px) {
  .delta-pdp .pdp-layout {
    grid-template-columns: 1fr 400px;
  }
}

@media (max-width: 1024px) {
  .delta-pdp .pdp-layout {
    grid-template-columns: 1fr 340px;
  }

  .delta-pdp .pdp-features__grid {
    grid-template-columns: repeat(2, 1fr);
    gap: var(--sp-6);
  }

  .delta-pdp .pdp-split__layout,
  .delta-pdp .pdp-brand__layout {
    gap: var(--sp-8);
  }

  .delta-pdp .section-title {
    font-size: var(--fs-40);
  }

  .delta-pdp .pdp-config {
    padding: var(--sp-5);
    gap: var(--sp-4);
  }

  .delta-pdp .pdp-config__price-row {
    padding-block: var(--sp-2);
  }

  .delta-pdp .pdp-options {
    gap: var(--sp-3);
  }
}

@media (max-width: 768px) {
  .delta-pdp .pdp-layout {
    display: flex;
    flex-direction: column;
  }

  .delta-pdp .pdp-content {
    display: contents;
  }

  .delta-pdp .pdp-gallery-section {
    order: 1;
  }

  .delta-pdp .pdp-sidebar {
    order: 2;
    position: static;
    height: auto;
    border-left: 0;
  }

  .delta-pdp .pdp-editorial {
    order: 3;
  }

  .delta-pdp .pdp-split__layout,
  .delta-pdp .pdp-brand__layout {
    grid-template-columns: 1fr;
    gap: var(--sp-6);
  }

  .delta-pdp .pdp-reviews__grid {
    grid-template-columns: 1fr;
  }

  .delta-pdp .pdp-features__grid {
    grid-template-columns: 1fr;
  }

  .delta-pdp .section-title {
    font-size: var(--fs-32);
  }

  /* The inverted split puts its media second in source order, which on one
     column would push the image below the text. Keep media first in both. */
  .delta-pdp .pdp-split__media {
    order: -1;
  }

  .delta-pdp .pdp-atmosphere {
    height: 50vh;
    min-height: 320px;
  }

  .delta-pdp .pdp-craft__overlay {
    align-items: flex-start;
    text-align: left;
  }
}
.delta-product-standard .delta-premium-only {
  display: none !important;
}

/* The long-form copy is a Taifun design demo, never shared product content. */
.delta-pdp .delta-taifun-demo-only {
  display: none;
}

.delta-product-series-taifun .delta-pdp .delta-taifun-demo-only {
  display: block;
}

.delta-pdp .pdp-accessories[hidden] {
  display: none !important;
}


/* ==================================================================
   SECTION B — WooCommerce form + sticky CTA (was delta-woo-pdp.css)
   ================================================================== */

/*
  WooCommerce and Bricks adaptations for the scoped PDP.

  Keep selectors scoped under `.delta-pdp` so the rest of WooCommerce is not
  unintentionally restyled.

  On `!important`: this file adapts markup we do not author, against Woo core and
  Bricks stylesheets whose selectors are deliberately specific (Bricks emits
  per-element `#brxe-*` rules whenever a style is set in the panel). Where a
  declaration is marked important below, it is because a core rule sets the same
  property and our scope class cannot outrank it without hard-coding a DOM shape
  that Bricks may change. Each one is commented. Do not add more without the same
  justification.

  Only the Product Title block still needs it. The Woo-core specificity war this
  file used to fight was the gallery ((0,4,3) on `div.images .flex-control-thumbs
  li`), and that markup is no longer ours to adapt — see the GALLERY note below.
*/

/* ── PRODUCT TITLE ──
   Bricks theme styles and any typography set on the Product Title element
   outrank `.delta-pdp .pdp-config__name .product_title` (0,3,0). Prototype
   reference: product.css `.pdp-config__name`. */

.delta-pdp .pdp-config__name,
.delta-pdp .pdp-config__name h1,
.delta-pdp .pdp-config__name .product_title,
.delta-pdp h1.product_title {
  margin: 0 !important;
  color: var(--c-text-inv) !important;
  font-family: var(--f-head) !important;
  font-size: clamp(1.9rem, 3.5vw, 2.6rem) !important;
  font-weight: var(--fw-black) !important;
  line-height: var(--lh-tight) !important;
  text-transform: uppercase !important;
}

@media (max-width: 1024px) {
  .delta-pdp .pdp-config__name,
  .delta-pdp .pdp-config__name h1,
  .delta-pdp .pdp-config__name .product_title,
  .delta-pdp h1.product_title {
    font-size: clamp(1.4rem, 2.2vw, 1.9rem) !important;
  }
}

/* ── PRODUCT PRICE ── */

.delta-pdp .pdp-config__price,
.delta-pdp .pdp-config__price .price,
.delta-pdp .pdp-config__price .woocommerce-Price-amount,
.delta-pdp .pdp-config__price .amount {
  margin: 0;
  color: var(--c-text-inv);
  font-family: var(--f-head);
  font-size: var(--fs-32);
  font-weight: var(--fw-bold);
  line-height: var(--lh-tight);
}

/* Variable products render a `from–to` range as two amounts around a del/ins. */
.delta-pdp .pdp-config__price del {
  opacity: 0.5;
  margin-right: var(--sp-2);
}

.delta-pdp .pdp-config__price ins {
  text-decoration: none;
}

/* WooCommerce's tax/shipping suffix, if enabled in Woo settings. */
.delta-pdp .pdp-config__price small,
.delta-pdp .pdp-config__price .woocommerce-price-suffix {
  display: block;
  margin-top: var(--sp-2);
  font-family: var(--f-body);
  font-size: var(--fs-11);
  font-weight: var(--fw-reg);
  color: var(--c-text-inv-muted);
}

/* ── GALLERY ──
   Nothing here. The gallery is no longer WooCommerce's markup — it is rendered
   by [delta_product_gallery] and styled by delta-gallery.css, which is not
   `.delta-pdp`-scoped because it loads on every product. The rules that used to
   fight Woo's flexslider (float, opacity, `div.images` widths, `.flex-control-
   thumbs`) are deleted rather than kept: they were all scoped under `.delta-pdp`,
   which only exists on this template, and this template no longer places a
   Product Gallery element. If the native gallery is ever placed on another
   template, style it there. */

/* ── ADD TO CART FORM ── */

.delta-pdp .pdp-woo-form form.cart,
.delta-pdp .pdp-woo-form .variations_form {
  display: flex;
  flex-direction: column;
  gap: var(--sp-4);
  margin: 0;
}

.delta-pdp .pdp-woo-form table.variations {
  width: 100%;
  margin: 0;
  border: 0;
}

.delta-pdp .pdp-woo-form table.variations tr,
.delta-pdp .pdp-woo-form table.variations th,
.delta-pdp .pdp-woo-form table.variations td {
  display: block;
  padding: 0;
  border: 0;
  /* `<th>` carries a UA-default `text-align: center`. Resetting to block above
     does not clear it, so the Modell label would centre while every other label
     (all in <div>s) sits left. Force left so the whole panel aligns. */
  text-align: left;
}

.delta-pdp .pdp-woo-form table.variations tr + tr {
  margin-top: var(--sp-4);
}

.delta-pdp .pdp-woo-form table.variations label,
.delta-pdp .pdp-license-plate-size label {
  display: block;
  margin-bottom: var(--sp-2);
  font-size: var(--fs-11);
  font-weight: var(--fw-semi);
  color: var(--c-text-inv-muted);
  text-transform: uppercase;
  letter-spacing: var(--ls-wide);
}

/* ── SELECTS ── */

.delta-pdp .pdp-woo-form select,
.delta-pdp .pdp-license-plate-size select {
  width: 100%;
  appearance: none;
  border: 1px solid var(--c-border-dark);
  border-radius: var(--radius-sm);
  color: var(--c-text-inv);
  font-family: var(--f-body);
  font-size: var(--fs-13);
  cursor: pointer;
  transition: border-color var(--t-fast);

  /*
    Bricks sets `line-height: var(--bricks-woo-input-height)` (40px) on Woo form
    controls. Left alone it stacks on top of our padding and produces a ~66px
    box. Reset the line box and let padding define the height, as in the
    prototype's `.pdp-select`.
  */
  line-height: normal;
  padding: var(--sp-3) var(--sp-8) var(--sp-3) var(--sp-4);

  /* Caret. The prototype draws it with `.pdp-select-wrap::after`, but Woo owns
     the markup around its variation selects, so it rides on the select itself. */
  background-color: var(--c-bg-dark);
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-opacity='0.5' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right var(--sp-4) center;
  background-size: 12px 12px;
}

/*
  The dropdown list itself. Without this the options fall back to the UA's
  light system menu colors inside a dark panel. Prototype: product.css
  `.pdp-select option, .pdp-select optgroup`.
*/
.delta-pdp .pdp-woo-form select option,
.delta-pdp .pdp-woo-form select optgroup,
.delta-pdp .pdp-license-plate-size select option {
  background: var(--c-bg-dark-2);
  color: var(--c-text-inv);
  line-height: normal;
}

.delta-pdp .pdp-woo-form select:focus,
.delta-pdp .pdp-license-plate-size select:focus {
  outline: none;
  border-color: var(--c-accent);
}

/* ── VARIATION STATE ── */

/* ── STICKY CTA ──
   `.single_variation_wrap` is the sticky element — NOT
   `.woocommerce-variation-add-to-cart`. A sticky box cannot escape its
   containing block: the add-to-cart div's containing block is this wrap
   (~80px), so it would barely travel, whereas this wrap's containing block is
   the form — which, because the form is the LAST block in `.pdp-config`,
   reaches the bottom of the scroll content. That is why the options zone and
   Trust are injected INSIDE the form (on `woocommerce_after_variations_table`)
   above this wrap: they must share the box the bar sticks within, without
   shortening it. Zubehör is NOT injected here — accessories are a page-body
   section, so the form stays lean: Modell → options zone → Trust → CTA.

   Bonus: this wrap already holds `.single_variation`, Woo's live per-variation
   price and stock, so pinning it puts the updating price in the bar for free.
   `.single_variation` is empty until a Modell is chosen, so the bar starts as
   qty + button and grows a price line on selection — the price arriving is
   feedback, not a jump to design around.

   `position: sticky` (not fixed/absolute) is load-bearing for simple products:
   a short sidebar makes sticky a no-op and the CTA stays in flow — no media
   query, no floating bar over dead space.

   The negative inline/block-end margins bleed the bar to the sidebar edges,
   eating `.pdp-config`'s padding so `bottom: 0` reaches the true edge and
   scrolled content passes fully behind it. Values mirror `.pdp-config`'s
   padding at each breakpoint (`sp-6` desktop, `sp-5` from 1024 down).

   Depends on Bricks emitting `.single_variation_wrap` as a direct child of the
   form (WooCommerce's native `variable.php` template does). If a Bricks version
   restructures it, this rule simply does not bind and the CTA falls back to
   flow — verify on the live PDP. */
.delta-pdp .pdp-woo-form .single_variation_wrap {
  display: flex;
  flex-direction: column;
  gap: var(--sp-4);
  position: sticky;
  bottom: 0;
  z-index: 2;
  margin-inline: calc(var(--sp-6) * -1);
  margin-block-end: calc(var(--sp-6) * -1);
  padding: var(--sp-4) var(--sp-6);
  background: var(--c-bg-dark-2);
  border-top: 1px solid var(--c-border-dark);
}

@media (max-width: 1024px) {
  .delta-pdp .pdp-woo-form .single_variation_wrap {
    margin-inline: calc(var(--sp-5) * -1);
    margin-block-end: calc(var(--sp-5) * -1);
    padding: var(--sp-4) var(--sp-5);
  }
}

/* ── STICKY RANGE ──
   The parent price range, injected by StickyRange.php via
   `woocommerce_before_single_variation` as the first child of the sticky wrap.
   It is the ONLY price on landing (the top `.pdp-config__price-row` is hidden for
   premium products below), and because it rides inside the sticky box it stays on
   screen at every scroll position — the whole point of moving the price here.

   Swap, not stack: once a full variation is selected, WooCommerce fills
   `.single_variation` with the exact price and flags
   `.woocommerce-variation-add-to-cart` enabled. The `:has()` rule then hides this
   range, so the exact price takes its place and the bar never carries two price
   lines. `:has()` is baseline-supported; if a target browser lacked it the range
   would simply stay visible above the exact price (degraded, not broken).

   Matches the exact price's type (`--fs-28`, head, bold) so the swap is seamless. */
.delta-pdp .pdp-woo-form .pdp-sticky-range {
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
}

.delta-pdp .pdp-woo-form .pdp-sticky-range__amount,
.delta-pdp .pdp-woo-form .pdp-sticky-range .price,
.delta-pdp .pdp-woo-form .pdp-sticky-range .amount {
  color: var(--c-text-inv);
  font-family: var(--f-head);
  font-size: var(--fs-28);
  font-weight: var(--fw-bold);
  line-height: var(--lh-tight);
}

.delta-pdp .pdp-woo-form .pdp-sticky-range__note {
  font-size: var(--fs-11);
  color: var(--c-text-inv-muted);
}

.delta-pdp .pdp-woo-form .single_variation_wrap:has(.woocommerce-variation-add-to-cart-enabled) .pdp-sticky-range {
  display: none;
}

.delta-pdp .pdp-woo-form .woocommerce-variation-add-to-cart {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-3);
}

/* Woo/Bricks margin defenses. `.single_variation` and
   `.woocommerce-variation-add-to-cart` are Woo's own markup (native
   `variable.php`, not ours), and both — plus the price block — ship default
   margins. Left alone they stack ON TOP of the wrap's `--sp-4` flex gap and
   open an oversized hole between the stock line and the quantity+CTA row.
   Zero them so spacing comes only from our flex gaps. */
.delta-pdp .pdp-woo-form .single_variation,
.delta-pdp .pdp-woo-form .woocommerce-variation-add-to-cart,
.delta-pdp .pdp-woo-form .woocommerce-variation-price,
.delta-pdp .pdp-woo-form .woocommerce-variation-availability {
  margin: 0;
}

/* Price and availability share ONE row: baseline-aligned, so the small stock
   line sits beside the big price instead of adding a third row to the bar.
   `flex-wrap` lets a long stock string ("Nur noch 1 auf Lager") drop to its own
   line on a narrow bar rather than overflow. Woo's per-variation description,
   when present, is a full sentence — force it to a full-width row so it never
   shares the price's line; the empty description div is dropped below so it adds
   neither a row nor a phantom gap. */
.delta-pdp .pdp-woo-form .single_variation {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  column-gap: var(--sp-3);
  row-gap: var(--sp-2);
}

.delta-pdp .pdp-woo-form .woocommerce-variation-description {
  flex-basis: 100%;
}

.delta-pdp .pdp-woo-form .woocommerce-variation-description:empty {
  display: none;
}

.delta-pdp .pdp-woo-form .woocommerce-variation-price,
.delta-pdp .pdp-woo-form .woocommerce-variation-availability {
  color: var(--c-text-inv);
}

.delta-pdp .pdp-woo-form .woocommerce-variation-price .price,
.delta-pdp .pdp-woo-form .woocommerce-variation-price .amount {
  color: var(--c-text-inv);
  font-family: var(--f-head);
  font-size: var(--fs-28);
  font-weight: var(--fw-bold);
  line-height: var(--lh-tight);
}

.delta-pdp .pdp-woo-form .stock {
  margin: 0;
  color: rgba(255, 255, 255, 0.72);
  font-size: var(--fs-13);
}

.delta-pdp .pdp-woo-form .stock.out-of-stock {
  color: #ff8c82;
}

.delta-pdp .pdp-woo-form .reset_variations {
  display: inline-flex;
  margin-top: var(--sp-2);
  color: var(--c-text-inv-muted);
  font-size: var(--fs-12);
}

/* ── QUANTITY + CTA ── */

/*
  Bricks wraps the Woo quantity input in a stepper:

      .quantity > .action.minus + input.qty + .action.plus

  The prototype has no quantity control at all, so there is no parity target
  here — this is a design decision. It is sized for B2B bulk buyers: the input
  is wide enough to type "48" into and stays a real number input, rather than
  a click-only stepper that would need 47 taps. The steppers are a convenience
  on top, not the primary path.
*/

.delta-pdp .pdp-woo-form .quantity {
  flex: 0 0 auto;
  /* Woo/theme ships `form.cart .quantity { width: 200px }` (0,2,1). Left alone
     the box balloons to 200px, and 200px + the button's 12rem min + gap
     overflows the sidebar, so `flex-wrap` drops the button to its own row.
     Our scope (0,3,0) outranks it: shrink to content so the stepper and CTA
     share one row, stepper sized by its own inner widths. */
  width: auto;
  display: inline-flex;
  align-items: stretch;
  border: 1px solid var(--c-border-dark);
  border-radius: var(--radius-sm);
  background: var(--c-bg-dark);
  overflow: hidden;
}

.delta-pdp .pdp-woo-form .quantity:focus-within {
  border-color: var(--c-accent);
}

.delta-pdp .pdp-woo-form .quantity .action {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 2.5rem;
  min-height: 3.5rem;
  flex-shrink: 0;
  border: 0;
  background: none;
  color: var(--c-text-inv-muted);
  font-family: var(--f-body);
  font-size: var(--fs-16);
  line-height: 1;
  cursor: pointer;
  user-select: none;
  transition: color var(--t-fast), background var(--t-fast);
}

.delta-pdp .pdp-woo-form .quantity .action:hover {
  color: var(--c-text-inv);
  background: rgba(255, 255, 255, 0.06);
}

/*
  Draw the glyphs ourselves. Bricks renders these via its own icon font, which
  the child theme may not load — they came through as empty boxes. `:empty`
  means we only fill in when Bricks left nothing, so if the icon font is
  present its glyph still wins and we do not double up.
*/
.delta-pdp .pdp-woo-form .quantity .action.minus:empty::before {
  content: "\2212"; /* − U+2212 MINUS SIGN, not a hyphen */
}

.delta-pdp .pdp-woo-form .quantity .action.plus:empty::before {
  content: "+";
}

.delta-pdp .pdp-woo-form .quantity .qty {
  width: 2.3rem; /* fits 3 digits — bulk orders type, they do not click. Kept
                    tight: a wider input pushes the stepper past the width the
                    380px sidebar can share with the CTA, forcing a wrap. */
  min-height: 3.5rem;
  flex: 0 0 auto;
  padding: var(--sp-3) var(--sp-2);
  border: 0;
  border-inline: 1px solid var(--c-border-dark);
  border-radius: 0;
  background: transparent;
  color: var(--c-text-inv);
  font-family: var(--f-body);
  font-size: var(--fs-14);
  line-height: normal; /* same Bricks input-height reset as the selects */
  text-align: center;
  appearance: textfield;
  -moz-appearance: textfield;
}

.delta-pdp .pdp-woo-form .quantity .qty:focus {
  outline: none;
}

/* Native spinners duplicate the stepper buttons. */
.delta-pdp .pdp-woo-form .quantity .qty::-webkit-outer-spin-button,
.delta-pdp .pdp-woo-form .quantity .qty::-webkit-inner-spin-button {
  appearance: none;
  margin: 0;
}

.delta-pdp .pdp-woo-form .single_add_to_cart_button {
  /* Basis sets the wrap threshold, NOT the rendered width — `flex-grow: 1`
     fills the row whatever the basis. It must stay low enough that
     stepper (~117px: two 2.5rem actions + a 2.3rem input) + gap + basis fits
     the narrowest one-row column. The 380px sidebar (viewport 1024–1200)
     leaves ~332px here. Both the `10rem` basis (down from 12rem) and the
     trimmed input width were needed: 12rem + a 3.25rem input overshot by
     enough to wrap the button to its own line. Now 380px and 400px keep the
     stepper and CTA on one row; the 320px sidebar (≤1024) still wraps to a
     full-width CTA, which is right there. */
  flex: 1 1 10rem;
  min-height: 3.5rem;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: var(--sp-4);
  border: 2px solid var(--c-accent);
  border-radius: var(--radius-sm);
  background: var(--c-accent);
  color: var(--c-text-inv);
  font-family: var(--f-head);
  font-size: var(--fs-18);
  font-weight: var(--fw-bold);
  line-height: var(--lh-tight);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  transition: background var(--t-fast), border-color var(--t-fast);
}

.delta-pdp .pdp-woo-form .single_add_to_cart_button:hover {
  background: var(--c-accent-h);
  border-color: var(--c-accent-h);
}

.delta-pdp .pdp-woo-form .single_add_to_cart_button.disabled,
.delta-pdp .pdp-woo-form .single_add_to_cart_button:disabled {
  cursor: not-allowed;
  border-color: var(--c-border-dark);
  background: var(--c-bg-dark-3);
  color: var(--c-text-inv-muted);
  opacity: 1;
}

/* ── DEFERRED OPTIONS ZONE ──
   The in-form home for priced, non-SKU options — "product add-ons" that change
   this line item's price or order meta but are NOT their own product. It is a
   single stacking container so additional add-ons (e.g. a Klebeschicht paid
   flag) slot in as sibling fields, and it is where the WooCommerce Product
   Add-ons plugin could render later. No current showcase hook emits this zone.

   Distinct from Zubehör (accessories) — those are separate PRODUCTS shown as a
   page-body card grid (delta-pdp-scoped.css), never here. */

.delta-pdp .pdp-options-zone {
  display: flex;
  flex-direction: column;
  gap: var(--sp-4);
}

/* ── LICENSE PLATE SIZE — one field inside the options zone ── */

.delta-pdp .pdp-license-plate-size {
  flex: 1 0 100%;
}

.delta-pdp .pdp-license-plate-size abbr,
.delta-pdp .pdp-license-plate-size abbr.required {
  border: 0;
  color: var(--c-accent);
  text-decoration: none;
}

/* ── NOTICES ── */

.delta-pdp .woocommerce-error,
.delta-pdp .woocommerce-message,
.delta-pdp .woocommerce-info {
  margin: 0 0 var(--sp-4);
  padding: var(--sp-4);
  border: 1px solid var(--c-border-dark);
  border-left: 3px solid var(--c-accent);
  border-radius: var(--radius-sm);
  background: var(--c-bg-dark-2);
  color: var(--c-text-inv);
  list-style: none;
}

.delta-pdp .woocommerce-error {
  border-left-color: #d63c32;
}

.delta-pdp .woocommerce-message a,
.delta-pdp .woocommerce-info a {
  color: var(--c-accent);
}


/* ==================================================================
   SECTION C — Family-switcher skin + Tattoo (new + was showcase-pdp.css)
   ================================================================== */

/*
  ── FAMILY-SWITCHER SKIN ──

  The data-driven [delta_family_switcher] outputs semantic, component-scoped
  markup (see DeltaParts\FamilySwitcher::render_axis):

    nav.delta-family-switcher
      div.delta-family-switcher__axis.delta-family-switcher__axis--{series|form|finish}
        span.delta-family-switcher__label
        ul.delta-family-switcher__choices
          li > a.delta-family-switcher__choice[aria-current="page"]
                 span.delta-family-switcher__choice-name
                 span.delta-family-switcher__choice-desc   (series axis only)

  This block maps that output onto the PDP's existing configurator design:
  the SERIES axis renders as the two-column card grid (mirrors .pdp-series-picker
  / .pdp-series-btn in Section A), and the FORM + FINISH axes render as toggle
  rows (mirror .pdp-toggles / .pdp-toggle). Values are mirrored rather than
  shared because the switcher's <ul>/<li> structure differs from the static
  picker's flat markup; the source of truth for these values is the
  .pdp-series-btn / .pdp-toggle rules above. Scoped to .delta-pdp: the rich
  dark-sidebar treatment only applies inside the Bricks template, which is the
  only place the switcher is meant to render.
*/

.delta-pdp .delta-family-switcher {
  display: flex;
  flex-direction: column;
  gap: var(--sp-4);
}

.delta-pdp .delta-family-switcher__axis {
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
}

/* Per-axis label; mirrors .pdp-group__label. */
.delta-pdp .delta-family-switcher__label {
  font-size: var(--fs-11);
  font-weight: var(--fw-semi);
  letter-spacing: var(--ls-wider);
  text-transform: uppercase;
  color: var(--c-text-inv-muted);
}

/* Strip <ul> defaults on every choice list. */
.delta-pdp .delta-family-switcher__choices {
  list-style: none;
  margin: 0;
  padding: 0;
}

/* ── SERIES axis → card grid (mirrors .pdp-series-picker + .pdp-series-btn) ── */
.delta-pdp .delta-family-switcher__axis--series .delta-family-switcher__choices {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--sp-2);
}

.delta-pdp .delta-family-switcher__axis--series .delta-family-switcher__choice {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 2px;
  background: var(--c-bg-dark);
  border: 1px solid var(--c-border-dark);
  border-radius: var(--radius-sm);
  padding: var(--sp-2) var(--sp-3);
  text-decoration: none;
  transition: border-color var(--t-fast);
}

.delta-pdp .delta-family-switcher__axis--series .delta-family-switcher__choice:hover {
  border-color: rgba(255, 255, 255, 0.2);
}

.delta-pdp .delta-family-switcher__axis--series .delta-family-switcher__choice[aria-current="page"] {
  border-color: var(--c-accent);
  background: rgba(236, 102, 8, 0.07);
}

.delta-pdp .delta-family-switcher__choice-name {
  font-family: var(--f-head);
  font-size: var(--fs-16);
  font-weight: var(--fw-bold);
  letter-spacing: var(--ls-tight);
  text-transform: uppercase;
  color: var(--c-text-inv-muted);
  transition: color var(--t-fast);
}

.delta-pdp .delta-family-switcher__axis--series .delta-family-switcher__choice:hover .delta-family-switcher__choice-name {
  color: var(--c-text-inv);
}

.delta-pdp .delta-family-switcher__axis--series .delta-family-switcher__choice[aria-current="page"] .delta-family-switcher__choice-name {
  color: var(--c-accent);
}

.delta-pdp .delta-family-switcher__choice-desc {
  font-size: var(--fs-11);
  font-weight: var(--fw-semi);
  letter-spacing: var(--ls-wide);
  text-transform: uppercase;
  color: var(--c-text-inv-muted);
  opacity: 0.5;
  transition: opacity var(--t-fast);
}

.delta-pdp .delta-family-switcher__axis--series .delta-family-switcher__choice[aria-current="page"] .delta-family-switcher__choice-desc {
  opacity: 0.7;
}

/* ── FORM + FINISH axes → toggle rows (mirror .pdp-toggles + .pdp-toggle) ── */
.delta-pdp .delta-family-switcher__axis--form .delta-family-switcher__choices,
.delta-pdp .delta-family-switcher__axis--finish .delta-family-switcher__choices {
  display: flex;
  gap: var(--sp-2);
  flex-wrap: wrap;
}

.delta-pdp .delta-family-switcher__axis--form .delta-family-switcher__choice,
.delta-pdp .delta-family-switcher__axis--finish .delta-family-switcher__choice {
  background: var(--c-bg-dark);
  border: 1px solid var(--c-border-dark);
  border-radius: var(--radius-sm);
  color: var(--c-text-inv-muted);
  font-family: var(--f-body);
  font-size: var(--fs-12);
  padding: var(--sp-2) var(--sp-4);
  text-decoration: none;
  white-space: nowrap;
  transition: border-color var(--t-fast), color var(--t-fast);
}

.delta-pdp .delta-family-switcher__axis--form .delta-family-switcher__choice:hover,
.delta-pdp .delta-family-switcher__axis--finish .delta-family-switcher__choice:hover {
  border-color: rgba(255, 255, 255, 0.25);
  color: var(--c-text-inv);
}

.delta-pdp .delta-family-switcher__axis--form .delta-family-switcher__choice[aria-current="page"],
.delta-pdp .delta-family-switcher__axis--finish .delta-family-switcher__choice[aria-current="page"] {
  border-color: var(--c-accent);
  color: var(--c-text-inv);
}

/*
  ── TATTOO PREVIEW ──
  Moved verbatim from showcase-pdp.css. Deliberately UNSCOPED: the notice is
  rendered by DeltaParts\TattooGuard on woocommerce_before_add_to_cart_form and
  the disable rule keys off the .delta-product-tattoo body class, so neither can
  assume a .delta-pdp ancestor. Kept on original hardcoded colors (not tokens)
  to preserve the component's exact look.
*/
.delta-tattoo-preview {
  border-left: 4px solid #f2b705;
  margin: 0 0 1.25rem;
  padding: 0.85rem 1rem;
  background: #fff8d9;
  color: #161616;
}

.delta-tattoo-preview p {
  margin: 0.35rem 0 0;
}

.delta-product-tattoo .single_add_to_cart_button {
  display: none !important;
}
