/* Scala e controlli del sito Riservati, comuni ai layout V2 e password. */
:root {
  --rv-ink-rgb: 48 59 48;
  --rv-cream-rgb: 241 230 219;
  --rv-accent-rgb: 245 176 86;
  --rv-ink: #303b30;
  --rv-muted: #536153;
  --rv-paper: #faf5ef;
  --rv-white: #ffffff;
  --rv-cream: #f1e6db;
  --rv-accent: #f5b056;
  --rv-accent-hover: #e09c14;
  --rv-border: #7b8379;
  --rv-divider: #e3e0db;
  --rv-error: #7c293f;
  --rv-shade: rgb(48 59 48 / 72%);
  --rv-body: 1rem;
  --rv-note: .75rem;
  --rv-leading: 1.5;
  --rv-space-1: .25rem;
  --rv-space-2: .5rem;
  --rv-space-3: .75rem;
  --rv-space-4: 1rem;
  --rv-space-6: 1.5rem;
  --rv-space-8: 2rem;
}
/* Hero, menu, barra fiducia ed eyebrow restano sulla scala del tema V2 (--fs-* in riservati-v2.css). */
body { font-size: var(--rv-body); line-height: var(--rv-leading); }
.rv-text { font-size: var(--rv-body); }
.rv-note, small, figcaption, [role="note"] { font-size: var(--rv-note); line-height: var(--rv-leading); }
/* Misura massima solo per il testo corrente delle pagine legali: hero, card e tabelle restano come disegnati. */
.rv-prose p, .rv-prose li, .rv-prose dd, .rv-prose blockquote { max-inline-size: 75ch; }
/* Voci del menu, Login e badge dell'hero: 12 px come nel tema V2 (S1' li aveva portati a 16 px con .rv-text). */
nav a.rv-text[data-rv-nav-tint], .hero-badge.rv-text { font-size: 12px; }
main p, main li, main dd, main blockquote, footer { line-height: var(--rv-leading); }
input, select, textarea { font-size: var(--rv-body); }
/* Bersagli di 44 px sui soli controlli; i link dentro le frasi restano in linea (WCAG 2.5.8, eccezione «inline»). */
button, summary, [role="button"], .btn { min-width: 44px; min-height: 44px; }
nav a[href], footer a[href], .nav-logo-group a { display: inline-flex; align-items: center; min-width: 44px; min-height: 44px; }
[role="dialog"] a[href] { min-height: 44px; }
footer a[href], footer button { padding-block: var(--rv-space-2); }
.nav-burger { min-width: 44px !important; min-height: 44px !important; }
input[type="range"] { min-height: 44px; }
.info-tip, .pw-eye { min-width: 44px; min-height: 44px; }
.reg-step, .form-grid > * { min-width: 0; }
.reg-steps-count, .reg-steps-label { font-size: var(--rv-body); }
.schw-muted, .schw-body, .schw-label, .rsv-auth-links, .schw-input, .rsv-btn-amber { font-size: var(--rv-body); line-height: var(--rv-leading); }
.rsv-auth-shell { max-width: 34rem; }
.rsv-auth-shell h1 { overflow-wrap: anywhere; }
footer .text-sm, footer .text-xs, footer a, footer button, footer strong, footer .opacity-80, footer .opacity-85 { font-size: var(--rv-body) !important; line-height: var(--rv-leading) !important; }
footer small { font-size: var(--rv-note) !important; line-height: var(--rv-leading) !important; }
.rv-app-row { flex-wrap: wrap; justify-content: center; max-width: 100%; }
.rv-app-row > div { min-width: 0; }
/* Link isolati — fuori dalle frasi: bersaglio da 44 px (WCAG 2.5.8).
   inline-flex serve perché min-height non agisce su un elemento in linea.
   I link DENTRO p/li/td/span/label restano in linea: eccezione «inline» della stessa norma. */
