/* =========================================================================
   Scheda prodotto (single product) — Hornoi Core
   Layout: container Bootstrap, gallery a sinistra + summary a destra.
   Markup: woocommerce/content-single-product.php + SingleProductController.
   Prezzo e stelline riusano le classi .wc-card__* / .price di WooCommerce.
   ========================================================================= */

.product-single {
    --pdp-accent:      #f5a623;
    --pdp-ink:         #111;
    --pdp-muted:       #6b6b6b;
    --pdp-line:        #ececec;
    --pdp-radius:      16px;
    --pdp-in:          #22a447;   /* disponibile */
    --pdp-low:         #e0940f;   /* ultimi posti */
    --pdp-out:         #c23b3b;   /* esaurito */
}

/* Stacco dall'header: la scheda non deve risultare attaccata al menu. */
.product-single__container { margin-top: 48px; }

/* Da lg in su la foto è più alta del summary: centriamo il summary a metà
   della foto invece di ancorarlo in alto. Sul Level Match no — lì il summary
   è più alto della foto e la foto resta ferma: lo ribalta level-match.css. */
@media (min-width: 992px) {
    .product-single__container > .row { align-items: center; }
}

/* woocommerce-layout.css impone `div.summary { width:48%; float:right }`: sulla
   .row flex di Bootstrap il float è ignorato, ma il 48% + il 58,33% della
   gallery superano il 100% e mandano il summary a capo (sotto la foto).
   Qui riportiamo la colonna alla larghezza Bootstrap. La specificità
   `.product-single.product .summary.entry-summary` (4 classi) batte quella di
   WooCommerce (`.woocommerce div.product div.summary`) senza `!important`. */
.product-single.product .summary.entry-summary {
    float: none;
    margin: 0;
}
@media (min-width: 992px) {
    .product-single.product .summary.entry-summary { width: 41.6667%; }
}
@media (max-width: 991.98px) {
    .product-single.product .summary.entry-summary { width: 100%; }
}

.product-single .pdp-gallery { margin: 0; }

/* ── Gallery ───────────────────────────────────────────────────────────── */
.pdp-gallery {
    display: flex;
    gap: 16px;
    align-items: flex-start;
}

.pdp-gallery__thumbs {
    display: flex;
    flex-direction: column;
    gap: 12px;
    flex: 0 0 72px;
    width: 72px;
}

