/* ==========================================================================
   ClubNex — Componenti base · V1 · 30/10/2026
   CSS semplice, senza framework. Richiede, in quest'ordine:
     1. fonts/clubnex-fonts.css
     2. css/clubnex-tokens.css
     3. css/clubnex-components.css   (questo file)
   Tutte le classi hanno il prefisso "cnx-" per non scontrarsi con il CSS
   esistente dell'app PHP: si possono introdurre una pagina alla volta.
   Valori approvati: blu B2, lime, Plus Jakarta Sans + Inter,
   raggi Bilanciati, ombre Lievi, densità Standard.
   ========================================================================== */

/* ---------- Base ---------- */
.cnx, .cnx *, .cnx *::before, .cnx *::after { box-sizing: border-box; }
.cnx {
  font: var(--cnx-type-body);
  color: var(--cnx-text-primary);
  background: var(--cnx-bg-canvas);
  -webkit-font-smoothing: antialiased;
  font-synthesis: none;
}
.cnx :where(button) { font: inherit; color: inherit; background: none; border: 0; padding: 0; cursor: pointer; }
.cnx :where(h1, h2, h3, h4, p) { margin: 0; }
.cnx :focus-visible { outline: 2px solid var(--cnx-focus-ring); outline-offset: 2px; }
.cnx-on-brand :focus-visible { outline-color: var(--cnx-focus-ring-on-brand); }
.cnx-num { font-variant-numeric: tabular-nums; }
.cnx-sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }

/* ---------- Tipografia ---------- */
.cnx-h1 { font: var(--cnx-type-heading-1); letter-spacing: var(--cnx-type-heading-1-tracking); }
.cnx-h2 { font: var(--cnx-type-heading-section); letter-spacing: var(--cnx-type-heading-section-tracking); }
.cnx-h3 { font: var(--cnx-type-heading-card); }
.cnx-caption { font: var(--cnx-type-caption); color: var(--cnx-text-secondary); }
.cnx-eyebrow { font: var(--cnx-type-label-caps); letter-spacing: var(--cnx-type-label-caps-tracking); text-transform: uppercase; color: var(--cnx-text-secondary); }
.cnx-muted { color: var(--cnx-text-secondary); }
@media (max-width: 640px) { .cnx-h1 { font: var(--cnx-type-heading-1-mobile); } }

/* ---------- Layout applicazione ---------- */
.cnx-app { display: grid; grid-template-columns: 248px minmax(0, 1fr); min-height: 100vh; }
.cnx-main { display: flex; flex-direction: column; min-width: 0; }
.cnx-topbar { height: 64px; background: var(--cnx-bg-surface); border-bottom: 1px solid var(--cnx-border-default); display: flex; align-items: center; gap: var(--cnx-space-4); padding: 0 var(--cnx-layout-page-padding); }
.cnx-page { padding: var(--cnx-layout-page-padding); display: flex; flex-direction: column; gap: var(--cnx-layout-grid-gap); }
.cnx-page-head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: flex-end; gap: var(--cnx-space-4); }
.cnx-grid { display: grid; gap: var(--cnx-layout-grid-gap); grid-template-columns: repeat(var(--cnx-cols, 3), minmax(0, 1fr)); }
.cnx-stack { display: flex; flex-direction: column; gap: var(--cnx-layout-stack-gap); }
.cnx-row { display: flex; flex-wrap: wrap; align-items: center; gap: var(--cnx-space-3); }
@media (max-width: 960px) { .cnx-app { grid-template-columns: 1fr; } .cnx-grid { grid-template-columns: 1fr; } }
@media (max-width: 640px) { .cnx-page { padding: var(--cnx-space-4); } .cnx-topbar { padding: 0 var(--cnx-space-4); } }

