/* =========================================================
   LEONIO Core CSS : V0.2
   Shared design tokens + components for ALL LEONIO products
   Reference: 03 - Design & Visuels/DESIGN.md
   ========================================================= */

/* ---------- DESIGN TOKENS ---------- */
:root {
  /* Neutrals */
  --cream:          #faf9f7;
  --black:          #1a1816;
  --white:          #fff;
  --warm-silver:    #9f9b93;
  --warm-charcoal:  #55534e;
  --dark-charcoal:  #333;
  --oat:            #dad4c8;
  --oat-light:      #eee9df;

  /* Palette LEONIO : 3 couleurs + accent B2B */
  --orange:         #E8702A;
  --orange-light:   #fdf0e8;
  --orange-hover:   #d4601f;
  --teal:           #1CBCB4;
  --teal-light:     #e6f8f7;
  --teal-hover:     #14a39c;
  --navy:           #1A365D;
  --navy-light:     #eef2f7;
  --navy-hover:     #152d4e;

  /* Status (sober, derived from palette) */
  --success:        var(--teal);
  --success-light:  var(--teal-light);
  --warning:        #b8860b;
  --warning-light:  #fff8e1;
  --danger:         #c0392b;
  --danger-light:   #fbe9e7;

  /* Shadows */
  --shadow-clay:    rgba(0,0,0,.10) 0 1px 1px,
                    rgba(0,0,0,.04) 0 -1px 1px inset,
                    rgba(0,0,0,.05) 0 -.5px 1px;
  --shadow-hover:   rgb(26,24,22) -5px 5px;
  --shadow-soft:    0 8px 24px rgba(0,0,0,.06);

  /* Radius scale */
  --r-sm:  12px;
  --r-md:  22px;
  --r-lg:  28px;
  --r-xl:  40px;
  --r-pill: 999px;
}

/* ---------- RESET & BASE ---------- */
*, *::before, *::after { box-sizing: border-box; }

html, body { margin: 0; padding: 0; }

body {
  font-family: 'Plus Jakarta Sans', system-ui, -apple-system, Arial, sans-serif;
  font-size: 16px;
  font-weight: 400;
  color: var(--warm-charcoal);
  background: var(--cream);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  line-height: 1.5;
  overflow-x: hidden;          /* aucune scrollbar horizontale parasite */
}

h1, h2, h3, h4, h5, h6 {
  font-family: 'Fraunces', Georgia, serif;
  font-weight: 500;
  color: var(--black);
  letter-spacing: -0.01em;
  margin: 0;
}

h1 { font-size: clamp(34px, 5vw, 54px); font-weight: 400; letter-spacing: -0.025em; }
h2 { font-size: clamp(26px, 3.5vw, 36px); font-weight: 500; }
h3 { font-size: 22px; font-weight: 500; }

em { font-style: italic; color: var(--orange); }
em.teal { color: var(--teal); }

p { margin: 0; }

a { color: var(--black); text-decoration: none; }
a:hover { color: var(--orange); }

button { font-family: inherit; cursor: pointer; }

img { max-width: 100%; display: block; }

/* ---------- TYPOGRAPHY HELPERS ---------- */
.eyebrow {
  font-family: 'Fraunces', Georgia, serif;
  font-style: italic;
  font-weight: 700;
  font-size: 16px;
  color: var(--teal);
  letter-spacing: -0.2px;
  margin-bottom: 8px;
}

.label {
  font-family: var(--font-body, 'Plus Jakarta Sans', system-ui, sans-serif);
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.8px;
  color: var(--warm-silver);
  display: block;
  margin-bottom: 8px;
}

.hint {
  font-size: 13px;
  color: var(--warm-silver);
  margin-top: 6px;
}

.mono { font-family: var(--font-body, 'Plus Jakarta Sans', system-ui, sans-serif); }

/* ---------- LOGO ----------
   RÈGLE LEONIO : le logo ne descend JAMAIS sous 64px.
   ----------------------------------------------------- */
