/* CameraBooking SaaS — Backoffice · palette awd.css */
:root{
  --cb-primary:#1E3A5F; --cb-secondary:#2F6F7E; --cb-info:#5E7C8A;
  --cb-success:#1F9D74; --cb-warning:#F2B84B; --cb-danger:#B54A4A;
  --cb-light:#F6F8FB; --cb-dark:#0F1F2E;
  --cb-border:#dee2e6; --cb-muted:#6c757d;
  --cb-sidebar-w:248px;
}
*{box-sizing:border-box}
body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  background:var(--cb-light);color:#212529;font-size:15px;line-height:1.5}
a{color:var(--cb-secondary);text-decoration:none}
a:hover{text-decoration:underline}

/* Layout */
.cb-shell{display:flex;min-height:100vh}
.cb-sidebar{width:var(--cb-sidebar-w);background:var(--cb-dark);color:#cdd7e0;
  position:fixed;top:0;bottom:0;left:0;display:flex;flex-direction:column;padding:0}
.cb-brand{padding:18px 20px;font-weight:700;color:#fff;font-size:1.15rem;
  border-bottom:1px solid rgba(255,255,255,.08);display:flex;align-items:center;gap:8px}
.cb-brand small{display:block;font-weight:400;font-size:.72rem;color:var(--cb-warning)}
.cb-nav{padding:12px 0;overflow-y:auto;flex:1}
.cb-nav a{display:flex;align-items:center;gap:10px;padding:11px 20px;color:#cdd7e0;
  font-size:.94rem;border-left:3px solid transparent}
