/* dashboard/css/90-overrides.css — estratto da app.css (2026-07, split senza build). */
/* ========== HOVER + ACTIVE sweep (vitalità UI) ==========
   Ogni elemento interattivo ha feedback :hover (desktop) e :active (tap mobile).
   Pattern: scale(0.97) per card/row, scale(0.96) per bottoni piccoli. */

/* Cards / rows cliccabili — :active mancante */
.machine-card:active { transform: scale(0.98); }
.cust-card { transition: border-color 120ms ease, background 120ms ease; }
.cust-card:hover { border-color: var(--brand); }
.cust-card:active { background: var(--bg); }
.cat-card:active { transform: scale(0.98); }
.mkt-active-row:active { background: var(--bg); }
.action-suggestions .as-card:active { transform: scale(0.98); }
.promo-row:active { background: var(--brand-soft); }
.ticket-trigger-row { transition: border-color 120ms ease, background 120ms ease; }
.ticket-trigger-row:hover { background: var(--bg); }
.ticket-trigger-row:active { background: var(--line); }
.mkt-cta-free:active { transform: scale(0.98); }
.mkt-proposal:active { transform: scale(0.99); }

/* Sidebar */
.sb-brand--btn:active { background: var(--brand-soft); opacity: 0.85; }
.sb-nav .sb-action:active { transform: scale(0.96); }

/* Sub-tabs */
.cli-subtab { transition: color 120ms ease, border-color 120ms ease; }
.cli-subtab:active { opacity: 0.8; }

/* Back / settings buttons */
.cust-pane-head .back:active { transform: scale(0.92); }
.cat-detail-head .back:active { transform: scale(0.92); }
.cat-detail-head .settings-btn:active { transform: scale(0.92); }
.back-link:active .back-icon { transform: translateX(-4px) scale(0.92); }

/* Bulk actions */
.bulk-bar .bulk-action:active { transform: scale(0.95); }
.bulk-bar .bulk-clear:active { opacity: 0.7; }

/* Chips */
.lab-chip:active { transform: scale(0.95); }
.sub-chip:active { transform: scale(0.95); }

/* Buttons / controls */
.btn-danger-ghost:active { transform: scale(0.97); }
.pill-btn:active { transform: scale(0.95); }
.action-btn:active { transform: scale(0.92); }
.mov-range .range-apply:active { transform: scale(0.97); }
.dt-trigger .dt-icon-btn:active { background: var(--brand-soft); }
.cal-head button:active { transform: scale(0.9); }
.cal-day:active { transform: scale(0.9); }
.cal-foot .text-btn:active { transform: scale(0.96); }
.cal-foot .ok-btn:active { transform: scale(0.96); }
.dc-stepper .dc-step-btn:active { transform: scale(0.9); background: var(--brand-soft); }
.tbl-section .numfield-step:active { transform: scale(0.88); background: var(--line); }
th.sortable:active { opacity: 0.7; }

/* Form elements */
.radio-group label { transition: border-color 120ms ease, background 120ms ease; }
.radio-group label:hover { border-color: var(--brand); }
.radio-group label:active { transform: scale(0.97); }
.u-lang-opt { transition: border-color 120ms ease, background 120ms ease; }
.u-lang-opt:hover { border-color: var(--brand); background: var(--brand-soft); }
.u-lang-opt:active { transform: scale(0.98); }

/* Disclosures / collapsibles */
.reservations-disclosure summary:active { opacity: 0.8; }
.cust-collapsible summary { transition: background 120ms ease; }
.cust-collapsible summary:hover { background: var(--bg); }
.cust-collapsible summary:active { opacity: 0.8; }
.filter-dd > summary:active { transform: scale(0.97); }

/* Filter menu */
.filter-menu label:active { background: var(--brand-soft); }

/* Confirm modal buttons */
.gmodal.gm-confirm .gm-actions > button:active { transform: scale(0.97); }

/* ========== A11Y · prefers-reduced-motion guard (C11) ==========
   Stessa logica di app.css S5 M5: 0.01ms per far firare transitionend. */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* Modale passkey gestore: lista credenziali registrate (Fase 1) */
.pk-list { margin: 4px 0 12px; }
.pk-item { display: flex; align-items: center; gap: 10px; padding: 10px 0; border-bottom: 1px solid var(--line); }
.pk-item:last-child { border-bottom: none; }
.pk-item-ico { color: var(--brand); flex-shrink: 0; line-height: 0; }
.pk-item-label { flex: 1; min-width: 0; font-size: 14px; color: var(--ink); overflow-wrap: anywhere; }
.pk-item-del { background: none; border: none; color: var(--ink-3); cursor: pointer; padding: 4px; line-height: 0; flex-shrink: 0; }
.pk-empty { font-size: 14px; color: var(--ink-2); padding: 8px 0 14px; }

/* Login biometrico gestore (Fase 2) */
.auth-passkey { margin-top: 18px; }
.auth-divider { display: flex; align-items: center; gap: 10px; color: var(--ink-3); font-size: 13px; margin: 14px 0; }
.auth-divider::before, .auth-divider::after { content: ""; flex: 1; height: 1px; background: var(--line); }
.auth-passkey .btn-secondary { width: 100%; }
.auth-passkey-status { font-size: 13px; margin-top: 8px; text-align: center; color: var(--ink-2); }

/* ============================================================
   iOS focus-zoom kill-switch (2026-07-20).
   Qualsiasi campo focusabile con font-size < 16px scatena l'auto-zoom di
   Safari iOS al focus; lo zoom RESTA sul visual viewport e ogni gmodal
   position:fixed aperta dopo appare tagliata/pannata (visto live sul pane
   Schermo cassa: la modale era corretta, lo zoom veniva dai campi sparsi
   a 12-14px — search topbar, colmenu, pager…). Su puntatori coarse TUTTI
   i campi salgono a 16px; il desktop resta invariato. !important perché
   deve vincere sulle decine di regole specifiche sparse nel file. */
@media (pointer: coarse) {
  input, select, textarea { font-size: 16px !important; }
}

