/* Ad slots — Lunatika Factory (Fase 2B · blocco AdSlot).
   Fedeltà al demo: le regole base/light di .ad-slot/.ad-leader/.ad-sidebar/
   .ad-inline sono INCOLLATE da kit.css (lines ~737-749, 900, 1025-1028) e dai
   wrapper di contesto (podcast.css .pod-top-ad-wrap, article.css .art-inline-ad).
   Token via tokens-demo-alias.css. Aggiunte Lunatika: i wrapper .lf-ad-wrap--*
   di posizione e lo stato .is-filled (sponsor/AdSense reali, no box tratteggiato).
   Caricato solo dove un template cabla uno slot (inc/enqueue.php). */

/* ======== BOX (placeholder demo · incollato da kit.css) ======== */
.ad-slot {
  background: rgba(var(--accent-2-rgb), 0.04);
  border: 1px dashed rgba(var(--accent-2-rgb), 0.15);
  border-radius: var(--r-md);
  display: flex; align-items: center; justify-content: center;
  color: var(--fg-muted); font-size: 11px; font-weight: 500;
  letter-spacing: 0.08em; text-transform: uppercase;
  text-align: center;
}
.ad-leader { height: 100px; margin: 0 var(--sec-pad-x); }
.ad-sidebar { height: 280px; position: sticky; top: 90px; }
.ad-inline { height: 100px; }

/* ======== WRAPPER DI POSIZIONE (Lunatika) ======== */
/* Leaderboard in cima all'episodio — da podcast.css .pod-top-ad-wrap. */
.lf-ad-wrap--leaderboard {
  padding: 24px clamp(20px, 6vw, 100px) 0;
  max-width: 1140px; margin: 0 auto;
}
.lf-ad-wrap--leaderboard .ad-leader { margin: 0; }

/* In-article — da article.css .art-inline-ad (margini verticali, centrato). */
.lf-ad-wrap--in-article {
  margin: 36px auto;
  max-width: 760px;
  padding: 0 clamp(20px, 6vw, 40px);
}
.lf-ad-wrap--in-article .ad-inline { margin: 0; }

/* Pre-footer — leaderboard a tutta pagina, staccato dal footer. */
.lf-ad-wrap--pre-footer {
  padding: 8px clamp(20px, 6vw, 100px) 48px;
  max-width: 1140px; margin: 0 auto;
}
.lf-ad-wrap--pre-footer .ad-leader { margin: 0; }

/* Sidebar — slot sticky in colonna (per pagine future con rail reale). */
.lf-ad-wrap--sidebar .ad-sidebar { margin: 0; }

/* ======== STATO RIEMPITO: sponsor / AdSense (Lunatika) ======== */
/* Niente cornice tratteggiata né label: si mostra la creatività reale. */
.ad-slot.is-filled {
  background: transparent;
  border: 0;
  padding: 0;
  overflow: hidden;
  text-transform: none;
  letter-spacing: normal;
}
.ad-slot.is-filled .lf-ad__link {
  display: inline-flex; align-items: center; justify-content: center;
  max-width: 100%; max-height: 100%;
}
.ad-slot.is-filled .lf-ad__img {
  display: block;
  max-width: 100%; max-height: 100%;
  width: auto; height: auto;
  object-fit: contain;
}
.ad-slot.is-filled.lf-ad--adsense { display: block; }
.ad-slot.is-filled .lf-ad__adsense { display: block; width: 100%; }

/* ======== LIGHT THEME (incollato da kit.css) ======== */
[data-theme="light"] .ad-slot {
  background: rgba(143, 98, 64, 0.05);
  border-color: rgba(143, 98, 64, 0.18);
}
[data-theme="light"] .ad-slot.is-filled { background: transparent; border: 0; }

/* ======== RESPONSIVE (incollato da kit.css @768) ======== */
@media (max-width: 768px) {
  .ad-leader { margin: 0 16px; height: 80px; }
  .lf-ad-wrap--leaderboard .ad-leader,
  .lf-ad-wrap--pre-footer .ad-leader { margin: 0; }
}