.leonio-logo {
  display: block;
  width: auto;
  height: 40px;            /* baseline mandatory */
  min-height: 40px;
  object-fit: contain;
}
.leonio-logo--login   { height: 56px;  min-height: 56px; margin: 0 auto 24px; }
.leonio-logo--footer  { height: 32px; min-height: 32px }
.leonio-logo--hero    { height: 80px; min-height: 80px }

.leonio-fallback {
  display: none;
  font-family: 'Fraunces', Georgia, serif;
  font-weight: 700;
  font-style: italic;
  font-size: 28px;
  color: var(--black);
}

/* ---------- LAYOUT : APP SHELL ---------- */
.topnav {
  background: var(--white);
  border-bottom: 1px solid var(--oat);
  padding: 12px 32px;        /* enough room for the 64px logo */
  min-height: 88px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  position: sticky;
  top: 0;
  z-index: 30;
  box-shadow: rgba(0,0,0,0.04) 0px 2px 6px;
  overflow: visible;          /* allow logo overflow if needed */
}
.topnav-left  { display: flex; align-items: center; gap: 16px; }
.topnav-right { display: flex; align-items: center; gap: 12px; }

.topnav-brand {
  font-family: 'Fraunces', Georgia, serif;
  font-style: italic;
  font-weight: 600;
  font-size: 18px;
  color: var(--black);
  padding-left: 16px;
  border-left: 1px solid var(--oat);
}

.topnav-event {
  font-family: var(--font-body, 'Plus Jakarta Sans', system-ui, sans-serif);
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 0.8px;
  color: var(--warm-charcoal);
  background: var(--oat-light);
  padding: 6px 12px;
  border-radius: var(--r-pill);
}

.content {
  max-width: 1100px;
  margin: 0 auto;
  padding: 32px 24px 80px;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 24px;
}
@media (max-width: 768px) {
  .content { grid-template-columns: 1fr; padding: 20px 16px 60px; }

  /* ── Topnav mobile : compact, pas de wrap, tout tient sur une ligne ── */
  .topnav {
    padding: 10px 14px;
    min-height: 60px;
    gap: 8px;
    width: 100%;
    max-width: 100vw;
  }
  .topnav-left  { gap: 10px; min-width: 0; flex: 1 1 auto; overflow: hidden; }
  .topnav-right { gap: 6px; flex-shrink: 0; }
  .topnav-event { display: none; }
  .topnav-brand {
    font-size: 15px;
    padding-left: 10px;
    border-left-width: 1px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    min-width: 0;
  }
  .leonio-logo { height: 32px; min-height: 32px; }
  .badge-live { padding: 4px 8px; font-size: 11px; }
  .topnav .btn { padding: 8px 12px; font-size: 13px; }
  .topnav .btn-sm { padding: 6px 10px; font-size: 12px; }
}

/* ── Téléphones moyens : on relâche un peu en cachant le badge "En direct" ── */
@media (max-width: 480px) {
  .topnav .badge-live { font-size: 0; padding: 5px; gap: 0; }
  .topnav .badge-live::before { width: 8px; height: 8px; }
  .topnav-brand { font-size: 14px; padding-left: 8px; }
  .topnav .btn-sm { padding: 6px 10px; font-size: 12px; }
}

/* ── Petits téléphones : on retire le séparateur de marque ── */
@media (max-width: 380px) {
  .topnav { padding: 8px 12px; }
  .topnav-left { gap: 8px; }
  .topnav-brand {
    border-left: none;
    padding-left: 4px;
    font-size: 13px;
  }
  .leonio-logo { height: 28px; min-height: 28px; }
  .topnav .btn-sm { padding: 6px 8px; font-size: 11px; }
}
.full-width { grid-column: 1 / -1; }

.admin-footer {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  padding: 24px 16px 40px;
  color: var(--warm-silver);
  font-size: 13px;
}
/* Footer "Propulsé par" sur les admins : logo discret (18px, opacity 0.7).
   Override scoped pour ne pas casser les footers de login (qui restent
   marketing-friendly à 32px). Cf. règle branding CLAUDE.md. */
