/* ===========================================================================
   Domus — design system v1 (Brand Book famiglia Ayni)
   Principi: fondo Carta, superfici bianche, UN accento per schermata (Cobalto).
   Salvia = esiti positivi · Ambra = scadenze · Corallo = SOLO errori.
   Terracotta: solo nel simbolo. Titoli Signika 600 (700 riservato al logo).
   =========================================================================== */

:root {
    /* I grafici (0.117.0): entrate e uscite, provati contro il daltonismo */
    --grafico-entrate: #3FA88F;
    --grafico-uscite: #33589A;
    --cobalto: #4A6FA5;
    --cobalto-scuro: #3A5885;
    --cobalto-velo: #EDF2F8;   /* velo per stati attivi/hover, mai per testo */
    --salvia: #3D8B7D;
    --salvia-scura: #33756A;
    --ambra: #E8A13D;
    --ambra-velo: #FBEBD0;   /* il fondo dei contatori del menu (0.99.0) */
    /* Le quattro parti di «Quanto devi tenere pronto» (0.99.1): vedi la pagina dei cedolini in fondo */
    --ced-breve: #2a78d6; --ced-tfr: #eb6834; --ced-ore: #1baf7a; --ced-mensilita: #eda100;
    /* Il tabellone dei turni (0.101.0): lo standard, l'orario cambiato a mano,
       la rotazione (sabato, venerdì sera), l'apertura sotto la barretta */
    --tb-std: #4A6FA5; --tb-mano: #D9733A; --tb-rot: #8B5E8F; --tb-apertura: #DDEBE3;
    /* Le ore dal telefono (0.103.0): la scheda di un giorno di assenza, il
       giorno segnato e lo scarto dal previsto */
    --oo-assenza: #C9764A; --oo-assenza-scura: #A85A33; --oo-fatto: #E3F1EE; --oo-fatto-linea: #BFDDD6;
    /* L'app operatori ridisegnata (0.104.0): i veli delle icone e l'ombra delle carte */
    --op-ombra: 0 1px 3px rgba(58,46,40,.06), 0 6px 18px rgba(58,46,40,.05);
    --op-velo-salvia: #E1F1EC; --op-velo-ametista: #F1E8F2; --op-velo-corallo: #F8E1E1; --op-velo-talpa: #EFEAE3;
    --op-velo-ambra: #FCEBCB; --op-scuro: #2E2723;
    /* Le luci dell'app (0.104.2): il campo di notte e la luce dei fari */
    --op-notte: #172033; --op-notte-fondo: #0D1320; --op-faro: #F5B83D; --op-faro-chiaro: #FFD98A;
    --oo-fatto-testo: #2B6A5F; --oo-assenza-velo: #FDE7DC; --oo-assenza-linea: #F5CDB8; --oo-scarto: #7A5418; --oo-ambra-linea: #F0D29E;
    --ametista: #8B5E8F;
    --corallo: #C94F4F;
    --caffe: #3A2E28;
    --talpa: #6B5D51;
    --carta: #FAF7F2;
    --bianco: #FFFFFF;
    --linea: #EAE4DB;
    /* Il riepilogo dei contributi (0.105.0): lo stato del progetto come nel
       foglio della segreteria — azzurro in corso, arancio da rendicontare,
       verde rendicontato. Veli chiari: il testo resta d'inchiostro. */
    --riep-corso: #E3EFF9; --riep-corso-linea: #8DB8DF;
    --riep-darend: #FCEBD3; --riep-darend-linea: #E8A13D;
    --riep-rend: #E2F1DF; --riep-rend-linea: #7DB874;

    --font-display: "Signika", "Trebuchet MS", system-ui, sans-serif;
    --font-testo: "Source Sans 3", "Segoe UI", system-ui, sans-serif;

    --colonne-luci: 3;     /* quante tessere di gruppo in fila: la pagina lo ridichiara */
    /* La settimana dei turni (0.80.0): la pagina li ridichiara, per l'agenda e
       per ogni blocco — l'asse, la posizione, la corsia, il colore del dipendente */
    --sett-h-ora: 44px; --sett-asse-min: 600; --sett-asse-ore: 10;
    --sett-da: 0; --sett-per: 60; --sett-corsia: 0; --sett-corsie: 1;
    --dip-colore: var(--talpa);

    /* ---- Design system v2 (0.74.0): UNA scala, non un valore per volta.
       Spaziatura a passi fissi, cinque corpi di testo e due pesi, tre raggi
       piu' la pillola, due ombre, due altezze di controllo. Le regole nuove
       usano SOLO questi; le vecchie migrano pagina per pagina. */
    --sp-1: 4px; --sp-2: 8px; --sp-3: 12px; --sp-4: 16px;
    --sp-5: 24px; --sp-6: 32px; --sp-7: 48px;

    --testo-xs: 12px;   /* etichette in maiuscoletto, note di tabella */
    --testo-sm: 13px;   /* testo di contorno, bottoni piccoli */
    --testo-md: 15px;   /* il corpo di tutto */
    --testo-lg: 19px;   /* titoli di card e di sezione */
    --testo-xl: 26px;   /* il titolo della pagina */
    --peso-testo: 400;
    --peso-forte: 600;

    --raggio-sm: 8px;      /* controlli: input, bottoni piccoli, chip quadre */
    --raggio: 10px;        /* card e superfici (v1, resta) */
    --raggio-lg: 14px;     /* modali, hero, superfici grandi */
    --raggio-pillola: 999px;

    --ombra: 0 1px 2px rgba(58, 46, 40, 0.05);
    --ombra-alta: 0 8px 24px rgba(58, 46, 40, 0.12);

    --alt-controllo: 38px;     /* bottoni e input si allineano alla stessa riga */
    --alt-controllo-sm: 30px;
}

@font-face { font-family: "Signika"; src: url("/assets/fonts/Signika-SemiBold.woff2") format("woff2");
             font-weight: 600 700; font-display: swap; }
@font-face { font-family: "Source Sans 3"; src: url("/assets/fonts/SourceSans3-Regular.woff2") format("woff2");
             font-weight: 400; font-display: swap; }
@font-face { font-family: "Source Sans 3"; src: url("/assets/fonts/SourceSans3-SemiBold.woff2") format("woff2");
             font-weight: 600; font-display: swap; }

* { box-sizing: border-box; }
/* `hidden` vince su qualunque classe (0.70.0). Il browser nasconde gli elementi
   con l'attributo `hidden` con una regola sua, DEBOLISSIMA: basta una classe che
   dica «display» — e .btn dice inline-flex — perché il pulsante resti a schermo
   anche con hidden addosso. Era così per quattro pulsanti, che la pagina credeva
   di nascondere e che invece si vedevano sempre. Una riga, e vale per tutti. */
[hidden] { display: none !important; }

body {
    margin: 0;
    background: var(--carta);
    color: var(--caffe);
    font-family: var(--font-testo);
    font-size: 15px;
    line-height: 1.55;
}

h1, h2, h3 { font-family: var(--font-display); font-weight: 600; text-wrap: balance; margin: 0; }
h1 { font-size: 28px; }
h2 { font-size: 21px; margin-bottom: 12px; }
h3 { font-size: 16px; margin-bottom: 8px; }

.lead { color: var(--talpa); margin: 4px 0 0; }
.muted { color: var(--talpa); font-size: 13px; }
.caption { font-size: 11px; font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; color: var(--talpa); }
.num { font-variant-numeric: tabular-nums; font-weight: 600; }

a { color: var(--cobalto); }

/* ==== Shell con menu laterale (area staff) ================================ */
.shell { display: grid; grid-template-columns: 248px minmax(0, 1fr); min-height: 100vh; }

.sidebar {
    background: var(--bianco);
    border-right: 1px solid var(--linea);
    display: flex; flex-direction: column;
    position: sticky; top: 0; height: 100vh;
    padding: 20px 14px;
}
/* La colonna e' alta quanto la finestra e dentro c'e' piu' di quanto ci stia:
   marchio, associazione e pie' di pagina non si schiacciano (flex: none), e
   scorre SOLO l'elenco delle voci. Prima l'intera colonna era rigida: su uno
   schermo basso la voce «Piattaforma» finiva fuori senza modo di raggiungerla,
   e il riquadro dell'associazione veniva compresso a una riga vuota. */
.side-brand, .side-tenant, .side-foot { flex: none; }
.side-nav { overflow-y: auto; min-height: 0; padding-right: 2px; }
.side-brand { display: flex; align-items: center; gap: 10px; padding: 2px 10px 16px; text-decoration: none; }
.brand-mark { width: 28px; height: 24px; flex: none; }
.brand-name { font-family: var(--font-display); font-weight: 700; font-size: 21px;
              color: var(--caffe); letter-spacing: -0.01em; }
.brand-u { color: var(--cobalto); }

.side-tenant {
    display: block; margin: 0 6px 14px; padding: 8px 12px;
    background: var(--carta); border: 1px solid var(--linea); border-radius: 8px;
    color: var(--caffe); font-size: 13px; font-weight: 600; text-decoration: none;
    white-space: normal; overflow: hidden; line-height: 1.3;
}
.side-tenant .caption { display: block; font-size: 10px; }
.side-tenant:hover { border-color: var(--cobalto); }

.side-nav { display: flex; flex-direction: column; gap: 2px; flex: 1; }
.side-nav a, .side-foot a, .side-foot button {
    display: flex; align-items: center; gap: 12px;
    padding: 9px 12px; border-radius: 8px;
    color: var(--caffe); font-size: 14.5px; font-weight: 600; text-decoration: none;
    border: 0; background: none; font-family: inherit; width: 100%; text-align: left; cursor: pointer;
}
.side-nav a:hover, .side-foot a:hover, .side-foot button:hover { background: var(--carta); }
.side-nav a.active { background: var(--cobalto-velo); color: var(--cobalto-scuro); }
.side-nav a.active svg { color: var(--cobalto); }
.side-nav svg, .side-foot svg { width: 20px; height: 20px; flex: none; color: var(--talpa); }
.side-foot { border-top: 1px solid var(--linea); padding-top: 10px; margin-top: 10px;
             display: flex; flex-direction: column; gap: 2px; }
.side-foot button:hover { color: var(--corallo); }

/* Gruppi con sottomenu: la voce madre apre/chiude, le figlie rientrano
   lungo una guida che parte dall'icona della madre. */
.nav-group { display: flex; flex-direction: column; }
.nav-parent {
    display: flex; align-items: center; gap: 12px;
    padding: 9px 12px; border-radius: 8px;
    color: var(--caffe); font-size: 14.5px; font-weight: 600;
    border: 0; background: none; font-family: inherit; width: 100%; text-align: left; cursor: pointer;
}
.nav-parent:hover { background: var(--carta); }
.nav-parent.active { color: var(--cobalto-scuro); }
.nav-parent.active > svg:first-child { color: var(--cobalto); }
.nav-parent > svg:first-child { width: 20px; height: 20px; flex: none; color: var(--talpa); }
.nav-chevron { margin-left: auto; display: inline-flex; color: var(--talpa);
               transition: transform 140ms ease; }
.nav-chevron svg { width: 14px; height: 14px; }
.nav-group.open .nav-chevron { transform: rotate(90deg); }
.nav-sub { display: none; flex-direction: column; gap: 1px;
           margin: 2px 0 6px 21px; padding-left: 9px; border-left: 2px solid var(--linea); }
.nav-group.open .nav-sub { display: flex; }
.nav-sub a {
    display: flex; align-items: center; gap: 10px;
    padding: 7px 10px; border-radius: 7px;
    color: var(--talpa); font-size: 13.5px; font-weight: 600; text-decoration: none;
}
.nav-sub a:hover { background: var(--carta); color: var(--caffe); }
.nav-sub a.active { background: var(--cobalto-velo); color: var(--cobalto-scuro); }
.nav-sub a.active svg { color: var(--cobalto); }
.nav-sub svg { width: 17px; height: 17px; flex: none; color: var(--talpa); }
@media (prefers-reduced-motion: reduce) { .nav-chevron { transition: none; } }

/* I gruppi del menu (0.99.0): un titolo piccolo e le voci, un po' piu' fitte
   di quelle sole, perche' sono tante. Il titolo apre e chiude il gruppo. */
.nav-sezione { display: flex; flex-direction: column; gap: 1px; margin-top: 8px; }
.nav-titolo {
    display: flex; align-items: center; gap: 6px; width: 100%;
    padding: 4px 12px 3px; border: 0; background: none; font-family: inherit; text-align: left;
    font-size: 10.5px; font-weight: 700; letter-spacing: 0.07em; text-transform: uppercase;
    color: var(--talpa); cursor: pointer; border-radius: 6px;
}
.nav-titolo:hover { color: var(--caffe); }
.nav-titolo .nav-chevron { margin-left: 2px; transform: rotate(90deg); }
.nav-titolo .nav-chevron svg { width: 11px; height: 11px; }
.nav-sezione.chiusa .nav-titolo .nav-chevron { transform: none; }
.nav-sezione.chiusa > :not(.nav-titolo) { display: none; }
.nav-sezione > a, .nav-sezione .nav-parent { padding: 6px 12px; font-size: 14px; }
#pn-altro > summary svg { width: 14px; height: 14px; transform: rotate(90deg); }
.nav-conta {
    margin-left: auto; min-width: 20px; padding: 1px 7px; border-radius: 999px;
    background: var(--ambra-velo); color: var(--caffe);
    font-size: 12px; font-weight: 700; text-align: center; line-height: 18px;
}
@media (max-width: 920px) {
    .nav-titolo { padding: 8px 12px; font-size: 11px; }
}

.main { min-width: 0; }
.content { max-width: 1040px; margin: 0 auto; padding: 36px 40px 80px; }

.page-head { display: flex; align-items: flex-start; justify-content: space-between;
             gap: 16px; flex-wrap: wrap; margin-bottom: 8px; }
/* max-width: con flex: none la fila di pulsanti non andava mai a capo e, se
   erano tanti (la scheda progetto), usciva dalla pagina a destra */
.page-actions { flex: none; max-width: 100%; padding-top: 4px; display: flex; align-items: center;
                gap: 10px; flex-wrap: wrap; }

/* Barra mobile (nascosta su desktop) */
.mobilebar { display: none; }

@media (max-width: 920px) {
    .shell { grid-template-columns: 1fr; }
    .sidebar { position: fixed; inset: 0 auto 0 0; width: 260px; z-index: 40;
               transform: translateX(-105%); transition: transform 160ms ease; }
    body.nav-open .sidebar { transform: none; box-shadow: 0 0 40px rgba(58,46,40,0.25); }
    .mobilebar { display: flex; align-items: center; gap: 12px;
                 background: var(--bianco); border-bottom: 1px solid var(--linea); padding: 10px 16px; }
    .mobilebar .brand-name { font-size: 19px; }
    .burger { background: none; border: 0; padding: 6px; cursor: pointer; color: var(--caffe); }
    .burger svg { width: 24px; height: 24px; display: block; }
    .content { padding: 24px 18px 64px; }
    .page-head { flex-direction: column; }
}
@media (prefers-reduced-motion: reduce) { .sidebar { transition: none; } }

/* ==== Shell semplice (area famiglie e pagine senza sidebar) =============== */
.topbar { display: flex; align-items: center; justify-content: space-between; gap: 8px; flex-wrap: wrap;
          background: var(--bianco); border-bottom: 1px solid var(--linea); padding: 12px 24px; }
.brand { display: inline-flex; align-items: center; gap: 12px; text-decoration: none; }
.topbar .brand-mark { width: 30px; height: 26px; }
.mainnav { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; }
.mainnav a { color: var(--caffe); text-decoration: none; font-weight: 600; font-size: 14px; }
.mainnav a:hover, .mainnav a.active { color: var(--cobalto); }
.page { max-width: 860px; margin: 0 auto; padding: 32px 24px 64px; }
.page-center { text-align: center; padding-top: 12vh; }
.brand-mark-lg { width: 60px; height: 52px; margin-bottom: 16px; }

/* Pagine di accesso: un solo momento, centrato */
.auth-wrap { min-height: 100vh; display: grid; place-items: start center; padding: 10vh 20px 40px; }
.auth-box { width: 100%; max-width: 400px; }
.auth-brand { display: flex; align-items: center; justify-content: center; gap: 12px; margin-bottom: 24px; }
.auth-brand .brand-mark { width: 34px; height: 30px; }
.auth-brand .brand-name { font-size: 26px; }
.auth-card { background: var(--bianco); border: 1px solid var(--linea); border-radius: 14px;
             padding: 28px 32px; box-shadow: var(--ombra); }
.auth-card h1 { font-size: 22px; margin-bottom: 4px; }
.auth-links { margin-top: 16px; font-size: 14px; }

/* ==== Componenti =========================================================== */
.card { background: var(--bianco); border: 1px solid var(--linea); border-radius: var(--raggio);
        padding: 22px 26px; margin-top: 20px; box-shadow: var(--ombra); }

/* Due taglie, due altezze, FISSE: sulla stessa riga i bottoni sono alti
   uguali, qualunque cosa contengano (misurate cinque altezze diverse su una
   sola pagina prima della 0.74.0). L'altezza la fa min-height, non il
   padding. */
.btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px;
       background: var(--cobalto); color: var(--bianco); border: 0; border-radius: var(--raggio-sm);
       min-height: var(--alt-controllo); padding: 0 20px;
       font-family: var(--font-testo); font-size: var(--testo-md); font-weight: var(--peso-forte);
       text-decoration: none; cursor: pointer; line-height: 1.2;
       box-shadow: 0 1px 2px rgba(58,46,40,0.12); white-space: nowrap;
       transition: background 120ms ease, box-shadow 120ms ease, transform 80ms ease; }
.btn:hover { background: var(--cobalto-scuro); box-shadow: 0 3px 10px rgba(74,111,165,0.28); }
.btn:active { transform: translateY(1px); }
.btn:focus-visible { outline: 3px solid var(--ambra); outline-offset: 2px; }
.btn svg { width: 18px; height: 18px; }
.btn-secondary { background: var(--bianco); color: var(--cobalto); border: 1px solid var(--cobalto);
                 box-shadow: var(--ombra); }
.btn-secondary:hover { background: var(--cobalto-velo); box-shadow: var(--ombra); }
.btn-sm { min-height: var(--alt-controllo-sm); padding: 0 14px;
          font-size: var(--testo-sm); border-radius: var(--raggio-sm); }
.btn-danger { background: var(--bianco); color: var(--corallo); border: 1px solid var(--corallo); box-shadow: var(--ombra); }
.btn-danger:hover { background: #FBF0F0; box-shadow: var(--ombra); }
/* Variante semantica: un'azione "positiva" (salvia) */
.btn-success { background: var(--salvia); }
.btn-success:hover { background: var(--salvia-scura); box-shadow: 0 3px 10px rgba(61,139,125,0.28); }
.btn-ghost { background: transparent; color: var(--talpa); border: 1px solid var(--linea); box-shadow: none; }
.btn-ghost:hover { background: var(--carta); color: var(--caffe); box-shadow: none; }
.btn-block { width: 100%; }
form .btn { margin-top: 20px; }

.linklike { background: none; border: 0; padding: 0; font: inherit; font-weight: 600; font-size: 14px;
            color: var(--talpa); cursor: pointer; }
.linklike:hover { color: var(--corallo); }
.inline-form { display: inline; margin: 0; }

label { display: block; font-size: 11px; font-weight: 600; letter-spacing: 0.06em;
        text-transform: uppercase; color: var(--talpa); margin: 16px 0 4px; }
input[type=text], input[type=email], input[type=password], input[type=number],
input[type=date], input[type=time], input[type=url], select, textarea {
    width: 100%; max-width: 440px; padding: 10px 12px; border: 1px solid var(--linea);
    border-radius: 8px; font: inherit; background: var(--bianco); color: var(--caffe); }
input:focus, select:focus, textarea:focus { outline: 2px solid var(--cobalto); outline-offset: 1px;
    border-color: var(--cobalto); }
.form-cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 0 28px; }
.field-row { display: flex; gap: 10px; align-items: flex-end; max-width: 440px; }
.field-row > :first-child { flex: 1; }
.field-row .btn { margin: 0 0 1px; white-space: nowrap; }

/* Tabelle dense (schema Prima Nota): numeri a destra, testate discrete */
.table-wrap { overflow-x: auto; }
.table { width: 100%; border-collapse: collapse; }
.table th { text-align: left; font-size: 11px; font-weight: 600; letter-spacing: 0.06em;
            text-transform: uppercase; color: var(--talpa);
            border-bottom: 1px solid var(--linea); padding: 8px 12px; }
.table td { padding: 11px 12px; border-bottom: 1px solid var(--linea); }
.table tr:last-child td { border-bottom: 0; }
.table a { text-decoration: none; }
.row-link { cursor: pointer; }
.row-link:hover td { background: var(--cobalto-velo); }

.avatar { display: inline-flex; align-items: center; justify-content: center;
          width: 34px; height: 34px; border-radius: 50%; flex: none;
          background: var(--cobalto-velo); color: var(--cobalto-scuro);
          font-weight: 600; font-size: 13px; letter-spacing: 0.02em; }
.cell-person { display: flex; align-items: center; gap: 12px; }

.badge { display: inline-block; padding: 2px 10px; border-radius: 999px;
         font-size: 12px; font-weight: 600; color: var(--bianco); }
.badge-ok { background: var(--salvia); }
.badge-err { background: var(--corallo); }
.badge-neutral { background: var(--talpa); }
.badge-premium { background: var(--ametista); }
.badge-warn { background: var(--ambra); }

/* Avvisi (0.76.0): fondo tenue e filo colorato a sinistra, sui token della
   scala v2. Il segno di stato (un piccolo svg) lo mette il layout nei soli
   flash; i banner scritti nelle viste restano di solo testo e questa regola
   veste bene entrambi. Le classi non cambiano nome: le prove li riconoscono
   da lì. `overflow-wrap` tiene dentro i 320px anche una parola lunghissima. */
.alert { display: flex; align-items: flex-start; gap: var(--sp-3);
         border-radius: var(--raggio-sm); border-left: 4px solid var(--talpa);
         padding: var(--sp-3) var(--sp-4); margin: 0 0 var(--sp-4);
         font-size: var(--testo-md); line-height: 1.45;
         min-width: 0; overflow-wrap: anywhere; }
/* Il segno sta DOPO il testo nel markup (le prove estraggono il messaggio
   subito dopo la classe) e torna davanti all'occhio con `order`. */