/* ---------- Sidebar (superficie blu) ---------- */
.cnx-sidebar { background: var(--cnx-bg-brand); color: var(--cnx-text-on-brand); padding: var(--cnx-space-5) var(--cnx-space-3); display: flex; flex-direction: column; gap: var(--cnx-space-1); }
.cnx-sidebar__logo { display: block; height: 30px; margin: 0 var(--cnx-space-3) var(--cnx-space-5); }
.cnx-sidebar__logo img { height: 100%; width: auto; display: block; }
.cnx-sidebar__club { display: flex; align-items: center; gap: var(--cnx-space-3); padding: var(--cnx-space-3); border-radius: var(--cnx-radius-md); background: var(--cnx-bg-brand-hover); margin-bottom: var(--cnx-space-4); }
.cnx-sidebar__club small { display: block; color: var(--cnx-text-on-brand-muted); font: var(--cnx-type-caption); }
.cnx-sidebar__group { font: var(--cnx-type-label-caps); letter-spacing: var(--cnx-type-label-caps-tracking); text-transform: uppercase; color: var(--cnx-text-on-brand-subtle); padding: var(--cnx-space-4) var(--cnx-space-3) var(--cnx-space-2); }
.cnx-nav-item { display: flex; align-items: center; gap: var(--cnx-space-3); height: var(--cnx-size-control-md); padding: 0 var(--cnx-space-3); border-radius: var(--cnx-radius-md); color: var(--cnx-text-on-brand-muted); text-decoration: none; font-size: 14px; }
.cnx-nav-item:hover { background: var(--cnx-bg-brand-hover); color: var(--cnx-text-on-brand); }
.cnx-nav-item[aria-current="page"] { background: var(--cnx-bg-brand-elevated); color: var(--cnx-text-on-brand); font-weight: 600; }
.cnx-nav-item[aria-current="page"] svg { color: var(--cnx-text-accent-on-brand); }
.cnx-nav-item .cnx-count { margin-left: auto; }
.cnx-nav-item:focus-visible { outline-color: var(--cnx-focus-ring-on-brand); }
/* Sotto 960 px la sidebar diventa una testata compatta (logo + società);
   la navigazione mobile andrà in una tab bar in basso, da definire con le schermate TNT Manager. */
@media (max-width: 960px) {
  .cnx-sidebar { flex-direction: row; align-items: center; justify-content: space-between; padding: var(--cnx-space-3) var(--cnx-space-4); }
  .cnx-sidebar__logo { margin: 0; height: 26px; }
  .cnx-sidebar__club { margin: 0; padding: 6px 10px; }
  .cnx-sidebar__group, .cnx-sidebar .cnx-nav-item { display: none; }
}
@media (max-width: 640px) {
  .cnx-topbar { height: auto; flex-wrap: wrap; padding-top: var(--cnx-space-3); padding-bottom: var(--cnx-space-3); }
  .cnx-topbar > .cnx-input { order: 3; flex: 1 1 100%; max-width: none !important; margin-left: 0 !important; }
}