.admin-footer .leonio-logo,
.admin-footer .leonio-logo--footer {
  height: 18px !important;
  min-height: 18px !important;
  opacity: 0.7;
}

/* Footer "Propulsé par" sur les ÉCRANS LIVE + PAGES GUEST (projetées sur
   grand écran TV/projecteur, ou affichées sur les téléphones des invités) :
   logo TRÈS discret (12px, opacity 0.55). Le branding LEONIO doit s'effacer
   face à l'événement client. Override couvre les conventions de classe des
   différents produits (Spotlight reveal, Mur screen, Vote Live screen+guest,
   Mini-Jeux screen, Livre d'Or). !important pour battre le min-height: 40px
   global de .leonio-logo. Aussi matche les <img> SANS class qu'on trouve
   dans certains markups (Vote Live guest). Cf. règle branding CLAUDE.md. */
#brand-footer .leonio-logo,
#brand-footer img,
.screen-footer .leonio-logo,
.screen-footer-leonio .leonio-logo,
.screen-footer .leonio-logo-pastille,
.screen-footer-leonio .leonio-logo-pastille,
.scr-footer .leonio-logo,
.scr-footer-brand .leonio-logo,
.scr-footer-brand .leonio-logo-pastille,
.scr-footer-brand img,
.guest-footer .leonio-logo,
.guest-footer img,
.guest-footer-logo img,
footer.bottom .leonio-logo,
footer.bottom img {
  height: 12px !important;
  min-height: 12px !important;
  width: auto !important;
  opacity: 0.55;
  vertical-align: middle;
}

/* ────────────────────────────────────────────────────────────────────────
   PASTILLES TOPNAV : PIN + SLUG
   Pattern unifié cross-produits (Spotlight, Mur, Tombola, Photobooth, etc.)
   - .nav-pin  : pastille jaune lemon (PIN organisateur, click → copie)
   - .nav-slug : pastille beige oat   (slug événement, click → copie)
   À placer dans `<div class="topnav-right">`. Voir admin.html de chaque
   produit pour le markup et le câblage JS.
   ──────────────────────────────────────────────────────────────────────── */