/* ===========================================================================
 * UNITÀ ADSENSE MANUALI — etichetta, riserva di spazio e stati dello slot
 * ---------------------------------------------------------------------------
 * ETICHETTA: per le ad unit Google le uniche diciture ammesse dalla policy sono
 * "Pubblicità" e "Link sponsorizzati". Lo standard Lunatika e' **Pubblicità**,
 * una sola, su tutti i placement. Dove il tema porta una sua etichetta legacy
 * ("Inserzione", dal mockup) quella viene soppressa a monte per gli slot
 * AdSense: resta valida per gli sponsor diretti, che non sono unita' Google.
 *
 * RENDIBILITA' — vincolo AdSense, non estetica: `data-ad-status` esiste solo
 * DOPO che la richiesta e' terminata. L'<ins> non va quindi nascosto in
 * partenza (display:none, 0x0) in attesa di "filled": senza larghezza e senza
 * possibilita' di rendering la richiesta puo' fallire o restare inaffidabile.
 * Qui l'unita' nasce SEMPRE misurabile: larghezza piena e min-height riservata.
 *
 * RISERVA DI SPAZIO (CLS): lo spazio si riserva con `min-height` — mai con
 * `height` fissa, che taglierebbe una creativita' responsive piu' alta — ed e'
 * invisibile: niente bordo, niente sfondo, niente etichetta. Chi visita non
 * vede un riquadro vuoto, vede spazio bianco che l'annuncio riempie senza
 * spostare il testo.
 *
 * STATI (`data-ad-state` sul wrapper, scritto dallo script minimo accanto
 * all'unita'; le regole :has() restano come rete se quello script non gira):
 *   assente           → richiesta in corso: spazio riservato, nessuna etichetta.
 *   filled            → annuncio servito: etichetta visibile, altezza all'annuncio.
 *   unfilled          → nessun annuncio: collasso DOPO la risposta.
 *   unfill-optimized  → idem.
 *
 * Si collassa SOLO su una risposta esplicita. Non si deduce "niente annuncio"
 * dal tempo trascorso: Google non dichiara una latenza massima, e un `filled`
 * in ritardo su uno slot gia' chiuso sarebbe un annuncio servito e invisibile.
 * Se il consenso non permette la richiesta, l'unita' non va emessa affatto —
 * decisione del cancello del consenso, non di un cronometro.
 * ======================================================================== */

/* Etichetta: presente nel DOM e con lo spazio GIA' riservato in pending
   (`visibility`, non `display`), così quando l'annuncio arriva non spinge giù
   il testo di 24px. Non e' un problema che occupi spazio a vuoto: se la
   risposta dice "niente annuncio" collassa l'intero wrapper, etichetta
   compresa. Mai cliccabile. */
.lf-ad-wrap .lf-ad__label {
  display: block;
  visibility: hidden;
  font-family: var(--lf-font-label, inherit);
  font-size: 11px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--lf-muted, #9a8f95);
  margin: 0 0 6px;
  pointer-events: none;
}

/* Contenitore dell'unita': misurabile e invisibile finche' non c'e' annuncio. */
.lf-ad--adsense-wrap .ad-slot.lf-ad--adsense {
  background: transparent;
  border: 0;
  height: auto;          /* mai un'altezza fissa: taglierebbe le creative alte */
  min-height: 100px;     /* spazio riservato di default (in-article / leaderboard) */
  width: 100%;
}
.lf-ad--adsense-wrap .lf-ad__adsense { display: block; width: 100%; }

/* Riserva per posizione, sulle geometrie del mockup. */
.lf-ad-wrap--sidebar.lf-ad--adsense-wrap .ad-slot.lf-ad--adsense { min-height: 250px; }

/* ANNUNCIO SERVITO: etichetta visibile, l'altezza la detta l'annuncio. */
.lf-ad--adsense-wrap[data-ad-state="filled"] .lf-ad__label,
.lf-ad--adsense-wrap:has(ins[data-ad-status="filled"]) .lf-ad__label {
  visibility: visible;
}
.lf-ad--adsense-wrap[data-ad-state="filled"] .ad-slot.lf-ad--adsense,
.lf-ad--adsense-wrap:has(ins[data-ad-status="filled"]) .ad-slot.lf-ad--adsense {
  min-height: 0;
}

/* NESSUN ANNUNCIO (dopo la risposta) o NESSUNA RISPOSTA: collasso completo. */
.lf-ad--adsense-wrap[data-ad-state="unfilled"],
.lf-ad--adsense-wrap[data-ad-state="unfill-optimized"],
.lf-ad--adsense-wrap:has(ins[data-ad-status="unfilled"]),
.lf-ad--adsense-wrap:has(ins[data-ad-status="unfill-optimized"]) {
  display: none !important;
}

/* Segnaposto di sviluppo (solo ambiente locale in debug). */
.lf-ad--placeholder .ad-slot {
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  font-size: 11px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.lf-ad--placeholder .lf-ad__label { display: block; visibility: visible; }

@media (max-width: 768px) {
  .lf-ad-wrap .lf-ad__label { font-size: 10px; }
}

/* ---------------------------------------------------------------------------
 * ARCHIVIO SU MOBILE — l'unita' non eredita la geometria stretta da sidebar.
 * Sotto i 1024px la colonna laterale del Taccuino diventa una fascia: qui lo
 * slot prende la larghezza naturale del contenitore, con i gutter normali, e
 * smette di sembrare un rettangolo isolato incastrato al centro.
 * ------------------------------------------------------------------------ */
@media (max-width: 1024px) {
  .mag-side-ad { max-width: none; margin: 0; }
  .mag-side-ad .lf-ad-wrap--sidebar .ad-slot { height: auto; }
  /* 250px = altezza tipica di un rettangolo responsive a questa larghezza:
     riservarne meno rimetterebbe un salto quando l'annuncio arriva. */
  .mag-side-ad .lf-ad-wrap--sidebar.lf-ad--adsense-wrap .ad-slot.lf-ad--adsense { min-height: 250px; }
  .mag-side-ad .lf-ad-wrap--sidebar.lf-ad--placeholder .ad-slot { min-height: 160px; height: auto; }
}