.pdp-gallery__thumb {
    padding: 0;
    border: 2px solid transparent;
    border-radius: 12px;
    background: #f5f4f2;
    overflow: hidden;
    cursor: pointer;
    aspect-ratio: 1;
    transition: border-color .2s ease;
}
.pdp-gallery__thumb:hover { border-color: #d9d9d9; }
.pdp-gallery__thumb.is-active { border-color: var(--pdp-ink); }

/* Il selettore ricalca quello di WooCommerce con una classe in più, come già
   si fa sulle card del negozio (vedi product-card.css). Il plugin stampa
   `.woocommerce img { height: auto }`, che vale (0,1,1) e batte la sola classe
   della foto: l'altezza tornava quella delle proporzioni dell'immagine e sotto
   restava scoperto il fondo del riquadro. Il secondo selettore serve dove il
   wrapper `.woocommerce` non c'è. */
.woocommerce .pdp-gallery__thumb .pdp-gallery__thumb-img,
.pdp-gallery__thumb .pdp-gallery__thumb-img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.pdp-gallery__main {
    flex: 1 1 auto;
    min-width: 0;
    border-radius: var(--pdp-radius);
    overflow: hidden;
    background: #f5f4f2;
}

/* La foto tiene le sue proporzioni invece di essere ritagliata in un quadrato.
   Le copertine dei corsi sono larghe e hanno il titolo scritto dentro: in un
   riquadro quadrato «LIVELLO 1 SILVER SALON» finiva tagliato a metà. Qui il
   riquadro segue la foto, quindi non si taglia niente e non avanza niente.

   Sul selettore vale la stessa nota delle miniature qui sopra: senza le due
   classi in più `.woocommerce img { height: auto }` vincerebbe comunque. */
.woocommerce .pdp-gallery__main .pdp-gallery__main-img,
.pdp-gallery__main .pdp-gallery__main-img {
    width: 100%;
    height: auto;
    display: block;
}

/* ── Summary ───────────────────────────────────────────────────────────── */
.product-single__summary {
    display: flex;
    flex-direction: column;
    gap: 18px;
}
/* WooCommerce e alcuni blocchi mettono margini verticali: li azzeriamo, la
   spaziatura la gestisce il gap del flex. */
.product-single__summary > * { margin: 0; }

.product-single__summary .wc-card__badges {
    position: static;
    display: flex;
    gap: 8px;
    flex-wrap: wrap;
    pointer-events: auto;
}
/* Sulla scheda prodotto i badge non stanno più sopra una foto ma accanto al
   titolo, dentro una pagina in bianco, nero e crema: l'ambra e il rosso pieni
   del negozio — pensati per farsi vedere da lontano su una griglia di
   fotografie — qui litigavano con tutto il resto. Stessa forma, contorno
   invece del pieno: si leggono, si distinguono fra loro e non gridano.
   Nel negozio restano come sono. */
.product-single__summary .wc-card__badge {
    font-size: 12px;
    padding: 6px 12px;
    background: none;
    border: 1px solid currentColor;
    color: var(--pdp-ink);
}
.product-single__summary .wc-card__badge--sale { color: var(--pdp-out); }
.product-single__summary .wc-card__badge--oos,
.product-single__summary .wc-card__badge--soon { color: var(--pdp-muted); }

.product-single__summary .product_title {
    font-size: clamp(24px, 3vw, 32px);
    font-weight: 800;
    line-height: 1.2;
    color: var(--pdp-ink);
}

/* Riga stock + recensioni */
.pdp-headmeta {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    flex-wrap: wrap;
}
.pdp-headmeta .wc-card__rating { margin: 0; }

.pdp-stock {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-size: 13px;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
}
.pdp-stock__dot {
    width: 9px;
    height: 9px;
    border-radius: 50%;
    background: currentColor;
    flex: 0 0 auto;
}
.pdp-stock--in  { color: var(--pdp-in); }
.pdp-stock--low { color: var(--pdp-low); }
.pdp-stock--out { color: var(--pdp-out); }
/* «Date in arrivo»: non è un problema, è un'attesa — quindi il tono della nota
   e non quello dell'allarme. */
.pdp-stock--soon { color: var(--pdp-muted); }

/* =============================================================================
   FOTO FERMA MENTRE SCORRE IL SUMMARY

   Vale solo dove il body porta `hornoi-sticky-gallery`, cioè Level Match,
   Masterclass e percorsi: le tre schede in cui la colonna di destra è più alta
   della foto, perché contiene l'elenco delle edizioni (o, sul Level Match, le
   date più la scelta). Su un prodotto qualunque è il contrario — la foto è più
   alta del summary — e lo sticky non avrebbe spazio in cui lavorare; la classe
   infatti non ci arriva, e quel layout resta intatto.
   Chi mette la classe: SingleProductController::add_body_class().

   Stava in level-match.css. È salita qui quando è servita anche alle altre due:
   due copie della stessa regola sarebbero divergite al primo ritocco.
   ========================================================================== */
@media (min-width: 992px) {
    /* Dove si ferma la foto: sotto l'header fisso, più uno stacco di 30px.
       L'altezza dell'header la misura assets/js/header-spacer.js. */
    body.hornoi-sticky-gallery .product-single__container {
        --pdp-sticky-top: calc(var(--header-height, 83px) + 30px);
    }

    /* Da loggati l'header non parte da zero: la barra di WordPress lo spinge
       giù di 30px (header.css), quindi il suo bordo inferiore sta 30px più in
       basso e senza questa riga la foto ci finisce sotto — che è esattamente
       come si vede la pagina mentre la si sta costruendo. */
    body.hornoi-sticky-gallery.admin-bar .product-single__container {
        --pdp-sticky-top: calc(var(--header-height, 83px) + 60px);
    }

    body.hornoi-sticky-gallery .product-single__container > .row {
        align-items: flex-start;
    }

    /* `align-self: flex-start` è la riga che rende possibile lo sticky: una
       colonna Bootstrap è `stretch`, cioè alta quanto la riga, e una cosa alta
       quanto il suo contenitore non ha spazio in cui restare ferma. */
    body.hornoi-sticky-gallery .product-single__gallery-col {
        position: sticky;
        top: var(--pdp-sticky-top);
        align-self: flex-start;
    }

    /* Una foto più alta della finestra, bloccata in cima, mostrerebbe sempre e
       solo la sua metà di sopra: la rimpiccioliamo quanto basta a starci tutta,
       lasciando sotto lo stesso stacco che ha sopra. `contain` e non `cover`
       perché queste copertine hanno spesso il titolo scritto dentro. */
    body.hornoi-sticky-gallery .pdp-gallery__main .pdp-gallery__main-img {
        max-height: calc(100vh - var(--pdp-sticky-top) - 30px);
        object-fit: contain;
    }
}

/* ── Descrizione con toggle ────────────────────────────────────────────── */
.pdp-desc {
    display: flex;
    align-items: flex-start;
    gap: 12px;
}
.pdp-desc__text {
    flex: 1 1 auto;
    min-width: 0;
    color: var(--pdp-muted);
    line-height: 1.55;
    font-size: 15px;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.pdp-desc__text p { margin: 0 0 .5em; }
.pdp-desc__text > *:last-child { margin-bottom: 0; }

.pdp-desc.is-open .pdp-desc__text {
    -webkit-line-clamp: unset;
    overflow: visible;
}

.pdp-desc__toggle {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border: 1px solid var(--pdp-line);
    border-radius: 50%;
    background: #fff;
    color: var(--pdp-ink);
    cursor: pointer;
    transition: background .2s ease, transform .2s ease;
}
.pdp-desc__toggle:hover { background: #f5f5f5; }
.pdp-desc.is-open .pdp-desc__toggle { transform: rotate(180deg); }

/* ── Prezzo ─────────────────────────────────────────────────────────────────
   Stesso markup dello snippet (ProductCardController::price_html) → riusa le
   classi .wc-card__price* di product-card.css, font display compreso. Qui la
   dimensione è quella della scheda prodotto e non quella della card. */
.woocommerce div.product .pdp-price .wc-card__price.price,
.pdp-price .wc-card__price {
    padding-right: 0;
    min-height: 0;
    font-size: 24px;
}
.pdp-price .wc-card__price-now { color: var(--pdp-ink); }
.pdp-price .wc-card__price-was {
    font-size: 16px;
    color: var(--pdp-muted);
}
/* Nero pieno come i prezzi del resto del sito (percorsi, livelli in home):
   numero grande in inchiostro, prezzo vecchio grigio barrato, e la percentuale
   accanto nello stesso nero — niente pastiglia e niente ambra del negozio. */
.pdp-price .wc-card__discount {
    color: var(--pdp-ink);
    font-size: 15px;
    font-weight: 700;
    letter-spacing: .02em;
}

/* ── Risparmio del pacchetto ───────────────────────────────────────────────
   Solo sulla scheda di un bundle, sotto al prezzo: percentuale, somma dei corsi
   presi uno per uno (barrata) e quanto si tiene in tasca a prenderli insieme.
   Stesse parole e stesso verde della card in vetrina su «Percorsi»
   (.mca-bundle__saving), così chi arriva da lì ritrova la stessa riga.
   Markup: SingleProductController::render_bundle_saving(). */
.product-single__summary .pdp-bundle-saving {
    /* Il summary è un flex con gap 18px, pensato per staccare blocchi diversi.
       Questo non è un blocco nuovo: è la seconda riga del prezzo, e va letto
       attaccato alla cifra a cui si riferisce. */
    margin-top: -10px;
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: 2px 10px;
}
.pdp-bundle-saving__badge {
    font-size: 15px;
    font-weight: 700;
    letter-spacing: .02em;
    color: var(--pdp-ink);
}
.pdp-bundle-saving__full {
    font-size: 15px;
    color: var(--pdp-muted);
}
.pdp-bundle-saving__full del { text-decoration: line-through; }
/* A capo da solo: la frase spiega il confronto, e spezzata a metà riga accanto
   ai numeri si leggerebbe come una didascalia del prezzo barrato. */
.pdp-bundle-saving__text {
    flex: 0 0 100%;
    margin: 0;
    font-size: 13px;
    font-weight: 500;
    color: var(--mca-done, #17845a);
}
.pdp-bundle-saving__text .amount,
.pdp-bundle-saving__text bdi { font-weight: 600; }

/* ── Quantità + aggiungi al carrello ───────────────────────────────────── */
.product-single__summary form.cart {
    display: flex;
    align-items: center;
    gap: 14px;
    flex-wrap: wrap;
    margin: 0;
}
.product-single__summary form.cart .quantity { margin: 0; }

/* Stepper quantità: stesso stile dei pulsanti circolari del minicart
   (.minicart__step), scalato per stare accanto al bottone carrello. */
.product-single__summary form.cart .quantity.pdp-qty {
    display: inline-flex;
    align-items: center;
    gap: 12px;
}
.pdp-qty__btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    padding: 0;
    background: none;
    border: 1px solid rgba(0, 0, 0, .25);
    border-radius: 50%;
    color: var(--pdp-ink);
    cursor: pointer;
    transition: background .15s ease, border-color .15s ease;
}
.pdp-qty__btn:hover {
    background: rgba(0, 0, 0, .05);
    border-color: rgba(0, 0, 0, .5);
}
.product-single__summary form.cart .quantity.pdp-qty input.qty {
    width: 44px;
    padding: 0;
    border: 0;
    background: none;
    color: var(--pdp-ink);
    font-size: 16px;
    font-weight: 600;
    text-align: center;
    -moz-appearance: textfield;
    appearance: textfield;
}
.quantity.pdp-qty input.qty::-webkit-outer-spin-button,
.quantity.pdp-qty input.qty::-webkit-inner-spin-button {
    -webkit-appearance: none;
    margin: 0;
}

.product-single__summary form.cart .single_add_to_cart_button {
    flex: 1 1 auto;
    min-width: 220px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    padding: 16px 24px;
    background: var(--pdp-ink);
    color: #fff;
    border: 0;
    border-radius: 12px;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
    cursor: pointer;
    transition: background .2s ease;
}
.product-single__summary form.cart .single_add_to_cart_button:hover { background: #000; }

/* ── Corso bloccato dai prerequisiti ───────────────────────────────────── */
/* Prende il posto del modulo d'acquisto (CoursePrerequisiteController): niente
   carrello finché il livello precedente non è superato, ma la strada per
   arrivarci è lì, cliccabile. */
.wc-locked-course {
    padding: 20px 24px;
    background: #f5f4f2;
    border-radius: var(--pdp-radius, 16px);
    border: 1px solid var(--pdp-line, #ececec);
}
.wc-locked-course p {
    margin: 0 0 14px;
    color: var(--pdp-muted, #6b6b6b);
    line-height: 1.55;
}
.woocommerce .wc-locked-course a.button,
.wc-locked-course .button {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    padding: 14px 22px;
    background: var(--pdp-ink, #111);
    color: #fff;
    border-radius: 12px;
    font-weight: 700;
    text-decoration: none;
}
.woocommerce .wc-locked-course a.button:hover,
.wc-locked-course .button:hover { background: #000; color: #fff; }

/* ── Box spedizioni / reso ─────────────────────────────────────────────── */
.pdp-info {
    display: flex;
    flex-wrap: wrap;
    gap: 18px 28px;
    padding: 20px 24px;
    background: #f5f4f2;
    border-radius: var(--pdp-radius);
    margin-top: 4px;
}
.pdp-info__item {
    display: flex;
    align-items: center;
    gap: 12px;
    flex: 1 1 180px;
}
.pdp-info__item .icon { color: var(--pdp-ink); flex: 0 0 auto; }
.pdp-info__text {
    font-size: 12px;
    font-weight: 700;
    letter-spacing: .03em;
    text-transform: uppercase;
    line-height: 1.35;
    color: var(--pdp-ink);
}

/* ── Recensioni (sezione a sé, sopra le tab) ───────────────────────────── */
/* La sezione recensioni è quella della home (template-parts/sections/reviews.php):
   fondo, spaziature e larghezza se li porta dietro da section-reviews.css. Qui
   resta solo lo stacco dalla scheda qui sopra. */
.product-single__reviews { margin-top: 72px; }

/* ── Sezione sotto (up-sell, se ce ne sono) ────────────────────────────── */
.product-single__extra { margin-top: 72px; }

/* Up-sell e prodotti correlati: più aria attorno e titoli centrati. */
.product-single__extra .up-sells,
.product-single__extra .related {
    margin-top: 80px;
}
.product-single__extra .up-sells > h2,
.product-single__extra .related > h2 {
    margin: 0 0 36px;
    text-align: center;
    font-size: 26px;
    line-height: 1.25;
    font-weight: 700;
    color: var(--pdp-ink);
}

/* ── Responsive ────────────────────────────────────────────────────────── */
@media (max-width: 767.98px) {
    .pdp-gallery {
        flex-direction: column-reverse;
    }
    .pdp-gallery__thumbs {
        flex-direction: row;
        width: 100%;
        flex: 0 0 auto;
        overflow-x: auto;
    }
    .pdp-gallery__thumb {
        flex: 0 0 64px;
        width: 64px;
    }
    .product-single__summary form.cart .single_add_to_cart_button { min-width: 0; width: 100%; }

}

/* =========================================================================
   LEVEL MATCH — le due scelte sopra al carrello
   Markup: src/Controllers/Woo/LevelMatchCartController.php

   Un blocco riquadrato prima del bottone: sono scelte obbligatorie, e devono
   leggersi come parte dell'acquisto, non come una nota a margine. Chi arriva
   qui sta comprando un esame, non un prodotto da scaffale — la fretta va
   rallentata apposta.
   ========================================================================= */

.product-single .mca-lmbuy {
    margin: 0 0 22px;
    padding: 20px 22px 6px;
    border: 1px solid var(--pdp-line);
    border-radius: var(--pdp-radius);
    background: #fbfaf9;
}

.product-single .mca-lmbuy__block { margin: 0 0 18px; border: 0; padding: 0; }

.product-single .mca-lmbuy__legend {
    display: block;
    float: none;
    width: auto;
    margin: 0 0 10px;
    padding: 0;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: .16em;
    text-transform: uppercase;
    color: var(--pdp-muted);
}

/* ── La scelta sul costo ───────────────────────────────────────────────── */
.product-single .mca-lmbuy__choice {
    display: flex;
    align-items: flex-start;
    gap: 11px;
    padding: 13px 14px;
    border: 1px solid var(--pdp-line);
    border-radius: 12px;
    background: #fff;
    cursor: pointer;
    transition: border-color .2s ease, box-shadow .2s ease;
}
.product-single .mca-lmbuy__choice + .mca-lmbuy__choice { margin-top: 9px; }
.product-single .mca-lmbuy__choice:hover { border-color: #cfcbc6; }

/* `:has()` non è indispensabile: dove manca resta il bordo del hover, e la
   scelta si vede comunque dal pallino selezionato. */
.product-single .mca-lmbuy__choice:has(input:checked) {
    border-color: var(--pdp-ink);
    box-shadow: inset 0 0 0 1px var(--pdp-ink);
}
.product-single .mca-lmbuy__choice:focus-within { outline: 2px solid var(--pdp-accent); outline-offset: 2px; }

.product-single .mca-lmbuy__choice input { margin-top: 4px; flex-shrink: 0; }
.product-single .mca-lmbuy__choice span { display: block; }
.product-single .mca-lmbuy__choice strong {
    display: block;
    font-size: 15px;
    color: var(--pdp-ink);
}
.product-single .mca-lmbuy__choice em {
    display: block;
    margin-top: 4px;
    font-style: normal;
    font-size: 13.5px;
    line-height: 1.55;
    color: var(--pdp-muted);
}

/* ── La data ───────────────────────────────────────────────────────────── */
.product-single .mca-lmbuy__select {
    width: 100%;
    padding: 12px 14px;
    border: 1px solid var(--pdp-line);
    border-radius: 12px;
    background: #fff;
    font-size: 15px;
    color: var(--pdp-ink);
}
.product-single .mca-lmbuy__select:focus { outline: 2px solid var(--pdp-accent); outline-offset: 1px; }
.product-single .mca-lmbuy__select option:disabled { color: #b3b3b3; }

.product-single .mca-lmbuy__note {
    margin: 0 0 16px;
    font-size: 13px;
    line-height: 1.6;
    color: var(--pdp-muted);
}

/* ── Quando comprare non si può ────────────────────────────────────────── */
.product-single .mca-lmbuy__blocked {
    margin: 0 0 22px;
    padding: 20px 22px;
    border: 1px solid var(--pdp-line);
    border-radius: var(--pdp-radius);
    background: #fbfaf9;
}
.product-single .mca-lmbuy__blocked p {
    margin: 0 0 14px;
    font-size: 14.5px;
    line-height: 1.6;
    color: var(--pdp-muted);
}
.product-single .mca-lmbuy__blocked p:last-child { margin-bottom: 0; }

/* =========================================================================
   EDIZIONI — la data e i posti, sopra al carrello
   Markup: src/Controllers/Woo/SessionCartController.php

   Vale per i corsi e per le Masterclass: si sceglie la partenza a cui
   iscriversi, e le due cose hanno la stessa forma perché sono lo stesso gesto.
   Un pacchetto che vende due corsi ripete il blocco, uno per corso.

   Stessa impaginazione delle scelte del Level Match, perché è la stessa cosa:
   una decisione obbligatoria che sta dentro l'acquisto, non accanto. Qui però
   ogni riga porta anche un numero — i posti rimasti — e quel numero è il
   motivo per cui si sceglie una data invece di un'altra: sta a destra, alto
   quanto la data, e non in una nota sotto.
   ========================================================================= */

.product-single .mca-mcbuy {
    margin: 0 0 22px;
    padding: 20px 22px;
    border: 1px solid var(--pdp-line);
    border-radius: var(--pdp-radius);
    background: #fbfaf9;
}

.product-single .mca-mcbuy__legend {
    display: block;
    float: none;
    width: auto;
    margin: 0 0 12px;
    padding: 0;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: .16em;
    text-transform: uppercase;
    color: var(--pdp-muted);
}

.product-single .mca-mcbuy__list { display: flex; flex-direction: column; gap: 9px; }

/* La nota del pacchetto: perché la data da scegliere è una sola. Sta SOTTO le
   date e non sopra, di proposito — chi arriva qui vuole prima vedere quando si
   parte; la spiegazione serve nel momento in cui si accorge che di elenchi ce
   n'è uno solo, non prima. */
.product-single .mca-mcbuy__note {
    margin: 14px 0 0;
    padding-top: 14px;
    border-top: 1px solid var(--pdp-line);
    font-size: 13px;
    line-height: 1.6;
    color: var(--pdp-muted);
}

.product-single .mca-mcbuy__date {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 13px 14px;
    border: 1px solid var(--pdp-line);
    border-radius: 12px;
    background: #fff;
    cursor: pointer;
    transition: border-color .2s ease, box-shadow .2s ease;
}
.product-single .mca-mcbuy__date:hover { border-color: #cfcbc6; }

/* `:has()` non è indispensabile: dove manca resta il pallino selezionato. */
.product-single .mca-mcbuy__date:has(input:checked) {
    border-color: var(--pdp-ink);
    box-shadow: inset 0 0 0 1px var(--pdp-ink);
}
.product-single .mca-mcbuy__date:focus-within { outline: 2px solid var(--pdp-accent); outline-offset: 2px; }

/* Una data piena resta leggibile: serve a far capire che l'edizione esiste ed
   è andata via, non a essere ignorata. Sbiadirla del tutto la nasconderebbe. */
.product-single .mca-mcbuy__date.is-full {
    cursor: not-allowed;
    background: #f6f5f4;
    border-color: var(--pdp-line);
}
.product-single .mca-mcbuy__date.is-full:hover { border-color: var(--pdp-line); }
.product-single .mca-mcbuy__date.is-full .mca-mcbuy__when { text-decoration: line-through; }

.product-single .mca-mcbuy__date input { flex-shrink: 0; margin: 0; }

.product-single .mca-mcbuy__body { flex: 1; min-width: 0; }
.product-single .mca-mcbuy__when {
    display: block;
    font-size: 15px;
    font-weight: 500;
    color: var(--pdp-ink);
}
.product-single .mca-mcbuy__venue {
    display: block;
    margin-top: 3px;
    font-size: 13px;
    color: var(--pdp-muted);
}

.product-single .mca-mcbuy__seats {
    flex-shrink: 0;
    padding: 5px 11px;
    border-radius: 100px;
    background: rgba(23, 132, 90, .1);
    font-size: 11.5px;
    font-weight: 600;
    letter-spacing: .04em;
    color: #17845a;
    white-space: nowrap;
}
.product-single .mca-mcbuy__seats.is-full {
    background: rgba(14, 14, 14, .07);
    color: var(--pdp-muted);
}

/* ── Quando non c'è più un posto da vendere ────────────────────────────── */
.product-single .mca-mcbuy__blocked {
    margin: 0 0 22px;
    padding: 20px 22px;
    border: 1px solid var(--pdp-line);
    border-radius: var(--pdp-radius);
    background: #fbfaf9;
}
.product-single .mca-mcbuy__blocked p {
    margin: 0;
    font-size: 14.5px;
    line-height: 1.6;
    color: var(--pdp-muted);
}