.nav-pin,
.nav-slug {
  display: flex; align-items: center; gap: 8px;
  padding: 6px 14px;
  border-radius: 100px;
  cursor: pointer;
  transition: transform 0.15s, box-shadow 0.15s;
  white-space: nowrap;
}
.nav-pin {
  background: linear-gradient(135deg, #fff8e8 0%, #fffdf0 100%);
  border: 1.5px solid var(--lemon-500, #fbbd41);
}
.nav-slug {
  background: var(--oat-light, #eee9df);
  border: 1.5px solid var(--oat, #dad4c8);
}
.nav-pin:hover,
.nav-slug:hover { transform: translateY(-1px); box-shadow: rgba(0,0,0,0.08) 0 4px 10px; }
.nav-pin-label,
.nav-slug-label {
  font-size: 9px; font-weight: 700; letter-spacing: 1px;
  text-transform: uppercase;
  font-family: var(--font-body, 'Plus Jakarta Sans', system-ui, sans-serif);
}
.nav-pin-label  { color: var(--lemon-700, #d08a11); }
.nav-slug-label { color: var(--warm-charcoal, #55534e); }
.nav-pin-value,
.nav-slug-value {
  font-family: var(--font-body, 'Plus Jakarta Sans', system-ui, sans-serif);
  font-size: 13px; font-weight: 700;
  color: var(--black, #1a1816);
  letter-spacing: 2px;
}
.nav-slug-value { letter-spacing: 0.5px; text-transform: lowercase; }
@media (max-width: 900px) {
  .nav-slug { display: none; } /* slug prend trop de place sur tablette */
}
@media (max-width: 600px) {
  .nav-pin-label { display: none; }
}

/* ────────────────────────────────────────────────────────────────────────
   Bouton Enregistrer : état "modifications non enregistrées".
   Ajouter la classe .btn-dirty au bouton quand un champ change, la retirer
   après sauvegarde. Anneau pulsé orange, neutre vis-à-vis de la couleur du
   bouton. Pattern venu de la régie Faire-part, mutualisé pour toutes les
   régies produit.
   ──────────────────────────────────────────────────────────────────────── */
.btn-dirty { animation: leonio-save-pulse 1.15s ease-in-out infinite; }
@keyframes leonio-save-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(232, 112, 42, 0.55); }
  50%      { box-shadow: 0 0 0 7px rgba(232, 112, 42, 0); }
}
@media (prefers-reduced-motion: reduce) {
  .btn-dirty { animation: none; outline: 2px solid #e8702a; outline-offset: 2px; }
}

/* ---------- CARDS ---------- */
.card {
  background: var(--white);
  border: 1px solid var(--oat);
  border-radius: var(--r-md);
  padding: 28px 24px;
  box-shadow: var(--shadow-clay);
}
.card-title {
  font-family: 'Fraunces', Georgia, serif;
  font-style: italic;
  font-size: 22px;
  font-weight: 500;
  color: var(--black);
  margin-bottom: 6px;
}
.card-subtitle {
  font-size: 14px;
  color: var(--warm-charcoal);
  margin-bottom: 20px;
}

/* Color zones (sober V0.2 : based on palette) */
.zone-orange {
  background: var(--orange-light);
  border: 1px solid #f3c8a8;
  border-radius: var(--r-md);
  padding: 20px;
}
.zone-teal {
  background: var(--teal-light);
  border: 1px solid #a3e6e2;
  border-radius: var(--r-md);
  padding: 20px;
}
.zone-navy {
  background: var(--navy-light);
  border: 1px solid #c7d3e3;
  border-radius: var(--r-md);
  padding: 20px;
}

/* ---------- BUTTONS ---------- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  font-family: inherit;
  font-weight: 600;
  font-size: 15px;
  border: none;
  cursor: pointer;
  padding: 12px 22px;
  border-radius: var(--r-pill);
  transition: transform .15s ease, box-shadow .15s ease, background-color .15s ease, color .15s ease;
  white-space: nowrap;
}

.btn-primary {
  background: var(--black);
  color: var(--white);
  box-shadow: var(--shadow-clay);
}
.btn-primary:hover {
  background: var(--orange);
  color: var(--white);
  transform: rotateZ(-2deg) translateY(-2px);
  box-shadow: var(--shadow-hover);
}

.btn-orange {
  background: var(--orange);
  color: var(--white);
  box-shadow: var(--shadow-clay);
}
.btn-orange:hover {
  background: var(--black);
  transform: rotateZ(-2deg) translateY(-2px);
  box-shadow: var(--shadow-hover);
}

.btn-ghost {
  background: var(--white);
  color: var(--black);
  border: 1px solid var(--oat);
}
.btn-ghost:hover {
  transform: rotateZ(-3deg) translateY(-3px);
  box-shadow: var(--shadow-hover);
}

.btn-navy {
  background: var(--navy);
  color: var(--white);
}
.btn-navy:hover {
  background: var(--orange);
  transform: translateY(-2px);
  box-shadow: var(--shadow-hover);
}

.btn-danger {
  background: transparent;
  color: var(--danger);
  border: 1px solid var(--danger);
  border-radius: var(--r-sm);
  padding: 8px 14px;
  font-size: 13px;
}
.btn-danger:hover {
  background: var(--danger);
  color: var(--white);
}

.btn-sm { padding: 8px 14px; font-size: 13px; }
.btn-block { width: 100%; }

/* ---------- INPUTS ---------- */
.input,
.textarea,
.select {
  width: 100%;
  font-family: inherit;
  font-size: 16px;
  background: var(--white);
  border: 1px solid var(--oat);
  border-radius: var(--r-sm);
  padding: 12px 14px;
  color: var(--black);
  transition: border-color .15s ease, box-shadow .15s ease;
}
.input:focus,
.textarea:focus,
.select:focus {
  outline: none;
  border-color: var(--orange);
  box-shadow: 0 0 0 3px var(--orange-light);
}
.textarea { min-height: 96px; resize: vertical; }

.input-group { margin-bottom: 18px; }

.input-color {
  width: 56px;
  height: 44px;
  padding: 4px;
  cursor: pointer;
}

.input-row {
  display: flex;
  gap: 12px;
  align-items: center;
}

/* ---------- TOGGLE SWITCH ---------- */
.toggle {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  cursor: pointer;
  user-select: none;
}
.toggle input { display: none; }
.toggle-slider {
  position: relative;
  width: 46px;
  height: 26px;
  background: var(--oat);
  border-radius: var(--r-pill);
  transition: background .2s ease;
}
.toggle-slider::after {
  content: '';
  position: absolute;
  top: 3px;
  left: 3px;
  width: 20px;
  height: 20px;
  background: var(--white);
  border-radius: 50%;
  transition: transform .2s ease;
  box-shadow: 0 1px 2px rgba(0,0,0,.2);
}
.toggle input:checked + .toggle-slider { background: var(--black); }
.toggle input:checked + .toggle-slider::after { transform: translateX(20px); }
.toggle-label { font-size: 15px; color: var(--black); font-weight: 500; }

.toggle-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 14px 0;
  border-bottom: 1px solid var(--oat-light);
}
.toggle-row:last-child { border-bottom: none; }
.toggle-row-text { flex: 1; padding-right: 16px; }
.toggle-row-title { font-weight: 600; color: var(--black); font-size: 15px; }
.toggle-row-desc  { font-size: 13px; color: var(--warm-charcoal); margin-top: 2px; }

/* ---------- STATS STRIP ---------- */
.stats-strip {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
  gap: 12px;
}
.stat-box {
  background: var(--cream);
  border: 1px solid var(--oat-light);
  border-radius: var(--r-sm);
  padding: 14px 12px;
  text-align: center;
}
.stat-number {
  font-family: var(--font-body, 'Plus Jakarta Sans', system-ui, sans-serif);
  font-size: 28px;
  font-weight: 700;
  color: var(--black);
  line-height: 1;
  letter-spacing: -0.04em;
}
.stat-number-date {
  font-size: 16px;
  letter-spacing: 0;
  line-height: 1.2;
}
.stat-label {
  display: block;
  margin-top: 6px;
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.6px;
  color: var(--warm-silver);
  font-family: var(--font-body, 'Plus Jakarta Sans', system-ui, sans-serif);
}

/* ---------- QR CODE GRID ---------- */
.qr-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
}
@media (max-width: 640px) { .qr-grid { grid-template-columns: 1fr; } }

.qr-item {
  border-radius: var(--r-md);
  padding: 20px;
  text-align: center;
}
.qr-item-guest {
  background: var(--orange-light);
  border: 1px solid #f3c8a8;
}
.qr-item-screen {
  background: var(--teal-light);
  border: 1px solid #a3e6e2;
}
.qr-item-icon { font-size: 24px; margin-bottom: 6px; display: block; }
.qr-item-title {
  font-family: 'Fraunces', serif;
  font-style: italic;
  font-size: 18px;
  font-weight: 600;
  color: var(--black);
}
.qr-item-subtitle {
  font-size: 12px;
  color: var(--warm-charcoal);
  margin: 4px 0 14px;
}
.qr-canvas-wrap {
  background: var(--white);
  border-radius: var(--r-sm);
  padding: 12px;
  display: inline-block;
  margin-bottom: 12px;
}
.qr-canvas-wrap canvas, .qr-canvas-wrap img { display: block; margin: 0 auto; }
.qr-url {
  font-family: var(--font-body, 'Plus Jakarta Sans', system-ui, sans-serif);
  font-size: 11px;
  color: var(--warm-charcoal);
  word-break: break-all;
  margin-bottom: 12px;
  padding: 8px;
  background: rgba(255,255,255,.6);
  border-radius: var(--r-sm);
}
.qr-actions {
  display: flex;
  gap: 8px;
  justify-content: center;
  flex-wrap: wrap;
}

/* ---------- TOAST ---------- */
#toast {
  position: fixed;
  bottom: 28px;
  left: 50%;
  transform: translateX(-50%) translateY(80px);
  background: var(--black);
  color: var(--white);
  padding: 12px 20px;
  border-radius: var(--r-pill);
  font-size: 14px;
  font-weight: 500;
  z-index: 999;
  transition: transform 0.3s ease;
  box-shadow: var(--shadow-soft);
  pointer-events: none;
}
#toast.show { transform: translateX(-50%) translateY(0); }

/* ---------- BADGES ---------- */
.badge {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-family: var(--font-body, 'Plus Jakarta Sans', system-ui, sans-serif);
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.6px;
  padding: 4px 10px;
  border-radius: var(--r-pill);
}
.badge-live {
  background: var(--teal-light);
  color: var(--teal-hover);
}
.badge-live::before {
  content: '';
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--teal);
  animation: pulse 1.5s infinite;
}
@keyframes pulse {
  0%, 100% { opacity: 1; transform: scale(1); }
  50% { opacity: .5; transform: scale(1.3); }
}

.badge-orange { background: var(--orange-light); color: var(--orange-hover); }
.badge-navy   { background: var(--navy-light); color: var(--navy); }
.badge-warning { background: var(--warning-light); color: var(--warning); }

/* ---------- LOGIN PAGE ---------- */
.login-shell {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  background: var(--cream);
}
.login-card {
  width: 100%;
  max-width: 420px;
  background: var(--white);
  border: 1px solid var(--oat);
  border-radius: var(--r-lg);
  padding: 36px 32px 28px;
  box-shadow: var(--shadow-clay);
}
.login-title {
  font-family: 'Fraunces', serif;
  font-weight: 400;
  font-style: italic;
  font-size: 28px;
  text-align: center;
  color: var(--black);
  margin-bottom: 4px;
}
.login-subtitle {
  text-align: center;
  font-size: 14px;
  color: var(--warm-charcoal);
  margin-bottom: 24px;
}
.login-divider {
  display: flex;
  align-items: center;
  gap: 12px;
  margin: 24px 0 16px;
  color: var(--warm-silver);
  font-size: 12px;
  font-family: var(--font-body, 'Plus Jakarta Sans', system-ui, sans-serif);
  text-transform: uppercase;
  letter-spacing: 0.6px;
}
.login-divider::before, .login-divider::after {
  content: '';
  flex: 1;
  height: 1px;
  background: var(--oat-light);
}
.login-error {
  color: var(--danger);
  font-size: 13px;
  text-align: center;
  margin-bottom: 12px;
  min-height: 18px;
}
.login-footer {
  text-align: center;
  margin-top: 28px;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  color: var(--warm-silver);
  font-size: 12px;
}

/* ---------- LISTS / FEED ---------- */
.feed { display: flex; flex-direction: column; gap: 10px; }
.feed-empty {
  text-align: center;
  padding: 32px 16px;
  color: var(--warm-silver);
  font-size: 14px;
}
.feed-item {
  background: var(--white);
  border: 1px solid var(--oat-light);
  border-radius: var(--r-md);
  padding: 14px 16px;
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 12px;
  transition: border-color .15s ease;
}
.feed-item:hover { border-color: var(--oat); }
.feed-item-content { flex: 1; }
.feed-item-author {
  font-family: 'Fraunces', serif;
  font-style: italic;
  font-weight: 600;
  font-size: 14px;
  color: var(--black);
  margin-bottom: 2px;
}
.feed-item-text { font-size: 14px; color: var(--warm-charcoal); }
.feed-item-meta {
  font-family: var(--font-body, 'Plus Jakarta Sans', system-ui, sans-serif);
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.6px;
  color: var(--warm-silver);
  margin-top: 4px;
}
.feed-item-actions { display: flex; gap: 6px; flex-shrink: 0; }

/* ---------- TABS ---------- */
.tabs {
  display: flex;
  gap: 4px;
  background: var(--white);
  border: 1px solid var(--oat);
  border-radius: var(--r-pill);
  padding: 4px;
  width: fit-content;
  margin-bottom: 16px;
}
.tab {
  padding: 8px 16px;
  border-radius: var(--r-pill);
  font-size: 13px;
  font-weight: 600;
  color: var(--warm-charcoal);
  background: transparent;
  border: none;
  cursor: pointer;
  transition: all .15s ease;
}
.tab.active { background: var(--black); color: var(--white); }
.tab:not(.active):hover { color: var(--black); }

/* ---------- COMPONENTS (mutualisés depuis mur/admin.html) ---------- */

/* Loading shell (état de chargement plein page d'une admin) */
.loading-shell {
  min-height: 60vh;
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--warm-silver);
  font-family: var(--font-body, 'Plus Jakarta Sans', system-ui, sans-serif);
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 0.08em;
}

/* Sub-section label inside an admin card (séparateur entre groupes de
   réglages au sein d'une même section .card) */
.subsection-title {
  font-family: var(--font-body, 'Plus Jakarta Sans', system-ui, sans-serif);
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--warm-silver);
  margin: 22px 0 10px;
  padding-top: 14px;
  border-top: 1px solid var(--oat-light);
}
.subsection-title:first-of-type { margin-top: 0; padding-top: 0; border-top: 0; }

/* Aperçu live d'un écran (iframe 16:9 dans une carte admin) */
.preview-frame-wrap {
  aspect-ratio: 16 / 9;
  width: 100%;
  background: var(--cream);
  border-radius: var(--r-md);
  overflow: hidden;
  border: 1px solid var(--oat);
  box-shadow: var(--shadow-clay);
  position: relative;
}
.preview-frame-wrap iframe {
  width: 100%; height: 100%; border: 0; display: block;
}
.preview-meta {
  margin-top: 12px;
  display: flex; align-items: center; justify-content: space-between;
  font-family: var(--font-body, 'Plus Jakarta Sans', system-ui, sans-serif); font-size: 11px;
  color: var(--warm-silver); text-transform: uppercase; letter-spacing: 0.08em;
}
.preview-meta .live-dot {
  display: inline-block; width: 8px; height: 8px; border-radius: 50%;
  background: var(--orange); margin-right: 6px;
  animation: pulse-soft 1.6s ease-in-out infinite;
}
.preview-meta a { color: var(--warm-charcoal); text-decoration: none; }
.preview-meta a:hover { color: var(--orange); }
@keyframes pulse-soft { 0%,100% { opacity: 0.4; } 50% { opacity: 1; } }

/* Aperçu du logo de l'événement dans un input-group admin */
.logo-preview-wrap {
  display: flex; align-items: center; gap: 12px;
  margin-top: 8px;
  min-height: 56px;
}
.logo-preview {
  height: 48px; width: auto; max-width: 160px;
  object-fit: contain;
  border-radius: 8px;
  background: var(--cream);
  padding: 4px 8px;
  border: 1px solid var(--oat);
}
.logo-preview-empty {
  font-size: 12px;
  color: var(--warm-silver);
  font-style: italic;
}

/* Bloc d'identifiant unique (slug) verrouillé / read-only */
.slug-locked {
  background: var(--cream);
  border: 1px dashed var(--oat);
  border-radius: 12px;
  padding: 10px 14px;
  font-family: var(--font-body, 'Plus Jakarta Sans', system-ui, sans-serif);
  font-size: 12px;
  color: var(--warm-charcoal);
  word-break: break-all;
}
.slug-locked .slug-locked-label {
  display: block;
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--warm-silver);
  margin-bottom: 4px;
}

/* Carte d'info "PIN organisateur" (teal, affichée dans l'admin pour
   que l'organisateur retrouve son PIN à 4 chiffres). NB : nom différent
   de .pin-card (Spotlight) qui désigne l'écran de saisie du PIN. */
.pin-info-card {
  margin-top: 12px;
  background: var(--teal-light);
  border: 1px solid #a3e6e2;
  border-radius: 14px;
  padding: 14px 16px;
  display: flex; align-items: center; gap: 14px;
  flex-wrap: wrap;
}
.pin-info-card .pin-info {
  flex: 1;
  min-width: 140px;
}
.pin-info-card .pin-label {
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--warm-charcoal);
}
.pin-info-card .pin-value {
  font-family: var(--font-body, 'Plus Jakarta Sans', system-ui, sans-serif);
  font-size: 22px;
  font-weight: 700;
  letter-spacing: 0.18em;
  color: var(--black);
  margin-top: 2px;
}
.pin-info-card .pin-hint {
  font-size: 11px;
  color: var(--warm-charcoal);
  margin-top: 4px;
}