.alert > svg { flex: none; width: 20px; height: 20px; margin-top: 2px; order: -1; }
.alert-ok { background: #E8F2EF; border-left-color: var(--salvia); color: #28594F; }
.alert-err { background: #F7E6E6; border-left-color: var(--corallo); color: #8C3737; }
.alert-warn { background: #FBF0DC; border-left-color: var(--ambra); color: #7A5518; }
/* `nota-fissa`: un avviso scritto nella pagina, non un messaggio flash. Si
   veste come gli altri; la classe in più serve alle prove, che riconoscono i
   flash dalla coppia esatta «alert alert-warn» (0.89.0). */
.alert.nota-fissa { box-shadow: none; }
/* Un avviso con più pezzi (titolo, paragrafo, riga da incollare) va in
   colonna: in riga, sul telefono, il titolo andava a capo a ogni parola
   (0.92.0). */
.alert.alert-blocco { display: block; }
.alert-blocco > * { margin: 0 0 var(--sp-2); }
.alert-blocco > :last-child { margin-bottom: 0; }
.alert-blocco > strong { display: block; }

.kpi-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 14px; margin-top: 20px; }
.kpi { display: block; background: var(--bianco); border: 1px solid var(--linea); border-radius: var(--raggio);
       padding: 16px 20px; text-decoration: none; color: var(--caffe); box-shadow: var(--ombra); }
a.kpi:hover { border-color: var(--cobalto); }
.kpi-num { display: block; font-family: var(--font-display); font-weight: 600; font-size: 30px;
           line-height: 1.18; font-variant-numeric: tabular-nums; margin-top: 2px; white-space: nowrap; }
.kpi-hint { display: block; font-size: 13px; color: var(--salvia-scura); font-weight: 600; }

.steps-list { list-style: none; padding: 0; margin: 0; display: grid; gap: 10px; }
.steps-list li { display: flex; align-items: center; gap: 12px; font-size: 15px; }
.steps-list a { font-weight: 600; }
.step-mark { width: 24px; height: 24px; border-radius: 50%; border: 2px solid var(--linea); flex: none;
             display: inline-flex; align-items: center; justify-content: center;
             font-size: 14px; font-weight: 700; color: var(--bianco); }
.step-done .step-mark { background: var(--salvia); border-color: var(--salvia); }
.step-done span { color: var(--talpa); text-decoration: line-through; }

.module-chips { display: flex; flex-wrap: wrap; gap: 8px; margin: 8px 0; }
.module-chip { padding: 4px 14px; border-radius: 999px; font-size: 14px; font-weight: 600; }
.module-on { background: #E8F2EF; color: #28594F; }
.module-off { background: var(--carta); color: var(--talpa); border: 1px dashed var(--linea); }

.filter-row { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin-bottom: 16px; }
.filter-row input[type=text] { max-width: 280px; }
.filter-row select { width: auto; }
.filter-row .btn { margin: 0; }

.empty-state { text-align: center; padding: 40px 20px; color: var(--talpa); }
.empty-state svg { width: 40px; height: 40px; color: var(--linea); margin-bottom: 8px; }
.empty-state .btn { margin-top: 16px; }

.code-chip { font-family: ui-monospace, Consolas, monospace; font-weight: 700; font-size: 17px;
             letter-spacing: 0.12em; background: #F1EBE2; border-radius: 6px; padding: 3px 10px; }
.secret-box { font-family: ui-monospace, Consolas, monospace; font-size: 15px; letter-spacing: 0.06em;
              background: #F1EBE2; border-radius: 8px; padding: 10px 14px; display: inline-block;
              user-select: all; overflow-wrap: anywhere; max-width: 100%; }
.recovery-list { columns: 2; font-family: ui-monospace, Consolas, monospace; font-size: 15px;
                 letter-spacing: 0.06em; padding-left: 20px; }
.perm-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 6px 16px; margin: 10px 0; }
.perm-grid label { display: flex; align-items: center; gap: 8px; margin: 0; text-transform: none;
                   letter-spacing: 0; font-size: 14px; font-weight: 400; color: var(--caffe); }

.tenant-list { list-style: none; padding: 0; display: grid; gap: 10px; }
.tenant-list button { width: 100%; text-align: left; background: var(--bianco); border: 1px solid var(--linea);
                      border-radius: 10px; padding: 14px 18px; font: inherit; font-weight: 600;
                      color: var(--caffe); cursor: pointer; }
.tenant-list button:hover { border-color: var(--cobalto); color: var(--cobalto); }

/* Scheda contatto */
.profile-head { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }
.profile-head .avatar { width: 52px; height: 52px; font-size: 19px; }
.profile-meta { color: var(--talpa); font-size: 14px; }
.dl { display: grid; grid-template-columns: 150px 1fr; gap: 8px 18px; margin: 0; }
.dl dt { font-size: 11px; font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase;
         color: var(--talpa); padding-top: 3px; }
.dl dd { margin: 0; overflow-wrap: anywhere; }
@media (max-width: 560px) { .dl { grid-template-columns: 1fr; gap: 2px; } .dl dd { margin-bottom: 10px; } }

datalist { display: none; }

/* ===========================================================================
   Design system 2.0 — gerarchia, grinta, grafici (Fase 5h)
   =========================================================================== */

/* --- Hero di pagina: titolo con icona in un chip d'accento --- */
.hero { display: flex; align-items: center; gap: 16px; }
.hero-ico { width: 52px; height: 52px; border-radius: 14px; flex: none;
            display: inline-flex; align-items: center; justify-content: center;
            background: var(--cobalto-velo); color: var(--cobalto); }
.hero-ico svg { width: 28px; height: 28px; }

/* --- Testata di card con icona, titolo e azioni sulla stessa riga --- */
.card-head { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; }
.card-head h2, .card-head h3 { margin: 0; }
.card-head svg { width: 20px; height: 20px; color: var(--talpa); flex: none; }
.card-head .card-head-act { margin-left: auto; display: flex; align-items: center; gap: 8px; }

/* --- KPI potenziati: rail d'accento a sinistra e icona --- */
.kpi { position: relative; overflow: hidden; transition: border-color 120ms ease, box-shadow 120ms ease, transform 80ms ease; }
a.kpi:hover { box-shadow: 0 6px 18px rgba(58,46,40,0.1); transform: translateY(-1px); }
.kpi-top { display: flex; align-items: center; gap: 10px; margin-bottom: 2px; }
.kpi-top .caption { margin: 0; }
.kpi-ico { margin-left: auto; width: 34px; height: 34px; border-radius: 10px; flex: none;
           display: inline-flex; align-items: center; justify-content: center;
           background: var(--carta); color: var(--talpa); }
.kpi-ico svg { width: 19px; height: 19px; }
.kpi--accent, .kpi--good, .kpi--warn, .kpi--bad { border-left: 4px solid var(--cobalto); }
.kpi--accent { border-left-color: var(--cobalto); }
.kpi--good { border-left-color: var(--salvia); }
.kpi--warn { border-left-color: var(--ambra); }
.kpi--bad { border-left-color: var(--corallo); }
.kpi--good .kpi-ico { background: #E8F2EF; color: var(--salvia-scura); }
.kpi--warn .kpi-ico { background: #FBF0DC; color: #9A6A16; }
.kpi--bad .kpi-ico { background: #F7E6E6; color: var(--corallo); }
.kpi--accent .kpi-ico { background: var(--cobalto-velo); color: var(--cobalto); }
/* Il conto interno (0.93.1): non è cassa, e non ha l'aria di esserlo */
.kpi-interno { border-left: 4px dashed var(--talpa); }
.kpi-interno .kpi-num { color: var(--talpa); }
.kpi-num.pos { color: var(--salvia-scura); }
.kpi-num.neg { color: var(--corallo); }
.kpi-num.money { font-size: 23px; }

/* --- Grafico a ciambella + legenda --- */
.chart-row { display: flex; gap: 28px; align-items: center; flex-wrap: wrap; }
.chart-donut { flex: none; }
.donut-top { font-family: var(--font-display); font-weight: 600; font-size: 22px; fill: var(--caffe); }
.donut-sub { font-size: 11px; font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; fill: var(--talpa); }
.chart-legend { display: grid; gap: 10px; min-width: 200px; flex: 1; }
.legend-item { display: flex; align-items: center; gap: 10px; font-size: 14px; }
.legend-dot { width: 12px; height: 12px; border-radius: 3px; flex: none; }
.legend-item .num { margin-left: auto; }
.legend-item .legend-name { color: var(--talpa); }

/* --- Barre orizzontali comparate (preventivo vs consuntivo) --- */
.chart-bars { display: grid; gap: 14px; }
.cb-row { display: grid; grid-template-columns: 160px 1fr 150px; align-items: center; gap: 12px; }
.cb-label { font-weight: 600; font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cb-track { position: relative; height: 22px; }
.cb-fill { position: absolute; left: 0; top: 0; height: 9px; border-radius: 5px; min-width: 2px; }
.cb-fill-b { top: 12px; }
.cb-vals { display: flex; flex-direction: column; align-items: flex-end; font-size: 12.5px; line-height: 1.35; }
.cb-vals .cb-b { color: var(--talpa); }
@media (max-width: 620px) { .cb-row { grid-template-columns: 1fr; gap: 4px; }
    .cb-vals { flex-direction: row; gap: 12px; } }

/* --- Meter: avanzamento singolo in linea --- */
.meter { display: block; height: 8px; border-radius: 5px; background: var(--linea); overflow: hidden; min-width: 80px; }
.meter-fill { display: block; height: 100%; border-radius: 5px; }

/* --- Fascia di statistiche dentro una card --- */
.stat-band { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
             gap: 2px; background: var(--linea); border-radius: 10px; overflow: hidden; }
.stat-cell { background: var(--bianco); padding: 14px 16px; }
.stat-cell .caption { display: block; }
.stat-cell .stat-val { font-family: var(--font-display); font-weight: 600; font-size: 22px;
                       font-variant-numeric: tabular-nums; margin-top: 2px; }

/* --- Azioni in riga di tabella: pulsanti-icona uniformi --- */
.icon-btn { display: inline-flex; align-items: center; justify-content: center;
            width: 32px; height: 32px; border-radius: 8px; border: 1px solid var(--linea);
            background: var(--bianco); color: var(--talpa); cursor: pointer; padding: 0;
            transition: border-color 120ms ease, color 120ms ease, background 120ms ease; }
.icon-btn:hover { border-color: var(--cobalto); color: var(--cobalto); background: var(--cobalto-velo); }
.icon-btn svg { width: 17px; height: 17px; }
.row-actions { display: inline-flex; gap: 6px; align-items: center; }

/* --- Salute: chip delle condizioni + suggerimenti --- */
.chips { display: flex; flex-wrap: wrap; gap: 8px; margin: 6px 0 4px; }
.chip { display: inline-flex; align-items: center; gap: 6px; padding: 5px 8px 5px 14px;
        border-radius: 999px; font-size: 14px; font-weight: 600;
        background: #F7E6E6; color: #8C3737; }
.chip-intolerance { background: #FBF0DC; color: #7A5518; }
.chip-condition { background: var(--cobalto-velo); color: var(--cobalto-scuro); }
.chip-x { background: none; border: 0; padding: 0 4px; font: inherit; font-size: 16px;
          line-height: 1; color: inherit; opacity: 0.55; cursor: pointer; }
.chip-x:hover { opacity: 1; }

.suggest-anchor { position: relative; }
.suggest { position: absolute; top: calc(100% + 4px); left: 0; right: 0; z-index: 30;
           background: var(--bianco); border: 1px solid var(--linea); border-radius: 8px;
           box-shadow: 0 8px 24px rgba(58,46,40,0.12); overflow: hidden; }
.suggest-item { display: block; width: 100%; text-align: left; background: none; border: 0;
                padding: 9px 14px; font: inherit; color: var(--caffe); cursor: pointer; }
.suggest-item:hover { background: var(--cobalto-velo); color: var(--cobalto-scuro); }
/* L'età accanto al nome (0.93.2) */
.suggest-eta { margin-left: 8px; font-size: 13px; color: var(--talpa); }
.suggest-item:hover .suggest-eta { color: inherit; }

/* --- Lista a spunte (iscrizione multi-turno) --- */
.check-list { display: grid; gap: 6px; margin-top: 6px; }
.check-row { display: flex; align-items: center; gap: 12px; padding: 10px 14px;
             border: 1px solid var(--linea); border-radius: 8px; cursor: pointer;
             margin: 0; text-transform: none; letter-spacing: 0;
             font-size: 15px; font-weight: 400; color: var(--caffe); }
.check-row:hover { border-color: var(--cobalto); }
.check-row:has(input:checked) { background: var(--cobalto-velo); border-color: var(--cobalto); }
.check-row input { width: 18px; height: 18px; accent-color: var(--cobalto); flex: none; }
.check-row-main { display: flex; flex-direction: column; flex: 1; min-width: 0; }
.check-row .num { flex: none; }

/* --- Tab di sezione: stesso posto su tutte le pagine di un turno --- */
/* Sul telefono quattro schede non stanno in una riga: scorrono di lato,
   senza andare a capo e senza tagliare l'ultima. */
.tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--linea); margin: 14px 0 4px;
        overflow-x: auto; scrollbar-width: none; }
.tabs::-webkit-scrollbar { display: none; }
.tabs a { display: inline-flex; align-items: center; gap: 8px; padding: 9px 16px; white-space: nowrap;
          font-size: 14.5px; font-weight: 600; color: var(--talpa); text-decoration: none;
          border-bottom: 3px solid transparent; margin-bottom: -1px; }
/* La testata della scheda aperta sotto le schede di Impostazioni: un po' d'aria. */
.tabs + .page-head { margin-top: 18px; }
/* Le schede di Impostazioni sono tante (0.99.0): vanno a capo invece di
   scorrere di lato con la barra nascosta, dove le prime sparivano. */
.tabs[data-a-capo] { flex-wrap: wrap; overflow: visible; row-gap: 2px; }
.tabs a svg { width: 17px; height: 17px; }
.tabs a:hover { color: var(--caffe); }
.tabs a.active { color: var(--cobalto-scuro); border-bottom-color: var(--cobalto); }
.tabs a.active svg { color: var(--cobalto); }

/* --- Modali: <dialog> nativo, form su richiesta --- */
dialog.modal { border: 0; border-radius: 14px; padding: 0; max-width: 640px; width: calc(100% - 32px);
               box-shadow: 0 24px 60px rgba(58,46,40,0.28); background: var(--bianco); color: var(--caffe); }
dialog.modal::backdrop { background: rgba(58,46,40,0.45); }
dialog.modal.modal-lg { max-width: 980px; }

/* --- Icone nei titoli di sezione (scheda anagrafica e simili) --- */
.card h2 svg, .card h3 svg, .modal-body h3 svg {
    width: 19px; height: 19px; vertical-align: -3.5px;
    margin-right: 8px; color: var(--talpa);
}

/* --- QR code (collegamento famiglie) --- */
.qr { display: block; width: 100%; height: auto; }
.qr-spotlight { display: flex; gap: 24px; align-items: center; flex-wrap: wrap; }
.qr-box { width: 190px; flex: none; padding: 10px; background: var(--bianco);
          border: 1px solid var(--linea); border-radius: 12px; }
.qr-info { flex: 1; min-width: 220px; }
.qr-mini { display: inline-block; width: 64px; vertical-align: middle; }
.qr-mini .qr { border-radius: 3px; }

/* Nuclei familiari: card decisionale, chip di appartenenza, righe azione */
.btn-row { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.nucleo-suggest { border-left: 4px solid var(--cobalto); background: var(--cobalto-velo); }
.nucleo-opt { display: flex; justify-content: space-between; align-items: center; gap: 12px;
              flex-wrap: wrap; padding: 10px 12px; margin: 8px 0; background: var(--bianco);
              border: 1px solid var(--linea); border-radius: 10px; }
.nucleo-opt form { margin: 0; }
.nucleo-chips { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: 0 0 12px; }
.nucleo-chips .chip { background: var(--cobalto-velo); color: var(--cobalto-scuro);
                      padding: 5px 12px; text-decoration: none; }
.nucleo-chips .chip svg { width: 15px; height: 15px; }
.nucleo-chips .chip:hover { background: var(--cobalto); color: #fff; }
.nucleo-chips .chip:hover .muted { color: rgba(255,255,255,0.8); }

.mono { font-family: ui-monospace, Consolas, monospace; font-size: 12.5px; }

/* Pannello piattaforma: interruttori dei moduli */
.mod-toggles { display: flex; gap: 6px; flex-wrap: wrap; }
.mod-toggles .inline-form { margin: 0; }
.mod-toggle { display: inline-flex; align-items: center; gap: 5px; padding: 4px 10px; cursor: pointer;
              border: 1px solid var(--linea); border-radius: 999px; background: var(--carta);
              font: 600 12.5px/1 var(--font-testo, inherit); color: var(--talpa); }
.mod-toggle svg { width: 13px; height: 13px; }
.mod-toggle:hover { border-color: var(--cobalto); color: var(--cobalto); }
.mod-toggle.is-on { background: #E8F2EF; border-color: #BFDCD4; color: var(--salvia-scura); }
.mod-toggle.is-on:hover { border-color: var(--salvia); }

/* Diagnostica: esito per controllo */
.check-card { border-left: 4px solid var(--linea); }
.check-ok { border-left-color: var(--salvia); }
.check-warn { border-left-color: var(--ambra); }
.check-fail { border-left-color: var(--corallo); }
.check-summary { display: flex; align-items: center; gap: 8px; margin: 0; font-weight: 600; color: var(--salvia-scura); }
.check-summary svg { width: 17px; height: 17px; flex: none; }
.check-list { margin: 8px 0 0; padding-left: 20px; max-height: 320px; overflow-y: auto; }
.check-list li { font-family: ui-monospace, Consolas, monospace; font-size: 12.5px;
                 color: var(--caffe); padding: 2px 0; }

/* Zona pericolosa: reset del database */
.danger-zone { border-left: 4px solid var(--corallo); }
.danger-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 16px; margin-top: 6px; }
.danger-opt { padding: 16px; background: var(--bianco); border: 1px solid var(--linea); border-radius: 12px; }
.danger-opt--max { border-color: #E8C4C4; background: #FDF7F6; }
.danger-opt h3 { margin: 0 0 4px; font-size: 15px; }
.danger-opt .muted { font-size: 13px; }
.danger-opt .btn { margin-top: 10px; }
.hero-ico--danger { background: #F7E6E6; color: var(--corallo); }
.reset-meta { display: flex; gap: 30px; flex-wrap: wrap; margin: 0 0 18px; }
.reset-meta dt { font-size: 9.5px; text-transform: uppercase; letter-spacing: 0.07em;
                 color: var(--talpa); font-weight: 700; margin-bottom: 4px; }
.reset-meta dd { margin: 0; }
.reset-total { font-family: var(--font-display); font-weight: 600; font-size: 26px; color: var(--corallo); }
.reset-tables { max-height: 420px; overflow-y: auto; }

/* Area famiglie: schede dei profili e consensi */
.profilo { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 14px 16px;
           background: var(--bianco); border: 1px solid var(--linea); border-radius: 12px;
           text-decoration: none; color: var(--caffe);
           transition: border-color 120ms ease, box-shadow 120ms ease, transform 80ms ease; }
.profilo:hover { border-color: var(--cobalto); box-shadow: 0 6px 18px rgba(58,46,40,0.1); transform: translateY(-1px); }
.profilo-ico { width: 34px; height: 34px; border-radius: 10px; flex: none; display: flex;
               align-items: center; justify-content: center;
               background: var(--cobalto-velo); color: var(--cobalto); }
.profilo-ico svg { width: 19px; height: 19px; }
.profilo-nome { font-weight: 600; font-size: 15px; }

.consenso { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px;
            flex-wrap: wrap; padding: 14px 0; border-top: 1px solid var(--linea); }
.consenso:first-of-type { border-top: 0; }
.consenso-testo { flex: 1; min-width: 240px; }
.consenso-testo .badge { margin-left: 6px; vertical-align: middle; }
.consenso .inline-form { margin: 0; flex: none; }
.consenso-bloccato { display: inline-flex; align-items: center; gap: 6px; flex: none;
                     padding: 7px 12px; border-radius: 999px; background: var(--carta);
                     border: 1px solid var(--linea); color: var(--talpa);
                     font-size: 13px; font-weight: 600; }
.consenso-bloccato svg { width: 15px; height: 15px; }

/* Avviso: l'importo può non essere aggiornato (le entrate si registrano a periodi) */
.avviso-registrazione { display: flex; align-items: flex-start; gap: 9px; margin: 14px 0 0;
                        padding: 11px 13px; border-radius: 12px;
                        background: #FBF0DC; color: #7A5518; font-size: 13.5px; line-height: 1.45; }
.avviso-registrazione svg { width: 17px; height: 17px; flex: none; margin-top: 1px; }

/* Comando da copiare (riga di cron): si legge e si seleziona bene */
.comando { margin: 8px 0 0; padding: 11px 13px; border-radius: 10px; overflow-x: auto;
           background: var(--caffe); color: #F6F1EA; font-size: 12.5px;
           font-family: ui-monospace, Consolas, monospace; }

/* Prossimi giorni: una riga per giorno, il gesto è "non viene" */
.giorno { display: flex; align-items: center; justify-content: space-between; gap: 12px;
          flex-wrap: wrap; padding: 12px 0; border-top: 1px solid var(--linea); }
.giorno:first-of-type { border-top: 0; }
.giorno.is-segnalato { opacity: 0.75; }
.giorno-quando { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; min-width: 200px; flex: 1; }
.giorno-data { font-weight: 600; font-variant-numeric: tabular-nums; }
.giorno-form { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin: 0; }
.giorno-form input[type=text] { max-width: 190px; margin: 0; }
.giorno-form .btn { margin: 0; }
@media (max-width: 560px) {
    .giorno-form { width: 100%; }
    .giorno-form input[type=text] { flex: 1; max-width: none; }
}

/* ===========================================================================
   AREA FAMIGLIE — pensata prima per il telefono.
   Il genitore la usa in piedi, con una mano, mentre accompagna un figlio:
   bersagli grandi, una colonna, e la navigazione dove arriva il pollice.
   =========================================================================== */
.app-top { position: sticky; top: 0; z-index: 30; display: flex; align-items: center;
           justify-content: space-between; gap: 12px; padding: 10px 16px;
           background: var(--carta); border-bottom: 1px solid var(--linea); }
.app-top .brand { font-size: 19px; }
.app-account { display: inline-flex; align-items: center; justify-content: center;
               width: 38px; height: 38px; border-radius: 50%; flex: none;
               background: var(--bianco); border: 1px solid var(--linea); color: var(--talpa); }
.app-account svg { width: 19px; height: 19px; }
.app-account.active, .app-account:hover { border-color: var(--cobalto); color: var(--cobalto); }
/* Nome dell'associazione accanto al marchio, quando ce n'e' una sola */
.app-casa { margin-right: auto; font-size: 13px; font-weight: 600; color: var(--talpa);
            overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* Schermate interne: freccia indietro + titolo al posto del marchio */
.app-back { display: inline-flex; align-items: center; justify-content: center;
            width: 38px; height: 38px; margin-left: -8px; flex: none; color: var(--caffe); }
.app-back svg { width: 22px; height: 22px; transform: scaleX(-1); }
.app-titolo { flex: 1; min-width: 0; font-family: var(--font-display); font-weight: 600;
              font-size: 17px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.app-sotto { margin: 0 0 14px; color: var(--talpa); font-size: 14px; }

.app-main { max-width: 720px; margin: 0 auto;
            padding: 16px 16px calc(88px + env(safe-area-inset-bottom, 0px)); }
.app-main .card { padding: 16px; }
.app-h1 { font-size: 24px; margin: 4px 0 14px; }

/* Hero scuro: saluto a sinistra, il numero che conta a destra */
.app-hero { display: flex; align-items: center; justify-content: space-between; gap: 16px;
            flex-wrap: wrap; background: var(--caffe); color: #F6F1EA;
            border-radius: 18px; padding: 20px; margin-bottom: 14px; }
.app-hero-ciao { font-family: var(--font-display); font-weight: 600; font-size: 24px;
                 line-height: 1.15; margin: 0; color: #FFFDFA; }
.app-hero-sotto { margin: 4px 0 0; font-size: 14px; color: rgba(246,241,234,0.72); }
.app-hero-cifra { display: flex; flex-direction: column; align-items: flex-end; margin-left: auto; }
.app-hero-num { font-family: var(--font-display); font-weight: 600; font-size: 28px;
                line-height: 1; color: #FFFDFA; white-space: nowrap; }
.app-hero-num--ok { display: inline-flex; width: 38px; height: 38px; border-radius: 50%;
                    align-items: center; justify-content: center;
                    background: rgba(61,139,125,0.28); color: #9BD3C6; }
.app-hero-num--ok svg { width: 21px; height: 21px; }
.app-hero-eti { font-size: 11px; text-transform: uppercase; letter-spacing: 0.08em;
                color: rgba(246,241,234,0.66); margin-top: 5px; }

/* Griglia 2×2: badge d'icona colorato, numero grande, etichetta */
.stat-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 14px; }
.stat { display: block; background: var(--bianco); border: 1px solid var(--linea);
        border-radius: 16px; padding: 16px; text-decoration: none; color: var(--caffe);
        transition: border-color 120ms ease, box-shadow 120ms ease, transform 80ms ease; }
a.stat:active { transform: scale(0.985); }
a.stat:hover { border-color: var(--cobalto); box-shadow: 0 6px 18px rgba(58,46,40,0.08); }
.stat-ico { display: inline-flex; align-items: center; justify-content: center;
            width: 42px; height: 42px; border-radius: 13px; margin-bottom: 14px; color: #fff; }
.stat-ico svg { width: 22px; height: 22px; }
.stat-ico--cobalto { background: var(--cobalto); }
.stat-ico--salvia  { background: var(--salvia); }
.stat-ico--ambra   { background: var(--ambra); }
.stat-ico--corallo { background: var(--corallo); }
.stat-num { display: block; font-family: var(--font-display); font-weight: 600;
            font-size: 30px; line-height: 1.05; }
.stat-num--soldi { font-size: 21px; white-space: nowrap; }
.stat-su { font-size: 17px; color: var(--talpa); font-weight: 600; }
.stat-eti { display: block; font-size: 13.5px; color: var(--talpa); margin-top: 3px; }

/* Elenco dei profili: righe alte, tutta la riga è il bersaglio */
.profilo-lista { display: flex; flex-direction: column; }
.profilo-riga { display: flex; align-items: center; gap: 12px; padding: 13px 4px;
                border-top: 1px solid var(--linea); text-decoration: none; color: var(--caffe); }
.profilo-riga:first-child { border-top: 0; }
.profilo-riga:active { background: var(--carta); }
.profilo-riga .profilo-nome { flex: 1; font-weight: 600; font-size: 15.5px; }
.profilo-chev { color: var(--talpa); display: inline-flex; }
.profilo-chev svg { width: 17px; height: 17px; }

/* Barra in basso: tre schede, sempre raggiungibili */
.app-tabs { position: fixed; left: 0; right: 0; bottom: 0; z-index: 40; display: flex;
            background: var(--bianco); border-top: 1px solid var(--linea);
            padding-bottom: env(safe-area-inset-bottom, 0px); }
.app-tabs a { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 3px;
              padding: 9px 4px 10px; text-decoration: none; color: var(--talpa); font-size: 11.5px;
              font-weight: 600; }
.app-tabs svg { width: 22px; height: 22px; }
.app-tabs a.active { color: var(--corallo); }

/* Via d'uscita verso il gestionale: solo per chi ha anche la sessione da
   operatore. Discreta di proposito — non e' una voce dell'area famiglie. */
.uscita-gestionale { margin: 18px 0 0; text-align: center; }
.uscita-gestionale a { display: inline-flex; align-items: center; gap: 6px;
                       color: var(--talpa); text-decoration: none; font-size: 13.5px;
                       font-weight: 600; }
.uscita-gestionale a:hover { color: var(--cobalto); }
.uscita-gestionale svg { width: 16px; height: 16px; }
/* Nota di servizio dell'area famiglie: piccola e in tondo. Non .caption,
   che e' maiuscoletto spaziato — una frase intera li' dentro urla. */
.nota-app { display: block; margin: 8px 0 0; text-align: center;
            font-size: 12.5px; color: var(--talpa); }

/* Invito a installare l'app: compare al primo accesso di ogni sessione */
.invito { display: flex; align-items: flex-start; gap: 12px; flex-wrap: wrap;
          background: var(--cobalto-velo); border: 1px solid #D6E1EF;
          border-radius: 16px; padding: 14px 16px; margin-bottom: 14px; }
.invito-ico { display: inline-flex; align-items: center; justify-content: center;
              width: 38px; height: 38px; border-radius: 12px; flex: none;
              background: var(--cobalto); color: #fff; }
.invito-ico svg { width: 20px; height: 20px; }
.invito-testo { flex: 1; min-width: 190px; }
.invito-testo strong { display: block; font-size: 15px; }
.invito-testo p { margin: 3px 0 0; font-size: 13.5px; color: var(--talpa); }
.invito-ios { font-weight: 600; color: var(--cobalto-scuro) !important; }
.invito-azioni { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; width: 100%; }
.invito-azioni .btn { margin: 0; }

/* Account: coppie etichetta/valore */
.dati-lista { margin: 0; }
.dati-lista > div { padding: 10px 0; border-top: 1px solid var(--linea); }
.dati-lista > div:first-child { border-top: 0; padding-top: 0; }
.dati-lista dt { font-size: 9.5px; text-transform: uppercase; letter-spacing: 0.07em;
                 color: var(--talpa); font-weight: 700; margin-bottom: 3px; }
.dati-lista dd { margin: 0; font-weight: 600; }
.lingua-scelta { display: flex; gap: 10px; flex-wrap: wrap; }
.lingua-btn { display: inline-flex; align-items: center; gap: 6px; padding: 10px 18px;
              border: 1px solid var(--linea); border-radius: 999px; background: var(--bianco);
              font: 600 14px var(--font-testo); color: var(--talpa); cursor: pointer; }
.lingua-btn svg { width: 15px; height: 15px; }
.lingua-btn.is-on { border-color: var(--cobalto); background: var(--cobalto-velo); color: var(--cobalto-scuro); }

/* Pagina di cortesia senza rete */
.offline-box { max-width: 400px; margin: 12vh auto; text-align: center; padding: 0 8px; }
.offline-box h1 { margin: 18px 0 8px; }
.offline-box .btn { margin-top: 18px; }

/* Da tablet in su l'area famiglie resta comoda ma non si allarga troppo */
@media (min-width: 640px) {
    .app-main { padding: 22px 22px 90px; }
    .app-hero { padding: 24px 26px; }
    .app-hero-ciao { font-size: 27px; }
    .app-hero-num { font-size: 32px; }
    .stat-grid { grid-template-columns: repeat(4, 1fr); }
}

/* --- Wizard attribuzione righe documento --- */
.attr-gruppo { border: 1px solid var(--linea); border-radius: 12px;
               padding: 14px 16px; margin: 14px 0; }
.attr-gruppo-head { display: flex; align-items: center; gap: 12px; margin-bottom: 8px; }
.attr-gruppo-tot { margin-left: auto; font-weight: 600; }
.attr-riga { display: flex; align-items: center; gap: 10px; padding: 7px 2px;
             border-bottom: 1px dashed var(--linea); margin: 0;
             text-transform: none; letter-spacing: 0; font-size: 15px;
             font-weight: 400; color: var(--caffe); }
.attr-riga:last-child { border-bottom: 0; }
.attr-riga .attr-desc { flex: 1; min-width: 0; }
.attr-riga .attr-check { width: 18px; height: 18px; accent-color: var(--cobalto); flex: none; }
.attr-numeri { display: flex; gap: 12px; white-space: nowrap; }
.modal-body { padding: 22px 26px 26px; }
.modal-head { display: flex; align-items: center; justify-content: space-between; gap: 12px;
              padding: 18px 26px 0; }
.modal-head h2 { margin: 0; }
.modal-x { background: none; border: 0; padding: 4px 8px; font-size: 22px; line-height: 1;
           color: var(--talpa); cursor: pointer; border-radius: 6px; }
.modal-x:hover { color: var(--corallo); background: var(--carta); }

/* --- Squadre: board a colonne con drag & drop --- */
.board { display: flex; gap: 14px; align-items: flex-start; overflow-x: auto;
         padding: 20px 2px 12px; }
.board-col { flex: 0 0 230px; background: var(--bianco); border: 1px solid var(--linea);
             border-radius: var(--raggio); padding: 10px; min-height: 120px; }
.board-col-head { display: flex; align-items: center; gap: 8px; font-weight: 600;
                  font-size: 14px; padding: 2px 4px 10px; }
.swatch { display: inline-block; width: 14px; height: 14px; border-radius: 4px; flex: none; }
.swatch-pill span { padding: 7px 10px; display: inline-flex; }
.board-cards { display: grid; gap: 8px; min-height: 40px; }
.board-card { border: 1px solid var(--linea); border-radius: 8px; padding: 8px 12px;
              background: var(--carta); cursor: grab; display: flex; flex-direction: column; }
.board-card .muted { font-size: 12px; }
.board-card.dragging { opacity: 0.5; }
.board-card.selected { outline: 2px solid var(--cobalto); background: var(--cobalto-velo); }

/* --- Appello: righe grandi pensate per il tocco --- */
.att-list { list-style: none; padding: 0; margin: 0; display: grid; gap: 8px; }
.att-row { display: flex; align-items: center; justify-content: space-between; gap: 14px;
           padding: 12px 16px; border: 1px solid var(--linea); border-radius: var(--raggio);
           background: var(--bianco); }
.att-row.att-present { background: #E8F2EF; border-color: #CBE2DC; }
.att-who { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.att-who .badge { align-self: flex-start; }
.att-toggle { min-width: 150px; justify-content: center; }
@media (max-width: 560px) {
    .att-row { flex-direction: column; align-items: stretch; }
    .att-toggle { width: 100%; }
}

.radio-row { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; }
/* Una pastiglia è un'etichetta ma non è «l'etichetta di un campo»: le regole
   di `label` (maiuscoletto, corpo 11, staccata sopra) qui si tolgono. */
.radio-pill { display: inline-block; margin: 0; font-size: inherit; font-weight: inherit;
              letter-spacing: normal; text-transform: none; color: inherit; }
.radio-pill input { position: absolute; opacity: 0; }
.radio-pill span { display: inline-block; padding: 7px 16px; border-radius: 999px;
                   border: 1px solid var(--linea); font-size: 14px; font-weight: 600;
                   color: var(--talpa); cursor: pointer; }
.radio-pill input:checked + span { background: var(--cobalto); border-color: var(--cobalto); color: var(--bianco); }
.radio-pill input:focus-visible + span { outline: 3px solid var(--ambra); outline-offset: 2px; }

/* Righe di dettaglio: condivise dall'import bancario e dall'entrata cumulativa. */
.split-row { padding: 10px 0; border-bottom: 1px dashed rgba(0, 0, 0, 0.12); }
.split-row:last-child { border-bottom: 0; }
.split-rimuovi, .cum-rimuovi { margin-top: 4px; }

/* Nell'entrata cumulativa ogni riga è una PERSONA: senza uno stacco visibile
   si legge come un unico modulo lungo e si sbaglia colonna. */
.cum-riga { padding: 14px 16px; margin-bottom: 10px; border: 1px solid var(--linea);
            border-left: 3px solid var(--cobalto); border-radius: var(--raggio);
            background: var(--bianco); }
.cum-riga:last-child { border-bottom: 1px solid var(--linea); margin-bottom: 0; }

/* Quadratura dell'entrata cumulativa: la differenza si vede mentre si scrive. */
.cum-quadratura { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap;
                  margin-top: 14px; padding: 10px 14px; border-radius: var(--raggio);
                  border: 1px solid var(--linea); background: var(--carta); }
.cum-quadratura strong { font-size: 18px; font-family: var(--font-display); }
.cum-quadratura.is-ok { border-color: #CBE2DC; background: #E8F2EF; }
.cum-quadratura.is-ok strong { color: var(--salvia-scura); }
.cum-quadratura.is-ko { border-color: #EDCDCD; background: #FBEFEF; }
.cum-quadratura.is-ko strong, .cum-quadratura.is-ko .muted { color: var(--corallo); font-weight: 700; }

/* ===========================================================================
   CEDOLINI — un blocco per dipendente: chi e' e quanto costa in testa, le
   quote per progetto sotto. Rosso finche' non fa cento.
   =========================================================================== */
.ced-dip { border: 1px solid var(--linea); border-left: 4px solid var(--linea); border-radius: 12px;
           padding: 12px 14px; margin-bottom: 10px; background: var(--bianco); }
.ced-dip.is-ko { border-left-color: var(--corallo); }
.ced-dip.is-ok { border-left-color: var(--salvia); }
.ced-dip.is-escluso { border-left-color: var(--ambra); opacity: 0.85; }
.ced-testa { display: flex; align-items: flex-start; gap: 14px; flex-wrap: wrap; }
.ced-chi { flex: 1 1 260px; display: flex; flex-direction: column; gap: 2px; }
.ced-chi strong { font-size: 15.5px; }
.ced-chi .muted, .ced-cifre .muted { font-size: 12.5px; }
.ced-cifre { flex: 1 1 260px; display: flex; flex-direction: column; gap: 2px; text-align: right; }
.ced-costo { font-family: var(--font-display); font-weight: 600; font-size: 19px; }
.ced-stato { flex: none; min-width: 84px; text-align: right; font-family: var(--font-display); font-weight: 600;
             font-size: 17px; padding-top: 2px; }
.ced-dip.is-ko .ced-stato { color: var(--corallo); }
.ced-dip.is-ok .ced-stato { color: var(--salvia-scura); }
.ced-quote { margin-top: 10px; display: flex; flex-direction: column; gap: 6px; }
.ced-modo { margin-top: 10px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; font-size: 13.5px; }
.ced-modo select { margin: 0 0 0 6px; padding: 4px 8px; font-size: 13.5px; width: auto; }
.ced-modo-aiuto { font-size: 12.5px; }
.ced-quota { display: grid; grid-template-columns: minmax(150px, 1.4fr) 72px 30px minmax(120px, 1fr) minmax(150px, 1.4fr) 104px auto;
             gap: 6px; align-items: center; }
.ced-quota select, .ced-quota input { margin: 0; padding: 6px 8px; font-size: 13.5px; }
.ced-quota .ced-pct { text-align: right; }
.ced-pct-eti { color: var(--talpa); font-size: 13px; }
.ced-quota-euro { display: flex; flex-direction: column; align-items: flex-end; gap: 2px; font-size: 12.5px; }
.ced-resto-eti { display: inline-flex; align-items: center; gap: 4px; white-space: nowrap; margin: 0;
                 font-size: 12.5px; font-weight: 400; letter-spacing: normal; text-transform: none; color: inherit; }
.ced-resto-eti[hidden] { display: none; }
.ced-resto-eti input { width: auto; margin: 0; }
.ced-euro { white-space: nowrap; font-variant-numeric: tabular-nums; }
.ced-azioni { display: flex; gap: 16px; margin-top: 8px; }
.ced-azioni .linklike { display: inline-flex; align-items: center; gap: 4px; font-size: 13px; }
.ced-azioni .linklike svg { width: 15px; height: 15px; }
@media (max-width: 760px) {
    .ced-quota { grid-template-columns: 1fr 72px 30px; }
    .ced-quota-euro { grid-column: 1 / -1; flex-direction: row; justify-content: space-between; }
    .ced-quota .ced-voce, .ced-quota .ced-cat { grid-column: 1 / -1; }
    .ced-cifre { text-align: left; }
}

/* Riga di tabella che si corregge sul posto: i campi e il bottone stanno
   sulla stessa riga finché c'è spazio, e vanno a capo sul telefono invece di
   sfondare la tabella. */
.riga-form {
    display: flex;
    flex-wrap: wrap;
    gap: .4rem;
    align-items: center;
    margin: 0;
}
.riga-form input[type="text"] { margin: 0; flex: 1 1 9rem; min-width: 7rem; width: auto; }
.riga-form select { margin: 0; flex: 0 1 13rem; min-width: 7rem; width: auto; }
/* Il piano dei conti ha una tendina lunga (la riga del Mod. D per esteso):
   li' si lascia andare a capo invece di strizzare il nome. */
.riga-form select.lunga { flex: 1 1 18rem; max-width: 34rem; }
.riga-form + .riga-form { margin-top: .35rem; }
/* Gli enti finanziatori (0.53.6): ogni ente e' una riga flessibile — il
   modulo (nome, ufficio, tipologia), quante volte e' citato, i pulsanti —
   che va a capo per blocchi interi invece di spezzare il modulo. */
.enti-lista .ente-riga { display: flex; flex-wrap: wrap; gap: .5rem 1rem; align-items: center;
                         padding: .55rem 0; border-bottom: 1px solid var(--linea); }
.enti-lista .ente-riga:last-child { border-bottom: 0; }
.ente-riga .ente-modulo { flex: 1 1 30rem; }
.ente-riga .ente-modulo input[type="text"] { flex: 1 1 8rem; min-width: 5rem; }
.ente-riga .ente-modulo select { flex: 0 1 10rem; min-width: 6rem; }
.ente-riga .ente-usi { flex: 0 0 auto; min-width: 6.5rem; white-space: nowrap; }
.ente-riga .azioni { display: flex; gap: .4rem; margin-left: auto; }
.ente-riga .azioni .riga-form + .riga-form { margin-top: 0; }

/* ---------------------------------------------------------------------------
   Le luci del campo (0.54.0).
   La pagina dei comandi si usa col telefono in mano, spesso al buio: riquadri
   larghi, una spia che si vede da lontano, pulsanti grandi abbastanza da
   premerli con i guanti. La spia lampeggia solo mentre un comando e' in
   viaggio, e si ferma appena l'impianto conferma.
--------------------------------------------------------------------------- */
.luci-griglia { display: grid; gap: 14px; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); }
.luce { border-left: 6px solid var(--linea); transition: border-color .35s ease, background .35s ease; }
.luce.e-accesa { border-left-color: var(--ambra); background:
    linear-gradient(180deg, rgba(232,161,61,.09), rgba(232,161,61,0) 120px), var(--bianco); }
.luce.e-attesa { border-left-color: var(--cobalto); }
/* Mandato e non eseguito: è un fatto, non un'attesa, e si vede che è un guaio. */
.luce.e-fermo { border-left-color: var(--corallo); }
.luce.e-fermo .luce-stato { color: var(--corallo); }
.luce-testa { display: flex; align-items: center; gap: 14px; }
.luce-testa h2 { margin: 0; font-size: 18px; }
.luce-posto { margin: 2px 0 0; font-size: 13px; color: var(--talpa); }
/* Lo stato si legge da lontano e a occhi stanchi: è la riga per cui si è
   aperta la pagina, non un sottotitolo. */
.luce-stato { margin: 12px 0 0; font-size: 22px; font-weight: 800; letter-spacing: .2px;
              color: var(--talpa); text-transform: uppercase; }
.luce.e-accesa .luce-stato { color: #B4761C; }
.luce.e-attesa .luce-stato { color: var(--cobalto); }
.luce-quando { margin: 6px 0 14px; }
.luce-spia { width: 26px; height: 26px; border-radius: 50%; flex: 0 0 26px;
             border: 2px solid var(--linea); background: var(--linea); }
.luce-spia.e-accesa { background: #F2B705; border-color: #D89C00; box-shadow: 0 0 0 6px rgba(242,183,5,.18); }
.luce-spia.e-spenta { background: var(--carta); border-color: var(--linea); }
.luce-spia.e-ignota { background: repeating-linear-gradient(45deg, var(--linea), var(--linea) 3px, var(--carta) 3px, var(--carta) 6px); }
.luce-spia.e-viaggio { animation: luce-pulsa 1.1s ease-in-out infinite; }
@keyframes luce-pulsa { 0%, 100% { opacity: 1; } 50% { opacity: .35; } }

/* Le durate come pastiglie, non come tendina: sul telefono una tendina si
   apre, si scorre e si sbaglia; qui si vede tutto e si tocca una volta sola.
   Il pallino vero resta nel documento (tastiera e lettori di schermo lo
   trovano), ma non si vede: quello che si vede è l'etichetta. */
.durate { border: 0; padding: 0; margin: 0 0 12px; display: flex; flex-wrap: wrap; gap: .4rem; }
.durate legend { font-size: 11px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase;
                 color: var(--talpa); margin-bottom: 6px; padding: 0; }
/* `label` in Domus è l'etichetta di un campo: minuscola, maiuscoletto,
   staccata sopra. Una pastiglia è un'altra cosa e qui quelle regole si
   tolgono, altrimenti «120 min» diventa «120 MIN» in corpo undici. */
.durata { display: inline-block; margin: 0; font-size: inherit; font-weight: inherit;
          letter-spacing: normal; text-transform: none; color: inherit; }
.durata input { position: absolute; opacity: 0; width: 0; height: 0; }
.durata span { display: inline-block; padding: 9px 14px; border: 1.5px solid var(--linea); border-radius: 999px;
               font-weight: 600; font-size: 14px; color: var(--talpa); background: var(--bianco);
               cursor: pointer; user-select: none; transition: all .15s ease; }
.durata span:hover { border-color: var(--talpa); }
.durata input:checked + span { background: var(--cobalto-velo); border-color: var(--cobalto);
                               color: var(--cobalto-scuro); }
.durata input:focus-visible + span { outline: 2px solid var(--cobalto); outline-offset: 2px; }
.durata-ora span { display: inline-flex; align-items: center; gap: .4rem; padding-top: 5px; padding-bottom: 5px; }
.durata-ora input[type="time"] { position: static; opacity: 1; width: auto; height: auto; min-width: 0;
                                  padding: 3px 6px; border: 1px solid var(--linea); border-radius: 8px;
                                  font: inherit; font-size: 14px; background: var(--bianco); color: var(--caffe); }

/* I turni di oggi e i loro minuti in più (0.92.0) */
.turno-extra { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
               gap: .5rem 1rem; padding: 10px 0; }
.turno-extra + .turno-extra { border-top: 1px solid var(--linea); }
.turno-extra-testa { display: flex; flex-wrap: wrap; align-items: baseline; gap: .25rem .6rem; min-width: 0; }
.turno-extra-scelte { display: flex; flex-wrap: wrap; gap: .4rem; margin: 0; }
.turno-extra-scelte .btn { min-width: 52px; justify-content: center; }

/* I due pulsanti: larghi, alti, con l'icona. Si premono con i guanti, al buio,
   guardando il campo invece dello schermo. */
.btn-luce { display: inline-flex; align-items: center; justify-content: center; gap: .5rem;
            width: 100%; min-height: 54px; padding: 14px 20px; border-radius: 12px;
            font: inherit; font-size: 17px; font-weight: 700; cursor: pointer;
            border: 1.5px solid var(--linea); background: var(--bianco); color: var(--caffe);
            transition: transform .08s ease, box-shadow .2s ease, background .2s ease; }
.btn-luce svg { width: 20px; height: 20px; }
.btn-luce:active { transform: translateY(1px); }
.btn-luce:focus-visible { outline: 2px solid var(--cobalto); outline-offset: 2px; }
.btn-accendi { background: linear-gradient(180deg, #F2B33F, var(--ambra)); border-color: #CE8A28;
               color: #40290A; box-shadow: 0 2px 0 #C98524, 0 6px 16px rgba(232,161,61,.28); }
.btn-accendi:hover { background: linear-gradient(180deg, #F5BD55, #ECA94A); }
.btn-accendi:active { box-shadow: 0 1px 0 #C98524; }
.btn-spegni { background: var(--carta); }
.btn-spegni:hover { border-color: var(--talpa); }
.luce-comandi { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; margin-top: 10px; }
.luce-comandi .inline-form { flex: 1 1 140px; margin: 0; }
.btn-grande { padding: 12px 22px; font-size: 16px; }

/* ---------------------------------------------------------------------------
   Il disegno del campo (0.54.1).
   Le misure e i colori stanno qui e non in Pianta.php: il disegno è una
   figura, e una figura si veste come il resto del programma. Lo stato lo
   portano due classi sul gruppo — e-acceso, e-attesa — che lo script cambia
   senza ridisegnare niente.
--------------------------------------------------------------------------- */
.campo-pianta { padding: 8px 10px 2px; overflow: hidden; }
.campo-pianta-nota { margin: 0 0 8px; text-align: center; font-size: 13px; }
.campo-svg { width: 100%; height: auto; display: block; max-width: 900px; margin: 0 auto; }
.campo-svg .campo-erba { fill: #4E8C5A; }
.campo-svg .campo-striscia { fill: #458050; opacity: .55; }
/* Le righe sono disegnate su un piano inclinato dalla matrice: senza
   vector-effect la stessa matrice assottiglierebbe il tratto in una direzione
   e non nell'altra. */
.campo-svg .campo-linea { fill: none; stroke: rgba(255,255,255,.8); stroke-width: 2.5;
                          vector-effect: non-scaling-stroke; }
.campo-svg .campo-linea-piena { fill: rgba(255,255,255,.8); }
.campo-svg .campo-bordo { fill: #3C7549; }
.campo-svg .campo-bordo.e-scuro { filter: brightness(.82); }
.campo-svg .campo-porta line { stroke: rgba(255,255,255,.55); stroke-width: 2.5; stroke-linecap: round; }
.campo-svg .campo-rete { fill: #fff; opacity: .18; }
.campo-svg .palo, .campo-svg .palo-base, .campo-svg .testa-cima { fill: #7D8790; }
.campo-svg .palo-ombra { fill: rgba(0,0,0,.22); }
.campo-svg .etichetta-filo { stroke: var(--linea); stroke-width: 1.5; stroke-dasharray: 3 4; }
.campo-svg .etichetta-campo { fill: var(--talpa); text-anchor: middle;
                              font: 700 19px var(--font-testo); transition: fill .45s ease; }
/* Spento: la testa del lampione è grigia, alone e pozza di luce invisibili. */
.campo-svg .testa { fill: #9AA4AD; transition: fill .45s ease; }
.campo-svg .alone { opacity: 0; transition: opacity .45s ease; }
.campo-svg .bagliore { opacity: 0; transition: opacity .6s ease; }
/* Acceso. */
.campo-svg .e-acceso .testa { fill: var(--ambra); }
.campo-svg .e-acceso .alone { opacity: 1; }
.campo-svg .e-acceso .bagliore { opacity: .9; }
.campo-svg .e-acceso .etichetta-campo { fill: #B4761C; }
/* Comando mandato e non ancora confermato: la lampada pulsa. */
.campo-svg .e-attesa .testa { fill: var(--cobalto); }
.campo-svg .e-attesa .alone { opacity: .5; }
.campo-svg .e-attesa .bagliore { opacity: .3; }
.campo-svg .e-attesa .testa, .campo-svg .e-attesa .alone,
.campo-svg .e-attesa .bagliore { animation: luce-pulsa 1.4s ease-in-out infinite; }
@media (prefers-reduced-motion: reduce) {
    .campo-svg *, .luce-spia { transition: none !important; animation: none !important; }
}
/* Sul telefono il campo si riduce a un terzo e le scritte diventano
   illeggibili: si tolgono, e il legame fra lampioni e riquadri lo fa la riga
   «a sinistra / al centro / a destra» sotto il nome del gruppo. */
@media (max-width: 559px) {
    .campo-svg .etichetta-campo, .campo-svg .etichetta-filo { display: none; }
}

/* Le regole in sei stanze: una riga di schede piccole sotto quelle grandi.
   Si distinguono dalle prime per dimensione e forma — pastiglie, non linguette
   — perché sono un livello sotto, e due file di linguette uguali sarebbero
   due file di linguette. */
   Le pastiglie stanno sotto il bordo della riga di sopra: attaccate a quel
   bordo sembravano parte di quella riga, e le due file si leggevano come una
   sola. Un dito d'aria sopra, di più sotto, e abbastanza spazio fra l'una e
   l'altra da non toccarle entrambe con il pollice. */
.subtabs { display: flex; gap: 8px; flex-wrap: wrap; margin: 16px 0 22px; }
.subtabs a { display: inline-flex; align-items: center; gap: .45rem; padding: 8px 15px;
             border: 1px solid var(--linea); border-radius: 999px; background: var(--bianco);
             color: var(--talpa); font-size: 14px; font-weight: 600; text-decoration: none; }
.subtabs a:hover { border-color: var(--talpa); color: var(--caffe); }
.subtabs a.active { background: var(--cobalto-velo); border-color: var(--cobalto); color: var(--cobalto-scuro); }
.subtabs a svg { width: 16px; height: 16px; flex: none; }

/* La riga di cron da copiare: monospazio, a capo dove serve, selezionabile. */
.cron-riga { background: var(--caffe); color: #F6F1E9; padding: 10px 12px; border-radius: 8px;
             font: 13px/1.5 ui-monospace, SFMono-Regular, Menlo, monospace;
             white-space: pre-wrap; word-break: break-all; margin: 8px 0; }

/* Coppie «etichetta: valore» in riga, per le schede di stato. */
.dati-riga { display: flex; flex-wrap: wrap; gap: 10px 28px; margin: 6px 0 0; }
.dati-riga div { min-width: 0; }
.dati-riga dt { font-size: 11px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase;
                color: var(--talpa); }
.dati-riga dd { margin: 2px 0 0; font-weight: 600; }

/* I gruppi di luci: una riga per gruppo, e la modifica in una finestra. */
/* Le uscite viste dalla centralina, in fila: è la controprova di quello che
   Domus crede di aver comandato, e si legge da lontano. */
.uscite-strip { display: flex; flex-wrap: wrap; gap: .5rem; margin-top: 16px; }
.uscita-pastiglia { display: inline-flex; flex-direction: column; gap: 2px;
    padding: 8px 14px; border: 1px solid var(--linea); border-radius: 12px;
    background: var(--carta); font-size: 13px; color: var(--talpa); }
.uscita-pastiglia strong { font-size: 14px; color: var(--caffe); }
.uscita-pastiglia.e-accesa { background: var(--cobalto-velo); border-color: var(--cobalto); }
.uscita-pastiglia.e-accesa strong { color: var(--cobalto); }

.gruppi-elenco { display: flex; flex-direction: column; gap: .5rem; }
.gruppo-riga { display: flex; align-items: center; gap: .7rem; flex-wrap: wrap;
               padding: 10px 12px; border: 1px solid var(--linea); border-radius: 10px; background: var(--bianco); }
.gruppo-riga.e-ritirato { opacity: .6; }
.gruppo-riga .gruppo-nome { flex: 1 1 12rem; display: flex; flex-direction: column; line-height: 1.3; }
.gruppo-riga .gruppo-nome .muted { font-size: 13px; }
.gruppo-riga .azioni { margin-left: auto; display: flex; gap: .3rem; align-items: center; flex-wrap: wrap; }
.uscita-chip { flex: 0 0 auto; padding: 4px 9px; border-radius: 6px; background: var(--carta);
               border: 1px solid var(--linea); font-size: 13px; }

/* La griglia degli orari: un riquadro per giorno, come un orario appeso. */
.griglia-giorni { display: grid; gap: 10px; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); }
.giorno-blocco { border: 1px solid var(--linea); border-radius: 10px; padding: 10px 12px; }
.giorno-blocco h3 { margin: 0 0 8px; font-size: 14px; }
.fascia-riga { display: flex; gap: .5rem; align-items: flex-start; padding: 7px 0; }
.fascia-riga + .fascia-riga { border-top: 1px dashed var(--linea); }
.fascia-riga > div:first-child { flex: 1; display: flex; flex-direction: column; line-height: 1.35; }
.fascia-riga .fascia-gruppi { font-size: 13px; }
.fascia-riga .azioni { display: flex; gap: .2rem; }

/* Le prenotazioni: sette colonne che sul telefono diventano una pila. */
.settimana-barra { display: flex; align-items: center; justify-content: space-between; gap: .6rem;
                   flex-wrap: wrap; margin-bottom: 12px; }
.prenota-griglia { display: grid; gap: 10px; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); }
.prenota-giorno { border: 1px solid var(--linea); border-radius: 8px; padding: 10px; }
.prenota-giorno h3 { margin: 0 0 8px; font-size: 14px; }
.prenota-giorno.e-chiuso { opacity: .55; }
.prenota-fascia { display: flex; gap: .5rem; align-items: flex-start; padding: 6px; border-radius: 6px; cursor: pointer; }
.prenota-fascia:hover { background: var(--linea); }
.prenota-fascia.e-presa { background: rgba(242,183,5,.12); }
/* Che cosa ne fa la luce del sole: sta sotto il nome della fascia, in piccolo,
   e non grida — e' un'informazione, non un errore. Il `text-transform: none`
   non e' un vezzo: la fascia e' un <label>, e la regola generale dei label
   scrive tutto in maiuscolo — una frase intera in maiuscolo dentro una colonna
   stretta diventa illeggibile, e sembra un allarme. */
.fascia-luce { display: block; margin-top: 2px; font-size: 11.5px; line-height: 1.35;
    color: var(--talpa); font-weight: 400; text-transform: none; letter-spacing: 0; }
.prenota-fascia span { display: flex; flex-direction: column; line-height: 1.25; }
/* I minuti in più del turno (0.92.0): il cartellino sotto l'orario, e la
   tendina subito sotto la spunta, rientrata come il testo della fascia. */
.prenota-fascia .badge { align-self: flex-start; margin-top: 3px; text-transform: none; letter-spacing: 0; }
.fascia-extra { display: flex; flex-wrap: wrap; gap: .3rem; align-items: center; margin: 2px 0 6px 28px; }
.fascia-extra > * { margin: 0; }
.fascia-extra select { width: auto; max-width: 100%; min-width: 0; padding: 3px 6px; font-size: 12.5px; }
.prenota-salva { display: flex; flex-wrap: wrap; gap: .6rem; align-items: center; margin-top: 14px; }
.prenota-salva .muted { flex: 1 1 100%; margin: 0; }
/* Dentro la finestra c'è meno larghezza: giorno, dalle e alle stanno in fila
   solo con colonne più strette di quelle della pagina. */
#modal-fascia .form-cols { grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 0 16px; }
.fascia-gruppo { display: grid; grid-template-columns: 1fr 6.5rem 6.5rem; gap: .6rem; align-items: end;
                 padding: 10px 10px; border: 1px solid transparent; border-bottom-color: var(--linea);
                 border-radius: 10px; }
.fascia-gruppo label { margin-top: 0; }
.fascia-gruppo input[type=number] { max-width: none; }
/* Il gruppo scelto si vede a colpo d'occhio: la riga si accende tutta, non
   solo il quadratino. Dove `:has` non c'è resta il quadratino, che basta. */
.fascia-gruppo:has(input[type=checkbox]:checked) { background: var(--cobalto-velo); border-color: var(--cobalto); }
@media (max-width: 559px) { .fascia-gruppo { grid-template-columns: 1fr 1fr; }
    .fascia-gruppo > .scelta { grid-column: 1 / -1; } }

/* Un titoletto dentro un modulo lungo: «Quali luci accende», «Telegram»,
   «Spegnimento di sicurezza». Divide, quindi vuole aria sopra — senza, si
   incolla al campo di prima e sembra la sua didascalia. La classe c'era da
   subito nelle sei stanze e nessuno l'aveva mai definita. */
.h-sezione { margin: 22px 0 6px; padding-top: 14px; border-top: 1px solid var(--linea);
             font-size: 15px; }
.modal-body .h-sezione:first-of-type, .card .h-sezione:first-of-type { border-top: 0; padding-top: 0; }

/* La scelta del gruppo è una CASELLA, e deve sembrarlo. Prima era una pastiglia
   accanto a due campi numerici: si leggeva come l'etichetta della riga, non
   come una cosa da spuntare — si compilava tutto il resto, si premeva «Salva»,
   e il salvataggio rifiutava «scegli almeno un gruppo». È il primo inciampo di
   chi ha aggiunto un turno per la prima volta. */
.scelta { display: inline-flex; align-items: center; gap: 10px; margin: 0; cursor: pointer;
          font-size: inherit; font-weight: inherit; letter-spacing: normal;
          text-transform: none; color: inherit; }
.scelta input { position: absolute; opacity: 0; width: 0; height: 0; }
.scelta-segno { flex: none; width: 22px; height: 22px; border-radius: 6px; background: var(--bianco);
                border: 2px solid var(--linea); position: relative; }
.scelta-nome { font-weight: 600; }
.scelta input:checked + .scelta-segno { background: var(--cobalto); border-color: var(--cobalto); }
.scelta input:checked + .scelta-segno::after { content: ''; position: absolute; left: 6px; top: 2px;
    width: 5px; height: 10px; border: solid var(--bianco); border-width: 0 2.5px 2.5px 0; transform: rotate(45deg); }
.scelta input:focus-visible + .scelta-segno { outline: 3px solid var(--ambra); outline-offset: 2px; }

/* ===================================================================
   AREA OPERATORI (/turno) — chi la usa è in piedi, spesso all'aperto,
   con una mano sola. Ogni misura qui nasce da lì: i bersagli non
   scendono mai sotto i 56px, il testo che conta è grande, e non c'è
   niente da centrare con precisione.

   I colori sono quelli del sistema (--cobalto, --carta, --linea,
   --talpa): la prima stesura ne aveva inventati quattro che non
   esistono, e «Appello» usciva bianco su bianco. Se ne è accorta una
   schermata, non una prova — adesso c'è anche la prova.
   =================================================================== */
.app-top--turno { display: flex; align-items: center; justify-content: space-between;
    gap: 12px; padding: 10px 16px; background: var(--bianco); border-bottom: 1px solid var(--linea); }
.page--turno { max-width: 680px; margin: 0 auto; padding: 16px 16px 40px; }

.turno-testa { margin: 4px 0 18px; }
.turno-data { margin: 0; font-size: 13px; letter-spacing: .08em; text-transform: uppercase; color: var(--talpa); }
.turno-titolo { margin: 2px 0 0; font-family: var(--font-display); font-size: 26px; line-height: 1.15; }
.turno-progetto { margin: 0; font-size: 13px; color: var(--talpa); }
.turno-indietro { display: inline-flex; align-items: center; gap: 4px; margin-bottom: 10px;
    font-size: 15px; text-decoration: none; }
.turno-indietro svg { transform: scaleX(-1); }

.turno-card { background: var(--bianco); border: 1px solid var(--linea); border-radius: 16px;
    padding: 16px; margin-bottom: 14px; box-shadow: var(--ombra); }
.turno-nome { margin: 2px 0 6px; font-family: var(--font-display); font-size: 20px; }
.turno-nota { margin: 0 0 6px; font-size: 14px; color: var(--talpa); }
.turno-conto { margin: 0 0 14px; font-size: 15px; font-weight: 600; }

/* I pulsanti: due per riga, e a una riga sola quando lo schermo è stretto.
   Non si stringono mai sotto i 56px di altezza — è la misura sotto la quale
   un pollice sbaglia bersaglio. */
.turno-azioni, .turno-griglia { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.turno-griglia { margin-top: 18px; }
@media (max-width: 380px) { .turno-azioni, .turno-griglia { grid-template-columns: 1fr; } }

.turno-bottone { position: relative; display: flex; flex-direction: column; align-items: center;
    justify-content: center; gap: 6px; min-height: 56px; padding: 14px 10px;
    border: 1px solid var(--linea); border-radius: 14px; background: var(--bianco);
    font-size: 15px; font-weight: 600; text-align: center; text-decoration: none;
    color: var(--caffe); box-shadow: var(--ombra); }
.turno-bottone svg { width: 24px; height: 24px; }
.turno-bottone--primo { background: var(--cobalto); border-color: var(--cobalto); color: var(--bianco); }
.turno-bottone--grande { min-height: 92px; font-size: 16px; }
.turno-bottone--grande svg { width: 30px; height: 30px; }
/* Il pulsante «in attesa» e il suo cartellino servivano al foglio ore quando
   non c'era ancora (0.57.0). Dalla 0.60.0 c'e', e due regole di stile che non
   veste piu' nessuno sono le prime che al prossimo giro qualcuno riusa per
   sbaglio: via, come il codice morto. */

/* IL FOGLIO ORE (0.60.0). La stessa pagina vestita in due gusci: nel
   gestionale sta dentro le schede, sotto /turno sta a tutta larghezza con i
   campi grandi abbastanza da premersi con il pollice. Ogni giorno è un
   <details>: chiuso mostra la riga da leggere, aperto il modulo da compilare.
   Nessun JavaScript — la pagina si apre in mezzo al campo, con una barra di
   rete. */
/* Sul telefono il nome del mese va in mezzo e i due pulsanti sotto, a fianco:
   con la disposizione da computer il mese finiva a destra e «Mese dopo» a capo
   da solo, e la barra si leggeva in tre righe storte. */
@media (max-width: 560px) {
    .settimana-barra { flex-wrap: wrap; justify-content: center; }
    .settimana-barra > div { order: -1; flex: 1 0 100%; text-align: center; }
}
.ore-totali { display: flex; flex-wrap: wrap; gap: .4rem 1.2rem; align-items: baseline;
    margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--linea); }
.ore-totale { font-family: var(--font-display); font-size: 17px; }
.ore-quota { font-size: 13px; color: var(--talpa); }
.ore-giorno { background: var(--bianco); border: 1px solid var(--linea); border-radius: 12px;
    margin-bottom: 8px; box-shadow: var(--ombra); }
.ore-giorno > summary { display: flex; align-items: center; justify-content: space-between;
    gap: .8rem; padding: 12px 14px; cursor: pointer; list-style: none; }
.ore-giorno > summary::-webkit-details-marker { display: none; }
.ore-giorno.e-pieno { border-left: 4px solid var(--cobalto); }
.ore-giorno.e-festivo > summary .ore-giorno-nome { color: var(--talpa); }
.ore-giorno-nome { font-weight: 600; }
.ore-giorno-conto { display: flex; align-items: center; gap: .5rem; font-variant-numeric: tabular-nums; }
.ore-giorno-conto .muted { font-size: 13px; }
.ore-modulo { padding: 0 14px 14px; }
.ore-campi { display: flex; flex-wrap: wrap; gap: .6rem; margin-bottom: 10px; }
.ore-campi label { flex: 1 1 130px; display: flex; flex-direction: column; gap: 3px;
    font-size: 12px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase;
    color: var(--talpa); }
.ore-campi input, .ore-campi select { font-size: 16px; text-transform: none; letter-spacing: 0;
    font-weight: 400; }
.table tr.e-vuota td { color: var(--talpa); }

/* La scheda di una persona: il nome grande, il tasto per chiamare a destra,
   e sotto i fatti — uno per riga, perché si leggono di corsa. */
.pers-card { background: var(--bianco); border: 1px solid var(--linea); border-radius: 16px;
    padding: 14px 16px; margin-bottom: 12px; box-shadow: var(--ombra); }
.pers-card--staff { border-left: 4px solid var(--cobalto); }
.pers-testa { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.pers-nome { margin: 0; font-family: var(--font-display); font-size: 18px; }
.pers-chiama { display: inline-flex; align-items: center; gap: 6px; min-height: 44px; padding: 0 14px;
    border-radius: 999px; background: var(--salvia); color: var(--bianco); font-size: 15px;
    font-weight: 600; text-decoration: none; white-space: nowrap; }
.pers-chiama svg { width: 18px; height: 18px; }
.pers-fatti { list-style: none; margin: 10px 0 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.pers-fatto { display: flex; align-items: center; gap: 6px; font-size: 15px; }
.pers-fatto svg { width: 16px; height: 16px; flex: none; }
.pers-fatto--nota { color: var(--talpa); }
.pers-fatto--stop { color: var(--corallo); font-weight: 600; }
.pers-fatto--salute { font-weight: 600; color: var(--ametista); }
.pers-fonte { margin: 8px 0 0; font-size: 13px; color: var(--talpa); }

/* Il nome dell'area accanto al marchio: serve dentro l'app degli operatori,
   dove l'icona sulla schermata di casa è la stessa dell'area famiglie e la
   scritta è l'unica cosa che le distingue. */
.brand-area { margin-left: 8px; padding-left: 8px; border-left: 1px solid var(--linea);
    font-family: var(--font-testo); font-size: 14px; font-weight: 600; color: var(--talpa); }

/* ---- Tutto il campo: il gesto dell'apertura e della chiusura --------------
   Sta sopra i gruppi ed è largo quanto tutti e tre messi in fila, perché si
   fa venti volte per ogni volta che si tocca un gruppo solo. */
.campo-tutto { border-left: 6px solid var(--ambra); }
.campo-tutto-testa { display: flex; align-items: flex-start; gap: 12px; margin-bottom: 14px; }
.campo-tutto-testa svg { width: 30px; height: 30px; flex: none; color: var(--ambra); }
.campo-tutto-testa h2 { margin: 0; font-size: 20px; }
.campo-tutto-testa p { margin: 2px 0 0; font-size: 14px; }
.campo-tutto-azioni { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
@media (max-width: 420px) { .campo-tutto-azioni { grid-template-columns: 1fr; } }

.btn-campo { display: flex; align-items: center; justify-content: center; gap: .6rem;
    min-height: 68px; padding: 16px 18px; border: 0; border-radius: 16px; cursor: pointer;
    font-family: var(--font-display); font-size: 19px; font-weight: 700; letter-spacing: .2px;
    box-shadow: 0 2px 6px rgba(58, 46, 40, .12); transition: transform .12s ease, filter .18s ease; }
.btn-campo svg { width: 26px; height: 26px; }
.btn-campo:active { transform: translateY(2px); box-shadow: 0 1px 2px rgba(58, 46, 40, .12); }
.btn-campo:focus-visible { outline: 3px solid var(--cobalto); outline-offset: 3px; }
.btn-campo--accendi { background: linear-gradient(180deg, #F2B705, #E09A00); color: #3A2200; }
.btn-campo--spegni { background: var(--caffe); color: var(--bianco); }
.btn-campo:hover { filter: brightness(1.04); }

/* I gruppi singoli: in fila, larghi insieme quanto «accendi tutto». Quante
   colonne lo dice la pagina (--colonne-luci), perche' due gruppi non devono
   lasciare una colonna vuota e cinque non devono stare schiacciati in tre. */
.luci-griglia { grid-template-columns: repeat(var(--colonne-luci), minmax(0, 1fr)); gap: 10px;
    align-items: stretch; }
/* Tessere alte uguali, con i comandi allineati in fondo: tre pulsanti che
   partono da altezze diverse si premono peggio, e il pollice va a memoria. */
.luci-griglia .luce { display: flex; flex-direction: column; }
.luci-griglia .luce { padding: 12px; }
.luci-griglia .luce-testa { flex-direction: column; align-items: flex-start; gap: 8px; }
.luci-griglia .luce-testa h2 { font-size: 15px; line-height: 1.2; }
.luci-griglia .luce-posto { display: none; }
/* Lo stato in tondo e piu' piccolo: in una tessera stretta il maiuscoletto
   spaziato di «stato non ancora letto» prendeva tre righe. */
.luci-griglia .luce-stato { margin-top: 10px; font-size: 15px; line-height: 1.2;
    text-transform: none; letter-spacing: 0; }
.luci-griglia .luce-quando { margin: 4px 0 10px; font-size: 12px; line-height: 1.3; }
/* `flex: 1 1 140px` ereditato dalla griglia larga: in colonna quei 140px
   diventano un'ALTEZZA, e fra i due pulsanti si apriva un buco. */
/* `align-items: center` ereditato dalla griglia larga: in colonna stringeva
   i pulsanti alla larghezza del testo invece di riempire la tessera. */
.luci-griglia .luce-comandi { display: flex; flex-direction: column; align-items: stretch;
    gap: 6px; margin-top: auto; padding-top: 8px; }
.luci-griglia .luce-comandi .inline-form { display: block; flex: 0 0 auto; }
.btn-luce--sm { width: 100%; min-height: 46px; padding: 8px 6px; font-size: 14px; gap: .3rem; }
.btn-luce--sm svg { width: 16px; height: 16px; }

/* ---- Area operatori: un po' di colore, con criterio ----------------------
   «Molto spoglia», ed era vero: tutto bianco su crema, e l'unica cosa
   colorata era il pulsante dell'appello. Il colore qui non decora — dice il
   mestiere: blu quello che si scrive (appello), verde le persone, ambra le
   luci, grigio quello che non c'è ancora. */
.turno-ico { display: inline-flex; align-items: center; justify-content: center;
    width: 42px; height: 42px; border-radius: 13px;
    background: var(--cobalto-velo); color: var(--cobalto); }
.turno-ico svg { width: 22px; height: 22px; }
.turno-ico--salvia { background: rgba(61, 139, 125, .12); color: var(--salvia); }
.turno-ico--ambra  { background: rgba(232, 161, 61, .16); color: #B4761C; }
.turno-ico--talpa  { background: var(--carta); color: var(--talpa); }
.turno-bottone--primo .turno-ico { background: rgba(255, 255, 255, .18); color: var(--bianco); }
.turno-bottone--grande .turno-ico { width: 50px; height: 50px; border-radius: 16px; }
.turno-bottone--grande .turno-ico svg { width: 26px; height: 26px; }

/* La barra delle presenze: da un metro si legge il pieno, non il numero. */
.turno-barra { height: 10px; border-radius: 999px; background: var(--carta);
    border: 1px solid var(--linea); overflow: hidden; margin: 2px 0 8px; }
.turno-barra span { display: block; height: 100%; border-radius: 999px;
    background: linear-gradient(90deg, var(--salvia), #4FA694); transition: width .4s ease; }
.turno-conto { margin: 0 0 14px; font-size: 14px; color: var(--talpa); font-weight: 600; }

/* La card del turno: una striscia di colore a sinistra, come le luci. */
.turno-card { border-left: 5px solid var(--cobalto); }

/* L'iniziale del partecipante. Cinque tinte del sistema, scelte dal nome:
   servono a distinguere le righe, non a classificare le persone. */
.pers-tondo { display: inline-flex; align-items: center; justify-content: center; flex: none;
    width: 40px; height: 40px; border-radius: 50%; margin-right: 10px;
    font-family: var(--font-display); font-size: 17px; font-weight: 700; color: var(--bianco); }
.pers-tondo--1 { background: var(--cobalto); }
.pers-tondo--2 { background: var(--salvia); }
.pers-tondo--3 { background: var(--ametista); }
.pers-tondo--4 { background: #B4761C; }
.pers-tondo--5 { background: var(--talpa); }
.pers-testa { align-items: center; }
.pers-nome { flex: 1 1 auto; min-width: 0; }

/* ===========================================================================
   TABELLA CHE DIVENTA SCHEDE SUL TELEFONO (0.62.0)

   Le tabelle di Domus scorrono di lato, e va bene finché le colonne di destra
   sono un di piu'. Nel protocollo delle ricevute non lo sono: lo stato, il
   numero che la riga prenderà e il collegamento «dati completi, emetti» sono
   le ULTIME colonne, cioè proprio quelle che sul telefono restano fuori dallo
   schermo — e chi guarda vede quattro righe di date e nomi senza capire che
   cosa deve fare. Qui ogni riga diventa una scheda con l'etichetta accanto al
   dato (`data-etichetta` sulle celle, scritta nella vista).
   =========================================================================== */
@media (max-width: 767px) {
    /* thead: sparita ANCHE dalla geometria — display:block, non i trucchi da
       tabella: con position:absolute le celle continuavano ad allargare la
       pagina oltre i 320px, invisibili ma ingombranti. */
    .tabella-schede thead { display: block; position: absolute; width: 1px; height: 1px;
        overflow: hidden; clip: rect(0 0 0 0); }
    .tabella-schede, .tabella-schede tbody, .tabella-schede tr, .tabella-schede td { display: block; width: auto; }
    .tabella-schede .cell-person { flex-wrap: wrap; justify-content: flex-end; }
    .tabella-schede tr { background: var(--bianco); border: 1px solid var(--linea);
        border-radius: 12px; padding: 10px 12px; margin-bottom: 10px; }
    .tabella-schede td { display: flex; justify-content: space-between; align-items: baseline;
        gap: 1rem; border: 0; padding: 4px 0; text-align: right; }
    .tabella-schede td::before { content: attr(data-etichetta); flex: none; text-align: left;
        font-size: 12px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase;
        color: var(--talpa); }
    /* La cella senza etichetta è il TITOLO della scheda: a sinistra, senza
       il cartellino ridondante davanti («NOMINATIVO: Rossi» non serve a
       nessuno — il nome si presenta da solo). */
    .tabella-schede td:not([data-etichetta])::before { content: none; }
    .tabella-schede td:not([data-etichetta]) { justify-content: flex-start; text-align: left;
        padding-bottom: 8px; border-bottom: 1px solid var(--linea) !important; margin-bottom: 4px; }
    .tabella-schede td.num { text-align: right; }
    .tabella-schede td .linklike { display: inline !important; }
}

/* Un pulsante spento deve SEMBRARE spento: finora `disabled` non cambiava
   niente a vedersi, e chi premeva non capiva perché non succedesse nulla.
   Vale per tutta l'applicazione, non solo per il protocollo. */
.btn:disabled, .btn[disabled] { opacity: .5; cursor: not-allowed; box-shadow: none; }

/* Anteprima del logo e della firma nelle impostazioni (0.63.0): la scacchiera
   sotto serve a vedere se l'immagine ha lo sfondo trasparente o bianco — su
   una carta intestata la differenza si nota. */
.carta-prova { margin: 6px 0; padding: 8px; border: 1px solid var(--linea); border-radius: 8px;
    background: repeating-conic-gradient(#F4F1EC 0% 25%, #FFF 0% 50%) 50% / 14px 14px; }
.carta-prova img { max-height: 70px; max-width: 100%; display: block; object-fit: contain; }

/* Le iscrizioni da saldare, una casella per turno (0.64.0). Caselle e non
   tendina: chi paga quattro settimane insieme le spunta tutte e riceve una
   ricevuta sola. Bersagli larghi, perché si fa anche dal telefono. */
.scelte-iscrizioni { display: flex; flex-direction: column; gap: 2px; }
.scelta-iscrizione { display: flex; align-items: baseline; gap: .6rem; padding: 7px 10px;
    border: 1px solid var(--linea); border-radius: 8px; background: var(--bianco); cursor: pointer; }
.scelta-iscrizione:hover { border-color: var(--cobalto); }
.scelta-iscrizione input { margin: 0; flex: none; }
/* Nella revisione dell'import le stesse caselle stanno dentro la griglia
   della voce: da sole in una colonna da 260px ogni etichetta — progetto,
   turno e residuo — andrebbe a capo tre volte. Prendono tutta la riga, e si
   dispongono su più colonne quando lo schermo lo consente. */
.split-iscrizione { grid-column: 1 / -1; }
.split-iscrizione .scelte-iscrizioni {
    display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 4px 12px; }

/* ===========================================================================
   DESIGN SYSTEM v2 — IL PATTERN-ELENCO (0.74.0)

   Un solo modo di presentare un elenco, per tutta l'applicazione:
   la barra (ricerca + scelte rapide + filtri + contatore + esporta),
   le chip dei filtri attivi, le intestazioni che ordinano, le pagine,
   lo stato vuoto CON un'azione, la tabella che sotto i 768px diventa
   schede (mai scorrimento orizzontale). Nasce sulla pagina pilota
   (Anagrafiche) e si estende pagina per pagina.
   =========================================================================== */

/* I numeri e le date stanno a destra PER CLASSE, non con lo stile inline
   scritto 181 volte nelle viste: la colonna si allinea da sola e le cifre
   hanno tutte la stessa larghezza. */
.table td.num, .table th.num { text-align: right; font-variant-numeric: tabular-nums; }
.table th.num .th-ordina { justify-content: flex-end; }

/* --- La barra dell'elenco --- */
.barra-elenco { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2); }
/* La regola storica `form .btn { margin-top: 20px }` serve ai moduli veri
   (il bottone Salva staccato dai campi); dentro la barra spingeva Filtri
   ed Esporta 10px sotto la riga. Qui l'allineamento lo fa il flex. */
.barra-elenco .btn { margin-top: 0; }
.barra-elenco .cerca { flex: 1 1 220px; max-width: 340px; }
.barra-elenco .cerca input { max-width: none; min-height: var(--alt-controllo); padding: 0 var(--sp-3); }
.barra-spinta { margin-left: auto; display: flex; align-items: center; gap: var(--sp-2); }

/* Scelte rapide (Attivi / Archiviati / Tutti): pillole, una sola accesa.
   Il contenitore è alto quanto gli altri controlli della barra: sulla
   stessa riga niente è più basso di niente. */
.scelte-rapide { display: inline-flex; align-items: center; gap: var(--sp-1);
    min-height: var(--alt-controllo); background: var(--carta);
    border: 1px solid var(--linea); border-radius: var(--raggio-pillola); padding: 3px; }
.scelte-rapide a { display: inline-flex; align-items: center; min-height: calc(var(--alt-controllo-sm) - 8px);
    padding: 0 var(--sp-3); border-radius: var(--raggio-pillola); text-decoration: none;
    font-size: var(--testo-sm); font-weight: var(--peso-forte); color: var(--talpa); white-space: nowrap; }
.scelte-rapide a:hover { color: var(--caffe); }
.scelte-rapide a[aria-current="true"] { background: var(--bianco); color: var(--cobalto);
    box-shadow: var(--ombra); }

/* Il contatore: in alto, dove si guarda, ma su una riga sua — non in mezzo
   alle azioni della barra. Sta a destra, appena sopra la tabella. */
.conta-elenco { font-size: var(--testo-sm); color: var(--talpa); white-space: nowrap; }
.conta-elenco strong { color: var(--caffe); }
.sotto-barra { display: flex; justify-content: flex-end; margin-top: var(--sp-2); }

/* Chip dei filtri attivi, ognuna col suo × per toglierla */
.chips-filtri { display: flex; flex-wrap: wrap; gap: var(--sp-2); margin-top: var(--sp-3); }
.chip-attiva { display: inline-flex; align-items: center; gap: 6px; padding: 3px 6px 3px 12px;
    background: var(--cobalto-velo); color: var(--cobalto); border-radius: var(--raggio-pillola);
    font-size: var(--testo-sm); font-weight: var(--peso-forte); }
.chip-attiva a { display: inline-flex; align-items: center; justify-content: center;
    width: 20px; height: 20px; border-radius: 50%; color: inherit; text-decoration: none;
    font-size: 15px; line-height: 1; }
.chip-attiva a:hover { background: var(--cobalto); color: var(--bianco); }
.chips-filtri .azzera { font-size: var(--testo-sm); align-self: center; color: var(--talpa); }

/* --- Intestazioni che ordinano --- */
.th-ordina { display: inline-flex; align-items: center; gap: 3px; color: inherit;
    text-decoration: none; }
.th-ordina:hover { color: var(--cobalto); }
.th-ordina .verso { font-size: 10px; line-height: 1; }
th[aria-sort] .th-ordina { color: var(--cobalto); }

/* --- Paginazione --- */
.paginazione { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2);
    margin-top: var(--sp-4); padding-top: var(--sp-3); border-top: 1px solid var(--linea); }
.paginazione .pagine { margin-left: auto; display: flex; align-items: center; gap: var(--sp-1); }
.paginazione select { width: auto; min-height: var(--alt-controllo-sm); padding: 0 var(--sp-2); }
.pag-num { font-size: var(--testo-sm); color: var(--talpa); padding: 0 var(--sp-2); }

/* --- Stato vuoto con la porta d'uscita --- */
.vuoto { text-align: center; padding: var(--sp-7) var(--sp-4); color: var(--talpa); }
.vuoto h3 { font-size: var(--testo-lg); color: var(--caffe); margin: 0 0 var(--sp-1); }
.vuoto p { margin: 0 0 var(--sp-4); }
.vuoto svg { width: 40px; height: 40px; opacity: .4; margin-bottom: var(--sp-2); }

/* --- Menu «Esporta» e simili: <details>, niente JS obbligatorio --- */
.menu-azioni { position: relative; display: inline-block; }
.menu-azioni > summary { list-style: none; cursor: pointer; }
.menu-azioni > summary::-webkit-details-marker { display: none; }
.menu-azioni[open] > summary::after { content: ""; position: fixed; inset: 0; z-index: 40; }
.menu-azioni .voci { position: absolute; right: 0; top: calc(100% + 4px); z-index: 41;
    min-width: 200px; background: var(--bianco); border: 1px solid var(--linea);
    border-radius: var(--raggio); box-shadow: var(--ombra-alta); padding: var(--sp-1); }
.menu-azioni .voci a, .menu-azioni .voci button { display: flex; align-items: center; gap: var(--sp-2);
    width: 100%; padding: var(--sp-2) var(--sp-3); border: 0; background: none; text-align: left;
    font: inherit; font-size: var(--testo-sm); font-weight: var(--peso-forte); color: var(--caffe);
    border-radius: var(--raggio-sm); text-decoration: none; cursor: pointer; }
.menu-azioni .voci a:hover, .menu-azioni .voci button:hover { background: var(--cobalto-velo); color: var(--cobalto); }
.menu-azioni .voci svg { width: 16px; height: 16px; }

/* --- Bottone in attesa: il clic è partito, il server sta lavorando --- */
.btn[data-attesa] { position: relative; color: transparent !important; pointer-events: none; }
.btn[data-attesa]::after { content: ""; position: absolute; width: 16px; height: 16px;
    border: 2px solid rgba(255,255,255,.4); border-top-color: var(--bianco);
    border-radius: 50%; animation: giro-attesa .7s linear infinite; }
.btn-secondary[data-attesa]::after, .btn-ghost[data-attesa]::after, .btn-danger[data-attesa]::after {
    border-color: rgba(58,46,40,.2); border-top-color: var(--talpa); }
@keyframes giro-attesa { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .btn[data-attesa]::after { animation: none; } }

/* La barra si impila con garbo sul telefono; le pillole si dividono la
   riga invece di sfondarla. */
@media (max-width: 767px) {
    .barra-elenco .cerca { max-width: none; flex-basis: 100%; }
    .barra-spinta { margin-left: 0; width: 100%; justify-content: space-between; }
    .scelte-rapide { flex: 1 1 auto; flex-wrap: wrap; border-radius: var(--raggio-lg); }
    .scelte-rapide a { flex: 1; justify-content: center; padding: 0 var(--sp-2); white-space: normal; }
}

/* 0.76.0 — registro delle ricevute e registro attività (pattern-elenco) */
/* La riga di servizio sotto un badge o un'azione: «sostituisce la 3/2026»
   nel registro ricevute, il codice azione sotto la sua etichetta nel
   registro attività. Prima era uno stile inline ripetuto. */
.riga-sotto { display: block; font-size: 12px; }
/* Una cella con testo su due piani (etichetta + codice): un contenitore
   solo, così nella vista a schede resta un blocco allineato a destra. */
.cella-composta { display: inline-block; }
@media (max-width: 767px) {
    .tabella-schede .cella-composta { text-align: right; }
}
/* La tendina dell'anno vive nella barra, alta come gli altri controlli. */
.barra-elenco > select { width: auto; min-height: var(--alt-controllo); margin: 0; }
/* Le voci del menu Esporta possono essere moduli (l'export del registro
   attività è un POST: deve lasciare traccia, e una GET si fa cliccare). */
.menu-azioni .voci form { margin: 0; }

/* 0.76.0 — Nuclei e Famiglie: le poche regole proprie delle due pagine,
   al posto degli stili inline che le viste si portavano dietro. */
.form-riga-avviso { display: block; margin-top: 10px; }
.qr-spot-chip { margin: 6px 0 10px; }
.qr-spot-eti { margin: 0 0 8px; }
.qr-spot-invito { margin: 0 0 12px; }
.qr-spot-url { margin-top: 12px; word-break: break-all; }
.nota-registrazione { margin-top: 12px; }
.secret-box-sm { font-size: 13px; }
.senza-sopra { margin-top: 0; }
.campo-giorni, .campo-conferma { max-width: 160px; }
.dettagli-opzioni { margin-top: 12px; }
.dettagli-opzioni > summary { cursor: pointer; }
.scollega-blocco { display: inline-block; margin-left: 10px; }
.scollega-apri { cursor: pointer; color: var(--corallo); }
.scollega-form { margin-top: 8px; text-align: left; }
.scollega-spiega { max-width: 420px; }
/* Nella vista a schede i moduli della cella azioni non si schiacciano a destra */
@media (max-width: 767px) {
    .tabella-schede td .scollega-form { text-align: right; }
    /* La cella su più righe (badge, nomi, note) è UN flex-item: senza il
       contenitore i pezzi si affiancavano e sfondavano la scheda. */
    .tabella-schede td .cella-multiriga { display: block; min-width: 0; }
}

/* 0.76.0 — Elenco progetti: l'hub a card veste il pattern-elenco. La testa
   della card perde gli stili inline; l'ordinamento è una tendina in barra
   (le card non hanno intestazioni che ordinano); le azioni dei turni si
   allineano a destra anche fuori dalla vista a schede. */
.prog-testa { display: flex; align-items: flex-start; justify-content: space-between;
              gap: var(--sp-3); flex-wrap: wrap; margin: 0 0 var(--sp-2); }
.prog-testa h2 { margin: 0; }
.prog-testa h2 a { text-decoration: none; color: inherit; }
.prog-testa .page-actions { padding-top: 0; }
.prog-desc { margin: 2px 0 0; }
.barra-elenco .ordina-elenco { width: auto; margin: 0; min-height: var(--alt-controllo); }
.table .td-azioni { text-align: right; }
/* Il piede delle pagine sta in una card sua (le card dei progetti sono
   tante): senza contenuto sopra, il filetto di separazione non serve. */
.paginazione-sola .paginazione { margin-top: 0; padding-top: 0; border-top: 0; }

/* 0.78.0 — La barra dell'operatore e le sue pagine */
/* Il fondo della pagina lascia respiro alla barra fissa (più l'incavo dei
   telefoni senza cornice). */
.page--turno { padding-bottom: calc(84px + env(safe-area-inset-bottom, 0px)); }
/* La scelta del turno per l'appello: bottoni-riga, uno sotto l'altro */
.turno-bottone--riga { width: 100%; justify-content: flex-start; text-align: left;
                       margin-bottom: var(--sp-3); }
.turno-scelta { display: flex; flex-direction: column; gap: 2px; }
.turno-scelta-nome { font-weight: var(--peso-forte); }
.turno-scelta-progetto { font-size: var(--testo-sm); color: var(--talpa); }
/* Il profilo: nome grande, associazione sotto, uscite come pulsantoni */
.profilo-operatore { text-align: center; padding: var(--sp-5); }
.profilo-op-nome { font-size: var(--testo-lg); font-weight: var(--peso-forte); margin: 0; }
.profilo-op-tenant { color: var(--talpa); margin: 4px 0 0; }
.profilo-op-esci { margin-top: var(--sp-3); }
.profilo-op-esci .turno-bottone { width: 100%; }
.turno-ico--corallo { color: var(--corallo); }

/* 0.79.0 — Turni: impostazioni */
/* La rinomina del servizio vive nella riga: campo e bottone fianco a fianco,
   e sul telefono il campo si prende lo spazio che c'è. */
.turni-riga-form { display: flex; align-items: center; gap: var(--sp-2); }
.turni-riga-form input { margin: 0; flex: 1 1 160px; min-width: 0; }
.turni-riga-form .btn { flex: none; }
/* L'aggiunta in fondo alla card: etichetta sopra, campo e bottone allineati
   al piede, in colonna quando lo schermo si stringe. */
.turni-aggiunta { display: flex; align-items: flex-end; gap: var(--sp-3);
    flex-wrap: wrap; margin-top: var(--sp-4); padding-top: var(--sp-4);
    border-top: 1px solid var(--linea); }
.turni-aggiunta > div { flex: 1 1 220px; min-width: 0; }
.turni-aggiunta input { margin-bottom: 0; }
.turni-aggiunta .btn { flex: none; }
.turni-piede { margin-top: var(--sp-4); }
/* Le caselle dei giorni e delle festività: un fieldset senza cornice, le
   scelte una accanto all'altra finché ci stanno. */
.turni-giorni, .turni-festivita { border: 0; padding: 0; margin: var(--sp-3) 0;
    display: flex; flex-wrap: wrap; gap: var(--sp-2) var(--sp-4); }
.turni-giorni legend, .turni-festivita legend { font-weight: 600; padding: 0;
    margin-bottom: var(--sp-2); width: 100%; }
.turni-festivita .scelta { flex: 1 1 240px; }
.turni-serale { margin: var(--sp-2) 0 0; }
/* Il colore del dipendente: il pozzetto nativo, piccolo e non interattivo —
   mostra il colore che sta nel dato senza scriverlo nello stile. */
.turni-swatch-cornice { display: inline-block; vertical-align: middle; margin-right: 6px; }
.turni-swatch { width: 18px; height: 18px; padding: 0; border: 1px solid var(--linea);
    border-radius: 5px; background: none; pointer-events: none; margin: 0; }
.turni-swatch::-webkit-color-swatch-wrapper { padding: 0; }
.turni-swatch::-webkit-color-swatch { border: 0; border-radius: 4px; }
.turni-swatch::-moz-color-swatch { border: 0; border-radius: 4px; }
/* La griglia dell'orario standard: due campi ora per cella, uno sull'altro.
   Sul telefono scorre dentro la card (.table-wrap): la settimana si guarda
   intera, non spezzata in schede. */
.turni-griglia-std th { white-space: nowrap; }
.turni-griglia-std td { min-width: 118px; }
.turni-cella-std { display: flex; flex-direction: column; gap: var(--sp-1); }
.turni-cella-std input { margin: 0; width: 100%; min-width: 96px; }
.turni-fest-elenco { margin: 0; padding-left: 20px; }
.turni-fest-elenco li { padding: 3px 0; }
/* Sotto i 768 le schede-tabella impilano le celle: la cella del titolo dei
   servizi contiene il modulo di rinomina, che deve poter riempire la riga. */
@media (max-width: 767px) {
    .tabella-schede td .turni-riga-form { flex: 1 1 auto; }
}

/* 0.79.0 — Turni: calendario ------------------------------------------------
   La griglia del mese, il tocco che assegna, il pannello del saldo.
   I colori dei dipendenti arrivano da classi .dip-c-<id> generate in pagina,
   che valorizzano --dip-colore: qui si usa soltanto. */
.turni-massa { display: flex; flex-wrap: wrap; gap: var(--sp-2); margin-top: var(--sp-3); }
.turni-dip-barra { padding-top: var(--sp-3); padding-bottom: var(--sp-3); }
.turni-dip-aiuto { margin: 0 0 var(--sp-2); }
.turni-dip-elenco { display: flex; flex-wrap: wrap; gap: var(--sp-2); }
.dip-scelta { display: inline-flex; align-items: center; gap: var(--sp-2); padding: 6px 12px;
    border: 1px solid var(--linea); border-radius: var(--raggio-pillola); background: var(--bianco);
    font: inherit; font-size: var(--testo-sm); cursor: pointer; }
.dip-scelta:hover { border-color: var(--cobalto); }
.dip-scelta.dip-attivo { border-color: var(--cobalto); background: var(--cobalto-velo);
    box-shadow: 0 0 0 1px var(--cobalto) inset; }
.dip-pallino { width: 10px; height: 10px; border-radius: 50%; flex: none; display: inline-block;
    background: var(--talpa); /* il colore vero lo dà la classe .dip-c-<id> generata in pagina */ }
.dip-conta { color: var(--talpa); font-size: var(--testo-xs); }
.dip-nome { font-weight: var(--peso-forte); }

.turni-griglia { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: var(--sp-2);
    margin-top: var(--sp-4); padding-bottom: 84px; /* il pannello del saldo non copre l'ultima riga */ }
.t-intesta { font-size: var(--testo-xs); text-transform: uppercase; letter-spacing: .04em;
    color: var(--talpa); padding: 0 2px; }
.t-giorno { background: var(--bianco); border: 1px solid var(--linea); border-radius: var(--raggio);
    padding: var(--sp-2); min-height: 84px; min-width: 0; }
.t-giorno.t-chiuso { background: var(--carta); }
.t-giorno.t-oggi { border-color: var(--cobalto); box-shadow: 0 0 0 1px var(--cobalto) inset; }
.t-giorno-testa { display: flex; align-items: baseline; justify-content: space-between; gap: var(--sp-1); }
.t-giorno-data { text-decoration: none; color: inherit; display: inline-flex; align-items: baseline; gap: 6px; }
.t-giorno-data:hover strong { color: var(--cobalto); text-decoration: underline; }
.t-giorno-wd { font-size: var(--testo-xs); color: var(--talpa); }
.t-assenza { display: block; font-size: var(--testo-xs); color: var(--ambra); margin-top: 2px;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.t-motivo { font-size: var(--testo-sm); color: var(--talpa); margin: var(--sp-1) 0 0; }

.t-fascia { border-left: 3px solid var(--linea); border-radius: var(--raggio-sm);
    background: var(--carta); padding: 4px 6px; margin-top: var(--sp-2); min-width: 0; }
.t-cop-coperta { border-left-color: var(--salvia); }
.t-cop-parziale { border-left-color: var(--ambra); }
.t-cop-scoperta { border-left-color: var(--corallo); }
.t-fascia-chiusa { border-left-style: dashed; background: transparent; border-top: 1px dashed var(--linea);
    border-right: 1px dashed var(--linea); border-bottom: 1px dashed var(--linea); }
.turni-pronto [data-aggiungi] { cursor: pointer; }
.turni-pronto [data-aggiungi]:hover { outline: 2px solid var(--cobalto); outline-offset: 1px; }
.t-fascia-testa { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 6px; }
.t-fascia-nome { font-size: var(--testo-xs); font-weight: var(--peso-forte); }
.t-fascia-orario { font-size: var(--testo-xs); color: var(--talpa); }
.t-fascia-nota { font-style: italic; }
.t-cop-badge { font-size: var(--testo-xs); margin-left: auto; }
.t-cop-coperta .t-cop-badge { color: var(--salvia-scura); }
.t-cop-parziale .t-cop-badge { color: var(--ambra); }
.t-cop-scoperta .t-cop-badge { color: var(--corallo); font-weight: var(--peso-forte); }

.t-turno { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 5px; width: 100%;
    margin-top: 4px; padding: 3px 6px; border: 1px solid var(--linea); border-radius: var(--raggio-sm);
    background: var(--bianco); font: inherit; font-size: var(--testo-xs); text-align: left; min-width: 0; }
button.t-turno { cursor: pointer; }
button.t-turno:hover { border-color: var(--cobalto); }
/* Il nome non sparisce mai: se lo spazio manca, è l'orario a scendere di riga */
.t-turno-nome { overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
    flex: 1 1 auto; min-width: 6em; }
.t-turno-orario { margin-left: auto; color: var(--talpa); flex: none; }
.t-segno { flex: none; display: inline-flex; color: var(--talpa); }
.t-lucchetto { width: 12px; height: 12px; }
.t-diverso { color: var(--ambra); font-weight: var(--peso-forte); }
.t-nascosto { display: none; }

/* Il pannello del saldo: fisso in basso a destra, compresso in una riga.
   Il calendario si tiene il suo spazio (padding-bottom della griglia), così
   il pannello aperto non copre stabilmente l'ultima settimana. */
.saldo-pannello { position: fixed; right: var(--sp-4); bottom: var(--sp-4); z-index: 40;
    width: min(360px, calc(100vw - 32px)); background: var(--bianco);
    border: 1px solid var(--linea); border-radius: var(--raggio-lg);
    box-shadow: 0 6px 24px rgba(58, 46, 40, .18); overflow: hidden; }
.saldo-testa { display: flex; align-items: center; gap: var(--sp-2); width: 100%;
    padding: 10px 14px; border: 0; background: none; font: inherit; font-size: var(--testo-sm);
    cursor: pointer; text-align: left; }
.saldo-sintesi { color: var(--talpa); margin-left: auto; }
.saldo-occhio { color: var(--corallo); font-weight: var(--peso-forte); }
.saldo-freccia { color: var(--talpa); transition: transform .15s; }
.saldo-aperto .saldo-freccia { transform: rotate(180deg); }
.saldo-corpo { max-height: 45vh; overflow: auto; border-top: 1px solid var(--linea); padding: var(--sp-2) var(--sp-3); }
.saldo-tabella { width: 100%; border-collapse: collapse; font-size: var(--testo-sm); }
.saldo-tabella th { font-size: var(--testo-xs); color: var(--talpa); text-align: left; padding: 4px 6px; }
.saldo-tabella td { padding: 4px 6px; border-top: 1px solid var(--linea); }
.saldo-tabella .num, .saldo-tabella th.num { text-align: right; }
.saldo-tabella .dip-conta { display: block; }
.saldo-piu { color: var(--salvia-scura); font-weight: var(--peso-forte); }
.saldo-meno { color: var(--corallo); font-weight: var(--peso-forte); }
.saldo-pari { color: var(--talpa); }

/* Il pannello del giorno e il modale del turno */
.turni-giorno-pannello { margin-top: var(--sp-4); }
.turni-giorno-testa { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-2); }
.turni-giorno-forma { display: grid; gap: var(--sp-3); margin-top: var(--sp-3); }
.turni-giorno-forma .check, .turni-giorno-fascia .check, .turni-blocco { display: flex;
    align-items: center; gap: var(--sp-2); font-size: var(--testo-md); }
.turni-blocco { margin-top: var(--sp-3); }
.turni-giorno-fasce { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: var(--sp-3); }
.turni-giorno-fascia { border: 1px solid var(--linea); border-radius: var(--raggio-sm);
    padding: var(--sp-2) var(--sp-3) var(--sp-3); min-width: 0; }
.turni-giorno-fascia legend { font-weight: var(--peso-forte); padding: 0 4px; }
.turni-giorno-orari { display: flex; flex-wrap: wrap; gap: var(--sp-2) var(--sp-4); margin-top: var(--sp-2); }
.turni-giorno-orari label { display: flex; align-items: center; gap: var(--sp-2); font-size: var(--testo-sm); }
.turni-giorno-orari input[type="time"] { width: auto; }
.turni-giorno-massa { margin-top: var(--sp-3); }
.turni-assenze { display: grid; gap: var(--sp-2); margin-top: var(--sp-2); }
.turni-assenza-riga { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2); }
.turni-assenza-riga .dip-nome { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.turni-assenza-riga select { width: auto; }
.turni-assenze-elenco { margin: var(--sp-2) 0 0; padding-left: var(--sp-5); }
.turni-scorciatoie { display: flex; flex-wrap: wrap; gap: var(--sp-2); margin-top: var(--sp-3); }
.turni-scorciatoie .btn[disabled] { opacity: .5; cursor: not-allowed; }
#modal-turno .form-actions, .turni-giorno-forma .form-actions { margin-top: var(--sp-4); }
.turni-elimina { margin-top: var(--sp-3); border-top: 1px solid var(--linea); padding-top: var(--sp-3); }

/* Il riepilogo */
.turni-riepilogo .t-sett { white-space: nowrap; }
.t-parz { font-size: var(--testo-xs); color: var(--talpa); font-weight: var(--peso-testo); }
.turni-scoperti { margin: var(--sp-2) 0 0; padding-left: var(--sp-5); display: grid; gap: 4px; }
.turni-scoperto { color: var(--corallo); }
.turni-saltati h2 { margin-top: 0; }

/* Sotto i 768px la griglia diventa un elenco verticale: i giorni uno sotto
   l'altro, le intestazioni dei giorni della settimana non servono più
   (ogni riquadro porta la sua sigla). */
@media (max-width: 767px) {
    .turni-griglia { display: block; padding-bottom: 96px; }
    .t-intesta, .t-vuoto { display: none; }
    .t-giorno { margin-top: var(--sp-2); min-height: 0; }
    .t-giorno-wd { font-size: var(--testo-sm); }
    .saldo-pannello { right: var(--sp-3); left: var(--sp-3); bottom: var(--sp-3); width: auto; }
    .saldo-corpo { max-height: 38vh; }
}

/* 0.80.0 — Turni: la regione viva e lo schermo intero ---------------------
   La regione si aggiorna da sola: mentre il server risponde si attenua un
   poco, così il clic doppio non sembra perso. A schermo intero la regione
   copre tutto (API del browser o, dove non c'è, modalità interna): le
   cornici del gestionale restano sotto, il calendario prende lo spazio. */
#turni-app[aria-busy="true"] { opacity: .72; transition: opacity .15s; }
.turni-viste { display: inline-flex; gap: var(--sp-1); }
#turni-app.turni-schermo-pieno {
    position: fixed; inset: 0; z-index: 900; overflow: auto;
    background: var(--carta); padding: var(--sp-4) var(--sp-5) calc(var(--sp-7) + 56px);
}
#turni-app:fullscreen { overflow: auto; background: var(--carta); padding: var(--sp-4) var(--sp-5) calc(var(--sp-7) + 56px); }
html.turni-schermo-attivo, html.turni-schermo-attivo body { overflow: hidden; }
@media (max-width: 767px) {
    #turni-app.turni-schermo-pieno, #turni-app:fullscreen { padding: var(--sp-3) var(--sp-3) calc(var(--sp-7) + 56px); }
}

/* 0.80.0 — Turni: la mano ---------------------------------------------------
   Il trascinamento del mese (turni-mano.js). touch-action: none SOLO sui
   trascinabili, e solo quando lo script c'è (classe mano-pronta sulla
   regione): altrove il dito fa scorrere la pagina come sempre. Durante il
   gesto i bersagli si vedono tutti (tratteggio) e quello sotto al puntatore
   di più; trascinando un turno l'elenco dei dipendenti resta in alto e
   diventa il cestino, col suo avviso. */
.mano-pronta .dip-scelta, .mano-pronta .t-turno[data-turno] {
    touch-action: none; -webkit-user-select: none; user-select: none; -webkit-touch-callout: none; }
.mano-in-corsa { -webkit-user-select: none; user-select: none; cursor: grabbing; }
.mano-in-corsa * { cursor: inherit; }
.mano-sorgente { opacity: .4; }
.mano-bersaglio { outline: 2px dashed var(--cobalto); outline-offset: 1px; }
.mano-bersaglio.mano-sopra { outline: 3px solid var(--cobalto); background: var(--cobalto-velo); }
.turni-dip-barra { position: relative; }
.mano-turno .turni-dip-barra { position: sticky; top: 0; z-index: 35; }
.turni-dip-barra.mano-bersaglio { outline-color: var(--corallo); outline-offset: 2px; }
.turni-dip-barra.mano-bersaglio.mano-sopra { outline: 3px solid var(--corallo); background: var(--bianco); }
.mano-cestino { display: none; }
/* Il testo sta in fondo: quando l'elenco è appiccicato in alto se ne vede
   solo la striscia di sotto (turni-mano.js gli dà un top negativo). */
.mano-turno .mano-cestino { display: flex; position: absolute; inset: 0; align-items: flex-end;
    justify-content: center; padding: var(--sp-2) var(--sp-4) 18px; text-align: center;
    border-radius: inherit; background: var(--bianco); color: var(--corallo);
    font-weight: var(--peso-forte); font-size: var(--testo-md); }
.mano-turno .mano-sopra .mano-cestino { background: var(--corallo); color: var(--bianco); }
.mano-fantasma { position: fixed; left: 0; top: 0; z-index: 1000; pointer-events: none;
    display: inline-flex; align-items: center; gap: var(--sp-2); max-width: min(280px, 80vw);
    padding: 6px 12px; border: 1px solid var(--cobalto); border-radius: var(--raggio-pillola);
    background: var(--bianco); box-shadow: var(--ombra-alta); font-size: var(--testo-sm);
    white-space: nowrap; will-change: transform; }
.mano-fantasma-nome { font-weight: var(--peso-forte); overflow: hidden; text-overflow: ellipsis; min-width: 0; }
.mano-fantasma-orario { color: var(--talpa); flex: none; }
.mano-fantasma.mano-fantasma-elimina { border-color: var(--corallo); color: var(--corallo);
    text-decoration: line-through; }

/* 0.80.0 — Turni: la carta ------------------------------------------------
   La stampa del calendario mensile (il bottone [data-stampa] fa
   window.print): A4 orizzontale, solo la griglia e il nome del mese. Le
   cornici del gestionale, la barra dei dipendenti, le operazioni di massa,
   il saldo fluttuante e i pulsanti restano a schermo. Tutto è legato alla
   presenza della griglia del MESE (.turni-griglia): le altre stampe del
   gestionale, e la settimana che ha le sue regole, non ne sono toccate.
   I colori dei dipendenti e della copertura passano sulla carta
   (print-color-adjust): sono informazione, non decorazione. */
/* Nel riepilogo, sotto il nome: il foglio ore (pagina) e il suo PDF. */
.turni-foglio-link { display: block; font-size: var(--testo-xs); color: var(--talpa); white-space: nowrap; }
@page turni-mese { size: A4 landscape; margin: 6mm; }
@media print {
    body:has(.turni-griglia) { background: #fff; }
    body:has(.turni-griglia) .sidebar,
    body:has(.turni-griglia) .mobilebar,
    body:has(.turni-griglia) .content > .alert,
    body:has(.turni-griglia) #turni-app > .alert,
    #turni-app:has(.turni-griglia) .page-head,
    #turni-app:has(.turni-griglia) .turni-massa,
    #turni-app:has(.turni-griglia) .turni-dip-barra,
    #turni-app:has(.turni-griglia) .turni-saltati,
    #turni-app:has(.turni-griglia) .turni-giorno-pannello,
    #turni-app:has(.turni-griglia) .saldo-pannello,
    #turni-app:has(.turni-griglia) .settimana-barra .btn,
    #turni-app:has(.turni-griglia) dialog,
    #turni-app:has(.turni-griglia) .t-cop-coperta .t-cop-badge,
    #turni-app:has(.turni-griglia) .t-diverso { display: none !important; }
    body:has(.turni-griglia) .shell { display: block; min-height: 0; }
    body:has(.turni-griglia) .content { max-width: none; padding: 0; margin: 0; }
    #turni-app:has(.turni-griglia) { page: turni-mese; position: static; inset: auto; overflow: visible;
        padding: 0; background: #fff; opacity: 1; }
    #turni-app:has(.turni-griglia) * { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
    #turni-app:has(.turni-griglia) .card { border: 0; box-shadow: none; padding: 0; margin: 0 0 2mm; background: none; }
    #turni-app:has(.turni-griglia) .settimana-barra { justify-content: flex-start; font-size: 14pt; }
    /* La griglia a sette colonne anche se il foglio è stretto: la regola
       dei telefoni (sotto i 768px diventa un elenco) sulla carta non vale. */
    #turni-app .turni-griglia { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr));
        gap: 1mm; margin: 0; padding: 0; font-size: 7.5pt; }
    #turni-app .turni-griglia .t-intesta { display: block; font-size: 7.5pt; }
    #turni-app .turni-griglia .t-vuoto { display: block; }
    #turni-app .t-giorno { min-height: 0; padding: 0.8mm 0.8mm; border-radius: 1.5mm; break-inside: avoid; }
    #turni-app .t-giorno.t-oggi { border-color: var(--linea); box-shadow: none; }
    #turni-app .t-giorno-testa .badge { font-size: 6.5pt; padding: 0 1.2mm; }
    #turni-app .t-giorno-wd, #turni-app .t-assenza, #turni-app .t-motivo { font-size: 7pt; }
    #turni-app .t-fascia { margin-top: 0.6mm; padding: 0.4mm 0.8mm; border-left-width: 2px; }
    #turni-app .t-fascia-nome, #turni-app .t-fascia-orario, #turni-app .t-cop-badge { font-size: 6.8pt; }
    /* In blocco inline, non flex: dentro una pagina con nome (@page
       turni-mese) Chromium manda a pagina nuova ogni <button> flex — un
       turno per foglio, ventotto fogli per un mese. Provato sul PDF. */
    #turni-app .t-turno { display: inline-block; width: 100%; margin-top: 0.4mm; padding: 0.2mm 0.8mm;
        font-size: 6.8pt; border-radius: 1mm; overflow: hidden; }
    /* Il nome non si tronca mai: se lo spazio manca è l'orario a scendere. */
    #turni-app .t-turno { white-space: normal; }
    #turni-app .t-turno-nome { display: inline; white-space: nowrap; }
    #turni-app .t-turno-orario { float: right; margin-left: 1mm; white-space: nowrap; font-size: 6.5pt; }
    /* Le fasce chiuse al pubblico SENZA turni sulla carta sono solo
       rumore (la domenica ne mostra quattro): a schermo restano. */
    #turni-app .t-fascia-chiusa:not(:has(.t-turno)) { display: none; }
    #turni-app .dip-pallino { width: 2mm; height: 2mm; }
    #turni-app .t-lucchetto { width: 2.4mm; height: 2.4mm; }
}

/* 0.80.0 — Turni: la settimana -----------------------------------------------
   L'agenda: una griglia con l'asse delle ore e sette giorni. Ogni giorno è
   «trasparente» (display: contents): l'intestazione sta nella prima riga,
   il corpo nella seconda, e le sette intestazioni hanno la stessa altezza.
   Le posizioni vengono dalle variabili che la pagina scrive nel suo <style>
   (--sett-da, --sett-per, --sett-corsia, --sett-corsie; --sett-asse-min e --sett-asse-ore sull'agenda):
   qui si trasformano in percentuali dell'altezza della colonna. */
.sett-titolo { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: var(--sp-2); text-align: center; }
.sett-aiuto { margin: var(--sp-2) 0 0; font-size: var(--testo-sm); }
.saldo-nota { margin: 0 0 var(--sp-2); font-size: var(--testo-xs); color: var(--talpa); }
.saldo-nota-avviso { color: var(--caffe); background: rgba(232, 161, 61, .18); border-left: 3px solid var(--ambra);
    padding: 4px 8px; border-radius: 4px; }

.sett-agenda { --sett-h-ora: 44px; display: grid; grid-template-columns: 44px repeat(7, minmax(0, 1fr));
    column-gap: 4px; margin-top: var(--sp-4); padding-bottom: 84px; /* il saldo non copre la sera */ }
.sett-angolo { grid-column: 1; grid-row: 1; }
.sett-asse { grid-column: 1; grid-row: 2; display: flex; flex-direction: column;
    height: calc(var(--sett-asse-ore) * var(--sett-h-ora)); }
.sett-ora { flex: 1 1 0; font-size: 11px; line-height: 1; color: var(--talpa); text-align: right;
    padding: 2px 6px 0 0; font-variant-numeric: tabular-nums; }
.sett-giorno { display: contents; }
.sett-g-1 > * { grid-column: 2; }
.sett-g-2 > * { grid-column: 3; }
.sett-g-3 > * { grid-column: 4; }
.sett-g-4 > * { grid-column: 5; }
.sett-g-5 > * { grid-column: 6; }
.sett-g-6 > * { grid-column: 7; }
.sett-g-7 > * { grid-column: 8; }
.sett-testa { grid-row: 1; min-width: 0; padding: 6px 8px; background: var(--bianco);
    border: 1px solid var(--linea); border-bottom: 0; border-radius: var(--raggio) var(--raggio) 0 0; }
.sett-testa-riga { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 6px; }
.sett-wd { font-size: var(--testo-xs); text-transform: uppercase; letter-spacing: .04em; color: var(--talpa); }
.sett-data { font-size: var(--testo-md); font-variant-numeric: tabular-nums; }
.sett-testa .badge { font-size: 11px; padding: 0 6px; }
.sett-motivo { margin: 2px 0 0; font-size: var(--testo-xs); color: var(--talpa); overflow-wrap: anywhere; }
.sett-oggi .sett-testa { border-color: var(--cobalto); box-shadow: inset 0 3px 0 var(--cobalto); }
.sett-corpo { grid-row: 2; position: relative; min-width: 0; overflow: hidden;
    height: calc(var(--sett-asse-ore) * var(--sett-h-ora));
    background-color: var(--bianco);
    background-image: linear-gradient(to bottom, var(--linea) 1px, transparent 1px);
    background-size: 100% var(--sett-h-ora);
    border: 1px solid var(--linea); border-radius: 0 0 var(--raggio) var(--raggio); }
.sett-oggi .sett-corpo { border-color: var(--cobalto); }
.sett-chiuso .sett-testa { background: var(--carta); }
.sett-chiuso .sett-corpo { background-color: var(--carta);
    background-image: repeating-linear-gradient(135deg, transparent 0 8px, rgba(107, 93, 81, .08) 8px 9px); }
.sett-chiuso-motivo { position: absolute; top: var(--sp-3); left: 0; right: 0; margin: 0; padding: 0 6px;
    text-align: center; font-size: var(--testo-xs); color: var(--talpa); overflow-wrap: anywhere; }

.sett-pos { position: absolute; left: 0; right: 0;
    top: calc(100% * var(--sett-da, 0) / var(--sett-asse-min)); height: calc(100% * var(--sett-per, 60) / var(--sett-asse-min)); }
.sett-banda { background: rgba(61, 139, 125, .09); border-top: 1px solid rgba(61, 139, 125, .4);
    border-bottom: 1px solid rgba(61, 139, 125, .4); }
.sett-banda-nome { position: absolute; right: 4px; bottom: 2px; left: 4px; text-align: right;
    font-size: 10px; line-height: 1.2; color: var(--salvia-scura); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sett-banda-chiusa { background: transparent; border-top-style: dashed; border-bottom-style: dashed;
    border-color: var(--linea); }
.sett-banda-chiusa .sett-banda-nome { color: var(--talpa); opacity: .7; }
.sett-scoperto { z-index: 1; border-left: 3px solid var(--corallo);
    background: repeating-linear-gradient(135deg, rgba(201, 79, 79, .16) 0 6px, rgba(201, 79, 79, .06) 6px 12px); }
.sett-scoperto span { position: absolute; top: 2px; left: 4px; max-width: calc(100% - 8px); padding: 0 4px;
    border-radius: 4px; background: var(--bianco); color: var(--corallo); font-size: 11px; font-weight: var(--peso-forte);
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

.sett-blocco { z-index: 2; right: auto; min-height: 20px;
    left: calc(2px + (100% - 4px) * var(--sett-corsia, 0) / var(--sett-corsie, 1));
    width: calc((100% - 4px) / var(--sett-corsie, 1) - 2px);
    display: flex; flex-direction: column; align-items: stretch; gap: 1px; padding: 2px 5px;
    border: 1px solid var(--dip-colore, var(--talpa)); border-left-width: 4px; border-radius: 6px;
    background: var(--bianco); background: color-mix(in srgb, var(--dip-colore, var(--talpa)) 15%, var(--bianco));
    color: var(--caffe); font: inherit; font-size: var(--testo-xs); line-height: 1.25; text-align: left; overflow: hidden; }
button.sett-blocco { cursor: pointer; }
button.sett-blocco:hover, button.sett-blocco:focus-visible { box-shadow: 0 2px 8px rgba(58, 46, 40, .2); z-index: 3; }
.sett-blocco-testa { display: flex; align-items: center; gap: 4px; min-width: 0; }
.sett-blocco-nome { flex: 1 1 auto; min-width: 0; font-weight: var(--peso-forte);
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sett-blocco-orario { color: var(--talpa); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    font-variant-numeric: tabular-nums; }
.sett-stretto { padding: 2px 3px; }
.sett-stretto .dip-pallino { display: none; }
.sett-vuoto, .sett-bersagli { display: none; }

/* Il trascinamento: la sorgente si attenua, il fantasma segue il puntatore
   (la sua posizione la scrive turni-settimana.js in un foglio costruito, non
   negli attributi), la mira dice l'ora dove nascerà il turno. */
@media (min-width: 768px) {
    [data-vista="settimana"] .sett-agenda button.sett-blocco { touch-action: none; }
}
[data-vista="settimana"] .dip-scelta { touch-action: none; }
.sett-sorgente { opacity: .4; }
.sett-fantasma { position: fixed; left: 0; top: 0; z-index: 1000; margin: 0; pointer-events: none;
    opacity: .92; box-shadow: var(--ombra-alta); }
.sett-mira { position: absolute; left: 0; right: 0; z-index: 4; height: 0; pointer-events: none;
    border-top: 2px solid var(--cobalto); }
.sett-mira::after { content: attr(data-ora); position: absolute; top: -9px; left: 2px; padding: 0 4px;
    border-radius: 4px; background: var(--cobalto); color: var(--bianco); font-size: 11px; line-height: 16px; }
.sett-sopra { outline: 2px solid var(--cobalto); outline-offset: -2px; }
/* L'invito a lasciare il turno sull'elenco sta SOPRA la riga d'aiuto, non
   sotto l'elenco: un elemento in più spingerebbe giù l'agenda proprio mentre
   la si guarda per mirare l'ora. */
.turni-dip-barra.sett-cestino-attivo { position: relative; outline: 2px dashed var(--corallo); outline-offset: -2px; }
.turni-dip-barra.sett-cestino-attivo::after { content: attr(data-cestino); position: absolute; top: 0; right: 0; left: 0;
    padding: var(--sp-3) var(--sp-5) var(--sp-2); border-radius: inherit; background: rgba(255, 255, 255, .95);
    color: var(--corallo); font-size: var(--testo-sm); font-weight: var(--peso-forte); pointer-events: none; }
.turni-dip-barra.sett-cestino-sopra { background: rgba(201, 79, 79, .1); }
html.sett-trascinando, html.sett-trascinando * { cursor: grabbing !important; user-select: none; -webkit-user-select: none; }

/* Sotto i 768px: un elenco dei sette giorni, i blocchi in fila per orario.
   Niente altezza dell'ora da toccare: al suo posto le fasce del giorno,
   che compaiono quando un dipendente è scelto (o mentre lo si trascina). */
@media (max-width: 767px) {
    .sett-agenda { display: block; padding-bottom: 96px; }
    .sett-angolo, .sett-asse, .sett-banda, .sett-chiuso-motivo { display: none; }
    .sett-giorno { display: block; margin-top: var(--sp-2); padding: var(--sp-2) var(--sp-3);
        background: var(--bianco); border: 1px solid var(--linea); border-radius: var(--raggio); }
    .sett-giorno.sett-chiuso { background: var(--carta); }
    .sett-giorno.sett-oggi { border-color: var(--cobalto); box-shadow: inset 0 0 0 1px var(--cobalto); }
    .sett-testa, .sett-chiuso .sett-testa, .sett-oggi .sett-testa { padding: 0; border: 0; border-radius: 0; background: none; box-shadow: none; }
    .sett-wd { font-size: var(--testo-sm); }
    .sett-corpo, .sett-chiuso .sett-corpo { position: static; height: auto; overflow: visible; display: flex; flex-direction: column;
        gap: 4px; margin-top: 6px; background: none; border: 0; border-radius: 0; }
    .sett-pos { position: static; height: auto; }
    .sett-blocco { width: auto; flex-direction: row; flex-wrap: wrap; align-items: center; justify-content: space-between;
        gap: 2px 8px; padding: 6px 8px; font-size: var(--testo-sm); }
    .sett-blocco-testa { flex: 1 1 8em; }
    .sett-blocco-orario { flex: none; }
    .sett-stretto { padding: 6px 8px; }
    .sett-stretto .dip-pallino { display: inline-block; }
    .sett-scoperto { order: 2; padding: 3px 8px; border-radius: 6px; }
    .sett-scoperto span { position: static; padding: 0; background: none; }
    .sett-vuoto { display: block; order: 1; margin: 0; font-size: var(--testo-xs); color: var(--talpa); }
    .sett-agenda.turni-pronto .sett-bersagli, .sett-agenda.sett-in-trascina .sett-bersagli {
        display: flex; flex-wrap: wrap; gap: 6px; margin-top: var(--sp-2); }
    .sett-bersaglio { min-height: var(--alt-controllo-sm); padding: 4px 10px; border: 1px dashed var(--cobalto);
        border-radius: var(--raggio-pillola); background: var(--bianco); color: var(--cobalto-scuro);
        font: inherit; font-size: var(--testo-xs); cursor: pointer; }
    .sett-bersaglio-chiuso { border-color: var(--linea); color: var(--talpa); }
    .sett-bersaglio-ore { color: var(--talpa); }
}

/* La stampa della settimana: orizzontale, senza cornici né barre, le
   colonne alte quanto il foglio. La pagina ha un nome (sett) perché la
   regola @page non si può limitare con un selettore: così vale solo qui. */
@page sett { size: A4 landscape; margin: 8mm; }
@media print {
    #turni-app[data-vista="settimana"] { page: sett; }
    body:has(#turni-app[data-vista="settimana"]) .sidebar,
    body:has(#turni-app[data-vista="settimana"]) .mobilebar,
    body:has(#turni-app[data-vista="settimana"]) .alert,
    [data-vista="settimana"] .page-actions, [data-vista="settimana"] .hero-ico, [data-vista="settimana"] .lead,
    [data-vista="settimana"] .turni-dip-barra, [data-vista="settimana"] .sett-aiuto,
    [data-vista="settimana"] .saldo-pannello, [data-vista="settimana"] .settimana-barra .btn,
    [data-vista="settimana"] .sett-bersagli, [data-vista="settimana"] .sett-vuoto, [data-vista="settimana"] dialog { display: none !important; }
    body:has(#turni-app[data-vista="settimana"]) .shell { display: block; }
    body:has(#turni-app[data-vista="settimana"]) .content { max-width: none; margin: 0; padding: 0; }
    #turni-app[data-vista="settimana"], #turni-app[data-vista="settimana"].turni-schermo-pieno {
        position: static; overflow: visible; padding: 0; background: none; }
    [data-vista="settimana"] .page-head { margin: 0 0 2mm; }
    [data-vista="settimana"] .sett-navi { margin: 0; padding: 0; border: 0; box-shadow: none; background: none; }
    [data-vista="settimana"] .sett-agenda { --sett-h-ora: calc(150mm / var(--sett-asse-ore)); margin-top: 2mm; padding-bottom: 0;
        break-inside: avoid; }
    [data-vista="settimana"] .sett-agenda * { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
    [data-vista="settimana"] .sett-blocco { box-shadow: none; }
    [data-vista="settimana"] .sett-blocco-nome { white-space: normal; }
}

/* 0.81.0 — Turni: il calendario esterno delle assenze ----------------------
   La scheda delle fonti iCal: esempi di titolo, i conteggi dell'ultima
   lettura, i titoli da sistemare, le azioni. E il segno «dal calendario»
   accanto all'assenza importata, nel pannello del giorno. */
.ical-esempi { display: flex; flex-wrap: wrap; gap: var(--sp-2); list-style: none; margin: var(--sp-2) 0; padding: 0; }
.ical-esempi code { background: var(--carta); border-radius: 4px; padding: 2px 8px; font-size: var(--testo-sm); }
/* Le sigle del calendario (0.100.0): sigla stretta, tipo accanto, la nota dei riservati in fila */
.sigle-tabella td { vertical-align: middle; }
.sigle-tabella td:last-child { display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; }
.sigle-tabella .sigla-campo { max-width: 160px; text-transform: uppercase; font-family: ui-monospace, monospace; }
.sigle-tabella select { max-width: 280px; }
.ass-ora { display: inline-flex; align-items: center; gap: var(--sp-1); font-size: var(--testo-sm); color: var(--talpa); }
.ass-ora input { width: 7.5em; }
.ical-fonte .card-head .badge { margin-left: auto; }
.ical-conti { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: var(--sp-2); margin: var(--sp-3) 0; }
.ical-conti div { background: var(--carta); border-radius: 8px; padding: var(--sp-2) var(--sp-3); }
.ical-conti dt { font-size: var(--testo-xs); color: var(--talpa); }
.ical-conti dd { margin: 0; font-size: 1.25rem; font-weight: 600; }
.ical-da-sistemare { list-style: none; margin: 0 0 var(--sp-3); padding: 0; }
.ical-da-sistemare li { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2); padding: var(--sp-2) 0; border-bottom: 1px solid var(--linea); }
.ical-data { font-variant-numeric: tabular-nums; color: var(--talpa); min-width: 6.5em; }
.ical-titolo { flex: 1 1 12em; overflow-wrap: anywhere; }
.ical-azioni { display: flex; flex-wrap: wrap; align-items: flex-end; gap: var(--sp-3); margin-top: var(--sp-3); }
.ical-file { display: flex; flex-wrap: wrap; align-items: flex-end; gap: var(--sp-2); }
.ical-file label { flex-basis: 100%; }
.ical-file input[type="file"] { max-width: 100%; }
.ass-da-calendario { font-size: var(--testo-xs); }

/* 0.82.0 — Il foglio ore propone l'orario dei turni ------------------------
   La riga «Previsto dai turni» sopra il modulo del giorno, il conto previsto
   nel riassunto dei giorni vuoti, e la nota quando lo scritto non coincide. */
.ore-previsto { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--sp-2); margin: var(--sp-2) 0; }
.ore-previsto-turno { background: var(--carta); border-radius: 4px; padding: 2px 8px; font-variant-numeric: tabular-nums; }
.ore-previsto-nota { flex-basis: 100%; font-size: var(--testo-xs); }
.ore-previsto-conto { color: var(--cobalto); font-weight: 600; font-variant-numeric: tabular-nums; }
.ore-diverso { font-size: var(--testo-xs); }

/* 0.83.0 — I cedolini in parole semplici ------------------------------------
   Le note sotto i numeri (i quattro passi in cima, dalla 0.99.2, sono la
   linea di .ced-linea), i riquadri chiusi delle operazioni rare, il dettaglio del
   costo di una persona e le «parole da sapere». */
.kpi-nota { display: block; font-size: var(--testo-xs); margin-top: 2px; }
details.ced-altro > summary, details.ced-ripartizione-letta > summary { cursor: pointer; list-style: none; }
details.ced-altro > summary::-webkit-details-marker, details.ced-ripartizione-letta > summary::-webkit-details-marker { display: none; }
details.ced-altro > summary h2, details.ced-ripartizione-letta > summary h2 { display: inline-flex; align-items: center; gap: var(--sp-2); margin: 0; }
details.ced-altro > summary::after, details.ced-ripartizione-letta > summary::after { content: '▸'; margin-left: var(--sp-2); color: var(--talpa); }
details.ced-altro[open] > summary::after, details.ced-ripartizione-letta[open] > summary::after { content: '▾'; }
.ced-altro-blocco { border-top: 1px solid var(--linea); margin-top: var(--sp-4); padding-top: var(--sp-3); }
.ced-altro-blocco h3 { margin: 0 0 var(--sp-2); }
.ced-dentro { margin-top: var(--sp-3); }
.ced-dettaglio { margin: var(--sp-1) 0 var(--sp-2); font-size: var(--testo-sm); }
.ced-dettaglio > summary { cursor: pointer; color: var(--cobalto); }
.ced-voci-costo { list-style: none; margin: var(--sp-2) 0; padding: 0; max-width: 420px; }
.ced-voci-costo li { display: flex; justify-content: space-between; gap: var(--sp-3); padding: 3px 0; border-bottom: 1px dotted var(--linea); }
.ced-dopo { display: block; font-size: var(--testo-xs); }
.ced-parole { display: grid; gap: var(--sp-3); margin: var(--sp-3) 0 0; }
.ced-parole dt { font-weight: 700; }
.ced-parole dd { margin: 2px 0 0; color: var(--talpa); }
.ced-resta-cella { display: inline-flex; flex-direction: column; align-items: flex-end; white-space: nowrap; }

/* ==========================================================================
   0.84.0 — Il TFR di una persona e la sua liquidazione
   ========================================================================== */
.tfrl-frasi, .tfrl-passi { margin: 0 0 var(--sp-3); padding-left: 1.2em; }
.tfrl-frasi li, .tfrl-passi li { margin-bottom: var(--sp-1); }
.tfrl-fatta { border-top: 1px solid var(--linea); padding-top: var(--sp-3); margin-top: var(--sp-3); }
.tfrl-fatta:first-of-type { border-top: 0; margin-top: 0; padding-top: 0; }
.tfrl-fatta p { margin: 0 0 var(--sp-2); }
.tfrl-persone { list-style: none; margin: 0; padding: 0; }
.tfrl-persone li { padding: var(--sp-2) 0; border-bottom: 1px solid var(--linea); display: flex; flex-wrap: wrap; gap: var(--sp-2); align-items: baseline; }
.tfrl-persone li:last-child { border-bottom: 0; }
.tfrl-libretto { flex-wrap: wrap; gap: var(--sp-2); align-items: center; border-bottom: 1px solid var(--linea); padding-bottom: var(--sp-2); }

/* ==========================================================================
   0.85.0 — L'import bancario riga per riga
   ========================================================================== */
.imp-nav { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2); margin: 0 0 var(--sp-3); }
.imp-nav-pos { font-weight: 600; padding: 0 var(--sp-2); }
.imp-nav [aria-disabled="true"] { opacity: .4; pointer-events: none; }
details.imp-righe > summary { cursor: pointer; list-style: none; }
details.imp-righe > summary h2 { display: inline; font-size: var(--testo-sm); margin: 0; }
details.imp-righe > summary::after { content: ' ▸'; color: var(--talpa); }
details.imp-righe[open] > summary::after { content: ' ▾'; }
.imp-righe-elenco { list-style: none; margin: var(--sp-2) 0 0; padding: 0; max-height: 420px; overflow-y: auto; }
.imp-righe-elenco li a { display: grid; grid-template-columns: 6.5em 8em 1fr auto; gap: var(--sp-2); align-items: baseline;
    padding: var(--sp-2) var(--sp-1); border-bottom: 1px solid var(--linea); color: inherit; text-decoration: none; }
.imp-righe-elenco li a:hover { background: var(--cobalto-velo); }
.imp-righe-elenco li.e-qui a { background: var(--cobalto-velo); font-weight: 600; }
.imp-riga-importo { text-align: right; }
.imp-riga-importo.e-entrata { color: var(--salvia); }
.imp-riga-causale { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
@media (max-width: 640px) {
    .imp-righe-elenco li a { grid-template-columns: 1fr auto; }
    .imp-riga-causale { grid-column: 1 / -1; }
    .imp-righe-elenco .badge { justify-self: start; }
}

/* --- I documenti di una voce di budget (0.89.0): tendina chiusa sotto la voce --- */
.voce-docs-riga > td { padding-top: 0; border-top: none; }
.voce-docs > summary { cursor: pointer; font-size: 13px; color: var(--cobalto); padding: 2px 0 6px; }
.voce-docs[open] > summary { margin-bottom: 6px; }
.voce-docs .table-compact td, .voce-docs .table-compact th { padding: 4px 8px; font-size: 13px; }

/* Il budget a gruppi (0.97.10): un gruppo per fascia o tipo di costo, una
   barra per voce — il pagato in verde, il da saldare in ambra, una tacca
   rossa dove finisce il previsto quando si va oltre. */
.bud-riepilogo { display: grid; gap: 14px; }
.bud-gruppo { border-top: 1px solid var(--linea); padding: 14px 0 4px; }
.bud-gruppo:first-of-type { border-top: none; padding-top: 4px; }
.bud-gruppo-testa { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 12px; margin: 0 0 6px; }
.bud-gruppo-testa h3 { margin: 0; font-size: var(--testo-lg); flex: 1 1 auto; }
.bud-cifra { font-size: var(--testo-sm); color: var(--talpa); white-space: nowrap; }
.bud-voci { list-style: none; margin: 8px 0 0; padding: 0 0 0 14px; border-left: 3px solid var(--cobalto-velo); }
.bud-gruppo[data-gruppo=""] .bud-voci, .bud-gruppo[data-gruppo="senza-voce"] .bud-voci,
.bud-gruppo[data-gruppo="quote"] .bud-voci, .bud-gruppo[data-gruppo="senza-voce-entrate"] .bud-voci,
.bud-gruppo[data-gruppo="contributi"] .bud-voci { border-left: none; padding-left: 0; }
.bud-voce { padding: 8px 0 10px; border-bottom: 1px dashed var(--linea); }
.bud-voce:last-child { border-bottom: none; }
.bud-voce-testa { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 12px; margin-bottom: 5px; }
.bud-voce-nome { flex: 1 1 220px; min-width: 0; overflow-wrap: anywhere; }
.bud-barra { position: relative; display: flex; height: 10px; border-radius: var(--raggio-pillola); background: var(--linea); overflow: visible; }
.bud-barra > .bud-pagato:first-child { border-radius: var(--raggio-pillola) 0 0 var(--raggio-pillola); }
.bud-barra--vuota { opacity: .5; }
.bud-barra--oltre { box-shadow: inset 0 0 0 1px var(--corallo); }
.bud-pagato { display: block; height: 100%; background: var(--salvia); }
.bud-saldare { display: block; height: 100%; background: var(--ambra); }
.bud-tacca { position: absolute; top: -4px; bottom: -4px; width: 3px; margin-left: -1px; border-radius: 2px; background: var(--corallo); }
.bud-righina { margin: 5px 0 0; font-size: var(--testo-sm); color: var(--talpa); display: flex; flex-wrap: wrap; gap: 2px 8px; }
.bud-sep { color: var(--linea); }
.bud-ambra { color: #9A6512; }
.bud-verde { color: var(--salvia-scura); }
.bud-rosso { color: var(--corallo); font-weight: var(--peso-forte); }
.bud-nota { margin: 4px 0 0; font-size: var(--testo-sm); }
.bud-voce .voce-docs { margin-top: 6px; }
.bud-totale { display: flex; flex-wrap: wrap; gap: 4px 18px; margin-top: 10px; padding-top: 10px; border-top: 2px solid var(--linea); font-weight: var(--peso-forte); }
.bud-legenda { display: flex; flex-wrap: wrap; gap: 4px 16px; margin: 0; font-size: var(--testo-xs); }
.bud-punto { display: inline-block; width: 10px; height: 10px; border-radius: 50%; margin-right: 6px; vertical-align: -1px; }
.bud-punto--tacca { width: 3px; height: 12px; border-radius: 2px; background: var(--corallo); }
@media (max-width: 640px) {
    .bud-voci { padding-left: 8px; }
    .bud-cifra { white-space: normal; }
}

/* --- Il CUP nella procedura guidata (0.90.1): il segno va a capo, e un
   codice lungo senza spazi nella descrizione non allarga la riga --- */
.attr-gruppo-head { flex-wrap: wrap; }
.attr-gruppo-head .badge { white-space: normal; }
.attr-riga .attr-desc { overflow-wrap: anywhere; }
@media (max-width: 600px) {
    .attr-riga { flex-wrap: wrap; }
    .attr-riga .attr-desc { flex-basis: calc(100% - 28px); }
}

/* --- La riga dell'import (0.91.0): il movimento in testa, la registrazione
   subito sotto, i casi rari in fondo e più piccoli --- */
.imp-mov { padding-top: 16px; padding-bottom: 16px; }
.imp-mov-testa { display: flex; align-items: baseline; flex-wrap: wrap; gap: 8px 14px; }
.imp-mov-importo { font-size: 26px; font-weight: 700; color: var(--caffe); }
.imp-mov-causale { margin: 8px 0 0; overflow-wrap: anywhere; line-height: 1.45; }
.imp-altri-titolo { font-size: 15px; margin: 28px 0 10px; color: var(--talpa); font-weight: 600; }
.imp-altri { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 16px; }
.imp-altri > .card { margin: 0; }
.imp-altro .card-head h2 { font-size: 16px; }
.imp-altro form { display: flex; flex-wrap: wrap; gap: 8px; align-items: flex-end; }
.imp-altro form label { flex-basis: 100%; margin-bottom: 0; }
.imp-altro form select, .imp-altro form input[type=text] { flex: 1 1 200px; min-width: 0; }

/* --- La persona nuova dall'import (0.91.0) --- */
.imp-versante-riga { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.imp-versante-riga input { flex: 1 1 220px; min-width: 0; }
.np-gruppo { border: 0; padding: 0; margin: 18px 0 0; }
.np-gruppo legend { padding: 0; margin-bottom: 6px; }
.np-legame { display: grid; grid-template-columns: 2fr 2fr 1.4fr auto; gap: 8px; align-items: end;
             padding: 8px 0; border-bottom: 1px dashed var(--linea); }
@media (max-width: 700px) { .np-legame { grid-template-columns: 1fr; } }
.np-figlio { border: 1px solid var(--linea); border-radius: 12px; padding: 10px 14px 12px; margin: 10px 0; }
.np-figlio legend { display: flex; gap: 12px; align-items: baseline; padding: 0 6px; }
.np-figlio .radio-row { margin: 8px 0; }

/* L'Inail pagato in anticipo (0.93.0): il riquadro nella pagina dei cedolini */
.ced-inail { border: 1px solid var(--linea); border-left: 4px solid var(--salvia); border-radius: var(--raggio-sm);
             padding: var(--sp-3) var(--sp-4); margin: 0 0 var(--sp-4); }
.ced-inail .form-cols { margin-top: 8px; }

/* Il debito verso il personale (0.98.4): cifre su una riga, ore e matricola sotto, piccole */
.debp-tabella td.num, .debp-tabella th.num { white-space: nowrap; }
.debp-tabella td { vertical-align: top; }
.debp-ore { display: block; color: var(--talpa); font-size: 12px; text-transform: none; letter-spacing: normal; }
.debp-nota { font-size: 13px; }
.debp-liquida summary { cursor: pointer; white-space: nowrap; }
.debp-nota code { overflow-wrap: anywhere; word-break: break-all; }

/* Riallocare le spese (0.98.7): due colonne, righe da trascinare, voci bersaglio */
.riall-barra { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 16px; }
.riall-conto { margin: 0; font-weight: var(--peso-forte); }
.riall-azioni { display: flex; flex-wrap: wrap; gap: 8px; }
.riall-nota { flex-basis: 100%; margin: 0; font-size: var(--testo-sm); }
.riall { display: grid; grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); gap: 16px; align-items: start; }
@media (max-width: 920px) { .riall { grid-template-columns: 1fr; } }
.riall-destra { position: sticky; top: 12px; max-height: calc(100vh - 24px); overflow-y: auto; }
@media (max-width: 920px) { .riall-destra { position: static; max-height: none; } }
.riall-voce { border: 1px solid var(--linea); border-radius: var(--raggio); padding: 10px; margin-top: 12px; }
.riall-voce-testa { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; margin-bottom: 6px; }
.riall-vuota { margin: 4px 0; font-size: var(--testo-sm); }
.riall-riga { background: var(--bianco); border: 1px solid var(--linea); border-radius: var(--raggio-sm); padding: 8px 10px; margin-top: 6px; }
.riall-riga[draggable="true"] { cursor: grab; }
.riall-trascinata { opacity: .5; }
.riall-in-prova { border-color: var(--cobalto); background: var(--cobalto-velo); }
.riall-riga-testa { display: flex; justify-content: space-between; gap: 8px; }
.riall-doc { overflow-wrap: anywhere; }
.riall-importo { white-space: nowrap; }
.riall-descr { font-size: var(--testo-sm); overflow-wrap: anywhere; }
.riall-badge-prova { font-size: var(--testo-xs); color: var(--cobalto-scuro); margin-top: 4px; }
.riall-riga-piede { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; margin-top: 6px; }
.riall-sposta { max-width: 100%; font-size: var(--testo-sm); }
.riall-progetto { margin-top: 12px; }
.riall-progetto-nome { font-weight: var(--peso-forte); margin-bottom: 4px; }
.riall-bersaglio { display: flex; justify-content: space-between; flex-wrap: wrap; gap: 2px 10px; padding: 6px 8px; border: 1px dashed var(--linea); border-radius: var(--raggio-sm); margin-top: 4px; }
.riall-sopra { border-color: var(--cobalto); border-style: solid; background: var(--cobalto-velo); }
.riall-resto { font-size: var(--testo-sm); white-space: nowrap; }
.riall-verde { color: var(--salvia-scura); }
.riall-ambra { color: #9A6512; }
.riall-rosso { color: var(--corallo); font-weight: var(--peso-forte); }
.riall-tabella-prove td { vertical-align: top; overflow-wrap: anywhere; }
.riall-tabella-prove td.num { white-space: nowrap; overflow-wrap: normal; }
@media (max-width: 620px) {
    .riall-tabella-prove, .riall-tabella-prove tbody, .riall-tabella-prove tr, .riall-tabella-prove td { display: block; width: auto; }
    .riall-tabella-prove tr { padding: 8px 0; border-bottom: 1px solid var(--linea); }
    .riall-tabella-prove td { padding: 2px 0; border: 0; text-align: left; }
}
.prev-tabella td.num, .prev-tabella th.num { white-space: nowrap; }

/* Il report per cassa (0.98.9): barre orizzontali, blu le entrate, arancio le uscite */
.repc-in { background: var(--grafico-entrate); }
.repc-out { background: var(--grafico-uscite); }
.repc-chiave { display: inline-block; width: 10px; height: 10px; border-radius: 2px; margin-right: 6px; vertical-align: baseline; }
.repc-legenda { display: flex; gap: 16px; margin: 0 0 8px; font-size: var(--testo-sm); color: var(--talpa); }
.repc-grafico { display: grid; gap: 6px; }
.repc-riga-mese { display: grid; grid-template-columns: 9em minmax(0, 1fr); gap: 10px; align-items: center; }
.repc-etichetta { font-size: var(--testo-sm); color: var(--talpa); }
.repc-coppia { display: grid; gap: 2px; }
.repc-traccia { display: block; width: 100%; }
.repc-barra { display: block; height: 10px; min-width: 0; border-radius: 0 4px 4px 0; }
.repc-cella-barra { width: 34%; min-width: 120px; }
.repc-barre td { vertical-align: middle; }
.repc-barre td.num { white-space: nowrap; }
.repc-tabella { margin-top: 12px; }
.repc-tabella summary { cursor: pointer; color: var(--cobalto-scuro); font-size: var(--testo-sm); }
@media (max-width: 560px) { .repc-riga-mese { grid-template-columns: 6.5em minmax(0, 1fr); } .repc-cella-barra { min-width: 70px; } }
@media (max-width: 560px) { .repc-barre .repc-sec { display: none; } }

/* ==== La pagina dei cedolini, regole nuove (0.99.1) ======================
   I quattro colori di «Quanto devi tenere pronto» sono i primi quattro della
   tavolozza per categorie (blu, arancio, acqua, giallo), controllati per chi
   non distingue bene i colori; acqua e giallo hanno poco contrasto sul
   bianco, e per questo ogni parte ha accanto la sua cifra scritta. Il giallo
   è anche quello della quota di 13ª e 14ª nel grafico: la stessa cosa, lo
   stesso colore. */
.ced-avviso { display: flex; justify-content: space-between; align-items: center; gap: var(--sp-3);
              background: var(--cobalto-velo); border: 1px solid #CCD9EA; border-radius: 10px;
              padding: var(--sp-3) var(--sp-4); margin: var(--sp-3) 0; }
.ced-in-tutto-tot { margin-left: auto; display: inline-flex; align-items: baseline; gap: 6px; }
.ced-in-tutto-tot strong { font-family: var(--font-display); font-size: 20px; color: var(--caffe); }
.ced-barra { display: flex; gap: 2px; height: 12px; border-radius: 6px; overflow: hidden; margin: 2px 0 0; }
.ced-parte-breve { background: var(--ced-breve); } .ced-parte-tfr { background: var(--ced-tfr); }
.ced-parte-ore { background: var(--ced-ore); } .ced-parte-mensilita { background: var(--ced-mensilita); }
.ced-pronto { grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); margin-top: var(--sp-3); }
.ced-pronto .kpi-hint, #ced-personale .kpi-hint { color: var(--talpa); }
.ced-kpi-breve { border-top: 4px solid var(--ced-breve); } .ced-kpi-tfr { border-top: 4px solid var(--ced-tfr); }
.ced-kpi-ore { border-top: 4px solid var(--ced-ore); } .ced-kpi-mensilita { border-top: 4px solid var(--ced-mensilita); }
.ced-fonte { font-size: var(--testo-xs); margin: var(--sp-2) 0 0; }

/* Il grafico: scorre di lato sul telefono invece di farsi illeggibile */
.ced-graf-come { margin-left: auto; font-size: 13px; }
.ced-graf-scorri { overflow-x: auto; }
.ced-graf { display: block; width: 100%; min-width: 720px; height: auto; font-family: var(--font-testo); }
.ced-graf-riga { stroke: var(--linea); stroke-width: 1; }
.ced-graf-asse { font-size: 12px; fill: var(--talpa); }
.ced-graf-nome { fill: var(--caffe); }
.ced-graf-presa { fill: transparent; }
.ced-graf-mese:hover .ced-graf-presa { fill: var(--cobalto-velo); }
.ced-graf-b { fill: var(--ced-breve); }
.ced-graf-b-corso { fill: #8FB6E8; }
.ced-graf-b-stima { fill: #A9C9F0; stroke: var(--ced-breve); stroke-width: 1; stroke-dasharray: 4 3; }
.ced-graf-m-stima { fill: #F6D58A; stroke: var(--ced-mensilita); stroke-width: 1; stroke-dasharray: 4 3; }
.ced-graf-eti { font-size: 12px; font-weight: 700; fill: var(--caffe); }
.ced-graf-oggi { stroke: #B0A597; stroke-dasharray: 2 3; }
.ced-graf-media { stroke: var(--caffe); stroke-width: 2; stroke-dasharray: 6 4; }
.ced-graf-media-t { font-size: 12px; font-weight: 700; fill: var(--caffe); paint-order: stroke; stroke: var(--bianco); stroke-width: 4px; }
.ced-graf-leg { display: flex; flex-wrap: wrap; gap: 6px 16px; font-size: 13px; color: var(--talpa); margin-top: var(--sp-2); }
.ced-graf-leg i { display: inline-block; width: 11px; height: 11px; border-radius: 3px; margin-right: 6px; vertical-align: -1px; }
.ced-leg-b { background: var(--ced-breve); } .ced-leg-m { background: #F6D58A; outline: 1px dashed var(--ced-mensilita); }
.ced-leg-corso { background: #8FB6E8; }
.ced-leg-stima { background: #A9C9F0; outline: 1px dashed var(--ced-breve); }
.ced-leg-media { background: var(--caffe); height: 3px !important; width: 16px !important; vertical-align: 3px !important; }

/* L'ultimo mese con i passi in grande, e i puntini di ogni mese */
.ced-ultimo { border: 1px solid var(--linea); border-radius: 10px; background: var(--carta); padding: var(--sp-3) var(--sp-4); margin-bottom: var(--sp-3); }
.ced-ultimo-testa { display: flex; justify-content: space-between; gap: var(--sp-3); flex-wrap: wrap; align-items: baseline; }
.ced-ultimo-testa strong { font-size: 16px; }
.ced-linea { list-style: none; margin: var(--sp-3) 0; padding: 0; display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; }
.ced-linea li { display: flex; align-items: center; gap: 6px; font-size: 14px; }
.ced-linea li:not(:last-child)::after { content: ""; width: 34px; height: 2px; background: var(--linea); margin-left: var(--sp-2); }
.ced-tondo, .ced-puntino { display: inline-grid; place-items: center; border-radius: 50%; background: #EFEAE3; color: var(--talpa); font-weight: 700; }
.ced-tondo { width: 24px; height: 24px; font-size: 12px; }
.e-fatto > .ced-tondo, .ced-puntino.e-fatto { background: var(--salvia); color: var(--bianco); }
.e-qui > .ced-tondo, .ced-puntino.e-qui { background: var(--cobalto); color: var(--bianco); }
.ced-puntini { display: inline-flex; align-items: center; white-space: nowrap; }
.ced-puntino { width: 20px; height: 20px; font-size: 11px; }
.ced-puntino + .ced-puntino { margin-left: 14px; position: relative; }
.ced-puntino + .ced-puntino::before { content: ""; position: absolute; right: 100%; top: 9px; width: 14px; height: 2px; background: var(--linea); }
.ced-anno { border-top: 1px solid var(--linea); }
.ced-anno > summary { display: flex; justify-content: space-between; align-items: center; gap: var(--sp-3); padding: var(--sp-3) var(--sp-1); cursor: pointer; list-style: none; }
.ced-anno > summary::-webkit-details-marker { display: none; }
.ced-anno > summary::before { content: "▸"; color: var(--talpa); margin-right: 6px; }
.ced-anno[open] > summary::before { content: "▾"; }
.ced-anno-n { font-weight: 700; margin-right: auto; }
.ced-anno > summary .muted { font-size: 13px; }
.ced-imp-blocco + .ced-imp-blocco { border-top: 1px solid var(--linea); margin-top: var(--sp-3); padding-top: var(--sp-3); }
.ced-imp-blocco h3 { margin: 0 0 4px; font-size: 15px; }
.ced-modal-ok { margin-top: var(--sp-3); }
@media (max-width: 920px) {
    .ced-avviso { flex-direction: column; align-items: flex-start; }
    .ced-linea li:not(:last-child)::after { width: 14px; }
    #ced-personale .card-head, #ced-grafico .card-head { flex-wrap: wrap; }
    .ced-in-tutto-tot, .ced-graf-come { margin-left: 0; flex-basis: 100%; }
}

/* La pagina del mese, una persona alla volta (0.99.2): a sinistra l'elenco,
   a destra la persona. Sul telefono l'elenco è una fila che scorre di lato. */
.ced-linea-card { padding: var(--sp-2) var(--sp-4); }
.ced-linea-card .ced-linea { margin: var(--sp-2) 0; }
.ced-fatte { margin-left: auto; font-size: 13px; }
.ced-uno { display: grid; grid-template-columns: 240px minmax(0, 1fr); gap: var(--sp-4); align-items: start; }
.ced-persone { display: flex; flex-direction: column; gap: 2px; border-right: 1px solid var(--linea); padding-right: var(--sp-3);
               max-height: 70vh; overflow-y: auto; position: sticky; top: var(--sp-3); }
.ced-persone a, .ced-persone-senza { display: flex; justify-content: space-between; gap: var(--sp-2); padding: 7px 10px; border-radius: 8px;
               color: var(--caffe); text-decoration: none; font-size: 14px; }
.ced-persone a:hover { background: var(--carta); }
.ced-persone a.on { background: var(--cobalto-velo); color: var(--cobalto-scuro); font-weight: 700; }
.ced-persone-nome { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ced-persone-stato { flex: none; color: var(--talpa); font-variant-numeric: tabular-nums; }
.ced-persone a.e-fatta .ced-persone-stato { color: var(--salvia-scura); font-weight: 700; }
.ced-persone-senza { color: var(--talpa); font-size: 13px; }
.ced-uno-dx .ced-dip { margin-top: 0; }
.ced-uno-piede { display: flex; justify-content: space-between; align-items: center; gap: var(--sp-3); flex-wrap: wrap; margin-top: var(--sp-4); }
.cedm-spese { margin: var(--sp-2) 0 0; padding-left: 18px; }
@media (max-width: 920px) {
    .ced-uno { grid-template-columns: 1fr; }
    .ced-persone { flex-direction: row; overflow-x: auto; max-height: none; position: static; border-right: 0;
                   border-bottom: 1px solid var(--linea); padding: 0 0 var(--sp-2); }
    .ced-persone a, .ced-persone-senza { flex: none; white-space: nowrap; }
}
/* Nella colonna di destra la riga di una quota sta su due righe: progetto,
   numero ed euro sopra; voce di budget e voce contabile sotto */
.ced-uno-dx .ced-quota { grid-template-columns: minmax(0, 1.3fr) 72px 30px minmax(0, 1fr) auto;
    grid-template-areas: "prog num uni euro togli" "voce voce voce cat cat"; padding: 6px 0; border-bottom: 1px dashed var(--linea); }
.ced-uno-dx .ced-quota .ced-progetto { grid-area: prog; } .ced-uno-dx .ced-quota .ced-pct { grid-area: num; }
.ced-uno-dx .ced-quota .ced-pct-eti { grid-area: uni; } .ced-uno-dx .ced-quota .ced-voce { grid-area: voce; }
.ced-uno-dx .ced-quota .ced-cat { grid-area: cat; } .ced-uno-dx .ced-quota .ced-quota-euro { grid-area: euro; }
.ced-uno-dx .ced-quota .ced-togli { grid-area: togli; }
@media (max-width: 920px) {
    .ced-uno-dx .ced-quota { grid-template-columns: minmax(0, 1fr) 72px 30px; grid-template-areas: "prog num uni" "voce voce voce" "cat cat cat" "euro euro togli"; }
}

/* Il libro soci (0.99.4): la ricerca con la lente, i filtri rapidi con
   quanti sono, la tessera come una piccola etichetta, la nascita sotto il nome */
.barra-elenco .soci-cerca { position: relative; flex: 1 1 320px; max-width: 560px; }
.soci-cerca svg { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); width: 18px; height: 18px; color: var(--talpa); pointer-events: none; }
.soci-cerca input { width: 100%; padding-left: 38px !important; }
.soci-come { font-size: var(--testo-xs); margin: var(--sp-2) 0 0; }
.soci-filtri { margin-top: var(--sp-3); flex-wrap: wrap; height: auto; }
.soci-n { display: inline-block; min-width: 20px; margin-left: 6px; padding: 0 6px; border-radius: var(--raggio-pillola);
          background: var(--bianco); color: var(--talpa); font-size: 12px; text-align: center; }
.soci-filtri a[aria-current="true"] .soci-n { background: var(--cobalto-velo); color: var(--cobalto); }
.soci-tessera { display: inline-block; min-width: 48px; padding: 2px 8px; border-radius: 6px; text-align: center;
                background: var(--cobalto-velo); color: var(--cobalto-scuro); font-weight: 700; font-variant-numeric: tabular-nums; letter-spacing: 0.04em; }
.soci-tessera-no { background: var(--carta); color: var(--talpa); font-weight: 400; }
.soci-nome { display: inline-block; }
.soci-nascita { display: block; font-size: var(--testo-xs); margin-top: 1px; }
.soci-prog { color: var(--talpa); width: 40px; }
.soci-rimuovi { font-size: var(--testo-xs); color: var(--talpa); }
.soci-rimuovi:hover { color: var(--corallo); }
#modal-tessera .suggest-anchor { margin-bottom: var(--sp-3); }
@media (max-width: 920px) {
    .soci-tabella .soci-prog { display: none; }
    .barra-elenco .soci-cerca { flex-basis: 100%; max-width: none; }
}

/* ---- Il tabellone del mese (0.101.0) ------------------------------------ */
.tb-pennelli { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2); background: var(--bianco);
  border: 1px solid var(--linea); border-radius: 12px; padding: var(--sp-2) var(--sp-3); margin-bottom: var(--sp-3); }
.tb-pennelli > strong { font-size: var(--testo-sm); margin-right: var(--sp-1); }
.tb-pennello input { position: absolute; opacity: 0; pointer-events: none; }
.tb-pennello { margin: 0; text-transform: none; letter-spacing: normal; font-weight: 400; }
.tb-pennello span { text-transform: none; letter-spacing: normal; display: inline-flex; align-items: center; gap: 6px; border: 1px solid var(--linea); border-radius: 9px;
  padding: 5px 10px; font-size: var(--testo-sm); font-weight: 600; cursor: pointer; background: var(--bianco); }
.tb-pennello input:checked + span { border-color: var(--cobalto); background: var(--cobalto-velo); color: var(--cobalto-scuro);
  box-shadow: 0 0 0 2px rgba(74, 111, 165, .15); }
.tb-pennello input:focus-visible + span { outline: 2px solid var(--cobalto); outline-offset: 2px; }
.tb-pennelli-aiuto { font-size: var(--testo-xs); margin-left: auto; }
.tb-sw { display: inline-block; width: 16px; height: 8px; border-radius: 2px; vertical-align: middle; }
.tb-sw-std { background: var(--tb-std); } .tb-sw-mano { background: var(--tb-mano); } .tb-sw-rot { background: var(--tb-rot); }
.tb-sw-ap { background: var(--tb-apertura); } .tb-sw-ferie { background: #F6D5C3; } .tb-sw-libero { background: var(--bianco); border: 1px dashed var(--talpa); }
.tb-scorri { background: var(--bianco); border: 1px solid var(--linea); border-radius: 14px; }
.tb { border-collapse: separate; border-spacing: 0; font-size: var(--testo-xs); width: max-content; min-width: 100%; }
.tb th, .tb td { border-right: 1px solid #F1ECE4; border-bottom: 1px solid #F1ECE4; padding: 0; text-align: center; }
.tb thead th { background: #FBF9F5; font-weight: 600; color: var(--talpa); height: 40px; position: sticky; top: 0; z-index: 2; }
.tb thead th a { display: block; padding: 4px 0; color: inherit; text-decoration: none; line-height: 1.1; }
.tb thead th a b { display: block; font-size: var(--testo-sm); color: var(--caffe); }
.tb .tb-pers { position: sticky; left: 0; z-index: 1; background: var(--bianco); text-align: left; padding: 4px 10px;
  white-space: nowrap; font-size: var(--testo-sm); font-weight: 600; min-width: 150px; }
.tb thead .tb-pers { z-index: 3; background: #FBF9F5; }
.tb-pallino { display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; border-radius: 50%;
  background: var(--dip-colore); color: #fff; font-size: 9px; font-weight: 700; margin-right: 6px; vertical-align: middle; }
.tb .tb-g, .tb .tb-c { width: 38px; min-width: 38px; }
.tb .tb-g.tb-dom, .tb .tb-c.tb-dom { width: 28px; min-width: 28px; }
/* Le colonne dei conti restano a destra mentre il mese scorre */
.tb .tb-fisso-1, .tb .tb-fisso-2, .tb .tb-fisso-3 { position: sticky; z-index: 1; background: var(--bianco); width: 84px; min-width: 84px; max-width: 84px; white-space: normal; }
.tb .tb-fisso-1 { right: 0; } .tb .tb-fisso-2 { right: 84px; } .tb .tb-fisso-3 { right: 168px; box-shadow: -6px 0 8px -6px rgba(58, 46, 40, .18); }
.tb thead .tb-fisso-1, .tb thead .tb-fisso-2, .tb thead .tb-fisso-3 { z-index: 3; background: #FBF9F5; }
/* Il tabellone usa tutta la larghezza della pagina */
.content:has([data-vista="tabellone"]), .content:has([data-vista="settimana"]), .content:has([data-vista="giorno"]) { max-width: none; }
.tb .tb-sab { background: #F7F2F8; } .tb .tb-ven { background: #FBF9FC; } .tb .tb-dom { background: #F6F2EC; }
.tb .tb-chiuso { background: repeating-linear-gradient(135deg, #FBF9F5 0 5px, #F1ECE4 5px 10px); }
.tb thead .tb-oggi { background: var(--cobalto-velo); } .tb thead .tb-oggi b { color: var(--cobalto); }
.tb-c { height: 42px; position: relative; }
.tb-a { display: flex; flex-direction: column; justify-content: center; height: 42px; padding: 2px 3px; color: var(--caffe);
  text-decoration: none; user-select: none; }
.tb-a:hover { background: rgba(74, 111, 165, .07); }
.tb-ora { font-weight: 700; font-size: 10px; line-height: 12px; font-variant-numeric: tabular-nums; }
.tb-mini { position: relative; display: block; height: 8px; margin: 2px 0; background: #F4F0EA; border-radius: 2px; }
.tb-ap { position: absolute; top: 0; bottom: 0; background: var(--tb-apertura); }
.tb-mini i { position: absolute; top: 0; bottom: 0; border-radius: 2px; background: var(--tb-std); }
.tb-mano .tb-mini i { background: var(--tb-mano); }
.tb-rot .tb-mini i { background: var(--tb-rot); }
.tb-h { font-size: 9.5px; color: var(--talpa); line-height: 11px; }
.tb-po { font-style: normal; font-weight: 700; color: #5E3C62; }
.tb-ass { display: inline-block; font-size: 10px; font-weight: 700; padding: 1px 4px; border-radius: 5px; background: #FDE7DC; color: #9A4316; }
.tb-ass-riservato, .tb-ass-malattia, .tb-ass-altro { background: #EFEAE3; color: #5B4E43; }
.tb-ass-permesso, .tb-ass-recupero, .tb-ass-esame, .tb-ass-studio { background: #EDE5F1; color: #5E3C62; }
.tb-dopo { opacity: .45; }
.tb-num { padding: 0 6px !important; font-variant-numeric: tabular-nums; font-size: var(--testo-sm); white-space: nowrap; }
.tb-num small { color: var(--talpa); }
.tb-tot { padding: 0 8px !important; font-size: 10.5px; line-height: 1.2; white-space: nowrap; }
.tb-scarto { display: inline-block; font-size: 10px; font-weight: 700; border-radius: 999px; padding: 0 5px; margin-left: 3px; }
.tb-sopra { background: var(--ambra-velo); color: #7A5418; } .tb-sotto { background: var(--cobalto-velo); color: var(--cobalto-scuro); }
.tb-gruppo th { background: #FBF9F5; text-align: left; padding: 6px 10px !important; font-size: 11px; font-weight: 700;
  letter-spacing: .06em; text-transform: uppercase; color: var(--salvia); position: sticky; left: 0; }
.tb-presenze .tb-pers { font-weight: 400; font-size: var(--testo-xs); }
.tb-n { height: 30px; font-variant-numeric: tabular-nums; font-size: 12.5px; }
.tb-n small { font-weight: 400; color: var(--talpa); font-size: 10px; }
.tb-n-1 { background: #EEF3F9; } .tb-n-2 { background: #DCE6F2; } .tb-n-3 { background: #C5D5EA; }
.tb-n-poco { background: var(--ambra-velo); color: #7A5418; } .tb-n-zero { background: #F7E1E1; color: #9A3434; }
.tb-leg-n { display: inline-block; min-width: 20px; height: auto; padding: 0 5px; border-radius: 6px; font-weight: 700; }
.tb-legenda { display: flex; flex-wrap: wrap; gap: var(--sp-4); font-size: var(--testo-xs); color: var(--talpa); margin: var(--sp-2) 0 var(--sp-4); }
.tb-legenda .tb-sw { margin-right: 5px; }
.tb[data-pennello]:not([data-pennello="seleziona"]) .tb-c { cursor: crosshair; touch-action: none; }
.tb-scelta { outline: 2px solid var(--cobalto); outline-offset: -2px; background: var(--cobalto-velo) !important; }
.tb-arrivo { outline: 2px dashed var(--cobalto); outline-offset: -2px; }
.tb-c[data-piena] .tb-a { cursor: grab; }
.tb-casella h2 { display: flex; align-items: center; gap: 6px; }
.tb-casella .tb-pallino { width: 14px; height: 14px; }
.tb-cas-turno { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2); margin-bottom: var(--sp-2); }
.tb-cas-riga { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2); }
.tb-casella label { text-transform: none; letter-spacing: normal; font-weight: 400; margin: 0; }
.tb-casella h3 { margin: var(--sp-4) 0 var(--sp-2); font-size: var(--testo-md); }
.tb-cas-riga select { width: auto; max-width: 240px; }
.tb-cas-riga label { display: inline-flex; align-items: center; gap: var(--sp-1); font-size: var(--testo-sm); color: var(--talpa); }
.tb-cas-riga input[type="time"] { width: 7.5em; }
.tb-cas-nuovo { margin-top: var(--sp-3); padding-top: var(--sp-3); border-top: 1px solid var(--linea); }
.tb-cas-veloci { display: flex; flex-wrap: wrap; gap: var(--sp-2); margin-top: var(--sp-2); }
.tb-cas-sola { font-variant-numeric: tabular-nums; margin: 0 0 var(--sp-1); }
@media print { .tb-pennelli, .turni-massa { display: none; } .tb-scorri { border: 0; } }
.turni-rot { display: flex; flex-wrap: wrap; gap: var(--sp-2); align-items: center; border: 1px solid var(--linea); border-radius: 10px; padding: var(--sp-2) var(--sp-3); }
.turni-rot label { display: inline-flex; align-items: center; gap: var(--sp-1); font-size: var(--testo-sm); }
.turni-rot input[type="time"] { width: 7.5em; }

/* ---- La settimana a strisce e il giorno (0.102.0) ------------------------ */
.tb-sett .tb-g.tb-gs, .tb-sett .tb-c.tb-cs { width: 150px; min-width: 150px; }
.tb-sett .tb-g.tb-gs.tb-dom, .tb-sett .tb-c.tb-cs.tb-dom { width: 110px; min-width: 110px; }
.tb-sett thead th a { font-size: var(--testo-xs); }
.tb-sett thead th a b { display: inline; font-size: var(--testo-md); }
.tb-motivo { display: block; font-size: 10px; font-weight: 400; color: var(--talpa); padding-bottom: 3px; }
.tb-striscia { position: relative; display: block; height: 36px; padding: 0; }
.tb-striscia .tb-ap { top: 0; bottom: 0; }
.tb-sb { position: absolute; top: 9px; height: 18px; border-radius: 5px; background: var(--tb-std); color: #fff;
  font-size: 10px; font-weight: 700; line-height: 18px; white-space: nowrap; overflow: hidden; text-align: center;
  box-shadow: 0 1px 2px rgba(0, 0, 0, .12); font-variant-numeric: tabular-nums; }
.tb-mano .tb-sb { background: var(--tb-mano); } .tb-rot .tb-sb { background: var(--tb-rot); }
.tb-sb.tb-sb-ass { background: var(--bianco); color: #5E3C62; border: 1.5px dashed #A785AB; box-shadow: none; top: 9px; }
.tb-striscia .tb-ass { position: absolute; left: 6px; top: 9px; }
.tb-curve td, .tb-curve th { background: #FBF9F5; }
.tb-curva-cella { position: relative; height: 64px; padding: 2px 0 0 !important; }
.tb-curva { display: block; width: 100%; height: 60px; }
.tb-curva-ap { fill: var(--tb-apertura); }
.tb-curva-area { fill: rgba(74, 111, 165, .18); stroke: var(--cobalto); stroke-width: 1.2; vector-effect: non-scaling-stroke; }
.tb-curva-numeri { position: absolute; top: 3px; right: 4px; display: flex; gap: 3px; }
.tb-curva-numeri .tb-n { height: auto; padding: 0 4px; border-radius: 6px; font-size: 11px; border: 1px solid #DCE6DF; }
.tb-curve .tb-pers small { display: block; font-weight: 400; }
.tb-oltre { color: #7A5418; }

.gg-pagina { display: grid; grid-template-columns: minmax(0, 1fr) 280px; gap: var(--sp-4); align-items: start; }
.gg-linea { padding: var(--sp-3) var(--sp-3) var(--sp-2); }
.gg-riga { display: grid; grid-template-columns: 170px minmax(0, 1fr) 56px; align-items: center; border-bottom: 1px solid #F1ECE4; min-height: 38px; }
.gg-nome { font-size: var(--testo-sm); font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; padding-right: var(--sp-2); }
.gg-ore { text-align: right; font-size: var(--testo-xs); color: var(--talpa); font-variant-numeric: tabular-nums; }
.gg-traccia { position: relative; height: 34px;
  background: repeating-linear-gradient(90deg, transparent 0, transparent calc(100% / 14 - 1px), #F1ECE4 calc(100% / 14 - 1px), #F1ECE4 calc(100% / 14)); }
.gg-linea[data-puo-gestire] .gg-traccia:not(.gg-ferma) { cursor: crosshair; touch-action: none; }
.gg-traccia .tb-ap { position: absolute; top: 0; bottom: 0; background: var(--tb-apertura); opacity: .7; }
.gg-traccia.gg-ferma { background: repeating-linear-gradient(135deg, #FBF9F5 0 6px, #F3EEE6 6px 12px); }
.gg-traccia-asse { position: relative; height: 22px; }
.gg-traccia-asse span { position: absolute; top: 4px; transform: translateX(-50%); font-size: 11px; color: var(--talpa); }
.gg-asse { border-bottom: 1px solid var(--linea); min-height: 26px; }
.gg-barra { position: absolute; top: 6px; height: 22px; border-radius: 7px; background: var(--tb-std); color: #fff; text-decoration: none;
  display: flex; align-items: center; justify-content: center; font-size: 11.5px; font-weight: 700; white-space: nowrap; overflow: hidden;
  box-shadow: 0 1px 2px rgba(0, 0, 0, .14); font-variant-numeric: tabular-nums; user-select: none; }
.gg-barra:hover { color: #fff; filter: brightness(1.08); }
.gg-mano { background: var(--tb-mano); } .gg-rot { background: var(--tb-rot); }
.gg-bloccata { outline: 2px dashed rgba(58, 46, 40, .45); outline-offset: 1px; }
.gg-maniglia { position: absolute; top: 0; bottom: 0; width: 9px; }
.gg-maniglia::after { content: ""; position: absolute; top: 5px; bottom: 5px; left: 3px; width: 3px; border-radius: 2px; background: rgba(255, 255, 255, .6); }
.gg-m-inizio { left: 0; } .gg-m-fine { right: 0; }
.gg-linea[data-puo-gestire] .gg-maniglia { cursor: ew-resize; }
.gg-linea[data-puo-gestire] .gg-barra { cursor: grab; }
.gg-nuova { background: rgba(74, 111, 165, .25); color: var(--cobalto-scuro); border: 2px dashed var(--cobalto); box-shadow: none; }
.gg-in-moto { box-shadow: 0 6px 16px rgba(58, 46, 40, .25); z-index: 2; }
.gg-permesso { position: absolute; top: 6px; height: 22px; border-radius: 7px; border: 1.5px dashed #A785AB; background: rgba(255, 255, 255, .85);
  color: #5E3C62; font-size: 11px; font-weight: 700; display: flex; align-items: center; justify-content: center; z-index: 1; }
.gg-assente { position: absolute; left: 8px; top: 7px; font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 6px; background: #EFEAE3; color: #5B4E43; }
.gg-curva { position: relative; height: 120px; }
.gg-curva svg { display: block; width: 100%; height: 120px; }
.gg-curva-righe { stroke: #EAE4DB; stroke-dasharray: 3 4; vector-effect: non-scaling-stroke; }
.gg-fascia-num { position: absolute; top: 4px; transform: translateX(-50%); height: auto; padding: 1px 7px; border-radius: 7px;
  font-size: 11.5px; white-space: nowrap; border: 1px solid #DCE6DF; color: #2B6A5F; }
.gg-aiuto { font-size: var(--testo-xs); margin: var(--sp-2) 0 0; }
.gg-titoletto { font-size: var(--testo-md); margin: 0 0 var(--sp-2); }
.gg-fascia { border-top: 1px solid #F1ECE4; padding: var(--sp-2) 0; }
.gg-fascia:first-of-type { border-top: 0; }
.gg-fascia-testa { display: flex; justify-content: space-between; align-items: center; gap: var(--sp-2); font-size: var(--testo-sm); }
.gg-fascia-n { font-family: var(--font-display); font-size: 24px; border-radius: 8px; padding: 0 8px; }
.gg-fascia p { margin: 2px 0 0; font-size: var(--testo-xs); }
.gg-impostazioni summary { cursor: pointer; font-weight: 600; }
.gg-impostazioni[open] summary { margin-bottom: var(--sp-3); }
@media (max-width: 1000px) {
  .gg-pagina { grid-template-columns: 1fr; }
  .gg-riga { grid-template-columns: 96px minmax(0, 1fr) 40px; }
}
.tb-sett .tb-g.tb-gs, .tb-sett .tb-c.tb-cs { width: 134px; min-width: 134px; }
.tb-sett .tb-g.tb-gs.tb-dom, .tb-sett .tb-c.tb-cs.tb-dom { width: 96px; min-width: 96px; }
.tb-sett .tb-pers { min-width: 130px; }
.tb-sett .tb-fisso-1, .tb-sett .tb-fisso-2, .tb-sett .tb-fisso-3 { width: 76px; min-width: 76px; max-width: 76px; }
.tb-sett .tb-fisso-2 { right: 76px; } .tb-sett .tb-fisso-3 { right: 152px; }


/* ===========================================================================
   Le ore dal telefono (0.103.0): la scheda «Il tuo orario di oggi», la
   settimana, il modulo del giorno con − e +, il mese con l'invio, e quello
   che ne vede la segreteria. Le forme sono quelle della bozza approvata.
   =========================================================================== */
.oo-scheda { background: linear-gradient(160deg, var(--cobalto), var(--cobalto-scuro)); color: var(--bianco);
    border-radius: 18px; padding: 16px; margin-bottom: 14px; box-shadow: 0 6px 16px rgba(58,70,110,.22); }
.oo-scheda.e-assenza { background: linear-gradient(160deg, var(--oo-assenza), var(--oo-assenza-scura)); }
.oo-scheda p { margin: 0; }
.oo-eti { font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; opacity: .85; }
.oo-ore { font-family: var(--font-display); font-size: 34px; font-weight: 600; margin: 4px 0 2px !important; }
.oo-sotto { font-size: 14px; opacity: .95; }
.oo-vuoto { margin-top: 6px !important; }
.oo-nota { font-size: 13px; margin-top: 6px !important; opacity: .9; font-style: italic; }
.oo-tasti { display: flex; gap: 8px; margin-top: 14px; }
.oo-tasti form { flex: 1; display: flex; }
.oo-si, .oo-no { flex: 1; min-height: 48px; border-radius: 12px; font-weight: 700; font-size: 15px;
    font-family: inherit; cursor: pointer; }
.oo-si { background: var(--bianco); color: var(--cobalto-scuro); border: 0; }
.oo-scheda.e-assenza .oo-si { color: var(--oo-assenza-scura); }
.oo-no { background: rgba(255,255,255,.15); color: var(--bianco); border: 1px solid rgba(255,255,255,.4); }
.oo-modifica { display: flex; width: 100%; justify-content: space-between; align-items: center; margin-top: 12px;
    background: rgba(255,255,255,.16); color: var(--bianco); border: 1px solid rgba(255,255,255,.35);
    border-radius: 12px; padding: 10px 12px; font: inherit; font-weight: 700; cursor: pointer; }
.oo-modifica u { font-weight: 600; font-size: 13px; }
.oo-titoletto { margin: 4px 0 6px; font-size: 12px; font-weight: 700; color: var(--talpa);
    text-transform: uppercase; letter-spacing: .06em; }
.oo-settimana { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; margin-bottom: 10px; }
.oo-settimana a { background: var(--bianco); border: 1px solid var(--linea); border-radius: 10px; padding: 6px 2px;
    text-align: center; font-size: 11px; color: var(--talpa); text-decoration: none; min-width: 0; }
.oo-settimana a b { display: block; font-size: 15px; color: var(--caffe); }
.oo-settimana a i { display: block; font-style: normal; font-weight: 700; font-size: 10.5px; margin-top: 2px;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.oo-settimana a.e-fatto { background: var(--oo-fatto); border-color: var(--oo-fatto-linea); }
.oo-settimana a.e-fatto i { color: var(--oo-fatto-testo); }
.oo-settimana a.e-assenza { background: var(--oo-assenza-velo); border-color: var(--oo-assenza-linea); }
.oo-settimana a.e-assenza i { color: var(--oo-assenza-scura); }
.oo-settimana a.e-niente { opacity: .55; }
.oo-settimana a.e-oggi { outline: 2px solid var(--cobalto); outline-offset: -1px; opacity: 1; }
.oo-mese { display: flex; justify-content: space-between; align-items: center; background: var(--bianco);
    border: 1px solid var(--linea); border-radius: 12px; padding: 10px 12px; margin-bottom: 14px;
    color: var(--caffe); text-decoration: none; }
.oo-mese small { display: block; color: var(--talpa); font-size: 12px; }
.oo-mese b { background: var(--cobalto-velo); color: var(--cobalto-scuro); border-radius: 999px; padding: 2px 10px; font-size: 13px; }

.ore-passo { display: flex; align-items: flex-end; gap: 10px; margin-bottom: 6px; }
.ore-passo label { flex: 1; display: flex; flex-direction: column; gap: 3px; font-size: 11px; font-weight: 700;
    color: var(--talpa); text-transform: uppercase; letter-spacing: .05em; text-align: center; }
.ore-passo input { font-family: var(--font-display); font-size: 26px; text-align: center; padding: 6px; }
.ore-passo-btn { width: 48px; height: 48px; flex: none; border-radius: 12px; border: 0; cursor: pointer;
    background: var(--cobalto-velo); color: var(--cobalto); font-size: 26px; font-weight: 700; line-height: 1; }
.ore-scarto { margin: 0 0 10px; padding: 7px 10px; border-radius: 10px; font-size: 13px; font-weight: 600;
    background: var(--oo-fatto); color: var(--oo-fatto-testo); }
.ore-scarto.e-diverso { background: var(--ambra-velo); color: var(--oo-scarto); }
.ore-nota { display: flex; flex-direction: column; gap: 3px; margin-bottom: 10px; font-size: 11px; font-weight: 700;
    color: var(--talpa); text-transform: uppercase; letter-spacing: .05em; }
.ore-nota textarea { font-size: 15px; text-transform: none; letter-spacing: 0; font-weight: 400; resize: vertical; }
.ore-nota-segno svg { width: 15px; height: 15px; color: var(--talpa); vertical-align: -2px; }
.oo-finestra .modal-body { padding-top: 14px; }
.oo-finestra .ore-modulo { padding: 0; }
.oo-finestra .ore-modulo .btn { width: 100%; min-height: 48px; }

.ore-tessere { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; margin: 12px 0 4px; }
.ore-tessere div { background: var(--bianco); border: 1px solid var(--linea); border-radius: 12px; padding: 8px;
    text-align: center; font-size: 11px; color: var(--talpa); }
.ore-tessere b { display: block; font-family: var(--font-display); font-size: 19px; color: var(--caffe); }
.ore-tessere b.e-diverso { color: var(--oo-scarto); }
.ore-avanza { height: 8px; border-radius: 4px; background: var(--linea); overflow: hidden; margin: 10px 0 4px; }
.ore-avanza span { display: block; height: 100%; background: var(--salvia); }
.ore-avanza-conto { margin: 0 0 8px; font-size: 13px; }
.ore-avviso { background: var(--ambra-velo); border: 1px solid var(--oo-ambra-linea); border-radius: 12px; padding: 9px 12px;
    margin-top: 10px; font-size: 14px; display: flex; flex-wrap: wrap; gap: 4px 8px; }
.ore-invio { margin-top: 12px; text-align: center; }
.ore-invio p { margin: 0 0 6px; }
.ore-invia { width: 100%; min-height: 48px; }
.ore-invia:disabled { opacity: .45; cursor: not-allowed; }
.ore-invio-nota { font-size: 13px; margin-top: 6px !important; }
.ore-invio-stato { margin: 10px 0 0; display: flex; gap: 6px; flex-wrap: wrap; }
.ore-diversi-titolo { font-size: 15px; margin: 0 0 4px; }
.ore-diverso-riga { display: flex; gap: 12px; padding: 9px 0; border-top: 1px solid var(--linea); font-size: 14px; }
.ore-diverso-riga small { display: block; }
.ore-diverso-giorno { font-weight: 700; min-width: 72px; }
.ore-flusso { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 12px 0; }
.ore-flusso-passo { border: 1px solid var(--linea); border-radius: 12px; padding: 6px 12px; font-size: 13px; }
.ore-flusso-passo b { font-family: var(--font-display); font-size: 17px; }
.ore-flusso-passo.e-mancano { background: var(--ambra-velo); border-color: var(--oo-ambra-linea); }
.ore-flusso-passo.e-inviati { background: var(--oo-fatto); border-color: var(--oo-fatto-linea); }
.ore-stato .badge { white-space: nowrap; }


/* ===========================================================================
   L'app operatori ridisegnata (0.104.0). Carte morbide, titoli grandi,
   bersagli grandi in basso dove arriva il pollice; la testata uguale per
   tutte le pagine; la barra con il «+» al centro. Tutto sotto .page--turno
   e nav[data-turno]: le altre aree non cambiano.
   =========================================================================== */
.page--turno { max-width: 560px; padding-top: calc(10px + env(safe-area-inset-top, 0px)); }
.op-offline { position: sticky; top: 0; z-index: 45; background: var(--op-scuro); color: var(--bianco);
    font-size: 13px; font-weight: 700; text-align: center; padding: 7px 12px; }

.op-testa { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; margin: 4px 0 14px; }
.op-testa-testo { min-width: 0; }
.op-sopra { margin: 0; font-size: 13px; font-weight: 600; color: var(--talpa); }
.op-indietro { display: inline-flex; align-items: center; gap: 2px; text-decoration: none; color: var(--cobalto); }
.op-indietro svg { width: 16px; height: 16px; transform: scaleX(-1); }
.op-titolo { margin: 1px 0 0; font-family: var(--font-display); font-size: 27px; line-height: 1.12; overflow-wrap: anywhere; }
.op-avatar { flex: none; width: 40px; height: 40px; border-radius: 50%; display: inline-flex; align-items: center;
    justify-content: center; background: var(--cobalto-velo); color: var(--cobalto-scuro); font-weight: 700;
    font-size: 14px; text-decoration: none; }
.op-avatar--grande { width: 56px; height: 56px; font-size: 19px; }

nav.app-tabs[data-turno] { align-items: flex-end; background: rgba(255,255,255,.97);
    box-shadow: 0 -4px 18px rgba(58,46,40,.06); padding-top: 4px; }
nav.app-tabs[data-turno] a { padding: 8px 2px 10px; font-size: 11px; }
nav.app-tabs[data-turno] a.active { color: var(--cobalto); }
.op-piu { flex: 0 0 auto; width: 56px; height: 56px; margin: -22px 6px 8px; border: 0; border-radius: 19px;
    background: var(--cobalto); color: var(--bianco); display: inline-flex; align-items: center; justify-content: center;
    box-shadow: 0 8px 18px rgba(74,111,165,.4); cursor: pointer; }
.op-piu svg { width: 26px; height: 26px; }

dialog.op-foglio { margin: auto auto 0; width: 100%; max-width: 560px; border-radius: 24px 24px 0 0; }
.op-azioni { display: flex; flex-direction: column; gap: 10px; padding-top: 6px; }
.op-azione { display: flex; align-items: center; gap: 12px; border: 1.5px solid var(--linea); border-radius: 16px;
    padding: 12px; text-decoration: none; color: var(--caffe); }
.op-azione b { display: block; font-size: 15.5px; }
.op-azione small { display: block; color: var(--talpa); font-size: 12.5px; }
.op-azione.e-spenta { opacity: .7; }
.op-azione .op-chip { margin-left: auto; }
.op-azione-ico, .op-piastrella-ico { flex: none; width: 40px; height: 40px; border-radius: 13px;
    display: inline-flex; align-items: center; justify-content: center; }
.op-azione-ico svg, .op-piastrella-ico svg { width: 21px; height: 21px; }
.op-ico--cobalto { background: var(--cobalto-velo); color: var(--cobalto-scuro); }
.op-ico--salvia { background: var(--op-velo-salvia); color: var(--salvia-scura); }
.op-ico--ambra { background: var(--op-velo-ambra); color: #9A6512; }
.op-ico--ametista { background: var(--op-velo-ametista); color: var(--ametista); }
.op-ico--talpa { background: var(--op-velo-talpa); color: var(--talpa); }
.op-ico--corallo { background: var(--op-velo-corallo); color: var(--corallo); }
.op-chip { display: inline-flex; align-items: center; border-radius: 999px; padding: 2px 9px; font-size: 12px;
    font-weight: 700; background: var(--op-velo-talpa); color: var(--talpa); }
.op-chip--ambra { background: var(--op-velo-ambra); color: var(--oo-scarto); }

.op-piastrelle { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.op-piastrella { position: relative; display: flex; flex-direction: column; justify-content: space-between; gap: 14px;
    min-height: 112px; background: var(--bianco); border-radius: 20px; padding: 14px; box-shadow: var(--op-ombra);
    text-decoration: none; color: var(--caffe); }
.op-piastrella:active { transform: scale(.98); }
.op-piastrella-testo b { display: block; font-size: 15.5px; }
.op-piastrella-testo small { display: block; margin-top: 2px; font-size: 12.5px; color: var(--talpa); line-height: 1.3; }
.op-piastrella .op-chip { position: absolute; top: 14px; right: 14px; }
.op-piastrella.e-spenta { box-shadow: none; border: 1.5px dashed var(--linea); background: transparent; }
.op-piastrella.e-accesa .op-piastrella-ico { box-shadow: 0 0 0 6px rgba(232,161,61,.15); }
.op-lampada { position: absolute; top: 18px; right: 18px; width: 12px; height: 12px; border-radius: 50%;
    background: var(--ambra); box-shadow: 0 0 0 5px rgba(232,161,61,.2); }

.op-vuoto { background: var(--bianco); border-radius: 20px; padding: 28px 18px; text-align: center; color: var(--talpa);
    box-shadow: var(--op-ombra); }
.op-vuoto svg { width: 34px; height: 34px; opacity: .5; }
.op-sezione { margin: 18px 4px 8px; font-size: 11.5px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase;
    color: var(--talpa); }
.op-elenco { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 7px; }
.op-elenco form { margin: 0; }
.op-ragazzo, .op-scelta, .op-persona > summary { display: flex; align-items: center; gap: 11px; background: var(--bianco);
    border-radius: 16px; padding: 10px 11px; box-shadow: var(--op-ombra); }
.op-scelta, .op-scelta.turno-scelta { flex-direction: row; text-decoration: none; color: var(--caffe); width: 100%;
    border: 0; font: inherit; text-align: left; cursor: pointer; }
.op-scelta--esci b { color: var(--corallo); }
.op-ragazzo-nome { flex: 1; min-width: 0; }
.op-ragazzo-nome b { display: block; font-size: 15.5px; font-weight: 700; }
.op-ragazzo-nome small { display: flex; flex-wrap: wrap; gap: 4px 8px; margin-top: 1px; font-size: 12.5px; color: var(--talpa); }
.op-apri { color: var(--talpa); display: inline-flex; }
.op-apri svg { width: 17px; height: 17px; }
.op-iniziale { flex: none; width: 38px; height: 38px; border-radius: 50%; display: inline-flex; align-items: center;
    justify-content: center; color: var(--bianco); font-weight: 800; font-size: 14px; }
.op-iniziale--1 { background: var(--cobalto); } .op-iniziale--2 { background: var(--salvia); }
.op-iniziale--3 { background: var(--ambra); } .op-iniziale--4 { background: var(--ametista); }
.op-iniziale--5 { background: var(--corallo); }

/* L'appello: la spunta è un bersaglio grande a destra */
.op-filtri { display: flex; gap: 4px; background: var(--op-velo-talpa); border-radius: 13px; padding: 3px; margin-bottom: 10px; }
.op-filtri button { flex: 1; border: 0; background: transparent; border-radius: 10px; padding: 9px 4px; font: inherit;
    font-size: 13px; font-weight: 700; color: var(--talpa); cursor: pointer; }
.op-filtri button.on { background: var(--bianco); color: var(--caffe); box-shadow: 0 1px 2px rgba(0,0,0,.08); }
.op-azioni-riga { display: flex; gap: 8px; margin-bottom: 10px; }
.op-azioni-riga > * { flex: 1; }
.op-bottone { display: inline-flex; align-items: center; justify-content: center; gap: 7px; width: 100%; min-height: 46px;
    border-radius: 14px; border: 0; font: inherit; font-weight: 700; font-size: 14.5px; text-decoration: none; cursor: pointer; }
.op-bottone svg { width: 18px; height: 18px; }
.op-bottone--tenue { background: var(--cobalto-velo); color: var(--cobalto-scuro); }
.op-bottone--pieno { background: var(--cobalto); color: var(--bianco); margin-top: 10px; }
.op-elenco[data-filtro="vuoto"] .op-ragazzo:not([data-stato="vuoto"]),
.op-elenco[data-filtro="presente"] .op-ragazzo:not([data-stato="presente"]) { display: none; }
.op-spunta-btn { flex: none; width: 48px; height: 48px; border-radius: 15px; border: 2px dashed #D8CFC3;
    background: #F4EFE8; color: transparent; display: inline-flex; align-items: center; justify-content: center; cursor: pointer; }
.op-spunta-btn svg { width: 24px; height: 24px; }
.op-ragazzo.e-presente .op-spunta-btn, .op-spunta-btn.e-sola { border: 0; background: var(--salvia); color: var(--bianco); }
.op-ragazzo.e-attesa .op-spunta-btn { opacity: .6; }
.op-ragazzo.e-segnalata .op-ragazzo-nome b { color: var(--talpa); }
.op-segnalata { color: var(--oo-scarto) !important; font-weight: 700; }
.op-ospiti { display: flex; align-items: center; gap: 10px; margin-top: 14px; background: var(--bianco); border-radius: 16px;
    padding: 10px 12px; box-shadow: var(--op-ombra); }
.op-ospiti > span { flex: 1; }
.op-ospiti small { display: block; font-size: 12px; color: var(--talpa); }
.op-ospiti form { margin: 0; }
.op-ospiti-n { font-family: var(--font-display); font-size: 22px; min-width: 24px; text-align: center; }
.op-passo { width: 42px; height: 42px; border-radius: 12px; border: 0; background: var(--cobalto-velo);
    color: var(--cobalto-scuro); display: inline-flex; align-items: center; justify-content: center; cursor: pointer; }
.op-passo svg { width: 18px; height: 18px; }
.op-conto { position: sticky; bottom: calc(86px + env(safe-area-inset-bottom, 0px)); z-index: 30; margin-top: 16px;
    display: flex; align-items: center; gap: 10px; background: var(--op-scuro); color: var(--bianco); border-radius: 18px;
    padding: 10px 12px 10px 16px; box-shadow: 0 10px 24px rgba(0,0,0,.22); font-size: 14px; }
.op-conto b { font-size: 16px; }
.op-conto-fine { margin-left: auto; background: var(--bianco); color: var(--op-scuro); border-radius: 11px;
    padding: 8px 14px; font-weight: 800; text-decoration: none; font-size: 13.5px; }

/* Gli iscritti: la riga si apre sul nome */
.op-persona > summary { list-style: none; cursor: pointer; }
.op-persona > summary::-webkit-details-marker { display: none; }
.op-persona[open] > summary { border-radius: 16px 16px 0 0; box-shadow: none; }
.op-persona[open] .op-apri svg { transform: rotate(90deg); }
.op-persona-dentro { background: var(--bianco); border-radius: 0 0 16px 16px; padding: 4px 14px 14px 60px;
    box-shadow: var(--op-ombra); }
.op-persona.e-staff .op-iniziale { opacity: .75; }
.op-segno { display: inline-flex; align-items: center; gap: 3px; }
.op-segno svg { width: 13px; height: 13px; }
.op-segno--salute { color: var(--corallo); font-weight: 700; }
.op-segno--stop { color: var(--corallo); }

/* I miei turni: vedi in fondo (0.113.0) */
.op-nota-piede { margin: 14px 4px 0; font-size: 13px; }

/* Il profilo */
.op-profilo { display: flex; align-items: center; gap: 14px; background: var(--bianco); border-radius: 20px; padding: 16px;
    box-shadow: var(--op-ombra); margin-bottom: 14px; }
.op-profilo p { margin: 0; }
.op-profilo-nome { font-family: var(--font-display); font-size: 19px; }
.op-profilo-dove { color: var(--talpa); font-size: 14px; }

/* Le pagine condivise (luci, ore), vestite da app: carte morbide */
.page--turno .card { border-radius: 20px; box-shadow: var(--op-ombra); border-color: transparent; }
.page--turno .oo-scheda { border-radius: 20px; }
.page--turno .ore-giorno { border-radius: 14px; border-color: transparent; box-shadow: var(--op-ombra); }
.page--turno .nota-app { margin-top: 22px; }
.page--turno .ore-giorno.e-pieno { border-left: 4px solid var(--cobalto); }
.op-attivita { display: flex; align-items: center; gap: 8px; background: var(--bianco); border-radius: 16px;
    padding: 9px 9px 9px 14px; box-shadow: var(--op-ombra); }
.op-chip--salvia { background: var(--op-velo-salvia); color: var(--salvia-scura); }
.op-mini { flex: none; width: 44px; height: 44px; border-radius: 13px; display: inline-flex; align-items: center;
    justify-content: center; background: var(--cobalto-velo); color: var(--cobalto-scuro); }
.op-mini svg { width: 20px; height: 20px; }
.op-mini--salvia { background: var(--op-velo-salvia); color: var(--salvia-scura); }


/* ===========================================================================
   Le luci del campo dall'app (0.104.2): il campo di notte in alto, i due
   tasti grandi, una riga con la levetta per ogni gruppo.
   =========================================================================== */
.op-notte { position: relative; overflow: hidden; border-radius: 24px; padding: 6px 14px 14px; margin-bottom: 6px;
    background: radial-gradient(120% 80% at 50% 0%, var(--op-notte) 0%, var(--op-notte-fondo) 70%); color: var(--bianco);
    box-shadow: 0 12px 28px rgba(13,19,32,.35); }
.op-notte::before { content: ""; position: absolute; inset: 0; pointer-events: none; opacity: 0; transition: opacity .6s ease;
    background: radial-gradient(70% 55% at 50% 30%, rgba(255,217,138,.28), transparent 70%); }
.op-notte.e-accesa::before { opacity: 1; }
.op-notte-campo { position: relative; margin: 0 -6px; }
.op-notte-campo svg { display: block; width: 100%; height: auto; max-height: 210px; }
.op-notte-stato { position: relative; text-align: center; margin: -4px 0 12px; }
.op-notte-stato b { display: block; font-family: var(--font-display); font-size: 25px; font-weight: 600; }
.op-notte.e-accesa .op-notte-stato b { color: var(--op-faro-chiaro); }
.op-notte-stato span { font-size: 13px; color: rgba(255,255,255,.7); }
.op-notte-comandi { position: relative; margin: 0; }
.op-durate { border: 0; margin: 0 0 12px; padding: 0; display: flex; flex-wrap: wrap; gap: 6px; }
.op-durate-titolo { margin: 0 0 7px; font-size: 11px; font-weight: 800; letter-spacing: .08em;
    text-transform: uppercase; color: rgba(255,255,255,.6); }
.op-durata { flex: none; position: relative; cursor: pointer; margin: 0; text-transform: none; letter-spacing: 0; }
.op-durata input[type=radio] { position: absolute; opacity: 0; pointer-events: none; }
.op-durata > span { display: inline-flex; align-items: center; gap: 6px; min-height: 38px; padding: 0 14px; border-radius: 999px;
    background: rgba(255,255,255,.1); color: var(--bianco); font-weight: 700; font-size: 14px; white-space: nowrap; }
.op-durata input:checked + span { background: var(--bianco); color: var(--op-notte); }
.op-durata input:focus-visible + span { outline: 2px solid var(--op-faro); outline-offset: 2px; }
.op-durata--ora input[type=time] { background: transparent; border: 0; color: inherit; font: inherit; padding: 0; width: 5.6em;
    min-height: 0; color-scheme: dark; }
.op-durata--ora input:checked + span input[type=time] { color-scheme: light; }
.op-notte-tasti { display: flex; gap: 8px; }
.op-tasto { flex: 1; display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: 54px; border: 0;
    border-radius: 16px; font: inherit; font-weight: 800; font-size: 15.5px; cursor: pointer; }
.op-tasto svg { width: 21px; height: 21px; }
.op-tasto--accendi { background: linear-gradient(180deg, var(--op-faro-chiaro), var(--op-faro)); color: #3D2A06;
    box-shadow: 0 6px 18px rgba(245,184,61,.35); }
.op-tasto--spegni { background: rgba(255,255,255,.12); color: var(--bianco); border: 1px solid rgba(255,255,255,.22); }
.op-tasto:active { transform: scale(.98); }

.op-luce { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; background: var(--bianco); border-radius: 18px;
    padding: 12px 12px 12px 12px; box-shadow: var(--op-ombra); transition: background .35s ease; }
.op-luce form { margin: 0; }
.op-lampione { flex: none; width: 46px; height: 46px; border-radius: 15px; display: inline-flex; align-items: center;
    justify-content: center; background: var(--op-velo-talpa); color: var(--talpa); transition: all .35s ease; }
.op-lampione svg { width: 23px; height: 23px; }
.op-luce.e-accesa .op-lampione { background: var(--op-velo-ambra); color: #B87512; box-shadow: 0 0 0 6px rgba(245,184,61,.16), 0 0 22px rgba(245,184,61,.35); }
.op-luce.e-attesa .op-lampione { animation: luce-pulsa 1.1s ease-in-out infinite; }
.op-luce .luce-stato { margin: 0; font-size: 12.5px; font-weight: 700; letter-spacing: 0; text-transform: none; color: var(--talpa); }
.op-luce.e-accesa .luce-stato { color: #B4761C; }
.op-luce.e-attesa .luce-stato { color: var(--cobalto); }
.op-luce.e-fermo .luce-stato { color: var(--corallo); }
.op-luce-quando { margin-left: 4px; }
.op-leva { position: relative; width: 62px; height: 36px; border-radius: 999px; border: 0; padding: 0; cursor: pointer;
    background: #DDD3C6; transition: background .25s ease; }
.op-leva span { position: absolute; top: 3px; left: 3px; width: 30px; height: 30px; border-radius: 50%; background: var(--bianco);
    box-shadow: 0 2px 5px rgba(0,0,0,.2); transition: left .25s ease; }
.op-leva[aria-checked="true"] { background: var(--op-faro); }
.op-leva[aria-checked="true"] span { left: 29px; }
.op-luce.e-attesa .op-leva { opacity: .7; }
.op-luce-auto { flex-basis: 100%; padding-left: 58px; margin-top: -6px !important; }
.op-luce-auto button { border: 0; background: none; padding: 0; color: var(--cobalto); font: inherit; font-size: 13px;
    font-weight: 700; cursor: pointer; text-decoration: underline; }

.op-turno-luci { background: var(--bianco); border-radius: 18px; padding: 12px 14px; box-shadow: var(--op-ombra); }
.op-turno-luci-testa { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; margin-bottom: 9px; }
.op-turno-luci-testa b { font-size: 16px; font-variant-numeric: tabular-nums; }
.op-turno-luci-testa span:not(.op-chip) { color: var(--talpa); font-size: 13px; }
.op-turno-luci-scelte { display: flex; flex-wrap: wrap; gap: 6px; margin: 0; }
.op-turno-luci-scelte button { min-height: 38px; padding: 0 13px; border-radius: 999px; border: 1.5px solid var(--linea);
    background: var(--bianco); color: var(--caffe); font: inherit; font-weight: 700; font-size: 14px; cursor: pointer; }
.op-turno-luci-scelte button.on { background: var(--op-faro); border-color: var(--op-faro); color: #3D2A06; }
.op-turno-luci-scelte .op-togli { border-color: transparent; color: var(--talpa); text-decoration: underline; }

/* «Ricordami su questo telefono» (0.104.3): una casella, non un'etichetta di campo */
.login-ricordami { display: flex; align-items: center; gap: 8px; margin: 16px 0 2px; font-size: 15px;
    font-weight: 600; letter-spacing: 0; text-transform: none; color: var(--caffe); cursor: pointer; }
.login-ricordami input { width: 20px; height: 20px; margin: 0; flex: none; }
.login-ricordami-nota { margin: 0 0 6px 28px; font-size: 12.5px; }

/* ---------------------------------------------- Riepilogo contributi (0.105.0) */
/* La tabella del foglio ha fino a una dozzina di colonne: la pagina si allarga
   (come il tabellone dei turni) invece di farla scorrere di lato. */
.content:has(.riep-contributi) { max-width: 1440px; }
.riep-contributi { font-size: var(--testo-sm); }
.riep-contributi th, .riep-contributi td { padding-left: 8px; padding-right: 8px; }
.riep-contributi tbody td:first-child { min-width: 11rem; }
.riep-contributi td small { display: block; font-size: 12px; color: var(--talpa); font-weight: 400; }
.riep-contributi th.num, .riep-contributi td.num { text-align: right; white-space: nowrap; }
.riep-contributi thead th { white-space: normal; vertical-align: bottom; }
.riep-contributi thead th.num { white-space: normal; }
.riep-contributi tbody td:first-child { border-left: 4px solid transparent; }
.riep-contributi tr.riep-in_corso td { background: var(--riep-corso); }
.riep-contributi tr.riep-in_corso td:first-child { border-left-color: var(--riep-corso-linea); }
.riep-contributi tr.riep-da_rendicontare td { background: var(--riep-darend); }
.riep-contributi tr.riep-da_rendicontare td:first-child { border-left-color: var(--riep-darend-linea); }
.riep-contributi tr.riep-rendicontato td { background: var(--riep-rend); }
.riep-contributi tr.riep-rendicontato td:first-child { border-left-color: var(--riep-rend-linea); }
.riep-contributi tr.row-link:hover td { filter: brightness(.97); }
.riep-contributi tfoot td { font-weight: var(--peso-forte); border-top: 2px solid var(--caffe); }
.riep-stato { display: block; font-weight: var(--peso-forte); white-space: nowrap; }
.riep-azione { background: none; border: 0; padding: 0; margin: 2px 0 0; font: inherit; font-size: 12px;
    color: var(--cobalto); text-decoration: underline; cursor: pointer; white-space: nowrap; }
.riep-azione:hover { color: var(--cobalto-scuro); }
.riep-interruttore { display: inline-flex; align-items: center; min-height: var(--alt-controllo); padding: 0 var(--sp-3);
    border: 1px solid var(--linea); border-radius: var(--raggio-pillola); background: var(--carta);
    font-size: var(--testo-sm); font-weight: var(--peso-forte); color: var(--talpa); text-decoration: none; white-space: nowrap; }
.riep-interruttore[aria-pressed="true"] { background: var(--bianco); color: var(--cobalto); box-shadow: var(--ombra); border-color: var(--cobalto); }
.riep-nota { margin: var(--sp-2) 0 0; font-size: var(--testo-sm); }

/* ---------------------------------------------- Richieste del campo (0.106.0) */
.rich-scheda { border-left: 4px solid var(--salvia); }
.rich-scheda.e-attenzione { border-left-color: var(--ambra); }
.rich-testa h2 { margin: 0; font-size: 18px; }
.rich-testa p { margin: 2px 0 0; }
.rich-segnali { list-style: none; padding: 0; margin: 12px 0; display: flex; flex-direction: column; gap: 6px; }
.rich-segnali li { padding: 6px 10px; border-radius: var(--raggio-sm, 8px); font-size: var(--testo-sm); font-weight: var(--peso-forte); }
.rich-segnali .e-grave { background: var(--op-velo-corallo); color: var(--corallo); }
.rich-segnali .e-attenzione { background: var(--ambra-velo); color: var(--caffe); }
.rich-segnali .e-libera { background: var(--op-velo-salvia); color: var(--salvia-scura); }
.rich-segnali a { margin-left: 4px; }
.rich-chi { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 8px 16px; margin: 0 0 14px; }
.rich-chi dt { font-size: 12px; color: var(--talpa); text-transform: uppercase; letter-spacing: .04em; }
.rich-chi dd { margin: 0; overflow-wrap: anywhere; }
.rich-chi .rich-note { grid-column: 1 / -1; }
.rich-azioni { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px; border-top: 1px solid var(--linea); padding-top: 12px; }
.rich-accetta { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px; }
.rich-modo { border: 0; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 4px 14px; }
.rich-modo label { text-transform: none; letter-spacing: 0; font-size: var(--testo-sm); color: var(--caffe); }
.rich-modo legend { font-size: var(--testo-sm); font-weight: var(--peso-forte); margin-bottom: 4px; }
.chiave-una-volta { font-family: ui-monospace, Menlo, Consolas, monospace; }

/* ---------------------------------------------- Risposte del campo (0.107.0) */
.rich-finestra { width: min(720px, calc(100vw - 32px)); }
.rich-finestra textarea { width: 100%; font-family: inherit; line-height: 1.45; }
.rich-finestra input[type="text"], .rich-finestra textarea, .risp-modello input[type="text"], .risp-modello textarea { max-width: none; width: 100%; }
.rich-proposte { border: 0; margin: 0 0 6px; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.rich-proposte legend { font-size: var(--testo-sm); font-weight: var(--peso-forte); margin-bottom: 4px; }
.rich-proposte label, .rich-finestra .check { text-transform: none; letter-spacing: 0; font-size: var(--testo-sm); color: var(--caffe); }
.rich-avviso { background: var(--op-velo-corallo); color: var(--corallo); border-radius: 8px; padding: 6px 10px; font-weight: var(--peso-forte); font-size: var(--testo-sm); }
.risp-modello { border: 1px solid var(--linea); border-radius: 10px; padding: 8px 12px; margin: 0 0 8px; }
.risp-modello summary { cursor: pointer; font-weight: var(--peso-forte); }
.risp-modello textarea { width: 100%; font-family: inherit; }
.risp-segnaposti code { background: var(--carta); border-radius: 4px; padding: 0 4px; font-size: 12px; }


/* ---------------------------------------------- Abbinare le quote (0.108.0) */
.abbina-quote td.num, .abbina-quote th.num { text-align: right; white-space: nowrap; }
.abbina-quote .abbina-entrata { display: block; }
.abbina-quote .abbina-esito { display: block; margin-top: 3px; font-size: 12.5px; }
.abbina-quote tr.abbina-sicuro td:first-child { border-left: 4px solid var(--salvia); }
.abbina-quote tr.abbina-da_guardare td:first-child { border-left: 4px solid var(--ambra); }
.abbina-quote tr.abbina-nessuna td:first-child { border-left: 4px solid var(--corallo); }
@media (max-width: 640px) {
    .abbina-quote, .abbina-quote tbody, .abbina-quote tr, .abbina-quote td { display: block; width: 100%; }
    .abbina-quote thead { display: none; }
    .abbina-quote tr { position: relative; padding: 10px 12px 10px 44px; border-bottom: 1px solid var(--linea); }
    .abbina-quote tr.abbina-sicuro { border-left: 4px solid var(--salvia); }
    .abbina-quote tr.abbina-da_guardare { border-left: 4px solid var(--ambra); }
    .abbina-quote tr.abbina-nessuna { border-left: 4px solid var(--corallo); }
    .abbina-quote tr.abbina-sicuro td:first-child, .abbina-quote tr.abbina-da_guardare td:first-child,
    .abbina-quote tr.abbina-nessuna td:first-child { border-left: 0; }
    .abbina-quote td { border: 0; padding: 2px 0; }
    .abbina-quote td.abbina-scelta { position: absolute; left: 12px; top: 12px; width: auto; }
    .abbina-quote td.num { display: flex; justify-content: space-between; gap: 12px; }
    .abbina-quote td.num::before { content: attr(data-label); color: var(--talpa); font-size: 12.5px; }
    .abbina-quote td.abbina-entrate { margin: 6px 0; }
}

/* Debiti e crediti (0.109.0) */
.pos-filtri { display: flex; flex-wrap: wrap; gap: 10px 14px; align-items: flex-end; margin-bottom: 14px; }
.pos-filtri > div { display: flex; flex-direction: column; min-width: 140px; }
.pos-filtri label { margin-bottom: 4px; }
.pos-filtri .pos-cerca { flex: 1 1 180px; }
.pos-filtri .pos-filtri-azioni { flex-direction: row; gap: 8px; min-width: 0; }
.pos-tabella .pos-sel { width: 36px; }
.pos-tabella .pos-sel input { width: 18px; height: 18px; accent-color: var(--cobalto); }
.pos-tabella td.num, .pos-tabella th.num { text-align: right; white-space: nowrap; }
.pos-tabella .pos-voce { display: block; }
.pos-tabella .pos-debito { color: var(--corallo); font-weight: 700; }
.pos-tabella .pos-credito { color: var(--salvia-scura, var(--salvia)); font-weight: 700; }
@media (max-width: 640px) {
    .pos-tabella, .pos-tabella tbody, .pos-tabella tr, .pos-tabella td { display: block; width: 100%; }
    .pos-tabella thead { display: none; }
    .pos-tabella tr { position: relative; padding: 10px 12px 10px 44px; border-bottom: 1px solid var(--linea); }
    .pos-tabella td { border: 0; padding: 2px 0; }
    .pos-tabella td.pos-sel { position: absolute; left: 12px; top: 12px; width: auto; }
    .pos-tabella td.num { text-align: right; }
    .pos-tabella td.num::before { content: attr(data-label); float: left; color: var(--talpa); font-size: 12.5px; }
    .pos-tabella td.num .pos-voce { display: inline; }
    .pos-tabella td.num .pos-voce + .pos-voce::before { content: " · "; }
}
.pos-schede { margin-top: 16px; }

/* Prima nota, bozza C (0.110.0): tabella corta + pannello di dettaglio */
.pn-lato { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: 18px; align-items: start; }
.pn-tabella { table-layout: fixed; width: 100%; }
.pn-tabella th:nth-child(1) { width: 104px; }
.pn-tabella th:nth-child(3) { width: 30%; }
.pn-tabella th:nth-child(4) { width: 120px; }
.pn-tabella tr.pn-riga { cursor: pointer; }
.pn-tabella tr.pn-riga:hover td { background: var(--carta, #FAF7F2); }
.pn-tabella tr.pn-riga:focus-visible { outline: 2px solid var(--cobalto); outline-offset: -2px; }
.pn-tabella tr.pn-scelta td { background: var(--cobalto-velo, #EEF3FA); }
.pn-tabella td { vertical-align: top; }
.pn-tabella .pn-data { font-weight: 700; white-space: nowrap; }
.pn-tabella .pn-chi b { margin-right: 6px; }
.pn-tabella .pn-causale { display: block; color: var(--talpa); font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pn-tabella .pn-voce { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pn-tabella .pn-importo { text-align: right; white-space: nowrap; font-weight: 700; }
.pn-entrata { color: var(--salvia-scura); }
.pn-pannello { position: sticky; top: 16px; border: 1px solid var(--linea); border-radius: 12px; padding: 16px; background: var(--carta, #FAF7F2); }
.pn-det-importo { font-size: 20px; font-weight: 700; margin: 0 0 10px; }
.pn-det-importo .muted { font-size: 14px; font-weight: 400; }
.pn-det-dati { display: grid; grid-template-columns: auto 1fr; gap: 4px 12px; margin: 0 0 10px; font-size: 14px; }
.pn-det-dati dt { color: var(--talpa); }
.pn-det-dati dd { margin: 0; overflow-wrap: anywhere; }
.pn-det-causale { font-size: 13px; color: var(--talpa); overflow-wrap: anywhere; background: #fff; border: 1px solid var(--linea); border-radius: 8px; padding: 8px 10px; }
.pn-det-azioni { gap: 8px; flex-wrap: wrap; align-items: center; }
.pn-det-azioni form, .pn-det-azioni .btn { margin: 0; }
.pn-elimina { color: var(--corallo); border-color: var(--corallo); }
tr.pn-det-riga > td { background: var(--carta, #FAF7F2); padding: 12px; }
@media (max-width: 960px) {
    .pn-lato { grid-template-columns: minmax(0, 1fr); }
    .pn-pannello { display: none; }
    .pn-tabella th:nth-child(3), .pn-tabella td.pn-voce { display: none; }
    /* Sul telefono la larghezza la decide il contenuto: con la colonna della
       voce nascosta, il layout fisso lasciava un buco a destra */
    .pn-tabella { table-layout: auto; }
    .pn-tabella th:nth-child(1), .pn-tabella th:nth-child(4) { width: 1%; }
    .pn-tabella .pn-chi { width: 100%; max-width: 0; }
}

/* Appello + scheda dell'iscritto nella PWA (0.111.0): spunta a sinistra,
   lente a destra, la ricerca in alto, la scheda che sale dal basso */
.op-cerca { margin-bottom: 10px; }
.op-cerca input { width: 100%; min-height: 46px; border-radius: 14px; border: 1px solid var(--linea); padding: 0 14px;
    font: inherit; font-size: 15px; background: var(--bianco); }
.op-ragazzo button.op-ragazzo-nome { border: 0; background: transparent; padding: 0; font: inherit; color: inherit;
    text-align: left; cursor: pointer; }
.op-lente { flex: none; width: 48px; height: 48px; border-radius: 15px; border: 1.5px solid var(--cobalto);
    background: var(--cobalto-velo); color: var(--cobalto); display: inline-flex; align-items: center; justify-content: center; cursor: pointer; }
.op-lente svg { width: 24px; height: 24px; }
.op-spunta-vuota { flex: none; width: 48px; }
.op-ragazzo.e-fuori-ricerca { display: none; }
.op-vuoto-ricerca { text-align: center; color: var(--talpa); margin: 14px 0; }
.op-segno--ok { color: var(--salvia-scura); }
.op-segno--avviso { color: var(--oo-scarto); font-weight: 700; }
dialog.modal.op-scheda { width: 100%; max-width: 560px; margin: auto auto 0; border-radius: 22px 22px 0 0;
    max-height: 88vh; overflow-y: auto; padding: 0 0 18px; }
dialog.modal.op-scheda[open] { animation: op-sale .18s ease-out; }
@keyframes op-sale { from { transform: translateY(40px); opacity: .4; } to { transform: none; opacity: 1; } }
@media (prefers-reduced-motion: reduce) { dialog.modal.op-scheda[open] { animation: none; } }
.op-scheda-maniglia { width: 44px; height: 5px; border-radius: 9px; background: var(--linea); margin: 10px auto 4px; }
.op-scheda-testa { display: flex; align-items: center; gap: 11px; padding: 6px 16px 4px; position: sticky; top: 0; background: var(--bianco); }
.op-scheda-testa > div { flex: 1; min-width: 0; }
.op-scheda-testa b { display: block; font-size: 18px; }
.op-scheda-testa small { color: var(--talpa); font-size: 13px; }
.op-scheda .op-spunta-btn[aria-pressed="true"] { border: 0; background: var(--salvia); color: var(--bianco); }
.op-scheda-corpo { padding: 0 16px; }
.op-scheda-sez { margin: 14px 0 4px; font-size: 11.5px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; color: var(--talpa); }
.op-voce { display: grid; grid-template-columns: 24px 104px 1fr; gap: 8px; align-items: start; padding: 8px 0;
    border-bottom: 1px dashed var(--linea); font-size: 14.5px; }
.op-voce-ic { color: var(--talpa); display: inline-flex; }
.op-voce-ic svg { width: 19px; height: 19px; }
.op-voce-k { color: var(--talpa); }
.op-voce-v { overflow-wrap: anywhere; }
.op-voce.e-allarme .op-voce-v { color: var(--corallo); font-weight: 700; }
.op-voce.e-allarme .op-voce-ic { color: var(--corallo); }
.op-voce.e-ok .op-voce-v { color: var(--salvia-scura); font-weight: 600; }
.op-nd { color: #A79A8E; font-style: italic; font-weight: 400; }
.op-scheda-nota { font-size: 12.5px; color: var(--talpa); margin: 6px 0 0; }
.op-chiama { margin-top: 8px; }

/* Le mie ore e la casa (0.112.0): il mese come calendario (bozza A), la
   finestra del giorno che sale dal basso, il contatore delle ore di oggi.
   Niente previsto e niente differenze: ore lavorate e assenze. */
.op-piastrella-ico { width: 46px; height: 46px; border-radius: 15px; }
.op-piastrella-ico svg { width: 24px; height: 24px; }
.ore-mese { border-radius: 20px; padding: 14px; margin-bottom: 12px; color: var(--bianco);
    background: linear-gradient(140deg, var(--salvia), var(--salvia-scura)); box-shadow: 0 6px 16px rgba(43,106,95,.22); }
.ore-mese-testa { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.ore-mese-testa strong { font-size: 16px; display: flex; align-items: center; gap: 8px; }
.ore-mese-freccia { width: 36px; height: 36px; border-radius: 12px; display: inline-flex; align-items: center; justify-content: center;
    color: var(--bianco); background: rgba(255,255,255,.15); }
.ore-mese-freccia svg { width: 18px; height: 18px; transform: rotate(180deg); }
.ore-mese-freccia.e-dopo svg { transform: none; }
.ore-mese-numeri { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-top: 12px; }
.ore-mese-numeri div { background: rgba(255,255,255,.15); border-radius: 13px; padding: 9px 10px; }
.ore-mese-numeri b { display: block; font-family: var(--font-display); font-size: 21px; }
.ore-mese-numeri span { font-size: 12px; opacity: .9; }
.ore-cal { background: var(--bianco); border-radius: 18px; padding: 10px; box-shadow: 0 1px 3px rgba(0,0,0,.06); margin-bottom: 12px; }
.ore-cal-griglia { display: grid; grid-template-columns: repeat(7, 1fr); gap: 5px; }
.ore-cal-testa { text-align: center; font-size: 11px; font-weight: 800; color: var(--talpa); padding: 2px 0 4px; }
.ore-cal-giorno { position: relative; min-height: 50px; border: 0; border-radius: 11px; padding: 6px 2px 4px; cursor: pointer;
    font: inherit; display: flex; flex-direction: column; align-items: center; gap: 1px; background: transparent; color: var(--talpa); }
.ore-cal-giorno b { font-size: 14px; }
.ore-cal-giorno small { font-size: 10.5px; font-weight: 700; white-space: nowrap; }
.ore-cal-giorno.e-lavoro { background: var(--op-velo-salvia, #E1F1EC); color: var(--salvia-scura); }
.ore-cal-giorno.e-assenza { background: var(--op-velo-ametista, #EFE9F7); color: var(--ametista, #7B5EA7); }
.ore-cal-giorno.e-misto { background: linear-gradient(135deg, var(--op-velo-salvia, #E1F1EC) 55%, var(--op-velo-ametista, #EFE9F7) 55%); color: var(--salvia-scura); }
.ore-cal-giorno.e-da-fare { border: 1.5px dashed var(--ambra); color: var(--oo-scarto); background: #FFFBF3; }
.ore-cal-giorno.e-futuro { color: #B9AEA2; }
.ore-cal-giorno.e-oggi { outline: 2px solid var(--caffe); outline-offset: -2px; }
.ore-cal-punto { position: absolute; top: 4px; right: 5px; width: 6px; height: 6px; border-radius: 50%; background: var(--cobalto); display: block; }
.ore-cal-legenda { display: flex; flex-wrap: wrap; gap: 6px 12px; margin: 8px 2px 0; font-size: 11.5px; color: var(--talpa); }
.ore-cal-legenda i { display: inline-block; width: 10px; height: 10px; border-radius: 3px; margin-right: 4px; vertical-align: -1px; }
.ore-cal-legenda i.e-lavoro { background: var(--op-velo-salvia, #E1F1EC); }
.ore-cal-legenda i.e-assenza { background: var(--op-velo-ametista, #EFE9F7); }
.ore-cal-legenda i.e-da-fare { border: 1.5px dashed var(--ambra); }
.ore-cal-legenda i.ore-cal-punto { position: static; border-radius: 50%; width: 7px; height: 7px; }
.ore-motivi-mese { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 8px; margin-bottom: 12px; }
.ore-motivi-mese div { background: var(--bianco); border-radius: 14px; padding: 10px 12px; border-left: 4px solid var(--ametista, #7B5EA7);
    box-shadow: 0 1px 3px rgba(0,0,0,.05); }
.ore-motivi-mese b { display: block; font-size: 14px; }
.ore-motivi-mese span { font-size: 13px; color: var(--talpa); }
dialog.modal.ore-finestra { width: 100%; max-width: 560px; margin: auto auto 0; border-radius: 22px 22px 0 0; max-height: 92vh; overflow-y: auto; }
dialog.modal.ore-finestra[open] { animation: op-sale .18s ease-out; }
@media (prefers-reduced-motion: reduce) { dialog.modal.ore-finestra[open] { animation: none; } }
@media (min-width: 900px) { dialog.modal.ore-finestra { margin: auto; border-radius: 18px; } }
.ore-finestra-maniglia { width: 44px; height: 5px; border-radius: 9px; background: var(--linea); margin: 10px auto 0; }
.ore-finestra .modal-head { align-items: flex-start; padding-top: 10px; }
.ore-finestra-turno { margin: 2px 0 0; color: var(--talpa); font-size: 14px; }
.ore-finestra .modal-body { padding-top: 8px; }
.ore-finestra .ore-modulo { padding: 0; }
.ore-finestra-letto b { font-family: var(--font-display); font-size: 24px; }
.ore-modulo .ore-passo, .oo-passo { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 8px 0 12px; }
.ore-modulo .ore-passo label, .oo-passo label { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 2px;
    font-size: 12px; font-weight: 600; color: var(--talpa); text-transform: none; letter-spacing: 0; margin: 0; }
.ore-modulo .ore-passo input, .oo-passo input { font-family: var(--font-display); font-size: 40px; font-weight: 700; text-align: center;
    border: 0; background: transparent; padding: 0; width: 100%; max-width: 180px; color: var(--caffe); }
.ore-passo-btn { width: 60px; height: 60px; flex: none; border-radius: 18px; border: 0; cursor: pointer; display: inline-flex;
    flex-direction: column; align-items: center; justify-content: center; line-height: 1; font-size: 26px; font-weight: 800;
    background: var(--cobalto-velo); color: var(--cobalto-scuro); }
.ore-passo-btn small { font-size: 10px; font-weight: 700; margin-top: 3px; }
.ore-modulo .ore-passo--piccolo { margin: 10px 0 2px; }
.ore-modulo .ore-passo--piccolo .ore-passo-btn { width: 46px; height: 46px; font-size: 22px; border-radius: 14px; background: #fff; color: var(--ametista, #7B5EA7); }
.ore-modulo .ore-passo--piccolo input { font-size: 26px; }
.ore-assente { background: var(--op-velo-ametista, #EFE9F7); border-radius: 16px; padding: 10px 12px; margin-bottom: 12px; }
.ore-assente > summary { cursor: pointer; font-weight: 700; color: #4E3A70; list-style: none; }
.ore-assente > summary::-webkit-details-marker { display: none; }
.ore-assente > summary::before { content: "+ "; }
.ore-assente[open] > summary::before { content: "− "; }
.ore-motivi { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
.ore-motivo { margin: 0; text-transform: none; letter-spacing: 0; font-size: 13.5px; font-weight: 600; cursor: pointer; }
.ore-motivo input { position: absolute; opacity: 0; pointer-events: none; }
.ore-motivo span { display: inline-block; border: 1.5px solid #D9CBEA; background: #fff; border-radius: 999px; padding: 6px 12px; color: #4E3A70; }
.ore-motivo input:checked + span { background: var(--ametista, #7B5EA7); border-color: var(--ametista, #7B5EA7); color: #fff; }
.ore-motivo input:focus-visible + span { outline: 2px solid var(--cobalto); outline-offset: 2px; }
.ore-salva { width: 100%; min-height: 50px; }
/* La casa: il contatore */
.oo-scheda.e-segnato { background: linear-gradient(160deg, var(--salvia), var(--salvia-scura)); }
.oo-turno { font-size: 14px; opacity: .95; margin-top: 2px !important; }
.oo-fatto { margin: 8px 0 2px !important; display: flex; align-items: baseline; gap: 10px; }
.oo-fatto b { font-family: var(--font-display); font-size: 40px; }
.oo-contatore { margin: 0; }
.oo-passo { margin: 10px 0 4px; }
.oo-passo .ore-passo-btn { width: 56px; height: 56px; background: rgba(255,255,255,.18); color: var(--bianco); }
.oo-passo label { color: rgba(255,255,255,.9); }
.oo-passo input { color: var(--bianco); }
.oo-passo input::placeholder { color: rgba(255,255,255,.6); }
.oo-modifica { display: inline-flex; width: auto; gap: 6px; align-items: center; margin-top: 10px; background: rgba(255,255,255,.18);
    color: var(--bianco); border: 0; border-radius: 12px; padding: 9px 14px; font: inherit; font-weight: 700; cursor: pointer; }
.oo-modifica svg { width: 16px; height: 16px; }

/* I miei turni (0.113.0): la A con la barra della giornata, senza etichette */
.mt-prossimo { background: linear-gradient(150deg, #8B6BB8, #5E4588); color: var(--bianco); border-radius: 20px; padding: 14px 16px;
    margin-bottom: 12px; box-shadow: 0 6px 16px rgba(94,69,136,.25); }
.mt-prossimo p { margin: 0; }
.mt-eti { font-size: 11px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; opacity: .85; }
.mt-quando { font-size: 14px; opacity: .95; margin-top: 2px !important; }
.mt-orario { font-family: var(--font-display); font-size: 34px; font-weight: 700; line-height: 1.15; font-variant-numeric: tabular-nums; }
.mt-dati { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px !important; }
.mt-dati span { background: rgba(255,255,255,.18); border-radius: 999px; padding: 2px 10px; font-size: 12.5px; font-weight: 700; }
/* Le frecce delle settimane (0.113.1) */
.mt-nav { display: flex; align-items: center; gap: 8px; background: var(--bianco); border-radius: 16px; padding: 6px;
    box-shadow: var(--op-ombra); margin-bottom: 10px; }
.mt-freccia { width: 44px; height: 44px; flex: none; display: inline-flex; align-items: center; justify-content: center;
    border-radius: 12px; background: var(--op-velo-talpa); color: var(--caffe); }
.mt-freccia svg { width: 20px; height: 20px; }
.mt-freccia--prima svg, .mt-freccia.e-spenta:first-child svg { transform: rotate(180deg); }
.mt-freccia.e-spenta { opacity: .35; }
.mt-nav-testo { flex: 1; margin: 0; text-align: center; font-size: inherit; line-height: 1.25; }
.mt-nav-testo b { display: block; font-size: 15.5px; color: var(--caffe); }
.mt-nav-testo span { font-size: 12.5px; font-weight: 600; color: var(--talpa); }
.mt-torna { margin: -2px 0 10px; text-align: center; font-size: 13.5px; font-weight: 700; }
.mt-da-fare-tutta { display: flex; gap: 12px; align-items: flex-start; background: var(--op-velo-ambra); border: 1.5px dashed var(--oo-ambra-linea);
    border-radius: 16px; padding: 16px; color: var(--oo-scarto); }
.mt-da-fare-tutta svg { width: 26px; height: 26px; flex: none; }
.mt-da-fare-tutta p { margin: 0; }
.mt-da-fare-tutta b { display: block; font-size: 15px; }
.mt-da-fare-tutta span { font-size: 13.5px; }
.mt-giorno.e-da-fare { box-shadow: none; background: transparent; border: 1.5px dashed var(--oo-ambra-linea); padding: 6px 12px; }
.mt-giorno.e-da-fare .mt-libero { color: var(--oo-scarto); font-style: italic; }
.mt-giorni { gap: 7px; }
.mt-giorno { display: flex; align-items: center; gap: 12px; background: var(--bianco); border-radius: 15px; padding: 10px 12px;
    box-shadow: var(--op-ombra); }
.mt-giorno.e-vuoto { box-shadow: none; background: transparent; border: 1.5px dashed var(--linea); padding: 6px 12px; }
.mt-giorno.e-oggi { outline: 2px solid var(--cobalto); }
.mt-giorno.e-assenza { background: var(--oo-assenza-velo); }
.mt-giorno.e-passato { opacity: .6; }
.mt-data { width: 40px; flex: none; text-align: center; color: var(--talpa); line-height: 1.1; }
.mt-data b { display: block; font-size: 10.5px; font-weight: 800; text-transform: uppercase; }
.mt-data span { font-family: var(--font-display); font-size: 20px; font-weight: 700; color: var(--caffe); }
.mt-giorno.e-oggi .mt-data span { color: var(--cobalto); }
.mt-cosa { flex: 1; min-width: 0; }
.mt-cosa p { margin: 0; }
.mt-turno { display: flex; align-items: center; gap: 6px; font-size: 14.5px; color: var(--caffe); font-variant-numeric: tabular-nums; }
.mt-ico { display: inline-flex; width: 17px; height: 17px; flex: none; }
.mt-ico svg { width: 17px; height: 17px; }
.mt-ico--alba, .mt-ico--sole { color: #C9821A; }
.mt-ico--luna { color: #5E4588; }
.mt-fascia { font-size: 12.5px; color: var(--talpa); margin-left: 23px !important; }
.mt-fascia + .mt-turno { margin-top: 4px !important; }
.mt-assenza { font-weight: 800; font-size: 13.5px; color: var(--oo-assenza-scura); }
.mt-turno ~ .mt-assenza { margin-top: 4px !important; font-size: 12.5px; }
.mt-libero { color: var(--talpa); font-size: 13px; }
.mt-ore { flex: none; width: 46px; text-align: right; font-weight: 700; color: var(--talpa); font-size: 13px; }
.mt-barra { display: block; position: relative; height: 12px; border-radius: 6px; background: var(--op-velo-talpa); margin-top: 7px; overflow: hidden; }
.mt-barra i { position: absolute; top: 0; bottom: 0; }
/* La fascia è il tratteggio alto quanto la barra; il turno ci corre sopra più
   sottile: dove il turno esce dalla fascia, sotto non c'è più tratteggio */
.mt-barra-fascia { background: repeating-linear-gradient(45deg, #C4B6A4 0 2px, transparent 2px 5px); }
.mt-barra i.mt-barra-turno { top: 3px; bottom: 3px; border-radius: 4px; background: var(--cobalto); }
.mt-barra i.mt-barra-turno--alba { background: #D9901F; }
.mt-barra i.mt-barra-turno--luna { background: #7B5EA7; }
.mt-barra i.mt-barra-turno--lungo { background: linear-gradient(90deg, #D9901F, var(--cobalto)); }
@media (forced-colors: active) {
    .mt-barra i.mt-barra-turno { background: CanvasText; }
    .mt-barra-fascia { background: GrayText; }
}

/* Meno ore, un perché; le assenze del calendario; extra e banca ore (0.114.0) */
.oo-gia { margin-top: 8px !important; background: rgba(255,255,255,.14); border-radius: 12px; padding: 8px 10px; font-size: 13px; }
.oo-perche { margin-top: 10px; background: var(--op-velo-ambra); color: var(--oo-scarto); border-radius: 14px; padding: 10px 12px; }
.oo-perche[hidden] { display: none; }
.oo-perche-testo { font-weight: 800; font-size: 14.5px; }
.oo-perche .ore-motivi { margin-top: 8px; }
.oo-perche .ore-passo { margin: 8px 0 0; }
.oo-perche .ore-passo-btn { width: 44px; height: 44px; background: var(--bianco); color: var(--oo-scarto); }
.oo-perche .ore-passo input { color: var(--oo-scarto); font-size: 26px; }
.oo-perche .ore-passo label { color: var(--oo-scarto); }
.oo-si:disabled { opacity: .55; cursor: not-allowed; }
.ore-gia-cal { margin: 0 0 10px; background: var(--op-velo-ametista); color: var(--ametista); border-radius: 12px; padding: 8px 10px; font-size: 13px; font-weight: 600; }
.ore-meno { margin: 0 0 8px; background: var(--op-velo-ambra); color: var(--oo-scarto); border-radius: 12px; padding: 8px 10px; font-weight: 800; }
.ore-meno[hidden] { display: none; }
.ore-salva:disabled { opacity: .55; cursor: not-allowed; }
.ore-cal-giorno.e-calendario, .ore-cal-legenda i.e-calendario { background: repeating-linear-gradient(45deg, var(--op-velo-ametista, #EFE9F7) 0 5px, var(--bianco) 5px 8px);
    box-shadow: inset 0 0 0 1.5px #D9C4DB; }
.ore-motivi-mese small { display: block; font-size: 11.5px; color: var(--talpa); }
.ore-extra { font-weight: 600; color: var(--salvia-scura); font-size: .85em; white-space: nowrap; }
.ore-mese-numeri .ore-extra { color: inherit; opacity: .85; }
.ore-banca { font-weight: 700; }
.ore-banca-nota { margin: 4px 0 10px; font-size: 12.5px; }

/* Da dove viene la banca ore (0.114.1) */
.ore-banca-dettaglio h2 { margin: 0 0 4px; font-size: 17px; }
.ore-banca-mese { border-top: 1px solid var(--linea); padding: 8px 0; }
.ore-banca-mese summary { display: flex; flex-wrap: wrap; gap: 4px 12px; cursor: pointer; }
.ore-banca-mese summary span { color: var(--talpa); font-variant-numeric: tabular-nums; }
.ore-banca-mese ul { list-style: none; margin: 8px 0 0; padding: 0; display: grid; gap: 4px; }
.ore-banca-mese li { display: grid; grid-template-columns: 90px 130px 150px auto; justify-content: start; gap: 8px; font-size: 13.5px; font-variant-numeric: tabular-nums; }
.ore-banca-mese li b { color: var(--salvia-scura); }
@media (max-width: 560px) { .ore-banca-mese li { grid-template-columns: 1fr auto; } }

/* ===================== Progetti, bozza B (0.116.0) ===================== */
/* Le barrette: incassato in salvia, pagato in cobalto, da saldare in ambra */
.pb-barra { position: relative; display: flex; height: 7px; border-radius: 6px; background: var(--op-velo-talpa, #EFEAE3); overflow: hidden; }
.pb-barra i { display: block; height: 100%; }
.pb-barra--oltre { box-shadow: inset 0 0 0 1px var(--corallo); }
.pb-incassato { background: var(--salvia); }
.pb-pagato { background: var(--cobalto); }
.pb-saldare { background: var(--ambra); }
.pb-ambra { color: #9A6512; }
.pb-rosso { color: var(--corallo); }
.pb-verde { color: var(--salvia-scura); }

/* Il budget in breve: due colonne */
.pb-colonne { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; align-items: start; }
.pb-colonne > .card { margin: 0; }
.pb-testa { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; flex-wrap: wrap; margin-bottom: 6px; }
.pb-testa h2 { display: flex; align-items: center; gap: 8px; margin: 0; font-size: var(--testo-lg); }
.pb-testa h2 svg { width: 18px; height: 18px; color: var(--talpa); }
.pb-testa .num { font-size: var(--testo-sm); }
.pb-voce { padding: 9px 0; border-top: 1px dashed var(--linea); }
.pb-voce:first-of-type { border-top: 0; }
.pb-riga { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: 2px 8px; margin-bottom: 5px; }
.pb-riga .pb-nome { flex: 1 1 150px; }
.prog-turno-periodo { white-space: nowrap; }
.pb-nome { min-width: 0; overflow-wrap: anywhere; }
.pb-nome b { font-weight: 600; }
.pb-ente, .bud-ente { display: inline-block; margin-left: 6px; padding: 0 7px; border-radius: 6px; font-size: 11.5px; font-weight: 700;
    background: var(--op-velo-ametista, #F1E8F2); color: var(--ametista, #8B5E8F); vertical-align: 1px; }
.pb-riga .num { white-space: nowrap; font-size: var(--testo-sm); }
.pb-sotto { margin: 4px 0 0; font-size: var(--testo-xs, 12px); display: flex; flex-wrap: wrap; gap: 2px 8px; }
.pb-totale { display: flex; justify-content: space-between; gap: 8px; margin-top: 8px; padding-top: 8px; border-top: 2px solid var(--caffe); font-weight: var(--peso-forte); }
.pb-legenda { display: flex; flex-wrap: wrap; gap: 4px 16px; margin: 8px 2px 16px; font-size: var(--testo-xs, 12px); }
.pb-legenda i { display: inline-block; width: 10px; height: 10px; border-radius: 3px; margin-right: 5px; vertical-align: -1px; }
.pb-legenda a { margin-left: auto; font-weight: 700; }

/* La pagina del progetto: il centro e la colonna di lato */
.prog-lay { display: grid; grid-template-columns: minmax(0, 1fr) 290px; gap: 16px; align-items: start; }
.prog-lato .card { margin: 0 0 14px; }
.prog-lato h2 { margin: 0 0 8px; font-size: var(--testo-md, 15px); }
.stato-prog { display: inline-block; padding: 2px 11px; border-radius: 999px; font-size: 12.5px; font-weight: 800; }
.stato-prog--in_corso { background: var(--op-velo-salvia, #E1F1EC); color: var(--salvia-scura); }
.stato-prog--in_arrivo { background: var(--cobalto-velo); color: var(--cobalto-scuro); }
.stato-prog--senza_turni { background: var(--op-velo-talpa, #EFEAE3); color: var(--talpa); }
.stato-prog--concluso { background: var(--op-velo-ametista, #F1E8F2); color: var(--ametista); }
.stato-prog--rendicontato { background: var(--ametista); color: var(--bianco); }
.prog-periodo { display: flex; align-items: center; gap: 6px; margin: 8px 0 4px; }
.prog-periodo svg { width: 16px; height: 16px; }
.prog-numeri { margin: 8px 0 0; }
.prog-numeri div { display: flex; justify-content: space-between; gap: 8px; padding: 6px 0; border-top: 1px dashed var(--linea); }
.prog-numeri dt { color: var(--talpa); font-size: var(--testo-sm); }
.prog-numeri dd { margin: 0; font-weight: var(--peso-forte); white-space: nowrap; }
.prog-azioni form { margin: 0; }
.prog-azioni a, .prog-azioni button { display: flex; width: 100%; align-items: center; gap: 8px; padding: 9px 6px; border: 0;
    border-top: 1px solid var(--linea); background: none; font: inherit; font-weight: 600; color: var(--caffe); text-align: left;
    cursor: pointer; text-decoration: none; border-radius: 0; }
.prog-azioni h2 + a, .prog-azioni h2 + form button, .prog-azioni h2 + button { border-top: 0; }
.prog-azioni a:hover, .prog-azioni button:hover { background: var(--cobalto-velo); color: var(--cobalto-scuro); }
.prog-azioni svg { width: 17px; height: 17px; color: var(--talpa); flex: none; }
.prog-azioni .prog-azione-pericolo { color: var(--corallo); }
.prog-ostacoli { font-size: var(--testo-xs, 12px); margin: 8px 0 0; }
.prog-cup-form { display: flex; gap: 6px; flex-wrap: wrap; }
.prog-cup-form input { flex: 1 1 140px; min-width: 0; }
#prog-turni { margin-top: 0; }

/* L'elenco: la tabella divisa per stato */
.prog-tabella .prog-gruppo th { background: var(--carta, #FAF7F2); font-size: 11px; font-weight: 800; letter-spacing: .07em;
    text-transform: uppercase; color: var(--talpa); padding: 7px 10px; }
.prog-tabella .prog-riga { cursor: pointer; }
.prog-tabella .prog-riga td { vertical-align: middle; }
.prog-tabella .prog-riga a { color: inherit; text-decoration: none; }
.prog-tabella .prog-riga:hover a strong { color: var(--cobalto); }
.stato-punto { display: inline-block; width: 9px; height: 9px; border-radius: 50%; margin-right: 7px; vertical-align: 1px; }
.stato-punto--in_corso { background: var(--salvia); }
.stato-punto--in_arrivo { background: var(--cobalto); }
.stato-punto--senza_turni { background: var(--talpa); }
.stato-punto--concluso { background: var(--ametista); }
.stato-punto--rendicontato { background: var(--ametista); }
.prog-tabella .prog-desc { margin-left: 16px; font-size: var(--testo-sm); }
.prog-iscritti { min-width: 90px; }
.prog-iscritti .pb-barra { margin-top: 4px; height: 5px; }
.prog-eu { min-width: 230px; }
.prog-eu-riga { display: grid; grid-template-columns: 14px 1fr 92px; gap: 6px; align-items: center; font-size: var(--testo-sm); margin: 2px 0; }
.prog-eu-riga .num { text-align: right; }
.prog-tabella .num-col { text-align: right; white-space: nowrap; }
.prog-elenco-nota { margin: 8px 2px 0; font-size: var(--testo-xs, 12px); }

/* Il budget a due colonne */
.bud-colonne { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; align-items: start; }
.bud-colonne + * { margin-top: 14px; }
.kpi-grid + .bud-legenda { margin: 10px 2px 10px; }
.bud-colonne > .card { margin: 0; }
.bud-colonna-somma { margin: -2px 0 8px; padding-bottom: 10px; border-bottom: 2px solid var(--linea); }
.bud-colonna-somma .bud-cifra { display: block; margin-bottom: 5px; }
.bud-colonna--uscite .bud-pagato, .bud-punto--uscita { background: var(--cobalto); }
.bud-colonna .bud-voce-nome { flex-basis: 160px; }

@media (max-width: 1100px) {
    .prog-lay { grid-template-columns: 1fr; }
}
@media (max-width: 860px) {
    .pb-colonne, .bud-colonne { grid-template-columns: 1fr; }
    .pb-legenda a { margin-left: 0; }
}
.prog-centro .table td.num { white-space: nowrap; }

/* ===================== I conti rifatti (0.117.0) ===================== */
.testo-piccolo { font-size: 12.5px; }
.solo-lettori { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }

/* Documenti di spesa: i gruppi, le scadenze, la barra del pagato */
.doc-lay { margin-top: 0; }
.doc-centro { margin: 0; min-width: 0; }
.doc-tabella .doc-gruppo th { background: var(--carta); font-size: 11px; font-weight: 800; letter-spacing: .07em;
    text-transform: uppercase; color: var(--talpa); padding: 7px 10px; }
.doc-tabella .doc-gruppo span { font-weight: 600; letter-spacing: 0; }
.doc-tabella td { vertical-align: top; }
.doc-tabella td a { color: inherit; text-decoration: none; }
.doc-tabella tr.doc-riga:hover td a strong { color: var(--cobalto); }
.doc-sotto { font-size: var(--testo-sm); }
.doc-progetto { display: inline-block; padding: 0 7px; border-radius: 6px; font-size: 11.5px; font-weight: 700;
    background: var(--cobalto-velo); color: var(--cobalto-scuro); max-width: 16em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: middle; }
.doc-stato { margin-top: 3px; }
.doc-chip { display: inline-block; padding: 1px 9px; border-radius: 999px; font-size: 11.5px; font-weight: 800; white-space: nowrap; }
.doc-chip--scaduto { background: #FBE3E3; color: #9A3B3B; }
.doc-chip--aperto { background: var(--ambra-velo); color: #8A5A10; }
.doc-chip--pagato { background: #E1F1EC; color: var(--salvia-scura); }
.doc-pagato { min-width: 110px; }
.doc-tabella td.num { white-space: nowrap; }
.doc-pagato .pb-barra { height: 6px; margin: 6px 0 3px; }
.doc-barra-pagato { background: var(--salvia); }
.doc-residuo { font-weight: 700; }
.doc-residuo--aperto { color: #8A5A10; }
.doc-residuo--scaduto { color: var(--corallo); }
.doc-ambra { color: #8A5A10; }
.doc-rosso { color: var(--corallo); }
.doc-verde { color: var(--salvia-scura); }
.doc-lato .prog-numeri dt a { color: inherit; }
/* Sotto i 1500 pixel l'elenco ha bisogno di tutta la larghezza: la colonna
   di lato sale sopra, come una fila di tre riquadri */
@media (max-width: 1500px) {
    .doc-lay { grid-template-columns: minmax(0, 1fr); }
    .doc-lato { order: -1; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }
    .doc-lato .card { margin: 0; }
}
@media (max-width: 860px) {
    .doc-lato { grid-template-columns: minmax(0, 1fr); }
}

/* Mastrino: il mese, le schede dei conti, i movimenti */
.mas-mese { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; margin: 0 0 14px; }
.mas-mese h2 { margin: 0; min-width: 9em; text-align: center; font-size: 20px; }
.mas-freccia { display: inline-flex; align-items: center; justify-content: center; width: 38px; height: 38px; border-radius: 10px;
    background: var(--bianco); border: 1px solid var(--linea); font-size: 22px; line-height: 1; color: var(--caffe); text-decoration: none; }
.mas-freccia:hover { background: var(--cobalto-velo); color: var(--cobalto-scuro); }
.mas-salta { display: flex; gap: 6px; margin: 0; }
.mas-salta select { width: auto; min-width: 0; }
.mas-totale { margin: 0 0 0 auto; }
.mas-conti { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 12px; margin: 0 0 14px; }
.mas-conto { display: block; margin: 0; color: var(--caffe); text-decoration: none; }
.mas-conto:hover { border-color: var(--cobalto); }
.mas-conto--scelto { outline: 2.5px solid var(--cobalto); outline-offset: -1px; }
.mas-conto-nome { display: flex; align-items: center; gap: 8px; font-size: 15px; }
.mas-conto-nome svg { width: 18px; height: 18px; color: var(--talpa); flex: none; }
.mas-interno { padding: 0 7px; border-radius: 6px; font-size: 11px; font-weight: 700; background: var(--op-velo-talpa, #EFEAE3); color: var(--talpa); }
.mas-saldi { display: grid; grid-template-columns: 1fr auto 1fr; gap: 6px; align-items: end; margin: 10px 0 6px; }
.mas-saldi small { display: block; font-size: 10.5px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; color: var(--talpa); }
.mas-saldi b { font-size: 18px; white-space: nowrap; }
.mas-fine { text-align: right; }
.mas-verso { color: var(--talpa); padding-bottom: 2px; }
.mas-su { color: var(--salvia-scura); }
.mas-giu { color: var(--corallo); }
.mas-mov { display: flex; justify-content: space-between; gap: 8px; flex-wrap: wrap; font-size: 12.5px; color: var(--talpa); }
.mas-e { color: var(--salvia-scura); font-weight: 600; white-space: nowrap; }
.mas-u { color: var(--cobalto-scuro); font-weight: 600; white-space: nowrap; }
.mas-spark { display: block; width: 100%; height: 30px; margin-top: 8px; }
.mas-spark polyline { stroke: var(--cobalto); stroke-width: 2; }
.mas-tabella td.num, .mas-tabella th.num { text-align: right; white-space: nowrap; }
.mas-riga-saldo td { background: var(--carta); font-weight: 700; }

/* Report, il cruscotto */
.repc-scelta { align-items: center; flex-wrap: wrap; }
.repc-periodo { margin: 0 0 8px; padding: 10px 16px; }
.repc-periodo summary { cursor: pointer; font-weight: 700; color: var(--cobalto-scuro); }
.repc-periodo .filter-row { margin-top: 8px; }
.repc-periodo:not([open]) { display: none; }
.repc-periodo:target { display: block; }
.repc-come { margin: 0 2px 12px; font-size: var(--testo-sm); }
.repc-kpi { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; margin: 0 0 14px; }
.repc-kpi .kpi-num { font-size: 24px; }
.repc-kpi .kpi-hint { color: var(--talpa); font-weight: 500; }
.repc-kpi-entrate { color: var(--salvia-scura); }
.repc-kpi-uscite { color: var(--cobalto-scuro); }
.repc-pos { color: var(--salvia-scura); }
.repc-neg { color: var(--corallo); }
.repc-due { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; align-items: start; margin: 0 0 14px; }
.repc-due > .card { margin: 0; min-width: 0; }
.repc-colonne { position: relative; display: flex; align-items: flex-end; gap: 6px; height: 190px; margin-top: 18px; padding: 0 2px;
    border-bottom: 1.5px solid var(--caffe); }
.repc-griglia { position: absolute; left: 0; right: 0; border-top: 1px dashed var(--linea); pointer-events: none; }
.repc-griglia span { position: absolute; right: 0; top: -15px; font-size: 10.5px; color: var(--talpa); background: var(--bianco); padding-left: 4px; }
.repc-mese { flex: 1; display: flex; align-items: flex-end; gap: 2px; height: 100%; border-radius: 4px 4px 0 0; }
.repc-mese:hover { background: var(--cobalto-velo); }
.repc-col { flex: 1; display: block; min-height: 0; border-radius: 4px 4px 0 0; }
.repc-assi { display: flex; gap: 6px; padding: 4px 2px 0; font-size: 11px; color: var(--talpa); }
.repc-assi span { flex: 1; text-align: center; min-width: 0; overflow: hidden; white-space: nowrap; }
.repc-legenda { flex-wrap: wrap; margin: 10px 0 0; }
.repc-linea { position: relative; height: 190px; margin-top: 18px; border-bottom: 1.5px solid var(--caffe); }
.repc-linea svg { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
.repc-linea polyline { fill: none; stroke: var(--caffe); stroke-width: 2; }
.repc-linea .repc-inizio { stroke: var(--corallo); stroke-width: 1.5; stroke-dasharray: 5 4; }
.repc-punto { position: absolute; width: 10px; height: 10px; margin: -5px 0 0 -5px; border-radius: 50%; background: var(--caffe);
    box-shadow: 0 0 0 2px var(--bianco); }
.repc-punto:hover { transform: scale(1.4); background: var(--cobalto); }
.repc-minmax { margin: 8px 0 0; font-size: var(--testo-sm); }
.repc-barreh { display: grid; gap: 8px; }
.repc-rh { display: grid; grid-template-columns: minmax(0, 11em) minmax(0, 1fr) auto 3.2em; gap: 10px; align-items: center; font-size: var(--testo-sm); }
.repc-rh-nome { overflow-wrap: anywhere; }
.repc-rh .num { text-align: right; white-space: nowrap; }
.repc-rh .repc-barra { border-radius: 0 4px 4px 0; }
.repc-nota { margin: 10px 0 0; }
#repc-progetti .repc-traccia + .repc-traccia { margin-top: 3px; }
#repc-progetti .repc-barra { height: 7px; }
.repc-voci summary { cursor: pointer; list-style: none; }
.repc-voci summary h2 { display: inline-flex; align-items: center; gap: 8px; margin: 0; font-size: var(--testo-lg); }
.repc-voci summary h2 svg { width: 18px; height: 18px; color: var(--talpa); }
.repc-voci h3 { margin: 14px 0 6px; font-size: var(--testo-md, 15px); }

@media (max-width: 1100px) {
    .repc-kpi { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 860px) {
    .repc-due { grid-template-columns: 1fr; }
    .mas-totale { margin-left: 0; flex-basis: 100%; }
}
@media (max-width: 560px) {
    .repc-kpi { grid-template-columns: 1fr; }
    .repc-rh { grid-template-columns: minmax(0, 1fr) auto; }
    .repc-rh .repc-traccia { grid-column: 1 / -1; grid-row: 2; }
    .repc-rh .num.muted { display: none; }
    .mas-mese h2 { min-width: 0; font-size: 17px; }
}
