  /* ==== Design tokens ====
     Nomi e valori del design system (artifact 8BohHWZ1pcofSCeCfdhmfH, project/tokens.css), in un solo :root
     (22/10, 0.146.0). I nomi vecchi (--bg-card, --color-success, --teal…) restano come alias dei nuovi, così
     le regole esistenti non cambiano; le regole nuove usano solo i nomi del DS. */
  :root{
    /* Superfici */
    --bg:#17191B;
    --backdrop:#17191B;
    --surface:#1D1F22;
    --surface-alt:#222427;
    --surface-tile:#272A2F;
    --surface-input:#141618;
    /* Testo e linee */
    --ink:#F4F2EC;
    --muted:rgba(244,242,236,0.68);
    --text-tertiary:rgba(244,242,236,0.52); /* 0.45 → 0.52 (12/10): 4,1:1 → 5,0:1 sulle card */
    --line:rgba(255,255,255,0.08);
    --border-strong:rgba(255,255,255,0.14);
    /* Giallo Cuentaduro */
    --accent:#F9B900;
    --accent-hover:#FFC21A;
    --accent-soft:rgba(249,185,0,0.12);
    --accent-border:rgba(249,185,0,0.45);
    --on-accent:#241503;
    --accent-ink:#F9B900;
    /* Destinazioni (identità, non stato) */
    --dest-vivir:#6FA8FF;
    --dest-proteger:#F5B7A6;
    --dest-crecer:#F6C247;
    --dest-disfrutar:#4ADCB6;
    --dest-deudas:#E8887A;
    /* Tonalità di Vivir (DS, 26/10: le righe di un destino usano le sue sfumature, dalla più forte) */
    --dest-vivir-1:#418CFF; --dest-vivir-2:#6FA8FF; --dest-vivir-3:#93BEFF; --dest-vivir-4:#B6D3FF; --dest-vivir-5:#D2E3FF;
    --dest-neutral:#D9D6CF;
    /* Stato */
    --success:#4FC3A1;
    --warning:#E9A83B;
    --danger:#E76F61;
    --info:#6FA8DC;
    --fire:#FF6248; /* solo quando hai sforato il piano (era #FF3B1F, audit 0.107) */
    --success-soft:rgba(79,195,161,0.12);
    --warning-soft:rgba(233,168,59,0.12);
    --danger-soft:rgba(231,111,97,0.12);
    --info-soft:rgba(111,168,220,0.12);
    /* Alias dei nomi vecchi: non usarli nelle regole nuove */
    --bg-card:var(--surface);
    --bg-card-alt:var(--surface-alt);
    --bg-input:var(--surface-input);
    --color-border-strong:var(--border-strong);
    --color-text-tertiary:var(--text-tertiary);
    --color-success:var(--success);
    --color-success-soft:var(--success-soft);
    --color-warning:var(--warning);
    --color-warning-soft:var(--warning-soft);
    --color-danger:var(--danger);
    --color-danger-soft:var(--danger-soft);
    --color-info:var(--info);
    --color-info-soft:var(--info-soft);
    --teal:var(--success);      --teal-soft:var(--success-soft);
    --coral:var(--danger);      --coral-soft:var(--danger-soft);
    --gold:var(--dest-crecer);  --gold-soft:rgba(246,194,71,0.12);
    --blue:var(--info);         --blue-soft:var(--info-soft);
    /* Raggi, spazi, ombre, movimento */
    --radius:10px; /* alias di --radius-md */
    --radius-sm:6px; --radius-md:10px; --radius-lg:14px; --radius-xl:18px; --radius-pill:999px;
    --font-size-xs:12px; --font-size-sm:14px; --font-size-md:16px; --font-size-lg:18px;
    --font-size-xl:24px; --font-size-2xl:32px; --font-size-3xl:44px; --font-size-display:56px;
    --space-1:4px; --space-2:8px; --space-3:12px; --space-4:16px; --space-5:20px;
    --space-6:24px; --space-8:32px; --space-10:40px; --space-12:48px; --space-16:64px;
    --space-20:80px; --space-24:96px;
    --shadow-sm:0 2px 8px rgba(0,0,0,0.18);
    --shadow-md:0 8px 24px rgba(0,0,0,0.22);
    --ease-out-strong:cubic-bezier(0.23, 1, 0.32, 1);
    --landing-max:1100px;        /* standard section content width on the marketing landing page (docs/Cuentaduro_Landing_Design_System.md #21) */
    --landing-card-pad:36px 32px;/* standard .landing-card padding */
    --landing-box-gap:24px;      /* horizontal gap between .overview-csp-box items in any landing box row */
    --landing-stack-gap:24px;    /* vertical gap between stacked blocks inside a .landing-card */
    --landing-column-gap:40px;   /* gap between the two columns of a split .landing-card (e.g. the quiz) */
  }
  *{box-sizing:border-box;}
  html, body{overflow-x:hidden; max-width:100%;}
  body{
    margin:0; background:var(--bg); color:var(--ink);
    font-family:'Nunito Sans', sans-serif;
    -webkit-font-smoothing:antialiased;
  }
  .app{max-width:1180px;margin:0 auto;padding:28px 20px 80px; width:100%;}
  header.top{
    display:flex;align-items:center;justify-content:space-between;
    border-bottom:2px solid var(--line); padding-bottom:16px; margin-bottom:20px;
    flex-wrap:wrap; gap:10px;
  }
  header.top h1{margin:0;}
  header.top h1.logo-link{transition:opacity .15s ease;}
  header.top h1.logo-link:hover{opacity:0.8;}
  header.top .sub{font-family:'IBM Plex Mono',monospace; font-size:14px; color:var(--muted); text-transform:uppercase; letter-spacing:1px;}
  .header-right{display:flex; align-items:center; gap:14px; margin-left:auto;}
  .icon-only-btn{
    background:none; border:none; color:var(--muted); font-size:34px; cursor:pointer;
    padding:4px; line-height:1; transition:color .15s ease; display:inline-flex;
    align-items:center; justify-content:center;
  }
  .icon-only-btn:hover, .icon-only-btn.active{color:var(--accent);}
  .icon-only-btn.small{font-size:20px; padding:2px;}
  .view-switch{
    display:inline-flex; border:1.5px solid var(--line); border-radius:8px;
  }
  .view-switch-btn{
    background:var(--bg-card); color:var(--muted); border:none; cursor:pointer;
    padding:7px 12px; display:inline-flex; align-items:center; justify-content:center;
    transition:background-color .15s ease, border-color .15s ease, color .15s ease, transform 160ms cubic-bezier(0.23, 1, 0.32, 1);
  }
  .view-switch-btn:first-child{border-radius:6.5px 0 0 6.5px;}
  .view-switch-btn:last-child{border-radius:0 6.5px 6.5px 0;}
  .view-switch-btn:not(:last-child){border-right:1.5px solid var(--line);}
  .view-switch-btn.active{background:var(--accent); color:var(--on-accent);}
  .view-switch-btn:hover:not(.active){color:var(--ink);}
  .eur-blur{transition:filter .15s ease;}
  .app.blur-active .eur-blur{filter:blur(6px); user-select:none;}
  .user-menu-popover{
    display:none; position:absolute; top:calc(100% + 8px); right:0; z-index:120;
    background:var(--bg-card); border:1px solid var(--line); border-radius:var(--radius-md);
    box-shadow:0 6px 16px rgba(0,0,0,0.45); padding:16px; width:260px;
  }
  .user-menu-popover.show{display:block;}
  .user-menu-popover .note{margin-bottom:12px;}
  .card-header-row{display:flex; flex-wrap:wrap; justify-content:space-between; align-items:center; gap:10px; margin-bottom:14px; cursor:pointer;}
  .card-header-row.no-margin{margin-bottom:0;}
  .card .card-header-row h2, .confirm-box .card-header-row h2{margin:0;}

  nav.tabs{display:flex; gap:6px; flex-wrap:wrap; margin-bottom:22px;}
  nav.tabs button{
    font-family:'Nunito Sans'; font-size:14px; font-weight:600;
    padding:9px 16px; border-radius:999px; border:1.5px solid var(--line);
    background:var(--bg-card); color:var(--muted); cursor:pointer;
    transition:background-color .15s ease, border-color .15s ease, color .15s ease, transform 160ms cubic-bezier(0.23, 1, 0.32, 1); display:inline-flex; align-items:center; gap:7px;
  }
  nav.tabs button.active{background:var(--accent); color:var(--on-accent); border-color:var(--accent);}
  nav.tabs .nav-icon{
    width:20px; height:20px; display:inline-flex; align-items:center; justify-content:center; flex:0 0 auto;
  }
  nav.tabs .nav-icon svg{width:100%; height:100%; display:block;}
  /* Desktop only (sotto i 640px vale il blocco mobile più sotto, invariato):
     gap/padding leggermente ridotti per far stare tutte le pill su una sola
     riga anche con più sezioni opzionali attive (Famiglia/Autónomo/Debiti/
     Investimenti/Carta di credito) — stesso font-size/colori/border-radius,
     solo spaziatura più compatta. */
  @media (min-width:641px){
    nav.tabs{gap:4px;}
    nav.tabs button{padding:8px 12px; gap:5px;}
  }

  nav.tabs button:hover:not(.active){border-color:var(--accent); color:var(--ink);}

  section.panel{display:none;}
  section.panel.active{display:block; animation:fade .25s ease;}
  @keyframes fade{from{opacity:0; transform:translateY(4px);} to{opacity:1; transform:translateY(0);}}

  .settings-layout{display:flex; gap:24px; align-items:flex-start;}
  .settings-sidebar{display:flex; flex-direction:column; gap:6px; flex:0 0 200px; position:sticky; top:20px;}
  .settings-sidebar button{
    font-family:'Nunito Sans'; font-size:14px; font-weight:600; text-align:left;
    padding:10px 14px; border-radius:var(--radius-md); border:1.5px solid var(--line);
    background:var(--bg-card); color:var(--muted); cursor:pointer; transition:background-color .15s ease, border-color .15s ease, color .15s ease, transform 160ms cubic-bezier(0.23, 1, 0.32, 1);
  }
  .settings-sidebar button.active{background:var(--accent); color:var(--on-accent); border-color:var(--accent);}
  .settings-sidebar button:hover:not(.active){border-color:var(--accent); color:var(--ink);}
  .settings-content{flex:1; min-width:0;}
  .settings-group{display:none;}
  .settings-group.active{display:block;}
  @media (max-width:640px){
    .settings-layout{flex-direction:column; align-items:stretch;}
    .settings-sidebar{flex-direction:row; flex-wrap:wrap; flex:0 0 auto; position:static; width:100%;}
    .settings-sidebar button{flex:0 0 auto;}
  }
  /* nav.tabs wraps onto several rows on narrow screens by default (the base
     rule earlier in this file), pushing all page content down before you can
     even see it. On mobile it scrolls horizontally in one row instead, closer
     to a native app's tab strip. */
  @media (max-width:640px){
    nav.tabs{
      flex-wrap:nowrap; overflow-x:auto; -webkit-overflow-scrolling:touch; padding-bottom:4px;
      -webkit-mask-image:linear-gradient(to right, transparent 0, black 20px, black calc(100% - 20px), transparent 100%);
      mask-image:linear-gradient(to right, transparent 0, black 20px, black calc(100% - 20px), transparent 100%);
      scrollbar-width:none; -ms-overflow-style:none;
    }
    nav.tabs::-webkit-scrollbar{display:none;}
    nav.tabs button{flex:0 0 auto;}
    .scroll-x{scrollbar-width:none; -ms-overflow-style:none;}
    .scroll-x::-webkit-scrollbar{display:none;}
  }

  /* v3 Fase 2 — riga di sotto-navigazione per i gruppi Dinero/Patrimonio:
     display:none di default, JS (activateTab()) la mostra impostando 'flex'
     solo per il gruppo del tab attivo. Stessa forma a pillola di nav.tabs
     button ma più piccola/meno prominente (è un secondo livello, non deve
     competere visivamente col primo) e con un filo separatore sopra per
     leggerla come dipendente dalla riga principale, non un'altra nav a sé. */
  .tabs-subnav{
    display:none; gap:4px; flex-wrap:wrap; margin:-14px 0 22px; padding-top:12px;
    border-top:1px solid var(--line);
  }
  .tabs-subnav button{
    font-family:'Nunito Sans'; font-size:12.5px; font-weight:600;
    padding:6px 11px; border-radius:999px; border:1.5px solid var(--line);
    background:transparent; color:var(--muted); cursor:pointer;
    transition:background-color .15s ease, border-color .15s ease, color .15s ease, transform 160ms cubic-bezier(0.23, 1, 0.32, 1); display:inline-flex; align-items:center; gap:5px;
  }
  .tabs-subnav button.active{background:var(--accent-soft); color:var(--accent); border-color:var(--accent);}
  .tabs-subnav button:hover:not(.active){border-color:var(--accent); color:var(--ink);}
  .tabs-subnav .nav-icon{width:16px; height:16px; display:inline-flex; align-items:center; justify-content:center; flex:0 0 auto;}
  .tabs-subnav .nav-icon svg{width:100%; height:100%; display:block;}
  @media (max-width:640px){
    .tabs-subnav{
      flex-wrap:nowrap; overflow-x:auto; -webkit-overflow-scrolling:touch; padding-bottom:4px;
      -webkit-mask-image:linear-gradient(to right, transparent 0, black 20px, black calc(100% - 20px), transparent 100%);
      mask-image:linear-gradient(to right, transparent 0, black 20px, black calc(100% - 20px), transparent 100%);
      scrollbar-width:none; -ms-overflow-style:none;
    }
    .tabs-subnav::-webkit-scrollbar{display:none;}
    .tabs-subnav button{flex:0 0 auto;}
  }

  .card{
    background:var(--surface); border:1px solid var(--border-strong); border-radius:var(--radius-md);
    padding:18px 20px; margin-bottom:16px;
  }
  .card h2, .confirm-box h2{font-family:'Spectral',serif; font-weight:600; font-size:19px; margin:0 0 14px; color:var(--ink);}
  .confirm-box h2{margin:0;}
  .grid{display:grid; gap:14px;}
  /* minmax(0,1fr), non il semplice 1fr: una traccia "1fr" ha comunque un
     minimo implicito pari al contenuto più largo al suo interno (auto), che
     può superare lo spazio disponibile e far scorrere l'intera pagina in
     orizzontale invece di andare a capo — bug classico di CSS Grid,
     osservato qui con 3 fund-card affiancate su schermi stretti dove il box
     conto investimenti non collassava correttamente. minmax(0,1fr) forza il
     minimo a 0, lasciando che il contenuto vada a capo/tronchi dentro la sua
     colonna invece di spingerla oltre. */
  .grid.cols-3{grid-template-columns:repeat(3,minmax(0,1fr));}
  .grid.cols-2{grid-template-columns:repeat(2,minmax(0,1fr)); align-items:start;}
  @media (max-width:760px){ .grid.cols-3, .grid.cols-2{grid-template-columns:1fr;} }
  /* Cuentas: Distribución por cuenta 60%, Grafici 40% (23/10, Mattia); una colonna sotto i 1000px. */
  .grid.cols-2.cuentas-split{grid-template-columns:minmax(0,3fr) minmax(0,2fr);}
  @media (max-width:1000px){ .grid.cols-2.cuentas-split{grid-template-columns:1fr;} }
  /* Griglia dei fondi (Investimenti → box conto): a differenza delle altre
     .grid.cols-3 dell'app (es. box Fondo di emergenza), ogni colonna qui
     contiene una fund-card con due importi affiancati (Investito/Valore
     attuale), che ha bisogno di più spazio minimo per non forzare i numeri
     ad andare a capo carattere per carattere. Un singolo scalino fisso a 1
     colonna (come .grid.cols-3 generico) lasciava le card a piena larghezza
     — leggibili ma sproporzionate — non appena lo spazio scendeva sotto
     quella soglia, invece di affiancarne comunque due appena lo spazio lo
     consente. `repeat(auto-fit, minmax(340px,1fr))` risolve entrambi:
     quante colonne da 340px+ entrano nella larghezza disponibile (1, 2 o 3
     a seconda dei fondi presenti), senza un breakpoint fisso da mantenere.
     340px verificato come il minimo che non fa ancora sovrapporre gli
     importi nella riga Investito/Valore attuale. */
  .grid.cols-3.inv-funds-grid{grid-template-columns:repeat(auto-fit,minmax(min(340px,100%),1fr));}
  /* Griglia debiti (Debiti): stessa esigenza della griglia fondi qui sopra —
     ogni debt-card ha una riga a 3 colonne (saldo iniziale/residuo/rata),
     ancora più densa dei 2 importi affiancati della fund-card, quindi un
     minimo leggermente più alto. */
  .grid.cols-2.debts-grid{grid-template-columns:repeat(auto-fit,minmax(min(380px,100%),1fr));}
  .filters-panel{
    background:var(--bg-card-alt); border:1px solid var(--line); border-radius:var(--radius-md);
    padding:14px 16px; margin-bottom:14px;
  }
  .filters-panel-header{
    display:flex; justify-content:space-between; align-items:center; margin-bottom:12px; cursor:pointer; gap:10px;
  }
  .filters-panel-header.no-margin{margin-bottom:0;}
  .filters-panel-title{
    font-size:11px; text-transform:uppercase; letter-spacing:.8px; color:var(--muted); font-weight:600;
  }
  .filters-grid{
    display:grid; grid-template-columns:repeat(auto-fit, minmax(160px, 1fr)); gap:12px;
  }
  .filters-section-label{
    font-size:12px; text-transform:uppercase; letter-spacing:.6px; color:var(--muted);
    margin:14px 0 8px; font-weight:600;
  }
  .filters-section-label:first-of-type{margin-top:2px;}
  .filters-active-badge{
    display:inline-block; background:var(--accent); color:var(--on-accent); font-size:11px; font-weight:700;
    border-radius:999px; padding:1px 8px; margin-left:6px; vertical-align:middle;
  }
  .multiselect-trigger{
    font-family:'Nunito Sans'; font-size:14px; padding:7px 9px; border:1px solid var(--line);
    border-radius:6px; background:var(--bg-input); color:var(--ink); width:100%;
    display:flex; align-items:center; justify-content:space-between; gap:8px; cursor:pointer; text-align:left;
  }
  .multiselect-trigger:hover{border-color:var(--muted);}
  .multiselect-arrow{color:var(--muted); font-size:11px;}
  .multiselect-dropdown{
    position:absolute; top:calc(100% + 4px); left:0; right:0; z-index:50;
    background:var(--bg-card); border:1px solid var(--line); border-radius:8px;
    box-shadow:0 8px 24px rgba(0,0,0,0.35); max-height:220px; overflow-y:auto; padding:6px;
  }
  .multiselect-option{
    display:flex; align-items:center; gap:8px; padding:7px 8px; border-radius:6px; cursor:pointer; font-size:14px;
  }
  .multiselect-option:hover{background:var(--bg-input);}
  .multiselect-option input{width:auto; margin:0;}
  .multiselect-search{
    width:100%; font-family:'Nunito Sans'; font-size:13px; padding:6px 8px; margin-bottom:6px;
    border:1px solid var(--line); border-radius:6px; background:var(--bg-input); color:var(--ink);
    position:sticky; top:0; z-index:1;
  }
  .multiselect-search:focus{outline:none; border-color:var(--blue);}
  .multiselect-footer{
    display:flex; justify-content:space-between; gap:8px; padding:6px 8px 2px; border-top:1px solid var(--line); margin-top:4px;
  }
  .multiselect-footer button{
    background:none; border:none; color:var(--blue); font-size:12px; cursor:pointer; padding:2px 4px;
  }
  .multiselect-footer button:hover{text-decoration:underline;}
  .floating-action-bar{
    position:fixed; bottom:24px; left:50%; transform:translateX(-50%);
    z-index:1000; max-width:calc(100% - 32px); width:auto;
    background:var(--bg-card); border:1.5px solid var(--line); border-radius:var(--radius-lg);
    padding:12px 16px; box-shadow:0 8px 28px rgba(0,0,0,0.35);
  }
  .fab-header{
    display:flex; align-items:center; justify-content:space-between; gap:16px; margin-bottom:10px;
  }
  .fab-count{font-size:13px; font-weight:600; color:var(--ink);}
  .fab-close{
    background:none; border:none; color:var(--muted); font-size:15px; line-height:1; cursor:pointer;
    padding:2px 6px; border-radius:6px; transition:background .15s ease, color .15s ease;
  }
  .fab-close:hover{background:var(--bg-input); color:var(--ink);}
  .fab-actions{display:flex; flex-wrap:wrap; align-items:center; gap:12px;}
  .fab-group{display:flex; flex-wrap:wrap; align-items:center; gap:6px;}
  .fab-group select{width:auto; min-width:150px;}
  .fab-group-label{
    font-size:11px; text-transform:uppercase; letter-spacing:.5px; color:var(--muted); margin-right:2px;
  }
  .fab-divider{width:1px; align-self:stretch; background:var(--line); margin:2px 2px;}
  .tx-summary-bar{
    display:flex; flex-wrap:wrap; gap:18px; align-items:center;
    background:var(--bg-card-alt); border:1px solid var(--line); border-radius:8px;
    padding:10px 14px; margin-bottom:12px; font-size:13px;
  }
  .tx-summary-bar .tx-summary-item{display:flex; gap:6px; align-items:baseline;}
  .tx-summary-bar .tx-summary-label{color:var(--muted); font-size:11px; text-transform:uppercase; letter-spacing:.4px;}
  .tx-summary-bar .tx-summary-value{font-family:'IBM Plex Mono',monospace; font-weight:500;}
  /* Vista a card di Movimenti per mobile (vedi renderTransactions()/txCardHtml()
     in app.js) — nascosta di default, sostituisce la tabella sotto i 640px:
     più leggibile da scorrere di una tabella stretta, con le azioni (crea
     trasferimento/annulla/salda/modifica) nascoste finché non si tocca la
     card invece di affollare ogni riga di icone. */
  .tx-cards{display:none;}
  @media (max-width:640px){
    #transactions-table-wrap, #recurring-table-wrap, #subscriptions-table-wrap,
    #cc-table-wrap, #investment-history-table-wrap{display:none;}
    .tx-cards{display:block;}
  }
  /* Giorno su mobile: titolino section, il totale in mono (guida Table). */
  .tx-card-date-group{
    display:flex; justify-content:space-between; align-items:baseline;
    font-family:'Nunito Sans',sans-serif; font-size:12px; font-weight:700; text-transform:uppercase; letter-spacing:.06em; color:var(--muted);
    margin:18px 0 8px;
  }
  .tx-card-date-group > span:last-child{font-family:'IBM Plex Mono',monospace; font-weight:500; font-size:14px; text-transform:none; letter-spacing:0; color:var(--ink);}
  .tx-card-date-group:first-child{margin-top:0;}
  .tx-card{
    background:var(--bg-card-alt); border:1px solid var(--line); border-radius:var(--radius-md);
    margin-bottom:8px; overflow:hidden;
  }
  .tx-card.future{opacity:.75;}
  .tx-card.editing{opacity:1;}
  /* Bordo dorato quando le azioni sono aperte — lo stesso trattamento già
     usato altrove nell'app (nodi del Sankey, box in evidenza) per segnalare
     "questo elemento è attivo/espanso". */
  .tx-card.expanded{border-color:var(--accent);}
  .tx-card-main{padding:12px 14px; cursor:pointer; display:flex; flex-direction:column; gap:6px;}
  /* Card senza azioni da rivelare (es. storico aggiornamenti investimenti):
     stessa struttura/spaziatura di .tx-card-main ma senza il cursore a mano,
     che altrimenti lascerebbe intendere un tap possibile dove non c'è
     nessuna azione dietro. */
  .tx-card-main.static{cursor:default;}
  /* Riga 1: descrizione + importo. */
  .tx-card-row1{display:flex; justify-content:space-between; align-items:baseline; gap:10px;}
  .tx-card-label{font-weight:600; font-size:14px; color:var(--ink); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; flex:1; min-width:0;}
  .tx-card-amount{font-family:'IBM Plex Mono',monospace; font-weight:500; font-size:16px; white-space:nowrap; flex:0 0 auto;}
  /* Riga 2: solo conto/giorno/prossimo addebito, allineato a destra — il
     tipo/stato si è spostato sulla riga 3 insieme alla categoria (a sinistra). */
  .tx-card-row2{display:flex; justify-content:flex-end; align-items:center; gap:10px; font-size:12px;}
  .tx-card-account{color:var(--muted); text-align:right; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; min-width:0; display:flex; align-items:center; gap:4px; justify-content:flex-end;}
  /* Riga 3: tipo/stato + categoria, entrambi a sinistra — con un'iconcina a
     forma di etichetta per segnalare che quel testo è una categoria e non
     un altro dettaglio qualsiasi. flex-wrap perché pill+icona+testo possono
     non stare su una riga sola in una card stretta. */
  .tx-card-row3{display:flex; flex-wrap:wrap; align-items:center; gap:5px 8px; font-size:12px; color:var(--muted);}
  .tx-card-cat-icon{display:inline-flex; color:var(--muted); flex:0 0 auto;}
  /* Le azioni occupano tutta la larghezza della card, divise in parti
     uguali tra i 3 o 4 bottoni presenti (crea trasferimento/annulla/[salda]/
     modifica) — target di tap grandi e inequivocabili invece di quadratini
     piccoli ammassati a sinistra. */
  .tx-card-actions{display:flex; gap:8px; padding:0 14px 12px;}
  .tx-card-actions .icon-action-btn{flex:1; width:auto; height:44px;}
  @media (max-width:640px){
    .tx-card-actions .icon-action-btn{height:48px; font-size:18px;}
  }
  .tx-card-actions .icon-action-btn.reveal-on-hover{opacity:1;}
  .tx-card .inline-edit-panel{margin:0 14px 14px;}
  @media (max-width:640px){
    .fab-divider{display:none;}
    .fab-actions{flex-direction:column; align-items:stretch;}
    .fab-group{justify-content:space-between;}
    .row-inline .field{flex:1 1 100%; min-width:0;}
    .row-inline > button.btn{flex:1 1 100%;}
    /* Fields in "Registra un movimento" stack full-width on mobile (the rule
       above), so the row's own gap becomes the vertical space between them —
       the default 8px reads as cramped once everything's stacked instead of
       side by side. */
    #add-movement-overlay .row-inline{gap:18px;}
    /* Da/A restano affiancati anche su mobile invece di impilarsi come gli
       altri campi (richiesta esplicita): l'ID vince sulla regola generica
       ".row-inline .field" sopra a prescindere dall'ordine nel foglio di
       stile. calc(50% - 9px) tiene conto dei 18px di gap impostati qui sopra
       per questo overlay, così le due select sommano esattamente al 100%. */
    #mv-from-field, #mv-to-field{flex:1 1 calc(50% - 9px);}
    /* Intestazione di Movimenti/Movimenti ricorrenti/Abbonamenti: titolo e
       azione primaria impilati invece di accostati in uno spazio troppo
       stretto, bottone a piena larghezza e più alto (48px, oltre il minimo
       di 44pt) per essere un target di tap inequivocabile — coerente con le
       indicazioni Apple sulla gerarchia visiva delle azioni primarie su
       mobile. Nome generico (non solo "movements"): stesso trattamento
       riusato identico sulle tre schede a lista di Movimenti. */
    .list-panel-header{flex-direction:column; align-items:stretch; gap:12px;}
    .list-panel-header > div{width:100%;}
    .list-panel-primary-btn{width:100%; min-height:48px; font-size:15px;}
    /* La barra di icone secondarie (duplicati/vista/import CSV) si dispone
       centrata e con più margine tra i gruppi, ora che ogni pulsante è
       cresciuto a 44px — con il gap di 8px di prima sarebbero rimasti
       comunque appiccicati anche se singolarmente più grandi. */
    .list-panel-toolbar{justify-content:center; gap:14px;}
  }
  .list-stack{display:flex; flex-direction:column; gap:14px;}

  .overview-csp-grid{display:grid; grid-template-columns:repeat(4,1fr); gap:12px;}
  .overview-csp-grid.has-debts{grid-template-columns:repeat(5,1fr);}
  @media (max-width:900px){ .overview-csp-grid, .overview-csp-grid.has-debts{grid-template-columns:repeat(2,1fr);} .overview-csp-grid.has-debts .overview-csp-box-highlight{grid-column:span 2;} }
  @media (max-width:560px){ .overview-csp-grid{grid-template-columns:repeat(2,1fr);} }
  /* Non si tocca: niente bordo, solo l'ombra (23/10, DS Card "Borde = se toca"). */
  .overview-csp-box{
    background:var(--bg-card-alt); box-shadow:var(--shadow-sm); border-radius:8px;
    padding:16px 10px; display:flex; flex-direction:column; gap:4px; text-align:center;
  }
  .overview-csp-box .value{font-family:'IBM Plex Mono',monospace; font-size:16px; font-weight:500; color:var(--ink);}
  .overview-csp-box .label{font-family:'Nunito Sans'; font-size:11.5px; color:var(--muted);}
  /* Plan mobile (docs/Cuentaduro_Design_System_Delta_Spec.v4.md #4): "il
     blocco Plan deve dare maggiore importanza ai valori numerici" — non
     cambia la griglia 2x2, solo la gerarchia tipografica al suo interno:
     con 2 colonne invece di 5 ogni box ha più larghezza reale, quindi il
     valore può essere più grande senza mai andare a capo. */
  @media (max-width:560px){
    .overview-csp-box{padding:18px 12px;}
    .overview-csp-box .value{font-size:24px;}
  }
  .overview-csp-box-highlight{box-shadow:inset 0 0 0 1px var(--accent), var(--shadow-sm); background:var(--accent-soft);}
  .csp-bar{position:relative; height:8px; border-radius:4px; background:var(--bg); border:1px solid var(--line); margin-top:8px;}
  .csp-bar-ideal{position:absolute; top:0; bottom:0; background:var(--accent-soft); border-radius:4px;}
  .csp-bar-actual{position:absolute; top:-3px; bottom:-3px; width:3px; margin-left:-1.5px; border-radius:1.5px; background:var(--ink);}
  .csp-bar-actual.in-range{background:var(--teal);}
  .csp-bar-actual.out-range{background:var(--coral);}
  .csp-bar-actual.debt{background:var(--dest-deudas);}
  .csp-bar-caption{font-family:'IBM Plex Mono',monospace; font-size:11px; color:var(--ink); margin-top:6px;}
  .muted-inline{font-family:'Nunito Sans'; color:var(--muted);}
  /* v3 Fase 3 — tab Piano: griglia dei 4 box (Vivir/Proteger/Crecer/
     Disfrutar), riusa .overview-csp-box per il singolo box ma con un proprio
     conteggio colonne — stesso numero di .overview-csp-grid di Panoramica
     (anch'essa a 4 box dal 2026-09-11, dopo la rimozione del box "Patrimonio
     totale"), breakpoint separati perché le due griglie vivono in card di
     larghezza diversa. */
  .plan-buckets-grid{display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:12px; margin-top:14px;}
  @media (max-width:760px){ .plan-buckets-grid{grid-template-columns:repeat(2,minmax(0,1fr));} }
  @media (max-width:420px){ .plan-buckets-grid{grid-template-columns:1fr;} }
  /* Barra di avanzamento del Fondo di emergenza verso il target fisso di 12
     mesi di spesa Vivir (sez. 3.3) — un riempimento singolo verso un
     traguardo, non una fascia ideale come .csp-bar: semantica diversa,
     stile dedicato invece di forzare il componente esistente. */
  .plan-proteger-bar{position:relative; height:8px; border-radius:4px; background:var(--bg); border:1px solid var(--line); margin-top:8px; overflow:hidden;}
  .plan-proteger-bar-fill{position:absolute; top:0; bottom:0; left:0; background:var(--teal); border-radius:4px;}
  .plan-cat-row{display:flex; justify-content:space-between; gap:10px; padding:7px 0; border-bottom:1px solid var(--line); font-size:13px;}
  .plan-cat-row:last-child{border-bottom:none;}

  /* Larghezza minima assoluta: i nodi sono posizionati in percentuale sul
     contenitore (NODE_W_PCT in renderRecurringFlowChart(), fino al 20%),
     quindi su schermi stretti si stringono fino a diventare illeggibili
     invece di restare leggibili scorrendo. #recurring-flow-content (vedi
     .scroll-x in index.html) fa scorrere solo questo grafico entro il
     proprio box, senza spingere in larghezza il resto della card. Un primo
     tentativo a 700px dava solo ~140px per nodo (20% di 700) — ancora
     troppo poco per icona+nome+importo sulla stessa riga senza troncare
     (segnalato dall'utente con screenshot). 1200px dà ~240px per nodo,
     verificato leggibile anche coi nomi conto più lunghi presenti nei dati
     reali. */
  .recurring-flow-sankey{position:relative; height:420px; min-width:1200px;}
  .recurring-flow-sankey-svg{position:absolute; top:0; left:0; width:100%; height:100%; display:block;}
  .recurring-flow-sankey-node{
    position:absolute; display:flex; align-items:center; gap:6px; box-sizing:border-box;
    background:var(--bg-card-alt); border:1px solid var(--accent); border-radius:6px;
    padding:4px 12px; gap:8px; overflow:hidden;
  }
  .recurring-flow-sankey-node-name{font-size:11.5px; font-weight:600; color:var(--ink); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; flex:1; min-width:0;}
  .recurring-flow-sankey-node-amt{font-family:'IBM Plex Mono',monospace; font-size:10.5px; color:var(--muted); white-space:nowrap; flex:0 0 auto; margin-left:auto; padding-left:6px;}
  @media (max-width:640px){
    .recurring-flow-sankey-node-name{font-size:11px;}
    .recurring-flow-sankey-node-amt{font-size:11px;}
  }
  .overview-csp-box-highlight .value{color:var(--accent);}

  .stat{
    border:1px solid var(--line); border-radius:var(--radius); padding:14px 16px;
    background:var(--bg-card-alt); display:flex; justify-content:space-between; align-items:center; gap:10px;
  }
  /* Il totale grande non si tocca: niente bordo, solo l'ombra (DS Card "Borde = se toca"). Le righe .stat dei conti
     tengono il bordo: alcune sorelle si aprono, e tra sorelle vale la stessa regola. */
  .stat.total{border:none; box-shadow:var(--shadow-sm);}
  .stat .label{font-size:11.5px; text-transform:uppercase; letter-spacing:.8px; color:var(--muted); font-weight:600;}
  .bank-badge{
    display:inline-flex; align-items:center; justify-content:center; width:22px; height:22px;
    border-radius:50%; font-size:9.5px; font-weight:700; color:#fff; margin-right:7px;
    vertical-align:middle; font-family:'Nunito Sans', sans-serif; letter-spacing:0.3px;
  }
  .bank-badge-img{
    width:22px; height:22px; border-radius:6px; margin-right:7px; vertical-align:middle;
    object-fit:cover; box-shadow:0 0 0 1px rgba(255,255,255,0.08);
  }
  .stat .value{font-family:'IBM Plex Mono',monospace; font-size:28px; font-weight:500; color:var(--ink); white-space:nowrap;}
  /* Rimossa la regola .stat.total .value{color:var(--teal);} (documento delta
     v4, sez. 6 Financial Metric: "non colorare automaticamente tutti i
     numeri" — un valore normale deve restare colore primario, non un teal
     incondizionato solo perché sta dentro un box .stat.total). Coloriva
     indiscriminatamente saldo dovuto carta di credito, mesi per saldare un
     debito, mesi coperti dal fondo di emergenza ed entrate nette Autonomo,
     nessuno dei quali è genuinamente un "guadagno" — es. un debito da
     pagare appariva in verde. .stat .value{color:var(--ink);} sopra resta
     il colore di base; dove un valore ha davvero uno stato positivo/
     negativo (es. Saldo IVA, guadagno/perdita fondi) la colorazione è ora
     esplicita nella funzione che lo genera, non ereditata da questa
     classe. */
  /* debt-forecast-months can show a text message ("Nunca al ritmo actual") instead
     of a short amount — nowrap (needed for monetary values elsewhere) would force
     the whole card to scroll horizontally on mobile for that longer text. */
  #debt-forecast-months{white-space:normal; word-break:break-word;}
  .stat.has-sub{flex-direction:column; align-items:stretch; gap:6px;}
  .stat-row{display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:4px 12px;}
  .credit-note{font-size:14px; color:var(--muted); font-family:'IBM Plex Mono',monospace;}

  details.bank-detail{cursor:pointer; display:block;}
  details.bank-detail summary{
    list-style:none; cursor:pointer; display:flex; justify-content:space-between; align-items:center;
  }
  details.bank-detail summary::-webkit-details-marker{display:none;}
  details.bank-detail summary::marker{content:'';}
  details.bank-detail summary::after{
    content:'◂'; font-size:20px; color:var(--muted); margin-left:8px; font-family:'IBM Plex Mono',monospace;
    display:inline-block; transition:transform .15s ease;
  }
  details.bank-detail[open] summary::after{transform:rotate(-90deg);}
  .collapse-arrow{
    display:inline-block; font-size:20px; color:var(--muted); font-family:'IBM Plex Mono',monospace;
    transition:transform .15s ease;
  }
  .collapse-arrow.open{transform:rotate(-90deg);}
  details.bank-detail summary .label{flex:1;}
  .detail-list{margin-top:12px; border-top:1px solid var(--line); padding-top:8px;}
  .detail-row{display:flex; justify-content:space-between; align-items:baseline; padding:8px 8px; gap:10px; border-radius:6px;}
  .detail-row:nth-child(even){background:rgba(255,255,255,0.03);}
  /* Memo rows (interest accrued, monthly reserve, guilty-free spending) are
     wrapped by app.js in a .detail-memo-group container — a distinct boxed
     section with its own background, so they read as a summary/footnote
     under the account list rather than more rows of the same table. */
  .detail-memo-group{
    margin-top:12px; padding:6px 8px; border:1px solid var(--line); border-radius:8px;
    background:rgba(255,255,255,0.025);
  }
  .detail-memo-group-title{
    font-size:12px; text-transform:uppercase; letter-spacing:.6px; color:var(--muted);
    font-weight:600; padding:6px 8px 2px;
  }
  .detail-row.detail-memo{font-style:italic;}
  .detail-row.detail-memo:nth-child(even){background:none;}
  .detail-row.detail-memo .detail-name{color:var(--muted);}
  .detail-row.detail-memo .detail-bal{color:var(--gold);}
  .detail-row.detail-nested{padding-left:18px; border-left:1px dashed var(--line); margin-left:4px;}
  .detail-row.detail-nested-2{padding-left:34px; border-left:1px dashed var(--line); margin-left:20px;}
  .detail-name{font-size:13px; color:var(--ink); display:flex; flex-direction:column;}
  .pocket-name-row{display:inline-flex; align-items:center; gap:6px;}
  .detail-type{font-size:12px; color:var(--muted); font-weight:400;}
  .detail-bal{font-family:'IBM Plex Mono',monospace; font-size:14px; color:var(--ink); white-space:nowrap;}

  /* Donut charts */
  .donut-wrap{display:flex; align-items:center; gap:20px; flex-wrap:wrap;}
  .donut-chart{
    width:140px; height:140px; min-width:140px; border-radius:50%; position:relative;
  }
  .donut-hole{
    position:absolute; inset:20px; background:var(--bg-card); border-radius:50%;
    display:flex; flex-direction:column; align-items:center; justify-content:center; text-align:center; padding:4px;
  }
  .donut-center-label{font-size:11px; color:var(--muted); text-transform:uppercase; letter-spacing:.5px;}
  .donut-center-value{font-family:'IBM Plex Mono',monospace; font-size:15px; font-weight:500; color:var(--ink); margin-top:2px;}
  .donut-legend{display:flex; flex-direction:column; gap:7px; flex:1; min-width:150px;}
  .donut-legend-item{display:flex; align-items:center; gap:8px; font-size:12.5px;}
  .donut-swatch{width:10px; height:10px; border-radius:3px; flex:0 0 auto;}
  .donut-legend-label{flex:1; color:var(--ink); overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
  .donut-legend-value{font-family:'IBM Plex Mono',monospace; color:var(--muted); white-space:nowrap; font-size:12px;}

  .growth-chart-value{font-family:'IBM Plex Mono',monospace; font-size:20px; font-weight:500; color:var(--gold); margin-bottom:8px;}
  .growth-chart-svg{width:100%; height:180px; display:block;}
  .growth-chart-labels{display:flex; justify-content:space-between; font-size:11px; color:var(--muted); margin-top:6px;}

  table{width:100%; border-collapse:collapse; font-size:14px;}
  th{
    text-align:left; font-size:12px; font-weight:700; text-transform:uppercase; letter-spacing:.06em;
    color:var(--muted); border-bottom:1.5px solid var(--line); padding:8px 8px;
  }
  td{padding:9px 8px; border-bottom:1px solid var(--line); vertical-align:middle; color:var(--ink);}
  @media (hover:hover) and (pointer:fine){ tr:hover td{background:var(--surface-alt);} }
  tr.row-selected td{background:var(--surface-alt);}
  .amt-out{color:var(--danger);}
  .amt-in{color:var(--success);}
  td.num, th.num{font-family:'IBM Plex Mono',monospace; text-align:right;}
  .cc-table{table-layout:fixed; min-width:600px;}
  tr.date-group-row:hover td{background:none;}
  tr.date-group-row td{padding:0; border-bottom:none;}
  .date-group-header{
    display:flex; justify-content:space-between; align-items:center;
    font-family:'Nunito Sans', sans-serif; font-weight:700; font-size:14px; color:var(--ink);
    background:var(--surface-alt); border-radius:var(--radius-md);
    padding:10px 14px; margin:18px 0 8px;
  }
  tr.date-group-row:first-child .date-group-header{margin-top:0;}
  .date-group-total{font-family:'IBM Plex Mono',monospace; font-style:normal; font-weight:500; font-size:14px;}
  .cc-table td, .cc-table th{overflow-wrap:break-word; word-break:break-word;}
  th.sortable{cursor:pointer; user-select:none; transition:color .15s ease;}
  th.sortable:hover{color:var(--ink);}
  .sort-indicator{display:inline-block; margin-left:4px; font-size:10px; color:var(--muted); width:8px;}
  input, select, textarea{
    font-family:'Nunito Sans'; font-size:14px; padding:7px 9px; border:1px solid var(--line);
    border-radius:6px; background:var(--bg-input); color:var(--ink); width:100%;
  }
  /* Indicatore di focus accent (documento delta v4, sez. 11 Borders: focus →
     strong/accent) — prima l'unico focus ring esistente era scoped a .landing,
     il resto del prodotto non aveva alcun indicatore visivo per la navigazione
     da tastiera. Stesso trattamento già usato lì. */
  /* Select: freccia disegnata da noi (chevron stile Feather, colore --muted) invece di quella nativa, che resta a
     pochi pixel dal bordo destro. padding-right lascia spazio a testo + freccia. Escluse le select multiple. */
  select:not([multiple]):not(.landing-lang-select){
    appearance:none; -webkit-appearance:none; -moz-appearance:none;
    padding-right:34px;
    background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23A9A8A3' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
    background-repeat:no-repeat; background-position:right 12px center; background-size:14px 14px;
  }
  input:focus, select:focus, textarea:focus{
    outline:none; border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-soft);
  }
  /* Campo con errore (fieldError()): bordo danger e la frase sotto, come nota in rosso. */
  .field-invalid, input.field-invalid:focus, select.field-invalid:focus, textarea.field-invalid:focus{border-color:var(--danger) !important; box-shadow:0 0 0 3px var(--danger-soft) !important;}
  p.field-error{margin:4px 0 0; font-size:12.5px; line-height:1.4; color:var(--danger) !important;}
  textarea{resize:vertical; min-height:90px;}
  input::placeholder, textarea::placeholder{color:#808894;} /* era #4E5866, 2,5:1: ora 5,1:1 (12/10) */
  input[type=number]{font-family:'IBM Plex Mono',monospace;}
  input[type=date]{cursor:pointer;}
  /* Campo file (MoneyInput/Field del DS): riquadro tratteggiato, l'input nativo nascosto ma raggiungibile da tastiera. */
  .file-pick{display:flex; align-items:center; gap:12px; padding:12px 14px; border:1.5px dashed var(--border-strong); border-radius:var(--radius-md);
    background:var(--surface-input); cursor:pointer; transition:border-color .15s ease, background-color .15s ease;}
  .file-pick-input{position:absolute; width:1px; height:1px; opacity:0; overflow:hidden; pointer-events:none;}
  .file-pick-icon{flex:0 0 36px; height:36px; border-radius:50%; display:flex; align-items:center; justify-content:center; background:var(--surface-alt); color:var(--muted);}
  .file-pick-text{display:flex; flex-direction:column; gap:1px; min-width:0;}
  .file-pick-name{font-size:14px; font-weight:700; color:var(--ink); overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
  .file-pick-hint{font-size:12.5px; color:var(--muted);}
  .file-pick:focus-within{border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-soft);}
  .file-pick.drag{border-color:var(--accent); background:var(--accent-soft);}
  .file-pick.has-file{border-style:solid; border-color:var(--line);}
  .file-pick.has-file .file-pick-icon{background:var(--accent-soft); color:var(--accent-ink);}
  @media (hover:hover) and (pointer:fine){ .file-pick:hover{border-color:var(--accent);} .file-pick:hover .file-pick-icon{color:var(--accent-ink);} }
  @media (hover:none){ .file-pick:not(.has-file) .file-pick-hint{display:none;} }
  input[type=color]{width:52px; height:38px; padding:3px; cursor:pointer;}
  input[type=checkbox]{
    appearance:none; -webkit-appearance:none;
    width:16px; height:16px; min-width:16px; padding:0;
    border:1.5px solid var(--line); border-radius:4px;
    background:var(--bg-input); cursor:pointer; position:relative;
    flex-shrink:0; vertical-align:middle;
    transition:background .15s ease, border-color .15s ease;
  }
  input[type=checkbox]:hover{border-color:var(--accent);}
  input[type=checkbox]:checked{background:var(--accent); border-color:var(--accent);}
  input[type=checkbox]:checked::after{
    content:''; position:absolute; left:4px; top:1px;
    width:4px; height:8px;
    border:solid var(--on-accent); border-width:0 2px 2px 0;
    transform:rotate(45deg);
  }
  /* Toggle-switch look for a checkbox (class="switch" on the input) — same
     checked/unchecked semantics, just a bigger and clearer target on mobile
     than the small square box. */
  input[type=checkbox].switch{
    width:40px; height:24px; min-width:40px; border-radius:999px;
  }
  input[type=checkbox].switch::after{
    content:''; position:absolute; top:2px; left:2px;
    width:18px; height:18px; border-radius:50%; border:none;
    background:var(--muted); transition:transform .15s ease, background .15s ease;
  }
  input[type=checkbox].switch:checked::after{transform:translateX(16px); background:var(--on-accent);}
  .row-inline{display:flex; gap:8px; flex-wrap:wrap; align-items:flex-end;}
  .field{display:flex; flex-direction:column; gap:4px; min-width:0;}
  .field label{font-size:11px; text-transform:uppercase; letter-spacing:.5px; color:var(--muted); font-weight:600;}
  /* Importo accepts simple arithmetic (e.g. "12.50+8.30") for summing several
     receipts at once, resolved to a plain number on blur — see
     resolveAmountField()/evaluateAmountExpression() in app.js. The + button
     appends an operator without needing the keyboard's symbol layer, since
     inputmode="decimal" hides it on most mobile keyboards. */
  .amount-input-wrap{display:flex; gap:6px; align-items:center;}
  .amount-input-wrap input{flex:1; min-width:0;}
  .amount-add-btn{
    flex:0 0 auto; width:36px; height:36px; border-radius:8px; border:1px solid var(--line);
    background:var(--bg-input); color:var(--muted); font-size:20px; font-weight:600; cursor:pointer;
    display:inline-flex; align-items:center; justify-content:center; padding:0; line-height:1;
  }
  .amount-add-btn:hover{color:var(--accent); border-color:var(--accent);}

  button.btn{
    font-family:'Nunito Sans'; font-weight:600; font-size:13px; cursor:pointer;
    border:none; border-radius:var(--radius-sm); padding:8px 14px; background:var(--accent); color:var(--on-accent);
    transition:filter .15s ease, border-color .15s ease, transform 160ms cubic-bezier(0.23, 1, 0.32, 1);
  }
  @media (hover: hover) and (pointer: fine){ button.btn:hover{filter:brightness(1.1);} }
  button.btn.ghost{background:transparent; color:var(--ink); border:1.5px solid var(--line);}
  @media (hover: hover) and (pointer: fine){ button.btn.ghost:hover{border-color:var(--ink);} }
  button.btn.small{padding:5px 10px; font-size:12px;}
  button.btn.danger{background:var(--danger); color:#2A0006;}
  button.btn.ghost.active{background:var(--accent); color:var(--on-accent); border-color:var(--accent);}
  button.btn:disabled{opacity:.35; cursor:not-allowed;}
  button.btn.btn-icon-label{display:inline-flex; align-items:center; justify-content:center; gap:8px;}

  /* Type-first entry: pick income/expense/transfer before anything else shows,
     so registering a movement is one tap instead of scanning a whole form. */
  .mv-type-picker{display:flex; gap:10px; margin-bottom:4px;}
  .mv-type-choice{
    flex:1; display:flex; flex-direction:column; align-items:center; gap:6px;
    padding:16px 10px; border-radius:var(--radius-md); border:1.5px solid var(--line);
    background:var(--bg-card-alt); color:var(--muted); cursor:pointer;
    font-family:'Nunito Sans'; font-weight:600; font-size:13px;
    transition:border-color .15s ease, color .15s ease, background .15s ease;
  }
  .mv-type-choice:hover{border-color:var(--ink); color:var(--ink);}
  .mv-type-choice.expense.active{background:var(--coral-soft); border-color:var(--coral); color:var(--coral);}
  .mv-type-choice.income.active{background:var(--teal-soft); border-color:var(--teal); color:var(--teal);}
  .mv-type-choice.transfer.active{background:var(--blue-soft); border-color:var(--blue); color:var(--blue);}

  /* Status Badge (docs/Cuentaduro_Design_System_Delta_Spec.v4.md #10): un
     unico componente (.pill) con varianti semantiche — success/danger/
     info/warning/neutral — invece di legare il colore direttamente al
     significato di business di ogni schermata. Le vere "status" pill
     (entrata/uscita/trasferimento/in attesa/saldato/futuro) sono rimappate
     sui token semantici qui sotto; i pill che sono in realtà TAG
     categoriali (couple/contribution/value-update — non uno stato) restano
     sui colori diretti già esistenti (gold/blue), coerenti con l'uso di
     quei colori altrove nell'app (es. gold = investimenti). */
  /* Una pill non va mai a capo (23/10, Mattia): testo e icona sulla stessa riga, anche in una colonna stretta. */
  .pill{display:inline-flex; align-items:center; gap:4px; padding:2px 9px; border-radius:999px; font-size:11px; font-weight:600; white-space:nowrap; flex-shrink:0;}
  .dd-pill, .tc-pill, .fam-tag, .eq-tag, .category-pill, .trial-tag{white-space:nowrap;}
  .pill.success, .pill.income, .pill.settled{background:var(--color-success-soft); color:var(--color-success);}
  .pill.danger, .pill.expense{background:var(--color-danger-soft); color:var(--color-danger);}
  .pill.info, .pill.transfer, .pill.future{background:var(--color-info-soft); color:var(--color-info);}
  .pill.warning, .pill.pending{background:var(--color-warning-soft); color:var(--color-warning);}
  .pill.neutral, .pill.off{background:rgba(179,179,179,0.14); color:var(--muted);}
  .pill.couple{background:var(--gold-soft); color:var(--gold);}
  .pill.contribution{background:var(--gold-soft); color:var(--gold);}
  .pill.value-update{background:var(--blue-soft); color:var(--blue);}

  .categories-wrap{display:flex; flex-wrap:wrap; gap:8px;}
  .reserve-list{display:flex; flex-direction:column; gap:2px;}
  .reserve-row{
    display:flex; flex-wrap:wrap; align-items:center; padding:8px 4px;
    border-bottom:1px dashed var(--line); gap:10px;
  }
  .reserve-row:last-child{border-bottom:none;}
  /* Etichetta+valore, sempre visibili — separati dalle azioni sotto, che su
     mobile restano nascoste finché non si tocca questo blocco. */
  .reserve-row-main{display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:10px; flex:1; min-width:0;}
  .reserve-label{font-size:14px; color:var(--ink); flex:1; min-width:0;}
  .reserve-value{font-family:'IBM Plex Mono',monospace; font-size:14px; color:var(--ink); white-space:nowrap; flex:0 0 auto;}
  .reserve-row-actions{display:flex; align-items:center; gap:6px; flex:0 0 auto;}
  /* Righe della Riserva mensile come card vere e proprie su mobile (stesso
     linguaggio visivo — sfondo, bordo, radius — di .tx-card usato da
     Movimenti/Carta di credito/Investimenti), con le azioni nascoste finché
     non si tocca la riga — stesso pattern tap-to-reveal di .tx-card-actions,
     invece di lasciarle sempre visibili come sul desktop (mouse). Segnalato
     dall'utente: i bottoni dovevano comportarsi come le altre card. Stessa
     soglia 640px della vista a card di Movimenti, per coerenza. */
  @media (max-width:640px){
    /* Stessa divisione di responsabilità di .tx-card/.tx-card-main/
       .tx-card-actions: il guscio .reserve-row non ha padding proprio,
       lo gestiscono i due figli — altrimenti il padding della riga si
       sommava al margin-top delle azioni, lasciando un vuoto doppio tra
       etichetta/valore e i bottoni (segnalato dall'utente). */
    .reserve-row{
      background:var(--bg-card-alt); border:1px solid var(--line); border-radius:var(--radius-md);
      margin-bottom:8px; padding:0; gap:0;
      flex-direction:column; align-items:stretch;
    }
    .reserve-row:last-child{margin-bottom:0;}
    .reserve-row-main{padding:12px 14px;}
    .reserve-row-main.tappable{cursor:pointer;}
    /* Bottoni a piena larghezza divisi in parti uguali, stessa identica
       misura di .tx-card-actions .icon-action-btn — non icone quadrate
       allineate a destra (segnalato dall'utente: "i bottoni non occupano
       tutto lo spazio"). */
    .reserve-row-actions{display:none; gap:8px; padding:0 14px 12px;}
    .reserve-row-actions .icon-action-btn{flex:1; width:auto; height:48px; font-size:18px;}
    .reserve-row.expanded{border-color:var(--accent);}
    .reserve-row.expanded .reserve-row-actions{display:flex;}
  }
  .reserve-row-editing{align-items:stretch;}
  /* Family / personal-tax / auto-card rows are rendered as separate
     .reserve-group blocks so the three categories never blend visually —
     see renderReserveGroup() in app.js. */
  .reserve-group{margin-bottom:10px;}
  .reserve-group:last-child{margin-bottom:0;}
  .reserve-group-title{
    display:flex; justify-content:space-between; align-items:center;
    font-size:12px; text-transform:uppercase; letter-spacing:.6px; color:var(--muted);
    font-weight:600; padding:4px 4px;
  }
  .reserve-group-subtotal{font-family:'IBM Plex Mono',monospace; font-weight:500;}
  .reserve-group .reserve-row:first-child{border-top:1px solid var(--line);}
  @media (max-width:640px){
    .reserve-group .reserve-row:first-child{border-top:none;}
  }
  #interest-quick-list{display:grid; grid-template-columns:repeat(auto-fit, minmax(240px, 1fr)); gap:12px;}
  .interest-row{
    display:flex; flex-wrap:wrap; align-items:center; gap:10px; padding:12px;
    border:1px solid var(--line); border-radius:8px;
  }
  .interest-row .interest-name{flex:1 1 100%; font-size:14px; color:var(--ink);}
  .interest-row .interest-total{font-family:'IBM Plex Mono',monospace; font-size:14px; color:var(--muted); white-space:nowrap;}
  .interest-row input{width:110px; text-align:right; flex:0 0 auto;}
  #shortcut-review-list{display:flex; flex-direction:column; gap:10px;}
  .shortcut-review-row{
    display:flex; flex-wrap:wrap; align-items:center; gap:10px; padding:12px;
    border:1px solid var(--gold); border-radius:8px; background:rgba(246,194,71,0.06);
  }
  .shortcut-review-row .shortcut-review-info{flex:1 1 260px; font-size:14px; color:var(--ink); display:flex; flex-direction:column; gap:2px;}
  .shortcut-review-row select{width:auto; min-width:160px; flex:0 0 auto;}
  .reserve-row input{width:130px; text-align:right; flex:0 0 auto;}
  .reserve-total{
    display:flex; justify-content:space-between; align-items:center; margin-top:12px;
    padding-top:12px; border-top:1.5px solid var(--line); font-size:14px; color:var(--muted);
  }
  .salary-percentage{margin-top:14px; padding-top:14px; border-top:1px dashed var(--line);}
  .salary-percentage .label{font-size:11.5px; text-transform:uppercase; letter-spacing:.8px; color:var(--muted); font-weight:600; display:block;}
  /* Shown only when the card is collapsed (icon lacks .open) — a quick glance
     at the weight percentage without having to reopen the card. */
  .salary-pct-header{display:none; font-family:'IBM Plex Mono',monospace; font-weight:500; font-size:14px;}
  .card-header-row:has(.collapse-arrow:not(.open)) .salary-pct-header{display:inline;}
  tr.total-row td{font-weight:700; border-top:2px solid var(--line); color:var(--ink);}
  tr.rounded-row td{font-style:italic; color:var(--muted); font-size:12.5px;}
  .category-pill{
    display:flex; align-items:center; gap:8px; background:var(--bg-input); border:1px solid var(--line);
    border-radius:999px; padding:6px 8px 6px 14px; font-size:12.5px; color:var(--ink);
  }
  .category-pill.custom{border-color:var(--gold); background:var(--gold-soft); color:var(--gold);}
  .category-pill-icon{flex-shrink:0; margin-right:-2px;}
  .category-pill-remove, .share-pill-remove{
    background:none; border:none; color:var(--muted); font-size:15px; line-height:1; cursor:pointer;
    width:18px; height:18px; border-radius:50%; padding:0;
  }
  .share-row{
    border:1px solid var(--line); border-radius:var(--radius); background:var(--bg-input);
    padding:10px 12px; margin-bottom:8px;
  }
  .share-row-header{display:flex; justify-content:space-between; align-items:center; gap:8px; font-size:13px; color:var(--ink); margin-bottom:8px;}
  .share-row-options{display:flex; flex-wrap:wrap; gap:12px; font-size:12px; color:var(--muted);}
  .share-row-options label{display:flex; align-items:center; gap:5px; cursor:pointer;}
  .category-pill-remove:hover, .share-pill-remove:hover{color:var(--coral); background:var(--coral-soft);}
  .future-date{color:var(--blue); font-weight:600;}
  tr.future-row td{background:color-mix(in srgb, var(--info) 5%, transparent);}

  .bankgroup{margin-bottom:18px;}
  .bankgroup h3{font-family:'Spectral',serif; font-size:16px; margin:0 0 10px; color:var(--muted); font-style:italic; display:flex; align-items:center;}

  .account-card{
    border:1px solid var(--line); border-radius:var(--radius); background:var(--bg-card-alt);
    padding:12px 14px; margin-bottom:10px;
  }
  .account-top{display:flex; align-items:center; gap:10px; flex-wrap:nowrap;}
  .account-top .account-name-display{
    flex:1; min-width:0; font-weight:600; color:var(--ink); font-size:14px;
    padding:5px 6px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
  }
  .bullet-sep{color:var(--muted); margin:0 6px;}
  .note-inline{font-size:11.5px; color:var(--muted); font-weight:400;}
  .account-top .balance-display{
    font-family:'IBM Plex Mono',monospace; color:var(--ink); font-size:14px; font-weight:500;
    padding:0 8px; white-space:nowrap; flex:0 0 auto;
  }
  .balance-display.computed-gold, .account-details-grid .computed-note{color:var(--gold);}
  .account-details-grid .computed-note{
    font-family:'IBM Plex Mono',monospace; font-size:14px; padding:7px 0; display:inline-block;
  }

  /* Custom HTML tooltips (replace native title= tooltips) */
  .has-tooltip{position:relative;}
  /* display:none (not opacity:0) so the pseudo-element has zero geometry until
     actually shown — an absolutely-positioned element still counts toward a
     scrollable ancestor's scrollWidth even at opacity:0, which was silently
     widening tables (e.g. Movimenti's actions column) on every device,
     hover-capable or not. Trade-off: no fade/slide transition on appear. */
  .has-tooltip::after{
    content:attr(data-tooltip); position:absolute; bottom:calc(100% + 8px); left:50%;
    transform:translateX(-50%); background:var(--bg-input); color:var(--ink);
    font-family:'Nunito Sans', sans-serif; font-size:11.5px; font-weight:500; line-height:1.4;
    padding:7px 10px; border-radius:7px; width:max-content; max-width:220px; text-align:center;
    white-space:normal; border:1px solid var(--line); box-shadow:0 6px 16px rgba(0,0,0,0.45);
    display:none; pointer-events:none; z-index:80;
  }
  .has-tooltip::before{
    content:''; position:absolute; bottom:calc(100% + 3px); left:50%; transform:translateX(-50%);
    border:5px solid transparent; border-top-color:var(--bg-input);
    display:none; pointer-events:none; z-index:80;
  }
  .has-tooltip:hover::after, .has-tooltip:hover::before{display:block;}
  /* Box alignment set at hover-time by a delegated mouseover listener in app.js,
     based on which half of the screen the trigger is in, so a tooltip near a
     screen edge doesn't run off it. The arrow (::before) always stays centered
     on the trigger regardless — only the text box shifts. */
  .has-tooltip.tooltip-align-left::after{left:0; transform:none;}
  .has-tooltip.tooltip-align-right::after{left:auto; right:0; transform:none;}

  /* Custom date picker: guida Datepicker del DS (0.147.0). Su mobile diventa una hoja dal basso. */
  /* Campo chiuso: icona calendario (Lucide) a destra in muted, come il chevron delle select. */
  input.datepicker-input{
    cursor:pointer; background-color:var(--surface-input); padding-right:34px;
    background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23A9A8A3' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2'/%3E%3Cline x1='16' y1='2' x2='16' y2='6'/%3E%3Cline x1='8' y1='2' x2='8' y2='6'/%3E%3Cline x1='3' y1='10' x2='21' y2='10'/%3E%3C/svg%3E");
    background-repeat:no-repeat; background-position:right 11px center; background-size:16px 16px;
  }
  .datepicker-popover{
    display:none; position:fixed; z-index:1250; background:var(--surface-tile); color:var(--ink);
    border:1px solid var(--border-strong); border-radius:var(--radius-md); box-shadow:var(--shadow-md);
    padding:12px; width:260px; font-family:'Nunito Sans', sans-serif;
  }
  .datepicker-popover.show{display:block;}
  .datepicker-backdrop{display:none;}
  .dp-header{display:flex; align-items:center; justify-content:space-between; gap:8px; margin-bottom:8px;}
  .dp-title{font-size:14px; font-weight:700; color:var(--ink);}
  .dp-navs{display:flex; gap:2px;}
  .dp-nav{
    background:none; border:none; color:var(--muted); width:28px; height:28px; padding:0;
    border-radius:var(--radius-sm); cursor:pointer; display:inline-flex; align-items:center; justify-content:center;
  }
  .dp-nav:hover{color:var(--accent);}
  .dp-weekdays{display:grid; grid-template-columns:repeat(7,1fr); gap:2px; margin-bottom:4px;}
  .dp-weekdays span{text-align:center; font-size:12.5px; color:var(--muted);}
  .dp-grid{display:grid; grid-template-columns:repeat(7,1fr); gap:2px;}
  .dp-day{
    background:none; border:none; color:var(--ink); font-family:'IBM Plex Mono',monospace; font-size:13px;
    aspect-ratio:1; padding:0; border-radius:var(--radius-sm); cursor:pointer; text-align:center;
  }
  .dp-day:focus-visible{outline:2px solid var(--accent); outline-offset:-2px;}
  .dp-day.dp-empty{cursor:default; pointer-events:none;}
  .dp-day.dp-today{box-shadow:inset 0 0 0 1px var(--border-strong); font-weight:700;}
  .dp-day.dp-selected{background:var(--accent); color:var(--on-accent); font-weight:600; box-shadow:none;}
  .dp-day:disabled{color:var(--text-tertiary); cursor:default;}
  @media (hover:hover) and (pointer:fine){
    .dp-day:not(.dp-selected):not(:disabled):hover{background:var(--accent-soft);}
  }
  .dp-footer{
    display:flex; justify-content:center; gap:20px; margin-top:8px; padding-top:10px; border-top:1px solid var(--line);
  }
  @media (max-width:640px){
    .datepicker-backdrop.show{display:block; position:fixed; inset:0; z-index:1240; background:rgba(4,6,9,0.45);}
    .datepicker-popover{
      left:0; right:0; bottom:0; top:auto; width:auto;
      border-radius:var(--radius-xl) var(--radius-xl) 0 0; border-bottom:none;
      padding:16px 16px calc(16px + env(safe-area-inset-bottom));
    }
    .datepicker-popover.show{animation:dp-sheet-in .2s var(--ease-out-strong);}
    .dp-title{font-size:15px;}
    .dp-nav{width:44px; height:44px;}
    .dp-day{aspect-ratio:auto; min-height:44px; font-size:15px;}
    .dp-footer .onb3-link{font-size:14px; padding:8px 4px;}
  }
  @keyframes dp-sheet-in{from{transform:translateY(100%);} to{transform:translateY(0);}}
  @media (max-width:640px) and (prefers-reduced-motion:reduce){
    .datepicker-popover.show{animation:dp-fade-in .2s ease-out;}
  }
  @keyframes dp-fade-in{from{opacity:0;} to{opacity:1;}}
  .icon-edit-btn{
    background:none; border:none; color:var(--muted); font-size:16px; cursor:pointer;
    padding:4px 6px; border-radius:5px; flex:0 0 auto;
  }
  .icon-edit-btn:hover{color:var(--teal); background:rgba(79,195,161,0.1);}
  .icon-action-btn{
    background:none; border:1px solid var(--line); color:var(--muted); width:28px; height:28px;
    border-radius:6px; font-size:14px; cursor:pointer; display:inline-flex; align-items:center;
    justify-content:center; padding:0;
  }
  .icon-action-btn:hover{color:var(--teal); border-color:var(--teal);}
  /* Target di tap minimo 44×44pt su mobile (Apple Human Interface Guidelines)
     — questi pulsanti sono dimensionati per il mouse (20-28px) e diventano
     difficili da toccare con precisione col dito. Ingranditi solo sotto i
     640px, per non alterare la densità dell'interfaccia desktop. Riguarda
     ogni .icon-only-btn.small/.view-switch-btn/.icon-action-btn dell'app,
     non solo Movimenti — la stessa mano che tocca un'icona in Impostazioni
     tocca quella di una card movimento. */
  @media (max-width:640px){
    .icon-only-btn.small{min-width:44px; min-height:44px;}
    .view-switch-btn{min-height:44px; padding:12px 16px;}
    .icon-action-btn{width:40px; height:40px; font-size:16px;}
  }
  /* Stato "attivo" (es. spostamento mese carta di credito, l'unico uso di
     questa classe) sui token semantici del documento delta v4 invece del
     riempimento pieno --blue/testo scuro hardcoded — stessa coppia soft-bg/
     colore-testo già usata da .pill.info. */
  .icon-action-btn.active{background:var(--color-info-soft); color:var(--color-info); border-color:var(--color-info);}
  .icon-action-btn.danger:hover{color:var(--color-danger); border-color:var(--color-danger);}
  /* Varianti semantiche aggiuntive (es. Riserva mensile: "+" riporta al
     valore previsto, "−" azzera) — stesso pattern hover-only di .danger,
     sui token success/warning invece di introdurre nuovi colori. */
  .icon-action-btn.success:hover{color:var(--color-success); border-color:var(--color-success);}
  .icon-action-btn.warning:hover{color:var(--color-warning); border-color:var(--color-warning);}
  .icon-action-btn.reveal-on-hover{opacity:0; transition:opacity .15s ease;}
  tr:hover .icon-action-btn.reveal-on-hover, tr:focus-within .icon-action-btn.reveal-on-hover{opacity:1;}
  /* Read-only shared-data view (see switchViewingContext() in app.js). This is
     best-effort UX, not the security boundary — the RLS policies on finance_data
     and the guard in persist()/flushPersist() are what actually stop writes. */
  .read-only-banner{display:none;}
  body.read-only-mode .read-only-banner{
    display:block; background:var(--gold-soft); color:var(--gold); border:1px solid var(--gold);
    border-radius:var(--radius); padding:10px 14px; margin:0 0 16px; font-size:13px;
    text-align:center; font-weight:600;
  }
  /* "Add to home screen" banner (mobile only, shown once per browser — see
     maybeShowA2HSBanner()/installA2HS()/dismissA2HSBanner() in app.js). Hidden
     by default via inline style, toggled by JS. Deliberately a floating card
     (margin from every edge, rounded corners, accent-color border, shadow)
     rather than an edge-to-edge bar — meant to read as a distinct brand
     moment, not another strip of app chrome. The two .a2hs-text spans are
     both in the DOM (for applyTranslations()) but only one is shown at a time
     via .show-android/.show-ios on the banner itself, since Android (native
     install prompt) and iOS Safari (no such API, instructions only) need
     different copy and only Android gets the "Instalar" button. */
  .a2hs-banner{
    position:fixed; left:16px; right:16px; bottom:16px; z-index:1000;
    background:var(--bg-card); border:2px solid var(--accent);
    border-radius:var(--radius-lg); box-shadow:0 8px 28px rgba(0,0,0,.45);
    padding:14px 16px; align-items:center; gap:12px;
    font-size:12.5px; max-width:420px; margin:0 auto;
  }
  .a2hs-icon{width:44px; height:44px; border-radius:11px; flex-shrink:0;}
  .a2hs-body{flex:1; min-width:0; display:flex; flex-direction:column; gap:2px;}
  .a2hs-title{font-family:'Spectral', serif; font-size:15px; color:var(--accent);}
  .a2hs-banner .a2hs-text{display:none; color:var(--muted); line-height:1.35;}
  .a2hs-text-ios strong{color:var(--ink); font-weight:700;}
  .a2hs-banner.show-android .a2hs-text-android{display:block;}
  .a2hs-banner.show-ios .a2hs-text-ios{display:block;}
  .a2hs-banner .a2hs-install-btn{display:none;}
  .a2hs-banner.show-android .a2hs-install-btn{display:inline-block;}
  .a2hs-banner .a2hs-actions{display:flex; flex-direction:column; align-items:center; gap:8px; flex-shrink:0;}
  /* Free-trial tag next to the logo (see trialDaysRemaining()/updateTrialBanner()
     in app.js). Hidden by default (inline style, toggled by JS); shown only while
     days remaining > 0 — never for an admin or a lifetime-free grant. */
  .trial-tag{
    display:none; align-items:center; gap:5px; font-family:'Nunito Sans', sans-serif;
    font-size:11px; font-weight:700; letter-spacing:.3px; white-space:nowrap;
    color:var(--success); background:var(--success-soft); border:1px solid var(--success);
    border-radius:var(--radius-sm); padding:2px 8px; margin-left:8px;
  }
  body.read-only-mode .icon-action-btn,
  body.read-only-mode .icon-edit-btn,
  body.read-only-mode .category-pill-remove,
  body.read-only-mode .mutation-btn{display:none;}
  /* Elements that double as a value display AND an edit trigger (e.g. tap the
     fund's invested/current-value figure to edit it) must stay visible in
     read-only mode — only their click-to-edit affordance goes away. */
  body.read-only-mode .mutation-value{pointer-events:none; cursor:default;}
  .account-details-panel{margin-top:10px;}
  .funds-list-panel{margin-top:10px; padding:12px; background:var(--bg-input); border-radius:8px;}
  .funds-list-rows{display:flex; flex-direction:column; gap:8px;}
  .fund-list-row{display:flex; align-items:center; gap:10px; font-size:13px;}
  .fund-list-name{flex:1; color:var(--ink); font-weight:600;}
  .fund-list-isin{font-family:'IBM Plex Mono',monospace; color:var(--muted); font-size:14px;}
  .fund-list-invested-value{
    width:90px; flex:0 0 auto; font-family:'IBM Plex Mono',monospace; font-size:14px;
    padding:6px 8px; text-align:right; color:var(--ink);
    cursor:pointer; border-bottom:1px dashed var(--muted); transition:color .15s ease, border-color .15s ease;
  }
  .fund-list-invested-value:hover{color:var(--accent); border-color:var(--accent);}
  .fund-edit-panel{
    margin-top:10px; padding:12px; background:var(--bg-input); border-radius:8px;
    display:flex; flex-direction:column; gap:10px;
  }
  .account-details-section{margin-bottom:10px;}
  .account-details-standalone-field{margin-bottom:10px;}
  .account-details-section-title{
    font-size:11px; text-transform:uppercase; letter-spacing:.6px; color:var(--muted);
    font-weight:600; margin:0 0 6px 2px;
  }
  .account-details-grid{
    display:grid; grid-template-columns:repeat(auto-fit, minmax(160px,1fr)); gap:10px;
    padding:12px; background:var(--bg-input); border-radius:8px;
  }
  .account-details-actions{display:flex; justify-content:space-between; align-items:center; margin-top:10px;}
  .inline-edit-panel{
    background:var(--bg-input); border:1px solid var(--line); border-radius:8px; padding:14px;
  }
  tr.edit-row td{padding:10px 8px; background:var(--surface-alt);}

  .note{font-size:12px; color:var(--muted); font-style:normal;}
  .cat-hint{display:block; margin-top:4px;}
  .cat-hint:empty{display:none;}
  .empty{padding:20px; text-align:center; color:var(--muted); font-size:14px; line-height:1.5;}
  .empty .empty-action{margin-top:8px; font-size:14px;}
  /* Non sono stati vuoti (guida EmptyState): errore = bloque warning con l'azione; sessione = bloque con il botón. */
  .state-loading{margin:12px 0; color:var(--muted);}
  .state-warn{margin:8px 0; padding:12px 14px; border-radius:var(--radius-lg); background:var(--warning-soft); color:var(--ink); font-size:14px; line-height:1.5;}
  .state-warn .onb3-link{font-size:14px; color:var(--ink); font-weight:600;}
  .state-login{display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; margin:8px 0; padding:12px 14px;
    border-radius:var(--radius-lg); background:var(--surface-alt); color:var(--ink); font-size:14px; line-height:1.5;}
  .overview-empty-state{padding:56px 20px; text-align:center;}
  .overview-empty-state p{color:var(--muted); margin:0 0 18px; font-size:14px;}
  /* Toast (0.105, design system "Toast"): superficie scura con bordo e ombra, testo ink 14px 600, a sinistra un disco
     del colore dello stato (success = fatto, info = rimandato o neutro, warning = attenzione, error = da correggere).
     Entra dal basso (200 ms ease-out); 2,2 s, 6 s con "Deshacer". */
  .toast{
    position:fixed; bottom:20px; right:20px; z-index:1300; display:flex; align-items:center; gap:10px; max-width:420px;
    padding:10px 16px 10px 12px; border-radius:var(--radius-md); background:#2b2e33; color:var(--ink);
    border:1px solid var(--color-border-strong); box-shadow:0 8px 24px rgba(0,0,0,.35);
    font-size:14px; font-weight:600; line-height:1.35; opacity:0; transform:translateY(6px); pointer-events:none;
    transition:opacity .2s cubic-bezier(.23,1,.32,1), transform .2s cubic-bezier(.23,1,.32,1);
  }
  .toast::before{content:''; flex:none; width:20px; height:20px; border-radius:999px; background:var(--muted) no-repeat center/12px;}
  .toast.show{opacity:1; transform:none;}
  .toast.success::before{background-color:var(--color-success); background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2304120D' stroke-width='3.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12l5 5 9-10'/%3E%3C/svg%3E");}
  .toast.error::before{background-color:var(--color-danger); background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232A0006' stroke-width='3.2' stroke-linecap='round'%3E%3Cpath d='M12 6v7'/%3E%3Cpath d='M12 18h.01'/%3E%3C/svg%3E");}
  .toast.warning::before{background-color:var(--color-warning); background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23241503' stroke-width='3.2' stroke-linecap='round'%3E%3Cpath d='M12 6v7'/%3E%3Cpath d='M12 18h.01'/%3E%3C/svg%3E");}
  .toast.info::before{background-color:var(--color-info); background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2304122A' stroke-width='3.2' stroke-linecap='round'%3E%3Cpath d='M12 11v7'/%3E%3Cpath d='M12 6h.01'/%3E%3C/svg%3E");}
  .toast.with-action{pointer-events:auto;}
  .toast-undo-btn{
    margin-left:6px; background:none; border:0; color:var(--accent); padding:4px 2px; font:inherit; font-size:13px; font-weight:700;
    text-decoration:underline; text-underline-offset:3px; cursor:pointer; white-space:nowrap;
  }
  @media (prefers-reduced-motion: reduce){ .toast{transform:none; transition:opacity .2s ease;} }
  .actions-cell{display:flex; gap:6px; flex-wrap:nowrap; justify-content:flex-end;}
  .fund-card{border:1px solid var(--line); border-radius:var(--radius); padding:16px; background:var(--bg-card-alt);}
  .fund-card.expanded{border-color:var(--accent);}
  .fund-card .label{font-size:11.5px; text-transform:uppercase; letter-spacing:.8px; color:var(--muted); font-weight:600;}
  .fund-card .value{font-family:'IBM Plex Mono',monospace; font-size:16px; font-weight:500; margin-top:4px; color:var(--gold);}
  /* Card debito (debtCardHtml): riusa .tx-card-actions per le icone azione
     tap-to-reveal, ma .fund-card ha già il proprio padding su tutti i lati —
     tolto il padding orizzontale/inferiore duplicato di .tx-card-actions,
     aggiunto solo lo spazio sopra per separarla dal contenuto principale. */
  .fund-card .tx-card-actions{padding:12px 0 0;}
  /* Riga a 3 colonne (saldo iniziale/residuo/rata) della card debito:
     affiancate su desktop/tablet, ma sotto ~480px (card ridotta al minimo
     di .debts-grid, 380px) anche 3 colonne strette fanno andare a capo le
     etichette maiuscole ("SALDO INICIAL"/"SALDO PENDIENTE") su due righe —
     sotto quella soglia si impilano una per riga, piena larghezza, stessa
     soglia già usata per .reserve-row-actions qui sopra. */
  .debt-stat-row{flex-wrap:nowrap; gap:16px 24px;}
  .debt-stat-col{min-width:0;}
  .debt-stat-col .value{font-size:16px; white-space:normal; overflow-wrap:anywhere;}
  .debt-stat-col-end{text-align:right;}
  @media (max-width:480px){
    .debt-stat-row{flex-direction:column; align-items:stretch; gap:10px;}
    .debt-stat-col-end{text-align:left;}
  }
  .csv-hint{font-size:12px; color:var(--muted); margin-top:6px;}
  .scroll-x{overflow-x:auto;}

  .confirm-overlay{
    display:none; position:fixed; inset:0; background:rgba(4,6,9,0.72);
    backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px);
    align-items:center; justify-content:center; z-index:1000; padding:20px;
  }
  .confirm-overlay.show{display:flex;}
  .confirm-box{
    background:var(--bg-card); border:1px solid var(--line); border-radius:var(--radius);
    padding:22px 24px; max-width:380px; width:100%;
    max-height:85vh; overflow-y:auto;
  }
  .confirm-box.wide{max-width:640px;}

  .auth-gate{
    min-height:100vh; display:flex; flex-direction:column; background:var(--bg); overflow-x:hidden;
  }
  /* app.cuentaduro.com's login gate - deliberately minimal (logo, one login
     box, one secondary link back to the marketing site) now that the actual
     marketing content lives on cuentaduro.com/main instead. Not the
     .landing-* component set below, which stays only because a lot of it
     (cspBoxHtml, the Plan Cuentaduro tokens, etc.) is still shared with the
     real in-app pages - just no longer rendered on this specific screen. */
  .login-gate{
    flex:1; display:flex; flex-direction:column; align-items:center; justify-content:center;
    padding:24px; text-align:center;
  }
  .login-gate-logo{height:36px; width:auto; margin:0 auto 28px;}
  .login-gate-box{
    background:var(--bg-card); border:1px solid var(--line); border-radius:var(--radius);
    padding:28px 24px; width:100%; max-width:340px;
    display:flex; flex-direction:column; gap:16px;
  }
  /* Il design system era scoped qui (.landing) finché riguardava solo la
     marketing page — ora che i token sono promossi a :root (vedi sopra) e
     usati da tutto il prodotto, questa regola non ha più bisogno di
     ridefinire nulla. */
  .landing{width:100%;}
  .landing-header{
    display:flex; align-items:center; justify-content:space-between;
    max-width:var(--landing-max); margin:0 auto; padding:20px 24px;
  }
  .landing-header-logo{height:32px; width:auto; display:block;}
  .landing-header-right{display:flex; align-items:center; gap:10px;}
  .landing-lang-switch{display:flex; gap:4px;}
  /* Mobile swaps the 3-pill switch for a native <select> instead of just
     shrinking the pills further - at narrow phone widths (see screenshot
     that prompted this) 3 buttons next to the logo don't fit even shrunk,
     the third one gets clipped off-screen. The <select>'s value is kept in
     sync by setLandingLanguage()/the initial landing-language-list setup. */
  .landing-lang-select{display:none;}
  @media (max-width:480px){
    .landing-lang-switch{display:none;}
    .landing-lang-select{
      display:block; color:var(--ink); border:1px solid var(--line);
      border-radius:8px; padding:6px 26px 6px 8px; font-family:'Nunito Sans'; font-size:12px;
      /* iOS Safari can drop its own native picker chevron once a custom
         background/border is applied to a <select> - appearance:none plus a
         hand-drawn chevron sidesteps that inconsistency instead of relying
         on the browser to keep drawing one. */
      -webkit-appearance:none; -moz-appearance:none; appearance:none;
      background:var(--bg-card) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23F4F2EC' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E") no-repeat right 6px center;
      background-size:14px;
    }
  }
  .landing-hero{
    max-width:1100px; margin:0 auto; padding:40px 24px var(--space-24); text-align:center;
  }
  .landing-hero-icon{width:64px; height:64px; margin:0 auto 20px; display:block; animation:landing-float 4s ease-in-out infinite;}
  @keyframes landing-float{0%,100%{transform:translateY(0);} 50%{transform:translateY(-8px);}}
  .landing-badge{
    display:inline-flex; align-items:center; gap:8px; padding:6px 14px; border-radius:999px;
    background:var(--accent-soft); border:1px solid var(--accent); margin-bottom:20px;
    font-family:'Nunito Sans'; font-size:12px; font-weight:700; color:var(--accent); letter-spacing:.3px;
  }
  .landing-badge-dot{width:7px; height:7px; border-radius:50%; background:var(--accent); animation:landing-pulse 2s ease-in-out infinite;}
  @keyframes landing-pulse{0%,100%{opacity:1;} 50%{opacity:.35;}}
  .landing-hero h1{
    font-family:'Spectral',serif; font-weight:600; font-size:clamp(28px,5vw,46px);
    line-height:1.15; margin:0 0 16px; color:var(--ink);
  }
  /* Una sola riga solo da una larghezza dove il testo più lungo (IT, ~947px
     a 46px) ci sta davvero comodo nel container da 1100px — sotto questa
     soglia (inclusi laptop/finestre strette, non solo mobile in senso
     stretto) si torna al wrapping naturale invece di tagliare il testo. */
  @media (min-width:1024px){ .landing-hero h1{white-space:nowrap;} }
  .landing-hero-sub{font-size:16px; line-height:1.6; color:var(--muted); max-width:520px; margin:0 auto 28px;}
  .landing-hero-note{margin-top:12px;}
  button.btn.large{padding:13px 26px; font-size:15px; border-radius:8px;}
  .landing-teaser{max-width:800px; margin:0 auto; padding:0 24px var(--space-24); text-align:center;}
  .landing-teaser-sentence{
    font-family:'Spectral',serif; font-size:28px; font-weight:600; line-height:1.5; color:var(--ink); margin:0;
  }
  @media (max-width:640px){ .landing-teaser-sentence{font-size:22px;} }
  .landing-teaser-sentence strong{color:var(--accent); white-space:nowrap;}
  .landing-teaser-inline-field{color:var(--accent); white-space:nowrap;}
  .landing-teaser-inline-field input{
    font-family:'IBM Plex Mono',monospace; font-size:inherit; font-weight:inherit; color:var(--accent);
    background:transparent; border:none; border-bottom:2px solid var(--accent);
    text-align:center; width:5ch; padding:0 2px;
  }
  .landing-teaser-inline-field input:focus{outline:none;}
  .landing-teaser-inline-field input::-webkit-outer-spin-button, .landing-teaser-inline-field input::-webkit-inner-spin-button{
    -webkit-appearance:none; margin:0;
  }
  .landing-teaser-inline-field input[type=number]{ -moz-appearance:textfield; }
  .landing-features{max-width:var(--landing-max); margin:0 auto; padding:24px 24px var(--space-24);}
  .landing-features h2, .landing-pricing h2, .landing-faq h2{
    font-family:'Spectral',serif; font-weight:600; font-size:32px; text-align:center; color:var(--ink); margin:0 0 36px;
  }
  .landing-features-grid{display:grid; grid-template-columns:repeat(4,1fr); gap:16px;}
  @media (max-width:900px){.landing-features-grid{grid-template-columns:repeat(2,1fr);}}
  @media (max-width:560px){.landing-features-grid{grid-template-columns:1fr;}}
  .landing-feature-card{
    background:var(--bg-card); border:1px solid var(--line); border-radius:var(--radius); padding:22px;
  }
  .landing-feature-icon{
    width:44px; height:44px; border-radius:var(--radius-md); background:var(--accent-soft); color:var(--accent);
    display:flex; align-items:center; justify-content:center; margin-bottom:14px;
  }
  .landing-feature-card h3{font-family:'Spectral',serif; font-weight:600; font-size:16px; color:var(--ink); margin:0 0 8px;}
  .landing-feature-card p{font-size:13.5px; line-height:1.55; color:var(--muted); margin:0;}
  /* ==== Landing page reusable components ====
     .landing-card is the standard wide content card (background/border/
     radius/padding + centered text by default) used for any full-width or
     half-width explanatory box on the landing page — currently the CSP
     philosophy card and the quiz card. Any value+label box row (bucket
     grids, calculator results, etc.) reuses the app-wide .overview-csp-box/
     .overview-csp-box-highlight component (defined earlier, near Panoramica)
     instead of introducing a new one-off box style — spaced with the shared
     --landing-box-gap token. Two intentional non-.landing-card variants:
     .landing-feature-card (compact tile, smaller padding, for the 4-across
     value-prop grid) and .landing-pricing-card (single highlighted box with
     an accent border, not a generic content card). */
  .landing-card{
    background:var(--bg-card); border:1px solid var(--line); border-radius:var(--radius);
    padding:var(--landing-card-pad); text-align:center;
  }
  .landing-card-kicker{
    font-family:'Nunito Sans'; font-size:12px; font-weight:700; letter-spacing:.5px; text-transform:uppercase;
    color:var(--accent); margin-bottom:10px;
  }
  .landing-card h2{
    font-family:'Spectral',serif; font-weight:600; font-size:28px; color:var(--ink); margin:0 0 16px;
  }
  .landing-card p{
    font-size:14px; line-height:1.65; color:var(--muted); margin:0 0 var(--landing-stack-gap);
  }
  .landing-card-claim{
    font-family:'Spectral',serif; font-weight:600; font-size:17px; color:var(--ink); margin:0 0 12px;
  }
  .landing-philosophy{max-width:var(--landing-max); margin:0 auto; padding:0 24px var(--space-20);}
  /* Category cards (Vivir/Proteger/Crecer/Disfrutar): a richer variant of
     .overview-csp-box with a title + description, used only here — the
     compact value+label box stays the shared component for the calculator's
     result rows, where space is tighter and the description is unnecessary
     (docs/Cuentaduro_Landing_Design_System.md #3). */
  .landing-plan-categories{
    display:grid; grid-template-columns:repeat(4,1fr); gap:var(--landing-box-gap); margin:0 auto;
  }
  @media (max-width:820px){ .landing-plan-categories{grid-template-columns:repeat(2,1fr);} }
  @media (max-width:480px){ .landing-plan-categories{grid-template-columns:1fr;} }
  .landing-plan-category{
    background:var(--bg-card-alt); border:1px solid var(--line); border-radius:var(--radius-md);
    padding:var(--space-5); text-align:left;
  }
  .landing-plan-category-pct{font-family:'IBM Plex Mono',monospace; font-size:var(--font-size-xl); font-weight:700; color:var(--ink);}
  .landing-plan-category-title{font-family:'Spectral',serif; font-weight:600; font-size:var(--font-size-lg); color:var(--ink); margin:var(--space-2) 0 var(--space-2);}
  .landing-plan-category-desc{font-size:var(--font-size-sm); line-height:1.5; color:var(--muted); margin:0;}
  .landing-plan-category-highlight{border-color:var(--accent-border); background:var(--accent-soft);}
  .landing-plan-category-highlight .landing-plan-category-pct{color:var(--accent);}
  .landing-philosophy-card .landing-plan-methodnote{
    font-size:var(--font-size-xs); font-style:italic; color:var(--color-text-tertiary); text-align:center;
    margin:var(--space-8) 0 0;
  }
  .landing-plan-keyline{max-width:720px; margin:0 auto; padding:0 24px var(--space-24); text-align:center;}
  .landing-plan-keyline h2{
    font-family:'Spectral',serif; font-weight:600; font-size:var(--font-size-2xl); line-height:1.25; color:var(--ink); margin:0 0 var(--space-4);
  }
  @media (max-width:640px){ .landing-plan-keyline h2{font-size:var(--font-size-xl);} }
  .landing-plan-keyline p{font-size:var(--font-size-md); line-height:1.6; color:var(--muted); margin:0;}
  .field-helper{font-size:var(--font-size-xs); color:var(--muted); margin:0;}
  .landing-quiz{max-width:var(--landing-max); margin:0 auto; padding:0 24px var(--space-24);}
  .landing-quiz-columns{display:grid; grid-template-columns:1fr 1fr; gap:var(--landing-column-gap); align-items:start; text-align:left;}
  @media (max-width:800px){ .landing-quiz-columns{grid-template-columns:1fr;} }
  .landing-quiz-grid{display:flex; flex-direction:column; gap:var(--landing-stack-gap);}
  .landing-quiz-right{display:flex; flex-direction:column; gap:var(--landing-stack-gap);}
  /* Box "Disfrutar" evidenziato (#quiz-guiltfree-box, ora il PRIMO elemento
     della colonna destra — docs/Cuentaduro_Delta_Spec_Webmaster.v3.md #9:
     "Mantener Disfrutar como resultado principal"): stesso contenitore
     .overview-csp-box-highlight degli altri box, ma contenuto interamente
     personalizzato (planHighlightHtml() in app.js) invece del value/label/
     bar generico — gap più ampio del default (4px) perché qui impiliamo più
     elementi con ruoli diversi (etichetta, valore, tag, descrizione, stato). */
  #quiz-guiltfree-box{gap:8px;}
  .landing-plan-highlight-label{font-size:13px; color:var(--muted);}
  .landing-plan-highlight-value{font-family:'IBM Plex Mono',monospace; font-size:34px; font-weight:700; color:var(--accent);}
  .landing-plan-highlight-value .unit{font-family:'Nunito Sans'; font-size:14px; font-weight:500; color:var(--muted); margin-left:4px;}
  .landing-plan-highlight-tag{font-family:'Spectral',serif; font-weight:600; font-size:15px; color:var(--ink);}
  .landing-plan-highlight-desc{font-size:13px; line-height:1.5; color:var(--muted); margin:4px 0 0;}
  .landing-plan-highlight-status{font-size:12.5px; font-weight:600; color:var(--muted);}
  .landing-plan-highlight-status.is-within{color:var(--color-success);}
  .landing-plan-highlight-negative{font-family:'Spectral',serif; font-weight:600; font-size:17px; line-height:1.4; color:var(--color-danger);}
  /* "Primero Proteger, después Crecer" — appare solo quando Disfrutar è
     negativo E l'utente sta già versando qualcosa a Crecer (vedi
     updateLandingQuiz() in app.js). Box separato, tono informativo non
     critico, stesso bg-card-alt delle category card. */
  .landing-plan-priority-tip{
    background:var(--bg-card-alt); border:1px solid var(--line); border-radius:var(--radius-md);
    padding:var(--space-4); text-align:left;
  }
  .landing-plan-priority-tip-title{font-family:'Spectral',serif; font-weight:600; font-size:var(--font-size-md); color:var(--ink); margin-bottom:4px;}
  .landing-plan-priority-tip p{font-size:var(--font-size-sm); line-height:1.5; color:var(--muted); margin:0;}
  /* Indicatore di range per Disfrutar in euro (min----●----max, con "Tú" alla
     posizione reale) — sostituisce la vecchia barra segmentata a 4 colori,
     ora scoped al solo risultato principale invece che al riepilogo di
     tutte e 4 le categorie (quello vive nella tabella di confronto sotto). */
  .landing-plan-range-track{
    position:relative; height:6px; border-radius:var(--radius-sm); background:var(--bg-card-alt); margin-top:var(--space-2);
  }
  .landing-plan-range-zone{position:absolute; top:0; bottom:0; background:var(--accent-soft); border-radius:var(--radius-sm);}
  .landing-plan-range-dot{
    position:absolute; top:-4px; width:14px; height:14px; margin-left:-7px; border-radius:50%;
    background:var(--muted); border:2px solid var(--bg-card);
  }
  .landing-plan-range-dot.is-within{background:var(--color-success);}
  .landing-plan-range-labels{display:flex; justify-content:space-between; margin-top:var(--space-2); font-size:var(--font-size-xs); color:var(--muted);}
  .landing-plan-range-you{font-weight:700; color:var(--ink);}
  /* Comparazione compatta delle 4 categorie (righe, non nuove card). */
  .landing-plan-compare{display:flex; flex-direction:column;}
  .landing-plan-compare-row{
    display:grid; grid-template-columns:1fr auto auto auto 20px; align-items:center; gap:var(--space-3);
    padding:var(--space-3) 0; border-bottom:1px solid var(--line); font-size:var(--font-size-sm);
  }
  .landing-plan-compare-row:last-child{border-bottom:none;}
  .landing-plan-compare-label{color:var(--ink); font-weight:600;}
  .landing-plan-compare-amount{font-family:'IBM Plex Mono',monospace; color:var(--ink); text-align:right;}
  .landing-plan-compare-pct{color:var(--muted); text-align:right; font-size:var(--font-size-xs);}
  .landing-plan-compare-range{color:var(--color-text-tertiary); text-align:right; font-size:var(--font-size-xs); white-space:nowrap;}
  .landing-plan-compare-check{color:var(--color-success); font-weight:700;}
  @media (max-width:480px){
    .landing-plan-compare-row{grid-template-columns:1fr auto auto 18px; font-size:var(--font-size-xs);}
    .landing-plan-compare-range{display:none;}
  }
  .landing-quiz-cta{text-align:center;}
  .landing-quiz-cta h3{font-family:'Spectral',serif; font-weight:600; font-size:18px; color:var(--ink); margin:0 0 8px;}
  .landing-quiz-cta p{font-size:13.5px; line-height:1.55; color:var(--muted); margin:0 0 16px;}
  .landing-quiz-cta .note{margin-top:10px;}
  .landing-quiz-grid .field label{color:var(--ink);}
  /* Inputs/bottoni normalizzati solo dentro .landing (design doc #27-28):
     stesso comportamento visivo del resto dell'app altrove, qui solo più
     alti/con un focus ring visibile, per un calculator che si senta come
     uno strumento, non un form qualsiasi. */
  .landing input:focus, .landing select:focus, .landing textarea:focus{
    outline:none; border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-soft);
  }
  .landing-quiz-grid .field input{height:46px; border-radius:8px;}
  .landing button.btn.large{min-height:48px; border-radius:8px;}
  .landing-pricing{max-width:var(--landing-max); margin:0 auto; padding:24px 24px var(--space-24);}
  .landing-pricing-sub{text-align:center; color:var(--muted); font-size:14px; margin:-24px 0 32px;}
  .landing-pricing-card{
    max-width:380px; margin:0 auto; background:var(--bg-card); border:1.5px solid var(--accent);
    border-radius:var(--radius); padding:32px 28px; text-align:center;
  }
  .landing-trial-badge{
    display:inline-block; padding:5px 12px; border-radius:999px; background:var(--teal-soft); color:var(--teal);
    font-family:'Nunito Sans'; font-size:12px; font-weight:700; margin-bottom:14px;
  }
  .landing-price{
    font-family:'IBM Plex Mono',monospace; font-size:40px; font-weight:500; color:var(--ink); margin-bottom:4px;
  }
  .landing-price span{font-family:'Nunito Sans'; font-size:15px; font-weight:600; color:var(--muted); margin-left:2px;}
  .landing-price-vat-note{font-family:'Nunito Sans'; font-size:11.5px; color:var(--muted); margin-bottom:20px;}
  .landing-pricing-list{list-style:none; margin:0 0 24px; padding:0; text-align:left; display:flex; flex-direction:column; gap:10px;}
  .landing-pricing-list li{
    font-size:14px; color:var(--ink); padding-left:24px; position:relative; line-height:1.4;
  }
  .landing-pricing-list li::before{
    content:'✓'; position:absolute; left:0; top:0; color:var(--accent); font-weight:700;
  }
  .landing-pricing-note{margin-top:14px;}
  .landing-faq{max-width:680px; margin:0 auto; padding:24px 24px var(--space-24);}
  .landing-faq-item{
    border-bottom:1px solid var(--line); padding:16px 0;
  }
  .landing-faq-item summary{
    cursor:pointer; font-family:'Nunito Sans'; font-weight:600; font-size:14.5px; color:var(--ink); list-style:none;
  }
  .landing-faq-item summary::-webkit-details-marker{display:none;}
  .landing-faq-item summary::before{content:'+'; display:inline-block; width:16px; color:var(--accent); font-weight:700;}
  .landing-faq-item[open] summary::before{content:'–';}
  .landing-faq-item p{margin:10px 0 0 16px; font-size:13.5px; line-height:1.55; color:var(--muted);}
  .landing-footer{
    display:flex; flex-direction:column; align-items:center; gap:10px;
    padding:28px 24px; border-top:1px solid var(--line);
    font-size:12.5px; color:var(--muted); text-align:center;
  }
  .landing-footer-row{display:flex; align-items:center; gap:10px;}
  .landing-footer-icon{width:22px; height:22px; border-radius:6px;}
  .landing-footer-links{display:flex; align-items:center; gap:8px; font-size:12px;}
  .landing-footer-links a, .landing-footer-links a:visited{color:var(--muted); text-decoration:none;}
  .landing-footer-links a:hover{color:var(--accent);}
  .landing-footer-links span{color:var(--line);}
  /* Plain <a> tags with no other styling (e.g. the legal-page links at the
     bottom of Impostazioni) otherwise fall back to the browser's default
     link colors (blue/purple), including a distinct :visited color — pin
     both states to the same muted color so a visited link never looks
     different from an unvisited one. */
  .settings-legal-links a, .settings-legal-links a:visited{color:var(--muted); text-decoration:none;}
  .settings-legal-links a:hover{color:var(--accent);}
  .confirm-box p{margin:0 0 18px; font-size:14px; line-height:1.5; color:var(--ink);}
  .confirm-box .note{color:var(--muted); font-size:12px; line-height:normal;}
  .confirm-actions{display:flex; justify-content:flex-end; gap:10px;}

  /* Tab bar mobile (≤640px, 2026-10-02) — barra flottante in basso a pillola, stile "glass",
     4 voci + Más. Su desktop resta nav.tabs. z-index sotto i modali (.confirm-overlay = 1000)
     e sopra il contenuto. Lo spazio in fondo alle pagine (padding-bottom di .app) garantisce
     che l'ultimo contenuto si possa sempre scorrere sopra la barra e resti toccabile. */
  .mobile-tabbar, .mobile-more-sheet, .mobile-more-backdrop{display:none;}
  @media (max-width:640px){
    nav.tabs{display:none;}
    .app{padding-bottom:calc(120px + env(safe-area-inset-bottom));}
    .mobile-tabbar{
      display:flex; position:fixed; z-index:900;
      left:12px; right:12px; bottom:calc(12px + env(safe-area-inset-bottom));
      padding:6px; gap:2px; border-radius:999px;
      background:color-mix(in srgb, var(--surface) 78%, transparent);
      backdrop-filter:blur(18px) saturate(140%); -webkit-backdrop-filter:blur(18px) saturate(140%);
      border:1px solid var(--line);
      box-shadow:var(--shadow-md);
    }
    .mobile-tabbar button{
      flex:1 1 0; min-width:0; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:3px;
      padding:8px 2px; border:none; border-radius:999px; background:transparent;
      color:var(--muted); font-family:'Nunito Sans',sans-serif; font-size:11px; font-weight:600;
      cursor:pointer; -webkit-tap-highlight-color:transparent;
    }
    .mobile-tabbar button span:last-child{max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
    .mobile-tabbar button.active{background:var(--accent-soft); color:var(--accent);}
    .mtab-icon{width:22px; height:22px; display:inline-flex;}
    .mtab-icon svg{width:100%; height:100%; display:block;}
    .mobile-more-backdrop{display:block; position:fixed; inset:0; z-index:905; background:rgba(4,6,9,0.45);
      opacity:0; pointer-events:none; transition:opacity .2s;}
    .mobile-more-backdrop.open{opacity:1; pointer-events:auto;}
    .mobile-more-sheet{
      display:flex; flex-direction:column; position:fixed; z-index:910;
      left:12px; right:12px; bottom:calc(88px + env(safe-area-inset-bottom));
      padding:8px; gap:2px; border-radius:var(--radius-xl);
      background:color-mix(in srgb, var(--surface) 92%, transparent);
      backdrop-filter:blur(18px) saturate(140%); -webkit-backdrop-filter:blur(18px) saturate(140%);
      border:1px solid var(--line); box-shadow:var(--shadow-md);
      opacity:0; transform:translateY(12px); pointer-events:none; transition:opacity .2s, transform .2s;
    }
    .mobile-more-sheet.open{opacity:1; transform:translateY(0); pointer-events:auto;}
    .mobile-more-sheet button{
      display:flex; align-items:center; gap:12px; padding:14px 14px; border:none; border-radius:var(--radius-lg);
      background:transparent; color:var(--ink); font-family:'Nunito Sans',sans-serif; font-size:15px; font-weight:600;
      text-align:left; cursor:pointer; -webkit-tap-highlight-color:transparent;
    }
    .mobile-more-sheet button.active{background:var(--accent-soft); color:var(--accent);}
    /* elementi già fissati in basso: sollevati sopra la tab bar */
    .floating-action-bar{bottom:calc(92px + env(safe-area-inset-bottom));}
    .a2hs-banner{bottom:calc(88px + env(safe-area-inset-bottom));}
    .toast{bottom:calc(92px + env(safe-area-inset-bottom)); right:16px; left:16px; max-width:none;}
  }

  /* Onboarding v3 (bozza, 2026-10-02): wizard del metodo. Schermo intero, card centrata su
     desktop, a tutta pagina su mobile. Tipografia dei post: titolo Spectral, kicker in accento,
     colori dei 4 destini. Riepilogo vivo fisso in basso nella card. */
  .onb3-overlay{display:none; position:fixed; inset:0; z-index:1200; background:var(--bg); padding:24px;}
  .onb3-overlay.show{display:flex; align-items:center; justify-content:center;}
  /* 0.193 (25/10, test con la moglie di Mattia): con una finestra aperta la pagina dietro non scorre, così alla
     chiusura (es. fine dell'onboarding) non resta scrollata in basso con il menu fuori dallo schermo. */
  html:has(.onb3-overlay.show, .confirm-overlay.show){overflow:hidden;}
  .onb3-overlay, .confirm-overlay{overscroll-behavior:contain;}
  .onb3-card{
    width:100%; max-width:560px; max-height:min(860px, calc(100vh - 48px)); display:flex; flex-direction:column;
    background:var(--bg-card); border:1px solid var(--line); border-radius:20px; box-shadow:0 20px 60px rgba(0,0,0,.45); overflow:hidden;
  }
  .onb3-progress{padding:20px 32px 0;}
  .onb3-track{position:relative; height:22px; margin:0 11px;}
  .onb3-track::before{content:''; position:absolute; left:0; right:0; top:9px; height:4px; border-radius:4px; background:var(--line);}
  .onb3-track-fill{position:absolute; left:0; top:9px; height:4px; border-radius:4px; background:var(--accent); transition:width .3s;}
  .onb3-mark{position:absolute; top:0; width:22px; height:22px; border-radius:50%; transform:translateX(-50%); display:flex; align-items:center; justify-content:center; color:#15181B; box-shadow:0 0 0 3px var(--bg-card); opacity:.3; transition:opacity .3s;}
  .onb3-mark.on{opacity:1;}
  .onb3-body{flex:1; overflow-y:auto; padding:28px 32px 36px;}
  .onb3-kicker{display:flex; align-items:center; gap:6px; font-size:12px; font-weight:700; letter-spacing:.6px; text-transform:uppercase; color:var(--accent); margin-bottom:10px;}
  .onb3-title{font-family:'Spectral',serif; font-weight:600; font-size:30px; line-height:1.15; color:var(--ink); margin:0 0 12px;}
  .onb3-desc{font-size:15px; line-height:1.6; color:var(--muted); margin:0 0 24px;}
  .onb3-dests{display:flex; flex-direction:column; gap:12px; margin:0 0 28px;}
  .onb3-dest{display:grid; grid-template-columns:36px 90px minmax(0,1fr); align-items:center; gap:12px;}
  .onb3-dest-icon{width:36px; height:36px; border-radius:50%; display:flex; align-items:center; justify-content:center; color:#15181B;}
  .onb3-dest-name{font-weight:700; font-size:14px;}
  .onb3-dest-desc{font-size:14px; color:var(--muted);}
  .onb3-label{display:block; font-size:13px; font-weight:700; color:var(--ink); margin:0 0 8px; text-transform:none; letter-spacing:0;}
  .onb3-input{width:100%; font-size:17px; padding:12px 14px;}
  /* Campi del wizard: riempimento più chiaro della card e bordo visibile (con --bg-input, più scuro, si perdevano nel nero). */
  .onb3-card{--onb3-field-bg:#2B2E33; --onb3-field-line:rgba(255,255,255,.22);}
  /* MoneyInput (guida del DS, 0.155.0): un solo campo importo. .onb3-money, .goal-money ed .eq-money sono alias di
     .cd-money (il codice li usa per nome). .big = cifra principale (amount-xl 28px); .eq-money resta compatto nelle liste del piano. */
  .cd-money, .onb3-money, .goal-money, .eq-money{
    display:flex; align-items:center; gap:6px; padding:0 12px; max-width:100%;
    background:var(--surface-input); border:1px solid var(--line); border-radius:var(--radius-md);
  }
  .onb3-card .onb3-money{background:var(--onb3-field-bg); border-color:var(--onb3-field-line);}
  .cd-money:focus-within, .onb3-money:focus-within, .goal-money:focus-within, .eq-money:focus-within{border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-soft);}
  .cd-money > span, .onb3-money > span, .goal-money > span, .eq-money > span{color:var(--muted); font-weight:600;}
  .cd-money input, .onb3-money input, .goal-money input, .eq-money input{
    border:none; background:transparent; padding:10px 0; width:100%; min-width:0; color:var(--ink);
    font-family:'IBM Plex Mono',monospace; font-weight:500; font-size:16px; font-variant-numeric:tabular-nums; box-shadow:none !important;
  }
  .cd-money input::-webkit-outer-spin-button, .cd-money input::-webkit-inner-spin-button,
  .onb3-money input::-webkit-outer-spin-button, .onb3-money input::-webkit-inner-spin-button,
  .goal-money input::-webkit-outer-spin-button, .goal-money input::-webkit-inner-spin-button,
  .eq-money input::-webkit-outer-spin-button, .eq-money input::-webkit-inner-spin-button{-webkit-appearance:none; margin:0;}
  .cd-money input, .onb3-money input, .goal-money input, .eq-money input{-moz-appearance:textfield;}
  .cd-money.big, .onb3-money.big, .goal-money.big{padding:2px 16px;}
  .cd-money.big > span, .onb3-money.big > span, .goal-money.big > span{font-size:22px;}
  .cd-money.big input, .onb3-money.big input, .goal-money.big input{font-size:28px; padding:8px 0;}
  .eq-money{padding:0 10px; width:140px;}
  .eq-money input{padding:8px 0;}
  .eq-money input[readonly]{color:var(--muted);}
  .onb3-input, .onb3-card select, .onb3-card input[type="text"], .onb3-card input[type="search"]{background:var(--onb3-field-bg); border:1px solid var(--onb3-field-line);}
  .onb3-input:focus, .onb3-card select:focus, .onb3-card input[type="text"]:focus, .onb3-card input[type="search"]:focus{border-color:var(--accent);}
  .onb3-rows{display:flex; flex-direction:column; gap:10px; margin:0 0 16px;}
  .onb3-row{display:grid; grid-template-columns:40px minmax(0,1fr) auto; align-items:center; gap:12px; padding:10px 12px; border-radius:var(--radius-lg); background:var(--bg-card-alt); cursor:text; text-transform:none; letter-spacing:0; margin:0;}
  .onb3-row-icon{width:40px; height:40px; border-radius:50%; display:flex; align-items:center; justify-content:center; color:#191418;}
  .onb3-row-text{display:flex; flex-direction:column; min-width:0;}
  .onb3-row-name{font-size:14.5px; font-weight:700; color:var(--ink);}
  .onb3-row-hint{font-size:12.5px; color:var(--muted); overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
  /* Calcolatrice a richiesta (Suministros/Otros gastos fijos): pannello attaccato sotto la riga, stesso sfondo. */
  .onb3-row-wrap.calc-open{border-radius:var(--radius-lg); background:var(--bg-card-alt);}
  .onb3-row-wrap.calc-open .onb3-money input[readonly]{color:var(--muted);}
  .onb3-row-amount{display:flex; align-items:center; justify-content:flex-end; gap:8px;}
  .onb3-row-amount .onb3-money{flex:0 0 130px;}
  .onb3-calc-toggle{flex:0 0 auto; width:42px; height:42px; display:flex; align-items:center; justify-content:center; border-radius:var(--radius-md); border:1px solid var(--line); background:var(--bg-input); color:var(--muted); cursor:pointer; padding:0;}
  .onb3-calc-toggle:hover{color:var(--ink); border-color:var(--color-border-strong);}
  .onb3-calc-toggle.on{color:var(--accent); border-color:var(--accent); background:var(--accent-soft);}
  /* Cerdito: in cima alla colonna step (desktop), a sinistra della linea di avanzamento (mobile). */
  .onb3-piggy{display:block; width:30px; height:30px; flex:0 0 auto;}
  .onb3-progress{display:flex; align-items:center; gap:10px;}
  .onb3-progress .onb3-track{flex:1;}
  .onb3-calc{display:flex; flex-direction:column; gap:8px; padding:4px 12px 12px 64px;}
  .onb3-calc-line{display:grid; grid-template-columns:minmax(0,1fr) 110px 32px; align-items:center; gap:8px;}
  .onb3-calc-label{width:100%; min-width:0; padding:9px 12px; border:1px solid var(--line); border-radius:var(--radius-md); background:var(--bg-input); color:var(--ink); font-size:14px;}
  .onb3-calc-label:focus{border-color:var(--accent); outline:none; box-shadow:0 0 0 3px var(--accent-soft);}
  .onb3-calc-amount input{padding:9px 0; font-size:15px;}
  .onb3-calc-remove{width:32px; height:32px; border:none; border-radius:8px; background:transparent; color:var(--muted); font-size:18px; line-height:1; cursor:pointer;}
  .onb3-calc-remove:hover{color:var(--ink); background:var(--bg-input);}
  .onb3-calc-foot{display:flex; justify-content:space-between; align-items:center; gap:12px; padding-top:2px;}
  .onb3-calc-total{font-size:13px; color:var(--muted);}
  .onb3-calc-total strong{color:var(--ink); font-family:'IBM Plex Mono',monospace;}
  .onb3-status{margin:6px 0 18px; min-height:8px;}
  .onb3-range{position:relative; height:8px; border-radius:8px; background:var(--line); margin:6px 0 10px;}
  .onb3-range-ideal{position:absolute; top:0; bottom:0; background:rgba(111,168,255,.45); border-radius:8px;}
  .onb3-range-dot{position:absolute; top:50%; width:14px; height:14px; border-radius:50%; background:var(--dest-vivir); border:2px solid var(--bg-card); transform:translate(-50%,-50%);}
  .onb3-range-text{font-size:14px; color:var(--muted);}
  .onb3-footnote{font-size:12.5px; line-height:1.5; color:var(--muted); border-left:2px solid var(--line); padding-left:12px; margin:0;}
  .onb3-summary{display:none; padding:14px 32px; border-top:1px solid var(--line); background:var(--bg-card-alt);}
  .onb3-summary.show{display:block;}
  .onb3-sum-title, .onb3-sum-empty, .onb3-steps{display:none;}
  /* Velo + freccia in fondo al contenuto quando c'è ancora da scorrere */
  .onb3-more{position:sticky; bottom:-36px; height:96px; margin:-96px -32px 0; pointer-events:none; opacity:0; transition:opacity .25s;
    background:linear-gradient(to bottom, rgba(29,31,34,0) 0%, rgba(29,31,34,.85) 55%, var(--bg-card) 100%);
    display:flex; align-items:flex-end; justify-content:center; padding-bottom:30px;}
  .onb3-body.more .onb3-more{opacity:1;}
  .onb3-more button{pointer-events:auto; width:36px; height:36px; border-radius:50%; border:1px solid var(--accent-border); background:var(--bg-card-alt); color:var(--accent); display:flex; align-items:center; justify-content:center; cursor:pointer; box-shadow:0 6px 18px rgba(0,0,0,.4); animation:onb3Bounce 1.6s ease-in-out infinite;}
  .onb3-body:not(.more) .onb3-more button{pointer-events:none;}
  @keyframes onb3Bounce{0%,100%{transform:translateY(0);} 50%{transform:translateY(4px);}}
  /* Step non ancora fatti: in grigio */
  .onb3-mark:not(.on){background:#3A3D42 !important; color:var(--muted); opacity:1;}
  .onb3-sum-bar{display:flex; height:8px; border-radius:8px; overflow:hidden; background:var(--line); margin-bottom:10px;}
  .onb3-sum-bar span{display:block; height:100%; transition:width .3s;}
  .onb3-sum-row{display:flex; gap:18px; flex-wrap:wrap; align-items:baseline;}
  .onb3-sum-item{display:flex; align-items:baseline; gap:6px; font-size:13px;}
  .onb3-sum-item strong{font-family:'IBM Plex Mono',monospace; font-size:14px; color:var(--ink);}
  .onb3-sum-item em{font-style:normal; color:var(--muted); font-size:12px;}
  .onb3-sum-item.main{margin-left:auto;}
  .onb3-sum-item.main strong{color:var(--accent); font-size:16px;}
  .onb3-sum-item.main strong.neg{color:var(--coral);}
  .onb3-sum-label{color:var(--muted); font-weight:600;}
  .onb3-actions{display:flex; justify-content:space-between; align-items:center; gap:12px; padding:16px 32px 20px; border-top:1px solid var(--line);}
  .onb3-actions .btn{min-width:120px; min-height:44px;}
  /* Desktop: step in verticale a sinistra, contenuto al centro, riepilogo del Piano a destra */
  @media (min-width:900px){
    .onb3-card{max-width:1080px; height:min(760px, calc(100vh - 48px)); max-height:none; display:grid;
      grid-template-columns:210px minmax(0,1fr) 290px; grid-template-rows:minmax(0,1fr) auto;
      grid-template-areas:"steps body side" "steps actions side";}
    .onb3-progress{display:none;}
    .onb3-steps{grid-area:steps; display:flex; flex-direction:column; gap:6px; padding:28px 16px 32px; border-right:1px solid var(--line);}
    .onb3-steps .onb3-piggy{width:34px; height:34px; margin:0 0 18px 10px;}
    .onb3-step{font-family:inherit; position:relative; display:flex; align-items:center; gap:12px; padding:9px 10px; border:none; border-radius:var(--radius-md); background:none; color:var(--muted); font-size:14px; font-weight:600; text-align:left; cursor:default;}
    .onb3-step-num{flex:0 0 14px; font-family:'IBM Plex Mono',monospace; font-size:12px; color:var(--muted); text-align:right;}
    .onb3-step.current .onb3-step-num{color:var(--ink); font-weight:600;}
    .onb3-step-icon{flex:0 0 auto; width:26px; height:26px; border-radius:50%; display:flex; align-items:center; justify-content:center; color:#15181B;}
    .onb3-step.next .onb3-step-icon{background:#3A3D42 !important; color:var(--muted);}
    .onb3-step.done{cursor:pointer; color:var(--ink);}
    .onb3-step.done:hover{background:var(--bg-card-alt);}
    .onb3-step.current{background:var(--bg-card-alt); color:var(--ink);}
    .onb3-body{grid-area:body; padding:36px 40px 40px;}
    .onb3-more{margin:-96px -40px 0; bottom:-40px;}
    .onb3-actions{grid-area:actions; padding:16px 40px 20px;}
    .onb3-summary, .onb3-summary.show, .onb3-summary.final, .onb3-summary.is-empty{grid-area:side; display:flex; flex-direction:column; padding:32px 24px; border-top:none; border-left:1px solid var(--line); overflow-y:auto;}
    .onb3-sum-title{display:block; font-size:12px; font-weight:700; letter-spacing:.6px; text-transform:uppercase; color:var(--accent); margin-bottom:16px;}
    .onb3-sum-empty{display:block; font-size:14px; line-height:1.55; color:var(--muted); margin:0;}
    .onb3-sum-bar{margin-bottom:18px;}
    .onb3-sum-row{flex-direction:column; align-items:stretch; gap:12px;}
    .onb3-sum-item{display:grid; grid-template-columns:minmax(0,1fr) auto 38px; align-items:baseline; gap:8px; font-size:14px;}
    .onb3-sum-item em{text-align:right;}
    .onb3-sum-item.main{margin:6px 0 0; padding-top:14px; border-top:1px solid var(--line); grid-template-columns:minmax(0,1fr) auto;}
    .onb3-sum-item.main strong{font-size:20px;}
  }
  /* Link (design system: Button → Enlace, 0.105.2, regola di Mattia): grigio sottolineato ovunque; giallo dei testi e 600
     solo dentro un riquadro Idea (.cd-idea), dove è l'azione del consiglio. */
  .onb3-link{background:none; border:none; color:var(--muted); font-size:12.5px; text-decoration:underline; text-underline-offset:3px; cursor:pointer; padding:0;}
  .cd-idea .onb3-link{color:var(--accent-ink, var(--accent)); font-weight:600;}
  .onb3-step-group{cursor:default;}
  .onb3-step-group.current-group{color:var(--ink);}
  .onb3-step.sub{padding-left:34px; font-size:13px;}
  .onb3-step.sub .onb3-step-num{display:none;}
  .onb3-step.sub .onb3-step-icon{width:22px; height:22px;}
  .onb3-lang{margin-top:auto; display:flex; align-items:center; gap:4px; padding:10px 10px 0; color:var(--muted);}
  .onb3-lang svg{margin-right:4px;}
  .onb3-lang button{font-family:inherit; font-size:12px; font-weight:700; letter-spacing:.3px; padding:4px 8px; border-radius:6px; border:1px solid transparent; background:none; color:var(--muted); cursor:pointer;}
  .onb3-lang button:hover{color:var(--ink);}
  .onb3-lang button.on{color:var(--ink); border-color:var(--line); background:var(--bg-card-alt);}
  .onb3-fixes{display:flex; flex-direction:column; gap:8px; margin:16px 0;}
  .onb3-fix{display:flex; align-items:center; gap:12px; padding:12px 14px; border-radius:var(--radius-lg); background:var(--bg-card-alt); color:var(--ink);}
  .onb3-fix-icon{width:32px; height:32px; border-radius:50%; display:flex; align-items:center; justify-content:center; color:#15181B; flex-shrink:0;}
  .onb3-fix-text{display:flex; flex-direction:column; gap:2px; flex:1;}
  .onb3-fix-text strong{font-size:14.5px;}
  .onb3-fix-text span{font-size:13px; color:var(--muted);}
  .onb3-sum-item strong.bal{color:var(--ink);}
  .onb3-rep{margin-top:22px; padding-top:18px; border-top:1px solid var(--line);}
  .onb3-rep .onb3-kicker{margin-bottom:6px;}
  .onb3-rep .onb3-levels{margin:10px 0 16px;}
  .onb3-rep-intro{margin:0 0 12px;}
  .onb3-later-link{margin-top:10px;}
  .onb3-opts{display:flex; flex-direction:column; gap:8px; margin:4px 0 10px;}
  .onb3-opt{display:flex; gap:12px; align-items:flex-start; width:100%; text-align:left; padding:12px 14px; border:1px solid var(--line); border-radius:var(--radius-lg); background:transparent; color:var(--ink); cursor:pointer; font:inherit;}
  .onb3-opt:hover{border-color:var(--muted);}
  .onb3-opt.on{border-color:var(--accent); background:var(--accent-soft);}
  .onb3-opt-dot{width:16px; height:16px; border-radius:50%; border:2px solid var(--muted); flex-shrink:0; margin-top:2px; box-sizing:border-box;}
  .onb3-opt.on .onb3-opt-dot{border-color:var(--accent); background:radial-gradient(circle, var(--accent) 40%, transparent 45%);}
  .onb3-opt-text{display:flex; flex-direction:column; gap:2px;}
  .onb3-opt-text strong{font-size:14.5px; font-weight:700;}
  .onb3-opt-text small{color:var(--muted); font-size:12.5px;}
  .onb3-later{display:flex; gap:10px; align-items:center; flex-wrap:wrap; padding:12px 14px; border-radius:var(--radius-lg); background:var(--bg-card-alt); font-size:14px; color:var(--muted); margin-top:6px;}
  .onb3-pct{max-width:160px;}
  .eq-pending{font-size:11px; font-weight:700; letter-spacing:.3px; text-transform:uppercase; color:var(--accent); background:var(--accent-soft); border-radius:6px; padding:2px 8px;}
  .ahora-card{border-color:var(--accent);}
  .ahora-title{margin:0 0 12px;}
  .ahora-paths{display:grid; grid-template-columns:repeat(auto-fit, minmax(280px, 1fr)); gap:12px;}
  .ahora-steps{margin-top:16px; padding-top:14px; border-top:1px solid var(--line);}
  .ahora-head{display:flex; align-items:baseline; justify-content:space-between; gap:12px; margin-bottom:12px;}
  .ahora-head .ahora-title{margin:0;}
  .ahora-next{margin-top:14px;}
  .ahora-next-label{font-size:12px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--muted); margin-bottom:8px;}
  .ahora-paths + .ahora-steps{margin-top:18px;}
  .ahora-title + .ahora-steps{margin-top:0; padding-top:0; border-top:none;}
  .ahora-steps-head{display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:10px;}
  .ahora-steps-head h3{margin:0; font-size:15px;}
  .ahora-path{display:flex; align-items:center; gap:12px; flex-wrap:wrap; padding:14px; border-radius:var(--radius-lg); background:var(--bg-card-alt);}
  .ahora-icon{width:40px; height:40px; border-radius:50%; display:flex; align-items:center; justify-content:center; background:var(--accent-soft); color:var(--accent); flex-shrink:0;}
  .ahora-text{display:flex; flex-direction:column; gap:2px; flex:1; min-width:160px;}
  .ahora-text strong{font-size:15px;}
  .ahora-text > span{font-size:13px; color:var(--muted);}
  .onb3-levels{margin:-8px 0 24px; padding:14px 14px 12px; border-radius:var(--radius-lg); background:var(--bg-card-alt);}
  .onb3-fund-bar{display:grid; grid-template-columns:repeat(3,1fr); gap:4px;}
  .onb3-fund-seg{height:8px; border-radius:8px; background:var(--line); overflow:hidden;}
  .onb3-fund-seg span{display:block; height:100%; background:var(--dest-proteger); transition:width .3s;}
  .onb3-fund-labels{display:grid; grid-template-columns:repeat(3,1fr); gap:4px; margin-top:8px;}
  .onb3-fund-label{display:flex; flex-direction:column; min-width:0;}
  .onb3-fund-label strong{font-size:13px; color:var(--muted); font-weight:700; white-space:nowrap;}
  .onb3-fund-label span{font-family:'IBM Plex Mono',monospace; font-size:14px; color:var(--muted);}
  .onb3-fund-label.reached strong{color:var(--dest-proteger);}
  .onb3-fund-label.active strong{color:var(--ink);}
  .plan-fund-levels{margin-top:12px;}
  .plan-fund-status{font-size:12.5px; color:var(--muted); margin-top:8px;}
  .onb3-fund-status{font-size:14px; color:var(--ink); margin-top:10px; padding-top:10px; border-top:1px solid var(--line);}
  .onb3-levels:empty{display:none;}
  .onb3-field{margin:0 0 20px;}
  .onb3-work{margin-top:28px;}
  .onb3-field .onb3-money{margin-bottom:8px;}
  .onb3-sub{margin:-6px 0 18px; padding-left:14px; border-left:2px solid var(--line);}
  .onb3-two{display:grid; grid-template-columns:1fr 1fr; gap:14px;}
  .onb3-hint{font-size:14px; line-height:1.5; color:var(--muted); margin-top:4px;}
  .onb3-hint:empty{display:none;}
  .onb3-choices{display:flex; gap:10px;}
  .onb3-choice{font-family:inherit; flex:1; min-height:46px; padding:10px 14px; border-radius:var(--radius-lg); border:1px solid var(--line); background:var(--bg-card-alt); color:var(--ink); font-size:15px; font-weight:600; cursor:pointer; transition:border-color .2s, background .2s;}
  .onb3-choice:hover{border-color:var(--color-border-strong);}
  .onb3-choice.on{border-color:var(--accent); background:var(--accent-soft); color:var(--accent);}
  .onb3-note{font-size:14px; line-height:1.55; color:var(--ink); background:var(--bg-card-alt); border-radius:var(--radius-md); padding:12px 14px; margin:0 0 20px;}
  .onb3-list{margin:-10px 0 22px; padding-left:18px; font-size:14px; line-height:1.55; color:var(--muted);}
  .onb3-list li{margin-bottom:4px;}
  .onb3-toggle{display:flex; align-items:center; justify-content:space-between; gap:14px; padding:12px 14px; border-radius:var(--radius-md); background:var(--bg-card-alt); margin:0 0 12px; font-size:14px; font-weight:600; color:var(--ink); text-transform:none; letter-spacing:0; cursor:pointer;}
  .onb3-toggle input{flex:0 0 auto;}
  .onb3-toggle small{display:block; font-size:12.5px; font-weight:500; color:var(--muted); margin-top:2px;}
  .onb3-bank-results{display:flex; flex-wrap:wrap; gap:8px; margin-top:10px;}
  .onb3-bank-results:empty{display:none;}
  .onb3-bank-opt{font-family:inherit; display:inline-flex; align-items:center; gap:8px; padding:7px 12px 7px 8px; border-radius:999px; border:1px solid var(--line); background:var(--bg-card-alt); color:var(--ink); font-size:14px; font-weight:600; cursor:pointer;}
  .onb3-bank-opt:hover{border-color:var(--color-border-strong);}
  .onb3-bank-opt em{font-style:normal; color:var(--accent); font-weight:700; margin-left:2px;}
  .onb3-bank-opt.custom{border-style:dashed; border-color:var(--accent-border);}
  .onb3-bank-opt .bank-badge, .onb3-chip .bank-badge, .onb3-bank-opt .bank-badge-img, .onb3-chip .bank-badge-img{margin:0;}
  .onb3-chips{display:flex; flex-wrap:wrap; gap:8px;}
  .onb3-chip{display:inline-flex; align-items:center; gap:8px; padding:6px 6px 6px 8px; border-radius:999px; background:var(--accent-soft); border:1px solid var(--accent-border); font-size:14px; font-weight:600; color:var(--ink);}
  .onb3-chip button{width:24px; height:24px; border-radius:50%; border:none; background:rgba(255,255,255,.08); color:var(--ink); font-size:15px; line-height:1; cursor:pointer;}
  .onb3-debt-plan{font-size:14.5px; line-height:1.55; color:var(--ink); margin:6px 0 16px;}
  .onb3-debt-plan:empty{display:none;}
  .onb3-debt-item{border:1px solid var(--line); border-radius:var(--radius-lg); padding:14px 16px 2px; margin-bottom:12px;}
  .onb3-debt-item .onb3-debt-plan{margin-bottom:14px;}
  .onb3-debt-head{display:flex; align-items:center; gap:8px; margin-bottom:14px;}
  .onb3-debt-label{flex:1; min-width:0; font-size:16px; font-weight:600;}
  .onb3-debt-add{width:100%; margin:2px 0 16px;}
  /* Tipo di debito (21/10): teselle di testo a due colonne, una su mobile. */
  .onb3-debt-head .onb3-label{flex:1; margin:0;}
  .onb3-debt-types{display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); margin:0 0 14px;}
  .onb3-debt-types .onb3-opt{height:100%;}
  .onb3-debt-typenote{margin:-6px 0 14px;}
  .onb3-debt-rev{display:block; margin:0 0 14px;}
  @media (max-width:560px){ .onb3-debt-types{grid-template-columns:minmax(0,1fr);} }
  .onb3-check{display:flex; align-items:center; gap:10px; font-size:14px; margin:-4px 0 14px; cursor:pointer;}
  .onb3-check input{width:18px; height:18px; accent-color:var(--dest-crecer);}
  .onb3-debt-plan strong{color:var(--dest-deudas);}
  .onb3-debt-fast{margin-top:4px;}
  .onb3-debt-fast strong{color:var(--accent);}
  .onb3-result{border:1px solid var(--accent-border); background:var(--accent-soft); border-radius:var(--radius-lg); padding:18px 20px;}
  .onb3-result-label{font-size:13px; font-weight:700; color:var(--muted);}
  .onb3-result-amount{font-family:'IBM Plex Mono',monospace; font-size:28px; font-weight:500; color:var(--accent); margin:4px 0 6px; display:flex; align-items:baseline; gap:10px;}
  .onb3-result-amount em{font-style:normal; font-size:15px; color:var(--muted);}
  .onb3-result.neg{border-color:var(--line); background:var(--bg-card-alt);}
  .onb3-result.neg p{margin:0; font-size:15px; line-height:1.55; color:var(--ink);}
  .onb3-result.neg p + p{margin-top:6px;}
  .onb3-plan{display:flex; flex-direction:column; gap:6px;}
  .onb3-plan-row{display:grid; grid-template-columns:30px minmax(0,1fr) auto 70px; align-items:center; gap:12px; padding:9px 12px; border-radius:var(--radius-md); background:var(--bg-card-alt);}
  .onb3-plan-row.hl{outline:1px solid var(--accent-border);}
  .onb3-plan-icon{width:30px; height:30px; border-radius:50%; display:flex; align-items:center; justify-content:center; color:#15181B;}
  .onb3-plan-name{font-size:14px; font-weight:700; color:var(--ink); display:flex; flex-direction:column;}
  .onb3-plan-name small{font-size:12px; font-weight:500; color:var(--muted);}
  .onb3-plan-amount{font-family:'IBM Plex Mono',monospace; font-size:14px; color:var(--ink); text-align:right; white-space:nowrap;}
  .onb3-plan-amount em{font-style:normal; color:var(--muted); font-size:12px; margin-left:4px;}
  .onb3-plan-pending{font-family:'Nunito Sans',sans-serif; font-size:13px; color:var(--muted);}
  .onb3-plan-ideal{font-size:12px; color:var(--muted); text-align:right; white-space:nowrap;}
  @media (max-width:640px){
    .onb3-overlay{padding:0;}
    .onb3-card{max-width:none; max-height:none; height:100%; border-radius:0; border:none; box-shadow:none;}
    .onb3-progress{padding:calc(16px + env(safe-area-inset-top)) 20px 0;}
    .onb3-body{padding:22px 20px 36px;}
    .onb3-more{margin:-96px -20px 0; bottom:-36px;}
    .onb3-title{font-size:26px;}
    .onb3-dest{grid-template-columns:36px minmax(0,1fr); row-gap:2px;}
    .onb3-dest-desc{grid-column:2;}
    .onb3-row{grid-template-columns:36px minmax(0,1fr) auto; gap:10px;}
    .onb3-row-amount{gap:6px;}
    .onb3-row-amount .onb3-money{flex-basis:108px;}
    .onb3-calc-toggle{width:38px; height:38px;}
    .onb3-row-icon{width:36px; height:36px;}
    .onb3-calc{padding:4px 12px 12px;}
    .onb3-calc-line{grid-template-columns:minmax(0,1fr) 96px 32px; gap:6px;}
    .onb3-two{grid-template-columns:1fr; gap:0;}
    .onb3-plan-row{grid-template-columns:28px minmax(0,1fr) auto; gap:10px;}
    .onb3-plan-ideal{display:none;}
    .onb3-result-amount{font-size:30px;}
    .onb3-summary{padding:12px 20px;}
    .onb3-sum-bar{margin-bottom:8px;}
    .onb3-sum-item:not(.main){display:none;}
    .onb3-card.typing .onb3-summary, .onb3-card.typing .onb3-actions{display:none;}
    .onb3-actions{padding:12px 20px calc(14px + env(safe-area-inset-bottom));}
  }

  /* iOS Safari auto-zooms the page on focusing any input/select whose computed
     font-size is under 16px — that's the "page grows and pans sideways when I
     tap a field" behaviour. Keeping form fields at >=16px on mobile only (the
     compact look under 16px stays on desktop) avoids triggering it at all.
     Keep this block LAST in the file: every rule above sets font-size on some
     input/select variant at equal or higher specificity than plain `input,
     select`, so with an unconditional cascade, whichever rule is written last
     wins regardless of the media query — this one needs to out-rank all of
     them, including ones added after this comment was written. */
  @media (max-width:640px){
    input, select, .multiselect-search{font-size:16px;}
  }

  /* Tooltips only make sense with a real hover state — on touch they either
     never appear or need an extra tap that eats the first tap meant for the
     button underneath. Turn them off on touch devices everywhere except
     Pareja, where the user still wants them. Same equal-specificity-vs-
     source-order situation as the font-size block above (both this rule and
     the base .has-tooltip:hover::after are `.has-tooltip:hover::after`), so
     this also needs to stay LAST in the file. */
  @media (hover:none) and (pointer:coarse){
    .has-tooltip:hover::after, .has-tooltip:hover::before{display:none;}
    #panel-pareja .has-tooltip:hover::after, #panel-pareja .has-tooltip:hover::before{display:block;}
  }

/* ---------- Primeros pasos (Inicio) ---------- */
.tasks-progress{font-family:'Nunito Sans',sans-serif; font-size:13px; font-weight:600; color:var(--muted); margin-left:6px;}
.task-list{display:flex; flex-direction:column; gap:8px;}
.task-row{display:flex; align-items:center; gap:12px; width:100%; padding:12px 14px; border-radius:var(--radius-lg); border:1px solid var(--line); background:var(--bg-card-alt); color:var(--ink); font:inherit; text-align:left; cursor:pointer;}
@media (hover: hover) and (pointer: fine){ .task-row:hover:not(:disabled){border-color:var(--color-border-strong);} }
.task-row.highlight{border-color:var(--accent); background:var(--accent-soft);}
.task-row.done{cursor:default; opacity:.6;}
.task-check{flex:0 0 22px; height:22px; border-radius:50%; border:2px solid var(--line); display:flex; align-items:center; justify-content:center; font-size:13px; font-weight:700;}
.task-row.done .task-check{background:var(--color-success); border-color:var(--color-success); color:#15181B;}
.task-row.done .task-name{text-decoration:line-through;}
.task-text{flex:1; min-width:0; display:flex; flex-direction:column; gap:2px;}
.task-name{font-size:14.5px; font-weight:600;}
.task-optional{font-weight:400; color:var(--muted);}
.task-desc{font-size:13px; color:var(--muted);}
.task-arrow{color:var(--muted); font-size:20px; line-height:1;}

/* ---------- Plan → Equilibra tu plan ---------- */
.eq-intro{display:flex; align-items:center; gap:24px;}
.eq-intro-text{flex:1; min-width:0;}
.eq-gauge{flex:0 0 auto; display:flex; flex-direction:column; align-items:center; gap:4px;}
.eq-gauge-ring{position:relative; width:84px; height:84px;}
.eq-gauge-ring svg{display:block;}
.eq-gauge-ring circle{transition:stroke-dasharray .4s;}
.eq-gauge-value{position:absolute; inset:0; display:flex; align-items:center; justify-content:center; font-family:'IBM Plex Mono',monospace; font-size:16px; font-weight:500;}
.eq-gauge-label{font-size:12px; font-weight:700; letter-spacing:.4px; text-transform:uppercase; white-space:nowrap;}
.eq-status{margin:12px 0 0; font-size:14.5px; font-weight:600;}
.eq-status.ok{color:var(--color-success);}
.eq-section{padding:0; overflow:hidden;}
.eq-head{display:flex; align-items:center; gap:12px; width:100%; padding:16px 18px; border:none; background:none; color:var(--ink); font:inherit; text-align:left; cursor:pointer;}
.eq-name{flex:1; min-width:0;}
.eq-figures{display:flex; align-items:baseline; gap:12px; flex-wrap:wrap; justify-content:flex-end;}
.eq-amount{font-family:'IBM Plex Mono',monospace; font-size:16px; font-weight:500;}
.eq-pct{font-family:'IBM Plex Mono',monospace; font-size:14px; color:var(--muted);}
.eq-plan{font-size:12px; color:var(--muted); background:var(--bg-card-alt); border-radius:999px; padding:2px 8px; white-space:nowrap;}
.eq-chevron{flex:0 0 auto; color:var(--muted); transition:transform .2s;}
.eq-section.open .eq-chevron{transform:rotate(180deg);}
/* 0.199: Crecer spento finché il colchón non arriva al primo livello (il metodo: prima Proteger). */
.eq-locked .eq-name, .eq-locked .eq-figures{opacity:.5;}
.eq-view{margin:0 0 12px;}
.eq-dis-debt{color:var(--fire);}
.eq-lock-note{margin:-8px 0 0; padding:0 18px 14px; font-size:12.5px; line-height:1.45; color:var(--muted);}
.eq-body{display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:24px; padding:4px 18px 18px;}
.eq-main:empty{display:none;}
.eq-main:empty + .eq-advice{grid-column:1/-1;}
.eq-advice{font-size:14px; line-height:1.55; color:var(--ink); background:var(--bg-card-alt); border-radius:var(--radius-lg); padding:12px 14px; align-self:start;} /* audit 0.108: bloque del design system, non più bordo sinistro */
.eq-keep{display:block; margin-top:14px;}
.eq-field-label{display:block; font-size:12px; color:var(--muted); margin-bottom:6px; text-transform:none; letter-spacing:0;}
.eq-items{display:flex; flex-direction:column; gap:8px;}
.eq-item{background:var(--bg-card-alt); border-radius:var(--radius-md); padding:8px 10px;}
.eq-item-row{display:flex; align-items:center; gap:8px;}
.eq-item-name{flex:1; min-width:0; font-size:14px; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.eq-item .onb3-calc-toggle{width:36px; height:36px;}
.eq-item-detail{font-size:12px; color:var(--muted); margin-top:4px;}
.eq-x{flex:0 0 28px; height:28px; border:none; border-radius:8px; background:transparent; color:var(--muted); font-size:18px; line-height:1; cursor:pointer;}
.eq-x:hover{color:var(--ink); background:var(--bg-input);}
.eq-lines{display:flex; flex-direction:column; gap:6px; margin-top:8px; padding-left:10px; border-left:2px solid var(--line);}
.eq-line{display:flex; align-items:center; gap:6px;}
.eq-line-label{flex:1; min-width:0; padding:8px 10px; border:1px solid var(--line); border-radius:var(--radius-md); background:var(--bg-input); color:var(--ink); font-size:14px;}
.eq-line .eq-money{width:120px;}
.eq-add{display:flex; align-items:center; gap:8px; margin-top:10px;}
.eq-add input[type="text"]{flex:1; min-width:0;}
.eq-empty{font-size:13px; color:var(--muted); margin:0;}
.eq-debts{display:flex; flex-direction:column; gap:6px; margin-bottom:10px;}
.eq-debt{display:flex; justify-content:space-between; gap:12px; font-size:14px;}
@media (max-width:760px){
  .eq-body{grid-template-columns:1fr; gap:14px;}
  .eq-intro{align-items:flex-start; gap:14px;}
  /* Solo l'anello (figlio diretto): prima anche la spunta al centro diventava 64px e usciva dal cerchio (12/10). */
  .eq-gauge-ring, .eq-gauge-ring > svg{width:64px; height:64px;}
  .eq-gauge-value{font-size:14px;}
  .eq-gauge-value svg{width:22px; height:22px;}
  .eq-advice{border-left:none; border-top:2px solid var(--accent); padding:12px 0 0;}
  .eq-head{flex-wrap:wrap; row-gap:6px;}
  .eq-figures{order:3; width:100%; justify-content:flex-start;}
}

/* Titoli dei blocchi del Plan (Vivir/Proteger/Crecer/Disfrutar): come .onb3-kicker dell'onboarding. Colore dal JS (decoratePlanKickers()). */
.plan-kicker, .card h2.plan-kicker{display:flex; align-items:center; gap:8px; font-family:'Nunito Sans',sans-serif; font-size:12px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; line-height:1.2;}
.plan-kicker-icon{display:inline-flex; flex:0 0 auto;}


/* ---------- Plan / Este mes ---------- */
.pvr-table{display:flex; flex-direction:column;}
.pvr-row{display:grid; grid-template-columns:minmax(0,1.2fr) minmax(0,1fr) minmax(0,1fr) minmax(0,1.4fr); align-items:center; gap:12px; padding:12px 0; border-bottom:1px solid var(--line);}
.pvr-row:last-child{border-bottom:none;}
.pvr-head{padding:4px 0 8px; font-size:11.5px; font-weight:700; letter-spacing:.5px; text-transform:uppercase; color:var(--muted);}
.pvr-num{font-family:'IBM Plex Mono',monospace; font-size:16px;}
.pvr-progress{display:flex; align-items:center; gap:10px;}
.pvr-bar{flex:1; height:6px; border-radius:6px; background:var(--line); overflow:hidden;}
.pvr-bar-fill{height:100%; border-radius:6px;}
.pvr-ratio{flex:0 0 auto; font-size:12px; color:var(--muted); white-space:nowrap;}
.pvr-muted{padding:6px 0 10px; border-bottom:1px solid var(--line);}
.pvr-muted .pvr-num{font-size:13px; color:var(--muted);}
.pvr-sub{font-size:12.5px; color:var(--muted); padding-left:22px;}
.pvr-empty{display:flex; align-items:center; gap:14px; flex-wrap:wrap; margin-top:16px; padding:14px 16px; border-radius:var(--radius-lg); border:1px solid var(--accent-border); background:var(--accent-soft);}
.pvr-empty-icon{flex:0 0 40px; height:40px; border-radius:50%; display:flex; align-items:center; justify-content:center; background:var(--accent); color:var(--on-accent);}
.pvr-empty-text{flex:1; min-width:200px; display:flex; flex-direction:column; gap:2px; font-size:14px; color:var(--ink);}
.pvr-empty-text strong{font-size:15px; color:var(--ink);}
.csp-overview-income{margin:0 0 12px; font-size:14px;}
.pvr-pair{display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-bottom:12px;}
.pvr-pair-label{font-size:11.5px; font-weight:700; letter-spacing:.5px; text-transform:uppercase; color:var(--muted); margin-bottom:4px;}
.pvr-pair-value{font-family:'IBM Plex Mono',monospace; font-size:16px; font-weight:500;}
@media (max-width:640px){
  .pvr-row{grid-template-columns:minmax(0,1fr) auto auto; row-gap:8px;}
  .pvr-head span:last-child{display:none;}
  .pvr-progress{grid-column:1/-1;}
  .pvr-progress:empty{display:none;}
}


/* Stellina accanto al nome del conto favorito (preselezionato in Registrar movimiento) */
.account-favorite-star{color:var(--accent); font-size:13px; margin-left:2px;}

/* Classificazione per destino (struttura 07/10) */
.catdest-box{max-width:720px;}
.catdest-body{display:flex; flex-direction:column; gap:8px; max-height:min(60vh, 560px); overflow-y:auto; padding-right:4px;}
.catdest-row{display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; padding:12px 14px; border-radius:var(--radius-lg); background:var(--bg-card-alt);}
.catdest-row.sub{background:transparent; border:1px solid var(--line);}
.catdest-group{display:flex; flex-direction:column; gap:8px; padding:12px 14px; border-radius:var(--radius-lg); background:var(--bg-card-alt);}
.catdest-info{display:flex; flex-direction:column; gap:2px; min-width:160px; flex:1;}
.catdest-info strong{font-size:14.5px;}
.catdest-info span{font-size:12.5px; color:var(--muted);}
.catdest-choices{display:flex; gap:6px; flex-wrap:wrap;}
.catdest-choice{display:inline-flex; align-items:center; gap:6px; font-family:inherit; font-size:12.5px; font-weight:700; padding:6px 10px; border-radius:999px; border:1px solid var(--line); background:transparent; color:var(--muted); cursor:pointer;}
.catdest-choice:hover{color:var(--ink); border-color:var(--dest);}
.catdest-choice.on{color:var(--ink); border-color:var(--dest); background:color-mix(in srgb, var(--dest) 18%, transparent);}
.catdest-dot{width:18px; height:18px; border-radius:50%; display:inline-flex; align-items:center; justify-content:center; background:var(--dest); color:#15181B;}
.catdest-done{margin:8px 0; font-size:15px; color:var(--ink);}

/* Inicio a riquadri (gradino 2): giudizio, barre verticali, riquadri per sezione */
.hv-card{display:flex; align-items:center; gap:16px;}
.hv-icon{width:52px; height:52px; border-radius:50%; flex-shrink:0; display:flex; align-items:center; justify-content:center; background:var(--bg-card-alt); color:var(--muted);}
.hv-card.ok .hv-icon{background:color-mix(in srgb, var(--color-success) 18%, transparent); color:var(--color-success);}
.hv-card.warn .hv-icon{background:color-mix(in srgb, var(--color-warning) 18%, transparent); color:var(--color-warning);}
.hv-card.bad .hv-icon{background:color-mix(in srgb, var(--fire) 18%, transparent); color:var(--fire);}
.hv-card.ok{border-color:color-mix(in srgb, var(--color-success) 45%, var(--line));}
.hv-card.warn{border-color:color-mix(in srgb, var(--color-warning) 45%, var(--line));}
.hv-card.bad{border-color:color-mix(in srgb, var(--fire) 50%, var(--line));}
.hv-text{display:flex; flex-direction:column; gap:3px; flex:1; min-width:0;}
.hv-kicker{font-size:12px; color:var(--muted); text-transform:uppercase; letter-spacing:.4px; font-weight:700;}
.hv-text strong{font-family:'Spectral',serif; font-size:26px; font-weight:600; line-height:1.2; color:var(--ink);}
.hv-text > span:last-child{font-size:14px; color:var(--muted);}
.hb-chart{display:flex; justify-content:space-around; align-items:flex-end; gap:12px; padding:8px 4px 0;}
.hb-amount{font-family:'IBM Plex Mono',monospace; font-size:12.5px; font-weight:500; color:var(--ink); min-height:16px; white-space:nowrap;}
.hb-amount.over{color:var(--fire);}
.hb-name{font-size:12px; font-weight:600; color:var(--muted); line-height:1.2; text-align:center; margin-top:-4px;}
.hb-col{display:flex; flex-direction:column; align-items:center; gap:10px; flex:1; max-width:90px; border:none; background:none; padding:6px 0; cursor:pointer; border-radius:var(--radius-md);}
@media (hover: hover) and (pointer: fine){ .hb-col:hover{background:var(--bg-card-alt);} }
.hb-track{position:relative; width:34px; height:150px; border-radius:var(--radius-md); background:var(--line); overflow:hidden; display:flex; align-items:flex-end; justify-content:center;}
.hb-track.dashed{background:none; border:2px dashed var(--line);}
.hb-fill{display:block; width:100%; border-radius:var(--radius-md);}
.hb-done{position:absolute; bottom:10px; color:var(--color-success);}
.hb-icon{width:30px; height:30px; border-radius:50%; display:flex; align-items:center; justify-content:center; color:#15181B;}
/* Titolo della sezione "En detalle" in Inicio (12/10): separa il riepilogo (verdetto, barre) dai box dei destinati. */
.home-section-title{font-family:'Spectral',serif; font-weight:600; font-size:19px; color:var(--ink); margin:28px 0 12px;}
.hd-grid{display:grid; grid-template-columns:repeat(3, minmax(0,1fr)); gap:16px; margin-bottom:20px;}
@media (max-width:900px){ .hd-grid{grid-template-columns:repeat(2, minmax(0,1fr));} }
@media (max-width:560px){ .hd-grid{grid-template-columns:1fr;} }
.hd-box{display:flex; flex-direction:column; gap:12px; margin:0; text-align:left; font:inherit; color:var(--ink); cursor:pointer; width:100%;}
@media (hover: hover) and (pointer: fine){ .hd-box:hover{border-color:var(--muted);} }
.hd-body{display:flex; align-items:center; gap:16px;}
.hd-donut{position:relative; width:96px; height:96px; flex-shrink:0;}
.hd-center{position:absolute; inset:0; display:flex; align-items:center; justify-content:center; font-family:'IBM Plex Mono',monospace; font-size:16px; font-weight:500; color:var(--ink);}
.hd-center.over{color:var(--fire);}
.hd-lines{display:flex; flex-direction:column; gap:6px; flex:1; min-width:0;}
.hd-line{display:flex; justify-content:space-between; gap:8px; font-size:13px; color:var(--muted);}
.hd-line strong{font-family:'IBM Plex Mono',monospace; font-size:14px; color:var(--ink); white-space:nowrap;}
.hd-line.fire, .hd-line.fire strong{color:var(--fire); font-weight:700;}
.hd-line.muted strong{color:var(--muted);}
.hd-note{margin:0; font-size:13px; color:var(--muted);}
.hd-note.warn{color:var(--color-danger);}
.hd-trend{margin:4px 0 0; font-size:12.5px; font-weight:700;}
.hd-trend.ok{color:var(--color-success);} .hd-trend.warn{color:var(--fire);}
.hd-trend span{font-weight:400; color:var(--muted);}
.hd-done{display:inline-flex; align-items:center; gap:6px; font-size:13px; font-weight:700; color:var(--color-success);}

/* Giudizio e barre affiancati (desktop): il giudizio diventa verticale, centrato */
.home-top{display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1.4fr); gap:16px; margin-bottom:20px;}
.home-top > .card{margin:0;}
.home-top .hv-card{flex-direction:column; justify-content:center; text-align:center; gap:12px;}
.home-top .hv-icon{width:64px; height:64px;}
.home-top .hv-text{align-items:center; flex:0;}
@media (max-width:760px){ .home-top{grid-template-columns:1fr;} }
/* Mobile (12/10, revisione della piega): verdetto in riga (icona accanto al titolo) e barre più basse, così chi torna
   vede verdetto e barre nella prima schermata. */
@media (max-width:760px){
  .home-top .hv-card{flex-direction:row; flex-wrap:wrap; text-align:left; align-items:center; justify-content:flex-start; gap:10px 14px;}
  .home-top .hv-icon{width:44px; height:44px;}
  .home-top .hv-icon svg{width:22px; height:22px;}
  .home-top .hv-text{align-items:flex-start; flex:1 1 calc(100% - 58px);}
  .home-top .hv-card > .btn{margin-left:58px;}
  .hb-track{height:110px;}
}

/* Testo di dettaglio in fondo ai riquadri, sotto una linea a tutta larghezza */
.hd-box{justify-content:flex-start;}
.hd-body{flex:1;}
.hd-foot{margin:2px -20px -4px; padding:12px 20px 0; border-top:1px solid var(--line); font-size:13px; line-height:1.45; color:var(--muted);}
.hd-foot strong{font-weight:700;}
.hd-foot svg{vertical-align:-3px; margin-right:2px;}
.hd-foot.ok, .hd-foot.ok strong{color:var(--color-success);}
.hd-foot.warn{color:var(--color-danger);}
.hd-foot.trend-ok strong{color:var(--color-success);}
.hd-foot.trend-warn strong{color:var(--fire);}
.hd-foot.fire{color:var(--fire); font-weight:700;}

.hd-foot.carry{color:var(--muted);}
.hd-foot.carry strong{color:var(--fire);}

/* Pagina di dettaglio di un destino (gradino 3, 11/10) */
.dd-back{margin-bottom:12px;}
.dd-hero{display:flex; flex-direction:column; gap:6px;}
.dd-hero.over{border-left-color:var(--fire);}
/* Audit 0.108: il titoletto del riquadro principale di un destino è il kicker del design system (icona + colore del destino). */
.dd-kicker{display:flex; align-items:center; gap:8px; font-size:12px; color:var(--dest, var(--muted)); text-transform:uppercase; letter-spacing:.06em; font-weight:700;}
.dd-verdict{font-family:'Spectral',serif; font-size:28px; font-weight:800; color:var(--ink);}
.dd-hero.over .dd-verdict{color:var(--fire);}
.dd-sub{font-size:14px; color:var(--muted);}
.dd-sub.small{font-size:12px;}
.dd-bar{position:relative; height:8px; border-radius:6px; background:var(--line);}
.dd-bar > span{display:block; height:100%; border-radius:6px; background:var(--dest, var(--gold));}
.dd-bar.big{height:12px; margin-top:8px;}
.dd-bar.big i{position:absolute; top:-4px; bottom:-4px; width:2px; background:var(--ink); border-radius:2px;}
.dd-hero.over .dd-bar > span, .dd-group.over .dd-bar > span{background:var(--fire);}
.dd-groups{display:flex; flex-direction:column; gap:10px; margin-top:12px;}
.dd-group{border:1px solid var(--line); border-radius:var(--radius-lg); background:var(--bg-card-alt); overflow:hidden;}
.dd-group.over{border-color:color-mix(in srgb, var(--fire) 45%, var(--line));}
.dd-head{display:flex; flex-direction:column; gap:8px; width:100%; padding:12px 14px; background:none; border:none; color:var(--ink); font:inherit; text-align:left; cursor:pointer;}
.dd-head-top, .dd-head-bottom{display:flex; justify-content:space-between; align-items:center; gap:10px; flex-wrap:wrap;}
.dd-title{font-weight:700; min-width:0;}
.dd-nums{font-family:'IBM Plex Mono',monospace; font-size:14px; color:var(--muted); white-space:nowrap;}
.dd-nums strong{color:var(--ink);}
.dd-chip{font-size:11.5px; padding:2px 8px; border-radius:999px; border:1px solid var(--line); color:var(--muted);}
.dd-status{font-size:12.5px; color:var(--muted);}
.dd-status.fire{color:var(--fire); font-weight:700;}
.dd-status.fire span{font-weight:400; color:var(--muted);}
.dd-action{padding:0 14px 12px;}
.dd-body{border-top:1px solid var(--line); padding:8px 14px 12px; display:flex; flex-direction:column; gap:6px;}
.dd-link{display:flex; justify-content:space-between; align-items:center; gap:8px; flex-wrap:wrap; font-size:13px; padding-bottom:8px; border-bottom:1px dashed var(--line); margin-bottom:4px;}
.dd-link label{display:flex; align-items:center; gap:6px; color:var(--muted); font-size:12.5px; white-space:nowrap;}
.dd-link select{width:170px; font-size:12.5px; padding:4px 6px;}
.dd-tx{display:grid; grid-template-columns:44px minmax(0,1fr) 150px 84px; align-items:center; gap:8px; font-size:13px;}
.dd-tx-date{font-family:'IBM Plex Mono',monospace; font-size:14px; color:var(--muted);}
.dd-tx-label{overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.dd-tx-cat{width:100%; font-size:12px; padding:4px 6px;}
.dd-tx strong{font-family:'IBM Plex Mono',monospace; font-size:14px; white-space:nowrap; text-align:right;}
.dd-tx strong.refund{color:var(--color-success);}
@media (max-width:560px){
  .dd-tx{grid-template-columns:40px minmax(0,1fr) auto;}
  .dd-tx-cat, .dd-tx .cat-pick-btn{grid-column:2 / 4; grid-row:2;}
}
.dd-groups{--dest:var(--gold);}
.dd-perday{font-family:'IBM Plex Mono',monospace; font-size:16px; font-weight:500; color:var(--dest);}
.dd-stack{display:flex; overflow:hidden;}
.dd-stack > span{flex:none; border-radius:0;}
.dd-stack > span:first-child{border-radius:6px 0 0 6px;}
.dd-stack > span.dd-hatch{background:repeating-linear-gradient(45deg, var(--muted) 0 3px, transparent 3px 7px);}
.dd-stack i{position:absolute;}
.dd-bar.big.dd-stack{overflow:visible;}
.dd-carry{margin:6px 0 0; font-size:13px; color:var(--fire);}
.dd-committed{display:flex; flex-direction:column; gap:6px; margin-top:8px;}
.dd-history{display:flex; flex-direction:column; gap:10px; margin-top:8px;}
.dd-hist{display:grid; grid-template-columns:90px minmax(0,1fr) 90px; align-items:center; gap:10px; font-size:13px;}
.dd-hist-m{text-transform:capitalize; color:var(--muted);}
.dd-hist-v{font-family:'IBM Plex Mono',monospace; text-align:right;}
.dd-hist-v.fire{color:var(--fire); font-weight:700;}
.dd-bar.is-over > span{background:var(--fire);}
.dd-subhead{margin:12px 0 4px; font-size:12px; text-transform:uppercase; letter-spacing:.4px; color:var(--muted); font-weight:700;}
.dd-today{position:absolute; top:-22px; transform:translateX(-50%); font-style:normal; font-size:11px; font-weight:700; color:var(--ink); text-transform:uppercase; letter-spacing:.4px;}
.dd-bar.big.dd-stack{margin-top:26px;}
.dd-legend{display:flex; flex-wrap:wrap; gap:6px 14px; font-size:12px; color:var(--muted); margin-top:4px;}
.dd-legend span{display:inline-flex; align-items:center; gap:6px;}
.dd-legend .sw{display:inline-block; width:12px; height:8px; border-radius:3px; background:var(--dest);}
.dd-legend .sw.hatch{background:repeating-linear-gradient(45deg, var(--muted) 0 2px, transparent 2px 5px);}
.dd-legend .sw.fire{background:var(--fire);}
.dd-legend .sw.line{width:2px; height:12px; background:var(--ink); border-radius:1px;}
.dd-trend{margin:6px 0 0; font-size:14px; font-weight:700;}
.dd-trend.ok{color:var(--color-success);} .dd-trend.warn{color:var(--fire);}
.dd-tx-actions{display:flex; gap:4px; justify-content:flex-end;}
.dd-tx-actions .btn{padding:2px 8px;}
/* Selettore visivo delle categorie (11/10) */
select.cat-native{display:none;}
.cat-pick-btn{display:flex; flex-direction:column; align-items:flex-start; gap:2px; width:100%; position:relative; padding:9px 34px 9px 12px; border:1px solid var(--line); border-radius:var(--radius-md); background:var(--bg-input, var(--bg-card-alt)); color:var(--ink); font:inherit; text-align:left; cursor:pointer;}
.cat-pick-btn:hover{border-color:var(--muted);}
.cat-pick-btn strong{font-size:14px;}
.cat-pick-btn span{font-size:12px; color:var(--muted);}
.cat-pick-btn .ph{font-size:14px; color:var(--muted);}
.cat-pick-btn i{position:absolute; right:12px; top:50%; transform:translateY(-50%); font-style:normal; color:var(--muted);}
.cat-pick-btn.compact{padding:6px 28px 6px 10px; min-width:150px; border-left-width:3px;}
.cat-pick-btn.compact strong{font-size:13px; font-weight:600;}
.cat-pick-btn.compact .ph{font-size:13px;}
.cat-sug h3{color:var(--accent);}
.dd-tx .cat-pick-btn{min-width:0;}
.dd-tx .cat-pick-btn strong, .dd-line .cat-pick-btn strong{font-family:inherit; font-size:13px; color:var(--ink);}
.cat-picker-overlay{z-index:1100;}
.cat-picker{max-width:720px; display:flex; flex-direction:column; gap:12px;}
.cat-picker-head{display:flex; gap:8px; position:sticky; top:-22px; background:var(--bg-card); padding-top:4px; z-index:1;}
.cat-picker-head input{flex:1; font-size:15px; padding:10px 12px;}
.cat-group h3{margin:6px 0 8px; font-size:12px; text-transform:uppercase; letter-spacing:.4px; color:var(--muted); font-weight:700;}
.cat-tiles{display:grid; grid-template-columns:repeat(auto-fill, minmax(190px, 1fr)); gap:8px;}
.cat-tile{display:flex; flex-direction:column; gap:3px; padding:10px 12px; border:1px solid var(--line); border-top:3px solid var(--dest); border-radius:var(--radius-lg); background:var(--bg-card-alt); color:var(--ink); font:inherit; text-align:left; cursor:pointer;}
.cat-tile:hover{border-color:var(--dest);}
.cat-tile.on{background:color-mix(in srgb, var(--dest) 16%, var(--bg-card-alt)); border-color:var(--dest);}
.cat-tile strong{font-size:14px;}
.cat-tile span{font-size:12px; line-height:1.35; color:var(--muted);}
.cat-picker-foot{display:flex; gap:8px; justify-content:flex-end; border-top:1px solid var(--line); padding-top:12px;}
.cat-picker-head h2{flex:1; margin:0; align-self:center; font-family:'Spectral',serif; font-size:18px; font-weight:600;}
.cat-picker-head h2:empty{display:none;}
/* Modalità semplice: il destino si sceglie con le teselle .goal-cat (Choice del DS), a due colonne. */
body.cat-simple-mode .dest-field{display:none !important;}
.confirm-box.cat-picker.simple{max-width:480px;}
.cat-picker.simple .cat-group{margin-top:12px;}
.dest-choice-wrap{width:100%;}
.field > .dest-help-link{order:3; align-self:flex-start; margin-top:4px;}
.goal-cats.dest-choice{grid-template-columns:repeat(2, minmax(0,1fr)); margin:0; width:100%;}
.cat-picker.simple .goal-cats.dest-choice{grid-template-columns:1fr;}
.cat-picker-foot-space{flex:1;}
.cat-picker-foot .dest-help-link{align-self:center;}
/* Scelta del destino in una riga di tabella: bottoni con l'icona del destino, poi il kicker scelto e la matita. */
.dest-pick{display:flex; align-items:center; gap:4px; flex-wrap:nowrap; min-height:32px;}
.dest-pick-btn{width:30px; height:30px; flex:none; display:inline-grid; place-items:center; padding:0; border-radius:999px; border:1px solid transparent; background:color-mix(in srgb, var(--dest) 14%, transparent); color:var(--dest); cursor:pointer; transition:border-color .16s ease, background .16s ease, transform .16s ease-out;}
.dest-pick-btn:active{transform:scale(.97);}
.dest-pick-btn[aria-pressed="true"]{border-color:var(--dest); background:color-mix(in srgb, var(--dest) 24%, transparent);}
.dest-pick-btn.help, .dest-pick-btn.clear, .dest-pick-btn.edit, .dest-pick-btn.other{background:transparent; border-color:var(--line);}
@media (hover:hover) and (pointer:fine){ .dest-pick-btn:hover{border-color:var(--dest);} .dest-pick-btn.help:hover, .dest-pick-btn.clear:hover, .dest-pick-btn.edit:hover, .dest-pick-btn.other:hover{border-color:var(--ink); color:var(--ink);} }
.dest-pick-kicker{margin-right:4px;}
.tx-dest-kicker{display:inline-flex; font-size:11.5px; gap:6px;}
.dest-debt-field{display:flex; flex-direction:column; align-items:flex-start; gap:6px; margin-top:12px; font-size:13px; font-weight:600; color:var(--muted);}
.dest-tr-note{margin:10px 0 0;}
/* Aiuto sui destini: riquadri Idea nel colore del destino (non il giallo del consiglio). */
#dest-help-overlay{z-index:1150;}
.dest-help-box{max-width:560px;}
.dest-help-list{display:flex; flex-direction:column; gap:8px;}
.dest-idea .cd-idea{background:linear-gradient(135deg, transparent 55%, color-mix(in srgb, var(--dest) 18%, transparent));}
.dest-idea .cd-idea-icon{background:color-mix(in srgb, var(--dest) 18%, transparent); color:var(--dest);}
.dest-idea .cd-idea-bg{color:var(--dest);}
@media (max-width:560px){ .goal-cats.dest-choice{grid-template-columns:1fr;} }
@media (max-width:560px){ .cat-picker-overlay{align-items:flex-end; padding:0;} .cat-picker{max-height:88vh; border-radius:16px 16px 0 0;} .cat-tiles{grid-template-columns:1fr 1fr;} }
/* Disfrutar: legenda a destra della barra */
.dd-barrow{display:grid; grid-template-columns:minmax(0,1fr) auto; gap:20px; align-items:center;}
.dd-barrow .dd-legend{flex-direction:column; gap:6px; margin:0; max-width:260px;}
.dd-barrow .dd-bar.big.dd-stack{margin-top:22px;}
@media (max-width:700px){ .dd-barrow{grid-template-columns:1fr;} .dd-barrow .dd-legend{flex-direction:row; max-width:none;} }
/* Disfrutar, primo riquadro "Stato + conto" (11/10) */
.dd-verdict-row{display:flex; align-items:center; gap:12px; flex-wrap:wrap;}
.dd-pill{font-size:12.5px; font-weight:700; padding:4px 10px; border-radius:999px; border:1px solid currentColor;}
.dd-pill.ok{color:var(--color-success);}
.dd-pill.pace{color:var(--color-warning);}
.dd-pill.over{color:var(--fire);}
.dd-receipt{display:flex; flex-wrap:wrap; gap:10px 28px; margin:10px 0 2px;}
.dd-rc{display:flex; flex-direction:column; gap:3px;}
.dd-rc span{display:inline-flex; align-items:center; gap:6px; font-size:12px; color:var(--muted);}
.dd-rc strong{font-family:'IBM Plex Mono',monospace; font-size:16px; font-weight:500; color:var(--ink); white-space:nowrap;}
.dd-rc.total{padding-left:28px; border-left:1px solid var(--line);}
.dd-rc.total strong{color:var(--dest);}
.dd-hero.over .dd-rc.total strong{color:var(--fire);}
.dd-rc .sw{display:inline-block; width:12px; height:8px; border-radius:3px;}
.dd-rc .sw.spent{background:var(--dest);}
.dd-rc .sw.hatch{background:repeating-linear-gradient(45deg, var(--muted) 0 2px, transparent 2px 5px);}
.dd-rc .sw.fire{background:var(--fire);}
/* Disfrutar reale (14/10): dove sta il denaro che deve ancora uscire */
.dd-pend{display:grid; grid-template-columns:1fr auto; gap:6px 16px; align-items:center; padding:12px 0; border-top:1px solid var(--line);}
.dd-pend:first-of-type{border-top:none;}
.dd-pend-label{font-size:14px; color:var(--ink);}
.dd-pend-amount{font-family:'IBM Plex Mono',monospace; font-weight:500; text-align:right;}
.dd-pend-amount.muted{color:var(--muted); text-decoration:line-through;}
.dd-pend-where{grid-column:1/-1; display:flex; align-items:center; gap:10px; font-size:12px; color:var(--muted);}
.dd-pend-where select{flex:1; min-width:0; max-width:360px;}
.dd-pend-note{grid-column:1/-1; margin:0;}
/* Disfrutar reale (14/10): sopra la barra, il piano come riferimento */
.dd-planline{margin:14px 0 2px; font-size:12px; color:var(--muted);}
.dd-advice p{margin:4px 0 0; font-size:14px; color:var(--ink);}
.dd-advice p.muted{color:var(--muted); font-size:13px;}
.dd-advice p.fire{color:var(--fire); font-size:13px; font-weight:600;}
.dd-advice strong{font-family:'IBM Plex Mono',monospace;}
@media (max-width:560px){ .dd-receipt{gap:10px 18px;} .dd-rc.total{padding-left:0; border-left:none;} }
/* Disfrutar, primo riquadro a due colonne (11/10): verdetto + stato | conto + barra; consiglio in chiusura */
.dd-hero-cols{display:grid; grid-template-columns:minmax(220px, 0.8fr) minmax(0, 1.6fr); gap:28px; align-items:center; margin-top:4px;}
.dd-hero-main{display:flex; flex-direction:column; align-items:flex-start; gap:10px;}
.dd-hero-chart{display:flex; flex-direction:column; gap:4px; min-width:0;}
.dd-hero-chart .dd-receipt{margin-top:0;}
.dd-advice{margin-top:10px; padding-top:12px; border-top:1px solid var(--line);}
.dd-advice p:first-child{margin-top:0;}
@media (max-width:760px){ .dd-hero-cols{grid-template-columns:1fr; gap:16px;} }
/* Proteger e Crecer (11/10): saldo accumulato, campi del piano, movimenti senza categoria */
.dd-save-total{font-family:'IBM Plex Mono',monospace; font-size:28px; font-weight:500; color:var(--dest, var(--ink)); margin:2px 0 10px;}
.dd-save-fields{display:flex; flex-wrap:wrap; gap:12px 20px; margin-top:14px;}
.dd-save-field{display:flex; flex-direction:column; gap:4px; font-size:12px; color:var(--muted); min-width:0;}
.dd-save-field input{width:120px; font-size:14px; padding:7px 9px;}
.dd-save-field select{font-size:14px; padding:7px 9px; max-width:100%;}
.dd-tx.dd-tx-plain{grid-template-columns:44px minmax(0,1fr) 100px;}
.dd-tx strong.out{color:var(--fire);}
.dd-hist-v.warn{color:var(--color-warning); font-weight:700;}
/* Proteger e Crecer, verdetto rivisto (11/10): livelli del colchón nel primo riquadro, crescita in verde */
.dd-verdict small{font-size:.62em; font-weight:600; color:var(--muted);}
.dd-verdict .fire{color:var(--fire);}
.dd-rc .sw.gain{background:var(--color-success);}
.onb3-fund-bar.dd-levels{margin-top:10px;}
.onb3-fund-bar.dd-levels .onb3-fund-seg{height:12px;}
.dd-level-labels{display:grid; grid-template-columns:repeat(3,1fr); gap:4px; font-size:12px; color:var(--muted); margin-top:4px;}
.dd-level-labels .reached{color:var(--color-success); font-weight:700;}
.dd-level-labels .active{color:var(--ink); font-weight:700;}
.dd-bar.big.dd-stack:not(:has(i)){margin-top:6px;}
.detail-bal .gain{color:var(--color-success); font-size:12px; margin-left:6px;}
.detail-bal .fire{color:var(--fire); font-size:12px; margin-left:6px;}
.dd-link-out{color:var(--dest, var(--ink)); font-weight:700; text-decoration:none;} .dd-link-out:hover{text-decoration:underline;}
/* Riduci movimento (12/10, revisione Impeccable, come in legacy): niente spostamenti né animazioni infinite;
   restano le dissolvenze, che dicono che qualcosa è cambiato. */
@media (prefers-reduced-motion: reduce){
  section.panel.active{animation:fade-still .2s ease;}
  @keyframes fade-still{from{opacity:0;} to{opacity:1;}}
  .landing-hero-icon, .landing-badge-dot, .onb3-more button{animation:none;}
  .mobile-more-sheet, .mobile-more-sheet.open{transform:none;}
  .collapse-arrow, input[type=checkbox].switch::after{transition:none;}
}
/* Logo (12/10, Mattia): su mobile nell'header solo il maialino, il logo intero nel footer in fondo alla pagina. */
.logo-mark{display:none; width:32px; height:32px;}
.app-footer{display:none;}
@media (max-width:640px){
  header.top h1.logo-link .logo-full{display:none !important;}
  .logo-mark{display:block;}
  .app-footer{display:flex; justify-content:center; padding:32px 0 8px; border-top:1px solid var(--line); margin-top:24px;}
  .app-footer img{height:24px; width:auto; opacity:.75;}
  /* Header su una riga (come in legacy): maialino, badge e icone non vanno a capo. */
  header.top{flex-wrap:nowrap;}
  header.top h1.logo-link{min-width:0; flex-wrap:nowrap; gap:6px;}
  .header-right{flex-shrink:0; gap:8px;}
  #dev-badge{display:none !important;} /* su mobile basta il titolo [DEV] della pagina: lo spazio serve al badge della prova */
}
/* Tu plan a flusso (12/10): entrate → Vivir · (Deudas) · Proteger · Crecer affiancati → Disfrutar. Nelle colonne la
   testata va su due righe (nome + freccia, poi le cifre) e il corpo è a una colonna. */
.eq-stack{display:flex; flex-direction:column; gap:12px; margin-bottom:12px;}
.eq-stack > .card{margin-bottom:0;}
.eq-flow{display:flex; align-items:center; justify-content:center; gap:6px; margin:-4px 0 12px; font-size:12.5px; color:var(--muted);}
.eq-row{display:grid; grid-template-columns:repeat(var(--cols, 3), minmax(0,1fr)); gap:16px; align-items:start; margin-bottom:12px;}
.eq-row > .card{margin-bottom:0;}
.eq-row .eq-head{flex-wrap:wrap; row-gap:6px;}
.eq-row .eq-figures{order:3; flex-basis:100%; justify-content:flex-start;}
.eq-row .eq-body{grid-template-columns:minmax(0,1fr); gap:14px;}
.eq-row .eq-advice{border-left:none; border-top:2px solid var(--accent); padding:10px 0 0;}
.eq-row .eq-add{flex-wrap:wrap;}
/* Colonne strette (Vivir, Deudas…, 3 per riga): il nome della voce va su una riga sua, sopra importo e ×.
   Prima nome e campo "nuovo gasto" si schiacciavano a larghezza zero e restavano solo le cifre (12/10). */
.eq-row .eq-item-row{flex-wrap:wrap; row-gap:6px;}
.eq-row .eq-item-name{flex-basis:100%; white-space:normal;}
.eq-row .eq-item-row .eq-money{flex:1; width:auto;}
.eq-row .eq-add input[type="text"]{flex-basis:100%;}
.eq-row .eq-add .eq-money{flex:1; width:auto;}
@media (max-width:900px){ .eq-row{grid-template-columns:minmax(0,1fr);} }
/* Onboarding, entrate extra a richiesta (12/10) */
.onb3-extras{margin-top:14px;}
.onb3-extra-row{display:grid; grid-template-columns:minmax(0,1fr) 140px 28px; gap:8px; align-items:center; margin-bottom:8px;}
.onb3-extra-row .onb3-money{width:auto;}
.onb3-extra-add{display:inline-block; margin-top:10px;}
/* Lingua nell'onboarding su mobile (12/10): la colonna dei passi è nascosta sotto i 900px. */
.onb3-lang.onb3-lang-mobile{margin:0 0 14px; padding:0; justify-content:flex-end;}
.onb3-lang.onb3-lang-mobile button{min-height:36px; min-width:40px;}
@media (min-width:900px){ .onb3-lang.onb3-lang-mobile{display:none;} }
/* Import generico (12/10): conferma delle colonne e anteprima con categoria */
.csv-g-title{margin:0 0 4px; font-size:15px;}
.csv-g-table{font-size:12.5px; margin:8px 0 6px;}
.csv-g-table th{vertical-align:top; text-transform:none; letter-spacing:0; min-width:120px;}
.csv-g-table th select{width:100%; font-size:12.5px; margin-bottom:6px;}
.csv-g-table th select.on{border-color:var(--accent); color:var(--accent);}
.csv-g-table th span{display:block; font-weight:600; color:var(--muted); font-size:11.5px;}
.csv-g-table td{white-space:nowrap; max-width:220px; overflow:hidden; text-overflow:ellipsis;}
.csv-g-table td.off{color:var(--color-text-tertiary);}
.csv-g-warn{color:var(--fire); font-size:13px; font-weight:600;}
.csv-g-remembered{font-size:13px; color:var(--color-success);}
/* Importar extracto, passo "Cuentas del archivo" (30/10): il testo da leggere in body/ink, la domanda in field-label
   forte, la lista con un interruttore per conto (tessere surface-alt come MultiChoice, il nome e sotto una nota). */
.csv-v-text{font-size:14px; line-height:1.45; color:var(--ink); margin:0 0 14px;}
.csv-v-q{font-size:14px; font-weight:700; color:var(--ink); margin:18px 0 4px;}
.csv-v-list{display:flex; flex-direction:column; gap:8px; margin-top:12px;}
.csv-v-row{display:flex; align-items:center; justify-content:space-between; gap:16px; padding:12px 14px; background:var(--surface-alt);
  border:1px solid var(--border-strong); border-radius:var(--radius-lg); cursor:pointer;}
.csv-v-row:has(input:checked), .csv-v-row.on{border-color:var(--accent);}
button.csv-v-row{width:100%; text-align:left; font:inherit; color:var(--ink);}
button.csv-v-row.on{background:var(--accent-soft);}
.csv-v-row > span{display:flex; flex-direction:column; gap:2px; min-width:0;}
.csv-v-row strong{font-size:14px; font-weight:700; color:var(--ink);}
.csv-v-row .note{margin:0;}
.csv-v-choice{display:flex; flex-wrap:wrap; gap:8px; margin-top:12px;}
.csv-g-cat{font-size:12.5px; min-width:150px;}
.csv-g-src{display:block; font-size:11px; color:var(--muted); margin-top:3px;}
tr.csv-g-dup td{opacity:.55;}
.csv-quick{background:var(--bg-card-alt); border-radius:var(--radius-lg); padding:12px 14px; margin:10px 0;}
.csv-quick-title{font-weight:700; font-size:14px; margin-bottom:8px;}
#csv-quick-account > .onb3-link{margin:4px 0 8px; display:inline-block;}
#csv-preview-body td.num{white-space:nowrap;}
/* Clasificar (12/10 mobile, 13/10 anche desktop): una carta alla volta, quattro destini grandi */
.catdest-card-mode > .note{display:none;}
.catdest-card{display:flex; flex-direction:column; gap:14px;}
.catdest-card-count{font-size:12px; font-weight:700; letter-spacing:.4px; text-transform:uppercase; color:var(--muted);}
.catdest-card-main{display:flex; flex-direction:column; gap:4px; padding:18px 16px; border-radius:var(--radius-lg); background:var(--bg-card-alt);}
.catdest-card-amount{font-family:'IBM Plex Mono',monospace; font-size:28px; font-weight:500; color:var(--ink);}
.catdest-card-main strong{font-size:17px; line-height:1.3; overflow-wrap:anywhere;}
.catdest-card-main > span:not(.catdest-card-amount){font-size:13px; color:var(--muted);}
.catdest-card-amount, .catdest-card-amount *{font-family:'IBM Plex Mono',monospace; font-size:28px !important; font-weight:500; color:var(--ink) !important;}
.catdest-card-note{margin-top:4px; font-style:italic;}
.catdest-card-choices{display:grid; grid-template-columns:1fr 1fr; gap:10px;}
.catdest-big{display:flex; flex-direction:row; align-items:center; gap:10px; padding:10px 12px; border-radius:var(--radius-lg); border:1.5px solid color-mix(in srgb, var(--dest) 45%, var(--line)); background:color-mix(in srgb, var(--dest) 8%, transparent); color:var(--ink); font:inherit; text-align:left; cursor:pointer; -webkit-tap-highlight-color:transparent;}
.catdest-big:active{background:color-mix(in srgb, var(--dest) 22%, transparent);}
/* 0.196 (25/10, Mattia: "rendiamo le card più compatte"): tessera Choice in orizzontale, disco a sinistra e nome + riga
   di spiegazione a destra; con 6-7 destini sta tutto senza scorrere. */
.catdest-big-text{display:flex; flex-direction:column; gap:2px; min-width:0;}
.catdest-big-text strong{font-size:14px;}
.catdest-big-text span{font-size:12px; color:var(--muted); line-height:1.35;}
.catdest-big .catdest-dot{width:24px; height:24px; flex:0 0 auto;}
.catdest-skip{align-self:center; padding:8px;}
.catdest-card-mode .catdest-body{max-height:none;}
.catdest-box.catdest-card-mode{max-width:520px;}
@media (hover: hover) and (pointer: fine){ .catdest-big:hover{background:color-mix(in srgb, var(--dest) 15%, transparent); border-color:var(--dest);} }
/* Onboarding, conti con il saldo di oggi (12/10) */
.onb3-acc-row{display:grid; grid-template-columns:28px minmax(0,1fr) 130px 28px; gap:8px; align-items:center; margin-bottom:8px;}
.onb3-acc-row .onb3-input{min-width:0;}
.onb3-acc-row .onb3-money{width:auto;}
.onb3-acc-more{display:flex; flex-wrap:wrap; gap:6px 14px; margin-top:4px;}
@media (max-width:420px){ .onb3-acc-row{grid-template-columns:28px minmax(0,1fr) 28px;} .onb3-acc-row .onb3-money{grid-column:2 / 3;} }
/* "Pon tu plan en automático" (12/10) */
.autoplan-box{max-width:640px;}
/* 0.106: due colonne quando c'è il riepilogo o un'idea. La colonna destra resta ferma mentre la finestra scorre (sotto
   l'intestazione fissa). Sotto 820px una colonna: riepilogo in cima, modulo, idea in fondo. */
.autoplan-box:has(.ap-layout.has-side){max-width:960px;}
.ap-layout{display:block;}
.ap-layout.has-side{display:grid; grid-template-columns:minmax(0,1fr) 300px; gap:28px; align-items:start;}
.ap-main{display:flex; flex-direction:column; gap:0; min-width:0;}
.ap-side{position:sticky; top:72px; display:flex; flex-direction:column; gap:12px; padding-top:16px;}
.ap-sum{display:flex; flex-direction:column; gap:12px; padding:12px 14px; border-radius:var(--radius-lg); background:var(--bg-card-alt);}
.ap-sum .sub-block-title{margin:0;}
.ap-side .cd-idea-text{padding-right:20px;}
.ap-sum .autoplan-split-legend{grid-template-columns:1fr;}
.ap-sum .autoplan-split-legend > div:last-child{text-align:left; align-items:flex-start;}
@media (max-width:820px){
  .ap-layout.has-side{display:flex; flex-direction:column; gap:12px;}
  .ap-side{display:contents;}
  .ap-sum{order:-1; margin-top:4px;}
  .ap-main{order:0;}
  .ap-idea{order:1;}
}
#autoplan-body{display:flex; flex-direction:column; gap:0;}
#autoplan-body > .note:not(.md-desc){margin:0;}
.autoplan-when{display:flex; flex-wrap:wrap; align-items:center; gap:8px 12px; font-size:14px; color:var(--ink);}
.autoplan-when label{display:flex; align-items:center; gap:8px;}
.autoplan-when input{width:64px; text-align:center;}
.autoplan-when select{max-width:240px;}
.autoplan-split{display:flex; flex-direction:column; gap:10px;}
.autoplan-bar{display:flex; gap:3px; height:10px; border-radius:6px; overflow:hidden;}
.autoplan-seg{min-width:6px; transition:flex .25s ease, opacity .25s ease;}
.autoplan-seg.stay{opacity:.35;}
.autoplan-split-legend{display:grid; grid-template-columns:1fr 1fr; gap:12px;}
.autoplan-split-legend > div{display:flex; flex-direction:column; gap:2px;}
.autoplan-split-legend > div:last-child{text-align:right; align-items:flex-end;}
.autoplan-split-label{font-size:12px; color:var(--muted);}
.autoplan-split-legend strong{font-size:17px; font-variant-numeric:tabular-nums;}
.autoplan-split-names{font-size:12px; color:var(--muted); display:flex; flex-wrap:wrap; align-items:center; gap:4px;}
.autoplan-sw{display:inline-block; width:8px; height:8px; border-radius:2px; margin-left:4px;}
.autoplan-sw:first-child{margin-left:0;}
.autoplan-rows{display:flex; flex-direction:column; border-top:1px solid var(--line);}
.autoplan-row{display:grid; grid-template-columns:22px 1fr auto; align-items:center; gap:4px 12px; padding:12px 0; border-bottom:1px solid var(--line);}
.autoplan-row-icon{display:flex; align-self:start; padding-top:2px;}
.autoplan-row-main{min-width:0;}
.autoplan-row-name{font-weight:600; font-size:14.5px;}
.autoplan-why{font-size:12.5px; color:var(--muted);}
.autoplan-amount{display:flex; align-items:center; gap:4px; font-size:14px; color:var(--muted);}
.autoplan-amount input{width:92px; text-align:right; font-variant-numeric:tabular-nums;}
.autoplan-to{grid-column:2 / -1; display:flex; align-items:center; gap:8px;}
.autoplan-to select{flex:1; min-width:0;}
.autoplan-arrow{color:var(--dest); font-weight:700;}
.autoplan-row.stays .autoplan-arrow{color:var(--muted);}
.autoplan-row.stays .autoplan-to select{color:var(--muted);}
.autoplan-row > .autoplan-tip, .autoplan-row > .autoplan-create, .autoplan-row-note{grid-column:2 / -1; margin-top:6px;}
.autoplan-row p.autoplan-row-note{margin:2px 0 0; font-size:12.5px; line-height:1.45; color:var(--muted);}
/* Riquadro Idea (0.105): consiglio facoltativo. Lampadina in un disco a sinistra + lampadina grande e tenue sullo
   sfondo con sfumatura ambra nell'angolo. Titolo 14px 700, testo body 13.5px ink. */
.cd-idea{position:relative; overflow:hidden; display:flex; gap:12px; align-items:flex-start; border:1px dashed var(--color-border-strong); border-radius:var(--radius-lg); padding:14px 16px; background:linear-gradient(135deg, transparent 55%, var(--accent-soft));}
.cd-idea-text{position:relative; min-width:0; padding-right:56px;}
.cd-idea-title{display:block; font-size:14px; font-weight:700; color:var(--ink);}
.cd-idea-text p{margin:4px 0 8px; font-size:14px; line-height:1.5; color:var(--ink);}
.cd-idea-icon{position:relative; flex:none; display:inline-flex; align-items:center; justify-content:center; width:34px; height:34px; border-radius:999px; background:var(--accent-soft); color:var(--accent-ink, var(--accent));}
.cd-idea-icon svg{width:18px; height:18px;}
.cd-idea-bg{position:absolute; right:-14px; bottom:-18px; color:var(--accent-ink, var(--accent)); opacity:.14; pointer-events:none;}
.cd-idea-bg svg{width:110px; height:110px; stroke-width:1.6;}
.visually-hidden{position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap;}
@media (max-width:520px){
  .autoplan-amount input{width:78px;}
  .autoplan-to{grid-column:1 / -1;}
  .autoplan-to .autoplan-arrow{width:22px; text-align:center;}
  .autoplan-when select{max-width:100%;}
}
.autoplan-tip{background:color-mix(in srgb, var(--dest) 10%, var(--bg-card-alt)); border-radius:var(--radius-lg); padding:12px 14px;}
.autoplan-tip strong{font-size:14px;}
.autoplan-tip p{margin:6px 0 10px; font-size:13px; line-height:1.5; color:var(--ink);}
.autoplan-tip-actions{display:flex; flex-wrap:wrap; align-items:center; gap:10px 16px;}
.autoplan-create{display:flex; flex-wrap:wrap; align-items:flex-end; gap:10px 14px; background:var(--bg-card-alt); border-radius:var(--radius-md); padding:10px 12px;}
.autoplan-create .note{flex-basis:100%; margin:0;}
.autoplan-checklist{display:flex; flex-direction:column; gap:8px;}
.autoplan-check{display:flex; align-items:flex-start; gap:10px; padding:12px 14px; border:1px solid var(--line); border-radius:var(--radius-lg); cursor:pointer;}
.autoplan-check.on{border-color:var(--color-success);}
.autoplan-check > span{display:flex; flex-direction:column; gap:2px;}
.autoplan-check > span > span{font-size:12.5px; color:var(--muted);}
.ahora-actions{display:flex; flex-direction:column; align-items:flex-end; gap:6px;}
/* Mobile (12/10, Mattia): Ahora compatto, una riga per la prima cosa da fare: icona piccola, descrizione su una riga
   con i puntini, pulsante a destra. Toccando il pulsante si apre comunque tutto. */
@media (max-width:640px){
  .ahora-path{flex-wrap:nowrap; gap:10px; padding:10px 12px;}
  .ahora-icon{width:32px; height:32px;}
  .ahora-icon svg{width:16px; height:16px;}
  .ahora-text{min-width:0;}
  .ahora-text strong{font-size:14px;}
  .ahora-text > span{display:block; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; font-size:12.5px;}
  .ahora-actions{flex-shrink:0; align-items:flex-end; gap:4px;}
  .ahora-actions .onb3-link{font-size:12px;}
  .ahora-head{margin-bottom:8px;}
}
/* Trasferimenti tra conti propri nell'anteprima import (dev 0.20.0) */
.csv-g-hint{color:var(--color-info, var(--muted));}
.csv-tr-form{display:flex; flex-wrap:wrap; gap:6px; margin-top:6px;}
.csv-tr-form input, .csv-tr-form select{min-width:0; flex:1 1 120px; font-size:13px; padding:6px 8px;}

/* ---- Introduzione di una pagina (pageIntroHtml, 12/10): riutilizzabile su ogni pagina ---- */
.page-intro{display:flex; flex-direction:column; gap:10px;}
.page-intro-head{display:flex; align-items:center; gap:12px;}
.page-intro-icon{width:40px; height:40px; border-radius:50%; display:flex; align-items:center; justify-content:center; background:var(--accent-soft); color:var(--accent-ink); flex-shrink:0;}
.page-intro-title{margin:0; font-family:'Spectral',serif; font-weight:600; font-size:26px; color:var(--ink);}
.page-intro-body{margin:0; font-size:14px; line-height:1.55; color:var(--ink); max-width:68ch;}
.page-intro-steps{list-style:none; margin:4px 0 0; padding:0; display:grid; grid-template-columns:repeat(3, minmax(0,1fr)); gap:10px;}
.page-intro-steps li{display:flex; gap:10px; align-items:flex-start; padding:12px; border-radius:var(--radius-lg); background:var(--surface-alt); font-size:14px; line-height:1.45;}
.page-intro-n{flex:0 0 22px; height:22px; border-radius:50%; background:var(--accent-soft); color:var(--accent-ink); font-weight:700; font-size:12px; display:flex; align-items:center; justify-content:center;}
.page-intro-actions{display:flex; justify-content:flex-end;}
.page-intro.compact{flex-direction:row; align-items:center; gap:10px; margin:0 0 14px; padding:0 2px;}
.page-intro.compact .page-intro-icon{width:30px; height:30px;}
.page-intro.compact .page-intro-title{font-size:26px;}
.page-intro-help{display:inline-flex; align-items:center; justify-content:center; width:32px; height:32px; padding:0; border:0; border-radius:999px; background:none; color:var(--muted); cursor:pointer; transition:color .15s ease, background-color .15s ease, transform .16s cubic-bezier(.23,1,.32,1);}
.page-intro-help:active{transform:scale(.94);}
@media (hover: hover) and (pointer: fine){ .page-intro-help:hover{color:var(--ink); background:var(--bg-card-alt);} }
@media (max-width:640px){ .page-intro-steps{grid-template-columns:minmax(0,1fr);} .page-intro-title{font-size:21px;} }
/* Objetivos (12/10) */
.obj-sub{margin:4px 0 0;}
.obj-ideas{display:flex; flex-direction:column; gap:18px;}
/* Da chiusa la card è solo l'intestazione: niente margine sotto il titolo (vinceva `.card h2` con 14px), lo spazio tra titolo e colonne lo dà il gap. */
.obj-ideas .obj-ideas-title{margin:0;}
.obj-ideas-cols{display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:28px;}
@media (max-width:900px){ .obj-ideas-cols{grid-template-columns:1fr; gap:18px;} }
/* Titolo tocca-per-aprire; la freccia sta fissa in alto a destra, stesso bottone della ✕ delle finestre (muted, gialla al passaggio). */
.obj-ideas{position:relative;}
.obj-ideas-head{display:flex; align-items:center; width:100%; padding:0 40px 0 0; border:0; background:none; color:inherit; font:inherit; text-align:left; cursor:pointer;}
.obj-ideas-toggle{position:absolute; top:16px; right:14px; width:32px; height:32px;}
@media (hover: hover) and (pointer: fine){ .obj-ideas-toggle:hover, .page-intro-help:hover{color:var(--accent-ink, var(--accent));} }
.obj-ideas-toggle svg{transition:transform .2s cubic-bezier(.23,1,.32,1);}
.obj-ideas:not(.closed) .obj-ideas-toggle svg{transform:rotate(180deg);}
@media (prefers-reduced-motion: reduce){ .obj-ideas-toggle svg{transition:none;} }
.obj-ideas.closed{gap:0;}
.obj-ideas-group{display:flex; flex-direction:column; gap:6px;}
.obj-ideas-chips{display:flex; flex-wrap:wrap; gap:8px; margin-top:6px;}
.obj-idea{padding:10px 16px; border-radius:999px; border:1px solid color-mix(in srgb, var(--dest) 45%, var(--line)); background:color-mix(in srgb, var(--dest) 10%, var(--bg-card-alt)); color:var(--ink); font:inherit; font-size:14px; cursor:pointer;}
@media (hover: hover) and (pointer: fine){ .obj-idea:hover{border-color:var(--dest);} }
.obj-add-other{display:block; width:100%; margin:0 0 14px; padding:14px; border:1px dashed var(--line); border-radius:var(--radius-lg); background:transparent; color:var(--muted); font:inherit; font-size:14px; cursor:pointer; text-align:left;}
@media (hover: hover) and (pointer: fine){ .obj-add-other:hover{border-color:var(--color-border-strong); color:var(--ink);} }
/* Patrimonio → Resumen (dev 0.32.0) */
.pat-net{text-align:center;}
.pat-net h2{margin-bottom:6px;}
.pat-net-value{font-family:'IBM Plex Mono',monospace; font-size:28px; font-weight:500; color:var(--ink);}
.pat-net .note{margin:6px 0 0;}
.pat-rows{display:flex; flex-direction:column; gap:8px;}
.pat-row{display:flex; align-items:center; gap:12px; width:100%; padding:14px; border-radius:var(--radius-lg); border:1px solid var(--line); background:var(--bg-card-alt); color:var(--ink); font:inherit; text-align:left; cursor:pointer;}
@media (hover: hover) and (pointer: fine){ .pat-row:hover{border-color:var(--color-border-strong);} }
.pat-row-icon{width:36px; height:36px; border-radius:50%; display:flex; align-items:center; justify-content:center; background:var(--bg-card); flex-shrink:0;}
.pat-row-text{flex:1; display:flex; flex-direction:column; gap:2px; min-width:0;}
.pat-row-text strong{font-size:15px;}
.pat-row-text span{font-size:12.5px; color:var(--muted);}
.pat-row-amount{font-family:'IBM Plex Mono',monospace; font-size:16px; font-weight:500;}

/* ---- Interazioni (dev 0.34.0, revisione Emil Kowalski su Inicio) ----
   Risposta alla pressione su tutto ciò che si tocca, hover solo con il mouse (sopra), niente transition:all.
   Animazioni solo dove sono rare: la lista di Ahora che si riapre e le barre al primo arrivo su Inicio. */
.task-row, .pat-row, .hd-box, .hb-col, .obj-idea, .obj-add-other, .mobile-tabbar button{
  transition:background-color .15s ease, border-color .15s ease, color .15s ease, transform 160ms var(--ease-out-strong);
}
button.btn:active:not(:disabled), .task-row:active:not(:disabled), .pat-row:active, .hb-col:active, .obj-idea:active,
.obj-add-other:active, nav.tabs button:active, .tabs-subnav button:active, .mobile-tabbar button:active{transform:scale(0.97);}
.hd-box:active{transform:scale(0.985);}
.ahora-next.enter{animation:ahora-in 200ms var(--ease-out-strong);}
@keyframes ahora-in{from{opacity:0; transform:translateY(-4px);}}
.hb-fill.grow{animation:hb-grow 360ms var(--ease-out-strong) both;}
.hb-col:nth-child(2) .hb-fill.grow{animation-delay:40ms;}
.hb-col:nth-child(3) .hb-fill.grow{animation-delay:80ms;}
.hb-col:nth-child(4) .hb-fill.grow{animation-delay:120ms;}
.hb-col:nth-child(5) .hb-fill.grow{animation-delay:160ms;}
@keyframes hb-grow{from{clip-path:inset(100% 0 0 0 round 10px);} to{clip-path:inset(0 0 0 0 round 10px);}}
@media (prefers-reduced-motion: reduce){
  .hb-fill.grow{animation:none;}
  .ahora-next.enter{animation:fade-still .2s ease;}
  button.btn:active, .task-row:active, .pat-row:active, .hd-box:active, .hb-col:active, .obj-idea:active,
  .obj-add-other:active, nav.tabs button:active, .tabs-subnav button:active, .mobile-tabbar button:active{transform:none;}
}
/* ---- Inversiones (dev 0.36.0) ---- */
.inv-hero{text-align:center;}
.inv-hero-label{font-size:13px; font-weight:600; color:var(--muted);}
.inv-hero-value{font-family:'IBM Plex Mono',monospace; font-size:28px; font-weight:500; color:var(--ink); margin:4px 0;}
.inv-hero-sub{margin:0; font-size:14px; color:var(--muted);}
.inv-gain{font-family:'IBM Plex Mono',monospace; font-weight:500;}
.inv-gain.pos{color:var(--color-success);}
.inv-gain.neg{color:var(--color-danger);}
.inv-month-head{display:flex; align-items:baseline; justify-content:space-between; gap:12px; flex-wrap:wrap;}
.inv-month-head strong{font-family:'IBM Plex Mono',monospace; font-size:16px;}
.inv-month-bar{height:8px; border-radius:6px; background:var(--bg-card-alt); overflow:hidden; margin:10px 0 6px;}
.inv-month-bar span{display:block; height:100%; background:var(--dest-crecer); border-radius:6px;}
.inv-month .note{margin:0;}
.inv-rows{display:flex; flex-direction:column; gap:8px;}
.inv-row{border:1px solid var(--line); border-radius:var(--radius-lg); background:var(--bg-card-alt);}
.inv-row.open{border-color:var(--color-border-strong);}
.inv-row-main{display:flex; align-items:center; gap:12px; width:100%; padding:14px; background:none; border:none; color:var(--ink); font:inherit; text-align:left; cursor:pointer; border-radius:var(--radius-lg);}
.inv-row-text{flex:1; min-width:0; display:flex; flex-direction:column; gap:2px;}
.inv-row-text strong{font-size:15px;}
.inv-row-text span{font-size:12.5px; color:var(--muted);}
.inv-updated.due{color:var(--dest-crecer);}
.inv-row-nums{display:flex; flex-direction:column; align-items:flex-end; gap:2px; font-size:12.5px;}
.inv-row-nums strong{font-family:'IBM Plex Mono',monospace; font-size:16px;}
.inv-row-actions{display:flex; flex-wrap:wrap; gap:8px; padding:0 14px 12px;}
.inv-action, .inv-add{display:flex; flex-wrap:wrap; align-items:flex-end; gap:10px 14px; padding:12px 14px 14px; border-top:1px solid var(--line);}
.inv-add{border:1px dashed var(--line); border-radius:var(--radius-lg); margin-bottom:12px;}
.inv-add-actions{display:flex; gap:8px; margin-left:auto;}
.inv-edit{display:grid; grid-template-columns:repeat(auto-fit, minmax(180px, 1fr)); gap:10px 14px; padding:12px 14px 14px; border-top:1px solid var(--line);}
.inv-periodic{display:flex; flex-wrap:wrap; align-items:flex-end; gap:8px 10px; grid-column:1 / -1;}
.inv-periodic .note{margin:0 0 8px;}
.inv-edit-foot{grid-column:1 / -1; display:flex; justify-content:space-between; align-items:center; gap:12px; flex-wrap:wrap;}
.inv-edit-foot .note{margin:0;}
.onb3-link.danger{color:var(--color-danger);}
.inv-mix{display:flex; gap:3px; height:10px; border-radius:6px; overflow:hidden; margin-bottom:8px;}
.inv-mix-legend{display:flex; flex-wrap:wrap; gap:6px 14px; font-size:12.5px; color:var(--muted); margin-bottom:14px;}
.inv-mix-legend i{display:inline-block; width:8px; height:8px; border-radius:2px; margin-right:5px;}
.inv-unassigned-row{display:flex; flex-wrap:wrap; justify-content:space-between; align-items:center; gap:8px 12px; padding:8px 0; border-bottom:1px solid var(--line); font-size:14px;}
.inv-row-main:active{transform:scale(0.99);}
@media (hover: hover) and (pointer: fine){ .inv-row:hover{border-color:var(--color-border-strong);} }

.inv-edit .dd-save-field input, .inv-edit .dd-save-field select{width:100%;}
.inv-edit .dd-save-field{min-width:0;}
.inv-chart{margin:14px 0 4px;}
.inv-chart svg{display:block; width:100%; height:110px;}
.inv-row .inv-chart{margin:0 14px 12px;}
.inv-chart-foot{display:flex; justify-content:space-between; align-items:center; gap:10px; font-size:11.5px; color:var(--muted); margin-top:4px;}
.inv-chart-legend{display:inline-flex; align-items:center; gap:5px;}
.inv-chart-legend i{display:inline-block; width:12px; height:3px; border-radius:2px;}
.inv-chart-legend i.dash{background:repeating-linear-gradient(90deg, var(--muted) 0 3px, transparent 3px 6px); margin-left:8px;}


/* Deudas automáticas (13/10): deuda contigo e buco del conto apartado */
.auto-debt{border-style:dashed;}
.auto-debt-title{font-size:14px; text-transform:none; letter-spacing:0; color:var(--ink); font-weight:600;}
.auto-debt-amount{font-family:'IBM Plex Mono',monospace; font-size:28px; font-weight:500; margin-top:8px; color:var(--fire);}

/* Tu Cuentaduro e Duros (14/10) */
.tc-item{padding:14px 0; border-top:1px solid var(--line);}
#tu-cuentaduro-content > .tc-item:first-child{border-top:none; padding-top:4px;}
.tc-head{display:flex; align-items:center; gap:10px; flex-wrap:wrap;}
.tc-head strong{font-size:15px; color:var(--ink);}
.tc-pill{font-size:11px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; color:var(--accent); background:var(--accent-soft); border:1px solid var(--accent-border, var(--accent)); border-radius:999px; padding:2px 8px;}
.tc-price{margin-left:auto; font-family:'IBM Plex Mono',monospace; font-weight:500; color:var(--ink);}
.tc-status{margin-left:auto; font-size:13px; color:var(--muted);}
.tc-item .note{margin:6px 0 0;}
.tc-section{font-family:'Spectral',serif; font-size:18px; font-weight:600; color:var(--ink); margin:22px 0 2px; padding-top:18px; border-top:1px solid var(--line);}
.tc-duros{display:grid; grid-template-columns:repeat(auto-fit, minmax(min(280px,100%),1fr)); gap:14px; margin-top:12px;}
.tc-duros .tc-item{border:1px solid var(--line); border-radius:var(--radius-lg); padding:16px; background:var(--bg-card-alt);}
.tc-duros .tc-item.on{border-color:var(--accent-border, var(--accent));}
.tc-duros .tc-item.soon{opacity:.7;}
.tc-actions{display:flex; align-items:center; gap:10px; margin-top:12px;}
.tc-on{font-size:13px; font-weight:600; color:var(--color-success);}
.tc-soon{font-size:13px; color:var(--muted);}
.tc-accounts{display:flex; flex-direction:column; gap:10px; margin-top:6px;}
.tc-account{display:flex; align-items:center; gap:8px; font-size:14px; color:var(--ink); text-transform:none; letter-spacing:0;}

/* Patrimonio → Resumen (14/10): invito ad aggiungere investimenti/debiti quando le pagine sono nascoste */
.pat-add{margin:14px 0 2px; font-size:13px; color:var(--muted); text-align:center;}
.pat-add .onb3-link{font-size:13px;}

/* Ajustes: "Tu Cuentaduro" come tessera in cima alla barra (14/10, Mattia: diversa dalle altre voci) */
.settings-sidebar button.tc-nav{display:flex; align-items:center; gap:10px; padding:12px; margin-bottom:10px; border-color:var(--accent-border, rgba(249,185,0,.35)); background:var(--accent-soft); color:var(--ink);}
.tc-nav-icon{width:34px; height:34px; flex:0 0 34px;}
.tc-nav-text{display:flex; flex-direction:column; gap:2px; min-width:0;}
.tc-nav-text strong{font-size:14px; font-weight:700; color:var(--accent);}
#tc-nav-sub{font-size:12px; font-weight:500; color:var(--muted); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.settings-sidebar button.tc-nav.active{background:var(--accent); border-color:var(--accent);}
.settings-sidebar button.tc-nav.active .tc-nav-text strong, .settings-sidebar button.tc-nav.active #tc-nav-sub{color:var(--on-accent);}
@media (max-width:640px){ .settings-sidebar button.tc-nav{flex:1 1 100%; margin-bottom:4px;} }
.settings-sidebar button.tc-nav.active .tc-nav-icon{filter:brightness(0); opacity:.78;}

.tc-salary{margin:4px 0 12px; font-size:14px; color:var(--ink);}
.tc-salary strong{font-family:'IBM Plex Mono',monospace;}

/* Ruolo del conto accanto al nome (14/10): attività / Disfrutar */
.acc-role{display:inline-flex; align-items:center; justify-content:center; width:20px; height:20px; margin-left:6px; border-radius:6px; background:var(--bg-card-alt); color:var(--muted); vertical-align:middle; flex:0 0 auto;}
.acc-role + .acc-role{margin-left:4px;}
.acc-role svg{display:block;}

/* Reserva (14/10, Duro Autónomo) */
.res-head{display:flex; align-items:baseline; justify-content:space-between; gap:12px;}
.res-total{font-family:'IBM Plex Mono',monospace; font-size:16px; color:var(--ink);}
.res-total span{font-size:13px; color:var(--muted); font-weight:500;}
.res-where{display:flex; align-items:center; gap:10px; margin:10px 0 4px; font-size:13px; color:var(--muted); text-transform:none; letter-spacing:0;}
.res-where select{flex:1; max-width:360px;}
.res-status{margin:4px 0 10px; font-size:13px; color:var(--muted);}
.res-status.ok{color:var(--color-success);}
.res-status.fire{color:var(--fire, var(--color-danger)); font-weight:600;}
.res-row{display:grid; grid-template-columns:minmax(140px,1fr) 120px 120px auto; gap:10px 14px; align-items:end; padding:10px 0; border-top:1px solid var(--line);}
.res-label{align-self:center; font-size:14px; color:var(--ink);}
.res-label-input{align-self:center;}
.res-field{display:flex; flex-direction:column; gap:4px; font-size:11px; color:var(--muted); text-transform:none; letter-spacing:0;}
.res-field input{width:100%;}
.res-exp strong{font-family:'IBM Plex Mono',monospace; font-size:14px; color:var(--ink); padding:9px 0;}
.res-actions{display:flex; gap:6px; align-items:center;}
.res-add{display:grid; grid-template-columns:1fr 140px auto; gap:10px; margin-top:12px; padding-top:12px; border-top:1px solid var(--line);}
.res-foot{margin-top:10px;}
.res-auto-row{display:grid; grid-template-columns:minmax(0,1fr) auto auto; gap:12px; align-items:center; padding:10px 0; border-top:1px solid var(--line);}
.res-auto-main{display:flex; flex-direction:column; gap:3px; min-width:0;}
.res-auto-main .res-label{align-self:flex-start;}
.res-auto-meta{display:flex; flex-wrap:wrap; align-items:center; gap:8px; font-size:12px; color:var(--muted);}
.res-dest{font-size:11px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; color:var(--dest);}
.res-auto-amount{font-family:'IBM Plex Mono',monospace; font-size:14px; color:var(--ink); white-space:nowrap;}
.res-auto-row.skipped .res-label, .res-auto-row.skipped .res-auto-amount{color:var(--muted); text-decoration:line-through;}
.res-group-head{display:flex; justify-content:space-between; align-items:baseline; padding:16px 0 6px;}
.res-group-head .res-dest{font-size:12px;}
.res-group-head strong{font-family:'IBM Plex Mono',monospace; font-size:14px; color:var(--muted);}
.res-skipped{margin-top:8px; font-size:13px; color:var(--muted);}
.res-skipped summary{cursor:pointer; padding:8px 0;}
@media (max-width:560px){ .res-auto-row{grid-template-columns:minmax(0,1fr) auto;} .res-auto-row .btn{grid-column:1/-1; justify-self:start;} }
@media (max-width:640px){ .res-row{grid-template-columns:1fr 1fr;} .res-label, .res-label-input{grid-column:1/-1;} .res-actions{grid-column:1/-1;} .res-add{grid-template-columns:1fr 1fr;} .res-add .btn{grid-column:1/-1;} }

.acc-name-line{display:inline-flex; align-items:center; flex-wrap:nowrap;}


/* Ajustes: i Duro attivi (14/10, Mattia: stile diverso dalle voci normali), subito sotto "Tu Cuentaduro" */
/* Sottovoce di "Tu Cuentaduro": rientrata, con un filo che la lega alla tessera sopra */
.settings-sidebar button.duro-nav{position:relative; display:flex; align-items:center; gap:8px; margin:-6px 0 10px 18px; padding:8px 12px; font-size:13px; border-style:dashed; border-color:var(--accent-border, rgba(249,185,0,.35)); color:var(--ink);}
.settings-sidebar button.duro-nav::before{content:''; position:absolute; left:-12px; top:-10px; width:10px; height:calc(50% + 10px); border-left:1.5px solid var(--accent-border, rgba(249,185,0,.35)); border-bottom:1.5px solid var(--accent-border, rgba(249,185,0,.35)); border-bottom-left-radius:6px;}
.settings-sidebar button.duro-nav + button.duro-nav{margin-top:-4px;}
@media (max-width:640px){ .settings-sidebar button.duro-nav{margin:0 0 4px 0; flex:1 1 100%;} .settings-sidebar button.duro-nav::before{display:none;} }
.duro-nav-coin{display:inline-flex; align-items:center; justify-content:center; width:24px; height:24px; border-radius:50%; background:var(--accent); color:var(--on-accent); flex:0 0 24px;}
.settings-sidebar button.duro-nav.active{background:var(--accent-soft); color:var(--ink); border-style:solid; border-color:var(--accent);}

.res-where{flex-direction:column; align-items:flex-start;}
.res-chips{display:flex; flex-wrap:wrap; gap:6px;}
.res-chip{font-family:'Nunito Sans'; font-size:12.5px; padding:6px 10px; border-radius:999px; border:1px solid var(--line); background:var(--bg-card-alt); color:var(--muted); cursor:pointer;}
.res-chip.on{border-color:var(--accent); background:var(--accent-soft); color:var(--ink); font-weight:600;}

.res-selects{display:flex; flex-direction:column; gap:6px; width:100%; max-width:380px;}
.res-select-row{display:flex; gap:6px; align-items:center;}
.res-select-row select{flex:1; min-width:0;}
.res-select-row > *:first-child{flex:1; min-width:0;}
/* Il primo menu tiene lo spazio del ✕ delle righe sotto, così i menu hanno tutti la stessa larghezza. */
.res-select-gap{flex:0 0 28px;}
@media (max-width:640px){ .res-select-gap{flex-basis:40px;} }
.res-add-acc{align-self:flex-start; font-size:12.5px;}

/* Vivir: voci del piano da assegnare a una categoria (14/10) */
.dd-assign{border:1px dashed var(--accent-border, rgba(249,185,0,.35)); background:var(--accent-soft); border-radius:var(--radius-lg); padding:12px 14px; margin:10px 0 14px;}
.dd-assign strong{font-size:14px; color:var(--ink);}
.dd-assign .note{margin:4px 0 8px;}
.dd-assign-row{display:flex; align-items:center; justify-content:space-between; gap:12px; padding:6px 0; border-top:1px solid var(--line); font-size:14px; color:var(--ink);}
.dd-assign-row select{max-width:240px;}
.dd-assign-row .muted{color:var(--muted); font-family:'IBM Plex Mono',monospace; font-size:14px;}

/* Recibos / Suscripciones / Actividad (14/10) */
.sub-section-head{display:flex; flex-wrap:wrap; align-items:baseline; gap:4px 12px; padding:14px 2px 6px;}
.sub-section-head strong{font-family:'Spectral',serif; font-size:16px; color:var(--ink);}
.sub-section-head span{font-family:'IBM Plex Mono',monospace; font-size:14px; color:var(--muted); margin-left:auto;}
.sub-section-head .note{flex:1 1 100%; margin:0;}
tr.sub-section-row td{border-bottom:none; background:transparent;}

/* Finestra "Añadir suscripción" a blocchi (14/10) */
.sub-form{display:flex; flex-direction:column; gap:12px;}
.sub-block{border:1px solid var(--line); border-radius:var(--radius-lg); padding:14px 16px; background:var(--bg-card-alt);}
.sub-block-title{margin:0 0 10px; font-family:'Nunito Sans'; font-size:12px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--muted);}
.sub-block-grid{display:grid; grid-template-columns:repeat(auto-fit, minmax(170px, 1fr)); gap:10px 14px;}
.sub-block-grid .field{margin:0;}
/* Segments (guida del DS, 0.149.0): un solo stile. .md-seg, .goal-seg e .sub-seg sono alias di .cd-seg
   (il JS li cerca per nome); nel codice nuovo usa .cd-seg con bottoni dentro. */
.cd-seg, .md-seg, .goal-seg, .sub-seg{
  display:inline-flex; flex-wrap:wrap; gap:2px; padding:3px; border-radius:var(--radius-pill);
  background:var(--surface-alt); align-self:flex-start; max-width:100%;
}
.cd-seg > button, .md-seg button, .goal-seg button, .sub-seg-btn{
  font-family:'Nunito Sans',sans-serif; font-size:13px; font-weight:600; line-height:1.3; white-space:nowrap;
  padding:7px 16px; border-radius:var(--radius-pill); border:0; background:transparent; color:var(--muted); cursor:pointer;
  transition:background-color .15s ease, color .15s ease, transform 160ms ease-out;
}
.cd-seg > button.on, .md-seg button.on, .goal-seg button.on, .sub-seg-btn.on{background:var(--accent); color:var(--on-accent);}
.cd-seg > button:active, .md-seg button:active, .goal-seg button:active, .sub-seg-btn:active{transform:scale(0.97);}
.cd-seg > button:focus-visible, .md-seg button:focus-visible, .goal-seg button:focus-visible, .sub-seg-btn:focus-visible{outline:2px solid var(--accent); outline-offset:1px;}
@media (hover:hover) and (pointer:fine){
  .cd-seg > button:not(.on):hover, .md-seg button:not(.on):hover, .goal-seg button:not(.on):hover, .sub-seg-btn:not(.on):hover{color:var(--ink);}
}
@media (prefers-reduced-motion:reduce){ .cd-seg > button, .md-seg button, .goal-seg button, .sub-seg-btn{transition:none;} }
/* Su un blocco surface-alt il carril sarebbe invisibile: lì va su surface-input. */
.sub-block .cd-seg, .sub-block .md-seg, .sub-block .sub-seg{background:var(--surface-input);}
/* Duro Premium (14/10, Mattia): mini-porcellino accanto al nome, sempre visibile (anche selezionato). Anche nella tab bar. */
.duro-tab::after, [data-mirror="nav-autonomo-btn"]::after{content:''; display:inline-block; width:15px; height:15px; margin-left:6px; vertical-align:-2px;
  background:url('graphic/piggy.png') center/contain no-repeat; flex:0 0 auto;}
.seg-ico{display:inline-block; vertical-align:-1px; margin-right:6px; flex:0 0 auto;}
.pill .seg-ico{width:10px; height:10px; margin-right:0;}
.sub-block-grid .field:has(.sub-seg){grid-column:1/-1; align-items:flex-start;}
.sub-check{display:flex; align-items:center; gap:8px; margin-top:10px; font-size:14px; color:var(--ink); text-transform:none; letter-spacing:0;}
/* Riserva: quanto è già da parte per un pagamento annuale */
.res-fill{display:block; height:4px; border-radius:2px; background:var(--line); margin-top:5px; width:180px; max-width:100%; overflow:hidden;}
.res-fill span{display:block; height:100%; background:var(--accent);}

.inc-update{display:flex; flex-wrap:wrap; align-items:center; gap:10px 14px; margin:10px 0; padding:12px 14px; border:1px solid var(--accent-border, var(--line)); border-radius:var(--radius-md); background:var(--accent-soft);}
.inc-update p{margin:0; flex:1 1 260px; color:var(--ink);}

.dd-family-back{margin-top:10px; padding:12px 14px; border:1px dashed var(--line); border-radius:var(--radius-lg);}
.dd-family-back .note{margin:4px 0 6px;}

.eq-item-name-input{flex:1 1 auto; min-width:0; background:transparent; border:1px solid transparent; padding:6px 8px; margin-left:-8px; font:inherit; color:var(--ink); border-radius:8px;}
@media (hover:hover) and (pointer:fine){ .eq-item-name-input:hover{border-color:var(--line);} }
.eq-item-name-input:focus{background:var(--bg-input); border-color:var(--accent);}

.eq-item-auto{opacity:.9;}
.eq-item-auto .eq-item-name{font-weight:500; color:var(--muted);}
.eq-auto-amount{font-family:'IBM Plex Mono',monospace; font-size:14px; color:var(--ink); margin-left:auto;}

/* Tu plan → Vivir per categoria (14/10). Revisione impeccable/Emil: niente carte annidate dentro la carta della sezione
   (blocchi separati da una linea), colonne a flusso per non lasciare buchi tra blocchi di altezza diversa, recibos come
   lista semplice, etichette in minuscolo. */
.eq-body:not(:has(.eq-advice)){grid-template-columns:minmax(0,1fr);}
.eq-cats{display:block; columns:3 300px; column-gap:32px;}
.eq-cats > .eq-empty{column-span:all;}
.eq-cat{break-inside:avoid; display:flex; flex-direction:column; gap:6px; padding:14px 0 18px; border-top:1px solid var(--line);}
.eq-cat-head{display:flex; justify-content:space-between; align-items:baseline; gap:10px;}
.eq-cat-name{font-size:15px; font-weight:700; color:var(--ink);}
.eq-cat-head strong{font-family:'IBM Plex Mono',monospace; font-size:16px; font-weight:500; color:var(--ink); font-variant-numeric:tabular-nums;}
.eq-cat .eq-item{background:transparent; padding:0; border:0;}
.eq-cat .eq-item-row{gap:8px;}
.eq-cat .eq-item-name-input{font-size:14px; font-weight:500; color:var(--muted);}
.eq-cat-rec{display:flex; flex-direction:column; margin-top:2px;}
.eq-cat-sub{font-size:12px; color:var(--muted); margin:2px 0 2px;}
.eq-cat-row{display:flex; justify-content:space-between; align-items:baseline; gap:12px; font-size:14px; line-height:1.35; padding:4px 0; color:var(--ink);}
.eq-cat-row > span{min-width:0;}
.eq-cat-row .muted{font-size:12px;}
.eq-cat-row strong{font-family:'IBM Plex Mono',monospace; font-size:14px; font-weight:500; white-space:nowrap; font-variant-numeric:tabular-nums;}
.eq-cat-rest{margin-top:2px; padding-top:6px; border-top:1px dashed var(--line); color:var(--muted);}
.eq-cat-match{display:flex; align-items:center; gap:6px; font-size:12.5px; color:var(--color-success);}
.eq-cat-note{margin:4px 0 0; font-size:12.5px; line-height:1.45; color:var(--muted);}
.eq-cat-note.warn{color:var(--color-warning, var(--accent));}
.eq-cat-sug{display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:6px 10px; margin-top:4px; font-size:12.5px; color:var(--muted);}
.eq-cat-assign select{width:100%;}
.eq-add{grid-column:1/-1;}
.eq-add #eq-new-cat{flex:0 1 220px; min-width:140px;}
.eq-add #eq-new-label{flex:1 1 160px; min-width:0;}
/* 14/10 (Mattia: "nero su grigio su nero non aiuta"): ogni categoria torna una tessera ben visibile, con superficie
   più chiara della carta e bordo marcato; i recibos restano lista semplice dentro, senza un terzo livello. */
.eq-cats{column-gap:14px;}
.eq-cat{background:var(--surface-tile); border:1px solid rgba(255,255,255,.12); border-radius:var(--radius-lg); padding:14px 16px 16px; margin-bottom:14px;}
.eq-cat-head{padding-bottom:8px; margin-bottom:2px; border-bottom:1px solid rgba(255,255,255,.10);}
.eq-cat-rest{border-top-color:rgba(255,255,255,.14);}

/* Aggiunta separata in Vivir (14/10) */
.eq-cats-bar{display:flex; justify-content:flex-end; margin:-4px 0 12px;}
.eq-cat-new{border-color:var(--accent); border-style:dashed;}
.eq-new-field{display:flex; flex-direction:column; gap:4px; font-size:12px; color:var(--muted); text-transform:none; letter-spacing:0;}
.eq-new-field select, .eq-new-field input{width:100%;}
.eq-new-actions{display:flex; justify-content:flex-end; gap:8px; margin-top:4px;}
@media (prefers-reduced-motion:no-preference){ .eq-cat-new{animation:eqNewIn 200ms cubic-bezier(0.23,1,0.32,1);} }
@keyframes eqNewIn{from{opacity:0; transform:translateY(-4px) scale(0.98);} to{opacity:1; transform:none;}}

/* Azione accanto al titolo della sezione (14/10) */
.eq-head-split{display:flex; align-items:center; gap:10px; padding:0 18px 0 0;}
.eq-head-split .eq-head{width:auto;}
.eq-head-split .eq-head-name .eq-name{flex:none;}
.eq-head-split .eq-head-rest{flex:1; justify-content:flex-end; padding-left:0;}
.eq-head-action{padding:4px 10px; font-size:12.5px;}

.dd-plan-line{display:flex; flex-wrap:wrap; align-items:baseline; gap:6px 14px; margin:2px 0 8px; font-size:15px;}
.dd-plan-line strong{font-family:'IBM Plex Mono',monospace;}

.sdl-chips{display:flex; flex-wrap:wrap; gap:8px; margin:6px 0 10px;}
.sdl-preview{margin:6px 0 12px; font-size:14px; color:var(--ink);}

.sdl-loan{display:flex; justify-content:space-between; align-items:center; gap:10px; margin-top:8px; font-size:13px; color:var(--ink);}

/* Deuda contigo come scelta (14/10) */
.sdl-opts{display:grid; grid-template-columns:repeat(auto-fit, minmax(150px,1fr)); gap:10px; margin:10px 0;}
.sdl-opt{display:flex; flex-direction:column; align-items:flex-start; gap:4px; padding:12px 14px; border-radius:var(--radius-lg); border:1px solid rgba(255,255,255,.12); background:var(--surface-tile); color:var(--ink); font:inherit; text-align:left; cursor:pointer; transition:border-color 160ms ease, background-color 160ms ease, transform 160ms ease-out;}
.sdl-opt:active{transform:scale(0.98);}
.sdl-opt.on{border-color:var(--dest); background:color-mix(in srgb, var(--dest) 12%, var(--surface-tile));}
.sdl-opt-n{font-size:13px; font-weight:700;}
.sdl-opt-next{font-family:'IBM Plex Mono',monospace; font-size:16px; color:var(--dest);}
.sdl-opt-sub{font-size:12px; color:var(--muted);}
.sdl-now{margin:4px 0 12px;}

.sdl-calc{display:flex; flex-wrap:wrap; gap:10px;}
.sdl-calc .field{flex:1 1 120px; margin:0;}
.sdl-chosen{margin:4px 0 8px; font-size:14px; color:var(--color-success);}

/* Ajustes su mobile (14/10): lista di righe come nel telefono, poi la sezione con "‹ Ajustes". Una sola forma per
   quello che si tocca (riga con ›); dentro le sezioni restano le carte con le informazioni. */
.settings-back{display:none;}
@media (max-width:640px){
  #panel-impostazioni .settings-layout{gap:0;}
  #panel-impostazioni .settings-sidebar{display:flex; flex-direction:column; flex-wrap:nowrap; gap:0; width:100%; border:1px solid rgba(255,255,255,.10); border-radius:var(--radius-lg); overflow:hidden; background:var(--bg-card);}
  #panel-impostazioni .settings-sidebar button,
  #panel-impostazioni .settings-sidebar button.tc-nav,
  #panel-impostazioni .settings-sidebar button.duro-nav{display:flex; align-items:center; gap:12px; width:100%; flex:none; margin:0; padding:15px 16px; min-height:52px; border:0; border-radius:0; border-bottom:1px solid rgba(255,255,255,.08); background:transparent; color:var(--ink); font-size:15px; font-weight:500; text-align:left;}
  #panel-impostazioni .settings-sidebar button:last-child{border-bottom:0;}
  #panel-impostazioni .settings-sidebar button[style*="display:none"], #panel-impostazioni .settings-sidebar button[style*="display: none"]{display:none !important;}
  #panel-impostazioni .settings-sidebar button::after{content:''; margin-left:auto; width:8px; height:8px; border-right:2px solid var(--muted); border-top:2px solid var(--muted); transform:rotate(45deg); flex:0 0 8px;}
  #panel-impostazioni .settings-sidebar button.active{background:transparent; color:var(--ink);}
  #panel-impostazioni .settings-sidebar button:active{background:rgba(255,255,255,.05); transform:none;}
  #panel-impostazioni .settings-sidebar button.tc-nav{background:var(--accent-soft); padding:14px 16px;}
  #panel-impostazioni .settings-sidebar button.tc-nav .tc-nav-text strong, #panel-impostazioni .settings-sidebar button.tc-nav #tc-nav-sub{color:var(--ink);}
  #panel-impostazioni .settings-sidebar button.tc-nav .tc-nav-icon{filter:none; opacity:1;}
  #panel-impostazioni .settings-sidebar button.duro-nav{padding-left:28px; font-size:14px;}
  #panel-impostazioni .settings-sidebar button.duro-nav::before{display:none;}
  #panel-impostazioni .settings-content{display:none;}
  #panel-impostazioni.settings-detail .settings-sidebar{display:none;}
  #panel-impostazioni.settings-detail .settings-content{display:block; width:100%;}
  #panel-impostazioni .settings-back{display:flex; flex-direction:column; align-items:flex-start; gap:2px; margin:0 0 12px;}
  #panel-impostazioni .settings-back button{display:inline-flex; align-items:center; gap:2px; margin-left:-6px; padding:6px 6px; border:0; background:none; color:var(--accent); font:inherit; font-size:15px; cursor:pointer;}
  #panel-impostazioni .settings-back h1{margin:0; font-family:'Spectral',serif; font-size:26px; font-weight:600; color:var(--ink);}
}
/* Ajustes: la lingua come selettore a pillole (stesso componente di Estado/Cadenza), ovunque */
#language-select-list{display:inline-flex; flex-wrap:wrap; gap:4px; padding:4px; border-radius:999px; background:var(--bg-input); border:1px solid var(--line); width:auto;}
#language-select-list .btn{flex:0 0 auto; width:auto; border:0; border-radius:999px; padding:8px 16px; background:transparent; color:var(--muted); font-size:14px; min-height:0;}
#language-select-list .btn.active{background:var(--accent); color:var(--on-accent); font-weight:700;}
@media (max-width:640px){
  /* Su mobile le carte di Ajustes restano aperte: la freccia apri/chiudi sembrava un comando in più. */
  #panel-impostazioni .card-header-row .icon-only-btn{display:none;}
  #panel-impostazioni .card-header-row{cursor:default; pointer-events:none;}
  #panel-impostazioni .card-header-row + div[id$="-content"]{display:block !important;}
  #panel-impostazioni .settings-list-title{display:block; margin:0 0 12px; font-family:'Spectral',serif; font-size:26px; font-weight:600; color:var(--ink);}
  #panel-impostazioni.settings-detail .settings-list-title{display:none;}
}

.settings-list-title{display:none;}

.am-row{display:flex; flex-wrap:wrap; align-items:center; gap:8px 14px; padding:10px 0; border-top:1px solid var(--line); font-size:14px;}
.am-row > span{flex:1 1 220px; min-width:0;}
.am-month{font-family:'IBM Plex Mono',monospace; white-space:nowrap;}
.am-form{display:grid; grid-template-columns:repeat(auto-fit, minmax(140px,1fr)); gap:10px; align-items:end; margin-top:12px; padding-top:12px; border-top:1px solid var(--line);}
.am-form .field{margin:0;}

/* Porcellino del Duro nero quando Autónomo è selezionato (14/10, Mattia) */
.duro-tab.active::after, [data-mirror="nav-autonomo-btn"].active::after{filter:brightness(0); opacity:.78;}
/* Autónomo → Situación: Cálculo de impuestos, IVA e Modelo 130 uno sotto l'altro (14/10, Mattia) */
.autonomo-stack{display:flex; flex-direction:column; gap:16px;}
.autonomo-stack > .card{margin:0;}

.am-date{display:flex; gap:6px;}
.am-date select{flex:1 1 0; min-width:0;}

.fam-split-line{margin:12px 0 0; font-size:15px; font-weight:600; color:var(--ink);}
.eq-cat-name .res-dest{margin-left:6px; font-size:10.5px;}

/* Pagina Familia (15/10) */
.fam-flow{width:100%; height:auto; display:block; margin-top:6px;}
.fam-node-t{fill:var(--ink); font:700 15px 'Nunito Sans',sans-serif;}
.fam-node-s{fill:var(--muted); font:500 12px 'IBM Plex Mono',monospace;}
.fam-flow{max-width:900px; margin:6px auto 0;}
.fam-flow path{transition:opacity 160ms ease;}
@media (hover:hover) and (pointer:fine){ .fam-flow path:hover{opacity:1;} }
.fam-group{margin-top:12px;}
.fam-group-head{display:flex; justify-content:space-between; align-items:baseline; padding:6px 0; border-bottom:1px solid var(--line); font-weight:700; font-size:14px;}
.fam-group-head strong{font-family:'IBM Plex Mono',monospace;}

.fam-pockets{display:flex; flex-direction:column; gap:2px; margin-top:10px; width:100%; max-width:280px;}
.fam-pocket{display:flex; justify-content:space-between; gap:12px; font-size:14px; color:var(--ink); font-weight:600;}
.fam-pocket.sub{padding-left:14px; font-weight:400; color:var(--muted); font-size:13px;}
.fam-pocket strong{font-family:'IBM Plex Mono',monospace; font-weight:500;}
.fam-flow-wrap{position:relative;}
.fam-flow path[data-tip]{cursor:pointer;}
.fam-tip{position:absolute; z-index:5; pointer-events:none; display:flex; flex-direction:column; gap:2px; padding:8px 10px; border-radius:var(--radius-lg); background:#111315; border:1px solid rgba(255,255,255,.14); box-shadow:0 6px 18px rgba(0,0,0,.4); font-size:12.5px; color:var(--muted); white-space:nowrap; transform:translateY(-100%);}
.fam-tip strong{font-family:'IBM Plex Mono',monospace; font-size:14px; color:var(--ink);}
.fam-legend{display:flex; gap:18px; justify-content:center; margin:8px 0 0; font-size:12.5px; color:var(--muted);}
.fam-legend span::before{content:''; display:inline-block; width:14px; height:6px; border-radius:3px; margin-right:6px; vertical-align:middle;}
.fam-legend .in::before{background:var(--color-success);} .fam-legend .out::before{background:var(--color-danger);}
.fam-tip[hidden]{display:none;}

.fam-tag{display:inline-block; margin-left:6px; padding:1px 7px; border-radius:999px; font-size:11px; font-weight:700; letter-spacing:.02em; background:var(--accent-soft); color:var(--accent); vertical-align:1px;}
.fam-table{width:100%;}
.fam-table .fam-cat-row td{padding-top:16px; font-weight:700; color:var(--ink); border-bottom:1px solid var(--line);}
.fam-table .fam-cat-row td.num{font-family:'IBM Plex Mono',monospace;}

/* Modifica movimento in finestra (0.73) */
.tx-edit-box{max-height:calc(100vh - 32px); overflow:auto;}
.tx-edit-box .inline-edit-panel{background:none; border:0; padding:0;}
.tx-edit-box .account-details-grid{padding:0; background:none; grid-template-columns:repeat(auto-fit, minmax(180px,1fr)); gap:12px;}
.tx-edit-box .account-details-actions{margin-top:18px; gap:8px; justify-content:flex-end; flex-wrap:wrap;}
.tx-edit-box .account-details-actions .btn.ghost:first-child{margin-right:auto;}

/* Tabelle dei movimenti nelle pagine di dettaglio (0.73) */
.dd-table{margin-top:8px;}
.dd-table td{vertical-align:middle;}
.dd-table .dd-col-date{white-space:nowrap; font-family:'IBM Plex Mono',monospace; font-size:14px; color:var(--muted);}
.dd-table .dd-col-cat{width:170px;}
.dd-table .dd-col-act{width:1%; white-space:nowrap;}
.dd-table td.num{white-space:nowrap;}
.dd-table tr.dd-row{cursor:pointer;}
@media (hover:hover) and (pointer:fine){ .dd-table tr.dd-row:hover td{background:var(--surface-alt);} }
@media (max-width:640px){ .dd-table .dd-col-acc{display:none;} .dd-table .dd-col-cat{width:130px;} }
.tx-edit-box .cat-hint{display:none;}
@media (max-width:640px){
  #edit-mv-type-seg{display:flex; flex-wrap:nowrap; width:100%;}
  #edit-mv-type-seg .sub-seg-btn{flex:1; padding:7px 6px; text-align:center;}
}
@media (max-width:640px){ .tx-edit-box .sub-block{padding:12px;} }

/* Riserva: per la famiglia o per te (0.74) */
.res-auto-row{grid-template-columns:minmax(0,1fr) auto auto auto;}
.res-who{font-family:'Nunito Sans'; font-size:11px; font-weight:700; letter-spacing:.02em; padding:2px 9px; border-radius:999px; border:1px solid var(--line); background:transparent; color:var(--muted); cursor:pointer; white-space:nowrap; transition:transform 160ms ease-out, background-color 160ms ease;}
.res-who.on{background:var(--accent-soft); border-color:transparent; color:var(--accent);}
button.res-who:active{transform:scale(0.97);}
span.res-who{cursor:default;}
.res-who-split{display:flex; gap:18px; flex-wrap:wrap; margin:6px 0 12px; font-size:14px;}
.res-who-split > span{display:flex; align-items:center; gap:8px;}
@media (max-width:560px){ .res-auto-row{grid-template-columns:minmax(0,1fr) auto auto;} }

/* Pon tu plan en automático esteso (0.75) */
.autoplan-section{display:flex; flex-direction:column; gap:10px;}
.autoplan-section-title{margin:6px 0 0; font-family:'Nunito Sans'; font-size:12px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--muted);}
.autoplan-section .note{margin:0;}
.autoplan-extra{padding-left:18px;}
.autoplan-extra .autoplan-row-name{font-weight:500; font-size:14px;}
.autoplan-extra-label{width:100%; max-width:260px; font-size:14px; padding:4px 8px;}
.autoplan-bucket{font-size:12.5px; padding:2px 26px 2px 6px; margin-left:4px;}
.autoplan-amount .icon-only-btn{margin-left:2px;}
.autoplan-add{align-self:flex-start;}
.flujo-auto-card{display:flex; flex-direction:column; gap:8px;}
.flujo-auto-card .card-header-row{margin:0;}
.flujo-auto-text{margin:0; font-size:14px; line-height:1.5; color:var(--ink); max-width:680px;}
.flujo-auto-card .note{margin:0;}
.flujo-auto-needs{color:var(--color-warning) !important;}
.flujo-auto-actions{display:flex; flex-wrap:wrap; gap:8px; margin-top:4px;}
.autoplan-why .autoplan-bucket{width:auto; display:inline-block; min-width:0;}
/* Vivir che deve ancora uscire, per categoria (0.77) */
.dd-vpend{grid-column:1/-1; display:flex; flex-direction:column; margin-top:4px; border-left:2px solid var(--line); padding-left:12px;}
.dd-vpend-row{display:grid; grid-template-columns:1fr auto; gap:4px 12px; align-items:center; padding:8px 0;}
.dd-vpend-row + .dd-vpend-row{border-top:1px solid var(--line);}
.dd-vpend-name{font-size:13px; color:var(--ink);}
.dd-vpend-detail{grid-column:1/-1; font-size:12px; color:var(--muted);}
.eq-cat-kind{display:flex; flex-wrap:wrap; align-items:center; gap:8px 12px; margin-top:10px; padding-top:10px; border-top:1px solid var(--line); font-size:13px; color:var(--ink);}
.eq-cat-kind > span{flex:1 1 180px;}
.eq-cat-kind .eq-cat-note{flex-basis:100%; margin:0;}
.dd-rc-sub{font-style:normal; font-size:11px; color:var(--muted); line-height:1.4;}
/* Tus cuentas para Disfrutar come estratto (0.79) */
.dst{display:flex; flex-direction:column; gap:14px; margin-top:12px; max-width:560px;}
.dst-title{font-size:11px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--muted); margin-bottom:4px;}
.dst-row{display:flex; justify-content:space-between; align-items:baseline; gap:16px; padding:6px 0; border-bottom:1px solid var(--line);}
.dst-row:last-child{border-bottom:none;}
.dst-label{font-size:14px; color:var(--ink); display:flex; flex-direction:column; gap:2px; min-width:0;}
.dst-label em{font-style:normal; font-size:12px; color:var(--muted);}
.dst-row strong{font-family:'IBM Plex Mono',monospace; font-weight:500; font-size:14px; white-space:nowrap; font-variant-numeric:tabular-nums;}
.dst-total{display:flex; justify-content:space-between; align-items:baseline; padding-top:12px; border-top:2px solid var(--color-border-strong); font-weight:700;}
.dst-total strong{font-family:'IBM Plex Mono',monospace; font-size:16px; color:var(--dest, var(--ink));}
.dst-total.neg strong{color:var(--fire, var(--color-danger));}
.eq-cat-own{display:flex; align-items:center; justify-content:space-between; gap:10px; margin-top:8px; font-size:13px; color:var(--ink);}
/* Tu plan → Vivir: riquadri da leggere, modifica in finestra (0.80) */
.eq-tile{cursor:pointer; transition:border-color 160ms ease, transform 160ms ease-out;}
.eq-tile:active{transform:scale(0.985);}
.eq-tile:focus-visible{outline:2px solid var(--accent); outline-offset:2px;}
@media (hover:hover) and (pointer:fine){ .eq-tile:hover{border-color:rgba(255,255,255,.24);} .eq-tile:hover .eq-tile-pen{color:var(--ink); background:rgba(255,255,255,.08);} }
.eq-tile .eq-cat-head{align-items:center; gap:10px;}
.eq-tile .eq-cat-head strong{margin-left:auto;}
.eq-tile-pen{display:inline-flex; align-items:center; justify-content:center; width:28px; height:28px; border-radius:8px; border:1px solid var(--line); color:var(--muted); flex:0 0 auto; transition:color 160ms ease, background-color 160ms ease;}
.eq-tile-rows{display:flex; flex-direction:column; margin-top:6px;}
.eq-tile-row{display:flex; justify-content:space-between; align-items:baseline; gap:12px; font-size:14px; padding:3px 0; color:var(--ink);}
.eq-tile-row > span{min-width:0;}
.eq-tile-row strong{font-family:'IBM Plex Mono',monospace; font-weight:500; font-size:14px; white-space:nowrap; font-variant-numeric:tabular-nums;}
.eq-tile-row.rec{color:var(--muted); font-size:13px;}
.eq-tile-row.rec strong{color:var(--muted);}
.eq-tile-row.rest{color:var(--muted); font-style:italic;}
.eq-tile-ok{display:inline-flex; align-items:center; gap:4px; font-size:11.5px; color:var(--color-success); margin-left:6px;}
.eq-tile-ok svg{width:12px; height:12px;}
.eq-tags{display:flex; flex-wrap:wrap; gap:6px; margin-top:10px;}
.eq-tag{font-size:11px; font-weight:700; padding:2px 9px; border-radius:999px; border:1px solid var(--line); color:var(--muted);}
.eq-tag.sure{background:var(--accent-soft); border-color:transparent; color:var(--accent);}
.eq-tag.est{border-style:dashed;}
.eq-tag.warn{color:var(--color-warning); border-color:transparent; background:var(--color-warning-soft, rgba(246,194,71,.12));}
.eq-cat-title-amt{font-family:'IBM Plex Mono',monospace; font-size:16px; color:var(--muted); font-weight:500; margin-left:8px;}
.eq-rec-row{display:flex; align-items:center; gap:10px; padding:6px 0; border-top:1px solid var(--line); font-size:14px;}
.eq-rec-row:first-of-type{border-top:none;}
.eq-rec-row > span{flex:1; min-width:0;}
.eq-rec-row strong{font-family:'IBM Plex Mono',monospace; font-weight:500; white-space:nowrap;}
.eq-cat-foot{display:flex; justify-content:flex-end; margin-top:14px;}
.eq-cat-box .eq-item + .eq-item{margin-top:8px;}
/* Tu plan: riquadri per tutte le aree, Disfrutar fisso (0.81) */
.eq-tile-sub{margin:4px 0 0; font-size:12.5px; color:var(--muted); line-height:1.4;}
.eq-tile-row .pos{color:var(--color-success); font-size:12px;}
.eq-tile-row .neg{color:var(--color-danger); font-size:12px;}
.eq-cats.eq-cats-one{columns:auto; display:grid; grid-template-columns:minmax(0, 480px);}
.eq-section-note{margin:10px 0 0; font-size:12.5px; color:var(--muted);}
.eq-lvl{width:18px; display:inline-flex; color:var(--color-success);}
.eq-lvl svg{width:14px; height:14px;}
.eq-dis{border:1px solid rgba(74,220,182,.35); background:linear-gradient(180deg, rgba(74,220,182,.14), rgba(74,220,182,.04)); padding:22px 24px;}
.eq-dis.neg{border-color:rgba(231,111,97,.35); background:linear-gradient(180deg, rgba(231,111,97,.12), rgba(231,111,97,.03));}
.eq-dis-top{display:flex; justify-content:space-between; align-items:center; gap:12px;}
.eq-dis-amount{font-family:'IBM Plex Mono',monospace; font-size:28px; font-weight:500; color:var(--dest-disfrutar); margin:10px 0 4px; line-height:1.1; display:flex; align-items:baseline; flex-wrap:wrap; gap:10px; font-variant-numeric:tabular-nums;}
.eq-dis.neg .eq-dis-amount{color:var(--fire, var(--color-danger));}
.eq-dis-per{font-family:'Nunito Sans'; font-size:14px; font-weight:600; color:var(--muted);}
.eq-dis-lead{margin:0 0 12px; font-size:14px; color:var(--ink);}
.eq-dis-sum{display:flex; flex-wrap:wrap; gap:4px 14px; font-size:12.5px; color:var(--muted); font-variant-numeric:tabular-nums;}
.eq-dis-advice{margin:12px 0 0; font-size:13px; color:var(--ink);}
@media (max-width:640px){ .eq-dis{padding:18px;} .eq-dis-amount{font-size:32px;} }
/* Onboarding: autónomo senza Duro, avviso tasse e invito (0.83) */
.onb3-duro{margin-top:18px; display:flex; flex-direction:column; gap:12px;}
.onb3-duro-warn{margin:0; font-size:14px; line-height:1.5; color:var(--ink); padding:12px 14px; border-radius:var(--radius-lg); background:var(--color-warning-soft, rgba(233,168,59,.12));} /* audit 0.108: bloque warning, senza bordo sinistro */
.onb3-duro-card{display:grid; grid-template-columns:auto 1fr auto; align-items:center; gap:12px 14px; padding:14px; border-radius:var(--radius-lg); border:1px solid var(--accent-border, rgba(249,185,0,.35)); background:var(--accent-soft);}
.onb3-duro-card.on{border-color:var(--accent);}
.onb3-duro-piggy{width:40px; height:40px; object-fit:contain;}
.onb3-duro-text strong{display:block; font-size:14.5px; color:var(--ink);}
.onb3-duro-text p{margin:4px 0; font-size:13px; line-height:1.45; color:var(--muted);}
.onb3-duro-price{font-size:12px; font-weight:700; color:var(--accent);}
@media (max-width:640px){ .onb3-duro-card{grid-template-columns:auto 1fr;} .onb3-duro-card .btn{grid-column:1/-1;} }
.autoplan-trigger{display:flex; flex-direction:column; gap:6px; margin:10px 0 4px;} .autoplan-trigger-label{font-size:12px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--muted);} .autoplan-trigger .note{margin:2px 0 0;}
.autoplan-split-add{grid-column:1/-1; justify-self:start; font-size:12.5px; margin-top:2px;}
/* Mini-onboarding dei Duro (0.85) */
.duro-onb-head{display:grid; grid-template-columns:auto 1fr auto; gap:12px; align-items:center; margin-bottom:10px;}
.duro-onb-head h2{margin:2px 0 0;}
.duro-onb-piggy{width:40px; height:40px; object-fit:contain;}
.duro-onb-kicker{font-size:11px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--accent);}
.duro-onb-dots{display:flex; gap:6px; margin:0 0 14px;}
.duro-onb-dots span{flex:1; height:3px; border-radius:2px; background:var(--line);}
.duro-onb-dots span.done{background:var(--accent-soft);}
.duro-onb-dots span.on{background:var(--accent);}
.duro-onb-p{margin:0 0 10px; font-size:14px; line-height:1.55; color:var(--ink);}
.duro-onb-list{margin:0; padding-left:18px; display:flex; flex-direction:column; gap:6px; font-size:14px; line-height:1.5; color:var(--ink);}
.duro-onb-box .eq-line{display:flex; align-items:center; gap:8px; margin-bottom:8px;}
.duro-onb-box .eq-line-label{flex:1; min-width:0;}
.duro-onb-box .sub-seg{margin-top:4px;}
.hb-fill.waiting{opacity:.32;} .hb-amount.muted{color:var(--muted);} .hd-box.waiting .hd-center{color:var(--muted);}
/* Mini-onboarding Tus cuentas (0.87) */
.acc-onb-row{display:grid; grid-template-columns:auto minmax(0,1fr) auto 130px 24px; align-items:center; gap:10px; padding:8px 0; border-top:1px solid var(--line);}
.acc-onb-row:first-child{border-top:none;}
.acc-onb-row.pocket{padding-left:18px;}
.acc-onb-branch{color:var(--muted); width:24px; text-align:center;}
.acc-onb-name{min-width:0;}
.acc-onb-kind{font-size:12px; color:var(--muted); white-space:nowrap;}
.acc-onb-bal{font-family:'IBM Plex Mono',monospace; text-align:right;}
.acc-onb-addpocket{display:block; margin:2px 0 6px 42px; font-size:12.5px;}
.acc-onb-addacc{display:block; margin-top:10px;}
.acc-onb-form{display:flex; flex-direction:column; gap:8px; margin:8px 0; padding:12px; border:1px dashed var(--line); border-radius:var(--radius-md);}
.acc-onb-form-title{font-size:12px; font-weight:700; color:var(--muted); text-transform:uppercase; letter-spacing:.05em;}
@media (max-width:640px){ .acc-onb-row{grid-template-columns:auto minmax(0,1fr) 110px 24px;} .acc-onb-kind{display:none;} }
/* Liste dei conti per banca nel mini-onboarding del Duro; conti già noti nell'onboarding (0.88) */
.acc-picks{display:flex; flex-direction:column; gap:10px;}
.acc-pick-bank{border:1px solid var(--line); border-radius:var(--radius-lg); padding:8px 10px;}
.acc-pick-bank-name{display:flex; align-items:center; gap:8px; font-size:12px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; color:var(--muted); margin-bottom:4px;}
.acc-pick{display:grid; grid-template-columns:auto 1fr auto; align-items:center; gap:10px; padding:6px 0; font-size:14px; color:var(--ink); cursor:pointer;}
.acc-pick.pocket{padding-left:26px; font-size:14px;}
.acc-pick.pocket .acc-pick-name::before{content:'└ '; color:var(--muted);}
.acc-pick-kind{font-size:12px; color:var(--muted);}
.onb3-acc-row.known{opacity:.9;}
.onb3-known-name{font-size:14px; color:var(--ink);}
.onb3-known-bal{font-family:'IBM Plex Mono',monospace; font-size:14px; color:var(--muted); text-align:right;}
/* Preferenze del conto: una sotto l'altra con interruttori (0.90.1) */
.acc-prefs{grid-column:1/-1; display:flex; flex-direction:column;}
.acc-pref{display:flex; align-items:center; justify-content:space-between; gap:16px; padding:10px 0; border-top:1px solid var(--line); cursor:pointer; text-transform:none; letter-spacing:0;}
.acc-pref:first-child{border-top:none; padding-top:2px;}
.acc-pref-text{display:flex; flex-direction:column; gap:2px; min-width:0;}
.acc-pref-text strong{font-size:14px; font-weight:600; color:var(--ink);}
.acc-pref-text .note{margin:0; font-size:12.5px;}
.acc-pref input.switch{flex:0 0 auto;}
/* Dati non coerenti col giro dei soldi (16/10): cosa manca prima di confrontare il mese col piano. */
.plan-check{display:flex; flex-direction:column; align-items:flex-start; gap:6px; margin:12px 0; background:var(--color-warning-soft); border:0;}
.plan-check p{margin:0; color:var(--ink);}
#dest-detail.unchecked .dd-pill{display:none;}
#dest-detail.unchecked .dd-hero{opacity:.55;}
.onb3-payday-row{display:flex; align-items:center; gap:10px;}
.onb3-payday-row input{width:84px; font-size:18px; text-align:center;}
/* ---- Obiettivo con simulazione (dev 0.93, 16/10) ---- */
.goal-box{max-width:600px;}
.goal-head{margin-bottom:6px; cursor:default; align-items:flex-start;}
.goal-name{width:100%; border:none; border-bottom:1px solid var(--line); border-radius:0; background:transparent; padding:6px 0 10px; font-family:'Spectral',serif; font-size:26px; font-weight:600; color:var(--ink); box-shadow:none !important;}
.goal-name:focus{outline:none; border-bottom-color:var(--accent);}
.goal-name::placeholder{color:var(--muted); font-weight:400;}
.goal-cats{display:grid; grid-template-columns:repeat(3,1fr); gap:8px; margin:16px 0 18px;}
.goal-cat{display:flex; align-items:center; gap:10px; text-align:left; padding:10px 12px; border-radius:var(--radius-lg); border:1px solid var(--line); background:var(--bg-card-alt); color:var(--ink); cursor:pointer; transition:border-color .16s ease, background .16s ease, transform .16s ease-out;}
.goal-cat:active{transform:scale(.97);}
.goal-cat:hover{border-color:color-mix(in srgb, var(--dest) 55%, var(--line));}
.goal-cat.on{border-color:var(--dest); background:color-mix(in srgb, var(--dest) 13%, var(--bg-card-alt));}
.goal-cat-icon{flex:none; width:32px; height:32px; border-radius:50%; display:grid; place-items:center; color:var(--dest); background:color-mix(in srgb, var(--dest) 16%, transparent);}
.goal-cat strong{display:block; font-size:14px;}
.goal-cat small{display:block; font-size:12px; color:var(--muted); line-height:1.3;}
.goal-amounts{display:grid; grid-template-columns:1.3fr 1fr; gap:14px; align-items:start;}
.goal-field{display:flex; flex-direction:column; gap:6px; font-size:13px; color:var(--muted); font-weight:600;}
.goal-have-linked{font-family:'IBM Plex Mono',monospace; font-size:16px; color:var(--ink); padding:9px 0;}
.goal-link-toggle{align-self:flex-start; font-weight:500;}
.goal-links{margin-top:10px; max-height:170px; overflow-y:auto; border:1px solid var(--line); border-radius:var(--radius-md); padding:4px 12px;}
.goal-modes{display:grid; grid-template-columns:1fr 1fr; gap:8px; margin-top:18px;}
.goal-mode{display:flex; flex-direction:column; gap:4px; text-align:left; padding:12px 14px; border-radius:var(--radius-lg); border:1px solid var(--line); background:transparent; color:var(--ink); cursor:pointer; transition:border-color .16s ease, background .16s ease, transform .16s ease-out;}
.goal-mode:active{transform:scale(.98);}
.goal-mode.on{border-color:var(--accent); background:var(--accent-soft);}
.goal-mode strong{font-size:14px;}
.goal-mode span{font-size:12.5px; color:var(--muted); line-height:1.4;}
.goal-sim{margin-top:14px; padding:18px; border-radius:var(--radius-lg); background:color-mix(in srgb, var(--dest) 8%, var(--bg-card-alt));}
.goal-sim-empty{margin:0; color:var(--muted); font-size:14px;}
.goal-sim-head{display:flex; flex-direction:column; gap:2px;}
.goal-sim-head strong{font-family:'Spectral',serif; font-size:24px; font-weight:600; line-height:1.2; text-wrap:balance;}
.goal-sim-head em{font-style:normal; color:var(--dest);}
.goal-sim-head span{font-size:13px; color:var(--muted);}
.goal-slider{display:flex; align-items:center; gap:14px; margin:16px 0 12px;}
.goal-slider input[type=range]{flex:1; accent-color:var(--dest); height:24px; cursor:pointer;}
.goal-slider-val{display:flex; align-items:baseline; gap:4px; flex:none;}
.goal-slider-val input{width:92px; text-align:right; font-family:'IBM Plex Mono',monospace; font-size:16px; padding:6px 8px; border-radius:8px; border:1px solid var(--line); background:var(--bg-input); color:var(--ink);}
.goal-slider-val span{font-size:12px; color:var(--muted);}
.goal-split-bar{display:flex; height:10px; border-radius:999px; overflow:hidden; background:var(--line);}
.goal-split-bar span{display:block; height:100%; transition:width .22s cubic-bezier(.23,1,.32,1);}
.goal-split-bar .goal{background:var(--dest);}
.goal-split-bar .you{background:color-mix(in srgb, var(--color-success) 55%, transparent);}
.goal-split.over .goal-split-bar .goal{background:var(--fire);}
.goal-split-legend{display:flex; flex-wrap:wrap; gap:6px 16px; margin-top:8px; font-size:13px; color:var(--ink);}
.goal-split-legend .sw{display:inline-block; width:9px; height:9px; border-radius:50%; margin-right:6px; vertical-align:0;}
.goal-split-legend .sw.goal{background:var(--dest);}
.goal-split-legend .sw.you{background:color-mix(in srgb, var(--color-success) 55%, transparent);}
.goal-warn{margin:10px 0 0; color:var(--fire); font-size:13px;}
.goal-note, .goal-cmp{margin:10px 0 0; font-size:13px; color:var(--muted); line-height:1.5;}
.goal-cmp{padding-top:10px; border-top:1px solid color-mix(in srgb, var(--dest) 18%, var(--line));}
.goal-date{display:flex; align-items:center; justify-content:space-between; gap:12px; margin-top:14px; font-size:14px; color:var(--muted);}
.goal-date input{max-width:190px; font-family:inherit;}
.goal-actions{margin-top:18px;}
.goal-card-line{margin-top:8px;}
@media (max-width:560px){
  .goal-cats{grid-template-columns:1fr;}
  .goal-amounts, .goal-modes{grid-template-columns:1fr;}
  .goal-name{font-size:22px;}
}
.goal-box{max-height:calc(100vh - 32px); overflow-y:auto; overscroll-behavior:contain;}
.goal-date input{color-scheme:dark; background:var(--bg-input); border:1px solid var(--line); border-radius:var(--radius-md); padding:8px 10px; color:var(--ink);}
.goal-actions{position:sticky; bottom:-24px; background:var(--bg-card); padding:12px 0 4px; margin-bottom:-4px;}
.goal-split-bar .you, .goal-split-legend .sw.you{background:color-mix(in srgb, var(--ink) 24%, transparent);}
/* Obiettivi 0.94: conto, data a tendina, nota Vivir, interruttore, cursore */
.goal-select{width:100%; font-size:14px;}
.goal-have{display:flex; align-items:center; justify-content:space-between; gap:12px; margin-top:12px; padding:10px 14px; border-radius:var(--radius-md); background:var(--bg-card-alt); font-size:14px; color:var(--muted);}
.goal-have strong{font-family:'IBM Plex Mono',monospace; font-weight:500; color:var(--ink); font-size:16px;}
.goal-have label{font-weight:600;}
.goal-money.small{max-width:180px;}
.goal-money.small input{padding:7px 0; text-align:right;}
.goal-vivir-note{margin:16px 0 0; font-size:14px; color:var(--muted); line-height:1.5;}
.goal-date-pick{display:flex; gap:8px;}
.goal-date-pick select{min-width:120px;}
.goal-switch{display:flex; align-items:flex-start; gap:12px; margin-top:14px; cursor:pointer;}
.goal-switch input{flex:none; margin-top:2px;}
.goal-switch strong{display:block; font-size:14px; color:var(--ink);}
.goal-switch small{display:block; font-size:12.5px; color:var(--muted); line-height:1.4;}
.goal-slider input[type=range]{-webkit-appearance:none; appearance:none; height:28px; background:transparent; touch-action:none;}
.goal-slider input[type=range]::-webkit-slider-runnable-track{height:6px; border-radius:999px; background:linear-gradient(to right, var(--dest) var(--fill, 0%), color-mix(in srgb, var(--ink) 18%, transparent) var(--fill, 0%));}
.goal-slider input[type=range]::-moz-range-track{height:6px; border-radius:999px; background:color-mix(in srgb, var(--ink) 18%, transparent);}
.goal-slider input[type=range]::-moz-range-progress{height:6px; border-radius:999px; background:var(--dest);}
.goal-slider input[type=range]::-webkit-slider-thumb{-webkit-appearance:none; width:22px; height:22px; margin-top:-8px; border-radius:50%; background:var(--ink); border:4px solid var(--dest); box-shadow:0 2px 6px rgba(0,0,0,.35); transition:transform .12s ease-out;}
.goal-slider input[type=range]:active::-webkit-slider-thumb{transform:scale(1.12);}
.goal-slider input[type=range]::-moz-range-thumb{width:16px; height:16px; border-radius:50%; background:var(--ink); border:4px solid var(--dest);}
.goal-slider input[type=range]:focus-visible{outline:none;}
.goal-slider input[type=range]:focus-visible::-webkit-slider-thumb{box-shadow:0 0 0 4px var(--accent-soft);}
.goal-split-bar span{transition:none;}
.goal-slider input[type=range]{border:none; padding:0; box-shadow:none; border-radius:0; background:transparent;}
.goal-split-legend + *{margin-top:10px;}
/* Obiettivi 0.95: sezioni con titoletto (design system: Modal), scelte a segmenti */
.goal-sec{display:flex; flex-direction:column; gap:12px; margin-top:18px;}
.goal-sec + .goal-sec{padding-top:16px; border-top:1px solid var(--line);}
.goal-sec .sub-block-title{margin:0;}
.goal-sec .goal-modes{margin-top:0;}
.goal-sec .goal-sim{margin-top:0;}
.goal-fields{display:grid; grid-template-columns:1fr 1fr; gap:12px; align-items:end;}
.goal-field-amount{max-width:260px;}
.goal-actions{display:flex; justify-content:space-between; align-items:center;}
.goal-date-pick select{min-width:140px;}
@media (max-width:560px){ .goal-fields{grid-template-columns:1fr;} }
/* "Spostali in automatico" (0.95.2): interruttore in testa, sotto il perché e il promemoria della banca */
.goal-auto{display:flex; flex-direction:column; gap:8px; padding:16px 18px; border-radius:var(--radius-lg); background:var(--accent-soft); border:1px solid var(--accent-border); transition:background-color .2s ease, border-color .2s ease;}
.goal-auto-head{display:flex; align-items:center; gap:12px; cursor:pointer;}
.goal-auto-head h4{flex:1; margin:0; font-family:'Spectral',serif; font-size:17px; font-weight:600; color:var(--ink);}
.goal-auto-head .switch{flex:none;}
.goal-auto-icon{flex:none; width:34px; height:34px; border-radius:50%; display:grid; place-items:center; background:var(--accent); color:var(--on-accent); transition:background-color .2s ease;}
.goal-auto p{margin:0; font-size:14px; line-height:1.5; color:var(--ink);}
.goal-auto p strong{white-space:nowrap;}
.goal-auto-bank{font-size:12.5px !important; color:var(--muted) !important;}
.goal-auto.off{background:transparent; border:1px dashed var(--color-border-strong);}
.goal-auto.off .goal-auto-icon{background:var(--bg-card-alt); color:var(--muted);}
.goal-auto.off p{color:var(--muted);}
/* ---- Finestre (0.96, design system: Modal) ---- */
/* Etichetta di campo = livello 4 della gerarchia: minuscolo, 13px, muted. Mai in maiuscolo. */
.field label{font-size:13px; text-transform:none; letter-spacing:0; color:var(--muted); font-weight:600;}
.md-box{display:flex; flex-direction:column; padding-bottom:0;}
.md-head{margin-bottom:4px; cursor:default; align-items:flex-start;}
.md-desc{margin:4px 0 4px; font-size:13px; line-height:1.5;}
.md-sec{display:flex; flex-direction:column; gap:10px; padding:16px 0;}
.md-sec + .md-sec{border-top:1px solid var(--line);}
.md-sec .sub-block-title{margin:0;}
.md-grid{display:grid; grid-template-columns:1fr 1fr; gap:12px; align-items:start;}
.md-grid > .wide{grid-column:1/-1;}
.md-grid .field input:not([type=checkbox]):not([type=color]), .md-grid .field select, .md-grid .field textarea{width:100%;}
.md-grid .note{margin:0;}
.md-bank{display:flex; align-items:center; gap:8px;} .md-bank select{flex:1; min-width:0;}
/* 0.195: con il menu delle banche (AccountSelect) il logo è già nel pulsante, il riquadro a fianco non serve. */
.md-bank .acct-sel-btn{flex:1; min-width:0;}
.md-bank select.acct-native ~ [id$="-bank-preview"]{display:none;}
.md-check{display:flex; align-items:center; gap:8px; font-size:14px; color:var(--ink); cursor:pointer;}
.md-check input{width:auto;}
.md-hidden{display:none !important;}
.md-foot{display:flex; justify-content:space-between; align-items:center; gap:10px; padding:14px 0 18px; border-top:1px solid var(--line); position:sticky; bottom:0; background:var(--bg-card); margin-top:2px;}
@media (max-width:560px){ .md-grid{grid-template-columns:1fr;} }
/* Editar movimiento come Registrar movimiento (DS Modal): due campi per riga della stessa larghezza, uno su mobile. */
#tx-edit-body .sub-block-grid{grid-template-columns:1fr 1fr;}
@media (max-width:560px){ #tx-edit-body .sub-block-grid{grid-template-columns:1fr;} }
/* Un campo che apre una riga nuova (es. la data da sola, poi Descrizione | Importe): l'ordine a schermo resta quello del DOM. */
.md-grid > .md-row-start, .sub-block-grid > .md-row-start{grid-column:1;}
/* Dentro una finestra niente card annidate (design system: Modal): i blocchi diventano sezioni separate da una linea */
.confirm-box .sub-form{gap:0;}
.confirm-box .sub-block{border:none; border-radius:0; background:transparent; padding:16px 0;}
.confirm-box .sub-block + .sub-block{border-top:1px solid var(--line);}
.md-foot-right{display:flex; gap:8px; flex-wrap:wrap; justify-content:flex-end;}
#add-movement-overlay .mv-type-picker{margin-top:8px;}
/* Due azioni in una finestra: Annulla a sinistra, la conferma a destra (design system: Modal) */
.confirm-actions:has(> .btn.ghost:first-child + .btn){justify-content:space-between;}
.confirm-box > p:first-child{font-size:15px; line-height:1.5; color:var(--ink); margin:0 0 14px;}
/* Niente etichette in maiuscolo sopra i titoli (design system: Hierarchy): passo e contatore sono note discrete */
.duro-onb-kicker{font-size:12.5px; font-weight:600; letter-spacing:0; text-transform:none; color:var(--muted);}
.catdest-card-count{font-size:12.5px; font-weight:600; letter-spacing:0; text-transform:none;}
/* ---- 0.96.6 (Mattia: tooltip tagliato, spaziature, elementi larghi senza motivo, testi vs note) ---- */
/* Intestazione: titolo, poi il testo che spiega (body 14px), poi la prima sezione. */
.md-head{margin:0 0 6px; align-items:center;}
.md-head h2{margin:0;}
.md-desc{margin:0 0 6px; font-size:14px; line-height:1.5; color:var(--ink);}
/* Nota = livello 5: 12,5px muted, più piccola del testo. */
.md-sec .note, .md-box .md-grid .note{font-size:12.5px; line-height:1.45; color:var(--muted); margin:0;}
/* Un controllo è largo quanto il suo contenuto: segmenti e scelte non si stirano sulla riga. */
.md-sec > .sub-seg, .md-sec > .md-seg, .md-sec > .goal-seg{align-self:flex-start;}
.md-sec{gap:12px;}
/* Tessere del tipo di movimento con illustrazione (stile degli obiettivi e degli sfondi). */
.mv-type-picker{gap:12px; margin:10px 0 2px;}
.mv-type-choice{--c:var(--muted); gap:8px; padding:14px 10px 12px; border-radius:var(--radius-lg); font-size:14px;}
.mv-type-choice.expense{--c:var(--color-danger);} .mv-type-choice.income{--c:var(--color-success);} .mv-type-choice.transfer{--c:var(--color-info);}
.mvt-illu{width:100%; max-width:132px; height:auto; display:block;}
.mvt-illu .d{fill:var(--c); fill-opacity:.22;}
.mvt-illu .p{fill:none; stroke:var(--c); stroke-opacity:.5; stroke-width:4; stroke-linecap:round;}
.mvt-illu .t{fill:var(--c); fill-opacity:.7;}
.mvt-illu .i{fill:none; stroke:var(--ink); stroke-opacity:.85; stroke-width:2; stroke-linecap:round; stroke-linejoin:round;}
.mv-type-choice.active .mvt-illu .d{fill-opacity:.38;}
.mv-type-choice.active .mvt-illu .p{stroke-opacity:.8;}
.mv-type-choice.active, .mv-type-choice.expense.active, .mv-type-choice.income.active, .mv-type-choice.transfer.active{background:color-mix(in srgb, var(--c) 12%, var(--bg-card-alt)); border-color:var(--c); color:var(--ink);}
.autoplan-to select{width:auto; max-width:min(360px, 100%);}
/* 0.96.8 (Mattia): testo introduttivo = body (vinceva `.confirm-box .note`), spazio sotto sempre, tooltip della ✕ sotto e a destra, tessere tipo con icona in un disco */
/* 0.104 (Mattia): la frase che spiega la finestra è testo (ink), le note restano muted. */
/* Spaziature del design system (0.106.4): titolo → testo 6px, testo → prima sezione 6px + il padding della sezione (16). */
.confirm-box .md-desc, .md-box p.md-desc{font-size:14px; line-height:1.5; color:var(--ink); margin:0 0 6px;}
.md-box{padding-bottom:22px;}
.md-foot{bottom:-22px; padding-bottom:0; box-shadow:0 22px 0 var(--bg-card);}
.confirm-box .card-header-row .has-tooltip::after, .confirm-box .card-header-row .has-tooltip::before{display:none;}
.confirm-box .card-header-row .has-tooltip:hover::after, .confirm-box .card-header-row .has-tooltip:hover::before{display:block;}
.confirm-box .card-header-row .has-tooltip::after{top:calc(100% + 8px); bottom:auto; left:auto; right:0; transform:none;}
.confirm-box .card-header-row .has-tooltip::before{top:calc(100% - 2px); bottom:auto; border-top-color:transparent; border-bottom-color:var(--bg-input);}
.mvt-disc{width:40px; height:40px; border-radius:50%; display:grid; place-items:center; color:var(--c); background:color-mix(in srgb, var(--c) 16%, transparent); transition:background-color .15s ease;}
.mv-type-choice.active .mvt-disc{background:var(--c); color:#17191B;}
/* 0.96.9 (Mattia): mentre la finestra scorre, titolo e ✕ restano fissi in alto e i bottoni in fondo, con il loro spazio. */
.md-box{padding-top:0; padding-bottom:0;}
.md-box .md-head{position:sticky; top:0; z-index:6; background:var(--bg-card); padding:22px 0 6px; margin:0;}
.md-box .md-foot{position:sticky; bottom:0; z-index:6; padding:14px 0 22px; margin-top:2px; box-shadow:none; background:var(--bg-card);}
.md-box .goal-actions{margin-top:18px;}
/* Senza piè (o con il piè ancora nascosto) la finestra tiene comunque lo spazio sotto. */
.md-box:not(:has(.md-foot)), #add-movement-overlay .md-box:has(#mv-fields-after-type[style*="none"]){padding-bottom:22px;}
.md-box .goal-actions{margin-bottom:0;}
.goal-sec > .goal-field > .goal-select{max-width:360px;}
/* 0.96.11: scorrimento visibile nelle finestre */
.md-box .md-head{transition:box-shadow .15s ease;}
.md-box.md-scrolled .md-head{box-shadow:0 1px 0 var(--line), 0 8px 12px -10px rgba(0,0,0,.6);}
.md-box .md-foot::before{content:''; position:absolute; left:0; right:0; top:-36px; height:36px; background:linear-gradient(to bottom, transparent, var(--bg-card)); pointer-events:none; opacity:0; transition:opacity .15s ease;}
.md-box.md-more-below .md-foot::before{opacity:1;}
.md-more-btn{position:absolute; left:50%; top:-34px; transform:translateX(-50%); display:none; align-items:center; gap:4px; padding:5px 12px; border-radius:999px; border:1px solid var(--color-border-strong); background:var(--bg-card-alt); color:var(--ink); font:600 12.5px 'Nunito Sans',sans-serif; cursor:pointer; box-shadow:0 4px 12px rgba(0,0,0,.35); z-index:2;}
.md-box.md-more-below .md-more-btn{display:inline-flex;}
.md-foot .btn:disabled{opacity:.4; cursor:not-allowed;}
.catdest-fuera-note{margin:14px 0 0;}
/* Import a passi (0.97): il passo 2 è attivo quando l'anteprima è visibile */
.csv-box .csv-steps{margin:2px 0 0; font-size:12.5px;}
.csv-box .csv-steps .s2, .csv-box .csv-s2{display:none;}
.csv-box:has(#csv-preview-wrap[style*="block"]) .csv-s1, .csv-box:has(#csv-preview-wrap[style*="block"]) .csv-steps .s1{display:none !important;}
.csv-box:has(#csv-preview-wrap[style*="block"]) .csv-steps .s2, .csv-box:has(#csv-preview-wrap[style*="block"]) .md-foot .csv-s2{display:inline-flex;}
.csv-box:has(#csv-preview-wrap[style*="block"]) #csv-preview-wrap{display:flex !important;}
.csv-box .md-foot{justify-content:space-between;}
.csv-box .csv-hint{font-size:12.5px; line-height:1.45; color:var(--muted); margin:4px 0 0;}
/* 0.197: revisione dell'import a due colonne (Modal, ventana a dos columnas): tabella a sinistra, guida dei destini a destra. */
.csv-box:has(#csv-preview-wrap[style*="block"]){max-width:960px;}
.csv-layout{width:100%;}
/* Con 7 destini + Otro movimiento la tabella deve stare nei ~580px rimasti: celle e pulsanti un po' più stretti. */
.csv-layout.has-side{gap:20px;}
.csv-box #csv-preview-wrap th, .csv-box #csv-preview-wrap td{padding-left:5px; padding-right:5px;}
.csv-box #csv-preview-wrap .dest-pick-btn{width:28px; height:28px;}
.csv-guide summary{cursor:pointer; list-style:none;}
.csv-guide summary::-webkit-details-marker{display:none;}
.csv-guide summary::after{content:'›'; float:right; transform:rotate(90deg); color:var(--muted);}
.csv-guide:not([open]) summary::after{transform:none;}
.csv-guide-body{display:flex; flex-direction:column; gap:12px; margin-top:12px;}
.csv-guide .note{margin:0; font-size:12.5px;}
.csv-guide-list{display:flex; flex-direction:column; gap:10px;}
.csv-guide-row{display:flex; align-items:flex-start; gap:10px;}
.csv-guide-row .catdest-dot{width:22px; height:22px; flex:0 0 auto; margin-top:1px;}
.csv-guide-row > span:last-child{display:flex; flex-direction:column; gap:1px; min-width:0;}
.csv-guide-row strong{font-size:13.5px;}
.csv-guide-row small{font-size:12px; color:var(--muted); line-height:1.35;}
.csv-guide-other{padding-top:12px; border-top:1px solid var(--line);}
.csv-guide-other-icon{background:transparent !important; border:1px solid var(--line); color:var(--muted) !important;}
@media (min-width:821px){ .csv-guide summary{pointer-events:none;} .csv-guide summary::after{display:none;} }
/* Mini-onboarding (0.97): design dedicato, ma intestazione (maialino, passo, puntini) e piè fissi come le finestre */
.md-box .duro-onb-sticky{display:block;}
.md-box .duro-onb-sticky .duro-onb-head{margin-bottom:10px;}
.md-box .duro-onb-sticky .duro-onb-dots{margin:0;}
.md-foot > .btn:only-child{margin-left:auto;}
/* Una ✕ dentro un'intestazione a griglia: tooltip sotto e a destra come nelle altre finestre */
.md-box .duro-onb-head .has-tooltip::after{top:calc(100% + 8px); bottom:auto; left:auto; right:0; transform:none;}
.md-box .duro-onb-head .has-tooltip::before{top:calc(100% - 2px); bottom:auto; border-top-color:transparent; border-bottom-color:var(--bg-input);}
.md-foot > .md-more-btn + .btn:last-child{margin-left:auto;}
.sub-block-grid > .wide{grid-column:1/-1;} .sub-block-grid > .wide select{max-width:420px;}
/* Illustrazioni degli obiettivi (0.98, design system: Illustrations / GoalCard) */
.goal-illu{display:block; width:100%; height:auto; border-radius:var(--radius-md); background:color-mix(in srgb, var(--d) 7%, var(--surface-tile));}
.goal-illu .gi-disc{fill:var(--d); fill-opacity:.32;}
.goal-illu .gi-soft{fill:var(--d); fill-opacity:.16;}
.goal-illu .gi-path{fill:none; stroke:var(--d); stroke-opacity:.45; stroke-width:6; stroke-linecap:round;}
.goal-illu .gi-dot{fill:var(--d); fill-opacity:.7;}
.goal-illu .gi-ico{fill:none; stroke:var(--ink); stroke-opacity:.85; stroke-width:1.6; stroke-linecap:round; stroke-linejoin:round;}
.goal-illu .gi-bar{fill:var(--d); fill-opacity:.4;}
.goal-illu .gi-barbg{fill:var(--ink); fill-opacity:.06;}
.goal-card{padding:0; overflow:hidden; background:var(--surface-tile); border-color:var(--color-border-strong); border-radius:var(--radius-lg); transition:border-color .15s ease, transform .16s cubic-bezier(.23,1,.32,1);}
/* Tessera (design system Card): bordo nel colore del destino al passaggio, scale(.985) alla pressione. */
.goal-card:active{transform:scale(.985);}
@media (hover: hover) and (pointer: fine){ .goal-card:hover{border-color:var(--d);} }
.goal-card .debt-card-main{padding:0;}
.goal-card .goal-illu{border-radius:0;}
.goal-card-body{padding:14px 16px 16px; display:flex; flex-direction:column; gap:8px;}
.goal-card-kicker{margin:0;} /* stessa misura del kicker delle idee (13px): stesso livello, stessa misura */
.goal-card-name{font-size:15px; font-weight:700; color:var(--ink);}
.goal-card-bar{height:8px; border-radius:999px; background:color-mix(in srgb, var(--ink) 14%, transparent); overflow:hidden;}
.goal-card-bar span{display:block; height:100%; background:var(--d); border-radius:999px;}
.goal-card-nums{display:flex; justify-content:space-between; font-size:13px; color:var(--muted); font-variant-numeric:tabular-nums;}
.goal-card-nums strong{color:var(--ink); font-family:'IBM Plex Mono',monospace; font-weight:500;}
.goal-card .goal-card-line{margin:0;}
.goal-card .tx-card-actions{padding:0 16px 14px;}
/* Griglia delle illustrazioni: chiusa mostra solo la prima riga (le altre righe hanno altezza 0), la scelta è sempre la prima. */
.goal-illu-pick{display:grid; grid-template-columns:repeat(auto-fill, minmax(88px,1fr)); gap:8px; padding:2px; margin:-4px 0 0;}
.goal-illu-pick:not(.open){grid-template-rows:auto; grid-auto-rows:0; row-gap:0; overflow:hidden;}
.goal-illu-more{display:block; margin:6px 0 4px; padding:4px 0; border:0; background:none; color:var(--accent-ink, var(--accent)); font:inherit; font-size:13px; font-weight:600; cursor:pointer;}
@media (hover:hover) and (pointer:fine){ .goal-illu-more:hover{text-decoration:underline;} }
.goal-illu-pick button{min-width:0; padding:0; border:2px solid transparent; border-radius:var(--radius-lg); background:none; cursor:pointer; transition:border-color .15s ease, transform .16s cubic-bezier(.23,1,.32,1);}
.goal-illu-pick button:active{transform:scale(.96);}
.goal-illu-pick button.on{border-color:var(--accent);}
.goal-illu-pick .goal-illu{border-radius:calc(var(--radius-lg) - 2px);} /* raggio interno = esterno − bordo, così la curva è concentrica */
.goal-card .goal-illu{height:136px;}
.goal-illu-label{display:block; font-size:13px; font-weight:600; color:var(--muted); margin:-2px 0 6px;}
/* Pagina Objetivos: tutte le schede libere in una griglia, l'ultima tessera aggiunge un obiettivo. */
.obj-grid{display:grid; grid-template-columns:repeat(auto-fill, minmax(260px,1fr)); grid-auto-rows:1fr; gap:16px; margin-bottom:16px;}
.obj-grid:empty{display:none;}
.goal-add-tile{display:flex; flex-direction:column; align-items:center; justify-content:center; gap:10px; min-height:220px; padding:20px; border:1.5px dashed var(--color-border-strong); border-radius:var(--radius-lg); background:none; color:var(--muted); font:inherit; font-size:14px; font-weight:600; cursor:pointer; transition:border-color .15s ease, color .15s ease, transform .16s cubic-bezier(.23,1,.32,1);}
.goal-add-tile:active{transform:scale(.985);}
.goal-add-plus{display:inline-flex; align-items:center; justify-content:center; width:44px; height:44px; border-radius:999px; background:var(--bg-card-alt);}
@media (hover: hover) and (pointer: fine){ .goal-add-tile:hover{border-color:var(--accent); color:var(--ink);} }
/* Azioni della scheda: al tocco sotto la scheda (tap), col mouse in alto a destra al passaggio. */
.goal-card{position:relative;}
.goal-card-actions{display:none;}
.goal-card-actions.open{display:flex;}
@media (hover: hover) and (pointer: fine){
  .goal-card-actions, .goal-card-actions.open{display:flex; position:absolute; top:10px; right:10px; padding:0 !important; gap:6px; opacity:0; transform:translateY(-2px); pointer-events:none; transition:opacity .15s ease, transform .15s cubic-bezier(.23,1,.32,1);}
  .goal-card:hover .goal-card-actions, .goal-card:focus-within .goal-card-actions{opacity:1; transform:none; pointer-events:auto;}
  .goal-card-actions .goal-edit:hover{color:var(--accent-ink, var(--accent)); border-color:var(--accent);}
  .goal-card-actions .icon-action-btn{width:34px; height:34px; flex:none; background:color-mix(in srgb, var(--bg-card) 88%, transparent); border:1px solid var(--line); backdrop-filter:blur(4px);}
}
@media (prefers-reduced-motion: reduce){ .goal-card-actions{transition:none; transform:none !important;} }

/* Trasferimenti in banca (0.103): solo quello che manca. Testi dalla gerarchia del design system: nome 15px 700 (come
   il nome di una tessera), cifra in mono (amount), riga dei conti e motivo come note; il motivo "non arriva" in warning. */
.bank-list{display:flex; flex-direction:column;}
.bank-row{display:flex; flex-direction:column; gap:4px; padding:14px 0; border-top:1px solid var(--line);}
.bank-row:first-child{border-top:0; padding-top:4px;}
.bank-row-head{display:flex; align-items:baseline; justify-content:space-between; gap:12px;}
.bank-row-name{font-size:15px; font-weight:700; color:var(--ink);}
.bank-row-amt{font-family:'IBM Plex Mono',monospace; font-weight:500; font-size:16px; color:var(--ink); font-variant-numeric:tabular-nums;}
.bank-row .note{margin:0;}
#bank-tr-body p.note:not(.md-desc){font-size:12.5px; line-height:1.45; color:var(--muted);}
#bank-tr-body p.bank-row-why.warn{color:var(--color-warning);}
.bank-row-why.warn{color:var(--color-warning);}
.bank-seg{align-self:flex-start; flex-wrap:wrap; margin-top:6px;}

/* 0.106.2 (Mattia): "A dónde va cada parte" a blocchi, uno per destino (design system: Bloque, surface-alt, senza bordo
   forte: nelle finestre non vanno card). Dentro il blocco la riga del destino e i suoi trasferimenti in più. */
.autoplan-rows.ap-cards{border-top:0; gap:12px;}
.ap-dest-card{background:var(--bg-card-alt); border-radius:var(--radius-lg); padding:0 14px;}
.ap-dest-card > .autoplan-row{border-bottom:0;}
.ap-dest-card > .autoplan-row + .autoplan-row{border-top:1px solid var(--line);}
/* 0.106.3: nei blocchi il nome del destino è il kicker del design system (icona + nome maiuscolo nel colore del
   destino), senza colonna d'icona a parte; le righe in più del destino hanno il nome in item-title (14px 700). */
.ap-dest-card .autoplan-row{grid-template-columns:minmax(0,1fr) auto;}
.ap-dest-card .autoplan-row-icon{display:none;}
.ap-dest-card .autoplan-to, .ap-dest-card .autoplan-row > .autoplan-tip, .ap-dest-card .autoplan-row > .autoplan-create, .ap-dest-card .autoplan-row-note{grid-column:1 / -1;}
.ap-dest-card .autoplan-extra{padding-left:0;}
.ap-dest-card .autoplan-extra .autoplan-row-name{font-size:14px; font-weight:700;}
.ap-kicker{margin:0 0 3px;}
/* 0.106.5: "¿Cuándo se reparte?" è una sezione come le altre (niente margini propri, titoletto → contenuto 12px). */
.md-sec.autoplan-trigger{margin:0; gap:12px;}

/* ===== Audit del design system (0.107, 17/10, Mattia: testi e spaziature si sistemano subito) =====
   Misurato pagina per pagina sulla demo; ogni regola qui porta un testo al suo livello del design system. */
/* Font: bottoni, campi e link ereditano Nunito Sans (molti bottoni erano in Arial, il default del browser). */
button, input, select, textarea{font-family:inherit;}
/* Testo base: body 14px (era 13,5 nelle tabelle e in 43 regole, ora corrette alla fonte). */
table{font-size:14px;}
/* Note: 12,5px muted, ovunque (erano 12px). */
.note, .confirm-box .note, .tx-card-row3, .detail-type, .eq-plan, .res-auto-meta, .dd-level-labels, .dd-rc span, .dd-rc-sub{font-size:12.5px;}
.note, .confirm-box .note{line-height:1.45;}
/* Etichette di righe e cifre (receipt): testo 14px muted, la cifra accanto in mono. */
.hd-line, .hd-foot, .detail-name, .goal-card-nums, .dd-advice p.muted{font-size:14px;}
/* Titoletti di sezione: un solo stile maiuscolo, 12px 700 .06em muted (c'erano 8 varianti 11–12px, 400–700). */
th, .filters-panel-title, .filters-section-label, .tx-summary-bar .tx-summary-label, .stat .label, .fund-card .label,
.donut-center-label, .dst-title, .sub-section-head strong{
  font-family:'Nunito Sans',sans-serif; font-size:12px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--muted);}
/* Pill di stato: 11,5px 700 (StatusPill). */
.pill, .dd-pill, .dd-chip{font-size:11.5px; font-weight:700;}
/* Titoli: verdetto 26px 600 (era 28px 800); titolo compatto di pagina = page-title 26px; nomi nelle liste = item-title 14px 700. */
.dd-verdict{font-size:26px; font-weight:600;}
.dd-title, .tx-card-label{font-size:14px; font-weight:700;}
/* Bottoni: testo 13px 600 (12px nei piccoli), anche i selettori di lingua. */
#language-select-list .btn{font-size:13px;}
/* Audit 0.107, secondo giro: casi isolati. */
th.num, th.num.sortable, .detail-memo-group-title, .list-stack > h3{
  font-family:'Nunito Sans',sans-serif; font-size:12px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--muted);}
.dd-hist-m{font-size:14px;}
.tx-card-account, .settings-legal-links, .settings-legal-links a, .ahora-text > span, .res-status, .tc-nav-text, .dd-planline, .dst-label, .overview-csp-box .label{font-size:12.5px; font-weight:400;}
.dd-save-field, .res-where{font-size:13px; font-weight:600; color:var(--muted);}
.eq-status{font-size:14px;}
.goal-add-tile, .auto-debt-title, .dst-total{font-size:14px; font-weight:700;}
.filters-active-badge{font-size:11.5px; font-weight:700; text-transform:none; letter-spacing:0;}
/* Audit 0.107: riquadro Disfrutar di Tu plan con lo spazio interno delle card (18×20, era 22×24); token del design
   system che mancavano nell'app (stessi valori del tema scuro: nessun cambio visibile, servono per il tema chiaro). */
.card.eq-dis{padding:18px 20px;}
/* Audit 0.107: la frase che spiega una card, subito sotto il titolo, è body 14px ink (regola del design system
   "testo e nota non sono la stessa cosa"); le note dentro la card restano 12,5px muted. */
.card > .card-header-row + p.note, .card > h2 + p.note, .card > .card-header-row + .note.obj-sub,
.card > .card-header-row + p.muted, .card > h2 + p.muted{font-size:14px; line-height:1.5; color:var(--ink);}
/* Audit 0.108: scala delle cifre (decisa con Mattia): 28px la cifra principale di una pagina o di un riquadro, 16px nei
   riquadri, nelle righe e nei campi, 14px nelle tabelle e nelle righe dense; sempre IBM Plex Mono 500. Le regole sono
   state riscritte alla fonte; i grafici (barre, ciambelle, Sankey, assi) restano con la loro scala. */
/* Impostazioni: voci del menu laterale = item-title 14px 700. */
.settings-sidebar button{font-size:14px; font-weight:700;}
/* Audit 0.108: cifre che prendevano peso/dimensione da regole senza il font → scala 14 / 16 / 28, peso 500. */
.detail-bal, .hd-line strong, .dd-nums, .res-auto-amount, .eq-pct, .res-group-head strong, td.num, .inv-month-head strong,
.inv-row-nums, .dd-advice strong, .dst-total strong, .dd-hist-v, .dd-plan-line strong, .tx-summary-value, .res-total, .inv-gain{font-weight:500;}
.tx-summary-value, .dd-hist-v, td.num, .inv-gain, .res-total{font-size:14px;}
.dd-plan-line strong{font-size:16px;}
.stat .value, .stat.total .value{font-size:28px; font-weight:500;}
.dd-nums strong, .inv-row-nums strong, tr.total-row td.num, .dd-hist-v.fire, .dd-hist-v.warn{font-weight:500;}
.res-head .res-total{font-size:16px; font-weight:500;}
#panel-autonomo td.num{font-size:14px;}
.res-total span{font-size:14px;}
.eq-intro-text > h2 + p.note{font-size:14px; line-height:1.5; color:var(--ink);}
/* ===== Audit del design system: onboarding (0.109, 17/10) ===== */
.onb3-desc, .onb3-result, .onb3-hint, .onb3-payday-row{font-size:14px;}
.onb3-label, label.onb3-label{font-size:13px; font-weight:600;}
.onb3-choice, .onb3-choice.on, .onb3-row-name, .onb3-fix-text strong{font-size:14px; font-weight:700;}
.onb3-step-name{font-size:14px; font-weight:700;}
.onb3-lang button{font-size:13px; font-weight:600;}
.onb3-fix-text span, .onb3-fix-text + .onb3-fix-text{font-size:12.5px; font-weight:400;}
.onb3-result strong, .onb3-result b{font-family:'IBM Plex Mono',monospace; font-size:16px; font-weight:500;}
.onb3-result-label{font-weight:600;}
.onb3-desc{color:var(--ink);}
.onb3-result.neg p{font-size:14px;}
.onb3-result-amount em{font-size:14px;}
/* Onboarding (Mattia, 17/10): il titolo di ogni passo è page-title 26px come nel resto del prodotto; tra titolo e
   descrizione restano 12px (schermo intero, più aria che nelle finestre). */
.onb3-title{font-size:26px; line-height:32px;}
/* Cifra dentro una frase: stessa misura del testo (14px), sempre mono 500. */
.onb3-result p strong, .onb3-result p b{font-size:14px;}
/* Finestre degli investimenti (0.110): valore in sola lettura dentro la griglia dei campi. */
.inv-modal-static{margin:0; padding:9px 0; font-size:14px; color:var(--ink);}
/* Tessere degli investimenti (0.111): fascia del grafico come l'illustrazione degli obiettivi (136px, colore di Crecer al 7%). */
.inv-spark{height:136px; background:color-mix(in srgb, var(--d) 7%, var(--surface-tile)); display:flex; align-items:center; justify-content:center;}
.inv-spark svg{display:block; width:100%; height:100%;}
.inv-spark.empty span{font-style:normal; font-size:12.5px; color:var(--muted); padding:0 20px; text-align:center;}
.inv-card-nums{display:flex; align-items:baseline; justify-content:space-between; gap:8px; flex-wrap:wrap;}
.inv-card-nums strong{font-family:'IBM Plex Mono',monospace; font-size:16px; font-weight:500; color:var(--ink);}
.inv-card-nums .inv-gain{font-size:14px;}
.inv-card .inv-updated.due{color:var(--color-warning);}
.inv-spark-wrap{position:relative;}
.inv-rate{position:absolute; right:calc(4.375% + 12px); bottom:12px; padding:2px 8px; border-radius:999px; background:var(--surface); color:var(--ink); font-family:'IBM Plex Mono',monospace; font-size:12px; font-weight:500; line-height:1.5;}
/* ===== Tooltip HTML (0.112, design system "Tooltip") =====
   Sostituisce i tooltip CSS (::after): superficie scura con bordo e ombra piccola, 12,5px 600 ink, raggio 6px. */
.has-tooltip::after, .has-tooltip::before, .has-tooltip:hover::after, .has-tooltip:hover::before{content:none !important; display:none !important;}
#cd-tip{position:fixed; z-index:2000; max-width:240px; width:max-content; padding:6px 10px; border-radius:var(--radius-sm, 6px);
  background:#2b2e33; color:var(--ink); border:1px solid var(--color-border-strong); box-shadow:0 4px 12px rgba(0,0,0,.35);
  font-family:'Nunito Sans',sans-serif; font-size:12.5px; font-weight:600; line-height:1.35; text-align:center; pointer-events:none;
  opacity:0; transform:translateY(-3px) scale(.97); transition:opacity 120ms cubic-bezier(.23,1,.32,1), transform 120ms cubic-bezier(.23,1,.32,1);}
#cd-tip.above{transform:translateY(3px) scale(.97);}
#cd-tip.show{opacity:1; transform:none;}
#cd-tip.instant{transition:none;}
@media (prefers-reduced-motion: reduce){ #cd-tip{transform:none !important; transition:opacity 120ms ease;} }
/* Tessere dei debiti (0.113): come quelle degli investimenti, barra del pagato nel colore di Deudas. */
.debt-tile .goal-card-bar span{background:var(--d);}
/* Tus cuentas (0.114): un blocco per conto, due colonne (una sotto 640px), ultima tessera tratteggiata. */
#acc-onb-overlay .md-box{max-width:760px;}
.acc-onb-idea{margin:4px 0 6px;}
.acc-onb-grid{display:grid; grid-template-columns:minmax(0,1fr); gap:12px; align-items:start;} /* 0.114.4: a tutta riga (è una lista) */
@media (max-width:640px){ .acc-onb-grid{grid-template-columns:minmax(0,1fr);} }
.acc-onb-block{display:flex; flex-direction:column; gap:8px; padding:12px 14px; border-radius:var(--radius-lg); background:var(--bg-card-alt);}
.acc-onb-head{display:flex; align-items:center; gap:10px;}
.acc-onb-head .acc-onb-title{flex:1; min-width:0; font-size:14px; font-weight:700;}
.acc-onb-block .note{margin:0;}
.acc-onb-balance{display:flex; flex-direction:column; gap:6px;}
.acc-onb-balance label, .acc-onb-form .field label{font-size:13px; font-weight:600; color:var(--muted);}
.acc-onb-pockets{display:flex; flex-direction:column; gap:6px; padding-top:8px; border-top:1px solid var(--line);}
.acc-onb-pockets-title{font-size:12px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--muted);}
.acc-onb-pocket{display:grid; grid-template-columns:minmax(0,1fr) 120px auto; gap:8px; align-items:center;}
.acc-onb-pocket .acc-onb-x, .acc-onb-head .acc-onb-x{font-size:14px;}
.acc-onb-block .acc-onb-addpocket{display:inline; margin:0; align-self:flex-start;}
.acc-onb-add{min-height:150px;}
.acc-onb-form{display:flex; flex-direction:column; gap:10px;}
.acc-onb-form .field{display:flex; flex-direction:column; gap:6px;}
.acc-onb-form-actions{display:flex; justify-content:flex-end; gap:8px;}
.acc-onb-balance .acc-onb-bal{text-align:left; font-size:16px; font-weight:500;}
/* Tus cuentas a tutta riga (0.114.4): tipo e saldo affiancati, uno sotto l'altro su mobile; banca nel tooltip del logo. */
.acc-onb-fields{display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:12px; align-items:start;}
.acc-onb-fields .field{display:flex; flex-direction:column; gap:6px;}
.acc-onb-fields label{font-size:13px; font-weight:600; color:var(--muted);}
.acc-onb-fields select{max-width:320px;}
@media (max-width:560px){ .acc-onb-fields{grid-template-columns:minmax(0,1fr);} }
.acc-onb-add{min-height:64px; flex-direction:row;}
.acc-onb-add .goal-add-plus{width:32px; height:32px;}
#acc-onb-overlay .md-box{max-width:640px;}
/* Tus cuentas (0.115): lista di tessere da leggere; la finestra del conto (aggiungi/modifica) sta sopra. */
#add-account-overlay, #add-pocket-overlay, #add-credit-card-overlay, #csv-import-overlay{z-index:1100;}
#add-pocket-overlay{z-index:1200;}
.acc-tiles{display:flex; flex-direction:column; gap:10px;}
.acc-tile{display:flex; flex-direction:column; gap:4px; width:100%; text-align:left; padding:12px 14px; border-radius:var(--radius-lg); border:1px solid var(--color-border-strong); background:var(--surface-tile); color:var(--ink); font:inherit; cursor:pointer; transition:border-color .15s ease, transform .16s cubic-bezier(.23,1,.32,1);}
.acc-tile:active{transform:scale(.985);}
@media (hover: hover) and (pointer: fine){ .acc-tile:not(.static):hover{border-color:var(--accent);} }
.acc-tile-head{display:flex; align-items:center; gap:10px;}
.acc-tile-name{flex:1; min-width:0; font-size:14px; font-weight:700;}
.acc-tile-bal{font-family:'IBM Plex Mono',monospace; font-size:16px; font-weight:500;}
.acc-tile .note{margin:0;}
.acc-tile-pockets{display:flex; flex-wrap:wrap; gap:6px 14px; font-size:12.5px; color:var(--muted); padding-top:6px; border-top:1px solid var(--line);}
.acc-tile-pockets em{font-style:normal; font-family:'IBM Plex Mono',monospace; color:var(--ink);}
.acc-modal-pockets{display:flex; flex-direction:column; gap:6px; margin-bottom:8px;}
.acc-modal-pocket{display:flex; justify-content:space-between; gap:12px; font-size:14px;}
.acc-modal-pocket strong{font-family:'IBM Plex Mono',monospace; font-weight:500;}
#new-acc-addpocket, .acc-modal-delete{display:inline-block; text-align:left; align-self:flex-start;}
#new-acc-pockets-sec, #new-acc-prefs-sec{display:flex; flex-direction:column; align-items:flex-start;}
#new-acc-pockets, #new-acc-prefs{align-self:stretch;}
.acc-modal-delete{margin-top:14px; color:var(--color-danger);}
/* Duro Autónomo → Tu actividad (0.116): tessere dei conti con il ruolo a segmenti. */
.confirm-box p.eq-cat-note{margin:4px 0 0; font-size:12.5px; line-height:1.45; color:var(--muted);}
.confirm-box p.eq-cat-note.acc-role-intro{margin:0 0 12px;}
.duro-onb-box select.duro-region{max-width:360px;}
.acc-role-tile{cursor:default; gap:6px;}
.acc-role-tile .acc-tile-head .icon-action-btn{margin-left:auto;}
.acc-role-tile .acc-role-seg{align-self:flex-start; margin-top:6px;}
.acc-role-seg .sub-seg-btn{font-size:12.5px; padding:5px 12px;}
.acc-role-pockets{display:flex; flex-direction:column; gap:8px; padding-top:10px; margin-top:4px; border-top:1px solid var(--line);}
.acc-role-pocket{display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; font-size:14px;}
.acc-role-pocket .acc-role-seg{margin:0;}
.acc-role-tile .acc-role-addpocket{align-self:flex-start; margin:4px 0 0;}
.duro-onb-box .acc-pref{display:flex;}
/* Steps (0.118, design system): "Paso 2 de 4 · nome" + barra a segmenti, sotto il titolo nell'intestazione fissa. */
.cd-steps{display:flex; flex-direction:column; gap:8px; margin-top:6px; min-width:min(260px, 100%);}
.cd-steps-text{font-size:12.5px; line-height:1.4; color:var(--muted);}
.cd-steps-text strong{font-weight:600; color:var(--ink);}
.cd-steps-bar{display:flex; gap:6px; max-width:320px;}
.cd-steps-bar span{flex:1; height:3px; border-radius:2px; background:var(--line);}
.cd-steps-bar span.done{background:color-mix(in srgb, var(--accent) 45%, transparent);}
.cd-steps-bar span.on{background:var(--accent);}
.md-head > div:first-child{flex:1; min-width:0;}
.duro-onb-head .cd-steps{margin-top:6px;}
.md-box .duro-onb-sticky .cd-steps{margin:12px 0 0;}
.csv-box .csv-steps{margin:0;}
.csv-box .csv-steps .cd-steps.s2{display:none;}
.csv-box:has(#csv-preview-wrap[style*="block"]) .csv-steps .cd-steps.s1{display:none !important;}
.csv-box:has(#csv-preview-wrap[style*="block"]) .csv-steps .cd-steps.s2{display:flex;}
/* Passo "Cuentas del archivo" (30/10): come il passo 2, ma con i suoi bottoni; la barra dei passi la scrive syncCsvSteps. */
.csv-box .csv-sv{display:none;}
.csv-box:has(#csv-vault-wrap[style*="block"]) .csv-s1{display:none !important;}
.csv-box:has(#csv-vault-wrap[style*="block"]) .md-foot .csv-sv{display:inline-flex;}
.csv-box .csv-steps:has(.sx) .cd-steps:not(.sx){display:none !important;}
.csv-box .csv-steps .cd-steps.sx{display:flex !important;}
.md-head .cd-steps{margin-bottom:10px;}
.md-box .duro-onb-sticky .cd-steps{margin:12px 0 4px;}
/* Con Steps sotto il titolo la ✕ resta in alto, allineata al titolo. */
.md-head:has(.cd-steps){align-items:flex-start;}
.md-head:has(.cd-steps) > .icon-only-btn{margin-top:2px;}
/* Para impuestos este mes (0.119), pagina Ingresos con Duro Autónomo. */
.tax-aside .dd-receipt{margin:12px 0 10px; max-width:360px;}
.tax-aside-bar{margin-bottom:14px; max-width:360px;}
.tax-aside-bar span{background:var(--accent);}
/* Autónomo → Facturas (0.120). */
.fac-receipt{max-width:420px; margin:12px 0 8px;}
.fac-table td.num, .fac-table th.num{font-family:'IBM Plex Mono',monospace; font-weight:500; font-size:14px; white-space:nowrap;}
.fac-table th.num{font-family:inherit; font-weight:700;}
.fac-table .inv-net{color:var(--ink); font-weight:600;}
.fac-piggy{max-width:560px; margin:12px 0 8px;}
.fac-piggy .dd-rc{align-items:baseline;}
.fac-piggy .dd-rc > span:first-child{display:flex; flex-direction:column;}
.fac-piggy .dd-rc small{font-size:12.5px; color:var(--muted);}
.fac-piggy .pg-cols{display:grid; grid-template-columns:repeat(3, 110px); gap:12px; text-align:right;}
.fac-piggy .pg-head .pg-cols span{font-size:12px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--muted);}
.fac-piggy .pg-cols .mono, .fac-piggy .pg-cols strong{font-family:'IBM Plex Mono',monospace; font-weight:500; font-size:14px;}
@media (max-width:560px){ .fac-piggy .pg-cols{grid-template-columns:repeat(3, 1fr); gap:6px;} }
.card .cd-idea{margin-top:12px;}
.fac-start.warn{border-color:color-mix(in srgb, var(--color-warning) 55%, var(--color-border-strong));}
.fac-start p{margin:6px 0 12px;}
.fac-prior{max-width:360px; margin-top:16px; display:flex; flex-direction:column; gap:6px;}
.fac-prior .note{margin:0;}
.fac-receipt, .fac-piggy, .tax-aside .dd-receipt{display:flex; flex-direction:column; gap:8px;}
.fac-receipt .dd-rc, .fac-piggy .dd-rc, .tax-aside .dd-rc{display:flex; justify-content:space-between; align-items:baseline; gap:12px; font-size:14px;}
.fac-receipt .dd-rc > span, .tax-aside .dd-rc > span{color:var(--muted);}
.fac-receipt .dd-rc strong, .tax-aside .dd-rc strong{font-family:"IBM Plex Mono",monospace; font-weight:500;}
.fac-receipt .dd-rc.total, .tax-aside .dd-rc.total{border-top:1px solid var(--line); padding-top:8px;}
.fac-receipt .dd-rc, .fac-piggy .dd-rc, .tax-aside .dd-rc{flex-direction:row;}
.fac-receipt .dd-rc span, .tax-aside .dd-rc span{font-size:14px;}
.fac-receipt .dd-rc.total, .tax-aside .dd-rc.total{padding-left:0; border-left:0;}
.fac-receipt .dd-rc.total strong, .tax-aside .dd-rc.total strong{color:var(--ink); font-size:16px;}
.fac-piggy .dd-rc{display:grid; grid-template-columns:minmax(0,1fr) auto; align-items:start;}
.fac-piggy .dd-rc > span:first-child{display:flex; flex-direction:column; align-items:flex-start; gap:2px; color:var(--ink); font-size:14px; font-weight:700;}
.fac-piggy .dd-rc > span:first-child small{font-weight:400;}
.fac-piggy .pg-cols{display:grid;}
/* Carta: a cosa serve (0.121). */
#new-cc-use-sec{display:flex; flex-direction:column; align-items:stretch; gap:12px;}
#new-cc-use-sec .cc-payfrom{max-width:360px; display:flex; flex-direction:column; gap:6px;}
#new-cc-use-sec .acc-modal-delete{align-self:flex-start;}
#new-acc-interest-fields{margin-top:12px;}
/* Carte nell'onboarding (0.122). */


.onb3-card-bank{max-width:180px;}
.onb3-card-grid{display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:12px; margin:12px 0;}
@media (max-width:560px){ .onb3-card-grid{grid-template-columns:minmax(0,1fr);} }
.onb3-card-rev{margin:10px 0;}
.onb3-card-warn{color:var(--color-warning);}
.cc-rev{margin-top:12px; font-size:14px;}
.onb3-card-hints:empty{display:none;}
.onb3-card-hints{margin:0 0 14px;}
.onb3-ccard .onb3-choices{flex-wrap:wrap;}
/* Onboarding allineato al design system (0.123, controllo dei passi Cuentas e Tarjetas): note 12,5px muted, campi 16px
   (non sotto 16 per evitare lo zoom di iOS), cifre in mono 16, nome di una voce in item-title 14px 700. */
.onb3-hint{font-size:12.5px; line-height:1.45;}
.onb3-input{font-size:16px;}
.onb3-payday-row input{font-size:16px; font-family:'IBM Plex Mono',monospace; font-weight:500;}
.onb3-debt-label{font-size:14px; font-weight:700;}
.onb3-card-warn{font-size:12.5px;}
.onb3-payday-row input{background:var(--onb3-field-bg); border:1px solid var(--onb3-field-line); border-radius:var(--radius-md); padding:10px 12px; color:var(--ink);}
.onb3-payday-row input:focus{border-color:var(--accent); outline:none;}
/* Colonna dei passi (0.123.5): senza numeri; "Paso n de N" accanto al porcellino. */
.onb3-steps .onb3-step-num{display:none;}
.onb3-steps-head{display:flex; align-items:center; gap:10px; margin:0 0 18px 10px;}
.onb3-steps-head .onb3-piggy{margin:0 !important;}
.onb3-steps-count{font-size:12.5px; font-weight:600; color:var(--muted);}
/* Icone dei passi (0.123.6, scelta di Mattia: la "E"): niente disco, icona nel colore del piano o grigio chiaro; solo il
   passo attuale ha il disco pieno (colore del piano o chiaro). I passi futuri più spenti. */
.onb3-steps .onb3-step-icon{background:transparent !important; color:var(--c);}
.onb3-steps .onb3-step-icon.neutral{color:rgba(244,242,236,.7);}
.onb3-steps .onb3-step-icon svg{width:16px; height:16px;}
.onb3-steps .onb3-step.next .onb3-step-icon{opacity:.45;}
.onb3-steps .onb3-step.current .onb3-step-icon{background:var(--c) !important; color:#15181B; opacity:1;}
.onb3-steps .onb3-step.current .onb3-step-icon svg{width:13px; height:13px;}
.onb3-steps-hello{display:flex; flex-direction:column; gap:1px; min-width:0;}
.onb3-steps-hello strong{font-size:14px; font-weight:700; color:var(--ink); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.onb3-rep-before{margin-top:22px;}
.onb3-rep-before{padding-top:18px; border-top:1px solid var(--line); margin-top:22px;}
.onb3-rep-before + .onb3-rep{border-top:0; margin-top:0; padding-top:12px;}
/* Consiglio revolving nella colonna di destra (0.123.10); su mobile, dove la colonna è un riepilogo compatto, resta
   l'avviso dentro la carta. */
.onb3-sum-tip{margin-top:18px;}
.onb3-sum-tip .cd-idea .cd-idea-text{padding-right:40px;}
@media (min-width:900px){ .onb3-ccard .onb3-card-rev{display:none;} }
@media (max-width:899px){ .onb3-sum-tip{display:none;} }
.onb3-sum-tip .cd-idea{padding:14px;}
.onb3-sum-tip .cd-idea .cd-idea-text{padding-right:0 !important;}
.acc-hub{margin-top:8px; padding-top:10px; border-top:1px solid var(--line);}
.mv-next{grid-column:1/-1;}
.eq-cover{margin-top:12px; max-width:360px; display:flex; flex-direction:column; gap:6px;}
/* Azioni del verdetto/avviso di Inicio (0.125.9): "No tengo el extracto de la tarjeta" accanto a "Cargar extracto". */
.hv-actions{display:flex; flex-wrap:wrap; gap:8px; align-items:center; justify-content:flex-end;}
.plan-check .hv-actions{justify-content:flex-start;}
/* Conferme sopra ogni finestra (0.125.13, Mattia: "elimina tarjeta", "elimina un gasto del plan" finivano dietro la finestra aperta).
   Tutte le finestre stanno tra 1000 e 1200; il tooltip resta sopra (2000). */
#confirm-overlay{z-index:1900;}
/* Livelli del colchón (0.126.0): sopra "Nivel n: importo", sotto "n meses de Vivir" come nota (non cifra). */
.onb3-fund-label span{font-family:inherit; font-size:12.5px;}
.eq-split{display:flex; flex-wrap:wrap; align-items:center; gap:8px 12px; margin-top:8px;}
.eq-split .note{margin:0; flex:1 1 220px;}
/* Deuda contigo (0.128, Mattia): la cuota è l'informazione principale, il Disfrutar del mese dopo la conseguenza. */
.sdl-opt .sdl-opt-cuota{font-family:'IBM Plex Mono',monospace; font-weight:500; font-size:16px; color:var(--ink);}
.sdl-opt .sdl-opt-cuota small{font-family:inherit; font-size:12.5px; color:var(--muted); font-weight:500;}
.sdl-opt .sdl-opt-sub b{font-family:'IBM Plex Mono',monospace; font-weight:500; color:var(--color-success, #4FC3A1);}
/* Anteprima della separazione per categoria (0.128) */
.eq-split-preview{display:flex; flex-direction:column; gap:12px; margin-top:10px; padding:12px 14px; border-radius:var(--radius-lg,14px); background:var(--bg-card-alt);}
.eq-split-rows{display:flex; flex-direction:column; gap:8px;}
.eq-split-row{display:grid; grid-template-columns:minmax(0,1fr) auto minmax(140px,200px); gap:10px; align-items:center; font-size:14px;}
.eq-split-amt{font-family:'IBM Plex Mono',monospace; font-weight:500; font-size:14px;}
.eq-split-result ul{list-style:none; margin:8px 0 0; padding:0; display:flex; flex-direction:column; gap:6px;}
.eq-split-result li{display:grid; grid-template-columns:auto minmax(0,1fr) auto; gap:10px; align-items:baseline; font-size:14px;}
.eq-split-result li span:not(.eq-split-amt){color:var(--muted); font-size:12.5px;}
.eq-split-actions{display:flex; justify-content:flex-end; gap:8px;}
@media (max-width:560px){ .eq-split-row{grid-template-columns:minmax(0,1fr) auto;} .eq-split-row select{grid-column:1/-1;} }
.reserva-pref{margin-top:14px;}
/* Pocket nella finestra del conto: si toccano per modificarli (0.129) */
button.acc-modal-pocket{width:100%; border:0; border-radius:6px; padding:8px 10px; background:transparent; font:inherit; color:inherit; text-align:left; cursor:pointer;}
@media (hover:hover) and (pointer:fine){ button.acc-modal-pocket:hover{background:var(--color-surface-hover, rgba(255,255,255,.04));} }

/* AccountSelect (21/10): menu dei conti con logo della banca, nome e icone del ruolo. Il <select> resta nascosto e tiene
   il valore; il pulsante ha lo stesso aspetto dei campi (chevron compreso), al massimo 360px come ogni menu di conto. */
select.acct-native{display:none !important;}
.acct-sel-btn{display:flex; align-items:center; width:100%; max-width:360px; min-height:36px; padding:6px 34px 6px 9px; border:1px solid var(--line); border-radius:6px;
  background:var(--bg-input) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23A9A8A3' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E") no-repeat right 12px center / 14px 14px;
  color:var(--ink); font-family:'Nunito Sans', sans-serif; font-size:14px; text-align:left; cursor:pointer; min-width:0;}
.acct-sel-btn:focus-visible, .acct-sel-btn[aria-expanded="true"]{outline:none; border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-soft);}
.acct-sel-btn:disabled{opacity:.55; cursor:not-allowed;}
.acct-sel-btn .bank-badge, .acct-sel-btn .bank-badge-img, .acct-opt .bank-badge, .acct-opt .bank-badge-img{flex:0 0 auto; width:20px; height:20px; margin-right:8px;}
.acct-sel-name{flex:0 1 auto; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.acct-sel-name.ph{color:var(--muted);}
.acct-sel-btn .acc-role, .acct-opt .acc-role{flex:0 0 auto;}
.acct-list{position:fixed; z-index:1300; max-width:360px; overflow-y:auto; padding:6px; background:var(--bg-input); border:1px solid var(--line); border-radius:var(--radius-md);
  box-shadow:0 6px 16px rgba(0,0,0,0.45); font-family:'Nunito Sans', sans-serif; animation:acct-list-in .16s cubic-bezier(.23,1,.32,1);}
@keyframes acct-list-in{from{opacity:0; transform:translateY(-4px);} to{opacity:1; transform:none;}}
@media (prefers-reduced-motion: reduce){ .acct-list{animation:none;} }
.acct-list-group{padding:8px 10px 4px; font-size:12px; font-weight:600; color:var(--muted);}
.acct-opt{display:flex; align-items:center; width:100%; padding:8px 10px; border:0; border-radius:8px; background:none; color:var(--ink); font:inherit; font-size:14px; text-align:left; cursor:pointer;}
.acct-opt .acct-sel-name{display:flex; flex-direction:column; white-space:normal;}
.acct-opt .acct-sel-name small{font-size:12px; color:var(--muted);}
.acct-opt:focus-visible{outline:none; background:var(--bg-card-alt);}
@media (hover:hover) and (pointer:fine){ .acct-opt:hover{background:var(--bg-card-alt);} }
.acct-opt.on{background:var(--accent-soft);}
.acct-opt-check{flex:0 0 auto; display:inline-flex; width:15px; margin-left:auto; padding-left:12px; box-sizing:content-box; color:var(--accent); font-style:normal;}

/* Import su mobile (21/10): niente scorrimento laterale, ogni riga è una scheda: data · stato · importo, poi la
   descrizione, poi il destino a tutta larghezza (i bottoni vanno a capo se non ci stanno). */
@media (max-width:640px){
  .scroll-x:has(> table > #csv-preview-body){overflow:visible;}
  table:has(> #csv-preview-body) thead{display:none;}
  table:has(> #csv-preview-body), table:has(> #csv-preview-body) > tbody{display:block; width:100%;}
  #csv-preview-body > tr{display:grid; grid-template-columns:auto 1fr auto; gap:6px 10px; align-items:center; padding:12px 4px; border-bottom:1px solid var(--line);}
  #csv-preview-body > tr > td{display:block; padding:0; border:0; min-width:0;}
  #csv-preview-body > tr > td:nth-child(1){grid-row:1; grid-column:1; font-size:12.5px; color:var(--muted);}
  #csv-preview-body > tr > td:nth-child(5){grid-row:1; grid-column:2; justify-self:start;}
  #csv-preview-body > tr > td:nth-child(3){grid-row:1; grid-column:3; text-align:right;}
  #csv-preview-body > tr > td:nth-child(2){grid-row:2; grid-column:1 / -1;}
  #csv-preview-body > tr > td:nth-child(4){grid-row:3; grid-column:1 / -1;}
  #csv-preview-body > tr > td[colspan]{grid-column:1 / -1;}
  #csv-preview-body .dest-pick{flex-wrap:wrap;}
}
.acct-sel-line{display:flex; align-items:center; min-width:0;}
.acct-sel-text{min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.acct-sel-btn .acct-sel-name{display:flex;}
.csv-known-note{margin:4px 0 0;}
.csv-known-new{display:block; margin-top:6px; font-size:12.5px;}

/* MultiChoice (DS 21/10): scegliere più cose insieme. La casella vera resta, nascosta (.mc-native), e tiene tastiera e
   change; lo stato "scelto" lo legge :has(input:checked). Tre forme: tessere (conti), menù (filtro), chips (etichette). */
.mc-native{position:absolute !important; opacity:0; width:1px !important; height:1px; margin:0 !important; padding:0 !important; pointer-events:none;}
.mc-box{flex:none; width:20px; height:20px; box-sizing:border-box; border-radius:6px; border:1.5px solid var(--muted); display:grid; place-items:center; color:var(--on-accent); transition:background-color .15s ease, border-color .15s ease;}
.mc-box svg{opacity:0; transform:scale(.5); transition:opacity .16s ease, transform .16s var(--ease-out-strong);}
:has(> .mc-native:checked) > .mc-box{background:var(--accent); border-color:var(--accent);}
:has(> .mc-native:checked) > .mc-box svg{opacity:1; transform:none;}
.mc-wrap{display:flex; flex-direction:column; gap:14px; margin-top:12px;}
.mc-group{display:flex; flex-direction:column; gap:8px;}
.mc-group-h{display:flex; align-items:center; font-size:13px; font-weight:600; color:var(--muted);}
.mc-group-h > span:last-child{font-weight:400; margin-left:4px;}
.mc-group-h .bank-badge, .mc-group-h .bank-badge-img{width:20px; height:20px;}
.mc-grid{display:grid; grid-template-columns:repeat(auto-fill, minmax(240px, 1fr)); gap:8px;}
.mc-tile{position:relative; display:flex; align-items:center; gap:10px; min-height:56px; box-sizing:border-box; padding:10px 12px; border-radius:var(--radius-lg); border:1px solid var(--line); background:var(--bg-card-alt); color:var(--ink); text-transform:none; letter-spacing:0; font-size:14px; cursor:pointer; transition:transform .16s var(--ease-out-strong), border-color .15s ease, background-color .15s ease;}
.mc-tile:active{transform:scale(.97);}
.mc-tile:has(> .mc-native:focus-visible){outline:2px solid var(--accent); outline-offset:2px;}
.mc-tile:has(> .mc-native:checked){border-color:var(--accent); background:color-mix(in srgb, var(--accent) 10%, var(--bg-card-alt));}
@media (hover:hover) and (pointer:fine){ .mc-tile:not(:has(> .mc-native:checked)):hover{border-color:var(--muted);} }
.mc-tile > .bank-badge, .mc-tile > .bank-badge-img{flex:none; width:28px; height:28px; margin:0; font-size:11px;}
.mc-txt{flex:1; min-width:0; display:flex; flex-direction:column; gap:2px;}
.mc-line{display:flex; align-items:center; min-width:0;}
.mc-line strong{font-size:14px; font-weight:600; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.mc-line .acc-role{flex:none;}
.mc-txt small{font-size:12px; color:var(--muted); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.mc-mono{font-family:'IBM Plex Mono', monospace; font-weight:500; font-variant-numeric:tabular-nums;}
@media (max-width:520px){ .mc-grid{grid-template-columns:1fr;} }
.mc-sum{display:flex; justify-content:space-between; align-items:baseline; gap:12px; flex-wrap:wrap; padding:10px 14px; border-radius:var(--radius-md); background:var(--bg-card-alt); font-size:14px; color:var(--ink);}
.mc-sum .mc-mono{font-size:16px;}
.mc-wrap .mc-sum-note{margin:-8px 0 0;}
/* Menù: il filtro conti di Movimientos */
.mc-trigger-in{display:flex; align-items:center; gap:8px; min-width:0;}
.mc-stack{display:inline-flex;}
.mc-stack:empty{display:none;}
.mc-stack .bank-badge, .mc-stack .bank-badge-img{width:20px; height:20px; margin:0; box-shadow:0 0 0 2px var(--bg-input);}
.mc-stack > * + *{margin-left:-6px !important;}
#tx-account-filter-dropdown{max-height:320px; min-width:280px;}
#tx-account-filter-dropdown .multiselect-option{position:relative; gap:8px; padding:8px 10px;}
#tx-account-filter-dropdown .multiselect-option > .bank-badge, #tx-account-filter-dropdown .multiselect-option > .bank-badge-img{flex:none; width:20px; height:20px; margin:0;}
#tx-account-filter-dropdown .multiselect-footer{justify-content:flex-start; gap:16px;}
#tx-account-filter-dropdown .multiselect-footer button{color:var(--muted); text-decoration:underline; text-underline-offset:3px; font-size:13px;}
/* Chips: cosa può vedere la persona con cui condividi */
.share-row-options{gap:8px;}
.share-row-options label.mc-chip{position:relative; display:inline-flex; align-items:center; gap:6px; padding:7px 14px; border-radius:999px; border:1px solid var(--line); background:var(--bg-card-alt); color:var(--ink); font-size:13px; font-weight:600; cursor:pointer; transition:transform .16s var(--ease-out-strong), border-color .15s ease, background-color .15s ease, padding .16s ease;}
.mc-chip:active{transform:scale(.97);}
.mc-chip svg{width:0; opacity:0; color:var(--accent); transition:width .16s var(--ease-out-strong), opacity .16s ease;}
.mc-chip:has(> .mc-native:checked){border-color:var(--accent); background:var(--accent-soft); padding-left:11px;}
.mc-chip:has(> .mc-native:checked) svg{width:14px; opacity:1;}
.mc-chip:has(> .mc-native:focus-visible){outline:2px solid var(--accent); outline-offset:2px;}
@media (prefers-reduced-motion: reduce){ .mc-tile, .mc-chip, .mc-box svg, .mc-chip svg{transition:opacity .15s ease, background-color .15s ease, border-color .15s ease;} .mc-tile:active, .mc-chip:active{transform:none;} .mc-box svg{transform:none;} }
/* Movimientos → "A dónde ha ido" (0.169): una tesela del DS per destino dentro la card (surface-tile, radius-lg, 14×16,
   cifra mono 22). Non si tocca: niente bordo, hover né pressione, solo l'ombra (23/10, Mattia). */
/* Box unico con il riepilogo sopra (come Filtros: surface-alt, bordo line, radius-md, 14×16) e una linea tra le due parti. */
.tx-summary-box{background:var(--surface-alt); border:1px solid var(--line); border-radius:var(--radius-md); padding:14px 16px; margin-bottom:14px;}
.tx-summary-box .tx-summary-bar{background:none; border:none; border-radius:0; padding:0; margin:0;}
#tx-plan-breakdown:not(:empty){margin-top:14px; padding-top:14px; border-top:1px solid var(--line);}
.tx-dest-intro{margin:0 0 12px; font-size:14px; color:var(--ink);}
.tx-dest-grid{display:grid; grid-template-columns:repeat(auto-fit, minmax(180px, 1fr)); gap:10px;}
.tx-dest-item{background:var(--surface-tile); box-shadow:var(--shadow-sm); border-radius:var(--radius-lg); padding:14px 16px; display:flex; flex-direction:column; gap:6px;}
.tx-dest-item strong{font-family:'IBM Plex Mono',monospace; font-size:22px; font-weight:500; color:var(--ink);}
.tx-dest-item small{color:var(--muted); font-size:12.5px;}
.tx-dest-none-label{font-size:12px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--muted); line-height:1.2;}
/* Autónomo → Cálculo de impuestos: quanto mettere da parte al mese (Modelo 130, Renta) in due riquadri Idea (0.175). */
.autonomo-aside{margin-bottom:16px;}
.autonomo-aside-grid{display:grid; grid-template-columns:repeat(auto-fit, minmax(260px, 1fr)); gap:10px;}
/* Tessera del conto solo da leggere (Patrimonio → Proteger): niente bordo né pressione, solo l'ombra (DS "Borde = se toca"). */
.acc-tile.static{border:none; box-shadow:var(--shadow-sm); cursor:default;}
.acc-tile.static:active{transform:none;}
#cuscinetto-page .acc-tiles + .note{margin-top:12px;}
/* Patrimonio → Reserva (0.179): dove sta la reserva, in sola lettura come Proteger; il conto si sceglie in Ajustes. */
.res-where-read{margin-top:16px;}
.res-where-read .acc-tiles + .note{margin-top:12px;}
.reserva-account-field{margin-top:14px; max-width:320px;}
.res-hero .dd-advice p.warn{color:var(--warning); font-size:13px; font-weight:600;}
.res-hero .dd-verdict .res-num{color:var(--warning);}
/* Patrimonio → Reserva (0.181): teselle "Dónde está" e barra a tacche dei pagamenti annuali. */
.res-places{display:grid; grid-template-columns:repeat(auto-fill, minmax(200px, 1fr)); gap:10px;}
.res-place{display:flex; flex-direction:column; gap:6px; padding:14px 16px; background:var(--surface-tile); border-radius:var(--radius-lg); box-shadow:var(--shadow-sm); min-width:0;}
.res-place-name{display:flex; align-items:center; gap:8px; font-size:14px; font-weight:600; color:var(--ink); min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.res-place-have{font-family:'IBM Plex Mono',monospace; font-size:22px; font-weight:500; color:var(--ink);}
.res-place-bar{display:block; height:6px; border-radius:3px; background:var(--line); overflow:hidden;}
.res-place-bar span{display:block; height:100%; background:var(--success);}
.res-place-bar.short span{background:var(--warning);}
.res-place .note{margin:0;}
.res-place .note.res-place-short{color:var(--warning); font-weight:600;}
.res-ticks{display:inline-flex; gap:2px; align-items:center; cursor:default;}
.res-ticks span{width:6px; height:10px; border-radius:2px; background:var(--line);}
.res-ticks span.on{background:var(--accent);}
.res-auto-row{display:flex; align-items:center; gap:12px;}
.res-auto-row .res-auto-main{flex:1 1 auto;}
.res-auto-row .res-auto-main{min-width:0;}
@media (max-width:560px){ .res-auto-row{gap:8px;} }
/* Patrimonio → Reserva (0.182): schede ordinate per giorno, divise in Familia / Para ti. */
.res-sub-head{display:flex; justify-content:space-between; align-items:baseline; margin:10px 0 8px;}
.res-sub-head .sub-block-title{margin:0;}
.res-sub-head > span:last-child{font-family:'IBM Plex Mono',monospace; font-size:13px; color:var(--muted);}
.res-tiles{display:grid; grid-template-columns:repeat(auto-fill, minmax(250px, 1fr)); gap:10px; margin-bottom:6px;}
.res-tile{display:grid; grid-template-columns:auto minmax(0,1fr) auto; grid-template-rows:auto auto; column-gap:12px; row-gap:10px; align-items:start; padding:12px 14px; background:var(--surface-tile); border-radius:var(--radius-lg); box-shadow:var(--shadow-sm); min-width:0;}
.res-tile .res-auto-main{min-width:0;}
.res-tile .icon-action-btn{align-self:start;}
.res-when{display:flex; flex-direction:column; align-items:center; justify-content:center; min-width:44px; padding:6px 4px; border-radius:var(--radius-md); background:var(--surface-alt); line-height:1.1;}
.res-when b{font-family:'IBM Plex Mono',monospace; font-size:16px; font-weight:500; color:var(--ink);}
.res-when small{font-size:11px; color:var(--muted);}
.res-when.none b{color:var(--muted);}
.res-tile-foot{grid-column:1/-1; display:flex; align-items:center; justify-content:space-between; gap:8px;}
.res-tile .res-auto-amount{font-size:16px;}
.res-tile.skipped .res-label, .res-tile.skipped .res-auto-amount{color:var(--muted); text-decoration:line-through;}
.res-skipped .res-tiles{margin-top:10px;}
.res-tile-actions{display:flex; gap:6px; align-items:center;}
.res-tile-foot{justify-content:flex-end;}
.res-tile .icon-action-btn{width:34px; height:34px; flex:none;}
.planned-card .planned-add{margin-top:12px; align-self:flex-start;}
.planned-card .dd-tx-actions{display:inline-flex; gap:6px;}
.planned-card .dd-tx-actions .icon-action-btn{width:32px; height:32px;}
/* Autónomo → Reserva, Tu próximo mes (0.186): barra della testa, Qué cubre, Dónde está y cuándo sale, finestra. */
.res-hero-bar span{background:var(--success);}
.res-hero-bar.short span{background:var(--warning);}
.res-card-head{display:flex; align-items:center; justify-content:space-between; gap:12px;}
.res-card-head h2{margin:0;}
.res-seg{display:flex; height:14px; border-radius:7px; overflow:hidden; gap:2px; margin-top:14px; background:var(--line);}
.res-seg span{display:block; height:100%;}
.res-legend{display:flex; flex-wrap:wrap; gap:8px 18px; margin-top:12px; font-size:14px; color:var(--ink);}
.res-legend-item{display:inline-flex; align-items:center; gap:6px; white-space:nowrap;}
.res-legend .sw{display:inline-block; width:12px; height:8px; border-radius:3px;}
.res-legend strong{font-family:'IBM Plex Mono',monospace; font-weight:500;}
.res-covers .note{margin-top:10px;}
.res-cal-title{margin-top:20px;}
.res-cal{display:flex; align-items:flex-end; gap:2px; height:56px; padding:0 2px; border-bottom:1px solid var(--line);}
.res-cal span{flex:1; height:100%; display:flex; align-items:flex-end;}
.res-cal i{display:block; width:100%; border-radius:2px 2px 0 0; background:var(--accent);}
.res-days{display:flex; flex-direction:column; margin-top:8px;}
.res-day{display:grid; grid-template-columns:auto minmax(0,1fr) auto; gap:12px; align-items:center; padding:10px 0; border-bottom:1px solid var(--line);}
.res-day:last-child{border-bottom:none;}
.res-day-names{font-size:14px; color:var(--ink); min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.res-day-amount{font-family:'IBM Plex Mono',monospace; font-size:15px; font-weight:500; color:var(--ink); white-space:nowrap;}
.res-items-head{display:flex; justify-content:space-between; align-items:baseline; margin:0 0 8px;}
.res-items-head > span:last-child{font-family:'IBM Plex Mono',monospace; font-size:13px; color:var(--muted);}
.res-items{display:flex; flex-direction:column;}
.res-item{display:flex; align-items:center; gap:12px; padding:10px 0; border-top:1px solid var(--line); cursor:pointer; text-transform:none; letter-spacing:0;}
.res-item:first-child{border-top:none;}
.res-item-main{flex:1 1 auto; display:flex; flex-direction:column; gap:2px; min-width:0;}
.res-item-main .note{margin:0;}
.res-item .icon-action-btn{width:32px; height:32px; flex:none;}
.res-item input.switch{flex:none;}
.res-item.off .res-label, .res-item.off .res-auto-amount{color:var(--muted);}
.res-item-main .res-label{align-self:flex-start;}
/* Autónomo → Reserva, Impuestos e Gastos de tu actividad (0.188). */
.res-parts .dd-rc{align-items:baseline;}
.res-parts .dd-rc > span:first-child{display:flex; flex-direction:column; align-items:flex-start; text-align:left;}
.res-parts .dd-rc small{font-size:12.5px; color:var(--muted);}
.res-biz-card .res-where-read{margin-top:12px;}

/* ---------- Onboarding v4 (in costruzione, ?onb4): prima la realtà, poi il piano. DS: Modal → "Onboarding v4".
   Desktop: passi a sinistra (250px), contenuto al centro, "Tu situación hoy" / "Tu plan" a destra (340px, fissa).
   Mobile (≤640px): niente colonne; cabecera con la barra in due parti, barra di riepilogo che apre un foglio, pie fisso.
   Sta sotto le finestre di sempre (conto, apartado: z-index 1100), che si aprono sopra. */
.onb4-overlay{display:none; position:fixed; inset:0; z-index:1050; background:var(--bg); color:var(--ink); overscroll-behavior:contain;}
.onb4-overlay.show{display:block;}
.onb4-lang-top.onb3-lang{position:absolute; top:16px; right:24px; margin:0; padding:0; z-index:1;}
.onb4-steps .onb3-lang{padding:0;}
html:has(.onb4-overlay.show){overflow:hidden;}
.onb4-grid{display:grid; grid-template-columns:250px minmax(0,1fr) 340px; height:100%;}
.onb4-title{margin:0 0 12px; font-family:Spectral, Georgia, serif; font-weight:600; font-size:26px; line-height:32px;}
.onb4-desc{margin:0 0 22px; font-size:14px; line-height:21px; color:var(--ink);}
.onb4-desc.tight{margin-bottom:12px;}
.onb4-label{display:block; margin:0 0 8px; font-size:13px; line-height:18px; font-weight:600; color:var(--muted);}
.onb4-section{margin:0 0 6px; font-size:12px; line-height:16px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--muted);}
.onb4-preview{margin:0 0 16px; padding:8px 12px; border-radius:var(--radius-md); background:var(--surface-alt); font-size:12.5px; color:var(--muted);}
.onb4-overlay .note{font-size:12.5px; line-height:18px;}
.onb4-overlay button.btn{min-height:44px; padding:0 18px; font-size:15px;}
.onb4-overlay button.btn.onb4-primary{padding:0 22px; font-weight:700;}

/* Schermate iniziali, centrate e senza colonne */
.onb4-intro{display:flex; flex-direction:column; height:100%; max-width:600px; margin:0 auto; padding:0 24px; box-sizing:border-box;}
.onb4-intro-body{flex:1; overflow-y:auto; padding:56px 0 24px;}
.onb4-intro.center .onb4-intro-body{display:flex; flex-direction:column; align-items:center; justify-content:center; text-align:center;}
.onb4-intro-foot{display:flex; justify-content:space-between; gap:12px; padding:16px 0 28px; border-top:1px solid var(--line);}
.onb4-intro.center .onb4-intro-foot{justify-content:center; border-top:0;}
.onb4-duro{display:block; width:104px; height:104px; margin-bottom:24px;}
.onb4-piggy{display:block; width:36px; height:36px; margin-bottom:16px;}
.onb4-field{display:flex; flex-direction:column; gap:6px; width:100%; max-width:360px; text-align:left;}
.onb4-field .onb4-label{margin:0;}
.onb4-input{box-sizing:border-box; width:100%; height:48px; padding:0 14px; border-radius:var(--radius-md); border:1px solid var(--color-border-strong); background:var(--surface-input); color:var(--ink); font:inherit; font-size:17px; outline:none;}
.onb4-input:focus{border-color:var(--accent);}
.onb4-parts, .onb4-haves{display:flex; flex-direction:column; gap:10px; margin-bottom:24px;}
.onb4-haves{margin-bottom:12px;}
.onb4-part, .onb4-have{display:flex; gap:12px; align-items:flex-start; background:var(--surface-alt); border-radius:var(--radius-lg); padding:12px 14px;}
.onb4-have{align-items:center;}
.onb4-part strong, .onb4-have strong{display:block; font-size:14px; line-height:20px;}
.onb4-part .note, .onb4-have .note{display:block;}
.onb4-part-num{flex:0 0 24px; height:24px; border-radius:50%; box-sizing:border-box; border:1.5px solid var(--dest-neutral); color:var(--dest-neutral); font-size:13px; font-weight:700; display:flex; align-items:center; justify-content:center;}
.onb4-part-num.on{background:var(--dest-neutral); color:var(--bg);}
.onb4-have-icon{flex:0 0 36px; height:36px; border-radius:50%; background:var(--dest-neutral); color:var(--bg); display:flex; align-items:center; justify-content:center;}
.onb4-block{background:var(--surface-alt); border-radius:var(--radius-lg); padding:14px 16px; display:flex; flex-direction:column; gap:10px; margin-bottom:16px;}
.onb4-block strong{font-size:14px;}
.onb4-ol{margin:0; padding-left:20px; display:flex; flex-direction:column; gap:6px; font-size:14px; line-height:21px;}

/* Colonna dei passi */
.onb4-steps{border-right:1px solid var(--line); padding:28px 22px; display:flex; flex-direction:column; gap:22px; overflow-y:auto;}
.onb4-hello{display:flex; align-items:center; gap:10px;}
.onb4-hello img{width:30px; height:30px;}
.onb4-hello strong{display:block; font-size:14px;}
.onb4-group{display:flex; flex-direction:column; gap:6px;}
.onb4-group-name{margin:0 0 4px; font-size:13px; line-height:18px; font-weight:600; color:var(--muted);}
.onb4-step{display:flex; align-items:center; gap:10px; width:calc(100% + 12px); margin:-4px -6px; padding:4px 6px; border:0; border-radius:var(--radius-md); background:none; transition:background-color .15s ease; color:var(--ink); font:inherit; font-size:14px; font-weight:600; line-height:20px; text-align:left; cursor:default;}
.onb4-step.done{cursor:pointer;}
@media (hover: hover) and (pointer: fine){ .onb4-step.done:hover{background:var(--bg-card-alt);} }
.onb4-step.todo{opacity:.45;}
.onb4-step-icon{flex:0 0 30px; height:30px; border-radius:50%; display:flex; align-items:center; justify-content:center; color:var(--c);}
.onb4-step.now .onb4-step-icon{background:var(--c); color:var(--bg);}
.onb4-step-done{margin-left:auto; color:var(--success); flex:0 0 auto;}

/* Contenuto */
.onb4-main{display:flex; flex-direction:column; min-width:0; min-height:0;}
.onb4-body{flex:1; overflow-y:auto; padding:48px 56px 24px;}
/* "Hay más abajo" nell'onboarding v4 (27/10): stessa pillola delle finestre (md-more-btn), subito sotto il contenuto */
.onb4-more{position:relative; height:0;}
.onb4-more-fade{position:absolute; left:0; right:0; top:-36px; height:36px; background:linear-gradient(to bottom, transparent, var(--bg)); pointer-events:none; opacity:0; transition:opacity .15s ease;}
.onb4-more .md-more-btn{top:-46px;}
.onb4-main.onb4-more-below .onb4-more-fade{opacity:1;}
.onb4-main.onb4-more-below .onb4-more .md-more-btn{display:inline-flex;}
.onb4-content{max-width:560px;}
.onb4-foot{border-top:1px solid var(--line); padding:16px 56px; display:flex; flex-direction:column; gap:8px;}
.onb4-foot-btns{display:flex; justify-content:space-between; gap:10px;}
.onb4-foot-note{text-align:right;}
.onb4-add{display:flex; width:100%; align-items:center; gap:10px; min-height:52px; padding:0 16px; box-sizing:border-box; border-radius:var(--radius-lg); border:1px dashed var(--color-border-strong); background:transparent; color:var(--ink); font:inherit; font-size:14px; font-weight:700; cursor:pointer;}
@media (hover: hover) and (pointer: fine){ .onb4-add:hover{border-color:var(--accent);} }
.onb4-choices{display:flex; flex-direction:column; gap:8px; margin-bottom:14px;}
.onb4-choice{display:grid; grid-template-columns:28px minmax(0,1fr) auto; gap:10px; align-items:center; min-height:56px; padding:10px 12px; text-align:left; border-radius:var(--radius-lg); border:1px solid var(--color-border-strong); background:var(--surface-tile); color:var(--ink); font:inherit; cursor:pointer; transition:border-color .15s ease, transform .16s cubic-bezier(.23,1,.32,1);}
.onb4-choice:active{transform:scale(.985);}
.onb4-choice strong{display:block; font-size:14px; line-height:20px;}
.onb4-choice .note{display:block;}
.onb4-choice .mono{font-size:15px;}
.onb4-choice.on{border-color:var(--accent); background:var(--accent-soft);}
.onb4-choice .bank-badge, .onb4-choice .bank-badge-img{width:28px; height:28px;}
.onb4-none-icon{width:28px; height:28px; border-radius:50%; background:var(--surface-input); color:var(--muted); display:flex; align-items:center; justify-content:center;}

/* Colonna destra: Tu situación hoy */
.onb4-side{border-left:1px solid var(--line); background:var(--surface); padding:32px 24px; display:flex; flex-direction:column; gap:6px; overflow-y:auto;}
.onb4-side-title{margin:0; font-family:Spectral, Georgia, serif; font-weight:600; font-size:19px; line-height:26px;}
.onb4-side-desc{margin:0 0 8px;}
.onb4-rows{display:flex; flex-direction:column; gap:10px;}
.onb4-row{display:flex; justify-content:space-between; align-items:baseline; gap:12px; font-size:14px;}
.onb4-row.done{padding:4px 0;}
.onb4-row.done .mono{font-size:16px;}
.onb4-row.now{flex-direction:column; align-items:flex-start; gap:4px; background:var(--surface-alt); border-radius:var(--radius-lg); padding:12px 14px;}
.onb4-row-label{font-size:13px; font-weight:600; color:var(--muted);}
.onb4-row-big{font-size:28px; line-height:34px;}
.onb4-row.todo{border:1px dashed var(--color-border-strong); border-radius:var(--radius-lg); padding:12px 14px; font-size:13px; color:var(--muted);}
/* Onboarding v4, Tu plan (27/10): passo 8 Tus ingresos e colonna destra della seconda parte */
.onb4-work{display:grid; grid-template-columns:repeat(3, minmax(0,1fr)); gap:10px; margin-bottom:22px;}
.onb4-work-tile{grid-template-columns:minmax(0,1fr); align-items:start;}
.onb4-in-fields{display:grid; grid-template-columns:minmax(0,1fr) 140px; align-items:end; gap:12px; margin-bottom:22px; max-width:560px;}
.onb4-in-fields .field{margin:0;}
.onb4-in-fields #onb4-payday{min-height:58px; box-sizing:border-box; font-size:16px;}
.onb4-in-others{display:grid; grid-template-columns:minmax(0,1fr) auto; gap:4px 12px; align-items:baseline; max-width:560px; padding:12px 14px; border-radius:var(--radius-lg); background:var(--surface-alt);}
.onb4-in-others strong{font-size:14px;}
.onb4-in-others .mono{font-size:16px;}
.onb4-in-others .note{grid-column:1 / -1;}
.onb4-plan-rows{display:flex; flex-direction:column; margin:4px 0 8px;}
.onb4-plan-row{display:flex; justify-content:space-between; align-items:baseline; gap:12px; padding:8px 0; border-bottom:1px solid var(--line); font-size:14px;}
.onb4-plan-row.now{margin:0 -10px; padding:8px 10px; border-bottom:0; border-radius:var(--radius-md, 10px); background:var(--surface-alt);}
.onb4-plan-row.now + .onb4-plan-row.now{margin-top:4px;}
.onb4-plan-row.todo{color:var(--muted);}
.onb4-plan-row.total{border-bottom:0; padding-top:12px;}
.onb4-plan-row.total .mono{font-size:16px;}
.onb4-plan-dest{color:var(--c); font-size:12px; font-weight:700; letter-spacing:.06em; text-transform:uppercase;}
/* Passi 9 Vivir e 10 Deudas (27/10) */
.onb4-kicker{margin-bottom:10px;}
.onb4-vv-list{display:flex; flex-direction:column; gap:10px; max-width:560px;}
.onb4-vv-row{display:grid; grid-template-columns:40px minmax(0,1fr) 150px; gap:12px; align-items:center; padding:10px 12px; border-radius:var(--radius-lg); background:var(--surface-alt);}
.onb4-vv-row .bank-badge, .onb4-vv-row .bank-badge-img{width:28px; height:28px; justify-self:center;}
.onb4-vv-row .cd-money{margin:0;}
.onb4-vv-row .cd-money input{text-align:right;}
.onb4-vv-icon{width:40px; height:40px; border-radius:50%; display:flex; align-items:center; justify-content:center; color:var(--surface);}
.onb4-vv-total{display:flex; justify-content:space-between; align-items:baseline; gap:12px; max-width:560px; margin-top:14px; padding-top:12px; border-top:1px solid var(--line); font-size:14px;}
.onb4-vv-total .mono{font-size:16px;}
.onb4-vv-total .note{font-family:'Nunito Sans', sans-serif;}
.onb4-vv-q{margin-top:24px;}
.onb4-vv-unc{margin-top:14px; max-width:560px;}
/* Passo Proteger (27/10): il colchón con la scala 3/6/12 e quanto apartas */
.onb4-pt-card{display:flex; flex-direction:column; gap:12px; max-width:560px; margin-bottom:22px; padding:14px 16px; border-radius:var(--radius-lg); background:var(--surface-alt); box-sizing:border-box;}
.onb4-pt-head{display:grid; grid-template-columns:28px minmax(0,1fr) auto; gap:12px; align-items:center;}
.onb4-pt-head .bank-badge, .onb4-pt-head .bank-badge-img{width:28px; height:28px;}
.onb4-pt-head .mono{font-size:16px;}
.onb4-pt-bar{position:relative; height:8px; border-radius:999px; background:var(--line);}
.onb4-pt-bar > span{display:block; height:8px; border-radius:999px; background:var(--dest-proteger);}
.onb4-pt-bar > i{position:absolute; top:-3px; width:2px; height:14px; margin-left:-1px; background:var(--muted);}
.onb4-pt-levels{display:grid; grid-template-columns:1fr 1fr 2fr;}
.onb4-pt-levels > span{display:flex; flex-direction:column; text-align:right; padding-right:6px; font-size:12.5px; line-height:18px; color:var(--muted);}
.onb4-pt-levels > span:last-child{padding-right:0;}
.onb4-pt-levels b{color:var(--ink); font-weight:700;}
.onb4-pt-levels .reached b{color:var(--dest-proteger);}
.onb4-pt-in{display:grid; grid-template-columns:220px minmax(0,1fr); gap:16px; align-items:end; max-width:560px;}
.onb4-pt-in .field{margin:0;}
.onb4-pt-in .note{margin:0 0 4px;}
@media (max-width:640px){ .onb4-pt-in{grid-template-columns:minmax(0,1fr); gap:8px;} }
/* Passo Crecer (27/10) */
.onb4-cr-state{display:grid; grid-template-columns:36px minmax(0,1fr) auto; gap:12px; align-items:center; max-width:560px; margin-bottom:22px; padding:14px 16px; border-radius:var(--radius-lg); background:var(--surface-alt); box-sizing:border-box;}
.onb4-cr-state .mono{font-size:15px;}
.onb4-cr-icon{width:36px; height:36px; border-radius:50%; display:flex; align-items:center; justify-content:center; color:var(--dest-crecer); background:color-mix(in srgb, var(--dest-crecer) 14%, transparent);}
.onb4-cr-icon.ok{color:var(--success); background:color-mix(in srgb, var(--success) 14%, transparent);}
.onb4-cr-icon.prot{color:var(--dest-proteger); background:color-mix(in srgb, var(--dest-proteger) 14%, transparent);}
.onb4-cr-fund{display:grid; grid-template-columns:28px minmax(0,1fr) auto; gap:12px; align-items:center; padding:12px 14px; border-radius:var(--radius-lg); background:var(--surface-alt);}
.onb4-cr-fund .bank-badge, .onb4-cr-fund .bank-badge-img{width:28px; height:28px;}
.onb4-cr-fund .mono{font-size:15px;}
.onb4-cr-choice{grid-template-columns:repeat(2, minmax(0,1fr)); max-width:560px;}
.onb4-cr-rec{display:inline-block; margin-bottom:4px; padding:1px 8px; border-radius:999px; background:var(--accent-soft); color:var(--accent-ink); font-size:11.5px; font-weight:700;}
.onb4-cr-in{margin-top:22px;}
.onb4-plan-paused{display:inline-flex; align-items:center; gap:6px; color:var(--muted);}
.onb4-plan-sub{display:block; text-align:right; font-size:11.5px;}
@media (max-width:640px){ .onb4-cr-choice{grid-template-columns:minmax(0,1fr);} }
/* Passo Tu plan está listo (27/10): verdetto + riepilogo, Crecer che aspetta, piano accanto al mese scorso */
.onb4-ls-top{display:grid; grid-template-columns:minmax(0,1fr) 230px; gap:24px; align-items:start; max-width:600px; margin-bottom:18px;}
.onb4-ls-x{color:var(--dest-disfrutar); white-space:nowrap;}
.onb4-ls-neg{margin-top:8px;}
.onb4-ls-sum{padding:10px 14px; border-radius:var(--radius-lg); background:var(--surface-alt);}
.onb4-ls-row{display:flex; justify-content:space-between; align-items:baseline; gap:8px; padding:5px 0; font-size:14px; color:var(--muted);}
.onb4-ls-row .mono{font-size:14px; color:var(--ink);}
.onb4-ls-row.total{margin-top:4px; padding-top:8px; border-top:1px solid var(--line); color:var(--ink);}
.onb4-ls-row.total .mono{font-size:16px;}
.onb4-ls-dot{display:inline-block; width:8px; height:8px; margin-right:8px; border-radius:50%;}
.onb4-ls-wait{display:flex; gap:10px; align-items:flex-start; max-width:600px; margin:0 0 22px; font-size:12.5px; line-height:18px; color:var(--muted);}
.onb4-ls-wait svg{flex:none; margin-top:1px; color:var(--dest-crecer);}
.onb4-ls-wait strong{color:var(--ink);}
.onb4-ls-cmp{display:grid; grid-template-columns:minmax(0,1fr) 110px 110px; gap:12px; align-items:baseline; max-width:600px; padding:7px 0; font-size:14px; border-top:1px solid var(--line);}
.onb4-ls-cmp .mono{text-align:right;}
.onb4-ls-cmp.head{border-top:0; padding-bottom:4px; font-size:12px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--muted);}
.onb4-ls-cmp.head > span:not(:first-child){text-align:right;}
.onb4-ls-real{max-width:600px; margin:14px 0 0; font-size:14px; line-height:21px;}
.onb4-ls-list{display:flex; flex-direction:column; gap:4px; margin:4px 0 0;}
.onb4-ls-list > div{display:flex; align-items:center; gap:10px; padding:6px 0; font-size:14px;}
.onb4-ls-list svg{flex:none; color:var(--success);}
.onb4-ls-next{display:flex; flex-direction:column; gap:6px; margin-top:14px; padding:12px 14px; border-radius:var(--radius-lg); background:var(--surface-alt); font-size:14px; line-height:21px;}
@media (max-width:640px){ .onb4-ls-top{grid-template-columns:minmax(0,1fr); gap:14px;} .onb4-ls-cmp{grid-template-columns:minmax(0,1fr) 96px 96px; gap:8px;} }
.onb4-vv-from{font-size:inherit; font-weight:600;}
.onb4-vv-uncat{display:flex; flex-direction:column; gap:8px; max-width:560px; margin-top:10px;}
.onb4-vv-urow{display:grid; grid-template-columns:minmax(0,1fr) auto auto; gap:12px; align-items:center; padding:10px 12px; border-radius:var(--radius-lg); border:1px solid var(--color-border-strong); background:var(--surface-tile);}
/* Passo Cómo se reparte (27/10): una riga per destino, nel suo colore */
.onb4-mt-list{display:flex; flex-direction:column; gap:8px; max-width:560px;}
.onb4-mt-row{display:grid; grid-template-columns:36px minmax(0,1fr); gap:12px; align-items:center; padding:10px 12px; border-radius:var(--radius-lg); background:var(--surface-alt); max-width:560px; box-sizing:border-box;}
.onb4-mt-row .note{display:block; margin-top:2px;}
.onb4-mt-icon{width:36px; height:36px; border-radius:50%; display:flex; align-items:center; justify-content:center; color:var(--c); background:color-mix(in srgb, var(--c) 16%, transparent);}
.onb4-mt-fuera{margin-top:8px; background:none; border:1px dashed var(--color-border-strong);}
@media (max-width:640px){ .onb4-vv-row{grid-template-columns:40px minmax(0,1fr); } .onb4-vv-row .cd-money{grid-column:2;} .onb4-vv-urow{grid-template-columns:minmax(0,1fr) auto;} .onb4-vv-urow .dest-pick{grid-column:1 / -1;} }
@media (max-width:640px){ .onb4-work{grid-template-columns:minmax(0,1fr); gap:8px; margin-bottom:16px;} .onb4-in-fields{grid-template-columns:minmax(0,1fr) 96px; gap:10px; margin-bottom:16px;} }

/* Mobile: cabecera, barra di riepilogo, foglio */
.onb4-mhead, .onb4-sumbar{display:none;}
@media (max-width:640px){
  .onb4-grid{grid-template-columns:minmax(0,1fr);}
  .onb4-steps, .onb4-side{display:none;}
  .onb4-content .onb4-idea-m{display:block;}
  .onb4-mhead{display:flex; flex-direction:column; gap:10px; padding:14px 16px 12px; border-bottom:1px solid var(--line);}
  .onb4-mhead-row{display:flex; align-items:center; gap:10px; font-size:13px;}
  .onb4-mhead-row img{width:24px; height:24px;}
  .onb4-mhead-row .note{margin-left:auto;}
  .onb4-mbar{display:grid; gap:4px;}
  .onb4-mbar-part{display:flex; flex-direction:column; gap:4px; font-size:11.5px; font-weight:600; color:var(--text-tertiary);}
  .onb4-mbar-part.on{color:var(--muted);}
  .onb4-track{display:block; height:4px; border-radius:var(--radius-pill); background:var(--line); overflow:hidden;}
  .onb4-track > span{display:block; height:4px; border-radius:var(--radius-pill); background:var(--dest-neutral);}
  .onb4-body{padding:20px 16px 12px;}
  .onb4-sumbar{display:flex; align-items:center; gap:10px; margin:0 16px 10px; padding:10px 14px; border-radius:var(--radius-lg); background:var(--surface); border:1px solid var(--line); color:var(--ink); font:inherit; text-align:left; cursor:pointer;}
  .onb4-sumbar-text{display:flex; flex-direction:column;}
  .onb4-sumbar-text strong{font-size:13px; font-weight:600;}
  .onb4-sumbar .mono{margin-left:auto; font-size:16px;}
  .onb4-sumbar svg{color:var(--muted);}
  .onb4-foot{padding:12px 16px calc(28px + env(safe-area-inset-bottom));}
  .onb4-foot-btns .onb4-primary{flex:1;}
  .onb4-intro{padding:0 16px;}
  .onb4-lang-top.onb3-lang{top:10px; right:12px;}
  .onb4-lang-top.onb3-lang button{min-height:36px; min-width:40px;}
  .onb4-intro-body{padding-top:32px;}
  .onb4-intro-foot{flex-direction:column-reverse; padding-bottom:calc(28px + env(safe-area-inset-bottom));}
  .onb4-intro.center .onb4-intro-foot .btn{width:100%;}
  .onb4-sheet-veil{position:fixed; inset:0; background:rgba(0,0,0,.55); z-index:1;}
  .onb4-sheet{position:fixed; left:0; right:0; bottom:0; z-index:2; max-height:85vh; overflow-y:auto; background:var(--surface); border-radius:var(--radius-xl) var(--radius-xl) 0 0; box-shadow:0 8px 24px rgba(0,0,0,.22); padding:10px 16px calc(28px + env(safe-area-inset-bottom)); display:flex; flex-direction:column; gap:12px; animation:onb4-sheet-in .24s cubic-bezier(.23,1,.32,1);}
  .onb4-sheet-grip{align-self:center; width:36px; height:4px; border-radius:var(--radius-pill); background:var(--color-border-strong);}
  .onb4-sheet-head{display:flex; align-items:center; justify-content:space-between;}
  .onb4-sheet .onb4-side-desc{margin:-6px 0 0;}
}
@keyframes onb4-sheet-in{from{transform:translateY(24px); opacity:0;} to{transform:none; opacity:1;}}
@media (prefers-reduced-motion: reduce){ .onb4-sheet{animation:none;} }

/* Onboarding v4: eliminar un conto dalla lista; finestra del conto senza Preferencias (27/10) */
.onb4-acc{display:flex; align-items:center; gap:6px;}
.onb4-acc ~ .onb4-add{margin-right:76px; width:auto;}
.onb4-acc .acc-tile{flex:1; min-width:0;}
.onb4-acc-sub{margin-left:28px;}
.onb4-sub{flex:1; min-width:0; display:flex; align-items:center; justify-content:space-between; gap:12px; padding:8px 12px; border-radius:var(--radius-md); border:1px solid var(--color-border-strong); background:var(--surface-tile); color:var(--ink); font:inherit; font-size:13.5px; text-align:left; cursor:pointer; transition:border-color .15s ease, transform .16s cubic-bezier(.23,1,.32,1);}
div.onb4-sub{border-color:transparent; box-shadow:var(--shadow-sm); cursor:default;}
.onb4-sub:active{transform:scale(.985);}
@media (hover: hover) and (pointer: fine){ button.onb4-sub:hover{border-color:var(--accent);} }
.onb4-sub-name{display:flex; flex-direction:column; gap:1px; min-width:0; font-weight:600;}
.onb4-sub-name .note{font-weight:400; font-size:12.5px;}
.onb4-sub .mono{font-size:13.5px; font-weight:600; white-space:nowrap;}
.onb4-acc-act{flex:0 0 32px; width:32px; height:32px; display:flex; align-items:center; justify-content:center; color:var(--muted);}
@media (hover: hover) and (pointer: fine){ .onb4-acc-act:hover{color:var(--ink);} .onb4-acc-del:hover{color:var(--danger);} }
.acc-modal-lite #new-cc-use-sec .field:has(#new-cc-use), .acc-modal-lite #new-cc-payfrom-note, .acc-modal-lite #new-acc-prefs, .acc-modal-lite #new-acc-prefs-sec > h3, .acc-modal-lite #new-pocket-prefs, .acc-modal-lite #new-pocket-prefs-sec > h3, .acc-modal-lite .acc-modal-delete{display:none;}
#confirm-overlay{z-index:1200;}

/* Onboarding v4: riquadro di un elemento (un investimento, una carta), interruttori in riga (27/10) */
.onb4-box{position:relative; display:flex; flex-direction:column; gap:14px; padding:14px 16px; margin-bottom:10px; background:var(--surface-alt); border-radius:var(--radius-lg);}
.onb4-swr{display:flex; align-items:center; justify-content:space-between; gap:16px; cursor:pointer;}
.onb4-swr > span{display:flex; flex-direction:column; gap:2px; font-size:14px;}
.onb4-box .onb4-swr{padding-top:12px; border-top:1px solid var(--line);}
.onb4-swr-top{padding:12px 0; margin-bottom:6px; border-top:1px solid var(--line);}

/* Onboarding v4: carte e debiti (27/10) */
.onb4-card-head{flex:1; min-width:0; display:grid; grid-template-columns:28px minmax(0,1fr) auto; gap:10px; align-items:center; padding:10px 12px; border-radius:var(--radius-md); border:1px solid var(--color-border-strong); background:var(--surface-tile); color:var(--ink); font:inherit; text-align:left; cursor:pointer; transition:border-color .15s ease, transform .16s cubic-bezier(.23,1,.32,1);}
.onb4-card-head:active{transform:scale(.985);}
@media (hover: hover) and (pointer: fine){ .onb4-card-head:hover{border-color:var(--accent);} }
.onb4-card-head .bank-badge, .onb4-card-head .bank-badge-img{width:28px; height:28px;}
.onb4-card-owed{display:flex; flex-direction:column; align-items:flex-end; gap:1px;}
.onb4-card-owed .mono{font-size:16px;}
.onb4-link-add{display:inline-flex; align-items:center; gap:8px; align-self:flex-start; padding:6px 0; border:0; background:none; color:var(--accent-ink); font:inherit; font-size:14px; font-weight:700; cursor:pointer;}
.onb4-dgroup{display:flex; flex-direction:column; gap:12px; padding:14px 0; border-top:1px solid var(--line);}
.onb4-after{margin-top:12px;}
.onb4-side-idea{margin-top:6px;}
.onb4-idea-m{display:none; margin-top:16px;}

/* Onboarding v4: Tus inversiones con conferma (27/10) */
.onb4-flabel{font-size:13px; font-weight:600; color:var(--muted);}
.onb4-tts{display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:10px; margin-bottom:4px;}
.onb4-tt{display:flex; flex-direction:column; gap:2px; padding:10px 12px; text-align:left; border-radius:var(--radius-md); border:1px solid var(--color-border-strong); background:var(--surface-tile); color:var(--ink); font:inherit; font-size:14px; cursor:pointer; transition:border-color .15s ease, transform .16s cubic-bezier(.23,1,.32,1);}
.onb4-tt:active{transform:scale(.985);}
.onb4-tt.on{border-color:var(--accent); background:var(--accent-soft);}
@media (hover: hover) and (pointer: fine){ .onb4-tt:not(.on):hover{border-color:var(--muted);} }
@media (max-width:640px){ .onb4-tts{grid-template-columns:1fr;} }

/* Onboarding v4: finestra degli elementi e tessere figlie (27/10) */
#onb4-modal{z-index:1100;}
.onb4-subs{display:flex; flex-direction:column; gap:8px;}
.onb4-box .onb4-acc-sub{margin-left:0;}

/* Onboarding v4: Tus extractos e Tu último mes (27/10) */
.onb4-ex-list{display:flex; flex-direction:column; gap:8px;}
.onb4-ex-row{display:grid; grid-template-columns:28px minmax(0,1fr) auto; gap:10px; align-items:center; min-height:56px; padding:10px 12px; border-radius:var(--radius-lg); border:1px solid var(--color-border-strong); background:var(--surface-tile);}
.onb4-ex-row.done, .onb4-ex-row.none{border-color:transparent; box-shadow:var(--shadow-sm);}
.onb4-ex-row .bank-badge, .onb4-ex-row .bank-badge-img{width:28px; height:28px;}
.onb4-ex-ok{display:inline-flex; align-items:center; gap:6px; font-size:13px; font-weight:700; color:var(--success);}
.onb4-ex-actions{display:flex; align-items:center; gap:12px;}
.onb4-ex-skip{font-size:13px;}
.onb4-read{margin-top:4px;}
.onb4-read .onb4-track{display:block; width:100%; height:4px; margin-top:6px; border-radius:999px; background:var(--line); overflow:hidden;}
.onb4-read .onb4-track > span{display:block; height:4px; border-radius:999px; background:#D9D6CF;}
.onb4-um-sum{display:flex; flex-direction:column; gap:2px; padding:12px 16px; margin-bottom:22px; border-radius:var(--radius-lg); background:var(--surface-alt);}
.onb4-um-sum > div{display:flex; justify-content:space-between; align-items:baseline; padding:4px 0; font-size:14px; color:var(--muted);}
.onb4-um-sum .mono{font-size:15px; color:var(--ink);}
.onb4-um-sum .total{margin-top:4px; padding-top:8px; border-top:1px solid var(--line); color:var(--ink); font-weight:700;}
.onb4-um-sum .total .mono{font-size:18px;}
.onb4-um-cats{display:flex; flex-direction:column; gap:12px;}
.onb4-um-cat{display:flex; flex-direction:column; gap:5px;}
.onb4-um-cat > div{display:flex; justify-content:space-between; font-size:13.5px;}
.onb4-um-bar{display:block; height:6px; border-radius:999px; background:var(--line);}
.onb4-um-bar > span{display:block; height:6px; border-radius:999px; background:#D9D6CF;}
.onb4-um-more{display:flex; justify-content:space-between; padding:4px 0; border:0; background:none; color:var(--accent-ink); font:inherit; font-size:13.5px; font-weight:700; cursor:pointer;}
.onb4-um-more .mono{color:var(--ink); font-weight:500;}
/* Sin clasificar si tocca (27/10): stessa riga con barra, in un pulsante; hover = surface-alt come i passi */
.onb4-um-uncat{width:100%; margin:0 -8px; padding:6px 8px; box-sizing:content-box; border:0; border-radius:var(--radius-md, 8px); background:none; color:inherit; font:inherit; text-align:left; cursor:pointer;}
.onb4-um-uncat:hover, .onb4-um-uncat:focus-visible{background:var(--surface-alt);}
.onb4-um-uncat > .note{color:var(--accent-ink); font-size:12.5px; font-weight:700;}
.onb4-uncat{display:flex; flex-direction:column; gap:10px;}
.onb4-uncat-row{display:grid; grid-template-columns:28px minmax(0,1fr) auto minmax(150px, 200px); gap:12px; align-items:center; padding:10px 12px; border-radius:var(--radius-lg); border:1px solid var(--color-border-strong); background:var(--surface-tile);}
.onb4-uncat-row .field{margin:0;}
.onb4-vt-once{grid-column:2; grid-row:2; display:flex; align-items:center; gap:8px; font-size:12.5px; color:var(--muted); cursor:pointer;}
.onb4-vt-once .switch{transform:scale(.85); transform-origin:left center; margin:0;}
.onb4-uncat-group{display:flex; flex-direction:column; gap:6px;}
.onb4-uncat-toggle{align-self:flex-start; margin-top:2px; font-size:12.5px;}
/* Movimenti del gruppo: riquadri più piccoli e rientrati sotto il gruppo, come gli apartados sotto il conto */
.onb4-uncat-items{display:flex; flex-direction:column; gap:6px; margin-left:40px;}
.onb4-uncat-items[hidden], #onb4-f-freq-f[hidden]{display:none;}
.onb4-uncat-item{display:grid; grid-template-columns:minmax(0,1fr) auto minmax(150px, 200px); gap:12px; align-items:center; padding:8px 12px; border-radius:var(--radius-lg); border:1px solid var(--line); background:var(--surface-alt); font-size:13.5px;}
.onb4-uncat-item .field{margin:0;}
@media (max-width:640px){ .onb4-uncat-row{grid-template-columns:28px minmax(0,1fr) auto;} .onb4-uncat-row .field{grid-column:2 / -1;} .onb4-vt-once{grid-column:2 / -1; grid-row:auto;} .onb4-uncat-items{margin-left:16px;} .onb4-uncat-item{grid-template-columns:minmax(0,1fr) auto;} .onb4-uncat-item .field{grid-column:1 / -1;} }
@media (max-width:640px){ .onb4-ex-row{grid-template-columns:28px minmax(0,1fr);} .onb4-ex-row > :last-child{grid-column:2;} }
/* Import nell'onboarding v4: senza la guida dei destini la tabella prende tutta la larghezza (27/10) */
.ap-layout.has-side:has(> #csv-dest-guide[style*="none"]){display:block;}
.confirm-box.wide.md-box:has(#csv-dest-guide[style*="none"]){max-width:760px;}

/* Codice di recupero (0.224.0, finestre di openVault in js/04-cloud.js). */
/* Sopra ogni onboarding (v3 1200, v4 1050): finché i dati non sono aperti non si fa altro. */
#recovery-overlay{z-index:1800;}
.rc-box .md-sec{display:flex; flex-direction:column; gap:12px;}
.rc-code{font-family:'IBM Plex Mono',monospace; font-size:20px; font-weight:600; letter-spacing:1px; text-align:center; color:var(--ink); background:var(--surface-input); border:1px solid var(--line); border-radius:var(--radius-lg); padding:16px 12px; word-break:break-all; user-select:all;}
.rc-actions{display:flex; gap:8px; justify-content:center;}
.rc-input{font-family:'IBM Plex Mono',monospace; letter-spacing:.5px; text-transform:uppercase;}
@media (max-width:640px){ .rc-code{font-size:16px;} }

/* Gastos sin clasificar (onboarding v4, 30/10): la categoria proposta è già scelta nel menu e lo dice sotto. */
.onb4-uncat-sug{display:block; margin-top:4px;}
.onb4-uncat select:not([data-sug]) + .onb4-uncat-sug{display:none;}
/* Tu último mes (30/10): "Entró" si tocca per rivedere le entrate; la nota sui passaggi uniti. */
.onb4-um-sum button.onb4-um-in{display:flex; justify-content:space-between; align-items:flex-start; width:100%; background:none; border:0; padding:0; font:inherit; color:inherit; text-align:left; cursor:pointer;}
.onb4-um-in > span:first-child{display:flex; flex-direction:column; gap:2px;}
.onb4-um-in .note{color:var(--accent-ink); font-weight:600;}
.onb4-um-joined{margin:0 0 10px;}
.onb4-inc-refund{margin-top:8px;}
.onb4-inc-refund label{display:block; font-size:13px; color:var(--muted); margin-bottom:4px;}
/* Revisione di spese ed entrate per conto (onboarding v4, 30/10, proposta A). */
.onb4-rv{display:flex; flex-direction:column; gap:16px;}
.onb4-rv-head{display:flex; align-items:center; gap:10px; margin:0 0 8px;}
.onb4-rv-head .bank-badge-img, .onb4-rv-head .bank-badge{width:24px; height:24px;}
.onb4-rv-head strong{font-size:14px; color:var(--ink);}
.onb4-rv-head .note{margin:0 0 0 auto; white-space:nowrap;}
.onb4-rv-rows{display:flex; flex-direction:column; gap:6px;}
.onb4-rv-group{display:flex; flex-direction:column; gap:6px;}
.onb4-rv-row{display:grid; grid-template-columns:minmax(0,1fr) auto 220px; gap:14px; align-items:center; padding:10px 14px; border-radius:var(--radius-lg); border:1px solid var(--border-strong); background:var(--surface-tile);}
.onb4-rv-row .field{margin:0;}
.onb4-rv-text{display:flex; flex-direction:column; gap:2px; min-width:0;}
.onb4-rv-title{font-size:14px; font-weight:600; color:var(--ink); line-height:1.35; overflow-wrap:anywhere;}
.onb4-rv-text .note{margin:0;}
.onb4-rv-text .onb4-uncat-toggle{font-size:inherit; margin:0;}
.onb4-rv-row .mono{font-size:15px; white-space:nowrap;}
.onb4-rv .onb4-uncat-items{margin-left:24px;}
@media (max-width:640px){ .onb4-rv-row{grid-template-columns:minmax(0,1fr) auto;} .onb4-rv-row .field{grid-column:1 / -1;} .onb4-rv .onb4-uncat-items{margin-left:12px;} }
