/* Caratteri inclusi nel programma (licenza SIL OFL, vedi fonts/LICENZA-OFL.txt):
   nessuna richiesta a server esterni, funziona anche senza internet. */
@font-face{font-family:'Fraunces'; src:url('../fonts/fraunces.woff2') format('woff2'); font-weight:100 900; font-style:normal; font-display:swap;}
@font-face{font-family:'Public Sans'; src:url('../fonts/public-sans.woff2') format('woff2'); font-weight:100 900; font-style:normal; font-display:swap;}
@font-face{font-family:'IBM Plex Mono'; src:url('../fonts/ibm-plex-mono-400.woff2') format('woff2'); font-weight:400; font-display:swap;}
@font-face{font-family:'IBM Plex Mono'; src:url('../fonts/ibm-plex-mono-500.woff2') format('woff2'); font-weight:500; font-display:swap;}
@font-face{font-family:'IBM Plex Mono'; src:url('../fonts/ibm-plex-mono-600.woff2') format('woff2'); font-weight:600; font-display:swap;}

  :root{
    color-scheme: light;
    --bg:#F6F7F2; --bg-elev:#FFFFFF; --surface:#FFFFFF; --surface-2:#EEF1E9; --surface-hover:#E7EBE1;
    --border:rgba(23,31,24,0.12); --border-strong:rgba(23,31,24,0.22);
    --text:#1B2420; --text-2:#57625A; --text-muted:#8B958C;
    --accent:#2E6B52; --accent-strong:#1F4E3B; --accent-soft:#E1EEE5; --accent-contrast:#FFFFFF;
    --danger:#AC4327; --danger-soft:#F6E4DE; --danger-strong:#7E2F19;
    --good:#2E7D46; --warn:#946512; --warn-soft:#F3E6CB;
    --shadow: 0 1px 2px rgba(20,30,22,0.07), 0 10px 28px -14px rgba(20,30,22,0.22);
    --velo:rgba(46,107,82,0.11); --velo-2:rgba(46,107,82,0.07);
    --series-prot:#2a78d6; --series-carb:#eb6834; --series-fat:#1baf7a;
    --series-a:#2a78d6; --series-b:#eb6834;
    --font-display:'Fraunces', Georgia, 'Times New Roman', serif;
    --font-body:'Public Sans', -apple-system, "Segoe UI", sans-serif;
    --font-mono:'IBM Plex Mono', ui-monospace, 'SFMono-Regular', Menlo, monospace;
  }
  @media (prefers-color-scheme: dark){
    :root:not([data-theme="light"]){
      color-scheme: dark;
      --bg:#0F1310; --bg-elev:#161B15; --surface:#161B15; --surface-2:#1D231C; --surface-hover:#242B22;
      --border:rgba(255,255,255,0.10); --border-strong:rgba(255,255,255,0.20);
      --text:#EDEFE9; --text-2:#B7BFB1; --text-muted:#7C867B;
      --accent:#63B38C; --accent-strong:#83CBA8; --accent-soft:rgba(99,179,140,0.16); --accent-contrast:#0B140F;
      --danger:#E28464; --danger-soft:rgba(226,132,100,0.16); --danger-strong:#F3B497;
      --good:#5FBE7C; --warn:#E0AC4D; --warn-soft:rgba(224,172,77,0.16);
      --shadow: 0 1px 2px rgba(0,0,0,0.35), 0 10px 28px -14px rgba(0,0,0,0.55);
      --velo:rgba(99,179,140,0.16); --velo-2:rgba(99,179,140,0.10);
      --series-prot:#3987e5; --series-carb:#d95926; --series-fat:#199e70;
      --series-a:#3987e5; --series-b:#d95926;
    }
  }
  :root[data-theme="dark"]{
    color-scheme: dark;
    --bg:#0F1310; --bg-elev:#161B15; --surface:#161B15; --surface-2:#1D231C; --surface-hover:#242B22;
    --border:rgba(255,255,255,0.10); --border-strong:rgba(255,255,255,0.20);
    --text:#EDEFE9; --text-2:#B7BFB1; --text-muted:#7C867B;
    --accent:#63B38C; --accent-strong:#83CBA8; --accent-soft:rgba(99,179,140,0.16); --accent-contrast:#0B140F;
    --danger:#E28464; --danger-soft:rgba(226,132,100,0.16); --danger-strong:#F3B497;
    --good:#5FBE7C; --warn:#E0AC4D; --warn-soft:rgba(224,172,77,0.16);
    --shadow: 0 1px 2px rgba(0,0,0,0.35), 0 10px 28px -14px rgba(0,0,0,0.55);
    --velo:rgba(99,179,140,0.16); --velo-2:rgba(99,179,140,0.10);
    --series-prot:#3987e5; --series-carb:#d95926; --series-fat:#199e70;
      --series-a:#3987e5; --series-b:#d95926;
  }

  *{box-sizing:border-box;}
  html,body{margin:0;padding:0;}
  body{
    background:var(--bg); color:var(--text); font-family:var(--font-body);
    font-size:14px; line-height:1.5; -webkit-font-smoothing:antialiased;
  }
  h1,h2,h3,h4{font-family:var(--font-display); font-weight:600; margin:0; text-wrap:balance; color:var(--text);}
  a{color:var(--accent);}
  button{font-family:inherit;}
  input,select,textarea{font-family:inherit; font-size:14px;}
  ::selection{background:var(--accent-soft);}
  .num{font-family:var(--font-mono); font-variant-numeric:tabular-nums;}

  [hidden]{display:none !important;}

  /* ---------- Gate ---------- */
  #gate{
    min-height:100vh; display:flex; align-items:center; justify-content:center;
    padding:32px 16px; background:
      radial-gradient(860px 460px at 10% -8%, var(--velo), transparent 62%),
      radial-gradient(700px 400px at 105% 106%, var(--velo-2), transparent 60%),
      var(--bg-elev);
  }
  .gate-card{
    width:100%; max-width:394px; background:var(--surface);
    border:1px solid var(--border); border-top:4px solid var(--accent);
    border-radius:18px; padding:30px 30px 28px;
    box-shadow:0 1px 2px rgba(20,30,22,.06), 0 26px 64px -30px rgba(20,30,22,.42);
  }
  .gate-mark{
    width:44px;height:44px;border-radius:12px;background:var(--accent);color:var(--accent-contrast);
    display:flex;align-items:center;justify-content:center;font-size:20px;margin-bottom:16px;
  }
  .gate-card h1{font-family:var(--font-body); font-size:11px; font-weight:700; letter-spacing:.13em;
    text-transform:uppercase; color:var(--accent-strong); margin-bottom:6px; text-align:center;}
  .gate-sub{color:var(--text-2); font-size:13px; line-height:1.5; margin:0 0 20px; text-align:center;}
  #gate-body{border-top:1px solid var(--border); padding-top:20px;}
  .gate-note{margin-top:18px; font-size:11.5px; color:var(--text-muted); line-height:1.55; text-align:center;}
  .gate-error{color:var(--danger); font-size:13px; margin-top:10px; min-height:16px; text-align:center;}

  /* ---------- Form basics ---------- */
  .field{display:flex; flex-direction:column; gap:6px; margin-bottom:14px;}
  .field label{font-size:12px; font-weight:600; color:var(--text-2); letter-spacing:.01em;}
  .field .hint{font-size:11.5px; color:var(--text-muted);}
  input[type=text],input[type=date],input[type=time],input[type=search],input[type=number],input[type=password],input[type=email],input[type=tel],select,textarea{
    width:100%; padding:9px 11px; border-radius:9px; border:1px solid var(--border-strong);
    background:var(--bg-elev); color:var(--text); outline:none; transition:border-color .12s, box-shadow .12s;
  }
  textarea{resize:vertical; min-height:64px; font-family:inherit;}
  input:focus,select:focus,textarea:focus{border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-soft);}
  input::placeholder,textarea::placeholder{color:var(--text-muted);}
  .row{display:flex; gap:12px; flex-wrap:wrap;}
  .row > .field{flex:1 1 160px; min-width:0;}
  .grid-2{display:grid; grid-template-columns:1fr 1fr; gap:12px;}
  .grid-3{display:grid; grid-template-columns:repeat(3,1fr); gap:12px;}
  @media (max-width:640px){ .grid-2,.grid-3{grid-template-columns:1fr;} }

  button{cursor:pointer;}
  .btn{
    display:inline-flex; align-items:center; gap:6px; padding:9px 15px; border-radius:9px;
    border:1px solid var(--border-strong); background:var(--bg-elev); color:var(--text);
    font-size:13.5px; font-weight:600; transition:background .12s,border-color .12s,transform .05s;
  }
  .btn:hover{background:var(--surface-hover);}
  .btn:active{transform:translateY(1px);}
  .btn-primary{background:var(--accent); border-color:var(--accent); color:var(--accent-contrast);}
  .btn-primary:hover{background:var(--accent-strong); border-color:var(--accent-strong);}
  .btn-danger{background:transparent; border-color:var(--danger); color:var(--danger);}
  .btn-danger:hover{background:var(--danger-soft);}
  .btn-ghost{background:transparent; border-color:transparent;}
  .btn-ghost:hover{background:var(--surface-hover);}
  .btn-sm{padding:6px 10px; font-size:12.5px; border-radius:7px;}
  .btn-block{width:100%; justify-content:center;}
  .btn[disabled]{opacity:.5; cursor:not-allowed;}
  .icon-btn{width:30px;height:30px;padding:0;justify-content:center;border-radius:7px;}

  /* ---------- Shell ---------- */
  .shell{display:flex; min-height:100vh;}
  .sidebar{
    width:228px; flex-shrink:0; background:var(--bg-elev); border-right:1px solid var(--border);
    display:flex; flex-direction:column; padding:18px 14px; gap:4px; position:sticky; top:0; height:100vh;
  }
  .brand{display:flex; flex-direction:column; align-items:flex-start; gap:4px; padding:4px 8px 16px;}
  .brand-logo{display:block; width:100%; height:auto;}
  /* La base chiara sotto al logo: nel tema chiaro si confonde con la pagina,
     nel tema scuro diventa un riquadro di carta su cui il logo resta nitido. */
  .logo-base{background:#FFFFFF; border-radius:12px; padding:2px;}
  .brand-base{width:100%; max-width:180px; padding:8px 10px;}
  .gate-base{max-width:246px; margin:2px auto 22px; padding:10px 14px;}
  .brand-sotto{font-size:9.5px; font-weight:600; letter-spacing:.09em; text-transform:uppercase; color:var(--text-muted); padding-left:2px;}
  .gate-logo{display:block; width:100%; height:auto;}
  @media (prefers-color-scheme: dark){
    :root:not([data-theme="light"]) .logo-base{box-shadow:0 1px 3px rgba(0,0,0,.35);}
  }
  :root[data-theme="dark"] .logo-base{box-shadow:0 1px 3px rgba(0,0,0,.35);}
  @media (max-width:860px){
    .brand{flex-direction:row; align-items:center; gap:9px;}
    .brand-base{max-width:132px; padding:6px 8px;}
    .brand-sotto{display:none;}
  }
  .brand-mark{width:32px;height:32px;border-radius:9px;background:var(--accent);color:var(--accent-contrast);
    display:flex;align-items:center;justify-content:center;font-size:16px; flex-shrink:0;}
  .brand-text{font-family:var(--font-display); font-weight:600; font-size:16.5px; line-height:1.15;}
  .brand-text span{display:block; font-family:var(--font-body); font-weight:500; font-size:10.5px; color:var(--text-muted); text-transform:uppercase; letter-spacing:.06em;}
  .nav-btn{
    display:flex; align-items:center; gap:10px; padding:9px 10px; border-radius:9px; border:none;
    background:transparent; color:var(--text-2); font-size:13.5px; font-weight:600; text-align:left; width:100%;
  }
  .nav-btn .ic{font-size:15px; width:18px; text-align:center;}
  .nav-btn:hover{background:var(--surface-hover); color:var(--text);}
  .nav-btn.active{background:var(--accent-soft); color:var(--accent-strong);}
  .sidebar-spacer{flex:1;}
  .sidebar-foot{border-top:1px solid var(--border); padding-top:10px; display:flex; flex-direction:column; gap:2px;}
  .sidebar-foot .nav-btn{color:var(--text-muted); font-size:12.5px;}

  .main{flex:1; min-width:0; display:flex; flex-direction:column;}
  .topbar{
    display:flex; align-items:center; justify-content:space-between; gap:12px;
    padding:16px 28px; border-bottom:1px solid var(--border); background:var(--bg-elev);
    position:sticky; top:0; z-index:5;
  }
  .topbar-left{display:flex; align-items:center; gap:12px; min-width:0;}
  .topbar h2{font-size:19px;}
  .topbar .crumb{font-size:12px; color:var(--text-muted); display:flex; align-items:center; gap:6px;}
  .content{padding:24px 28px 60px; max-width:980px; width:100%; margin:0 auto;}
  @media (max-width:860px){
    .shell{flex-direction:column;}
    .sidebar{position:static; width:100%; height:auto; flex-direction:row; align-items:center; overflow-x:auto; padding:10px 12px; border-right:none; border-bottom:1px solid var(--border);}
    .brand{padding:2px 10px 2px 2px;}
    .sidebar-spacer{display:none;}
    .sidebar-foot{border-top:none; border-left:1px solid var(--border); padding-left:10px; flex-direction:row;}
    .content{padding:18px 16px 48px;}
    .topbar{padding:14px 16px;}
  }

  /* ---------- Cards / lists ---------- */
  .card{background:var(--surface); border:1px solid var(--border); border-radius:14px; padding:20px; box-shadow:var(--shadow); margin-bottom:18px;}
  .card-head{display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:16px;}
  .card-head h3{font-size:15.5px;}
  .card-head .hint{font-size:12px; color:var(--text-muted); font-weight:400;}
  .search-row{display:flex; gap:10px; margin-bottom:16px; flex-wrap:wrap;}
  .search-row input[type=text]{flex:1; min-width:200px;}

  .plist{display:flex; flex-direction:column; gap:8px;}
  .prow{
    display:flex; align-items:center; gap:14px; padding:13px 14px; border:1px solid var(--border);
    border-radius:11px; background:var(--bg-elev); text-align:left; width:100%;
  }
  .prow:hover{border-color:var(--border-strong); background:var(--surface-hover);}
  .avatar{width:38px;height:38px;border-radius:50%; background:var(--accent-soft); color:var(--accent-strong);
    display:flex; align-items:center; justify-content:center; font-weight:700; font-size:14px; flex-shrink:0; font-family:var(--font-display);}
  .prow-main{flex:1; min-width:0;}
  .prow-name{font-weight:600; font-size:14.5px;}
  .prow-sub{font-size:12px; color:var(--text-muted); margin-top:1px;}
  .prow-chev{color:var(--text-muted); font-size:16px;}
  .empty-state{padding:40px 20px; text-align:center; color:var(--text-muted);}
  .empty-state .ic{font-size:30px; margin-bottom:10px;}

  /* ---------- Tabs ---------- */
  .tabs{display:flex; gap:4px; border-bottom:1px solid var(--border); margin-bottom:20px; overflow-x:auto;}
  .tab-btn{padding:10px 14px; border:none; background:none; color:var(--text-muted); font-weight:600; font-size:13px;
    border-bottom:2px solid transparent; white-space:nowrap;}
  .tab-btn:hover{color:var(--text);}
  .tab-btn.active{color:var(--accent-strong); border-bottom-color:var(--accent);}

  /* ---------- Tags / pills / badges ---------- */
  .pill{display:inline-flex; align-items:center; gap:5px; padding:3px 9px; border-radius:99px; font-size:11.5px; font-weight:600;}
  .pill-accent{background:var(--accent-soft); color:var(--accent-strong);}
  .pill-warn{background:var(--warn-soft); color:var(--warn);}
  .pill-muted{background:var(--surface-2); color:var(--text-2);}

  /* ---------- Stat tiles ---------- */
  .stat-grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(120px,1fr)); gap:10px; margin-bottom:6px;}
  .stat-tile{background:var(--surface-2); border-radius:11px; padding:13px 14px;}
  .stat-tile .lbl{font-size:11px; color:var(--text-muted); font-weight:600; text-transform:uppercase; letter-spacing:.03em;}
  .stat-tile .val{font-family:var(--font-mono); font-size:20px; font-weight:600; margin-top:3px; font-variant-numeric:tabular-nums;}
  .stat-tile .val small{font-size:12px; font-weight:500; color:var(--text-2);}

  /* ---------- Table ---------- */
  .tbl-wrap{overflow-x:auto;}
  table.data{width:100%; border-collapse:collapse; font-size:13px;}
  table.data th{text-align:left; font-size:11px; text-transform:uppercase; letter-spacing:.03em; color:var(--text-muted);
    font-weight:600; padding:8px 10px; border-bottom:1px solid var(--border); white-space:nowrap;}
  table.data td{padding:9px 10px; border-bottom:1px solid var(--border); vertical-align:middle;}
  table.data td.num,table.data th.num{font-family:var(--font-mono); font-variant-numeric:tabular-nums; text-align:right;}
  table.data tr:last-child td{border-bottom:none;}
  table.data tr:hover td{background:var(--surface-2);}
  .row-actions{display:flex; gap:4px; justify-content:flex-end;}

  /* ---------- Measurement trend ---------- */
  .trend-head{display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; margin-bottom:10px;}
  .trend-svg{width:100%; height:auto; display:block;}
  .delta-up{color:var(--danger);} .delta-down{color:var(--good);} .delta-flat{color:var(--text-muted);}
  .trend-picker{display:flex; gap:10px; flex-wrap:wrap; align-items:flex-end;}
  .trend-picker .field{margin-bottom:0; min-width:170px;}
  .trend-legend{display:flex; gap:16px; flex-wrap:wrap; margin:2px 0 12px;}
  .trend-legend .legend-row{font-size:12.5px; align-items:center;}
  .trend-legend .legend-dot{width:11px;height:3px;border-radius:2px;}

  /* ---------- Sezioni ripiegabili (misure) ---------- */
  details.fold{border:1px solid var(--border); border-radius:12px; margin-bottom:14px; background:var(--bg-elev);}
  details.fold > summary{
    list-style:none; cursor:pointer; padding:12px 14px; display:flex; align-items:center; gap:10px;
    font-family:var(--font-display); font-weight:600; font-size:14.5px; border-radius:12px;
  }
  details.fold > summary::-webkit-details-marker{display:none;}
  details.fold > summary::before{content:"▸"; color:var(--text-muted); font-size:12px; transition:transform .12s;}
  details.fold[open] > summary::before{transform:rotate(90deg);}
  details.fold > summary:hover{background:var(--surface-hover);}
  details.fold > summary .fold-note{margin-left:auto; font-family:var(--font-body); font-weight:500; font-size:11.5px; color:var(--text-muted);}
  .fold-body{padding:2px 14px 14px;}
  .plica-grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:10px;}
  .plica-grid .field{margin-bottom:0;}
  .plica-used{color:var(--accent-strong); font-weight:700;}
  .comp-note{font-size:12px; color:var(--text-muted); margin-top:8px; line-height:1.5;}

  /* ---------- Riquadro BMI (Anagrafica e Obiettivi) ---------- */
  .bmi-box{
    display:flex; align-items:baseline; flex-wrap:wrap; gap:8px;
    background:var(--surface-2); border-radius:11px; padding:11px 14px; margin:0 0 14px;
  }
  .bmi-box .bmi-val{font-size:22px; font-weight:600; line-height:1.1; color:var(--text);}
  .bmi-box .bmi-lbl{font-size:11px; font-weight:600; text-transform:uppercase; letter-spacing:.03em; color:var(--text-muted);}
  .bmi-box .bmi-cat{font-weight:600; font-size:13.5px; color:var(--accent-strong);}
  .bmi-box .bmi-src{margin-left:auto; font-size:11.5px; color:var(--text-muted);}
  .bmi-box.bmi-empty{display:block; font-size:12.5px; color:var(--text-muted);}
  .range-box{display:flex; align-items:baseline; flex-wrap:wrap; gap:10px; margin:-6px 0 14px;
    padding:9px 14px; border:1px dashed var(--border-strong); border-radius:11px;}
  .range-box .range-lbl{font-size:12px; font-weight:600; color:var(--text-2); display:flex; flex-direction:column; gap:1px;}
  .range-box .range-lbl span{font-weight:400; font-size:11px; color:var(--text-muted);}
  .range-box .range-val{font-size:15px; font-weight:600; color:var(--text);}
  .range-box .range-delta{margin-left:auto; font-size:11.5px; color:var(--warn);}
  .range-box .range-delta.dentro{color:var(--good);}
  .stat-tile .tile-extra{font-size:11px; color:var(--text-muted); margin-top:2px;}
  .campi-richiesti{margin:12px 0 4px; padding:11px 13px; border-radius:10px; background:var(--accent-soft);}
  .campi-richiesti .cr-lbl{font-size:10.5px; font-weight:700; text-transform:uppercase; letter-spacing:.05em;
    color:var(--accent-strong); margin-bottom:8px;}

  /* ---------- Scheda di anamnesi ---------- */
  .anam-id{display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:10px;}
  .anam-id > div{background:var(--surface-2); border-radius:10px; padding:10px 12px; display:flex; flex-direction:column; gap:2px;}
  .anam-id span{font-size:10.5px; font-weight:600; text-transform:uppercase; letter-spacing:.03em; color:var(--text-muted);}
  .anam-id strong{font-size:14px;}
  .anam-campo{margin-bottom:15px;}
  .anam-campo.stretto{max-width:230px;}
  .anam-lbl{display:block; font-size:12.5px; font-weight:600; color:var(--text-2); margin-bottom:6px;}
  .anam-campo textarea{min-height:52px;}
  .anam-campo .hint{display:block; font-size:11.5px; color:var(--text-muted); margin-top:5px;}
  .dia-nuova{background:var(--surface-2); border-radius:11px; padding:14px 15px; margin-bottom:16px;}
  .dia-lista{display:flex; flex-direction:column; gap:10px;}
  .dia-voce{border:1px solid var(--border); border-left:3px solid var(--accent); border-radius:10px; padding:11px 13px; background:var(--bg-elev);}
  .dia-voce-head{display:flex; align-items:center; gap:8px; margin-bottom:6px;}
  .dia-data{font-family:var(--font-mono); font-size:12.5px; font-weight:600; color:var(--accent-strong);}
  .dia-testo{font-size:13.5px; line-height:1.6; color:var(--text); white-space:normal;}
  .anam-altro{margin-top:8px;}
  .chk-grid{display:flex; flex-wrap:wrap; gap:7px 14px; align-items:center;}
  .chk{display:inline-flex; align-items:center; gap:6px; font-size:13px; cursor:pointer; color:var(--text);
    padding:4px 9px; border:1px solid var(--border); border-radius:8px; background:var(--bg-elev);}
  .chk:hover{border-color:var(--border-strong);}
  .chk input{width:auto; margin:0; accent-color:var(--accent);}
  .chk:has(input:checked){background:var(--accent-soft); border-color:var(--accent); color:var(--accent-strong); font-weight:600;}

  /* ---------- Stampa della scheda di anamnesi ---------- */
  .pa-sez{margin-bottom:14px; page-break-inside:avoid;}
  .pa-sez h3{font-size:12px; letter-spacing:.06em; border-bottom:1px solid #111; padding-bottom:3px; margin-bottom:7px; color:#111;}
  .pa-campo{margin-bottom:7px;}
  .pa-lbl{font-size:10.5px; font-weight:700; color:#444; margin-bottom:2px;}
  .pa-val{font-size:12px; color:#111; min-height:14px; border-bottom:1px dotted #bbb; padding-bottom:2px;}
  .pa-vuoto{display:inline-block; width:100%;}
  .pa-opts{display:flex; flex-wrap:wrap; gap:3px 14px;}
  .pa-opt{font-size:11px; color:#111; white-space:nowrap;}

  /* ---------- Catena del fabbisogno ---------- */
  .inline-check{display:inline-flex; align-items:center; gap:7px; font-size:13px; font-weight:600; color:var(--text-2); cursor:pointer;}
  .inline-check input{width:auto; margin:0;}
  .seg-switch{display:inline-flex; border:1px solid var(--border-strong); border-radius:8px; overflow:hidden;}
  .seg-switch button{border:none; background:var(--bg-elev); color:var(--text-2); font-size:12.5px; font-weight:600; padding:5px 12px;}
  .seg-switch button.active{background:var(--accent); color:var(--accent-contrast);}
  .chain{border:1px solid var(--border); border-radius:12px; overflow:hidden;}
  .chain-row{display:flex; align-items:center; gap:14px; padding:11px 14px; border-bottom:1px solid var(--border);}
  .chain-row:last-child{border-bottom:none;}
  .chain-lbl{flex:1; min-width:0; font-weight:600; font-size:13.5px; display:flex; flex-direction:column; gap:2px;}
  .chain-lbl span{font-weight:400; font-size:11.5px; color:var(--text-muted); line-height:1.4;}
  .chain-val{flex:0 0 130px; text-align:right; font-size:16px; font-weight:600;}
  .chain-val.num{font-family:var(--font-mono); font-variant-numeric:tabular-nums;}
  .chain-plus{color:var(--accent-strong);}
  .chain-input{width:110px; text-align:right; font-family:var(--font-mono); padding:6px 9px;}
  .chain-sum{background:var(--surface-2);}
  .chain-total{background:var(--accent-soft);}
  .chain-total .chain-lbl, .chain-total .chain-val{color:var(--accent-strong);}
  .chain-total .chain-lbl span{color:var(--accent-strong); opacity:.75;}
  .chain-total .chain-val{font-size:20px;}
  .chain-actions{display:flex; gap:8px; flex-wrap:wrap; margin-top:12px;}
  @media (max-width:560px){
    .chain-row{flex-direction:column; align-items:stretch; gap:6px;}
    .chain-val{flex:none; text-align:left;}
  }

  /* ---------- Profili target ON / OFF ---------- */
  .prof-grid{display:grid; gap:14px;}
  .prof-grid.due{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));}
  .prof-card{border:1px solid var(--border); border-radius:12px; padding:14px; background:var(--bg-elev);}
  .prof-card.on{border-left:3px solid var(--series-a);}
  .prof-card.off{border-left:3px solid var(--series-b);}
  .prof-head{display:flex; align-items:center; justify-content:space-between; gap:10px; margin-bottom:12px;}
  .prof-head h4{font-family:var(--font-display); font-size:14.5px; font-weight:600; margin:0;}
  .prof-badge{font-size:10.5px; font-weight:700; letter-spacing:.05em; padding:2px 8px; border-radius:99px;}
  .prof-badge.on{background:rgba(42,120,214,0.14); color:var(--series-a);}
  .prof-badge.off{background:rgba(235,104,52,0.14); color:var(--series-b);}
  .prof-macros{display:grid; grid-template-columns:repeat(3,1fr); gap:9px;}
  .prof-macros .field{margin-bottom:0;}
  .prof-macros input{padding:7px 9px;}
  .prof-note{margin-top:11px; font-size:12px;}
  .macro-esito{margin-top:12px; border-top:1px solid var(--border); padding-top:10px; display:flex; flex-direction:column; gap:7px;}
  .macro-riga{display:grid; grid-template-columns:86px 76px 1fr; gap:8px; align-items:baseline; font-size:12.5px;}
  .macro-nome{font-weight:600; color:var(--text-2);}
  .macro-val{font-weight:600; text-align:right;}
  .macro-det{font-size:11.5px; color:var(--text-muted);}
  .macro-totale{border-top:1px solid var(--border); padding-top:7px; margin-top:1px;}
  .macro-totale .macro-nome, .macro-totale .macro-val{color:var(--accent-strong);}
  .rif-eco{font-size:13.5px; color:var(--text-2); padding-bottom:9px;}
  .formula-info{display:block; margin-top:6px; padding-top:6px; border-top:1px dashed var(--border);}
  .rif-eco strong{font-family:var(--font-mono); font-size:15px; color:var(--accent-strong);}
  @media (max-width:420px){ .macro-riga{grid-template-columns:1fr auto; } .macro-det{grid-column:1 / -1;} }
  @media (max-width:420px){ .prof-macros{grid-template-columns:1fr;} }

  /* ---------- Etichetta ON/OFF sui giorni del piano ---------- */
  .day-onoff{display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-bottom:14px;
    padding:9px 12px; background:var(--surface-2); border-radius:10px;}
  .day-onoff .lbl{font-size:12.5px; font-weight:600; color:var(--text-2);}
  .day-onoff select{max-width:210px;}
  .day-tab.tipo-on::before{content:"ON"; font-size:9px; font-weight:700; margin-right:5px; color:var(--series-a); letter-spacing:.04em;}
  .day-tab.tipo-off::before{content:"OFF"; font-size:9px; font-weight:700; margin-right:5px; color:var(--series-b); letter-spacing:.04em;}
  .day-tab.active.tipo-on::before, .day-tab.active.tipo-off::before{color:var(--accent-contrast);}
  .bia-cfg-row{display:flex; gap:8px; align-items:center; margin-bottom:8px;}
  .bia-cfg-row input[type=text]{flex:1 1 130px; min-width:80px;}
  .bia-cfg-row input.u{flex:0 0 68px;}
  .bia-cfg-row input.d{flex:0 0 56px;}

  /* ---------- Piano builder ---------- */
  .day-tabs{display:flex; gap:6px; flex-wrap:wrap; margin-bottom:16px;}
  .day-tab{padding:7px 13px; border-radius:99px; border:1px solid var(--border-strong); background:var(--bg-elev);
    font-size:12.5px; font-weight:600; color:var(--text-2);}
  .day-tab.active{background:var(--accent); border-color:var(--accent); color:var(--accent-contrast);}
  .day-tab.has-data::after{content:"•"; margin-left:4px; color:var(--accent);}
  .day-tab.active.has-data::after{color:var(--accent-contrast);}
  /* ---------- Pasti e alimenti in forma compatta ---------- */
  .meal-card{border:1px solid var(--border); border-radius:12px; padding:12px 13px 9px; margin-bottom:12px; background:var(--bg-elev);}
  .meal-head{display:flex; align-items:center; gap:8px; margin-bottom:8px;}
  /* inserire e spostare i pasti */
  .pasto-ins{display:flex; align-items:center; gap:8px; margin:-5px 0 7px; opacity:.5; transition:opacity .12s;}
  .pasto-ins::before, .pasto-ins::after{content:""; flex:1; height:1px; background:var(--border);}
  .pasto-ins:hover, .pasto-ins:focus-within{opacity:1;}
  .pasto-ins-btn{border:1px dashed var(--border-strong); background:var(--bg-elev); color:var(--text-2); font-family:inherit;
    font-size:11.5px; font-weight:600; border-radius:99px; padding:2px 11px; cursor:pointer;}
  .pasto-ins-btn:hover, .pasto-ins-btn:focus-visible{color:var(--accent-strong); border-color:var(--accent); border-style:solid;}
  .meal-grip{cursor:grab; color:var(--text-muted); font-size:15px; line-height:1; padding:4px 1px; user-select:none; flex:0 0 auto;}
  .meal-grip:active{cursor:grabbing;}
  .meal-gruppo.dragging{opacity:.45;}
  .meal-gruppo.drop-before{box-shadow:0 -3px 0 0 var(--accent); border-radius:12px;}
  .meal-gruppo.drop-after{box-shadow:0 3px 0 0 var(--accent); border-radius:12px;}
  .meal-card.appena-aggiunto{box-shadow:0 0 0 3px var(--accent-soft); border-color:var(--accent);}
  .np-chips{display:flex; flex-wrap:wrap; gap:6px; margin:-4px 0 16px;}
  .np-chip{border:1px solid var(--border-strong); background:var(--bg-elev); color:var(--text-2); font-family:inherit; font-size:12px;
    font-weight:600; border-radius:99px; padding:4px 10px; cursor:pointer;}
  .np-chip:hover{background:var(--surface-hover); color:var(--text);}
  .np-chip.attivo{background:var(--accent-soft); border-color:var(--accent); color:var(--accent-strong);}
  /* salvataggio */
  .piano-stato{font-size:12px; font-weight:600; white-space:nowrap;}
  .piano-stato.salvato{color:var(--text-muted);}
  .piano-stato.da-salvare{color:var(--warn);}
  /* impostazioni del PDF */
  .stampa-opz{display:grid; grid-template-columns:repeat(auto-fit,minmax(250px,1fr)); gap:8px;}
  .stampa-voce{display:flex; gap:10px; align-items:flex-start; padding:9px 11px; border:1px solid var(--border); border-radius:10px;
    background:var(--bg-elev); cursor:pointer;}
  .stampa-voce:hover{border-color:var(--border-strong);}
  .stampa-voce input{width:auto; margin:3px 0 0; accent-color:var(--accent); flex:none;}
  .stampa-voce span{display:flex; flex-direction:column; gap:2px; min-width:0;}
  .stampa-voce b{font-size:13px; font-weight:600;}
  .stampa-voce small{font-size:11.5px; color:var(--text-muted); line-height:1.4;}
  .stampa-voce.principale{border-color:var(--accent); background:var(--accent-soft);}
  .stampa-voce.principale b{color:var(--accent-strong);}
  /* pasti alternativi */
  .meal-gruppo.con-alt{margin-bottom:14px;}
  .meal-gruppo.con-alt > .meal-card{margin-bottom:7px;}
  .meal-card.meal-alt{margin-left:24px; border-style:dashed; border-color:var(--border-strong); position:relative;}
  .meal-card.meal-alt::before{content:""; position:absolute; left:-15px; top:-9px; height:30px; width:11px;
    border-left:2px solid var(--border-strong); border-bottom:2px solid var(--border-strong); border-bottom-left-radius:8px;}
  .meal-alt-et{flex:0 0 auto; font-size:11px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--accent-strong); white-space:nowrap;}
  .meal-alt-di{flex:0 0 auto; font-size:12.5px; color:var(--text-muted); white-space:nowrap;}
  .meal-head input.titolo-pasto-alt[type=text]{flex:1 1 120px; min-width:80px; font-family:var(--font-body); font-size:13.5px; font-weight:500;}
  .meal-alt-diff{display:block; font-size:10.5px; color:var(--text-muted); text-align:right;}
  .pasto-alt-aggiungi{display:block; margin:0 0 0 24px; font-size:12px;}
  .meal-head input[type=text]{font-weight:600; font-family:var(--font-display); font-size:15px; border:none; background:transparent; padding:4px 2px;}
  .meal-head input[type=text]:focus{box-shadow:none; border-bottom:1px solid var(--accent);}
  .meal-tot-mini{font-family:var(--font-mono); font-size:11.5px; color:var(--text-muted); white-space:nowrap;}
  .voce-card{border:1px solid transparent; border-radius:9px; padding:3px 4px; margin-bottom:2px;}
  .voce-card:hover{background:var(--surface-2);}
  .voce-card.aperta{background:var(--surface-2); border-color:var(--border); padding-bottom:9px; margin-bottom:8px;}
  .voce-row{display:flex; align-items:center; gap:6px;}
  .voce-row > input[type=text]{flex:1 1 auto; min-width:0; padding:6px 9px; font-size:13px; border-color:transparent; background:transparent;}
  .voce-card:hover .voce-row > input[type=text], .voce-row > input[type=text]:focus{border-color:var(--border-strong); background:var(--bg-elev);}
  .voce-row input.q{flex:0 0 66px; padding:6px 7px; font-size:12.5px; text-align:right;}
  .voce-row select.u{flex:0 0 74px; padding:6px 4px; font-size:12.5px;}
  .link-dot{font-size:11px; flex:none; width:16px; text-align:center; cursor:default;}
  .link-dot.ok{filter:none; opacity:.85;}
  .link-dot.no{filter:grayscale(1); opacity:.32;}
  .voce-segni{display:flex; flex-wrap:wrap; gap:6px; padding:1px 4px 3px 30px; cursor:pointer;}
  .voce-segni .seg{font-size:11px; color:var(--text-muted); background:var(--surface-2); border-radius:5px; padding:1px 6px;}
  .voce-card.aperta .voce-segni .seg{background:var(--bg-elev);}
  .voce-segni .seg-porz{color:var(--accent-strong);}
  .voce-segni .seg-manca{color:var(--warn);}
  .voce-dett{margin:6px 0 2px 30px; padding:10px 12px; background:var(--bg-elev); border:1px solid var(--border); border-radius:9px;}
  .dett-griglia{display:grid; grid-template-columns:repeat(auto-fit,minmax(190px,1fr)); gap:10px;}
  .dett-campo{display:flex; flex-direction:column; gap:4px;}
  .dett-campo > span{font-size:11px; font-weight:600; color:var(--text-2);}
  .dett-campo input{padding:6px 9px; font-size:12.5px;}
  .dett-campo small{font-size:10.5px; color:var(--text-muted);}
  .dett-campo.stretto{max-width:200px;}
  .dett-riga{display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-top:10px;}
  .dett-valori{margin-left:auto; font-family:var(--font-mono); font-size:11.5px; color:var(--text-2);}
  .alt-card{margin:2px 0 3px 30px;}
  .alt-card.aperta{background:var(--surface-2); border-radius:9px; padding-bottom:6px;}
  .alt-row{display:flex; flex-wrap:wrap; align-items:center; gap:6px; padding:3px 6px;
    background:var(--surface-2); border-radius:8px;}
  .alt-card.aperta .alt-row{background:transparent;}
  .voce-row select.u.larga, .alt-row select.u.larga{flex:0 0 88px; color:var(--accent-strong); font-weight:600;}
  .alt-row .icon-btn{padding:3px 5px;}
  .alt-segni{padding-left:52px;}
  .alt-dett{margin:2px 8px 0 46px; padding:9px 11px; background:var(--bg-elev); border:1px solid var(--border); border-radius:9px;}
  .btn-scambia{font-size:13px; line-height:1;}
  .alt-row .alt-prefix{color:var(--accent-strong); font-size:10.5px; font-weight:700; letter-spacing:.02em; flex:0 0 auto; white-space:nowrap;}
  .alt-aggiungi{margin:1px 0 4px 34px; font-size:11.5px;}
  /* opzioni composte da più alimenti */
  .comp-blocco{margin:2px 0 6px 30px; padding:2px 0 2px 10px; border-left:2px solid var(--accent-soft);}
  .alt-card .comp-blocco{margin:2px 0 4px 14px;}
  .comp-row{display:flex; align-items:center; gap:6px; padding:2px 4px;}
  .comp-row input[type=text]{flex:1 1 90px; min-width:70px; padding:5px 8px; font-size:12.5px; border-color:transparent; background:transparent;}
  .comp-row input[type=text]:focus, .comp-card:hover .comp-row input[type=text]{border-color:var(--border-strong); background:var(--bg-elev);}
  .comp-row input.q{flex:0 0 60px; padding:5px 6px; font-size:12px; text-align:right;}
  .comp-row select.u{flex:0 0 70px; padding:5px 4px; font-size:12px;}
  .comp-row input.gcad{flex:0 0 66px; padding:5px 6px; font-size:12px;}
  .comp-piu{flex:0 0 10px; color:var(--accent-strong); font-weight:700; text-align:center;}
  .comp-segni{padding-left:22px;}
  .comp-card .alt-dett{margin-left:22px;}
  .comp-piede{display:flex; align-items:center; gap:14px; flex-wrap:wrap; padding:2px 4px 0 20px; font-size:11.5px;}
  .comp-tot{font-family:var(--font-mono); font-size:11px; color:var(--text-muted);}
  input.titolo-comp{font-weight:600;}
  input.titolo-comp::placeholder{font-weight:500; font-style:italic;}
  .comp-chip{flex:0 0 auto; font-size:10.5px; font-weight:600; color:var(--text-muted); background:var(--surface-2); border-radius:99px; padding:2px 8px; white-space:nowrap;}
  .alt-card.composta .comp-chip{background:var(--bg-elev);}
  .alt-dett-comp .voce-dett{margin:2px 8px 0 46px;}
  .voce-segni .seg-princ{color:var(--accent-strong);}
  .eq-lett{font-weight:700; color:var(--accent-strong); margin-right:8px;}
  .alt-row input[type=text]{flex:1 1 72px; min-width:56px; padding:5px 8px; font-size:12px; border-color:transparent; background:transparent;}
  .alt-row input[type=text]:focus{border-color:var(--border-strong); background:var(--bg-elev);}
  .alt-row input.q{flex:0 0 58px; padding:5px 6px; font-size:12px; text-align:right;}
  .alt-row select.u{flex:0 0 66px; padding:5px 4px; font-size:12px;}
  .alt-row input.gcad{flex:0 0 68px; padding:5px 6px; font-size:12px;}
  .add-voce-btn{margin:4px 0 2px;}
  .meal-foot{display:flex; gap:6px; flex-wrap:wrap;}
  .meal-note{margin:8px 0 4px;}
  .meal-note label{display:block; font-size:11px; font-weight:600; color:var(--text-2); margin-bottom:4px;}
  .meal-note textarea{min-height:44px; font-size:12.5px;}
  .meal-tot.chiuso{display:none;}

  /* ---------- Il menu dei tre puntini ---------- */
  .menu-wrap{position:relative; display:inline-flex; flex:none;}
  .menu-btn{font-size:16px; line-height:1; color:var(--text-muted);}
  .menu-btn:hover, .menu-btn.attivo{color:var(--text); background:var(--surface-hover);}
  .menu-pop{position:absolute; right:0; top:calc(100% + 4px); z-index:30; min-width:232px;
    background:var(--surface); border:1px solid var(--border-strong); border-radius:10px;
    box-shadow:0 2px 6px rgba(20,30,22,.10), 0 18px 40px -18px rgba(20,30,22,.45); padding:5px; }
  .menu-voce{display:flex; align-items:center; gap:9px; width:100%; text-align:left; border:none; background:none;
    padding:7px 9px; border-radius:7px; font-size:13px; color:var(--text); font-family:inherit;}
  .menu-voce:hover{background:var(--surface-hover);}
  .menu-voce .ic{width:16px; text-align:center; font-size:12.5px; opacity:.8; flex:none;}
  .menu-voce.pericolo{color:var(--danger);}
  .menu-sep{height:1px; background:var(--border); margin:4px 2px;}

  /* ---------- Equivalenze ---------- */
  .eq-testa{display:flex; align-items:stretch; gap:12px; background:var(--surface-2); border-radius:10px; padding:11px 13px;}
  .eq-lato{flex:1; min-width:0; display:flex; flex-direction:column; gap:2px;}
  .eq-lato strong{font-size:14px;}
  .eq-lato input{padding:6px 9px; font-size:12.5px; margin-top:2px;}
  .eq-et{font-size:10px; font-weight:700; text-transform:uppercase; letter-spacing:.05em; color:var(--text-muted);}
  .eq-q{font-family:var(--font-mono); font-size:12.5px; color:var(--accent-strong);}
  .eq-frec{align-self:center; color:var(--text-muted); font-size:17px;}
  .eq-risultati{display:flex; flex-direction:column; gap:2px; margin-top:8px; max-height:190px; overflow-y:auto;}
  .eq-ris{display:flex; justify-content:space-between; gap:10px; align-items:baseline; text-align:left;
    border:1px solid var(--border); background:var(--bg-elev); border-radius:8px; padding:7px 10px; font-size:13px; font-family:inherit; color:var(--text);}
  .eq-ris:hover{background:var(--surface-hover);}
  .eq-ris span{font-family:var(--font-mono); font-size:11px; color:var(--text-muted); white-space:nowrap;}
  .callout-eq{margin-top:12px; padding:9px 12px; border-radius:9px; background:var(--warn-soft); color:var(--warn); font-size:12.5px; line-height:1.5;}
  table.eq-tab{font-size:12.5px;}
  table.eq-tab tr.eq-scelto td{background:var(--accent-soft); font-weight:600;}
  table.eq-tab tr.eq-qta td{font-family:var(--font-mono);}
  .eq-tag{font-size:9.5px; font-weight:700; text-transform:uppercase; letter-spacing:.04em; color:var(--accent-strong);}
  .eq-su{color:var(--danger);} .eq-giu{color:var(--good);}
  .eq-blocco{background:var(--surface-2); border-radius:10px; padding:10px 13px; display:flex; flex-direction:column; gap:4px;}
  .eq-riga{display:flex; align-items:center; gap:10px; flex-wrap:wrap;}
  .eq-riga strong{font-size:14.5px; flex:1 1 auto; min-width:0;}
  .eq-qin{display:inline-flex; align-items:center; gap:5px; margin-left:auto;}
  .eq-qin input{width:92px; padding:6px 9px; font-family:var(--font-mono); font-size:14px; text-align:right;}
  .eq-qin span{font-size:12.5px; color:var(--text-2);}
  .eq-criterio{display:flex; align-items:center; gap:10px; margin:10px 2px 0; flex-wrap:wrap;}
  .eq-criterio label{font-size:12.5px; font-weight:600; color:var(--text-2);}
  .eq-criterio select{width:auto; min-width:150px; padding:6px 9px;}
  .eq-giu-freccia{text-align:center; color:var(--text-muted); font-size:17px; line-height:1; margin:6px 0;}
  .eq-stato{font-size:11.5px; color:var(--text-muted); line-height:1.5;}
  .eq-stato b{color:var(--text); font-family:var(--font-mono);}
  .eq-badge{display:inline-block; font-size:9.5px; font-weight:700; text-transform:uppercase; letter-spacing:.04em;
    padding:1px 7px; border-radius:99px; background:var(--warn-soft); color:var(--warn); margin-right:4px;}
  .eq-badge.auto{background:var(--accent-soft); color:var(--accent-strong);}
  #eq-dinamico .tbl-wrap{margin-top:12px;}
  .eq-agg{margin-top:10px; font-size:12.5px;}
  .modal.modal-largo{max-width:640px;}
  table.eq-tab th{white-space:normal;}
  /* ---------- Piano: pannello totali, riordino, porzioni ---------- */
  .piano-layout{display:grid; grid-template-columns:minmax(0,1fr) 272px; gap:20px; align-items:start;}
  @media (max-width:1000px){ .piano-layout{grid-template-columns:1fr;} }
  .piano-col{min-width:0;}
  .tg-panel{position:sticky; top:86px; background:var(--surface-2); border-radius:13px; padding:15px 16px;
    border:1px solid var(--border); max-height:calc(100vh - 110px); overflow-y:auto;}
  @media (max-width:1000px){ .tg-panel{position:static; max-height:none;} }
  .tg-head{font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.04em; color:var(--text-muted);}
  .tg-kcal{font-size:30px; font-weight:600; line-height:1.1; margin:4px 0 12px; color:var(--text);}
  .tg-kcal small{font-size:12px; font-weight:500; color:var(--text-2); margin-left:5px;}
  .tg-macros{display:flex; flex-direction:column; gap:6px;}
  .tg-macro{display:flex; align-items:baseline; gap:8px; font-size:12.5px;}
  .tg-macro span{flex:1; color:var(--text-2);}
  .tg-macro b{font-weight:600;}
  .tg-macro i{font-style:normal; font-size:11px; color:var(--text-muted); min-width:30px; text-align:right;}
  .tg-target{margin-top:13px; padding-top:11px; border-top:1px solid var(--border);}
  .tg-target-row{display:flex; justify-content:space-between; gap:8px; font-size:12.5px; margin-bottom:4px;}
  .tg-target-row span{color:var(--text-2);}
  .tg-target-row.sub{font-size:11.5px; color:var(--text-muted);}
  .tg-target-row.sub b{font-weight:500;}
  .tg-warn{margin-top:11px; font-size:11.5px; color:var(--warn); line-height:1.45;}

  /* ---------- Confronto fra obiettivo e piano ---------- */
  .cf-box{margin-top:13px; padding-top:11px; border-top:1px solid var(--border);}
  .cf-titolo{display:flex; align-items:center; gap:6px; width:100%; background:none; border:none; padding:0 0 7px;
    font-family:inherit; font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.04em;
    color:var(--text-muted); cursor:pointer; text-align:left;}
  .cf-titolo:hover{color:var(--text-2);}
  .cf-titolo .chev{margin-left:auto; font-size:9px; opacity:.7;}
  table.cf-tab{width:100%; border-collapse:collapse; table-layout:fixed;}
  table.cf-tab col.c-lbl{width:29%;} table.cf-tab col.c-num{width:20%;} table.cf-tab col.c-perc{width:11%;}
  table.cf-tab th{font-size:8.5px; font-weight:700; text-transform:uppercase; letter-spacing:.02em;
    color:var(--text-muted); text-align:right; padding:0 0 3px 3px; white-space:nowrap; overflow:hidden;}
  table.cf-tab th:first-child{text-align:left; padding-left:0;}
  table.cf-tab td{padding:4px 0 4px 3px; text-align:right; font-family:var(--font-mono); font-size:10.5px;
    border-top:1px solid var(--border); white-space:nowrap;}
  table.cf-tab td:first-child{text-align:left; padding-left:0; font-family:inherit; font-size:11.5px;
    color:var(--text-2); white-space:normal; line-height:1.25;}
  table.cf-tab tr.cf-kcal td{font-size:11.5px; font-weight:600;}
  table.cf-tab td.cf-perc{font-weight:600;}
  .cf-u{font-size:9px; color:var(--text-muted); font-family:inherit;}
  .cf-inlinea{color:var(--good);} .cf-fuori{color:var(--warn);}
  table.cf-tab tr.cf-en td{border-top:none; padding:0 0 6px 6px; text-align:left;
    font-family:var(--font-mono); font-size:9.5px; color:var(--text-muted); white-space:normal; line-height:1.4;}
  .cf-en b{font-weight:600; color:var(--text-2);}
  .cf-nota{font-size:10.5px; color:var(--text-muted); line-height:1.45; margin-top:8px;}
  .report-confronto table.cf-tab{table-layout:auto;}
  .report-confronto table.cf-tab td{font-size:13.5px; padding:6px 0 6px 10px;}
  .report-confronto table.cf-tab td:first-child{font-size:14px;}
  .report-confronto table.cf-tab tr.cf-kcal td{font-size:15px;}
  .report-confronto table.cf-tab tr.cf-en td{font-size:12px; padding:0 0 9px 14px;}
  .report-confronto table.cf-tab th{font-size:10px;}
  .report-confronto .cf-u{font-size:11px;}

  /* ---------- Libreria rapida a sinistra del piano ---------- */
  .piano-layout.con-libreria{grid-template-columns:215px minmax(0,1fr) 272px; gap:16px;}
  @media (max-width:1380px){ .piano-layout.con-libreria{grid-template-columns:185px minmax(0,1fr) 250px; gap:12px;} }
  @media (max-width:1000px){ .piano-layout.con-libreria{grid-template-columns:1fr;} }
  .lib-panel{position:sticky; top:86px; background:var(--surface-2); border:1px solid var(--border);
    border-radius:13px; padding:12px; max-height:calc(100vh - 110px); display:flex; flex-direction:column; gap:8px;}
  @media (max-width:1000px){ .lib-panel{position:static; max-height:420px;} }
  .lib-head{display:flex; align-items:center; gap:4px;}
  .lib-head strong{flex:1; font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.04em; color:var(--text-muted);}
  .lib-panel input[type=text]{padding:6px 9px; font-size:12.5px;}
  .lib-lista{overflow-y:auto; display:flex; flex-direction:column; gap:3px; min-height:70px;}
  .lib-item{display:flex; flex-direction:column; gap:1px; align-items:flex-start; text-align:left;
    padding:6px 8px; border:1px solid var(--border); border-radius:8px; background:var(--bg-elev);
    font-family:inherit; font-size:12.5px; line-height:1.3; color:var(--text); cursor:grab;}
  .lib-item:hover{background:var(--surface-hover); border-color:var(--border-strong);}
  .lib-item:active{cursor:grabbing;}
  .lib-item small{font-family:var(--font-mono); font-size:10px; color:var(--text-muted);}
  .lib-item.dragging{opacity:.4;}
  .lib-nota{font-size:10.5px; color:var(--text-muted); line-height:1.45;}
  .meal-card.drop-food{outline:2px dashed var(--accent); outline-offset:3px; background:var(--accent-soft);}
  .lib-apri{margin-bottom:12px;}

  .voci-wrap{display:flex; flex-direction:column;}
  .voce-card.dragging{opacity:.45;}
  .voce-card.drop-before{box-shadow:0 -3px 0 0 var(--accent);}
  .voce-card.drop-after{box-shadow:0 3px 0 0 var(--accent);}
  .drag-grip{cursor:grab; color:var(--text-muted); font-size:15px; line-height:1; padding:4px 2px; user-select:none; flex:0 0 auto;}
  .drag-grip:active{cursor:grabbing;}
  .voce-ctrl{display:flex; gap:2px; align-items:center;}
  .meal-foot{display:flex; gap:8px; flex-wrap:wrap; align-items:center;}
  .meal-tot{display:flex; align-items:center; gap:12px; flex-wrap:wrap; padding:8px 10px; margin:2px 0 4px;
    border-top:1px solid var(--border); font-size:12px;}
  .meal-tot:empty{display:none;}
  .mt-lbl{font-size:10.5px; font-weight:700; text-transform:uppercase; letter-spacing:.04em; color:var(--text-muted);}
  .mt-vals{display:flex; gap:13px; flex-wrap:wrap;}
  .mt-vals span{display:flex; align-items:baseline; gap:3px;}
  .mt-vals b{font-family:var(--font-mono); font-size:13px; font-weight:600;}
  .mt-vals i{font-style:normal; font-size:10.5px; color:var(--text-muted);}
  .mt-warn{margin-left:auto; color:var(--warn); font-size:11px; cursor:help;}
  .peso-unita{display:flex; align-items:center; gap:9px; flex-wrap:wrap; margin-top:8px; padding:7px 10px;
    background:var(--surface-2); border-radius:8px;}
  .peso-unita.manca{background:var(--warn-soft);}
  .peso-unita label{font-size:11.5px; font-weight:600; color:var(--text-2); flex:0 0 auto;}
  .peso-unita input{flex:0 0 96px; padding:5px 8px; font-size:12.5px;}
  .peso-unita .hint{font-size:11.5px; color:var(--text-muted); flex:1 1 180px;}
  .peso-unita.manca .hint{color:var(--warn);}
  @media (max-width:720px){ .voce-row{grid-template-columns:1fr 1fr; grid-template-areas:"g g" "a a" "b c" "d d" "e e";}
    .voce-row > .drag-grip{grid-area:g; justify-self:start;}
    .voce-row > .voce-ctrl{grid-area:e; justify-self:end;} }

  /* ---------- Ricettario ---------- */
  .ric-box{border:1px solid var(--border); border-radius:11px; padding:13px 14px; background:var(--bg-elev); margin-bottom:14px;}
  .ric-head{display:flex; align-items:center; justify-content:space-between; gap:10px; margin-bottom:10px;}
  .ric-row{display:flex; align-items:center; gap:8px; padding:7px 0; border-bottom:1px solid var(--border);}
  .ric-row:last-child{border-bottom:none;}
  .ric-nome{flex:1; min-width:0; font-size:13px; font-weight:600; display:flex; flex-direction:column; gap:1px;}
  .ric-nome span{font-weight:400; font-size:11px; color:var(--text-muted);}
  .ric-g{flex:0 0 76px; padding:6px 8px; font-size:12.5px; text-align:right;}
  .ric-totali{margin-top:13px; border-top:1px solid var(--border); padding-top:11px; display:flex; flex-direction:column; gap:9px;}
  .ric-tot-row{display:flex; align-items:center; gap:12px; flex-wrap:wrap;}
  .ric-tot-lbl{flex:0 0 130px; font-size:12px; font-weight:600; display:flex; flex-direction:column; gap:1px;}
  .ric-tot-lbl span{font-weight:400; font-size:10.5px; color:var(--text-muted);}
  .ric-tot-vals{display:flex; gap:12px; flex-wrap:wrap;}
  .ric-tot-vals span{display:flex; align-items:baseline; gap:3px; font-size:11.5px;}
  .ric-tot-vals b{font-family:var(--font-mono); font-size:13.5px; font-weight:600;}
  .ric-tot-vals i{font-style:normal; color:var(--text-muted);}
  .link-btn{background:none; border:none; color:var(--accent); font-weight:600; font-size:12px; cursor:pointer; padding:2px 3px;}
  .link-btn:hover{text-decoration:underline;}
  .meal-actions{display:flex; justify-content:flex-end; margin:-4px 0 6px;}

  /* ---------- Report ---------- */
  .report-layout{display:flex; gap:28px; flex-wrap:wrap; align-items:flex-start;}
  .donut-wrap{flex:0 0 200px; display:flex; flex-direction:column; align-items:center; gap:14px;}
  .legend{display:flex; flex-direction:column; gap:8px; width:100%;}
  .legend-row{display:flex; align-items:center; gap:8px; font-size:12.5px;}
  .legend-dot{width:10px;height:10px;border-radius:3px; flex-shrink:0;}
  .legend-row .lname{flex:1; color:var(--text-2);}
  .legend-row .lval{font-family:var(--font-mono); font-weight:600;}
  .report-table{flex:1; min-width:260px;}
  .unmatched{margin-top:14px; padding:11px 13px; background:var(--warn-soft); color:var(--warn); border-radius:10px; font-size:12.5px; line-height:1.5;}

  /* ---------- Modal ---------- */
  .modal-overlay{position:fixed; inset:0; background:rgba(10,14,11,0.45); display:flex; align-items:center; justify-content:center;
    padding:20px; z-index:50; backdrop-filter:blur(1px);}
  .modal{background:var(--surface); border-radius:16px; border:1px solid var(--border); box-shadow:var(--shadow);
    width:100%; max-width:460px; max-height:88vh; overflow-y:auto; padding:24px;}
  .modal h3{font-size:17px; margin-bottom:16px;}
  .modal-actions{display:flex; justify-content:flex-end; gap:10px; margin-top:18px;}

  /* ---------- Toast ---------- */
  #toast-root{position:fixed; bottom:20px; left:50%; transform:translateX(-50%); z-index:80; display:flex; flex-direction:column; gap:8px; align-items:center;}
  .toast{background:var(--text); color:var(--bg); padding:10px 18px; border-radius:99px; font-size:13px; font-weight:600;
    box-shadow:var(--shadow); animation:toast-in .15s ease-out;}
  .toast.err{background:var(--danger);}
  @keyframes toast-in{from{opacity:0; transform:translateY(6px);} to{opacity:1; transform:translateY(0);}}

  .save-bar{display:flex; align-items:center; gap:12px; justify-content:flex-end; margin-top:4px;}
  .save-bar .saved-note{font-size:12px; color:var(--text-muted);}
  .sum-warn{color:var(--danger); font-weight:600;}
  .sum-ok{color:var(--good); font-weight:600;}
  .subtle{color:var(--text-muted); font-size:12.5px;}
  .section-divider{border:none; border-top:1px solid var(--border); margin:22px 0;}

  /* ---------- Foglio consegnato al paziente ----------
     Tutte le misure sono espresse in em rispetto a --ps-base: cambiando quella
     sola variabile il foglio cresce o si stringe restando proporzionato.
     La misura giusta la sceglie adattaScalaStampa() in base a quanto c'è
     scritto, così il testo è il più grande possibile senza sprecare pagine. */
  #print-sheet{display:none;}
  @media print{
    #gate, #app, #modal-root, #toast-root{ display:none !important; }
    html, body{ background:#fff !important; }
    #print-sheet.active{ display:block !important; }
    #print-sheet{ background:#fff; padding:0; }
    @page{ margin:15mm 14mm; }
  }
  #print-sheet{
    --ps-base:14px; --ps-verde:#2E6B52; --ps-verde-scuro:#1B4433;
    --ps-tenue:#F2F6F1; --ps-riga:#D8E0D6; --ps-grigio:#5C6961;
    font-family:var(--font-body); font-size:var(--ps-base); line-height:1.5; color:#1D2621;
  }
  .ps-header{display:flex; justify-content:space-between; align-items:flex-end; gap:1.6em;
    border-bottom:2.5px solid var(--ps-verde); padding-bottom:0.85em; margin-bottom:0.45em;}
  .ps-logo{display:block; height:5.2em; width:auto;}
  .ps-titolo{font-family:var(--font-display); font-size:0.82em; font-weight:600; letter-spacing:.14em;
    text-transform:uppercase; color:var(--ps-verde); margin-top:0.7em;}
  .ps-meta{text-align:right; line-height:1.4;}
  .ps-meta .ps-nome{font-family:var(--font-display); font-size:1.6em; font-weight:600; color:#16201A;}
  .ps-meta .ps-sotto{font-size:0.84em; color:var(--ps-grigio); margin-top:0.15em;}
  .ps-rule{height:3px; background:var(--ps-verde); width:3.8em; margin:0 0 1.3em; border-radius:2px;}

  .ps-scheda{display:flex; gap:0.9em; align-items:stretch; margin-bottom:1.3em; break-inside:avoid;}
  .ps-dati{flex:0 0 auto; display:flex; gap:0.6em;}
  .ps-cella{background:var(--ps-tenue); border-radius:0.6em; padding:0.6em 1em; min-width:5.4em;}
  .ps-cella span{display:block; font-size:0.64em; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:var(--ps-grigio);}
  .ps-cella strong{display:block; font-family:var(--font-mono); font-size:1.28em; font-weight:600; color:#16201A; margin-top:0.15em;}
  .ps-cella strong small{font-family:var(--font-body); font-size:0.6em; font-weight:500; color:var(--ps-grigio); margin-left:0.15em;}
  .ps-obiettivo{flex:1; min-width:0; background:var(--ps-tenue); border-radius:0.6em; padding:0.6em 1em;
    display:flex; flex-direction:column; justify-content:center;}
  .ps-obiettivo span{font-size:0.64em; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:var(--ps-grigio);}
  .ps-obiettivo strong{font-size:0.95em; font-weight:600; color:#16201A; line-height:1.4; margin-top:0.2em;}

  .ps-energia{border:1px solid var(--ps-riga); border-radius:0.8em; padding:1.05em 1.25em; margin-bottom:1.5em; break-inside:avoid;}
  .ps-goaltitle{font-size:0.68em; font-weight:700; text-transform:uppercase; letter-spacing:.08em; color:var(--ps-verde); margin-bottom:0.7em;}
  .ps-goalrow + .ps-goalrow{margin-top:1.05em; padding-top:1em; border-top:1px dashed var(--ps-riga);}
  .ps-goalbody{display:flex; align-items:center; gap:1.8em;}
  .ps-kcal{flex:0 0 auto; text-align:center; padding-right:1.5em; border-right:1px solid var(--ps-riga);}
  .ps-kcal strong{display:block; font-family:var(--font-mono); font-size:2.3em; font-weight:600; color:var(--ps-verde-scuro); line-height:1;}
  .ps-kcal span{display:block; font-size:0.66em; font-weight:700; letter-spacing:.1em; text-transform:uppercase; color:var(--ps-grigio); margin-top:0.45em;}
  .ps-macro{flex:1; display:flex; flex-direction:column; gap:0.5em; min-width:0;}
  .ps-macro-riga{display:flex; align-items:center; gap:0.65em; font-size:0.95em; color:#2A342E;}
  .ps-macro-riga .ps-dot{width:0.65em; height:0.65em; border-radius:2px; flex:none;}
  .ps-macro-riga b{margin-left:auto; font-family:var(--font-mono); font-size:1.05em; color:#16201A;}
  .ps-barra{height:0.38em; border-radius:3px; background:var(--ps-riga); overflow:hidden; display:flex; margin-top:0.3em;}
  .ps-barra i{display:block; height:100%;}
  .ps-torta{flex:0 0 auto;}
  .ps-torta svg{display:block; width:7.6em; height:auto;}

  .ps-day{margin-bottom:1.4em;}
  .ps-day h3{break-after:avoid;}
  .ps-day h3{font-family:var(--font-display); font-size:1.18em; color:var(--ps-verde-scuro); margin:0 0 0.6em;
    display:flex; align-items:baseline; gap:0.5em; border-bottom:1.5px solid var(--ps-verde); padding-bottom:0.3em;}
  .ps-daykcal{margin-left:auto; font-family:var(--font-mono); font-weight:500; font-size:0.72em; color:var(--ps-grigio);}
  .ps-daykcal-mono{font-family:var(--font-mono); font-size:0.78em; color:var(--ps-grigio); margin-bottom:0.7em;}
  .ps-meal{margin-bottom:1em; padding-left:0.85em; border-left:2.5px solid var(--ps-tenue); break-inside:avoid;}
  .ps-meal h4{font-family:var(--font-body); font-size:0.76em; font-weight:700; letter-spacing:.09em;
    text-transform:uppercase; color:var(--ps-verde); margin:0 0 0.45em;}
  .ps-meal-alt{margin-left:0.9em; border-left-style:dashed;}
  .ps-oppure{font-weight:500; color:var(--ps-grigio);}
  .ps-item{display:flex; gap:1em; align-items:baseline; justify-content:space-between;
    font-size:1em; padding:0.22em 0; color:#1D2621; border-bottom:1px dotted #E6EBE5;}
  .ps-item:last-child{border-bottom:none;}
  .ps-qty{font-family:var(--font-mono); font-weight:600; flex:0 1 auto; max-width:48%; text-align:right;
    font-variant-numeric:tabular-nums; color:var(--ps-verde-scuro);}
  .ps-cibo{flex:1 1 auto; min-width:0;}
  .ps-note{color:var(--ps-grigio); font-size:0.85em; font-style:italic;}
  .ps-alt{font-size:0.92em; color:#3A443E; padding-left:1em; border-bottom:1px dotted #E6EBE5;}
  .ps-alt .ps-qty{font-weight:500;}
  .ps-comp-testa .ps-cibo{font-weight:600;}
  .ps-item.ps-sub{padding-left:1.4em; font-size:0.95em;}
  .ps-item.ps-sub-alt{padding-left:2.4em; font-size:0.9em; color:#3A443E;}
  .ps-alt-et{display:inline-block; min-width:6.6em; font-size:0.78em; font-weight:700; letter-spacing:.04em;
    text-transform:uppercase; color:var(--ps-verde); margin-right:0.4em;}
  .ps-mealnote{font-size:0.85em; color:#3A443E; margin-top:0.5em; padding:0.5em 0.8em;
    background:var(--ps-tenue); border-radius:0.5em; line-height:1.5;}
  .ps-empty{color:#98A29B; font-size:0.92em;}
  .ps-daytag{display:inline-block; font-size:0.64em; font-weight:700; letter-spacing:.06em; background:var(--ps-verde);
    color:#fff; border-radius:3px; padding:0.1em 0.4em; vertical-align:middle;}

  .ps-racc{margin-top:1.4em; break-inside:avoid;}
  .ps-racc h3{font-family:var(--font-display); font-size:1.06em; color:var(--ps-verde-scuro); margin:0 0 0.45em;
    border-bottom:1.5px solid var(--ps-verde); padding-bottom:0.25em;}
  .ps-racc p{font-size:0.95em; line-height:1.6; color:#2A342E; margin:0 0 0.4em;}

  .ps-comp{margin-top:1.4em;}
  .ps-comp table, .ps-comp h3 + table{break-inside:avoid;}
  .ps-comp h3{break-after:avoid;}
  .ps-comp h3{font-family:var(--font-display); font-size:1.06em; color:var(--ps-verde-scuro); margin:0 0 0.45em;
    border-bottom:1.5px solid var(--ps-verde); padding-bottom:0.25em;}
  .ps-comp table{width:100%; border-collapse:collapse; font-size:0.9em;}
  .ps-comp th{text-align:left; font-size:0.72em; text-transform:uppercase; letter-spacing:.07em; color:var(--ps-grigio);
    font-weight:700; padding:0.3em 0.6em; border-bottom:1px solid var(--ps-riga);}
  .ps-comp td{padding:0.35em 0.6em; border-bottom:1px solid #EDF1EC; color:#1D2621;}
  .ps-comp tr:last-child td{border-bottom:none;}
  .ps-comp td.n{font-family:var(--font-mono); text-align:right; font-variant-numeric:tabular-nums;}
  .ps-comp td.var{font-family:var(--font-mono); text-align:right; font-variant-numeric:tabular-nums; font-weight:600;}
  .ps-comp .su{color:#B4453A;} .ps-comp .giu{color:#1E7A55;}
  .ps-comp table + table{margin-top:0.8em;}
  .ps-comp .ps-segmento{font-size:0.72em; color:var(--ps-grigio); margin:0.7em 0 0.25em; letter-spacing:.05em; text-transform:uppercase;}
  .ps-graf{margin-top:1em; break-inside:avoid;}
  .ps-graf svg{width:100%; height:auto; display:block;}
  .ps-graf .ps-legenda{font-size:0.72em; color:var(--ps-grigio); margin-top:0.3em; line-height:1.5;}

  /* ---------- Valutazione auxologica ---------- */
  .auxo-testa{display:flex; flex-wrap:wrap; align-items:baseline; gap:8px 14px; margin:-6px 0 14px;}
  .auxo-chip{font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.04em; color:var(--accent-strong);
    background:var(--accent-soft); padding:3px 9px; border-radius:99px;}
  .auxo-eta{font-size:13px; color:var(--text-2);}
  .auxo-tiles{display:grid; grid-template-columns:repeat(auto-fit,minmax(230px,1fr)); gap:12px; margin-bottom:14px;}
  .auxo-tile{display:flex; flex-direction:column; gap:3px; text-align:left; font-family:inherit; color:var(--text);
    background:var(--surface-2); border:1.5px solid transparent; border-radius:12px; padding:12px 15px; cursor:pointer;}
  .auxo-tile:hover{border-color:var(--border-strong);}
  .auxo-tile.attivo{border-color:var(--accent); background:var(--accent-soft);}
  .auxo-tile .lbl{font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.04em; color:var(--text-muted);}
  .auxo-val{font-size:25px; font-weight:600; line-height:1.15;}
  .auxo-val small{font-size:12px; font-weight:500; color:var(--text-2);}
  .auxo-riga{display:flex; gap:18px; flex-wrap:wrap; font-size:12.5px; color:var(--text-2);}
  .auxo-riga b{font-weight:700; color:var(--text); margin-left:3px;}
  .auxo-graf svg{width:100%; height:auto; display:block;}
  .auxo-legenda{display:flex; flex-wrap:wrap; gap:6px 16px; font-size:11.5px; color:var(--text-muted); margin-top:6px;}
  .auxo-legenda span{display:inline-flex; align-items:center; gap:6px;}
  .auxo-legenda i{display:inline-block; width:18px; height:0; border-top:1.5px solid var(--text-muted);}
  .auxo-legenda i.lg-mediana{border-top:2px solid var(--text-2);}
  .auxo-legenda i.lg-tratto{border-top:1.5px dashed var(--text-muted);}
  .auxo-legenda i.lg-banda{height:9px; border:none; background:var(--accent-soft); border-radius:2px;}
  .auxo-legenda i.lg-punto{width:10px; height:10px; border:none; border-radius:50%; background:var(--accent);}
  .auxo-avviso{margin-top:12px; padding:10px 13px; border-radius:10px; background:var(--warn-soft); color:var(--warn); font-size:12.5px; line-height:1.5;}
  .auxo-tab td, .auxo-tab th{white-space:nowrap;}
  .auxo-tab tr.auxo-fuori td{color:var(--text-muted);}
  .auxo-tab td.auxo-rif{font-size:11px; color:var(--text-muted); font-family:var(--font-mono);}
  /* sul foglio */
  .ps-auxo-sotto{font-size:0.8em; color:var(--ps-grigio); margin:-0.2em 0 0.6em;}
  .ps-auxo-celle{display:grid; grid-template-columns:repeat(7, minmax(0,1fr)); gap:0.45em; margin-bottom:0.8em;}
  .ps-auxo-celle .ps-cella{min-width:0; padding:0.5em 0.6em;}
  .ps-auxo-celle .ps-cella span{font-size:0.58em; line-height:1.25; min-height:2.5em;}
  .ps-auxo-celle .ps-cella strong{font-size:1.08em;}
  .ps-auxo-grafici{display:flex; gap:1em; margin-top:0.8em; break-inside:avoid;}
  .ps-auxo-graf{flex:1 1 0; margin:0; min-width:0;}
  .ps-auxo-graf figcaption{font-size:0.72em; font-weight:700; text-transform:uppercase; letter-spacing:.07em; color:var(--ps-verde); margin-bottom:0.3em;}
  .ps-auxo-graf svg{width:100%; height:auto; display:block;}
  .ps-auxo-nota{font-size:0.72em; color:#8A948C; margin-top:0.4em;}
  .local-badge{font-size:10px; font-weight:700; text-transform:uppercase; letter-spacing:.04em; color:var(--accent-strong); background:var(--accent-soft); padding:2px 8px; border-radius:99px; display:inline-block; margin-top:2px;}