/* ---------- TOOLTIPS / HELPERS ---------- */
.help-text {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  font-size: 13px;
  color: var(--warm-charcoal);
  background: var(--oat-light);
  border-radius: var(--r-sm);
  padding: 10px 12px;
  margin-top: 8px;
}
.help-text::before {
  content: 'i';
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px; height: 18px;
  flex-shrink: 0;
  background: var(--black);
  color: var(--white);
  border-radius: 50%;
  font-size: 11px;
  font-weight: 700;
  font-family: 'Fraunces', serif;
  font-style: italic;
}

/* ═══════════════════════════════════════════════════════════════════════════
 * STICKY SAVE BAR (pattern cross-produits LEONIO)
 * Centralisé depuis Tombola admin (réf. UX : bouton toujours accessible).
 * Wrappe ton bouton principal d'enregistrement dans <div class="leonio-save-bar">
 * puis ajoute la classe `.leonio-btn-save` au bouton :
 *   <div class="leonio-save-bar">
 *     <button class="leonio-btn-save" id="btn-save">Enregistrer</button>
 *   </div>
 * Le libellé reste court ("Enregistrer"), meilleur pour mobile.
 * Le bouton reste fonctionnel partout : on hérite juste du style sticky.
 * ═══════════════════════════════════════════════════════════════════════════ */