main a[href]:not(:is(p, li, td, th, dd, dt, span, label, small, blockquote, figcaption, h1, h2, h3, h4, h5, h6) a) { display: inline-flex; align-items: center; max-width: 100%; min-height: 44px; }
main .btn-sweep, main .btn-sweep > span { white-space: normal !important; }
main .btn-sweep > span { min-width: 0; max-width: 100%; }
footer .rsv-footer-linkbtn { min-height: 44px !important; }
.trust-grid { flex-wrap: wrap; }
.trust-grid .trust-item { flex: 1 1 200px !important; min-width: 0; }
.trust-item span { white-space: normal !important; }
.trust-mini { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.trust-mini .trust-item { min-width: 0; }
.trust-mini .trust-item span { white-space: normal !important; }
@media (max-width: 759px) { .trust-mini { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 559px) { .trust-mini { grid-template-columns: minmax(0, 1fr); } }
@media (max-width: 1279px) {
  .nav-links, .nav-utility { display: none !important; }
  .nav-burger { display: inline-flex !important; align-items: center; justify-content: center; }
}
#cc-banner, #cc-modal, #cc-reopen { box-sizing: border-box; font-family: inherit; font-size: var(--rv-body); line-height: var(--rv-leading); }
#cc-banner *, #cc-modal * { box-sizing: border-box; }
#cc-banner[hidden], #cc-modal[hidden], #cc-reopen[hidden] { display: none !important; }
#cc-banner { position: fixed; inset: auto 0 0; z-index: 99998; background: var(--rv-ink) !important; color: var(--rv-cream) !important; padding: var(--rv-space-2) var(--rv-space-4); }
.cc-banner-inner { max-width: 1200px; margin: 0 auto; display: flex; align-items: center; gap: var(--rv-space-4); }
.cc-banner-text { flex: 1; min-width: 0; }
.cc-banner-text strong { display: block; margin-bottom: var(--rv-space-1); }
.cc-banner-text p { margin: 0; max-width: 52ch; }
.cc-banner-buttons { display: grid; grid-template-columns: 1fr 1fr; gap: var(--rv-space-1) var(--rv-space-2); }
.cc-btn, #cc-banner .cc-link { min-height: 44px; min-width: 44px; padding: var(--rv-space-2); display: inline-flex; align-items: center; justify-content: center; font: inherit; text-align: center; cursor: pointer; border-radius: 0; }
.cc-btn { border: 1px solid var(--rv-border); font-weight: 600; }
.cc-btn-primary { background: var(--rv-accent); color: var(--rv-ink); border-color: var(--rv-accent); }
.cc-btn-primary:hover { background: var(--rv-accent-hover); }
.cc-btn-secondary { background: transparent; color: inherit; border-color: currentColor; }
#cc-banner .cc-link { color: var(--rv-cream); text-decoration: underline; }
#cc-banner :focus-visible, #cc-modal :focus-visible, #cc-reopen:focus-visible { outline: 2px solid var(--rv-ink); outline-offset: 2px; box-shadow: 0 0 0 4px var(--rv-white); }
#cc-modal { position: fixed; inset: 0; z-index: 99999; display: flex; align-items: center; justify-content: center; padding: var(--rv-space-4); }
.cc-modal-backdrop { position: absolute; inset: 0; background: var(--rv-shade); }
.cc-modal-content { position: relative; max-width: 640px; width: 100%; max-height: 90vh; overflow: auto; background: var(--rv-paper); color: var(--rv-ink); }
.cc-modal-header, .cc-modal-footer { display: flex; align-items: center; gap: var(--rv-space-2); padding: var(--rv-space-4); }
.cc-modal-header { justify-content: space-between; border-bottom: 1px solid var(--rv-border); }
.cc-modal-header h2 { font-size: 1.25rem; }
.cc-modal-close { min-width: 44px; min-height: 44px; font-size: 1.5rem; color: var(--rv-ink); background: transparent; border: 1px solid var(--rv-border); cursor: pointer; }
.cc-modal-body { padding: var(--rv-space-4); }
.cc-modal-intro, .cc-category-desc { margin: 0; }
.cc-category { padding: var(--rv-space-4) 0; border-bottom: 1px solid var(--rv-border); }
.cc-category-row { display: flex; align-items: center; gap: var(--rv-space-2); min-height: 44px; cursor: pointer; }
.cc-category-row input { appearance: auto; width: 20px; height: 20px; accent-color: var(--rv-ink); }
.cc-category-title { display: flex; align-items: center; flex-wrap: wrap; gap: var(--rv-space-2); }
.cc-tag { font-size: var(--rv-note); background: var(--rv-cream); color: var(--rv-ink); padding: var(--rv-space-1) var(--rv-space-2); }
.cc-modal-footer { flex-wrap: wrap; }
.cc-modal-footer .cc-btn { flex: 1 1 auto; }
#cc-reopen { position: fixed; bottom: var(--rv-space-4); left: var(--rv-space-4); z-index: 99997; min-width: 44px; min-height: 44px; background: var(--rv-paper); color: var(--rv-ink); border: 1px solid var(--rv-border); cursor: pointer; }
@media (max-width: 640px) {
  .cc-banner-inner { flex-direction: column; align-items: stretch; gap: var(--rv-space-2); }
  .cc-banner-text { flex: 0 0 auto; }
  #cc-banner { padding-bottom: calc(var(--rv-space-2) + env(safe-area-inset-bottom)); }
  .cc-banner-buttons { width: 100%; }
  #cc-banner .cc-link { padding-inline: 0; }
  /* Con Unbounded il banner resta entro il 35 % dell'altezza a 360 px. */
  .cc-banner-inner { gap: var(--rv-space-1); }
  #cc-banner, #cc-banner .cc-btn { line-height: 1.4; }
  .cc-banner-text strong { margin-bottom: 0; }
}

/* I sette giorni rapidi lasciano gli orari sopra la piega del telefono. */
[data-dm-days] { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--rv-space-2); }
[data-dm-times] { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--rv-space-2); }
.slot-modal .slot-pill, .slot-modal .slot-time { min-width: 0; padding: var(--rv-space-2); gap: 0; font-size: var(--rv-body); line-height: var(--rv-leading); }
.slot-weekday, .slot-label { font-size: var(--rv-body); line-height: var(--rv-leading); }
.slot-more { margin-top: var(--rv-space-4); }
.slot-more label { display: block; font-size: var(--rv-body); line-height: var(--rv-leading); }
.slot-more select { width: 100%; min-height: 44px; padding: var(--rv-space-2); font: inherit; font-size: var(--rv-body); background: var(--rv-paper); color: var(--rv-ink); border: 1px solid var(--rv-border); }
[data-dm-slot-close] { min-width: 44px; min-height: 44px; }
.slot-confirm { min-height: 44px; margin-top: var(--rv-space-2); }
@media (max-width: 560px) {
  [data-dm-days] { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .slot-modal { padding: var(--rv-space-4); height: 100dvh; }
}

/* La prima impaginazione coincide con quella del modulo potenziato dal JS.
   Se JS è disabilitato il fallback e tutti i passi conservano il loro spazio. */
.js #regFallback { display: none; }
.js #regForm:not([data-enhanced]) .reg-step:not([data-step="1"]) { display: none; }
.js #regForm:not([data-enhanced]) .reg-steps[hidden] { display: flex !important; }
.js #regPasswordPolicy { min-block-size: 14rem; }
.js #regPasswordPolicyStatus { min-block-size: 3rem; }

/* Bordi e focus misurabili anche sul crema e sui pulsanti ambra. */
input:not([type="range"]), select, textarea, .reg-plan-card, .reg-addon,
[data-rv-faq-toggle] { border-color: var(--rv-border) !important; }
input::placeholder, textarea::placeholder { color: var(--rv-muted) !important; opacity: 1 !important; }
select { background-image: none !important; appearance: auto; }
.slot-pill, .slot-time { border-color: var(--rv-ink) !important; }
[data-rv-panel] h2 { color: var(--rv-cream) !important; }
.slot-confirm { opacity: 1 !important; color: var(--rv-ink); background: var(--rv-cream); }
.slot-confirm:disabled { border: 1px dashed var(--rv-ink); }
input[type="range"]::-webkit-slider-runnable-track { height: 4px; background: var(--rv-ink); }
input[type="range"]::-moz-range-track { height: 4px; background: var(--rv-ink); }
input[type="range"]::-webkit-slider-thumb { background: var(--rv-accent); border: 3px solid var(--rv-cream); box-shadow: 0 0 0 1px var(--rv-ink); }
input[type="range"]::-moz-range-thumb { background: var(--rv-accent); border: 3px solid var(--rv-cream); box-shadow: 0 0 0 1px var(--rv-ink); }
a:focus-visible, button:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible, summary:focus-visible, [tabindex]:focus-visible {
  outline: 2px solid var(--rv-ink) !important;
  outline-offset: 2px !important;
  box-shadow: 0 0 0 4px var(--rv-white) !important;
}
#cc-banner #cc-reject, #cc-banner #cc-accept { background: var(--rv-accent) !important; color: var(--rv-ink) !important; border: 1px solid var(--rv-accent) !important; }
#cc-banner .cc-btn-secondary { background: transparent !important; color: var(--rv-cream) !important; border-color: var(--rv-cream) !important; }
/* Il comando fisso della chat non deve coprire i link legali al fuoco. */
body:has(footer :focus-visible) .chat-dock { visibility: hidden; }

/* Anche i passi successivi e le preferenze devono conservare bordi leggibili. */
.reg-back, .reg-pay-opt { border-color: var(--rv-border) !important; }
#cc-modal .cc-btn-primary { border-color: var(--rv-ink) !important; }
.reg-pay-opt .rv-text { color: var(--rv-muted) !important; }
#cc-modal input[type="checkbox"], #regPay input[type="radio"] {
  appearance: none;
  display: inline-grid;
  place-content: center;
  flex: 0 0 auto;
  border: 2px solid var(--rv-ink) !important;
  background: var(--rv-paper);
  color: var(--rv-ink);
}
#cc-modal input[type="checkbox"]::after, #regPay input[type="radio"]::after {
  content: "";
  width: 8px;
  height: 8px;
  background: transparent;
}
#cc-modal input[type="checkbox"]:checked::after, #regPay input[type="radio"]:checked::after { background: var(--rv-ink); }
#regPay input[type="radio"], #regPay input[type="radio"]::after { border-radius: 50%; }