.cb-nav a:hover{background:rgba(255,255,255,.05);text-decoration:none;color:#fff}
.cb-nav a.active{background:rgba(47,111,126,.25);border-left-color:var(--cb-secondary);color:#fff}
.cb-nav .sec{padding:14px 20px 6px;font-size:.7rem;text-transform:uppercase;
  letter-spacing:.08em;color:#6d8296}
.cb-main{flex:1;margin-left:var(--cb-sidebar-w);display:flex;flex-direction:column}
.cb-topbar{background:#fff;border-bottom:1px solid var(--cb-border);
  padding:12px 24px;display:flex;justify-content:space-between;align-items:center;
  position:sticky;top:0;z-index:10}
.cb-topbar .who{font-size:.9rem;color:var(--cb-muted)}
.cb-topbar .who b{color:var(--cb-primary)}
.cb-badge-role{background:var(--cb-primary);color:#fff;border-radius:20px;
  padding:2px 10px;font-size:.72rem;margin-left:6px}
.cb-badge-role.admin{background:var(--cb-danger)}
.cb-content{padding:24px;max-width:1750px;width:100%}
h1.cb-title{font-size:1.5rem;color:var(--cb-primary);margin:0 0 4px}
.cb-sub{color:var(--cb-muted);margin:0 0 20px}

/* Cards / tables */
.cb-card{background:#fff;border:1px solid var(--cb-border);border-radius:10px;
  padding:18px 20px;margin-bottom:18px}
.cb-grid{display:grid;gap:16px}
.cb-grid.k3{grid-template-columns:repeat(3,1fr)}
.cb-grid.k4{grid-template-columns:repeat(4,1fr)}
.cb-stat{background:#fff;border:1px solid var(--cb-border);border-radius:10px;padding:16px 18px}
.cb-stat .n{font-size:1.7rem;font-weight:700;color:var(--cb-primary)}
.cb-stat .l{color:var(--cb-muted);font-size:.85rem}
table.cb-table{width:100%;border-collapse:collapse;background:#fff}
table.cb-table th,table.cb-table td{padding:10px 12px;border-bottom:1px solid var(--cb-border);text-align:left}
table.cb-table th{background:var(--cb-light);color:var(--cb-primary);font-size:.82rem;
  text-transform:uppercase;letter-spacing:.03em}
table.cb-table tr:hover td{background:#fbfcfe}

/* Buttons / badges */
.btn{display:inline-block;border:0;border-radius:7px;padding:9px 16px;font-size:.9rem;
  cursor:pointer;font-weight:500;text-decoration:none;line-height:1.2}
.btn:hover{text-decoration:none;opacity:.92}
.btn-primary{background:var(--cb-primary);color:#fff}
.btn-secondary{background:var(--cb-secondary);color:#fff}
.btn-success{background:var(--cb-success);color:#fff}
.btn-danger{background:var(--cb-danger);color:#fff}
.btn-light{background:#fff;border:1px solid var(--cb-border);color:#333}
.btn-sm{padding:5px 10px;font-size:.8rem}
.btn-block{display:block;width:100%;text-align:center}

/* ── Utility (CSP: niente stili inline) ─────────────────────── */
.m-0{margin:0}
.mb-6{margin-bottom:6px}
.mb-20{margin-bottom:20px}
.nowrap{white-space:nowrap}
.form-inline{display:inline}
.w-70{width:70px}
.text-muted{color:var(--cb-muted)}
.text-muted-sm{color:var(--cb-muted);font-size:.85rem}
.small-muted{color:var(--cb-muted);font-weight:400}
.label-normal{font-weight:400}
.label-normal-block{display:block;font-weight:400;font-size:.9rem;margin-bottom:3px}
.cb-subtitle{margin:0 0 14px;font-size:1.1rem;color:var(--cb-primary)}
.cb-subtitle.m-0{margin:0}
.cb-title-sub{font-weight:400;color:var(--cb-muted);font-size:1rem}
.cb-label{display:block;font-size:.85rem;color:var(--cb-primary);font-weight:600;margin-bottom:6px}
.cb-row-7{grid-template-columns:repeat(7,1fr)}
.cb-grid-2{grid-template-columns:1fr 1fr;gap:18px}
.cb-grid-3cols{grid-template-columns:repeat(3,1fr);gap:14px}
.flex-between{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}
.filters-bar{display:flex;gap:12px;flex-wrap:wrap;align-items:end}
.sep-top{border-top:1px solid var(--cb-border);margin:8px 0 16px;padding-top:14px}
.opt-group-title{font-size:.8rem;color:var(--cb-secondary);font-weight:600;margin-bottom:4px}
.cb-tag{display:inline-block;background:#eef1f4;color:#334;border-radius:20px;
  padding:1px 9px;font-size:.74rem;margin:1px 3px 1px 0;white-space:nowrap}
.thumb-64{height:64px;border-radius:6px;border:1px solid var(--cb-border)}
.thumb-56{height:56px;border-radius:6px;border:1px solid var(--cb-border)}
.pill{display:inline-block;border-radius:20px;padding:2px 10px;font-size:.78rem;font-weight:600}
.pill-green{background:#e4f5ee;color:var(--cb-success)}
.pill-amber{background:#fdf3dd;color:#9a7413}
.pill-red{background:#f7e7e7;color:var(--cb-danger)}
.pill-grey{background:#eef1f4;color:var(--cb-muted)}

/* Forms */
.cb-field{margin-bottom:14px}
.cb-field label{display:block;font-size:.85rem;color:var(--cb-primary);margin-bottom:5px;font-weight:600}
.cb-field input,.cb-field select,.cb-field textarea{width:100%;padding:9px 11px;
  border:1px solid var(--cb-border);border-radius:7px;font-size:.92rem;font-family:inherit}
.cb-field input:focus,.cb-field select:focus,.cb-field textarea:focus{
  outline:0;border-color:var(--cb-secondary);box-shadow:0 0 0 3px rgba(47,111,126,.15)}
.cb-row{display:grid;gap:14px}
.cb-row.c2{grid-template-columns:1fr 1fr}
.cb-row.c3{grid-template-columns:1fr 1fr 1fr}
.cb-alert{padding:11px 15px;border-radius:8px;margin-bottom:16px;font-size:.9rem}
.cb-alert-ok{background:#e4f5ee;color:#126b4c;border:1px solid #bfe6d5}
.cb-alert-err{background:#f7e7e7;color:#8a3535;border:1px solid #e6c6c6}

/* ── Dashboard: check-in/out di oggi ────────────────────────── */
.today-row{display:flex;justify-content:space-between;align-items:center;gap:12px;
  padding:9px 0;border-bottom:1px solid var(--cb-border)}
.today-row:last-child{border-bottom:0}
.today-contact{text-align:right;color:var(--cb-muted)}
.status-filter{display:flex;gap:6px;flex-wrap:wrap}

/* ── Calendario occupazione ─────────────────────────────────── */
.cal-wrap{overflow-x:auto;margin-top:14px}
table.cal-table{border-collapse:collapse;width:100%;background:#fff;table-layout:fixed;min-width:900px}
.cal-table th,.cal-table td{border:1px solid var(--cb-border);text-align:center;font-size:.75rem;padding:0}
.cal-table th.cal-day-h{padding:4px 0;background:var(--cb-light);color:var(--cb-primary);font-weight:600;width:26px}
.cal-table th .cal-dow{display:block;font-weight:400;font-size:.62rem;color:var(--cb-muted)}
.cal-room-col{width:130px;text-align:left !important;padding:6px 10px !important;background:var(--cb-light)}
td.cal-cell{height:34px;color:#fff;font-weight:700;font-size:.72rem;cursor:default}
td.cal-ci{background:var(--cb-success)}
td.cal-st{background:#7b6bb5}
td.cal-co{background:#e8963e}
td.cal-turn{background:linear-gradient(135deg,#e8963e 50%,var(--cb-success) 50%)}
td.cal-ota{background:#b5651d}
td.cal-ota-mix{outline:2px dashed #b5651d;outline-offset:-3px}
td.cal-pend{opacity:.6;background-image:repeating-linear-gradient(45deg,rgba(255,255,255,.35) 0 4px,transparent 4px 8px)}
td.cal-we,.cal-table th.cal-we{background-color:#f0f3f7}
td.cal-cell.cal-we.cal-ci{background:var(--cb-success)}
td.cal-today{box-shadow:inset 0 0 0 2px var(--cb-secondary)}
.cal-table th.cal-today-h{background:var(--cb-secondary);color:#fff}
.cal-table th.cal-today-h .cal-dow{color:#e5f0f2}
.cal-legend{display:flex;flex-wrap:wrap;gap:14px;margin-bottom:10px;font-size:.85rem}
.cal-legend span{display:flex;align-items:center;gap:6px}
i.cal-key{display:inline-block;width:16px;height:16px;border-radius:3px;border:1px solid var(--cb-border)}
i.cal-key.cal-ci{background:var(--cb-success)}
i.cal-key.cal-st{background:#7b6bb5}
i.cal-key.cal-co{background:#e8963e}
i.cal-key.cal-turn{background:linear-gradient(135deg,#e8963e 50%,var(--cb-success) 50%)}
i.cal-key.cal-ota{background:#b5651d}
i.cal-key.cal-pend{opacity:.6;background-image:repeating-linear-gradient(45deg,rgba(255,255,255,.35) 0 4px,transparent 4px 8px)}
i.cal-key.cal-we{background:#f0f3f7}
i.cal-key.cal-today{background:#fff;box-shadow:inset 0 0 0 2px var(--cb-secondary)}
i.cal-key.tl-down{background:var(--cb-success)}
i.cal-key.tl-up{background:var(--cb-danger)}
i.cal-key.tl-off{background:#9aa5af}

/* ── Prezzi: settimana base + timeline annuale ──────────────── */
.tl-section{border-top:1px solid var(--cb-border);padding:14px 0 6px;margin-top:8px}
.tl-section:first-of-type{border-top:0;margin-top:0}
.weekly-prices{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;margin:10px 0 12px}
.day-price{background:var(--cb-light);border:1px solid var(--cb-border);border-radius:8px;
  text-align:center;padding:7px 4px}
.day-price.we{background:#fdf3dd}
.dp-name{font-size:.72rem;color:var(--cb-muted);text-transform:uppercase}
.dp-val{font-weight:700;color:var(--cb-primary);font-size:.9rem}
.tl-container{margin-bottom:8px}
.tl-months{display:grid;grid-template-columns:repeat(12,1fr)}
.tl-month{font-size:.68rem;color:var(--cb-muted);text-align:center;border-left:1px solid var(--cb-border);padding:2px 0}
.tl-row{position:relative;height:30px;background:
  repeating-linear-gradient(90deg,transparent 0 calc(100%/12 - 1px),var(--cb-border) calc(100%/12 - 1px) calc(100%/12));
  border:1px solid var(--cb-border);border-radius:4px}
.tl-bar{position:absolute;top:4px;bottom:4px;border-radius:4px;color:#fff;font-size:.68rem;
  font-weight:700;display:flex;align-items:center;justify-content:center;overflow:hidden;
  white-space:nowrap;text-decoration:none;min-width:14px}
.tl-bar:hover{text-decoration:none;filter:brightness(1.1)}
.tl-bar.tl-down{background:var(--cb-success)}
.tl-bar.tl-up{background:var(--cb-danger)}
.tl-bar.tl-off{background:#9aa5af}
.tl-legend{display:flex;gap:16px;font-size:.83rem;margin-top:10px}
.tl-legend span{display:flex;align-items:center;gap:6px}
.year-lbl{margin:0 8px;color:var(--cb-primary)}

/* ── Report: barre percentuali ──────────────────────────────── */
.rb-line{display:flex;justify-content:space-between;align-items:center;margin:8px 0 4px}
.rb-track{height:8px;background:var(--cb-light);border-radius:4px;overflow:hidden}
.rb-fill{height:100%;border-radius:4px}
.rb-green{background:var(--cb-success)}
.rb-amber{background:var(--cb-warning)}
.rb-red{background:var(--cb-danger)}
.rb-blue{background:var(--cb-secondary)}
.rb-rev{color:var(--cb-success);font-weight:700}

/* ── Sync iCal ──────────────────────────────────────────────── */
.ical-url-row{display:flex;gap:6px;align-items:center}
.ical-url{flex:1;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:.78rem;
  padding:6px 8px;border:1px solid var(--cb-border);border-radius:6px;background:var(--cb-light);min-width:220px}

/* ── Stampa (Report → PDF) ──────────────────────────────────── */
@media print{
  .cb-sidebar,.cb-topbar,.no-print{display:none !important}
  .cb-main{margin-left:0}
  .cb-content{max-width:100%;padding:0}
  .cb-card,.cb-stat{border:1px solid #ccc;box-shadow:none}
  body{background:#fff}
}

/* ── Schede di traduzione (gestione/include/i18n_tabs.php) ───
   Tab con radio + CSS: la CSP vieta gli script inline senza nonce e per
   delle tab il JavaScript non serve. Gli input sono nascosti ma restano
   raggiungibili da tastiera, quindi le tab funzionano anche con Tab+Spazio. */
.i18n-box{border:1px solid var(--cb-border);border-radius:10px;padding:14px 16px;
  margin:18px 0;background:var(--cb-light)}
.i18n-head{display:flex;align-items:baseline;gap:10px;margin-bottom:10px}
.i18n-head strong{color:var(--cb-primary);font-size:.9rem}
.i18n-hint{color:var(--cb-muted);font-size:.78rem}
.i18n-radio{position:absolute;opacity:0;width:0;height:0}
.i18n-tabs{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--cb-border);margin-bottom:14px}
.i18n-tab{padding:7px 13px;font-size:.84rem;font-weight:600;color:var(--cb-muted);
  cursor:pointer;border:1px solid transparent;border-bottom:none;border-radius:7px 7px 0 0;
  margin-bottom:-1px;display:inline-flex;align-items:center;gap:6px}
.i18n-tab:hover{color:var(--cb-primary)}
.i18n-badge{background:var(--cb-warning);color:#4a3708;border-radius:20px;
  padding:1px 7px;font-size:.68rem;font-weight:700}
.i18n-pane{display:none}
/* Il pannello i-esimo si mostra quando è selezionata la radio i-esima */
.i18n-radio-1:checked ~ .i18n-panes .i18n-pane:nth-of-type(1),
.i18n-radio-2:checked ~ .i18n-panes .i18n-pane:nth-of-type(2),
.i18n-radio-3:checked ~ .i18n-panes .i18n-pane:nth-of-type(3),
.i18n-radio-4:checked ~ .i18n-panes .i18n-pane:nth-of-type(4),
.i18n-radio-5:checked ~ .i18n-panes .i18n-pane:nth-of-type(5){display:block}
.i18n-radio-1:checked ~ .i18n-tabs .i18n-tab:nth-of-type(1),
.i18n-radio-2:checked ~ .i18n-tabs .i18n-tab:nth-of-type(2),
.i18n-radio-3:checked ~ .i18n-tabs .i18n-tab:nth-of-type(3),
.i18n-radio-4:checked ~ .i18n-tabs .i18n-tab:nth-of-type(4),
.i18n-radio-5:checked ~ .i18n-tabs .i18n-tab:nth-of-type(5){
  color:var(--cb-primary);background:#fff;border-color:var(--cb-border)}
.i18n-radio:focus-visible ~ .i18n-tabs{outline:2px solid var(--cb-secondary);outline-offset:2px}
.lang-checks{display:flex;flex-wrap:wrap;gap:6px 20px}

/* ── Abbonamenti e piani ─────────────────────────────────────── */
.cb-row.c4{display:grid;grid-template-columns:repeat(4,1fr);gap:0 16px}
.cb-card-sm{padding:16px 18px;margin:0}
.cb-actions{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.cb-hr{border:0;border-top:1px solid var(--cb-border);margin:22px 0}
/* Gli scaglioni si leggono meglio incolonnati: è una tabella travestita
   da textarea, non prosa. */
textarea.mono{font-family:ui-monospace,"Cascadia Code",Consolas,monospace;font-size:.9rem;line-height:1.6}
.mt-12{margin-top:12px}
.mt-16{margin-top:16px}
@media(max-width:820px){
  .cb-row.c4{grid-template-columns:1fr 1fr}
}

/* Login */
.cb-login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,var(--cb-dark),var(--cb-primary))}
.cb-login-card{background:#fff;border-radius:14px;padding:34px 32px;
  box-shadow:0 12px 40px rgba(0,0,0,.25)}
.cb-login-card h1{margin:0 0 4px;color:var(--cb-primary);font-size:1.35rem}
.cb-login-card p.sub{margin:0 0 22px;color:var(--cb-muted);font-size:.88rem}

@media(max-width:820px){
  .cb-sidebar{transform:translateX(-100%)}
  .cb-main{margin-left:0}
  .cb-grid.k3,.cb-grid.k4{grid-template-columns:1fr 1fr}
  .cb-row.c2,.cb-row.c3{grid-template-columns:1fr}
}

/* ── Card tematiche ──────────────────────────────────────────
   In "Camere & Tipi" e "Prezzi" convivono quattro riquadri per pagina, e a
   colpo d'occhio si somigliano tutti. Il colore distingue DI COSA parla la
   card, non se è un form o un elenco: la domanda che ci si pone scorrendo la
   pagina è "questo riguarda il tipo o la singola camera?".

   Il segnale è la banda di sinistra, non lo sfondo: una tinta piena su un
   riquadro grande stanca e riduce il contrasto del testo. Lo sfondo resta
   quasi bianco, appena virato. E il colore non è mai l'unica informazione —
   il titolo dice sempre di cosa si tratta, quindi resta leggibile anche a
   chi non distingue bene i colori. */
.cb-card--tipo    { border-left:4px solid var(--cb-secondary); background:#fbfdfd }
.cb-card--camera  { border-left:4px solid var(--cb-info);      background:#fcfdfe }
.cb-card--prezzo  { border-left:4px solid var(--cb-success);   background:#fbfefc }
.cb-card--speciale{ border-left:4px solid var(--cb-warning);   background:#fffdf8 }

/* Il titolo riprende la banda: lega le due cose senza aggiungere rumore. */
.cb-card--tipo    > .cb-subtitle { color:var(--cb-secondary) }
.cb-card--camera  > .cb-subtitle { color:var(--cb-info) }
.cb-card--prezzo  > .cb-subtitle { color:var(--cb-success) }
.cb-card--speciale> .cb-subtitle { color:#9a7413 }
.cb-card--speciale .flex-between > .cb-subtitle,
.cb-card--prezzo   .flex-between > .cb-subtitle { color:inherit }

/* Avviso abbonamento: giallo in sola lettura, rosso a pannello bloccato */
.billing-banner{display:flex;align-items:center;justify-content:space-between;gap:16px;
  background:#fdf6e3;border:1px solid #f0dca8;border-left:4px solid var(--cb-warning);
  border-radius:8px;padding:12px 16px;margin-bottom:18px;font-size:.92rem;line-height:1.5}
.billing-banner.is-blocked{background:#f7e7e7;border-color:#e6c6c6;border-left-color:var(--cb-danger)}
.billing-banner .btn{white-space:nowrap}
@media(max-width:700px){
  .billing-banner{flex-direction:column;align-items:flex-start}
}

/* Avvisi della guida, riusati anche fuori da help.php */
.help-warn{background:#fdf6e3;border-left:3px solid var(--cb-warning);
  border-radius:6px;padding:12px 14px;margin:14px 0;font-size:.92rem;line-height:1.6}
.help-note{background:var(--cb-light);border-left:3px solid var(--cb-secondary);
  border-radius:6px;padding:12px 14px;margin:14px 0;font-size:.92rem;line-height:1.6}

/* ── Assistenza tenant ────────────────────────────────────────
   Il banner NON si chiude: sta guardando i dati di qualcun altro, e un
   avviso richiudibile verrebbe chiuso al primo minuto e dimenticato per
   le due ore successive. Verde acqua e non rosso: non è un errore né un
   blocco, è uno stato eccezionale ma legittimo — il rosso qui
   svaluterebbe il rosso vero del pannello bloccato. */
.support-banner{display:flex;align-items:center;justify-content:space-between;gap:16px;
  background:#eef6f8;border:1px solid #bcd9e0;border-left:4px solid var(--cb-secondary);
  border-radius:8px;padding:12px 16px;margin-bottom:18px;font-size:.92rem;line-height:1.5}
.support-banner .btn{white-space:nowrap}
@media(max-width:700px){
  .support-banner{flex-direction:column;align-items:flex-start}
}

/* Card del codice: stessa banda del banner, così le due cose si leggono
   come un unico meccanismo anche a pagine diverse. */
.cb-card--assist{border-left:4px solid var(--cb-secondary);background:#fbfdfd}
.cb-card--assist > .cb-subtitle{color:var(--cb-secondary)}

/* Il codice va letto ad alta voce a qualcuno al telefono: monospazio,
   spaziato e grande abbastanza da non doversi avvicinare allo schermo. */
.assist-code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-size:1.9rem;font-weight:700;letter-spacing:.18em;color:var(--cb-primary);
  background:#fff;border:1px dashed var(--cb-secondary);border-radius:8px;
  padding:14px 18px;margin:10px 0 14px;display:inline-block;user-select:all}

.assist-form{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.assist-code-input{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-size:1.1rem;letter-spacing:.12em;text-transform:uppercase;max-width:220px;
  padding:9px 11px;border:1px solid var(--cb-border);border-radius:7px}

/* ── Registrazione autonoma delle strutture ──────────────────
   Il form di registrazione vive nella stessa card del login, ma ha nove
   campi invece di due: a 360px starebbero tutti in colonna e la pagina
   sembrerebbe infinita. Qui la card si allarga e le righe .c2 tornano a
   funzionare (sotto 820px il media query le rimette in colonna da sé). */
.cb-login-card--wide{width:min(560px, calc(100vw - 32px))}
.cb-login-card--wide .cb-subtitle{margin:18px 0 10px;font-size:.95rem}
.cb-login-card--wide .cb-subtitle:first-of-type{margin-top:0}

/* Honeypot: fuori dallo schermo invece di display:none, perché alcuni bot
   scartano i campi dichiaratamente nascosti e compilano solo gli altri. */
.cb-hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}

/* Richieste di registrazione in attesa: la card si distingue dall'elenco
   dei gestori attivi, altrimenti a colpo d'occhio sono due tabelle uguali. */
.cb-card--pending{border-left:4px solid #9a7413;background:#fffdf7}
.cb-card--pending > .cb-subtitle{color:#9a7413}


/* ─── Accettazioni legali ─────────────────────────────────────
   La casella delle clausole vessatorie è distinta anche visivamente: la
   legge chiede un'approvazione "specifica", e una casella indistinguibile
   dalle altre due è il primo argomento di chi vuole contestarla. */
.cb-field-vex{border-left:3px solid var(--cb-warning,#F2B84B);
  background:#fdf8ef;padding:10px 12px;border-radius:0 8px 8px 0}
.cb-field-vex .label-normal{font-size:.88rem;line-height:1.5}

/* ─── Riaccettazione documenti legali ─────────────────────────
   La card è più larga della login: qui non ci sono due campi ma tre
   dichiarazioni contrattuali, e comprimerle in 380px le rende illeggibili
   proprio dove la leggibilità è il presupposto della validità. */
.cb-reaccept{max-width:640px;text-align:left}
.cb-reaccept h1{font-size:1.4rem;text-align:left}
.cb-reaccept .sub{text-align:left;margin-bottom:18px}
.cb-reaccept-notice{background:#f1f6fb;border-left:3px solid #2F6F7E;
  padding:10px 12px;border-radius:0 8px 8px 0;font-size:.85rem;
  line-height:1.5;margin-bottom:18px}
.cb-reaccept-item{border:1px solid #dee2e6;border-radius:8px;
  padding:12px 14px;margin-bottom:12px;background:#fff}
.cb-reaccept-item.is-invalid{border-color:#B54A4A;background:#fdf3f3}
.cb-reaccept-item .label-normal{display:flex;gap:10px;align-items:flex-start;
  font-size:.86rem;line-height:1.55;cursor:pointer}
.cb-reaccept-item input[type=checkbox]{margin-top:4px;flex-shrink:0}
.cb-badge-ver{display:inline-block;background:#f1f3f5;border:1px solid #dee2e6;
  border-radius:999px;padding:0 7px;font-size:.72rem;font-weight:700;color:#6c757d}
.cb-field-err{color:#B54A4A;font-size:.8rem;margin:6px 0 0}
/* Anomalia di coerenza in legali.php: deve saltare all'occhio nella tabella,
   perché è l'unica cosa che quella pagina esiste per far notare. */
.cb-bad{color:var(--cb-danger);font-weight:600}
/* Riga dei documenti contrattuali in fondo a ogni pagina del pannello. */
.cb-foot-legal{margin:28px 0 8px;padding-top:14px;border-top:1px solid var(--cb-border);
  font-size:.78rem;color:var(--cb-muted);line-height:1.8}
.cb-foot-legal a{color:var(--cb-muted)}
.cb-foot-legal a:hover{color:var(--cb-secondary)}