.leonio-save-bar {
  position: sticky;
  bottom: 0;
  background: linear-gradient(180deg, rgba(250, 249, 247, 0) 0%, var(--cream, #faf9f7) 30%);
  padding: 18px 0 14px;
  margin-top: 16px;
  z-index: 50;
  /* Si le parent est en display:grid, on s'étale sur toutes les colonnes pour
     garder le pattern Tombola (bandeau bas full-width). Ignoré si non-grid. */
  grid-column: 1 / -1;
}
.leonio-btn-save {
  width: 100%;
  padding: 16px;
  background: var(--orange, #fc7981);
  color: #ffffff;
  border: none;
  border-radius: var(--r-card, 16px);
  font-family: 'Plus Jakarta Sans', system-ui, sans-serif;
  font-size: 16px;
  font-weight: 700;
  cursor: pointer;
  letter-spacing: -0.01em;
  transition: transform 0.15s, box-shadow 0.15s, background 0.15s;
  box-shadow: var(--shadow-clay, 0 8px 24px -8px rgba(0, 0, 0, 0.18));
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.5em;
}
.leonio-btn-save svg,
.leonio-btn-save svg.lucide {
  width: 1.15em;
  height: 1.15em;
  stroke-width: 2.2;
  flex-shrink: 0;
}
.leonio-btn-save:hover:not(:disabled) {
  transform: rotateZ(-2deg) translateY(-3px);
  box-shadow: var(--shadow-hover, 0 14px 32px -8px rgba(0, 0, 0, 0.22));
  background: var(--orange-hover, #e8702a);
}
.leonio-btn-save:active:not(:disabled) {
  transform: none;
  box-shadow: var(--shadow-clay, 0 8px 24px -8px rgba(0, 0, 0, 0.18));
}
.leonio-btn-save:disabled {
  opacity: 0.55;
  cursor: not-allowed;
}
@media (max-width: 600px) {
  .leonio-btn-save { font-size: 15px; padding: 14px; }
  .leonio-save-bar { padding: 14px 0 10px; margin-top: 12px; }
}
