@import url('https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=Manrope:wght@400;500;600;700;800&display=swap');

:root { --ink: #172524; --forest: #24453d; --lime: #d7ef77; --paper: #f5f4ef; --muted: #66716c; --line: #d8d9d1; --coral: #ed755a; --surface: #fffdf9; --radius-sm: 10px; --radius-md: 16px; --radius-lg: 24px; --shadow-soft: 0 18px 45px rgba(23,37,36,.08); --shadow-card: 0 24px 65px rgba(23,37,36,.12); }
html, body { min-height: 100%; }
body { background: var(--paper); color: var(--ink); font-family: Manrope, sans-serif; display: flex; flex-direction: column; min-height: 100vh; min-height: 100dvh; }
.app-content { flex: 1; padding-bottom: 3rem; }
.app-nav { background: var(--ink); border-bottom: 1px solid rgba(255,255,255,.16); }.app-nav-inner { align-items: center; display: flex; justify-content: space-between; min-height: 58px; padding-bottom: .5rem; padding-top: .5rem; }.app-brand { align-items: center; display: flex; gap: .5rem; text-decoration: none; white-space: nowrap; }.app-brand img { display: block; height: 32px; max-width: 116px; object-fit: contain; width: auto; }.app-brand span { color: var(--lime); font-family: "DM Mono", monospace; font-size: .65rem; }.app-navigation { background: #fff; border-bottom: 1px solid var(--line); margin: -1.5rem 0 1.5rem; padding: .55rem 0; }.app-menu { align-items: center; display: flex; flex-wrap: wrap; gap: .45rem; list-style: none; margin: 0; padding: 0; }.app-menu a { background: var(--paper); border: 1px solid var(--line); color: var(--ink); display: block; font-size: .78rem; font-weight: 700; padding: .4rem .65rem; text-decoration: none; }.app-menu a:hover { background: var(--lime); border-color: var(--lime); color: var(--ink); }.app-account { align-items: center; color: #fff; display: flex; font-size: .72rem; gap: .75rem; white-space: nowrap; }
.impersonation-banner { background: var(--lime); color: var(--ink); font-size: .82rem; font-weight: 700; padding: .45rem 0; }
.nav-link { font-size: .87rem; font-weight: 700; }
.app-menu-group { position: relative; }
.app-menu-trigger { align-items: center; background: transparent; border: 0; border-radius: 8px; color: var(--ink); cursor: pointer; display: flex; font: inherit; font-size: .82rem; font-weight: 700; gap: .45rem; min-height: 42px; padding: .55rem .8rem; }
.app-menu-trigger:hover, .app-menu-group:focus-within > .app-menu-trigger, .app-menu-group.is-open > .app-menu-trigger { background: #edf1e2; color: var(--forest); }
.app-submenu { background: #fff; border: 1px solid var(--line); border-radius: 12px; box-shadow: var(--shadow-soft); display: none; left: 0; list-style: none; min-width: 220px; padding: .45rem; position: absolute; top: calc(100% + .2rem); z-index: 1050; }
.app-menu-group:focus-within > .app-submenu, .app-menu-group.is-open > .app-submenu { display: block; }
.app-submenu a { background: transparent; border: 0; border-radius: 7px; padding: .65rem .75rem; }
@media (max-width: 767px) { .app-navigation { padding: .4rem 0; }.app-menu { align-items: stretch; display: grid; gap: .25rem; grid-template-columns: repeat(2, minmax(0, 1fr)); }.app-menu > li { min-width: 0; }.app-menu > li > a, .app-menu-trigger { border-radius: 8px; justify-content: flex-start; min-height: 44px; padding: .55rem .65rem; width: 100%; }.app-menu a { font-size: .8rem; }.app-menu-group { display: flex; flex-direction: column; }.app-submenu { border-radius: 8px; box-shadow: none; display: none; margin: .15rem 0 .35rem; min-width: 0; padding: .25rem; position: static; width: 100%; }.app-menu-group:hover > .app-submenu { display: none; }.app-menu-group:focus-within > .app-submenu, .app-menu-group.is-open > .app-submenu { display: block; }.app-submenu a { font-size: .78rem; padding: .55rem .65rem; } }
.app-nav { background: rgba(23,37,36,.97); backdrop-filter: blur(14px); border: 0; border-radius: 0 0 18px 18px; box-shadow: 0 8px 28px rgba(23,37,36,.12); padding: .45rem 0; }
.app-nav-inner { gap: 1.25rem; }
.global-search { flex: 1 1 380px; max-width: 560px; }
.app-navigation { background: transparent; border: 0; margin-top: -1.15rem; padding: .65rem 0 1rem; }
.app-menu { gap: .25rem; }
.app-menu > li > a, .app-menu-trigger { background: transparent; border: 0; border-radius: 10px; min-height: 44px; padding: .65rem .9rem; }
.app-menu > li > a:hover, .app-menu-trigger:hover, .app-menu-group.is-open > .app-menu-trigger { background: #e9eee5; }
.app-submenu { border: 0; border-radius: 12px; box-shadow: 0 14px 36px rgba(23,37,36,.16); padding: .5rem; }
.app-mobile-menu-toggle { align-items: center; display: inline-flex; justify-content: center; min-height: 44px; min-width: 44px; }
.app-mobile-menu { border: 0; border-radius: 18px 0 0 18px; max-width: min(88vw, 380px); }
.app-mobile-menu .offcanvas-body { -webkit-overflow-scrolling: touch; overscroll-behavior: contain; }
.mobile-menu-link { align-items: center; border-radius: 10px; color: var(--ink); display: flex; font-weight: 700; gap: .85rem; min-height: 48px; padding: .65rem .8rem; text-decoration: none; }
.mobile-menu-link i { color: var(--forest); font-size: 1.15rem; width: 1.4rem; }
.mobile-menu-link:hover, .mobile-menu-link:focus { background: #edf1e2; color: var(--forest); }
.app-bottom-nav { align-items: stretch; background: rgba(255,253,249,.97); border-top: 1px solid rgba(23,37,36,.1); bottom: 0; box-shadow: 0 -8px 25px rgba(23,37,36,.08); display: grid; grid-template-columns: repeat(4,1fr); left: 0; padding: .35rem .4rem calc(.35rem + env(safe-area-inset-bottom)); position: fixed; right: 0; z-index: 1020; }
.app-bottom-nav a, .app-bottom-nav button { align-items: center; background: transparent; border: 0; border-radius: 10px; color: var(--muted); display: flex; flex-direction: column; font: inherit; font-size: .68rem; font-weight: 700; gap: .12rem; justify-content: center; min-height: 52px; text-decoration: none; }
.app-bottom-nav i { font-size: 1.15rem; }
.app-bottom-nav a:hover, .app-bottom-nav button:hover { background: #edf1e2; color: var(--forest); }
@media (min-width: 768px) { .app-mobile-menu, .app-bottom-nav, .app-mobile-menu-toggle { display: none !important; } }
@media (max-width: 767px) { .app-nav { border-radius: 0 0 14px 14px; margin-bottom: 1rem !important; }.app-nav-inner { align-items: center; flex-direction: row; flex-wrap: wrap; gap: .5rem; min-height: 56px; }.app-brand img { max-width: 100px; }.app-brand span { display: none; }.app-account { gap: .4rem; margin-left: auto; width: auto; }.app-account > .user-avatar, .app-account > .user-avatar-placeholder { display: none; }.app-account .dropdown-toggle { max-width: 46px; overflow: hidden; padding: .5rem; }.app-navigation { display: none; }.global-search { max-width: none; width: 100%; }.app-content { padding-bottom: calc(5.5rem + env(safe-area-inset-bottom)); } }
.app-nav { background: #173b35 !important; border: 0 !important; border-radius: 0 0 18px 18px; box-shadow: 0 8px 24px rgba(18,48,42,.16); margin-bottom: .55rem !important; }
.app-navigation { background: #f5f4ef !important; border: 0 !important; margin: 0 0 1.25rem !important; padding: .4rem 0 .75rem !important; }
.app-navigation > .container { background: #fffdf9; border-radius: 16px; box-shadow: 0 4px 18px rgba(23,37,36,.08); padding: .3rem .65rem; }
.app-menu { gap: .35rem !important; }
.app-menu > li > a, .app-menu-trigger { border: 0 !important; border-radius: 11px !important; min-height: 46px !important; padding: .7rem .95rem !important; }
.app-menu > li > a { background: transparent !important; }
.app-menu > li > a:hover, .app-menu-trigger:hover, .app-menu-group.is-open > .app-menu-trigger { background: #edf3e8 !important; color: #204c40 !important; }
.app-menu-trigger { color: var(--ink) !important; }
.app-submenu { border: 0 !important; box-shadow: 0 12px 32px rgba(23,37,36,.17) !important; }
.app-bottom-nav { display: none; }
@media (max-width:767px) { .app-navigation { display:none !important; }.app-mobile-menu-toggle { background:rgba(255,255,255,.12) !important; border:1px solid rgba(255,255,255,.2) !important; }.app-account .notifications-dropdown > button { min-height:44px; min-width:44px; }.app-bottom-nav { display:grid !important; } }

.import-match-legend { display:flex; flex-wrap:wrap; gap:.65rem 1rem; margin:.8rem 0 1rem; }
.import-match-legend span { align-items:center; color:var(--muted); display:inline-flex; font-size:.77rem; font-weight:700; gap:.4rem; }
.import-match-legend i { border-radius:50%; height:.7rem; width:.7rem; }
.legend-ok { background:#36a66b; }.legend-proposed { background:#edb743; }.legend-create { background:#d86464; }
.import-match-select { border-width:1px; transition:background-color .15s,border-color .15s,box-shadow .15s; }
.import-match-select.match-ok { background-color:#edf8f0; border-color:#93c9a2; box-shadow:inset 3px 0 #36a66b; }
.import-match-select.match-proposed { background-color:#fff7df; border-color:#e5c76e; box-shadow:inset 3px 0 #edb743; }
.import-match-select.match-create { background-color:#fff0ef; border-color:#e2a19d; box-shadow:inset 3px 0 #d86464; }
.import-review .table td,.import-review .table th { padding:.38rem .45rem; }
.import-review .import-skip-cell { padding-left:.3rem; padding-right:.3rem; text-align:center; width:2rem; }
.import-skip-toggle { cursor:pointer; margin:0; }
.import-review .import-match-legend { margin:.45rem 0 .6rem; }
.import-review > p { margin-bottom:.55rem; }
.import-review .import-match-select { min-height:30px; padding:.2rem 1.8rem .2rem .5rem; }
.import-review .import-ticket-match { margin-bottom:.35rem !important; }
.import-review .match-feedback { display:none !important; }
.match-feedback { color:#39715b; font-size:.72rem; font-weight:700; }
.org-actions { align-items:flex-start; background:#f3f6f1; border:1px solid #dce5d9; border-radius:10px; flex-direction:column; gap:.45rem; min-width:148px; padding:.55rem; }
.org-actions .action-scope-label,.contact-actions .action-scope-label { color:#65716c; font-size:.64rem; font-weight:800; letter-spacing:.07em; text-transform:uppercase; }
.org-actions .action-group { gap:.35rem; }
.contact-actions { background:#fbfaf7; border:1px solid #e6e1d9; border-radius:8px; flex-wrap:wrap; padding:.3rem .45rem; }
.contact-actions .action-scope-label { flex-basis:100%; }
.table-stack td[data-label="Azioni"] { min-width:180px; }
.table-stack td[data-label="Contatti"] li { border-bottom:1px solid #eee9e1; padding:.55rem 0; }
.table-stack td[data-label="Contatti"] li:last-child { border-bottom:0; }
.import-ticket-match { min-width:10rem; }
.btn { border-radius: 4px; font-weight: 700; font-size: .85rem; }
.btn-primary { color: var(--ink); background: var(--lime); border-color: var(--lime); }
.btn-primary:hover, .btn-primary:focus { color: var(--ink); background: #c8e063; border-color: #c8e063; }
.form-control, .form-select { border-color: var(--line); border-radius: 4px; padding: .65rem .75rem; }
.form-control:focus, .form-select:focus { border-color: var(--forest); box-shadow: 0 0 0 .2rem rgba(36,69,61,.12); }
input:required:invalid:not(:focus):not(:placeholder-shown), select:required:invalid:not(:focus), .is-invalid-field { background-color: #fff6f4 !important; border-color: #ed755a !important; }
.page-heading { display: flex; align-items: end; justify-content: space-between; margin: 1.25rem 0 1.75rem; }
.page-heading h1 { font-size: 2rem; font-weight: 800; margin: 0; }
.eyebrow { color: var(--coral); font-family: "DM Mono", monospace; font-size: .72rem; margin: 0 0 .5rem; text-transform: uppercase; }
.management-panel { background: #fff; border: 1px solid var(--line); border-radius: 6px; padding: 1.5rem; }
.management-panel h2 { font-size: 1rem; font-weight: 800; margin-bottom: 1.25rem; }
.section-title { align-items: center; border-bottom: 1px solid var(--line); display: flex; flex-wrap: wrap; gap: .5rem .9rem; justify-content: space-between; margin-bottom: .85rem; min-height: 2.6rem; }
.section-title h2 { font-size: 1.05rem; font-weight: 800; margin: 0; }
.section-title span, .event-row span, .request-count { color: var(--muted); font-size: .78rem; }
.event-row { align-items: center; border-bottom: 1px solid var(--line); display: grid; gap: .5rem 1rem; grid-template-columns: minmax(0, 1fr) auto 16px auto; padding: .8rem 0; }
.event-row-inactive { background: #f7f5e9; }.event-row-past { background: #f0f2ef; opacity: .82; }.event-state { color: #7a6b32; }
.event-row-status-estrazione { background:#fff3e8; }
.event-row-status-lista { background:#fffbe6; }
.event-row-status-biglietti { background:#eef7fe; }
.event-row-status-chiusa { background:#edf7ee; }
.event-row-missing { background:#e3f0ff; box-shadow: inset 4px 0 #4a90d9; }
.event-toggle-form { display: inline-block; margin: 0; }
.event-active-switch { align-items: center; display: flex; gap: .35rem; margin: 0; min-height: 0; padding-left: 0; }
.event-active-switch .form-check-input { flex: 0 0 auto; float: none; margin: 0; }
.event-active-switch .form-check-input:checked { background-color: #39734d; border-color: #39734d; }
.event-active-switch .form-check-input:focus { border-color: #39734d; box-shadow: 0 0 0 .2rem rgba(57, 115, 77, .15); }
.event-active-switch .form-check-label { color: var(--muted); cursor: pointer; font-size: .78rem; }
/* Richieste concluse (evento passato o archiviate): in fondo all'elenco, sfondo grigio */
.request-row-concluded { background: #f0f2ef; }
.event-main { min-width: 0; }
.event-meta { overflow-wrap: anywhere; }
.event-buttons { align-items: stretch; display: flex; flex-wrap: wrap; gap: .4rem; justify-content: flex-end; }
.event-row strong, .event-row span { display: block; }
.event-link { color: var(--ink); text-decoration: none; }.event-link:hover { color: var(--forest); text-decoration: underline; }.event-filters { display: flex; flex-wrap: wrap; gap: .5rem; margin: 0 0 1rem; }.event-filters .form-select, .event-filters .search-select { max-width: 190px; }
.event-details { background: var(--paper); border-left: 3px solid var(--forest); display: grid; gap: .2rem; margin-top: .75rem; padding: .75rem .9rem; }.event-details span, .event-details a { color: var(--muted); font-size: .8rem; }.event-details a { color: var(--forest); font-weight: 700; }
.search-select { position: relative; }.search-select .form-control { padding-right: 4.5rem; }.search-select-clear { align-items: center; background: transparent; border: 0; color: var(--muted); display: flex; height: 100%; justify-content: center; position: absolute; right: 2.35rem; top: 0; width: 2rem; z-index: 2; }.search-select-arrow { align-items: center; background: transparent; border: 0; border-left: 1px solid var(--line); color: var(--muted); display: flex; height: 100%; justify-content: center; position: absolute; right: 0; top: 0; width: 2.2rem; z-index: 2; }.search-select-arrow:hover { color: var(--forest); }.search-select-results { background: #fff; border: 1px solid var(--line); box-shadow: 0 8px 20px rgba(23,37,36,.14); left: 0; max-height: 240px; overflow-y: auto; position: absolute; right: 0; top: calc(100% + 3px); z-index: 100; border-radius: 4px; }.search-select-option { background: #fff; border: 0; border-bottom: 1px solid var(--line); color: var(--ink); display: block; font-size: .84rem; padding: .65rem .75rem; text-align: left; width: 100%; }.search-select-option:hover, .search-select-option:focus { background: var(--lime); outline: 0; }
.repeatable-select .repeatable-row { margin-bottom: .5rem; }.repeatable-select .search-select { flex: 1 1 auto; min-width: 0; }.repeatable-select .repeatable-remove { flex: 0 0 auto; }
.dashboard-events { background: #fff; border-top: 3px solid var(--coral); padding: 1.25rem 0 0; }.dashboard-events .section-title { margin: 0 1.25rem .75rem; }.dashboard-events .section-title a { color: var(--forest); font-size: .8rem; font-weight: 800; text-decoration: none; }.upcoming-scroller { overflow-x: auto; scroll-snap-type: x mandatory; }.upcoming-grid { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(240px, 25%); grid-template-columns: none; }.upcoming-event { align-items: center; border-right: 1px solid var(--line); color: var(--ink); display: grid; gap: .75rem; grid-template-columns: 48px 1fr; min-height: 100px; padding: 1rem 1.25rem; position: relative; text-decoration: none; scroll-snap-align: start; }.upcoming-event:last-child { border-right: 0; }.upcoming-event:hover { background: var(--paper); }.upcoming-event strong, .upcoming-event span, .upcoming-event small { display: block; }.upcoming-event span, .upcoming-event small { color: var(--muted); font-size: .72rem; }.event-date { color: var(--forest); font-family: "DM Mono", monospace; font-size: .7rem; text-transform: uppercase; }.event-date span { color: var(--ink); font-family: Manrope, sans-serif; font-size: 1.5rem; font-weight: 800; line-height: 1; }.event-alert { color: var(--muted); font-family: "DM Mono", monospace; font-size: .65rem; grid-column: 2; }.event-alert.is-soon { color: #b7442f; font-weight: 700; }.event-alert.is-past { color: #6b7280; font-weight: 700; }.event-alert.is-stale { color: #8a5a00; font-weight: 700; }.upcoming-nav { padding: .15rem .45rem; }
.role-pill { border-radius: 999px; display: inline-block; font-family: "DM Mono", monospace; font-size: .72rem; padding: .25rem .5rem; }
.role-admin { background: #f9d6ca; color: #923c28; }.role-editor { background: #d4e7e0; color: #205749; }.role-user { background: #e5e7e2; color: #52605b; }
/* Ricerca globale header + filtri live nelle viste di gestione */
.global-search { flex: 1 1 auto; margin: 0 .75rem; max-width: 26rem; min-width: 10rem; }
.global-search-input { background: rgba(255,255,255,.12); border-color: rgba(255,255,255,.25); color: #fff; padding-left: 2rem; }
.global-search-input::placeholder { color: rgba(255,255,255,.65); }
.global-search-input:focus { background: #fff; border-color: var(--lime); color: var(--ink); }
.global-search-icon { color: rgba(255,255,255,.7); left: .6rem; position: absolute; top: 50%; transform: translateY(-50%); z-index: 2; }
.global-search-input:focus ~ .global-search-icon { color: var(--muted); }
.global-search .search-select-results { color: var(--ink); max-height: 320px; }
.global-search-group { background: var(--paper); color: var(--muted); font-family: "DM Mono", monospace; font-size: .66rem; font-weight: 700; letter-spacing: .04em; padding: .4rem .75rem .2rem; text-transform: uppercase; }
.global-search-item { text-decoration: none; }
.global-search-item strong { display: block; font-size: .84rem; }
/* Header scuro: ricerca, logo e area utente devono restare su una sola riga
   senza accavallarsi. L'area utente può restringersi (il nome utente va in
   ellissi) mentre la ricerca conserva una larghezza minima leggibile; in
   questo modo, anche con nomi utente lunghi o badge Superadmin, la riga non
   sfonda mai la larghezza della pagina. */
@media (min-width: 768px) {
  .app-nav-inner { flex-wrap: nowrap; }
  /* L'header scuro è un livello sopra la barra sticky: `backdrop-filter` lo
     rende già uno stacking context, ma con `z-index: auto` i pannelli a
     discesa della ricerca (z-index 100) finivano SOTTO le voci di menu
     (`.app-navigation`, z-index 1040) e si vedevano solo a sprazzi. */
  .app-nav { position: relative; z-index: 1050; }
  /* Il logo resta integro: a restringersi è solo il nome utente. */
  .app-nav-inner > .app-brand { flex: 0 0 auto; min-width: 0; }
  .app-nav-inner > .app-brand img { flex: 0 0 auto; }
  .app-nav-inner > .global-search { flex: 1 1 14rem; min-width: 9rem; }
  .app-account { flex: 0 1 auto; min-width: 0; }
  .app-account > * { flex: 0 0 auto; min-width: 0; }
  .app-account > .dropdown { flex: 0 1 auto; }
  .app-account > .dropdown > .dropdown-toggle { align-items: center; display: inline-flex; max-width: 100%; min-width: 0; }
  .app-account > .dropdown > .dropdown-toggle > span { display: block; max-width: 20rem; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .app-account > .dropdown > .dropdown-toggle > span .badge { vertical-align: middle; }
}
@media (min-width: 768px) and (max-width: 991.98px) {
  .app-nav-inner { gap: .75rem; }
  .app-account { gap: .4rem; }
  /* Sotto i 992px il nome utente completo non ci sta: viene troncato. */
  .app-account > .dropdown > .dropdown-toggle > span { max-width: 10rem; }
}
.section-title { align-items: center; flex-wrap: wrap; gap: .5rem; }
.list-filter { flex: 1 1 12rem; margin: 0 .5rem; max-width: 22rem; min-width: 10rem; }
.list-filter .form-control { padding-right: 2.2rem; }
.list-filter .search-select-clear { right: .1rem; }
.request-form-wrap { max-width: 760px; margin: 0 auto; }
/* Titoli di sezione del form richieste (statici e generati dallo script dei
   partecipanti): stessa resa delle sezioni degli altri moduli di gestione. */
.request-form h2 { align-items: center; border-bottom: 1px solid var(--line); color: var(--forest); display: flex; font-family: "DM Mono", monospace; font-size: .72rem; font-weight: 700; gap: .5rem; letter-spacing: .08em; margin: 1.6rem 0 .9rem; padding-bottom: .45rem; text-transform: uppercase; }
.request-form h2:first-of-type { margin-top: 0; }
.participant-row { align-items: center; display: grid; gap: .6rem; grid-template-columns: 28px 1fr 1fr; margin-bottom: .6rem; }
.participant-row span { color: var(--muted); font-family: "DM Mono", monospace; font-size: .75rem; }
.request-form .participant-row { grid-template-columns: 28px 1fr 1fr; }
.participant-card { align-items: center; background: #fff; border: 1px solid var(--line); border-radius: var(--radius-sm, 10px); box-shadow: 0 1px 2px rgba(23,37,36,.04); display: flex; flex-wrap: wrap; gap: .5rem .6rem; margin-bottom: .6rem; padding: .8rem .9rem .8rem 2.7rem; position: relative; }
.participant-card .participant-name-field { flex: 1 1 150px; min-width: 0; }
.participant-card .participant-name-field > span { color: var(--muted); display: block; font-size: .7rem; font-weight: 700; margin-bottom: .2rem; }
.participant-card > span:first-child { align-items: center; background: var(--ink); border-radius: 50%; color: var(--lime); display: inline-flex; font-size: .72rem; font-weight: 800; height: 22px; justify-content: center; left: .7rem; position: absolute; top: .7rem; width: 22px; }
.participant-card > input[name="participant_first_name"], .participant-card > input[name="participant_last_name"] { flex: 1 1 150px; min-width: 0; }
.participant-card .participant-contacts { display: grid; flex: 1 1 100%; gap: .5rem; grid-template-columns: 1fr 1fr; }
.participant-card .form-check { align-items: center; display: inline-flex; gap: .35rem; margin: 0; }
.participant-card .pass-category { flex: 1 1 160px; min-width: 0; }
/* Slot per le clausole accettate dal singolo nominativo (vuoto finché la
   funzionalità non è attiva): occupa spazio solo quando contiene elementi. */
.participant-card .participant-clause-slot:empty { display: none; }
.participant-card .participant-clause-slot { align-items: center; display: inline-flex; flex-wrap: wrap; gap: .35rem; }
.participant-add { margin: .15rem 0 .85rem; }
@media (max-width: 576px) { .request-form .participant-row, .participant-card .participant-contacts { grid-template-columns: 1fr; } .participant-card { padding-left: .8rem; padding-top: 2.4rem; } }.availability-message { border-left: 4px solid; font-size: .84rem; margin-top: .75rem; padding: .75rem .9rem; }.availability-message.green { background: #e3f0e5; border-color: #39734d; color: #205437; }.availability-message.yellow { background: #fff0c7; border-color: #d69822; color: #72510f; }.availability-message.red { background: #f9d6ca; border-color: #c4513c; color: #842f20; }.availability-dot { border-radius: 50%; height: 12px; width: 12px; }.availability-dot.green { background: #39734d; }.availability-dot.yellow { background: #d69822; }.availability-dot.red { background: #c4513c; }.settings-form { max-width: 760px; }
.app-footer { background: var(--ink); color: #c8d1c7; flex-shrink: 0; font-family: "DM Mono", monospace; font-size: .68rem; padding: .45rem 0; }
.footer-dot, .footer-link { color: var(--lime); }.footer-link { font-family: inherit; font-size: inherit; text-decoration: none; }.footer-link:hover { color: #fff; }
.login-shell { display: grid; grid-template-columns: 1.1fr minmax(300px, .9fr); gap: clamp(2rem, 8vw, 8rem); align-items: center; min-height: calc(100vh - 90px); padding: 3rem 8vw; }
.login-intro h1 { color: var(--forest); font-size: clamp(4.5rem, 11vw, 9rem); font-weight: 800; letter-spacing: 0; line-height: .9; margin: 0 0 1.5rem; }.login-intro > p:last-child { color: var(--muted); font-size: 1.1rem; line-height: 1.7; }
.login-logo { display: block; height: auto; margin: 0 0 1.8rem; max-width: 260px; width: 100%; }
.login-panel { background: white; border-top: 5px solid var(--coral); box-shadow: 16px 16px 0 var(--forest); max-width: 420px; padding: 2.5rem; }.login-panel h2 { font-size: 1.55rem; font-weight: 800; }.login-mark { display: flex; gap: 4px; margin-bottom: 2rem; }.login-mark span { background: var(--lime); display: block; height: 10px; width: 10px; }.login-mark span:nth-child(2) { background: var(--coral); }.login-mark span:nth-child(3) { background: var(--forest); }
.credits-body { align-items: center; display: flex; gap: 1rem; }.developer-image { background: #fff; border: 1px solid var(--line); border-radius: 50%; height: 64px; object-fit: contain; padding: .5rem; width: 64px; }.credits-modal-content { overflow: hidden; position: relative; }.contacts-form, .role-form { display: flex; flex-wrap: wrap; gap: .4rem; min-width: 260px; }
.org-actions { align-items: stretch; }
.org-actions .btn { align-items: center; display: inline-flex; justify-content: center; min-height: 31px; }
.org-actions form { display: inline-flex; margin: 0; }
.contact-actions { align-items: center; display: inline-flex; gap: .35rem; }
.contact-actions form { display: inline-flex; margin: 0; }
.recipient-card { background: #fff; border: 1px solid var(--line); border-radius: var(--radius-sm, 10px); box-shadow: 0 1px 2px rgba(23,37,36,.04); padding: 1rem 1.1rem; }
.participant-card .recipient-radio { font-size: .78rem; font-weight: 700; white-space: nowrap; }
.user-avatar { border-radius: 50%; object-fit: cover; width: 36px; height: 36px; border: 1px solid var(--line); flex-shrink: 0; }
.user-avatar-sm { width: 28px; height: 28px; }
.user-avatar-xs { width: 22px; height: 22px; }
.user-avatar-placeholder { border-radius: 50%; background: var(--paper); border: 1px solid var(--line); color: var(--muted); display: flex; align-items: center; justify-content: center; width: 36px; height: 36px; font-size: 1.1rem; flex-shrink: 0; }
.user-avatar-placeholder.user-avatar-sm { width: 28px; height: 28px; font-size: .85rem; }
.user-avatar-placeholder.user-avatar-xs { width: 22px; height: 22px; font-size: .7rem; }
.changelog-content { background: var(--paper); border: 1px solid var(--line); font-family: "DM Mono", monospace; font-size: .72rem; max-height: 300px; overflow: auto; padding: 1rem; white-space: pre-wrap; }
.manual-content pre { font-family: Manrope, sans-serif; font-size: .9rem; line-height: 1.7; margin: 0; white-space: pre-wrap; }
.delivery-instructions-panel { background: var(--lime); border-radius: 6px; color: var(--ink); margin: 0 0 1.25rem; padding: 1rem 1.25rem; }
.delivery-instructions-panel h2 { font-size: .8rem; font-weight: 800; letter-spacing: .04em; margin: 0 0 .35rem; text-transform: uppercase; }
.delivery-instructions-panel .delivery-type-label { display: inline-block; background: var(--ink); color: var(--lime); font-family: "DM Mono", monospace; font-size: .72rem; padding: .15rem .5rem; border-radius: 4px; }
.delivery-instructions-panel p { white-space: pre-wrap; }
.bulk-status-controls { background: var(--paper); border: 1px solid var(--line); border-radius: 6px; padding: .85rem 1rem; }
.bulk-status-controls .form-label { font-size: .78rem; font-weight: 700; margin-bottom: .25rem; }
@media (max-width: 767px) { .page-heading { align-items: stretch; flex-direction: column; gap: .75rem; margin: 1rem 0 1.25rem; } .page-heading > div:last-child { display: flex; flex-wrap: wrap; gap: .5rem; } .page-heading .btn { flex: 1 1 auto; } .table-responsive table td, .table-responsive table th { vertical-align: top; } .table-responsive { font-size: .84rem; } .table-responsive .btn { white-space: nowrap; } .table-responsive .form-select-sm { padding: .35rem .5rem; } .table-responsive thead th { font-size: .74rem; } .request-form .participant-card, .request-form .recipient-card { padding: .85rem; } .request-form .d-flex.justify-content-between { flex-wrap: wrap; gap: .5rem; } .request-form .d-flex.justify-content-between .btn, .request-form .d-flex.justify-content-between form { flex: 1 1 140px; } .d-flex.justify-content-between .btn-primary, .d-flex.justify-content-between .btn-outline-secondary { width: auto; } .table-responsive td:nth-child(1), .table-responsive td:nth-child(2) { min-width: 8rem; } }
/* Gestione richiesta: disponibilità per zona e layout a colonne esplicite (nessun campo compresso o sovrapposto).
   La tabella NON è più dentro un contenitore a scorrimento verticale: i dropdown del combobox
   ricercabile (position: absolute) devono poter uscire dalle celle senza essere tagliati.
   Lo scorrimento orizzontale su schermi stretti avviene a livello di pagina/pannello, non di wrapper. */
.event-availability { background: #fff; border: 1px solid var(--line); border-left: 3px solid var(--forest); border-radius: 6px; padding: .7rem .9rem; }.event-availability.green { border-left-color: #39734d; }.event-availability.yellow { border-left-color: #d69822; }.event-availability.red { border-left-color: #c4513c; }
.event-availability .form-text { margin-bottom: 0; }
.zone-availability-list { display: inline-flex; flex-wrap: wrap; gap: .3rem .5rem; }
.zone-availability-item { background: var(--paper); border: 1px solid var(--line); border-radius: 999px; font-family: "DM Mono", monospace; font-size: .7rem; padding: .15rem .5rem; }
.zone-availability-item.is-full { background: #f9d6ca; border-color: #c4513c; color: #842f20; font-weight: 700; }
.manage-request-wrap { max-width: 100%; }
/* NON usare overflow-x/overflow-y sul wrapper: qualsiasi overflow diverso da visible
   crea un nuovo contesto che taglia i dropdown absolute dei combobox ricercabili. */
.manage-request-wrap .manage-request-scroll { overflow: visible; }
.manage-request-wrap .management-panel { padding-bottom: 6rem; }
.manage-request-table { min-width: 880px; }
.manage-request-table thead th { color: var(--muted); font-size: .74rem; letter-spacing: .04em; text-transform: uppercase; }
.manage-request-table th.select-cell, .manage-request-table td.select-cell { min-width: 44px; width: 44px; }
.manage-request-table .participant-cell { min-width: 12rem; }
.manage-request-table .contacts-cell { min-width: 12rem; }
.manage-request-table .ticket-cell, .manage-request-table .pass-cell { min-width: 15rem; }
.manage-request-table td { vertical-align: top; }
/* I dropdown dei combobox (absolute, ~240px) devono uscire dalle celle senza essere tagliati:
   niente overflow nascosto su cella/riga/tabella/corpo-tabella. */
.manage-request-table td, .manage-request-table tr, .manage-request-table tbody, .manage-request-table { overflow: visible; }
.manage-request-table .ticket-field + .ticket-field { margin-top: .4rem; }
.manage-request-table .form-select, .manage-request-table .search-select { max-width: 100%; min-width: 0; width: 100%; }
.manage-request-table .contacts-cell .contact-line { display: block; overflow-wrap: anywhere; }
.zone-availability-hint { color: var(--muted); margin-top: .25rem; }
.zone-availability-hint.is-full { color: #842f20; font-weight: 700; }
/* Select ricercabili compatti (tabelle): il testo non viene coperto da freccia e crocetta */
.search-select-sm .form-control-sm { font-size: .84rem; padding-left: .5rem; padding-right: 3.4rem; }
.search-select-sm .search-select-clear { right: 1.75rem; width: 1.55rem; }
.search-select-sm .search-select-arrow { width: 1.7rem; }
/* Aggiornamento in massa: il select non viene schiacciato dal pulsante "Applica a selezione".
   Niente .input-group qui: i pulsanti vanno SOTTO i select (grid), così i dropdown dei combobox
   (ispirati al select nascosto) non vengono compressi né tagliati dal gruppo flessibile. */
.bulk-status-controls .bulk-grid { display: grid; gap: .75rem 1rem; grid-template-columns: 1fr; }
.bulk-status-controls .bulk-group { min-width: 0; }
.bulk-status-controls .bulk-group .btn { width: 100%; }
@media (min-width: 992px) { .bulk-status-controls .bulk-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 767px) { .manage-request-table { min-width: 720px; } .manage-request-table td.select-cell, .manage-request-table th.select-cell { min-width: 44px; width: 44px; } .manage-request-table .participant-cell, .manage-request-table .contacts-cell { min-width: 9rem; } .bulk-status-controls .bulk-grid { grid-template-columns: 1fr; } .manage-request-wrap .management-panel { padding: 1rem; } }

@media (max-width: 1024px) { .upcoming-grid { grid-auto-columns: minmax(240px, 50%); } .upcoming-event { border-bottom: 0; } }
@media (max-width: 576px) { .upcoming-grid { grid-auto-columns: minmax(240px, 85%); } .upcoming-event { gap: .85rem; grid-template-columns: 44px minmax(0, 1fr); padding: .85rem 1rem; } .upcoming-event strong { font-size: .92rem; } .upcoming-event span, .upcoming-event small { font-size: .72rem; } .event-alert { margin-top: .25rem; } .event-date span { font-size: 1.3rem; } .dashboard-events .section-title { margin: 0 1rem .6rem; } }

@media (max-width: 767px) { .app-nav-inner { align-items: flex-start; flex-direction: column; gap: .35rem; }.app-brand img { height: 28px; max-width: 105px; }.app-brand span { font-size: .58rem; }.global-search { margin: 0; max-width: none; order: 3; width: 100%; }.section-title { align-items: stretch; flex-direction: column; }.list-filter { margin: 0; max-width: none; width: 100%; }.app-menu { gap: 0; width: 100%; }.app-menu a { font-size: .72rem; padding: .25rem .3rem; }.app-account { width: 100%; }.login-shell { grid-template-columns: 1fr; padding: 3rem 1.25rem; }.login-intro h1 { font-size: 4.5rem; }.login-panel { box-shadow: 9px 9px 0 var(--forest); padding: 1.75rem; }.event-row { grid-template-columns: minmax(0, 1fr) auto; }.event-main { grid-column: 1 / -1; }.request-count { text-align: left; }.availability-dot { justify-self: end; }.event-buttons { grid-column: 1 / -1; justify-content: flex-start; }.event-buttons .btn, .event-buttons form { flex: 1 1 130px; }.event-buttons .btn { width: 100%; }.app-content { padding-bottom: 2rem; } .management-panel { padding: 1rem; } .page-heading h1 { font-size: 1.5rem; } }
/* Notifiche in-app (campanella) */
.notification-badge { font-size: .6rem; padding: 0 .38rem; }
.notification-menu { max-height: 380px; min-width: 340px; overflow-y: auto; padding-bottom: .5rem; }
.notification-menu .dropdown-header { font-size: .68rem; font-weight: 800; letter-spacing: .03em; text-transform: uppercase; }
#notifications-read-all { font-size: .66rem; }
.notification-item { align-items: flex-start; display: flex; gap: .5rem; padding: .45rem .75rem; white-space: normal; }
.notification-item .notification-icon { color: var(--forest); flex: 0 0 auto; font-size: .9rem; }
.notification-body { display: flex; flex-direction: column; min-width: 0; }
.notification-title { font-size: .78rem; font-weight: 600; }
.notification-message { font-size: .72rem; }
.notification-time { color: var(--muted); font-size: .66rem; }
.notification-item-unread { background: #eef3df; }
.notification-item-unread:hover { background: #e2ead2; }
/* Toast in tempo reale (nuove notifiche mentre l'utente è connesso) */
.notifications-toasts { display: flex; flex-direction: column; gap: .5rem; position: fixed; right: 1rem; top: 4.5rem; width: min(22rem, calc(100vw - 2rem)); z-index: 1080; }
.notification-toast { align-items: flex-start; background: #fff; border: 1px solid var(--line); border-left: 4px solid var(--forest); border-radius: 6px; box-shadow: 0 .5rem 1.25rem rgba(23,37,36,.18); cursor: pointer; display: flex; gap: .5rem; padding: .6rem .7rem; }
.notification-toast .notification-icon { color: var(--forest); font-size: 1rem; }
.notification-toast .notification-body { flex: 1 1 auto; min-width: 0; }
.notification-toast-close { background: none; border: 0; color: var(--muted); font-size: 1rem; line-height: 1; padding: 0 .1rem; }
.notification-toast-close:hover { color: var(--ink); }
/* Elenco utenti e pagina profilo */
.user-cell { align-items: center; display: flex; gap: .65rem; min-width: 10rem; }
.user-cell .user-name { display: block; font-weight: 700; }
.user-cell .user-username { color: var(--muted); display: block; font-family: "DM Mono", monospace; font-size: .72rem; }
.contact-lines { min-width: 11rem; }
.contact-line { display: block; font-size: .82rem; max-width: 22rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pass-pill { border-radius: 999px; display: inline-block; font-family: "DM Mono", monospace; font-size: .72rem; padding: .25rem .5rem; }
.pass-on { background: #e4f0d8; color: #4a6b1f; }
.pass-off { background: #e5e7e2; color: #52605b; }
.profile-avatar { height: 88px; width: 88px; }
.profile-head { align-items: center; display: flex; gap: 1rem; }
.event-overview .stat-label { color: var(--bs-secondary-color); font-size: .72rem; letter-spacing: .05em; text-transform: uppercase; }
.event-overview .stat-value { font-size: 1.5rem; font-weight: 600; line-height: 1.2; }
/* Contatore richieste di biglietti/pass sotto il nome (solo admin) e avviso nome già richiesto */
.holder-count { color: var(--muted); display: block; font-size: .72rem; }
.holder-hint { color: #8a5300; font-weight: 600; }
/* Messaggi flash con categoria (avvisi gialli, errori rossi) */
.flash-messages { display: flex; flex-direction: column; gap: .5rem; }
.flash-messages .alert { margin: 0; }
/* Badge ambiente (Staging Mode / Official) */
.env-badge { position: fixed; bottom: .75rem; left: .75rem; z-index: 1080; padding: .25rem .65rem; border-radius: 999px; font-size: .75rem; font-weight: 600; box-shadow: 0 1px 4px rgba(0,0,0,.25); pointer-events: none; }
.env-badge-staging { background: #ffc107; color: #212529; }
.env-badge-production { background: #198754; color: #fff; }

/* ---------------------------------------------------------------------------
   Azioni compatte nelle pagine di management (eventi, luoghi, organizzatori,
   utenti, biglietti, richieste).
   - .action-group: contenitore flessibile per pulsanti e form di azione.
   - .icon-btn: pulsante quadrato a sola icona; il testo resta nel tooltip
     nativo (attributo title) e in aria-label per gli screen reader.
   --------------------------------------------------------------------------- */
.action-group { align-items: center; display: flex; flex-wrap: wrap; gap: .3rem; }
.action-group form { display: inline-flex; margin: 0; }
.action-group-end { justify-content: flex-end; }
.icon-btn { align-items: center; display: inline-flex; height: 31px; justify-content: center; line-height: 1; padding: 0; width: 31px; }
.icon-btn i { font-size: .85rem; line-height: 1; margin: 0; }
.icon-btn:focus-visible { outline: 2px solid var(--forest); outline-offset: 2px; }
/* Su dispositivi touch il pulsante icona resta comodo da toccare (area 36px) */
@media (hover: none) and (pointer: coarse) { .icon-btn { height: 36px; width: 36px; } .icon-btn i { font-size: .95rem; } }

/* Tabelle di management: su smartphone diventano schede impilate.
   Ogni cella espone il nome della colonna in data-label. */
@media (max-width: 575.98px) {
  .table-stack { border-collapse: separate; display: block; width: 100%; }
  .table-stack > tbody { display: block; width: 100%; }
  .table-stack thead { display: none; }
  .table-stack > tbody > tr { border: 1px solid var(--line); border-radius: 6px; display: block; margin-bottom: .7rem; overflow: hidden; padding: .55rem .75rem; }
  .table-stack > tbody > tr:last-child { margin-bottom: 0; }
  .table-stack > tbody > tr > td { border: 0; display: block; padding: .3rem 0; }
  .table-stack > tbody > tr > td::before { color: var(--muted); content: attr(data-label); display: block; font-family: "DM Mono", monospace; font-size: .64rem; letter-spacing: .05em; margin-bottom: .2rem; text-transform: uppercase; }
  .table-stack > tbody > tr > td.table-cell-actions { border-top: 1px solid var(--line); margin-top: .35rem; padding-top: .5rem; }
  .table-stack > tbody > tr > td.table-cell-actions::before, .table-stack > tbody > tr > td.table-empty-cell::before { display: none; }
  .table-stack > tbody > tr > td.table-empty-cell { padding: .9rem .25rem; }
  .table-stack .action-group { justify-content: flex-start; }
  .table-stack .contact-actions { flex: 0 0 auto; }
  .table-stack > tbody > tr > td .contact-line { max-width: 100%; }
}
@media (max-width: 991.98px) {
  .management-panel { padding: 1.1rem; }
  .section-title { flex-wrap: wrap; gap: .5rem; }
  .management-panel .table-responsive { -webkit-overflow-scrolling: touch; font-size: .86rem; }
  .management-panel .table-responsive .btn:not(.icon-btn) { white-space: nowrap; }
}
@media (min-width: 768px) and (max-width: 991.98px) {
  /* Elenco eventi: a tablet i pulsanti vanno a capo sotto i dati invece di
     comprimere il contenuto della riga. */
  .event-row { grid-template-columns: minmax(0, 1fr) auto 16px; }
  .event-buttons { grid-column: 1 / -1; justify-content: flex-start; }
}
@media (max-width: 767px) {
  /* Le azioni a icona non vengono stirate dalle regole .event-buttons .btn */
  .event-buttons .btn.icon-btn { flex: 0 0 auto; width: 36px; }
  .event-buttons .action-form { flex: 0 0 auto; }
  /* Badge ambiente piu compatto per non coprire i contenuti in fondo alla pagina */
  .env-badge { bottom: .5rem; font-size: .68rem; left: .5rem; padding: .2rem .5rem; }
}


/* ---- Documenti legali pubblici (privacy, termini, cookie, contatti) ---- */
.legal-body { background: var(--paper); color: var(--ink); }
.legal-skip-link { background: var(--lime); border-radius: 0 0 10px 0; color: var(--ink); font-weight: 800; left: .5rem; padding: .55rem .85rem; position: fixed; top: -5rem; z-index: 1200; }
.legal-skip-link:focus { top: 0; }
.legal-main { max-width: 1120px; padding-bottom: clamp(2rem, 5vw, 3.5rem); padding-top: clamp(1rem, 3vw, 2rem); }
.legal-hero { background: linear-gradient(135deg, #12201f 0%, #1c3531 58%, #2b4d43 100%); border: 1px solid rgba(255,255,255,.1); border-radius: var(--radius-lg); box-shadow: var(--shadow-card); color: #fff; margin-bottom: 1rem; overflow: hidden; padding: clamp(1.25rem, 4vw, 2.5rem); position: relative; }
.legal-hero::after { background: radial-gradient(circle, rgba(215,239,119,.16) 0%, rgba(215,239,119,0) 68%); content: ""; height: 26rem; pointer-events: none; position: absolute; right: -9rem; top: -10rem; width: 26rem; }
.legal-hero > * { position: relative; z-index: 1; }
.legal-eyebrow { color: var(--coral); font-family: "DM Mono", monospace; font-size: .7rem; font-weight: 500; letter-spacing: .08em; margin: 0 0 .55rem; text-transform: uppercase; }
.legal-hero h1 { font-size: clamp(1.9rem, 4.4vw, 3.2rem); font-weight: 800; letter-spacing: -.035em; line-height: 1.02; margin: 0 0 .8rem; max-width: 22ch; }
.legal-subtitle { color: rgba(255,255,255,.78); font-size: clamp(.92rem, 1.3vw, 1.02rem); line-height: 1.65; margin: 0 0 1.1rem; max-width: 72ch; }
.legal-meta { display: flex; flex-wrap: wrap; gap: .5rem .9rem; margin: 0; }
.legal-meta span { align-items: center; color: var(--lime); display: inline-flex; font-family: "DM Mono", monospace; font-size: .7rem; }
.legal-tabs { background: rgba(255,255,255,.72); border: 1px solid var(--line); border-radius: 14px; display: flex; gap: .25rem; margin-bottom: 1.25rem; overflow-x: auto; padding: .3rem; scrollbar-width: none; }
.legal-tabs::-webkit-scrollbar { display: none; }
.legal-tabs a { border-radius: 10px; color: var(--muted); flex: 0 0 auto; font-size: .8rem; font-weight: 800; padding: .62rem .9rem; text-decoration: none; white-space: nowrap; }
.legal-tabs a:hover { background: rgba(36,69,61,.06); color: var(--forest); }
.legal-tabs a.active { background: #fff; box-shadow: 0 4px 14px rgba(23,37,36,.09); color: var(--ink); }
.legal-layout { align-items: start; }
.legal-layout > aside { align-self: stretch; }
.legal-toc { background: #fff; border: 1px solid var(--line); border-radius: var(--radius-md); box-shadow: var(--shadow-soft); max-height: calc(100dvh - 7.5rem); overflow-y: auto; padding: 1rem; position: sticky; top: 6.5rem; }
.legal-toc-title { color: var(--forest); font-family: "DM Mono", monospace; font-size: .68rem; font-weight: 500; letter-spacing: .08em; margin: 0 0 .6rem; text-transform: uppercase; }
.legal-toc ol { font-size: .78rem; list-style: none; margin: 0; padding-left: 0; }
.legal-toc li { margin-bottom: .45rem; }
.legal-toc a { color: var(--muted); text-decoration: none; }
.legal-toc a:hover { color: var(--forest); text-decoration: underline; }
.legal-article { min-width: 0; }
.legal-section { border-bottom: 1px solid var(--line); margin-bottom: 1.75rem; padding-bottom: 1.5rem; scroll-margin-top: 7rem; }
.legal-section h2 { color: var(--ink); font-size: clamp(1.08rem, 1.7vw, 1.28rem); font-weight: 800; letter-spacing: -.015em; line-height: 1.25; margin: 0 0 .8rem; }
.legal-section p { color: #33413e; font-size: .92rem; line-height: 1.75; margin-bottom: .8rem; }
.legal-section p:last-child { margin-bottom: 0; }
.legal-section ul { color: #33413e; font-size: .9rem; line-height: 1.72; margin: .5rem 0 0; padding-left: 1.2rem; }
.legal-section li { margin-bottom: .4rem; }
.legal-highlight { background: #f8f8e9; border: 1px solid #e3e2c4; border-radius: 12px; border-left: 4px solid var(--lime); padding: 1rem; }


.legal-inline-actions { align-items: center; display: flex; flex-wrap: wrap; gap: .75rem; margin: 1.5rem 0; }
.legal-support-cta { align-items: center; background: linear-gradient(135deg, var(--forest), #18332e); border-radius: var(--radius-lg); box-shadow: var(--shadow-soft); color: #fff; display: flex; flex-wrap: wrap; gap: 1.25rem; justify-content: space-between; margin-top: 1.5rem; padding: clamp(1.2rem, 3vw, 1.9rem); }
.legal-support-cta h2 { font-size: clamp(1.05rem, 2vw, 1.3rem); font-weight: 800; letter-spacing: -.02em; margin: 0 0 .35rem; }
.legal-support-cta p { color: rgba(255,255,255,.78); font-size: .86rem; line-height: 1.6; max-width: 62ch; }
.legal-support-cta .legal-eyebrow { color: var(--lime); }
.legal-footer { background: var(--ink); color: rgba(255,255,255,.75); font-size: .76rem; padding: 1.25rem 0; }
.legal-footer a { color: #fff; font-weight: 700; text-decoration: none; }
.legal-footer a:hover { color: var(--lime); }
.legal-footer-inner { align-items: center; display: flex; flex-wrap: wrap; gap: .75rem; justify-content: space-between; }
.legal-footer-links { align-items: center; display: flex; flex-wrap: wrap; gap: 1rem; }
.legal-cookie-button { color: rgba(255,255,255,.75); font-size: .76rem; font-weight: 700; text-decoration: underline; }
.legal-cookie-button:hover { color: var(--lime); }
.legal-form-card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius-lg); box-shadow: var(--shadow-soft); padding: clamp(1rem, 3vw, 1.75rem); }
.legal-form-card h2 { font-size: clamp(1.3rem, 2vw, 1.5rem); font-weight: 800; letter-spacing: -.02em; margin: 0 0 .5rem; }
.legal-form-card > p { font-size: .86rem; line-height: 1.65; }
.legal-form-note { color: var(--muted); font-size: .76rem; }
.legal-hp { height: 1px; left: -10000px; overflow: hidden; position: absolute; top: auto; width: 1px; }
.legal-contact-aside { background: #fff; border: 1px solid var(--line); border-radius: var(--radius-lg); box-shadow: var(--shadow-soft); padding: clamp(1rem, 3vw, 1.75rem); }
.legal-contact-aside h2 { font-size: clamp(1.15rem, 2vw, 1.35rem); font-weight: 800; margin: 0 0 1rem; }
.legal-contact-aside h3 { font-size: .98rem; font-weight: 800; margin: 0 0 .5rem; }
.legal-contact-aside p { color: var(--muted); font-size: .84rem; line-height: 1.65; }
.legal-contact-steps { display: grid; gap: 1rem; list-style: none; margin: 0 0 1rem; padding: 0; }
.legal-contact-steps li { display: grid; gap: .7rem; grid-template-columns: 2rem 1fr; }
.legal-contact-steps li > span { align-items: center; background: var(--lime); border-radius: 8px; color: var(--ink); display: flex; font-family: "DM Mono", monospace; font-size: .78rem; font-weight: 700; height: 2rem; justify-content: center; width: 2rem; }
.legal-contact-steps strong { display: block; font-size: .86rem; margin-bottom: .15rem; }
.legal-contact-steps p { margin: 0; }
.legal-contact-location { color: var(--forest) !important; font-size: .78rem !important; font-weight: 700; }
.legal-download-card { background: #fff; border: 1px solid var(--line); border-radius: var(--radius-lg); box-shadow: var(--shadow-soft); display: flex; flex-direction: column; padding: 1.4rem; transition: transform .18s ease, box-shadow .18s ease; }
.legal-download-card:hover { box-shadow: var(--shadow-card); transform: translateY(-3px); }
.legal-download-icon { align-items: center; background: #eef4df; border-radius: 12px; color: var(--forest); display: flex; font-size: 1.4rem; height: 2.8rem; justify-content: center; margin-bottom: .9rem; width: 2.8rem; }
.legal-download-card h2 { font-size: 1.05rem; font-weight: 800; margin: 0 0 .5rem; }
.legal-download-card p { color: var(--muted); font-size: .84rem; line-height: 1.6; }
.legal-download-meta { color: var(--forest) !important; font-family: "DM Mono", monospace; font-size: .68rem !important; margin-bottom: 1rem; }
.legal-download-actions { align-items: center; display: flex; flex-wrap: wrap; gap: .5rem; margin-top: auto; }

/* ---- Banner cookie GDPR: scheda compatta, non un overlay a tutta larghezza ---- */
.cookie-banner { background: rgba(19,31,30,.97); border: 1px solid rgba(255,255,255,.16); border-radius: 18px; bottom: max(1rem, env(safe-area-inset-bottom)); box-shadow: 0 22px 60px rgba(9,18,17,.34); color: #fff; left: auto; max-height: min(76dvh, 620px); overflow-y: auto; padding: 1rem; position: fixed; right: max(1rem, env(safe-area-inset-right)); width: min(430px, calc(100vw - 2rem)); z-index: 1090; }
.cookie-banner[hidden], .cookie-preferences[hidden] { display: none !important; }
.cookie-banner-close { align-items: center; background: rgba(255,255,255,.08); border: 0; border-radius: 8px; color: rgba(255,255,255,.8); display: inline-flex; height: 36px; justify-content: center; position: absolute; right: .55rem; top: .55rem; width: 36px; }
.cookie-banner-close:hover, .cookie-banner-close:focus-visible { background: rgba(255,255,255,.18); color: #fff; }
.cookie-banner-inner { display: grid; gap: .85rem; }
.cookie-banner-copy { align-items: start; display: grid; gap: .7rem; grid-template-columns: 36px minmax(0, 1fr); padding-right: 1.5rem; }
.cookie-banner-icon { align-items: center; background: rgba(215,239,119,.12); border: 1px solid rgba(215,239,119,.28); border-radius: 10px; color: var(--lime); display: flex; font-size: 1rem; height: 36px; justify-content: center; width: 36px; }
.cookie-banner-title { color: var(--lime); font-size: .9rem; font-weight: 800; margin: 0 0 .25rem; }
.cookie-banner-copy p { color: rgba(255,255,255,.78); font-size: .76rem; line-height: 1.5; }
.cookie-banner-copy a { color: #fff; font-weight: 700; }
.cookie-banner-actions { align-items: stretch; display: grid; gap: .45rem; grid-template-columns: 1fr 1fr; }
.cookie-banner-actions .btn { min-height: 44px; }
.cookie-preferences-toggle { color: rgba(255,255,255,.78); font-size: .76rem; grid-column: 1 / -1; min-height: 36px; text-align: center; text-decoration: underline; }
.cookie-preferences-toggle:hover { color: var(--lime); }
.cookie-preferences { border-top: 1px solid rgba(255,255,255,.16); display: grid; gap: .75rem; padding-top: .85rem; }
.cookie-preference-row { align-items: center; display: flex; gap: .85rem; justify-content: space-between; }
.cookie-preference-row strong { display: block; font-size: .78rem; }
.cookie-preference-row span { color: rgba(255,255,255,.64); display: block; font-size: .7rem; line-height: 1.4; }
.cookie-preference-row .form-check-input { background-color: rgba(255,255,255,.16); border-color: rgba(255,255,255,.5); flex: 0 0 auto; }
.cookie-preference-row .form-check-input:checked { background-color: var(--lime); border-color: var(--lime); }
.cookie-preferences-footer { align-items: center; display: flex; flex-wrap: wrap; gap: .65rem; }
.cookie-consent-status { color: var(--lime); font-family: "DM Mono", monospace; font-size: .68rem; }
.cookie-consent-status.is-saved { color: var(--lime); }
@media (max-width: 767px) {
  .legal-hero { padding: 1.15rem; }
  .legal-toc { max-height: none; position: static; }
  .legal-support-cta { align-items: flex-start; flex-direction: column; }
  .legal-support-cta .btn { width: 100%; }
  .cookie-banner { border-radius: 16px; bottom: max(.5rem, env(safe-area-inset-bottom)); left: .5rem; padding: .85rem; right: .5rem; width: auto; }
  .cookie-preference-row { align-items: flex-start; }
}

/* ---- Sito pubblico: navigazione, vetrina e accesso ---- */
.public-site { background: radial-gradient(circle at 8% 0%, #fbfaf3 0, transparent 34%), radial-gradient(circle at 92% 8%, #edf3e1 0, transparent 30%), var(--paper); overflow-x: clip; }
.legal-page { overflow-x: clip; }
.landing-hero, .landing-access, .landing-details { min-width: 0; }
.public-site .btn, .legal-page .btn { border-radius: var(--radius-sm); font-weight: 800; }
.public-site .btn-lg, .legal-page .btn-lg { min-height: 48px; padding: .75rem 1.2rem; }
.public-site .form-control, .legal-page .form-control, .public-site .form-select, .legal-page .form-select { background-color: #fff; border-radius: 11px; min-height: 46px; }
.public-nav { -webkit-backdrop-filter: blur(16px); backdrop-filter: blur(16px); background: rgba(19,31,30,.95); border-bottom: 1px solid rgba(255,255,255,.1); color: #fff; position: sticky; top: 0; z-index: 1030; }
.public-nav-inner { align-items: center; display: flex; flex-wrap: nowrap; gap: .85rem; justify-content: space-between; min-height: 72px; padding-bottom: .7rem; padding-top: .7rem; }
.public-brand { align-items: center; color: #fff; display: flex; flex: 0 0 auto; gap: .7rem; text-decoration: none; }
.public-brand:hover { color: #fff; }
.public-brand-mark { align-items: center; background: var(--lime); border-radius: 11px; box-shadow: 0 6px 18px rgba(215,239,119,.2); color: var(--ink); display: inline-flex; flex: 0 0 auto; font-family: "DM Mono", monospace; font-size: .92rem; font-weight: 700; height: 38px; justify-content: center; letter-spacing: -.08em; width: 38px; }
.public-brand-copy { display: flex; flex-direction: column; line-height: 1.12; }
.public-brand-copy strong { font-size: .98rem; font-weight: 800; letter-spacing: .01em; }
.public-brand-copy small { color: rgba(215,239,119,.9); font-family: "DM Mono", monospace; font-size: .58rem; letter-spacing: .06em; text-transform: uppercase; }
.public-nav-toggle { align-items: center; background: rgba(255,255,255,.07); border: 1px solid rgba(255,255,255,.15); border-radius: 10px; color: #fff; display: none; flex: 0 0 auto; font-size: 1.2rem; height: 44px; justify-content: center; margin-left: auto; width: 44px; }
.public-nav-toggle:hover { background: rgba(255,255,255,.14); }
.public-nav-menu { margin-left: auto; }
.public-nav-links { align-items: center; display: flex; flex-wrap: wrap; gap: .45rem 1.15rem; }
.public-nav-links > a:not(.btn) { color: rgba(255,255,255,.74); font-size: .78rem; font-weight: 700; padding: .45rem 0; position: relative; text-decoration: none; }
.public-nav-links > a:not(.btn)::after { background: var(--lime); bottom: .1rem; content: ""; height: 2px; left: 0; position: absolute; transform: scaleX(0); transform-origin: left; transition: transform .18s ease; width: 100%; }
.public-nav-links > a:not(.btn):hover { color: #fff; }
.public-nav-links > a:not(.btn):hover::after { transform: scaleX(1); }
.public-login-link { min-height: 44px; padding-inline: 1rem; white-space: nowrap; }
.public-site a:focus-visible, .legal-page a:focus-visible, .cookie-banner button:focus-visible { outline: 3px solid var(--lime); outline-offset: 2px; }
.public-skip-link { background: var(--lime); border-radius: 0 0 10px 0; color: var(--ink); font-weight: 800; left: .5rem; padding: .55rem .85rem; position: fixed; top: -5rem; z-index: 1200; }
.public-skip-link:focus { top: 0; }
.landing-main { max-width: 1240px; padding-bottom: clamp(2rem, 5vw, 4rem); padding-top: clamp(1rem, 3vw, 2rem); }
.landing-layout { align-items: start; display: grid; gap: clamp(1rem, 2.5vw, 2rem); grid-template-areas: "hero access" "details access"; grid-template-columns: minmax(0, 1.55fr) minmax(320px, .78fr); }
.landing-hero { background: linear-gradient(135deg, #101d1c 0%, #19312d 56%, #285044 100%); border: 1px solid rgba(255,255,255,.1); border-radius: var(--radius-lg); box-shadow: var(--shadow-card); color: #fff; grid-area: hero; isolation: isolate; overflow: hidden; padding: clamp(1.6rem, 4.2vw, 3.5rem); position: relative; }
.landing-hero::before { background-image: linear-gradient(rgba(255,255,255,.055) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,.055) 1px, transparent 1px); background-size: 46px 46px; content: ""; inset: 0; -webkit-mask-image: linear-gradient(135deg, #000, transparent 62%); mask-image: linear-gradient(135deg, #000, transparent 62%); pointer-events: none; position: absolute; z-index: -1; }
.landing-hero::after { background: radial-gradient(circle, rgba(215,239,119,.16) 0%, rgba(215,239,119,0) 70%); content: ""; height: 34rem; pointer-events: none; position: absolute; right: -12rem; top: -15rem; width: 34rem; z-index: -1; }
.landing-hero-copy { max-width: 46rem; }
.landing-kicker { align-items: center; color: var(--lime); display: inline-flex; gap: .55rem; margin-bottom: 1rem; }
.landing-pulse { background: var(--lime); border-radius: 50%; box-shadow: 0 0 0 5px rgba(215,239,119,.12); height: 7px; width: 7px; }
.landing-hero h1 { color: #fff; font-size: clamp(2.25rem, 4.8vw, 4.4rem); font-weight: 800; letter-spacing: -.05em; line-height: .99; margin: 0 0 1.15rem; max-width: 14ch; text-wrap: balance; }
.landing-hero h1 span { color: var(--lime); }
.landing-lead { color: rgba(255,255,255,.78); font-size: clamp(.95rem, 1.25vw, 1.08rem); line-height: 1.7; margin: 0 0 1.6rem; max-width: 58ch; }
.landing-actions { align-items: center; display: flex; flex-wrap: wrap; gap: .6rem; margin-bottom: 1.8rem; }
.landing-actions .btn { border-radius: 12px; }
.landing-actions .btn-outline-light { border-color: rgba(255,255,255,.3); color: #fff; }
.landing-actions .btn-outline-light:hover { background: rgba(255,255,255,.1); border-color: rgba(255,255,255,.55); }
.landing-proof { border-top: 1px solid rgba(255,255,255,.15); display: grid; gap: .65rem; grid-template-columns: repeat(3, minmax(0, 1fr)); margin: 0; padding-top: 1.15rem; }
.landing-proof > div { background: rgba(255,255,255,.045); border: 1px solid rgba(255,255,255,.09); border-radius: 12px; padding: .7rem .75rem; }
.landing-proof dt { color: var(--lime); font-family: "DM Mono", monospace; font-size: .6rem; letter-spacing: .07em; margin-bottom: .25rem; text-transform: uppercase; }
.landing-proof dd { color: rgba(255,255,255,.82); font-size: .75rem; line-height: 1.45; margin: 0; }
.landing-details { display: flex; flex-direction: column; gap: 1.25rem; grid-area: details; min-width: 0; }
.landing-section { background: rgba(255,253,249,.9); border: 1px solid var(--line); border-radius: var(--radius-lg); box-shadow: var(--shadow-soft); padding: clamp(1.2rem, 3vw, 2rem); scroll-margin-top: 6rem; }
.landing-section-head { margin-bottom: 1.25rem; max-width: 68ch; }
.landing-section-head h2, .landing-trust h2 { font-size: clamp(1.35rem, 2.5vw, 2rem); font-weight: 800; letter-spacing: -.035em; line-height: 1.08; margin: 0 0 .65rem; }
.landing-section-head > p:last-child, .landing-trust p { color: var(--muted); font-size: .87rem; line-height: 1.65; margin: 0; }
.landing-features { display: grid; gap: .75rem; grid-template-columns: repeat(3, minmax(0, 1fr)); }
.landing-feature { background: #fff; border: 1px solid var(--line); border-radius: var(--radius-md); padding: 1.05rem; transition: border-color .18s ease, box-shadow .18s ease, transform .18s ease; }
.landing-feature:hover { border-color: #c5cbbd; box-shadow: 0 14px 30px rgba(23,37,36,.07); transform: translateY(-2px); }
.landing-feature-icon { align-items: center; background: #eef4df; border-radius: 12px; color: var(--forest); display: inline-flex; font-size: 1.05rem; height: 2.6rem; justify-content: center; margin-bottom: .8rem; width: 2.6rem; }
.landing-feature h3 { font-size: .9rem; font-weight: 800; letter-spacing: -.01em; margin: 0 0 .35rem; }
.landing-feature p { color: var(--muted); font-size: .78rem; line-height: 1.58; margin: 0; }
.landing-steps { display: grid; gap: .75rem; grid-template-columns: repeat(3, minmax(0, 1fr)); list-style: none; margin: 0; padding: 0; }
.landing-steps li { background: #fff; border: 1px solid var(--line); border-radius: var(--radius-md); display: flex; flex-direction: column; gap: .65rem; padding: 1rem; }
.landing-steps li > span { align-items: center; background: var(--ink); border-radius: 9px; color: var(--lime); display: inline-flex; font-family: "DM Mono", monospace; font-size: .72rem; font-weight: 500; height: 2rem; justify-content: center; width: 2.4rem; }
.landing-steps h3 { font-size: .86rem; font-weight: 800; margin: 0 0 .25rem; }
.landing-steps p { color: var(--muted); font-size: .78rem; line-height: 1.58; margin: 0; }
.landing-trust { align-items: center; background: linear-gradient(135deg, var(--forest), #17332d); border-radius: var(--radius-lg); box-shadow: var(--shadow-soft); color: #fff; display: grid; gap: 1.25rem; grid-template-columns: minmax(0, 1fr) auto; padding: clamp(1.2rem, 3vw, 2rem); }
.landing-trust .eyebrow { color: var(--lime); }
.landing-trust h2 { color: #fff; }
.landing-trust p { color: rgba(255,255,255,.76); }
.landing-trust-points { display: flex; flex-direction: column; gap: .5rem; }
.landing-trust-points span { align-items: center; background: rgba(255,255,255,.07); border: 1px solid rgba(255,255,255,.12); border-radius: 999px; color: rgba(255,255,255,.9); display: inline-flex; font-size: .72rem; font-weight: 700; gap: .45rem; padding: .42rem .7rem; white-space: nowrap; }
.landing-trust-points i { color: var(--lime); }
.landing-access { align-self: start; display: flex; flex-direction: column; gap: .75rem; grid-area: access; position: sticky; top: 6rem; z-index: 3; }
.landing-login { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius-lg); border-top: 4px solid var(--lime); box-shadow: var(--shadow-card); max-width: none; padding: clamp(1.25rem, 2.5vw, 1.8rem); }
.landing-login-head { align-items: center; display: flex; gap: .8rem; margin-bottom: .85rem; }
.landing-login-head .eyebrow { color: var(--forest); margin: 0 0 .15rem; }
.landing-login-icon { align-items: center; background: #eef4df; border-radius: 12px; color: var(--forest); display: inline-flex; flex: 0 0 auto; font-size: 1.05rem; height: 42px; justify-content: center; width: 42px; }
.landing-login h2 { font-size: clamp(1.3rem, 2.2vw, 1.55rem); font-weight: 800; letter-spacing: -.025em; margin: 0; }
.landing-login-copy { color: var(--muted); font-size: .8rem; line-height: 1.55; margin: 0 0 1.1rem; }
.landing-login-form .form-label { font-size: .76rem; font-weight: 800; margin-bottom: .3rem; }
.landing-login-footer { border-top: 1px solid var(--line); margin-top: 1.1rem; padding-top: .85rem; }
.landing-login-footer p { color: var(--muted); font-size: .7rem; line-height: 1.5; margin: 0; }
.landing-login-footer p + p { margin-top: .35rem; }
.landing-login-footer a { color: var(--forest); font-weight: 700; }
.landing-access-docs { align-items: center; background: rgba(255,255,255,.7); border: 1px solid var(--line); border-radius: 14px; display: flex; flex-wrap: wrap; gap: .35rem .75rem; padding: .7rem .85rem; }
.landing-access-docs span { color: var(--muted); font-family: "DM Mono", monospace; font-size: .58rem; letter-spacing: .05em; text-transform: uppercase; }
.landing-access-docs a { color: var(--forest); font-size: .7rem; font-weight: 800; text-decoration: none; }
.landing-access-docs a:hover { text-decoration: underline; }

/* ---- Pagine legali dentro il layout del portale ---- */
.legal-page { background: var(--paper); }
.legal-main-page { max-width: 1180px; padding-bottom: clamp(2rem, 5vw, 3.5rem); padding-top: clamp(1rem, 3vw, 1.5rem); }
.legal-page .legal-skip-link { border-radius: 0 0 10px 0; }
.legal-page .legal-eyebrow { color: var(--lime); }
.legal-page .legal-hero h1 { max-width: 24ch; }
.legal-page .legal-article-document { background: #fff; border: 1px solid var(--line); border-radius: var(--radius-lg); box-shadow: var(--shadow-soft); padding: clamp(1rem, 2.5vw, 1.75rem); }
.legal-page .legal-section:last-child { border-bottom: 0; margin-bottom: 0; padding-bottom: 0; }
.legal-page .legal-support-cta { margin-top: 1.5rem; }
.legal-page .legal-form-card, .legal-page .legal-contact-aside { border-color: var(--line); }
.legal-page .legal-contact-aside { background: #fff; }
.public-site .app-footer, .legal-page .app-footer { background: #101b1a; border-top: 1px solid rgba(255,255,255,.06); font-family: Manrope, sans-serif; font-size: .74rem; padding: 1rem 0; }

@media (min-width: 992px) {
  .public-nav-menu.collapse { display: block !important; }
}

@media (max-width: 991.98px) {
  .public-nav-inner { flex-wrap: wrap; }
  .public-nav-toggle { display: inline-flex; }
  .public-nav-menu { flex-basis: 100%; margin-left: 0; }
  .public-nav-menu.collapse:not(.show) { display: none; }
  .public-nav-links { align-items: stretch; border-top: 1px solid rgba(255,255,255,.12); flex-direction: column; gap: .15rem; padding: .7rem 0 .2rem; }
  .public-nav-links > a:not(.btn) { align-items: center; border-radius: 8px; display: flex; font-size: .82rem; min-height: 44px; padding: .55rem .7rem; }
  .public-nav-links > a:not(.btn)::after { display: none; }
  .public-login-link { justify-content: center; margin-top: .35rem; width: 100%; }
  .landing-layout { grid-template-areas: "hero" "access" "details"; grid-template-columns: minmax(0, 1fr); }
  .landing-access { position: static; }
  .landing-login { margin-inline: auto; max-width: 620px; width: 100%; }
  .landing-access-docs { margin-inline: auto; max-width: 620px; width: 100%; }
  .landing-hero h1 { max-width: 18ch; }
  .landing-features { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .landing-trust { grid-template-columns: 1fr; }
  .landing-trust-points { flex-direction: row; flex-wrap: wrap; gap: .5rem; }
  .legal-toc { overflow: visible; padding: .75rem; }
  .legal-toc-title { margin-bottom: .45rem; }
  .legal-toc ol { display: flex; gap: .4rem; list-style: none; overflow-x: auto; padding: .1rem 0 .25rem; scrollbar-width: none; }
  .legal-toc ol::-webkit-scrollbar { display: none; }
  .legal-toc li { flex: 0 0 auto; margin: 0; }
  .legal-toc a { background: var(--paper); border: 1px solid var(--line); border-radius: 999px; display: block; font-size: .72rem; padding: .4rem .65rem; white-space: nowrap; }
  .legal-section { scroll-margin-top: 5.5rem; }
}

@media (max-width: 767px) {
  .landing-features, .landing-steps { grid-template-columns: 1fr; }
  .landing-proof > div { padding: .6rem .65rem; }
  .landing-section { scroll-margin-top: 5rem; }
}

@media (max-width: 575.98px) {
  .cookie-banner { padding: .75rem; }
  .cookie-banner-copy { gap: .5rem; grid-template-columns: 30px minmax(0, 1fr); padding-right: 1.3rem; }
  .cookie-banner-icon { border-radius: 8px; font-size: .82rem; height: 30px; width: 30px; }
  .cookie-banner-title { font-size: .82rem; }
  .cookie-banner-copy p { font-size: .69rem; line-height: 1.42; }
  .cookie-banner-actions { gap: .35rem; grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .cookie-banner-actions .btn { font-size: .68rem; min-height: 44px; padding: .35rem .25rem; }
  .cookie-preferences-toggle { align-items: center; border: 1px solid rgba(255,255,255,.3); border-radius: var(--radius-sm); display: flex; font-size: .66rem; grid-column: auto; justify-content: center; min-height: 44px; text-decoration: none; }
  .public-brand-mark { height: 34px; width: 34px; }
  .public-brand-copy small { font-size: .54rem; }
  .landing-main { padding-top: .85rem; }
  .landing-hero { border-radius: 18px; padding: 1.25rem; }
  .landing-hero h1 { font-size: clamp(2rem, 10.5vw, 2.7rem); max-width: none; }
  .landing-lead { font-size: .92rem; }
  .landing-actions .btn { flex: 1 1 100%; }
  .landing-proof { gap: .5rem; grid-template-columns: 1fr; }
  .landing-proof > div { align-items: baseline; display: flex; gap: .6rem; justify-content: space-between; }
  .landing-proof dt { margin: 0; }
  .landing-proof dd { text-align: right; }
  .landing-section, .landing-trust { padding: 1rem; }
  .landing-section-head h2 { font-size: 1.45rem; }
  .landing-login { border-radius: 18px; }
  .landing-trust-points span { white-space: normal; }
  .legal-page .legal-hero { border-radius: 18px; padding: 1.15rem; }
  .legal-page .legal-hero h1 { font-size: 1.9rem; }
  .legal-page .legal-tabs { border-radius: 12px; }
  .legal-page .legal-article-document { border-radius: 18px; padding: 1rem; }
  .public-site .app-footer, .legal-page .app-footer { font-size: .7rem; text-align: center; }
}

@supports (padding: max(0px)) {
  .public-nav { padding-top: env(safe-area-inset-top); }
  .app-nav { padding-top: max(.45rem, env(safe-area-inset-top)); }
  .app-footer, .cookie-banner { padding-bottom: max(.9rem, env(safe-area-inset-bottom)); }
}

@media (max-width:767px) {
  .app-nav { padding-top:max(.45rem, env(safe-area-inset-top)) !important; }
}

@media (prefers-reduced-motion: reduce) {
  .public-nav-links > a:not(.btn)::after,
  .landing-feature,
  .legal-download-card { transition: none; }
  .landing-feature:hover,
  .legal-download-card:hover { transform: none; }
}

.app-nav { background:#173b35 !important; border:0 !important; border-radius:0 0 18px 18px; box-shadow:0 8px 24px rgba(18,48,42,.16); margin-bottom:.55rem !important; }
.app-navigation { background:#f5f4ef !important; border:0 !important; margin:0 0 1.25rem !important; padding:.4rem 0 .75rem !important; }
.app-navigation > .container { background:#fffdf9; border-radius:16px; box-shadow:0 4px 18px rgba(23,37,36,.08); padding:.3rem .65rem; }
.app-menu { gap:.35rem !important; }
.app-menu > li > a,.app-menu-trigger { border:0 !important; border-radius:11px !important; min-height:46px !important; padding:.7rem .95rem !important; }
.app-menu > li > a { background:transparent !important; }
.app-menu > li > a:hover,.app-menu-trigger:hover,.app-menu-group.is-open > .app-menu-trigger { background:#edf3e8 !important; color:#204c40 !important; }
.app-menu-trigger { color:var(--ink) !important; }
.app-submenu { border:0 !important; box-shadow:0 12px 32px rgba(23,37,36,.17) !important; }
.app-mobile-menu-toggle { align-items:center; display:inline-flex; justify-content:center; min-height:44px; min-width:44px; }
.app-mobile-menu { border:0; border-radius:18px 0 0 18px; max-width:min(88vw,380px); }
.mobile-menu-link { align-items:center; border-radius:10px; color:var(--ink); display:flex; font-weight:700; gap:.85rem; min-height:48px; padding:.65rem .8rem; text-decoration:none; }
.mobile-menu-link i { color:var(--forest); font-size:1.15rem; width:1.4rem; }
.mobile-menu-link:hover,.mobile-menu-link:focus { background:#edf1e2; color:var(--forest); }
.app-bottom-nav { align-items:stretch; background:rgba(255,253,249,.98); border-top:1px solid rgba(23,37,36,.1); bottom:0; box-shadow:0 -8px 25px rgba(23,37,36,.08); display:none; grid-template-columns:repeat(4,1fr); left:0; padding:.35rem .4rem calc(.35rem + env(safe-area-inset-bottom)); position:fixed; right:0; z-index:1020; }
.app-bottom-nav a,.app-bottom-nav button { align-items:center; background:transparent; border:0; border-radius:10px; color:var(--muted); display:flex; flex-direction:column; font:inherit; font-size:.68rem; font-weight:700; gap:.12rem; justify-content:center; min-height:52px; text-decoration:none; }
.app-bottom-nav i { font-size:1.15rem; }
.import-match-legend { display:flex; flex-wrap:wrap; gap:.65rem 1rem; margin:.8rem 0 1rem; }
.import-match-legend span { align-items:center; color:var(--muted); display:inline-flex; font-size:.77rem; font-weight:700; gap:.4rem; }
.import-match-legend i { border-radius:50%; height:.7rem; width:.7rem; }
.legend-ok { background:#36a66b; }.legend-proposed { background:#edb743; }.legend-create { background:#d86464; }
.legend-status-estrazione { background:#e08a3c; }.legend-status-lista { background:#e3c132; }.legend-status-biglietti { background:#4a90d9; }.legend-status-chiusa { background:#4f9a5c; }
.legend-missing { background:#dbeafe; border:1px solid #4a90d9; }
.event-status-badge { border:1px solid transparent; font-size:.68rem; letter-spacing:.02em; }
.event-status-badge.event-status-estrazione { background:#fbe0c6; color:#8a4b12; }
.event-status-badge.event-status-lista { background:#fdf0b8; color:#7a5c00; }
.event-status-badge.event-status-biglietti { background:#d3e9fb; color:#1c4f7a; }
.event-status-badge.event-status-chiusa { background:#d7eeda; color:#285c33; }
.import-review-row.import-status-estrazione td { background-color:#fff3e8; }
.import-review-row.import-status-lista td { background-color:#fffbe6; }
.import-review-row.import-status-biglietti td { background-color:#eef7fe; }
.import-review-row.import-status-chiusa td { background-color:#edf7ee; }
.import-review-row.import-row-missing td { background-color:#e3f0ff; box-shadow:inset 0 0 0 1px #b6d5f5; }

/* Revisione import: barra orizzontale in alto, intestazione fissa e record
   scorrevoli. A fine elenco lo scroll verticale torna naturalmente alla pagina. */
.import-scroll-top { height:18px; margin-bottom:.25rem; overflow-x:auto; overflow-y:hidden; scrollbar-width:thin; scroll-margin-top:.75rem; }
.import-scroll-top[hidden] { display:none; }
.import-scroll-top > div { height:1px; }
.import-review .import-table-scroll { max-height:70vh; max-height:min(70dvh,820px); overflow:auto; overscroll-behavior-x:contain; overscroll-behavior-y:auto; scroll-margin-top:.75rem; }
.import-review .import-table-scroll:focus-visible { outline:2px solid var(--forest); outline-offset:-2px; }
.import-review .import-table-scroll > table { margin-bottom:0; }
.import-review .import-table-scroll thead th { background:#f7f8f3; background-clip:padding-box; box-shadow:inset 0 -1px 0 var(--line); position:sticky; top:0; z-index:3; }

.import-match-select { border-width:1px; transition:background-color .15s,border-color .15s,box-shadow .15s; }
.import-match-select.match-ok { background-color:#edf8f0; border-color:#93c9a2; box-shadow:inset 3px 0 #36a66b; }
.import-match-select.match-proposed { background-color:#fff7df; border-color:#e5c76e; box-shadow:inset 3px 0 #edb743; }
.match-feedback { color:#39715b; font-size:.72rem; font-weight:700; }
.import-ticket-match { min-width:10rem; }
@media (min-width:768px) { .app-mobile-menu,.app-bottom-nav,.app-mobile-menu-toggle { display:none !important; } }
@media (max-width:767px) {
 .app-nav { border-radius:0 0 14px 14px; margin-bottom:1rem !important; }
 .app-nav-inner { align-items:center !important; flex-direction:row !important; flex-wrap:nowrap !important; gap:.5rem !important; min-height:56px; }
 .app-brand img { height:28px; max-width:100px; }.app-brand span { display:none; }
 .app-account { align-items:center !important; gap:.35rem !important; margin-left:auto; width:auto !important; }
 .app-account > .user-avatar,.app-account > .user-avatar-placeholder { display:none; }
 .app-account > .dropdown .dropdown-toggle { max-width:48px; min-height:44px; overflow:hidden; padding:.45rem; }
 .app-account > .dropdown .dropdown-menu { position:fixed !important; right:.5rem !important; top:3.7rem !important; }
 .app-account .notifications-dropdown > button { min-height:44px; min-width:44px; }
 .app-mobile-menu-toggle { background:rgba(255,255,255,.12) !important; border:1px solid rgba(255,255,255,.2) !important; }
 .app-navigation { display:none !important; }.global-search { max-width:none; width:100%; }
 .app-bottom-nav { display:grid !important; }.app-content { padding-bottom:calc(5.5rem + env(safe-area-inset-bottom)) !important; }
}

/* Elenco eventi: azioni a icona su griglia da 3 colonne, cosi la riga resta bassa anche in Staging (5-6 icone su due righe). */
.event-buttons.org-actions { display: grid; gap: .35rem; grid-template-columns: repeat(3, max-content); justify-content: end; min-width: 0; }
.event-buttons.org-actions .btn.icon-btn, .event-buttons.org-actions .action-form { flex: none; width: auto; }
.event-buttons.org-actions .btn.icon-btn { width: 31px; }
@media (max-width: 767px) { .event-buttons.org-actions { justify-content: start; } .event-buttons.org-actions .btn.icon-btn { width: 36px; } }

/* Recapiti contatto: telefono (Chiama / WhatsApp) e busta email; su smartphone solo icone. */
.contact-links { align-items: center; display: inline-flex; flex-wrap: wrap; gap: .3rem; margin-left: .35rem; vertical-align: middle; }
.contact-links .btn { align-items: center; display: inline-flex; line-height: 1; min-height: 30px; padding: .2rem .5rem; }
.contact-phone .dropdown-menu { z-index: 1060; }
@media (max-width: 767px) { .contact-links .btn { min-height: 38px; min-width: 38px; justify-content: center; } }

/* Contatti organizzatore e luogo: etichetta, nomi e recapiti sulla stessa riga
   (a capo solo quando lo spazio finisce). */
.event-contact-row { align-items: center; display: flex; flex-wrap: wrap; gap: .25rem .75rem; }
.event-contact-row .event-contact-label { font-weight: 600; }
.event-contact-row .event-contact { align-items: center; display: inline-flex; flex-wrap: wrap; gap: .25rem; }
.event-contact-row .event-contact + .event-contact::before { color: var(--muted); content: "·"; margin-right: .35rem; }

/* Layout smartphone compatto: schede con etichetta e valore sulla stessa riga */
.event-radio-tag { color: var(--forest); display: inline; font-weight: 700; }
.event-row .event-radio-tag, .event-row .event-radio-tag span { display: inline; }
.radio-logo { display: none; }
.mobile-back { align-items: center; color: var(--muted); display: inline-flex; font-size: 1.1rem; height: 28px; margin: 0 0 .15rem -.2rem; text-decoration: none; width: 28px; }
.mobile-search-bar { align-items: center; background: #fff; box-shadow: 0 4px 14px rgba(0,0,0,.18); display: flex; gap: .5rem; left: 0; padding: .6rem .75rem; position: fixed; right: 0; top: var(--mobile-search-top, 0px); z-index: 1060; }
.mobile-search-bar[hidden] { display: none; }
.mobile-search-bar .global-search { flex: 1 1 auto; margin: 0; max-width: none; }
.mobile-search-bar .global-search .search-select-results { max-height: var(--mobile-search-results-max-height, 240px); }
@media (max-width: 575.98px) {
  .event-radio-tag .bi-broadcast { display: none; }
}
.status-filters { display: flex; flex-wrap: wrap; gap: .35rem; }
.import-date-fields { display: flex; flex-direction: column; gap: .25rem; min-width: 11rem; }
.import-date-fields .form-control { font-size: .8rem; }
.import-date-fields .form-check { margin: 0; min-height: 0; }
.import-date-fields .form-check-label { font-size: .72rem; }
.import-date-fields .import-range-end[hidden] { display: none; }
.import-date-fields .badge { align-self: flex-start; white-space: normal; }
@media (max-width: 575.98px) {
  .table-stack > tbody > tr { padding: .5rem .7rem; }
  .table-stack > tbody > tr > td { align-items: baseline; display: flex; font-size: .84rem; gap: .5rem; padding: .18rem 0; }
  .table-stack > tbody > tr > td::before { flex: 0 0 5.4rem; font-size: .6rem; margin: 0; }
  .table-stack > tbody > tr > td:first-child { display: block; font-size: .94rem; padding-bottom: .3rem; }
  .table-stack > tbody > tr > td:first-child::before { display: none; }
  .table-stack > tbody > tr > td > * { min-width: 0; }
  .table-stack > tbody > tr > td.table-cell-actions { flex-wrap: wrap; justify-content: flex-start; }
  .table-stack > tbody > tr > td.table-cell-actions .badge { white-space: normal; }
  .table-stack .action-group, .table-stack .org-actions { align-items: center; flex-direction: row; flex-wrap: wrap; gap: .35rem; min-width: 0; }
  .table-stack .action-group form { display: inline-flex; margin: 0; }
  .table-stack .icon-btn { flex: 0 0 auto; height: 36px; padding: 0; width: 36px; }
  .table-stack .contact-actions { display: inline-flex; flex-wrap: nowrap; gap: .3rem; padding: .25rem .4rem; }
  .table-stack .contact-actions .action-scope-label { display: none; }
  .table-stack .contact-actions .icon-btn { flex: 0 0 36px; }
  .table-stack .user-cell { align-items: center; display: flex; gap: .6rem; }
  .table-stack .contact-lines { flex-direction: column; align-items: flex-start; gap: .1rem; }
  .table-stack .contact-lines::before { display: none; }
  /* Filtri elenco eventi: select affiancate, ricerca a tutta larghezza */
  .event-filters { display: grid; gap: .4rem; grid-template-columns: 1fr 1fr; }
  .event-filters .form-select, .event-filters .search-select { max-width: none; min-width: 0; width: 100%; }
  .event-filters .list-filter, .event-filters > button, .event-filters > .btn { grid-column: 1 / -1; margin: 0; max-width: none; }
  .event-meta { font-size: .72rem; }
  .status-filters .btn { flex: 1 1 auto; font-size: .76rem; padding: .25rem .5rem; }
  .list-filter { flex: 1 1 100%; margin: 0; max-width: none; }
}

/* ===== Barra di navigazione sticky =====
   La barra chiara resta agganciata in cima allo schermo durante lo scroll
   (classe `is-stuck` aggiunta da base.html). In stato agganciato, da 1200px
   in su, mostra una versione compatta di logo, ricerca e area utente così i
   controlli dell'header scuro restano raggiungibili anche quando questo esce
   dallo schermo. A pagina non scrollata il layout è identico a prima. */
.app-navigation { position: sticky; top: 0; z-index: 1040; }
.app-nav-row { align-items: center; display: flex; gap: .3rem; min-width: 0; }
.app-nav-row .app-menu { flex: 1 1 auto; min-width: 0; }
/* Voci del menu allineate sulla stessa riga: i link semplici erano `display:block`
   (testo in alto) mentre i trigger dei gruppi sono `display:flex` (testo centrato),
   quindi con la stessa `min-height` le etichette non stavano sullo stesso asse.
   Centrando anche i link, icone e testi di tutte le voci combaciano. */
.app-menu > li > a { align-items: center; display: flex; }
/* Barra: le voci sono più compatte (padding orizzontale fisso 8px) e allineate col
   contenuto. NB: NON usare `overflow` sul menu — i sottomenu (Eventi, Anagrafiche,
   Amministrazione) sono `position: absolute` e verrebbero ritagliati dal contenitore
   con overflow; per lo stesso motivo NON forziamo `nowrap` (con molte voci il menu
   admin sforerebbe la pillola: meglio compattarlo e lasciarlo andare a capo solo se
   davvero non ci sta).
   Allineamento col contenuto: la pillola della barra aveva un padding orizzontale
   che, sommato a quello interno delle voci, spostava il menu a destra rispetto al
   titolo della pagina; ora la pillola ha un padding minimo e le voci un padding
   orizzontale fisso, così il testo della prima voce parte dallo stesso x del
   contenuto e **non cambia più** fra 1200px e oltre (prima il padding cambiava e il
   menu "saltava" ridimensionando la finestra). */
@media (min-width: 768px) {
  .app-navigation > .container { padding: .3rem .25rem; }
  .app-nav-row .app-menu > li > a,
  .app-nav-row .app-menu-trigger { padding-left: .5rem !important; padding-right: .5rem !important; white-space: nowrap; }
}
.app-nav-mini-brand { display: none; }
.app-nav-mini-actions { align-items: center; display: none; flex: 0 0 auto; gap: .35rem; }
/* I controlli compatti (ricerca + area utente) restano sempre nella riga come spazio
   riservato (`visibility: hidden`): quando la barra si aggancia diventano visibili
   senza spostare le voci di menu, che mantengono l'allineamento con il contenuto. */
@media (min-width: 1200px) {
  .app-nav-mini-actions { display: flex; visibility: hidden; }
  .app-navigation.is-stuck .app-nav-mini-actions { visibility: visible; }
  /* Dimensioni fisse da desktop: le voci non cambiano più fra stato normale e
     agganciato (né fra 1200 e 1400 px), quindi il menu non "salta". */
  .app-menu > li > a,
  .app-menu-trigger { font-size: .78rem !important; padding: .5rem .65rem !important; }
  .app-nav-mini-actions .global-search { flex: 0 1 160px; max-width: 160px; min-width: 6.5rem; }
}
.app-nav-mini-actions .global-search { margin: 0; }
.app-nav-mini-actions .global-search-input { background: var(--paper); border-color: var(--line); color: var(--ink); font-size: .8rem; padding-right: 2.4rem; }
.app-nav-mini-actions .global-search-input::placeholder { color: var(--muted); }
.app-nav-mini-actions .global-search-icon { color: var(--muted); }
/* I risultati si aprono verso sinistra per non uscire dallo schermo. */
.app-nav-mini-actions .search-select-results { left: auto; right: 0; max-width: min(270px, calc(100vw - 1.5rem)); width: 270px; }
.app-account-compact { color: var(--ink) !important; gap: .35rem !important; }
.app-account-compact .app-account-avatar-toggle { align-items: center; background: var(--paper); border: 1px solid var(--line); border-radius: 50%; display: inline-flex; justify-content: center; min-height: 36px; min-width: 36px; padding: .1rem; }
.app-account-compact .app-account-avatar-toggle:hover,
.app-account-compact .app-account-avatar-toggle:focus-visible { background: #edf3e8; border-color: var(--forest); }
.app-account-compact .notifications-dropdown > button { min-height: 36px; min-width: 36px; }
/* Stato agganciato: cambiano solo sfondo e ombra. Dimensioni, spaziature e posizione
   delle voci restano identiche, così la barra non "salta" durante lo scroll. */
.app-navigation.is-stuck { background: #f5f4ef !important; box-shadow: 0 10px 26px rgba(23,37,36,.12); }
.app-navigation.is-stuck > .container { box-shadow: 0 10px 30px rgba(23,37,36,.14); }
@media (max-width: 767.98px) {
  /* Su smartphone la barra è nascosta e resta il menu offcanvas: nessuno sticky. */
  .app-navigation { position: static; }
}
@media (prefers-reduced-motion: no-preference) {
  .app-navigation { transition: background-color .18s ease, box-shadow .18s ease; }
}

/* --- Intestazione del dettaglio evento ------------------------------------
   Righe che vanno a capo, contatti a pillola e azioni separate: indirizzi,
   nomi e piattaforme lunghe non allargano più la pagina oltre lo schermo.
   `min-width: 0` sui blocchi flessibili è ciò che permette il ritorno a capo
   anche quando il contenuto (es. l'elenco dei contatti) ha molti elementi. */
.page-heading { flex-wrap: wrap; gap: .85rem 1.25rem; }
.page-heading > div:first-child { min-width: 0; }
.event-heading { align-items: flex-start; }
.event-heading-body { flex: 1 1 34rem; max-width: 100%; min-width: 0; }
.event-heading h1 { overflow-wrap: anywhere; }
.event-heading-badges { align-items: center; display: flex; flex-wrap: wrap; gap: .35rem; margin-top: .4rem; }
.event-heading-badges .badge { font-size: .74rem; }
/* Metadati su griglia: colonna fissa per l'icona e testo sempre allineato allo
   stesso x, anche quando le icone hanno larghezze diverse (era il motivo per cui
   le righe sembravano storte). */
.event-meta-list { color: var(--muted); display: grid; font-size: .88rem; gap: .35rem 1.25rem; grid-template-columns: repeat(auto-fit, minmax(17rem, 1fr)); list-style: none; margin: .7rem 0 0; padding: 0; }
.event-meta-list li { align-items: baseline; display: grid; gap: .45rem; grid-template-columns: 1.15rem minmax(0, 1fr); max-width: 100%; min-width: 0; overflow-wrap: anywhere; }
.event-meta-list .bi { color: var(--forest); font-size: .95em; line-height: 1.5; text-align: center; }
.event-meta-list .event-meta-strong { color: var(--ink); font-weight: 700; }
.event-radio { color: var(--forest); font-size: .88rem; margin: .55rem 0 0; }
/* Radio/canale accanto a «Piattaforma» (stessa riga di metadati) e recapiti del
   luogo nella riga dei link (accanto a «Sito del luogo»): due pillole compatte,
   senza aggiungere righe vuote quando il dato manca. */
.event-meta-list .event-meta-radio { flex-wrap: wrap; }
.event-heading-links .event-heading-place { align-items: center; font-weight: 400; margin-left: .1rem; }
.event-heading-links .event-heading-place .event-contact-label { font-size: .62rem; }
.event-contacts { color: var(--muted); display: flex; flex-direction: column; font-size: .84rem; gap: .4rem; margin-top: .75rem; }
.event-contact-group { align-items: center; display: flex; flex-wrap: wrap; gap: .45rem; min-width: 0; }
.event-contact-label { color: var(--forest); font-family: "DM Mono", monospace; font-size: .68rem; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; }
.event-contact-chip { align-items: center; background: #fff; border: 1px solid var(--line); border-radius: 999px; display: inline-flex; gap: .35rem; max-width: 100%; min-width: 0; padding: .15rem .3rem .15rem .7rem; }
.event-contact-chip .event-contact-name { color: var(--ink); font-weight: 600; overflow-wrap: anywhere; }
.event-contact-chip .contact-links { margin-left: .05rem; }
.event-contact-chip .contact-links .btn { background: var(--paper); border-color: transparent; color: var(--forest); min-height: 26px; padding: .12rem .45rem; }
.event-contact-chip .contact-links .btn:hover { background: var(--lime); border-color: var(--lime); color: var(--ink); }
.event-heading-links { display: flex; flex-wrap: wrap; font-size: .84rem; font-weight: 700; gap: .35rem 1rem; margin-top: .8rem; }
.event-heading-links a { color: var(--forest); text-decoration: none; }
.event-heading-links a:hover { text-decoration: underline; }
.event-heading-actions { align-items: flex-start; display: flex; flex-wrap: wrap; gap: .5rem; }
@media (max-width: 767.98px) {
  .event-heading-body { flex: 1 1 100%; }
  .event-heading-actions { width: 100%; }
  .event-heading-actions .btn { flex: 1 1 8rem; }
  .event-contact-chip { padding-left: .6rem; }
}

/* --- Filigrana d'ambiente -------------------------------------------------
   `watermark_state()` in app.py decide variante, righe e immagine SVG; qui
   vivono solo lo strato fisso (dietro i pannelli, senza click) e le tinte.
   Staging Mode e uso locale hanno tinte fredde/neutre, l'impersonificazione
   usa una tinta più calda così è riconoscibile a colpo d'occhio. */
.env-watermark { background-image: var(--env-watermark-image); background-repeat: repeat; inset: 0; opacity: .1; pointer-events: none; position: fixed; z-index: -1; }
body.env-watermark-staging { background-color: #f7f4ea; }
body.env-watermark-local { background-color: #f2f5f3; }
body.env-watermark-impersonation { background-color: #f4f4e4; }
body.env-watermark-impersonation .env-watermark { opacity: .14; }
@media (max-width: 767.98px) { .env-watermark { opacity: .08; } }

/* --- Modale «Nominativi da completare» (utenti) ---------------------------
   Contenuto costruito da static/js/names-reminder.js con i dati di
   /api/names-reminder: una riga per richiesta, con scorciatoia «Aggiorna» che
   riporta dentro la richiesta per completare i nomi. */
.names-reminder-item { align-items: center; border-top: 1px solid rgba(9, 14, 34, .08); display: flex; gap: .75rem; padding: .6rem 0; }
.names-reminder-item:first-child { border-top: 0; }
.names-reminder-item-text { display: flex; flex: 1 1 auto; flex-direction: column; min-width: 0; }
.names-reminder-item-text strong { overflow-wrap: anywhere; }
.names-reminder-item-meta { color: #6b7280; font-size: .8rem; }
.names-reminder-item-missing { color: #b02a37; font-size: .85rem; font-weight: 600; }
.names-reminder-item .btn { flex: 0 0 auto; }
@media (max-width: 575.98px) {
  .names-reminder-item { align-items: stretch; flex-direction: column; }
  .names-reminder-item .btn { width: 100%; }
}



/* --- Pulsante «io» del primo partecipante (nuova richiesta) ----------------
   Il numero resta il cerchietto di sempre (`.participant-card > span:first-child`,
   22 px in alto a sinistra): il pulsante è un elemento a parte, posizionato sotto
   il cerchio e staccato di qualche pixel, nello spazio libero a sinistra dei campi
   (`padding-left: 2.6rem`). Copia i dati dell'utente che compila la richiesta
   quando la combo Radio/Cliente è «Interno …». Su schermo piccolo, dove il
   contenuto sale a 2.4rem, il pulsante si sposta accanto al cerchio. */
.participant-card > .participant-me { left: .7rem; position: absolute; top: 2.2rem; width: 22px; }
.participant-me { background: #fff; border: 1px solid var(--line, #cbd2d9); border-radius: 999px; color: #1f6feb; cursor: pointer; font-family: inherit; font-size: .55rem; font-weight: 700; line-height: 1; padding: .1rem 0; text-align: center; text-transform: uppercase; }
.participant-me:hover { background: #eef2ff; }
@media (max-width: 576px) { .participant-card > .participant-me { left: 2.1rem; top: .95rem; } }

/* --- Campi a pastiglie con suggerimenti: Cc della lista (static/js/cc-recipients.js)
   e Radio/canali degli eventi (static/js/tag-input.js). Le classi `.chip-*` sono la
   versione generica usata dal campo tag: stessi stili dei `.cc-*`. --- */
.cc-field, .chip-field { position: relative; }
.cc-box, .chip-box { align-items: center; background: #fff; border: 1px solid var(--line); border-radius: var(--radius-sm, 10px); display: flex; flex-wrap: wrap; gap: .4rem; min-height: 3rem; padding: .4rem .5rem; transition: border-color .15s ease, box-shadow .15s ease; }
.cc-box:focus-within, .chip-box:focus-within { border-color: var(--forest); box-shadow: 0 0 0 .2rem rgba(36, 69, 61, .12); }
.cc-chips, .chip-chips { align-items: center; display: flex; flex-wrap: wrap; gap: .4rem; }
.cc-chip, .chip-chip { align-items: center; background: #eef3ef; border: 1px solid #d9e4dc; border-radius: 999px; color: var(--forest); display: inline-flex; gap: .2rem; max-width: 100%; padding: .2rem .28rem .2rem .7rem; }
.cc-chip-label, .chip-chip-label { font-size: .84rem; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cc-chip-remove, .chip-chip-remove { align-items: center; background: transparent; border: 0; border-radius: 50%; color: inherit; cursor: pointer; display: inline-flex; height: 1.25rem; justify-content: center; opacity: .55; padding: 0; transition: background-color .15s ease, opacity .15s ease; width: 1.25rem; }
.cc-chip-remove:hover, .chip-chip-remove:hover, .cc-chip-remove:focus-visible, .chip-chip-remove:focus-visible { background: rgba(36, 69, 61, .14); opacity: 1; }
.cc-chip-remove i, .chip-chip-remove i { font-size: .68rem; }
.cc-input, .chip-input { background: transparent; border: 0; color: var(--ink); flex: 1 1 11rem; font-size: .92rem; min-width: 9rem; outline: none; padding: .35rem .4rem; }
.cc-input::placeholder, .chip-input::placeholder { color: var(--muted); }
.cc-suggestions, .chip-suggestions { background: #fff; border: 1px solid var(--line); border-radius: var(--radius-sm, 10px); box-shadow: var(--shadow-soft); left: 0; margin-top: .3rem; max-height: 17rem; overflow-y: auto; padding: .25rem; position: absolute; right: 0; top: 100%; z-index: 20; }
.cc-suggestion, .chip-suggestion { align-items: center; background: transparent; border: 0; border-radius: 8px; color: var(--ink); display: flex; gap: .5rem; padding: .5rem .6rem; text-align: left; width: 100%; }
.cc-suggestion.is-active, .cc-suggestion:hover, .chip-suggestion.is-active, .chip-suggestion:hover { background: #eef3ef; color: var(--forest); }
.cc-suggestion-mail { color: #6b7280; font-size: .8rem; overflow: hidden; text-overflow: ellipsis; }
.cc-flag-form { margin: 0; }

/* --- Elenchi di gestione: tabelle e filtri più ordinati (2026-10-30) --------
   Intestazioni uniformi, colonne allineate e stato a pillola in tutte le viste
   elenco (richieste della dashboard, richieste dell'evento, biglietti). Le
   classi `col-*` sono usate dai template per dare larghezza stabile alle
   colonne: le righe non si spostano da una richiesta all'altra. */
.management-panel .table > thead > tr > th { border-bottom: 1px solid var(--line); color: var(--muted); font-size: .68rem; font-weight: 800; letter-spacing: .06em; padding-bottom: .5rem; text-transform: uppercase; }
.management-panel .table > tbody > tr > td { border-color: #eee9e1; }
.management-panel .table > tbody > tr:last-child > td { border-bottom: 0; }
.requests-table .col-event { min-width: 14rem; }
.requests-table .col-requester, .requests-table .col-referent { min-width: 11rem; }
.requests-table .col-tickets { text-align: center; white-space: nowrap; width: 7rem; }
.requests-table .col-status { width: 8rem; }
.requests-table .col-radio { min-width: 9rem; }
.requests-table .col-notes { min-width: 8rem; }
.requests-table .col-actions { width: 8.5rem; }
.requests-table .table-cell-actions { text-align: right; }
.requests-table .referent-name { font-weight: 600; }
.requests-table .contact-line { font-size: .78rem; }
.ticket-count { font-variant-numeric: tabular-nums; font-weight: 700; }
.status-pill { border-radius: 999px; display: inline-block; font-size: .74rem; font-weight: 700; padding: .2rem .55rem; white-space: nowrap; }
.status-pill-ricevuta { background: #e7f0ff; color: #1c4f7a; }
.status-pill-in-carico { background: #fff3cd; color: #7a5c00; }
.status-pill-confermata { background: #d7eeda; color: #285c33; }
.status-pill-archiviata { background: #e5e7e2; color: #52605b; }
/* Barra dei filtri: due colonne allineate al contenuto del pannello (stato a
   sinistra, periodo a destra) e controlli della stessa altezza, così la riga
   resta stabile e allineata con la tabella sotto. */
.requests-filters { align-items: center; display: grid; gap: .6rem 1rem; grid-template-columns: minmax(0, 1fr) auto; margin-bottom: .9rem; }
.requests-filters .status-filters { align-items: center; display: flex; flex-wrap: wrap; gap: .4rem; min-width: 0; }
.requests-filters .btn, .period-filter .form-select { min-height: 2.1rem; }
.period-filter { margin: 0; }
.period-filter .form-select { min-width: 11rem; }
.event-row .request-count { line-height: 1.5; text-align: right; }
@media (max-width: 575.98px) {
  .requests-table .col-tickets, .requests-table .col-status { text-align: left; width: auto; }
  .requests-filters { grid-template-columns: minmax(0, 1fr); }
  .requests-filters .period-filter, .requests-filters .period-filter .form-select { width: 100%; }
}
/* --- Elenco richieste: vista compatta (2026-10-31) --------------------------
   La dashboard è la vista di default della home: le righe erano molto alte
   (badge su righe separate, padding generoso, recapiti uno per riga) e in una
   schermata entravano poche richieste. Qui le celle diventano dense senza
   togliere nessuna informazione: titolo, artista e data su poche righe, badge
   tutti sulla stessa riga (`.request-flags`) e recapiti del referente sulla
   stessa riga separati da «·». Ogni richiesta è staccata dalla successiva da una
   linea ben visibile (`--line`, prima era il quasi invisibile `#eee9e1`). Vale
   per `.requests-table` (dashboard e scheda evento); sotto i 576px la vista a
   schede resta com'era. */
.requests-table .col-event .event-head { display: block; }
.requests-table .col-event .event-artist { color: var(--muted); font-size: .78rem; margin-left: .35rem; }
.requests-table .col-event .event-when { color: var(--muted); display: block; font-size: .76rem; }
.requests-table .request-flags { align-items: center; display: flex; flex-wrap: wrap; gap: .2rem; margin-top: .2rem; }
.requests-table .request-flags .badge { font-size: .68rem; font-weight: 600; padding: .18rem .4rem; }
.requests-table .col-referent .referent-name { display: block; }
.requests-table .col-referent .contact-line { display: inline; font-size: .76rem; white-space: normal; }
.requests-table .col-referent .contact-line + .contact-line::before { content: " · "; }
@media (min-width: 576px) {
  .management-panel .requests-table > tbody > tr > td { border-bottom: 1px solid var(--line); font-size: .9rem; line-height: 1.25; padding: .5rem .6rem; vertical-align: middle; }
  .management-panel .requests-table > tbody > tr:last-child > td { border-bottom: 0; }
  .management-panel .requests-table > thead > tr > th { border-bottom: 1px solid var(--line); padding-bottom: .45rem; padding-top: .45rem; }
  .requests-table .col-event { min-width: 17rem; }
  .requests-table .col-requester { min-width: 9rem; }
  .requests-table .col-referent { min-width: 12rem; }
  .requests-table .col-tickets { width: 5.5rem; }
  .requests-table .col-status { width: 7rem; }
  .requests-table .table-cell-actions { width: 6.5rem; }
}
/* ===== Moduli: sezioni e allineamenti (2026-10-30) ==========================
   I form di gestione (evento, nuova richiesta, impostazioni) usano sezioni
   uniformi: titolo con riga di separazione, campi su griglia Bootstrap con la
   stessa spaziatura (row + `mb-3`) e barra di salvataggio alla stessa distanza
   dal fondo. Classi additive: `name`/`id` dei campi e attributi usati dai test
   restano invariati. */
.form-section { border-top: 1px solid var(--line); margin-top: 1.5rem; padding-top: 1.25rem; }
.form-section:first-of-type { border-top: 0; margin-top: 0; padding-top: 0; }
.form-section-title { align-items: center; color: var(--forest); display: flex; font-family: "DM Mono", monospace; font-size: .72rem; font-weight: 700; gap: .5rem; letter-spacing: .08em; margin: 0 0 .95rem; text-transform: uppercase; }
.form-section-title .bi { font-size: .95rem; }
.form-section-title::after { background: var(--line); content: ""; flex: 1 1 auto; height: 1px; }
.form-section-hint { color: var(--muted); font-size: .82rem; margin: -.5rem 0 1rem; }
.form-actions { align-items: center; border-top: 1px solid var(--line); display: flex; flex-wrap: wrap; gap: .6rem; justify-content: space-between; margin-top: 1.5rem; padding-top: 1.1rem; }
/* Etichette uniformi in tutti i moduli: stesso peso, stessa distanza dal campo. */
.form-label { font-size: .82rem; font-weight: 700; letter-spacing: .01em; margin-bottom: .35rem; }
.form-text { font-size: .78rem; }
/* Righe ripetibili (piattaforme, contatti, zone): l'ultima non aggiunge spazio. */
.repeatable-select .repeatable-row:last-of-type, .repeatable-zones .repeatable-zone-row:last-of-type { margin-bottom: 0; }



/* --- Regole generali (disclaimer) e modale Novità -------------------------- */
/* Scheda del regolamento: testata con versione e stato, testo leggibile
   (`pre-line` rispetta i ritorni a capo del testo amministrato) e piede con lo
   stato di presa visione. */
.rules-panel { max-width: 62rem; }
.rules-head { align-items: center; display: flex; flex-wrap: wrap; gap: .5rem 1rem; margin-bottom: .85rem; }
.rules-version { background: var(--forest); border-radius: 999px; color: #fff; font-size: .78rem; font-weight: 700; letter-spacing: .02em; padding: .35rem .8rem; }
.rules-lead { color: var(--muted); margin-bottom: 1.1rem; }
.rules-content { border-top: 1px solid var(--line); line-height: 1.75; max-width: 68ch; padding-top: 1.1rem; }
.rules-content p { margin: 0 0 .7rem; }
.rules-content p:last-child { margin-bottom: 0; }
.rules-content ol { margin: 0; padding-left: 1.3rem; }
.rules-content li { margin-bottom: .7rem; }
.rules-content li:last-child { margin-bottom: 0; }
.rules-content strong { color: var(--forest); }
.rules-conventions { color: var(--muted); font-size: .85rem; padding-left: 1.1rem; }
.rules-conventions li { margin-bottom: .15rem; }
/* --- Permessi per gruppo: legenda delle differenze fra i gruppi ------------ */
/* La matrice elenca solo i permessi: qui si spiega cosa distingue i gruppi
   (in particolare User+ rispetto a User), così non sembrano uguali. */
.permissions-roles { display: grid; gap: .5rem; grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); margin: 1rem 0 .6rem; }
.permissions-role { background: var(--paper); border: 1px solid var(--line); border-radius: 10px; padding: .6rem .75rem; }
.permissions-role-name { display: block; font-weight: 700; margin-bottom: .25rem; }
.permissions-role-note { color: var(--muted); display: block; font-size: .85rem; line-height: 1.45; }
/* --- Scheda evento a date multiple: selettore delle date ------------------- */
.event-date-selector { display: flex; flex-wrap: wrap; gap: .4rem; margin: .75rem 0 .25rem; }
.event-date-selector .btn { align-items: center; display: inline-flex; gap: .4rem; }
.event-date-selector .badge { font-weight: 600; }
/* Data in gestione nella scheda di un evento a date multiple: sempre visibile. */
.event-date-current { align-items: center; background: var(--paper); border: 1px solid var(--line); border-radius: var(--radius-sm); color: var(--forest); display: flex; font-size: .85rem; gap: .1rem; margin-top: .75rem; padding: .5rem .75rem; }
.event-requests-date { color: var(--muted); font-family: "DM Mono", monospace; font-size: .78rem; font-weight: 600; }
.rules-foot { align-items: center; border-top: 1px solid var(--line); color: var(--muted); display: flex; flex-wrap: wrap; gap: .75rem 1rem; justify-content: space-between; margin-top: 1.4rem; padding-top: 1rem; }
/* Elenco compatto delle novità: una voce per riga, separatore tenue. */
.whats-new-list li { border-top: 1px solid var(--line); padding: .55rem 0; }
.whats-new-list li:first-child { border-top: 0; padding-top: 0; }
/* --- Modale «Nuovo evento»: corpo scorrevole ---------------------------------------
   Il form sta dentro il corpo (header/body/footer restano figli diretti di
   `.modal-content`, come richiede Bootstrap) e il contenuto è limitato all'altezza
   della finestra: il corpo scorre e i pulsanti restano sempre visibili. Rete di
   sicurezza oltre a `modal-dialog-scrollable`. */
#new-event-modal .modal-content { max-height: calc(100vh - 2rem); max-height: calc(100dvh - 2rem); }
#new-event-modal .modal-body { overflow-y: auto; }

/* --- Avvisi riducibili (toast -> badge): Novita admin e Regole generali --------
   Pannello in basso a destra che dopo qualche secondo si riduce a un badge
   compatto (`.is-collapsed`); il badge resta per qualche minuto ed e espandibile
   con un clic. `is-hidden` avvia la chiusura (transizione + rimozione dal DOM). */
.ux-toast { bottom: 1rem; max-width: min(24rem, calc(100vw - 2rem)); position: fixed; right: 1rem; transition: opacity .25s ease, transform .25s ease; z-index: 1080; }
.ux-toast.is-hidden { opacity: 0; pointer-events: none; transform: translateY(.5rem); }
.ux-toast-panel { background: #fff; border: 1px solid var(--line); border-left: 4px solid var(--forest); border-radius: var(--radius-sm); box-shadow: 0 .6rem 1.4rem rgba(23,37,36,.2); max-height: min(70vh, 32rem); overflow-y: auto; padding: .8rem .9rem; }
.ux-toast-head { align-items: center; display: flex; gap: .5rem; justify-content: space-between; margin-bottom: .5rem; }
.ux-toast-head strong { color: var(--forest); }
.ux-toast-foot { display: flex; flex-wrap: wrap; gap: .5rem; justify-content: flex-end; margin-top: .6rem; }
.ux-toast-badge { align-items: center; background: var(--forest); border: 0; border-radius: 999px; box-shadow: 0 .5rem 1.2rem rgba(23,37,36,.25); color: #fff; cursor: pointer; display: none; font-size: .82rem; font-weight: 600; gap: .45rem; padding: .5rem .9rem; }
.ux-toast-badge .ux-toast-count { background: rgba(255,255,255,.25); border-radius: 999px; font-size: .72rem; min-width: 1.2rem; padding: .05rem .4rem; text-align: center; }
.ux-toast.is-collapsed .ux-toast-panel { display: none; }
.ux-toast.is-collapsed .ux-toast-badge { display: inline-flex; }
@media (max-width: 575.98px) { .ux-toast { bottom: .75rem; left: 1rem; right: 1rem; } }