/* ── Multilingua (24.09.2026) ─────────────────────────────────────────────
   Tutto quel che sta qui sopra è il foglio servito, invariato: il tedesco
   deve restare identico al pixel. Qui sotto solo regole per elementi che il
   tedesco non ha (selettore di lingua, avviso delle legali) o limitate a
   :lang(it) / :lang(en). Il candidato del 22.09 restringeva le legali tedesche
   (44ch !important), scuriva l'hero tedesco e nascondeva la chat col banner
   anche in tedesco: regressioni misurate dall'audit, qui non ci sono. */
.rv-language { display: flex; gap: 2px; margin: 0; align-items: center; color: var(--rv-cream); }
.rv-language a { display: inline-flex; align-items: center; justify-content: center; min-width: 44px; min-height: 44px; border: 1px solid currentColor; font-family: Unbounded, sans-serif; font-size: var(--rv-note); letter-spacing: 0.05em; line-height: var(--rv-leading); color: inherit; text-decoration: none; }
.rv-language a[aria-current] { background: var(--rv-cream); color: var(--rv-ink); border-color: var(--rv-cream); }
nav[data-rv-nav][data-scrolled="1"] .rv-language a[aria-current], [data-rv-nav="solid"] .rv-language a[aria-current] { background: var(--rv-cream); color: var(--rv-ink); }
@media (max-width: 1023px) { [data-rv-nav] .rv-language { display: none; } }
[data-rv-panel] .rv-language { margin: var(--space-18, 18px) 0 0; }
/* Footer: ultima riga, centrata come © e social; sul verde scuro il crema regge 9,5:1. */
footer .rv-language { justify-content: center; flex-wrap: wrap; }
/* Legali su /it/ e /en/: il testo è quello tedesco, preceduto da un avviso. */
.rv-legal-note { font-family: Unbounded, sans-serif; font-size: var(--rv-body); line-height: var(--rv-leading); color: var(--rv-ink); background: rgb(var(--rv-ink-rgb) / 0.06); border-left: 3px solid var(--rv-accent); padding: var(--space-14, 14px) var(--space-18, 18px); margin: 0 0 var(--space-48, 48px); }
/* Legali tradotte (IT/EN, «pagine normali» dal 04.10.2026): nella colonna di 760 px l'italiano e l'inglese arrivavano a
   86 caratteri per riga a 1440 px (WCAG 1.4.8 e verifica_sito: al massimo 80; il tedesco ci sta). Il testo DOPO la nota
   di cortesia scende a 680 px; il tedesco, che la nota non l'ha, non cambia di un pixel (gate visivo P2). */