/* ---------- Pulsanti ---------- */
.cnx-btn { display: inline-flex; align-items: center; justify-content: center; gap: var(--cnx-space-2); height: var(--cnx-size-control-md); padding: 0 var(--cnx-layout-button-x); border-radius: var(--cnx-radius-md); font: var(--cnx-type-button); white-space: nowrap; text-decoration: none; border: 0; cursor: pointer; transition: background-color .15s, box-shadow .15s; }
.cnx-btn--primary { background: var(--cnx-action-primary-bg); color: var(--cnx-action-primary-text); }
.cnx-btn--primary:hover { background: var(--cnx-action-primary-bg-hover); }
.cnx-btn--primary:active { background: var(--cnx-bg-brand-deep); }
.cnx-btn--accent { background: var(--cnx-action-accent-bg); color: var(--cnx-action-accent-text); }           /* lime: uso raro, max 1 per schermata */
.cnx-btn--accent:hover { background: var(--cnx-action-accent-bg-hover); }
.cnx-btn--secondary { background: var(--cnx-action-secondary-bg); color: var(--cnx-text-primary); box-shadow: inset 0 0 0 1px var(--cnx-action-secondary-border); }
.cnx-btn--secondary:hover { background: var(--cnx-action-secondary-bg-hover); }
.cnx-btn--tertiary { color: var(--cnx-text-link); padding: 0 10px; }
.cnx-btn--tertiary:hover { background: var(--cnx-bg-info); }
.cnx-btn--danger { background: var(--cnx-status-danger-text); color: #FFFFFF; }
.cnx-btn--danger:hover { background: #951C13; }
.cnx-btn--ghost { color: var(--cnx-text-on-brand); box-shadow: inset 0 0 0 1px var(--cnx-action-ghost-border); }   /* solo su superfici blu */
.cnx-btn--ghost:hover { background: var(--cnx-bg-brand-hover); }
.cnx-btn--sm { height: var(--cnx-size-control-sm); padding: 0 12px; font-size: 13px; border-radius: var(--cnx-radius-sm); }
.cnx-btn--lg { height: var(--cnx-size-control-lg); padding: 0 22px; font-size: 15px; }
.cnx-btn--icon { width: var(--cnx-size-control-md); padding: 0; }
.cnx-btn:disabled, .cnx-btn[aria-disabled="true"] { background: var(--cnx-action-disabled-bg); color: var(--cnx-action-disabled-text); box-shadow: none; cursor: not-allowed; }
.cnx-btn[aria-busy="true"] { cursor: progress; }
.cnx-btn[aria-busy="true"]::before { content: ""; width: 16px; height: 16px; border-radius: 50%; border: 2px solid currentColor; border-right-color: transparent; animation: cnx-spin .8s linear infinite; }
@media (pointer: coarse) { .cnx-btn { min-height: var(--cnx-size-touch-min); } }

/* ---------- Campi ---------- */
.cnx-field { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.cnx-label { font-size: 13px; font-weight: 600; color: var(--cnx-text-primary); }
.cnx-label small { font-weight: 500; color: var(--cnx-text-secondary); }
.cnx-input, .cnx-select, .cnx-textarea {
  width: 100%; height: var(--cnx-size-control-md); padding: 0 12px;
  font: 400 14px/1.3 var(--cnx-font-body); color: var(--cnx-text-primary);
  background: var(--cnx-bg-surface); border: 1px solid var(--cnx-border-input); border-radius: var(--cnx-radius-md);
  transition: border-color .15s, box-shadow .15s; appearance: none;
}
.cnx-textarea { height: auto; min-height: 88px; padding: 10px 12px; resize: vertical; }
.cnx-select { padding-right: 36px; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='%2356677A' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M4 6l4 4 4-4'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 12px center; }
.cnx-input::placeholder, .cnx-textarea::placeholder { color: var(--cnx-text-placeholder); }
.cnx-input:hover, .cnx-select:hover, .cnx-textarea:hover { border-color: var(--cnx-text-placeholder); }
.cnx-input:focus, .cnx-select:focus, .cnx-textarea:focus { outline: none; border-color: var(--cnx-focus-ring); box-shadow: 0 0 0 1px var(--cnx-focus-ring), 0 0 0 4px rgba(29, 59, 86, .12); }
.cnx-input[aria-invalid="true"], .cnx-select[aria-invalid="true"], .cnx-textarea[aria-invalid="true"] { border-color: var(--cnx-status-danger-text); box-shadow: 0 0 0 1px var(--cnx-status-danger-text); }
.cnx-input:disabled, .cnx-select:disabled, .cnx-textarea:disabled { background: var(--cnx-bg-subtle); border-color: var(--cnx-border-default); color: var(--cnx-action-disabled-text); cursor: not-allowed; }
.cnx-input[readonly] { background: var(--cnx-bg-canvas); border-color: var(--cnx-border-default); }
.cnx-help { font: var(--cnx-type-caption); color: var(--cnx-text-secondary); }
.cnx-error { font: var(--cnx-type-caption); font-weight: 500; color: var(--cnx-status-danger-text); }
@media (max-width: 640px) { .cnx-input, .cnx-select, .cnx-textarea { font-size: 16px; height: var(--cnx-size-touch-min); } }  /* 16px evita lo zoom su iOS */

/* Checkbox e radio: <label class="cnx-check"><input type="checkbox"> Testo</label> */
.cnx-check { display: inline-flex; align-items: center; gap: 10px; font-size: 14px; cursor: pointer; min-height: 24px; }
.cnx-check input { appearance: none; width: 20px; height: 20px; margin: 0; flex: none; display: grid; place-items: center; background: var(--cnx-bg-surface); border: 1.5px solid var(--cnx-border-input); border-radius: 6px; cursor: pointer; }
.cnx-check input[type="radio"] { border-radius: 50%; }
.cnx-check input:checked, .cnx-check input:indeterminate { background: var(--cnx-action-primary-bg); border-color: var(--cnx-action-primary-bg); }
.cnx-check input[type="checkbox"]:checked::after { content: ""; width: 10px; height: 6px; border-left: 2px solid #FFF; border-bottom: 2px solid #FFF; transform: translateY(-1px) rotate(-45deg); }
.cnx-check input[type="checkbox"]:indeterminate::after { content: ""; width: 10px; height: 2px; background: #FFF; border-radius: 1px; }
.cnx-check input[type="radio"]:checked::after { content: ""; width: 8px; height: 8px; border-radius: 50%; background: #FFF; }
.cnx-check input:disabled { background: var(--cnx-bg-subtle); border-color: var(--cnx-border-default); cursor: not-allowed; }
.cnx-check:has(input:disabled) { color: var(--cnx-action-disabled-text); cursor: not-allowed; }

/* Interruttore: <label class="cnx-switch"><input type="checkbox" role="switch"> Testo</label> */
.cnx-switch { display: inline-flex; align-items: center; gap: 10px; font-size: 14px; cursor: pointer; }
.cnx-switch input { appearance: none; width: 40px; height: 24px; margin: 0; flex: none; border-radius: 12px; background: var(--cnx-control-off); position: relative; cursor: pointer; transition: background-color .15s; }
.cnx-switch input::after { content: ""; position: absolute; top: 3px; left: 3px; width: 18px; height: 18px; border-radius: 50%; background: #FFF; box-shadow: 0 1px 2px rgba(23, 35, 49, .25); transition: transform .15s; }
.cnx-switch input:checked { background: var(--cnx-action-primary-bg); }
.cnx-switch input:checked::after { transform: translateX(16px); }

/* ---------- Badge, contatori, chip, tab ---------- */
.cnx-badge { display: inline-flex; align-items: center; gap: 6px; padding: 3px 9px; border-radius: var(--cnx-radius-pill); font-size: 12px; font-weight: 600; line-height: 1.35; white-space: nowrap; background: var(--cnx-bg-subtle); color: var(--cnx-neutral-700); }
.cnx-badge--success { background: var(--cnx-status-success-bg); color: var(--cnx-status-success-text); }
.cnx-badge--warning { background: var(--cnx-status-warning-bg); color: var(--cnx-status-warning-text); }
.cnx-badge--danger  { background: var(--cnx-status-danger-bg);  color: var(--cnx-status-danger-text); }
.cnx-badge--info    { background: var(--cnx-status-info-bg);    color: var(--cnx-status-info-text); }
.cnx-badge--brand   { background: var(--cnx-bg-brand); color: var(--cnx-text-on-brand); }
.cnx-badge--accent  { background: var(--cnx-bg-accent); color: var(--cnx-text-on-accent); }
.cnx-badge--dot::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
.cnx-count { min-width: 20px; height: 20px; padding: 0 6px; border-radius: 10px; background: var(--cnx-bg-brand); color: #FFF; font-size: 11px; font-weight: 700; display: inline-grid; place-items: center; font-variant-numeric: tabular-nums; }
.cnx-on-brand .cnx-count, .cnx-sidebar .cnx-count { background: var(--cnx-bg-accent); color: var(--cnx-text-on-accent); }
.cnx-chip { display: inline-flex; align-items: center; gap: 6px; height: var(--cnx-size-control-sm); padding: 0 12px; border-radius: var(--cnx-radius-pill); font-size: 13px; font-weight: 500; background: var(--cnx-bg-surface); box-shadow: inset 0 0 0 1px var(--cnx-border-strong); color: var(--cnx-text-primary); }
.cnx-chip:hover { background: var(--cnx-bg-canvas); }
.cnx-chip[aria-pressed="true"] { background: var(--cnx-bg-info); box-shadow: inset 0 0 0 1.5px var(--cnx-action-primary-bg); color: var(--cnx-text-link); font-weight: 600; }
.cnx-seg { display: inline-flex; gap: 2px; padding: 3px; border-radius: var(--cnx-radius-md); background: var(--cnx-bg-subtle); }
.cnx-seg button { height: 32px; padding: 0 12px; border-radius: 7px; font-size: 13px; font-weight: 600; color: var(--cnx-text-secondary); }
.cnx-seg button[aria-pressed="true"] { background: var(--cnx-bg-surface); color: var(--cnx-text-primary); box-shadow: 0 1px 2px rgba(23, 35, 49, .14); }
.cnx-tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--cnx-border-default); overflow-x: auto; scrollbar-width: none; }
.cnx-tab { flex: none; height: var(--cnx-size-control-md); padding: 0 12px; position: relative; white-space: nowrap; font-size: 14px; font-weight: 500; color: var(--cnx-text-secondary); border-radius: var(--cnx-radius-sm) var(--cnx-radius-sm) 0 0; }
.cnx-tab:hover { color: var(--cnx-text-primary); background: var(--cnx-bg-canvas); }
.cnx-tab[aria-selected="true"] { color: var(--cnx-text-primary); font-weight: 600; }
.cnx-tab[aria-selected="true"]::after { content: ""; position: absolute; left: 8px; right: 8px; bottom: -1px; height: 3px; border-radius: 3px 3px 0 0; background: var(--cnx-action-primary-bg); }

/* ---------- Card ---------- */
.cnx-card { background: var(--cnx-bg-surface); border: 1px solid var(--cnx-border-default); border-radius: var(--cnx-radius-lg); box-shadow: var(--cnx-shadow-card); padding: var(--cnx-layout-card-padding); display: flex; flex-direction: column; gap: var(--cnx-layout-stack-gap); min-width: 0; }
.cnx-card--link { cursor: pointer; transition: box-shadow .15s, transform .15s; text-decoration: none; color: inherit; }
.cnx-card--link:hover { box-shadow: var(--cnx-shadow-hover); transform: translateY(-1px); }
.cnx-card__head { display: flex; justify-content: space-between; align-items: baseline; gap: var(--cnx-space-3); }
.cnx-kpi__label { font-size: 13px; font-weight: 500; color: var(--cnx-text-secondary); }
.cnx-kpi__value { font: var(--cnx-type-kpi-value); letter-spacing: var(--cnx-type-kpi-value-tracking); font-variant-numeric: tabular-nums; }
.cnx-kpi__foot { font: var(--cnx-type-caption); color: var(--cnx-text-secondary); display: flex; justify-content: space-between; align-items: center; gap: var(--cnx-space-2); }
.cnx-trend-up { color: var(--cnx-status-success-text); font-weight: 600; }
.cnx-premium { background: var(--cnx-bg-brand); color: var(--cnx-text-on-brand); border-radius: var(--cnx-radius-lg); box-shadow: var(--cnx-shadow-card); padding: var(--cnx-layout-card-padding); display: flex; flex-direction: column; gap: 10px; }
.cnx-premium .cnx-eyebrow { color: var(--cnx-text-accent-on-brand); }
.cnx-premium p { color: var(--cnx-text-on-brand-muted); }

/* ---------- Tabella ---------- */
.cnx-table-wrap { overflow-x: auto; border-radius: var(--cnx-radius-md); border: 1px solid var(--cnx-border-default); background: var(--cnx-bg-surface); }
.cnx-table { width: 100%; border-collapse: collapse; font: var(--cnx-type-table); font-variant-numeric: tabular-nums; }
.cnx-table th { font-size: 12px; font-weight: 600; color: var(--cnx-text-secondary); text-align: left; white-space: nowrap; padding: 10px 12px; background: var(--cnx-bg-canvas); border-bottom: 1px solid var(--cnx-border-default); }
.cnx-table td { padding: var(--cnx-layout-table-row-y) 12px; border-bottom: 1px solid var(--cnx-border-default); }
.cnx-table tr:last-child td { border-bottom: 0; }
.cnx-table tbody tr:hover td { background: #FAFBFC; }
.cnx-table tbody tr[aria-selected="true"] td { background: var(--cnx-blue-50); }
.cnx-table .cnx-right { text-align: right; }
.cnx-pagination { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 10px; font-size: 13px; color: var(--cnx-text-secondary); }
.cnx-pagination nav { display: flex; gap: 4px; }
.cnx-pagination a, .cnx-pagination button { min-width: var(--cnx-size-control-sm); height: var(--cnx-size-control-sm); display: inline-grid; place-items: center; border-radius: var(--cnx-radius-sm); font-weight: 600; color: var(--cnx-text-primary); text-decoration: none; }
.cnx-pagination a:hover, .cnx-pagination button:hover { background: var(--cnx-bg-canvas); }
.cnx-pagination [aria-current="page"] { background: var(--cnx-action-primary-bg); color: #FFF; }

/* ---------- Avatar, stemma club, badge categoria ---------- */
.cnx-avatar { width: 36px; height: 36px; border-radius: 50%; flex: none; display: grid; place-items: center; overflow: hidden; background: var(--cnx-bg-info); color: var(--cnx-text-link); font-weight: 700; font-size: 13px; }
.cnx-avatar img { width: 100%; height: 100%; object-fit: cover; }
.cnx-crest { width: 32px; height: 32px; flex: none; object-fit: contain; }
/* Livello società (approvato): nel gestionale il club compare solo qui */
.cnx-club-badge { display: inline-flex; align-items: center; padding: 2px 8px; border-radius: var(--cnx-radius-sm); font-size: 12px; font-weight: 700; background: var(--cnx-club-tint); color: var(--cnx-club-text); font-variant-numeric: tabular-nums; }

/* ---------- Avvisi, toast, progresso ---------- */
.cnx-alert { display: flex; gap: 12px; align-items: flex-start; padding: 12px 14px; border-radius: var(--cnx-radius-md); font-size: 13.5px; background: var(--cnx-status-info-bg); color: var(--cnx-status-info-text); }
.cnx-alert b { display: block; font-weight: 600; }
.cnx-alert p { color: var(--cnx-text-primary); }
.cnx-alert--success { background: var(--cnx-status-success-bg); color: #24620F; }
.cnx-alert--warning { background: var(--cnx-status-warning-bg); color: var(--cnx-status-warning-text); }
.cnx-alert--danger  { background: var(--cnx-status-danger-bg); color: var(--cnx-status-danger-text); }
.cnx-toast { display: flex; gap: 12px; align-items: flex-start; max-width: 400px; padding: 12px 14px; border-radius: var(--cnx-radius-md); background: var(--cnx-neutral-900); color: #FFF; box-shadow: var(--cnx-shadow-pop); font-size: 13.5px; }
.cnx-toast small { display: block; color: var(--cnx-text-on-brand-muted); }
.cnx-toast a, .cnx-toast button { color: var(--cnx-lime-400); font-weight: 600; margin-left: auto; }
.cnx-progress { height: 8px; border-radius: 4px; background: var(--cnx-bg-subtle); overflow: hidden; }
.cnx-progress > span { display: block; height: 100%; border-radius: 4px; background: var(--cnx-action-primary-bg); }
.cnx-premium .cnx-progress { background: var(--cnx-border-on-brand); }
.cnx-premium .cnx-progress > span { background: var(--cnx-lime-400); }
.cnx-spinner { width: 24px; height: 24px; border-radius: 50%; border: 3px solid var(--cnx-bg-info); border-top-color: var(--cnx-action-primary-bg); animation: cnx-spin .8s linear infinite; }
.cnx-skeleton { display: block; height: 12px; border-radius: 6px; background: linear-gradient(90deg, #EEF1F4 0%, #F7F9FA 50%, #EEF1F4 100%); background-size: 200% 100%; animation: cnx-shimmer 1.4s ease-in-out infinite; }
@keyframes cnx-spin { to { transform: rotate(360deg); } }
@keyframes cnx-shimmer { 0% { background-position: 100% 0; } 100% { background-position: -100% 0; } }

/* ---------- Menu e dialog ---------- */
.cnx-menu { min-width: 220px; padding: 6px; display: flex; flex-direction: column; gap: 1px; background: var(--cnx-bg-surface); border: 1px solid var(--cnx-border-default); border-radius: var(--cnx-radius-md); box-shadow: var(--cnx-shadow-pop); }
.cnx-menu [role="menuitem"] { display: flex; align-items: center; gap: 10px; width: 100%; height: var(--cnx-size-control-sm); padding: 0 10px; border-radius: 6px; font-size: 14px; text-align: left; color: var(--cnx-text-primary); }
.cnx-menu [role="menuitem"]:hover, .cnx-menu [role="menuitem"]:focus-visible { background: var(--cnx-bg-canvas); }
.cnx-menu .cnx-danger { color: var(--cnx-status-danger-text); }
.cnx-menu hr { border: 0; border-top: 1px solid var(--cnx-border-default); margin: 4px 0; }
/* <dialog class="cnx-dialog"> nativo: aprire con dialog.showModal() */
.cnx-dialog { width: min(440px, calc(100vw - 32px)); padding: 24px; border: 1px solid var(--cnx-border-default); border-radius: var(--cnx-radius-xl); box-shadow: var(--cnx-shadow-dialog); color: var(--cnx-text-primary); }
.cnx-dialog::backdrop { background: rgba(23, 35, 49, .45); }
.cnx-dialog h2 { font: 700 19px/1.3 var(--cnx-font-display); margin: 0 0 8px; }
.cnx-dialog p { color: var(--cnx-text-secondary); }
.cnx-dialog__actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 10px; margin-top: 18px; }

/* ---------- Stato vuoto / errore ---------- */
.cnx-empty { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 10px; padding: 28px 20px; border-radius: var(--cnx-radius-md); background: var(--cnx-bg-canvas); }
.cnx-empty h3 { font: var(--cnx-type-heading-card); }
.cnx-empty p { color: var(--cnx-text-secondary); max-width: 34ch; font-size: 13.5px; }

@media (prefers-reduced-motion: reduce) { .cnx *, .cnx *::before, .cnx *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; } }