.rv-legal-note ~ * { max-width: 680px; }
/* Traduzioni delle legali (spente: settings.RISERVATI_LEGALI_TRADOTTI). */
.rv-legal { font-family: Unbounded, sans-serif; font-size: var(--rv-body); line-height: var(--rv-leading); color: var(--rv-ink); overflow-wrap: anywhere; }
.rv-legal h2 { font-family: 'Barlow Condensed', sans-serif; font-size: var(--fs-h3); line-height: 1.15; margin: 1.5em 0 .5em; }
.rv-legal a { display: inline-block; min-height: 44px; color: var(--rv-ink); text-decoration: underline; }
/* Le frasi italiane e inglesi sono più corte: righe di prosa entro ~80 caratteri. */
:is(:lang(it), :lang(en)) .rv-prose :is(p, li, dd, blockquote) { max-inline-size: 50ch; }
/* Conferma del contatto: i link della lista sono bersagli isolati (44 px, WCAG 2.5.8).
   Solo IT/EN: in tedesco la pagina resta quella servita (difetto preesistente, segnalato). */
:is(:lang(it), :lang(en)) .rv-link-list a { display: inline-flex; align-items: center; min-height: 44px; max-width: 100%; }
/* Hero sotto 560 px: il titolo IT/EN è più lungo e sale nella sfumatura alta del
   velo del lockup (4,24:1 misurato sui pixel a 360). Velo pieno anche in alto,
   solo IT/EN; !important perché la regola servita del velo lo usa già. */
@media (max-width: 560px) {
  :is(:lang(it), :lang(en)) .hero-lockup { background: linear-gradient(to bottom, rgba(15, 22, 15, 0.66) 0%, rgba(15, 22, 15, 0.74) 10%, rgba(15, 22, 15, 0.74) 84%, rgba(15, 22, 15, 0) 100%) !important; }
}
/* Ritorno dal checkout: titolo e sottotitolo IT/EN cambiano lunghezza quando arriva
   lo stato; riservare l'altezza evita lo spostamento (CLS 0,13 misurato a 360). */
@media (max-width: 640px) {
  body[data-rv-page="subscription-status"]:is(:lang(it), :lang(en)) #titel { display: block; min-block-size: 2.1em; }
  body[data-rv-page="subscription-status"]:is(:lang(it), :lang(en)) #lead { display: block; min-block-size: 7.5em; }
}
