/* Dimensionamento diffusione — stile isolato sotto .dd-app per non interferire con il tema WordPress.
   Stessa identità del selettore ventilatori: strumento tecnico da ufficio progettazione aeraulica,
   acciaio zincato e inchiostro blu-grafite, un solo accento "condotto" blu, stati semantici separati. */
@font-face { font-family: "IBM Plex Sans"; font-style: normal; font-weight: 400; font-display: swap; src: url("../fonts/ibm-plex-sans-latin-400-normal.woff2") format("woff2"); }
@font-face { font-family: "IBM Plex Sans"; font-style: normal; font-weight: 500; font-display: swap; src: url("../fonts/ibm-plex-sans-latin-500-normal.woff2") format("woff2"); }
@font-face { font-family: "IBM Plex Sans"; font-style: normal; font-weight: 600; font-display: swap; src: url("../fonts/ibm-plex-sans-latin-600-normal.woff2") format("woff2"); }
@font-face { font-family: "IBM Plex Sans"; font-style: normal; font-weight: 700; font-display: swap; src: url("../fonts/ibm-plex-sans-latin-700-normal.woff2") format("woff2"); }
@font-face { font-family: "IBM Plex Sans Condensed"; font-style: normal; font-weight: 500; font-display: swap; src: url("../fonts/ibm-plex-sans-condensed-latin-500-normal.woff2") format("woff2"); }
@font-face { font-family: "IBM Plex Sans Condensed"; font-style: normal; font-weight: 600; font-display: swap; src: url("../fonts/ibm-plex-sans-condensed-latin-600-normal.woff2") format("woff2"); }
@font-face { font-family: "IBM Plex Sans Condensed"; font-style: normal; font-weight: 700; font-display: swap; src: url("../fonts/ibm-plex-sans-condensed-latin-700-normal.woff2") format("woff2"); }

.dd-app {
  --dd-ink: #18232d;
  --dd-ink-2: #3f4f5c;
  --dd-ink-3: #66757f;
  --dd-line: #d5dde3;
  --dd-line-2: #e6ecf0;
  --dd-paper: #ffffff;
  --dd-zinc: #f2f5f7;
  --dd-zinc-2: #e9eef2;
  --dd-field: #b8c4cd;
  --dd-accent: #135f8f;
  --dd-accent-2: #0d4a70;
  --dd-accent-soft: #e3eff7;
  --dd-on-accent: #ffffff;
  --dd-ok: #1d7a4b;
  --dd-ok-soft: #e2f3ea;
  --dd-warn: #a35c00;
  --dd-warn-soft: #fbefdc;
  --dd-bad: #b3261e;
  --dd-bad-soft: #fbe5e3;
  --dd-req: #c2410c;
  --dd-scrim: rgba(16, 26, 34, .55);
  --dd-font: "IBM Plex Sans", "Segoe UI", system-ui, -apple-system, sans-serif;
  --dd-font-cond: "IBM Plex Sans Condensed", "IBM Plex Sans", "Arial Narrow", system-ui, sans-serif;
  --dd-r: 6px;
  --dd-s1: 4px; --dd-s2: 8px; --dd-s3: 12px; --dd-s4: 16px; --dd-s5: 24px; --dd-s6: 32px;
  font-family: var(--dd-font);
  font-size: 15px;
  line-height: 1.45;
  color: var(--dd-ink);
  background: var(--dd-paper);
  -webkit-font-smoothing: antialiased;
  text-align: left;
  box-sizing: border-box;
  padding: var(--dd-s4) 0;
}
.dd-app[data-dd-theme="dark"] {
  --dd-ink: #e3eaef; --dd-ink-2: #b8c5cf; --dd-ink-3: #8b9aa5;
  --dd-line: #2c3a45; --dd-line-2: #22303a; --dd-paper: #121a20; --dd-zinc: #182229; --dd-zinc-2: #1f2b33; --dd-field: #3a4a56;
  --dd-accent: #5aa9da; --dd-accent-2: #86c2e7; --dd-accent-soft: #17324a; --dd-on-accent: #0b141a;
  --dd-ok: #4cc38a; --dd-ok-soft: #133526; --dd-warn: #f0a450; --dd-warn-soft: #3a2a13; --dd-bad: #ff8a7d; --dd-bad-soft: #3d1c19; --dd-req: #ff8a50;
  --dd-scrim: rgba(0, 0, 0, .65);
  color-scheme: dark;
}
@media (prefers-color-scheme: dark) {
  .dd-app[data-dd-theme="auto"] {
    --dd-ink: #e3eaef; --dd-ink-2: #b8c5cf; --dd-ink-3: #8b9aa5;
    --dd-line: #2c3a45; --dd-line-2: #22303a; --dd-paper: #121a20; --dd-zinc: #182229; --dd-zinc-2: #1f2b33; --dd-field: #3a4a56;
    --dd-accent: #5aa9da; --dd-accent-2: #86c2e7; --dd-accent-soft: #17324a; --dd-on-accent: #0b141a;
    --dd-ok: #4cc38a; --dd-ok-soft: #133526; --dd-warn: #f0a450; --dd-warn-soft: #3a2a13; --dd-bad: #ff8a7d; --dd-bad-soft: #3d1c19; --dd-req: #ff8a50;
    --dd-scrim: rgba(0, 0, 0, .65);
    color-scheme: dark;
  }
}
.dd-app *, .dd-app *::before, .dd-app *::after { box-sizing: border-box; }
/* reset a specificità zero: non sovrascrive i componenti sotto */
/* Protezione dagli stili del tema (es. temi scuri con pulsanti e testi bianchi): i reset hanno specificità (0,1,1)
   e tutti i componenti sotto sono prefissati con .dd-app, quindi vincono sempre sul tema. */
.dd-app :is(button, input, select, textarea) { font: inherit; color: var(--dd-ink); background: transparent; letter-spacing: normal; text-transform: none; text-shadow: none; box-shadow: none; margin: 0; border-radius: 0; min-height: 0; min-width: 0; height: auto; -webkit-text-fill-color: currentColor; opacity: 1; }
.dd-app :is(div, section, header, footer, nav, article, aside, form, details, figure, p, span, label, li, dt, dd, th, td, strong, b, em, small, summary, output, sup) { color: inherit; font-family: inherit; letter-spacing: inherit; text-transform: inherit; text-shadow: none; background-color: transparent; }
.dd-app :is(div, section, header, footer, nav, article, aside, form, details, p, span, label, li, dt, dd, th, td, strong, b, em, summary, output) { font-size: inherit; line-height: inherit; }
.dd-app :is(p, table, ul, ol) { margin: 0; }
.dd-app :is(table, thead, tbody, tr, th, td) { border: 0; background-color: transparent; }
.dd-app :is(img) { max-width: 100%; height: auto; border: 0; box-shadow: none; border-radius: 0; padding: 0; background: transparent; }
.dd-app :is(h2, h3, h4) { font-family: var(--dd-font-cond); color: var(--dd-ink); margin: 0; padding: 0; line-height: 1.15; text-wrap: balance; letter-spacing: 0; text-transform: none; font-style: normal; }
.dd-app .dd-num { font-variant-numeric: tabular-nums; }
.dd-app :focus-visible { outline: 2px solid var(--dd-accent); outline-offset: 2px; }
.dd-app[data-dd-root] { container-type: inline-size; container-name: ddapp; }

/* ---------- Testata ---------- */
.dd-app .dd-head { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: var(--dd-s3); padding-bottom: var(--dd-s4); border-bottom: 2px solid var(--dd-ink); margin-bottom: var(--dd-s4); }
.dd-app .dd-head h2 { font-size: 30px; font-weight: 700; }
.dd-app .dd-head p { color: var(--dd-ink-2); max-width: 66ch; margin-top: 4px; }
.dd-app .dd-eyebrow { font-family: var(--dd-font-cond); font-weight: 600; font-size: 12px; letter-spacing: .12em; text-transform: uppercase; color: var(--dd-accent); }
.dd-app .dd-head-meta { font-size: 13px; color: var(--dd-ink-3); }

/* ---------- Categorie ---------- */
.dd-app .dd-cats { display: flex; flex-wrap: wrap; gap: 6px; padding: 2px; margin-bottom: var(--dd-s4); }
.dd-app .dd-cat { flex: none; display: inline-flex; align-items: center; gap: 8px; border: 1px solid var(--dd-line); background: var(--dd-paper); color: var(--dd-ink); border-radius: 999px; padding: 7px 14px; cursor: pointer; font-family: var(--dd-font-cond); font-weight: 600; font-size: 15px; line-height: 1.2; white-space: nowrap; }
.dd-app .dd-cat:hover { border-color: var(--dd-ink-3); }
.dd-app .dd-cat[aria-selected="true"] { background: var(--dd-ink); border-color: var(--dd-ink); color: var(--dd-paper); }
.dd-app .dd-cat .dd-cat-n { font-family: var(--dd-font); font-weight: 500; font-size: 12px; color: var(--dd-ink-3); font-variant-numeric: tabular-nums; }
.dd-app .dd-cat[aria-selected="true"] .dd-cat-n { color: inherit; opacity: .7; }

/* ---------- Griglia principale ---------- */
.dd-app .dd-top { display: grid; grid-template-columns: minmax(300px, 400px) minmax(0, 1fr); gap: var(--dd-s5); align-items: start; }
.dd-app .dd-panel { background: var(--dd-zinc); border: 1px solid var(--dd-line); border-radius: var(--dd-r); padding: var(--dd-s4); min-width: 0; }
.dd-app .dd-panel-title { display: flex; justify-content: space-between; align-items: baseline; gap: var(--dd-s2); margin-bottom: var(--dd-s3); flex-wrap: wrap; }
.dd-app .dd-panel-title h3 { font-size: 19px; font-weight: 700; }
.dd-app .dd-linkbtn { background: none; border: 0; padding: 2px 0; color: var(--dd-accent); cursor: pointer; font-size: 13px; text-decoration: underline; text-underline-offset: 2px; }
.dd-app .dd-linkbtn:hover { color: var(--dd-accent-2); }

/* Form dati */
.dd-app .dd-duty { background: var(--dd-paper); border: 1px solid var(--dd-line); border-radius: var(--dd-r); padding: var(--dd-s3); display: grid; gap: var(--dd-s3); }
.dd-app .dd-field > label, .dd-app .dd-field > .dd-label { display: block; font-family: var(--dd-font-cond); font-weight: 600; font-size: 14px; margin-bottom: 4px; }
.dd-app .dd-field label small, .dd-app .dd-label small { font-family: var(--dd-font); font-weight: 400; color: var(--dd-ink-3); font-size: 12px; }
.dd-app .dd-inrow { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 6px; align-items: stretch; }
.dd-app .dd-inputwrap { display: flex; align-items: stretch; border: 1px solid var(--dd-field); border-radius: 4px; background: var(--dd-paper); overflow: hidden; min-width: 0; }
.dd-app .dd-inputwrap:focus-within { border-color: var(--dd-accent); box-shadow: 0 0 0 2px var(--dd-accent-soft); }
.dd-app .dd-inputwrap input { flex: 1; min-width: 0; width: 100%; border: 0; padding: 9px 10px; font-size: 18px; font-weight: 600; background: transparent; color: var(--dd-ink); font-variant-numeric: tabular-nums; outline: none; box-shadow: none; height: auto; }
.dd-app .dd-inputwrap .dd-unit { display: flex; align-items: center; padding: 0 10px; background: var(--dd-zinc-2); color: var(--dd-ink-2); font-size: 14px; border-left: 1px solid var(--dd-line); white-space: nowrap; }
.dd-app .dd-inputwrap.dd-computed { border-color: var(--dd-accent); background: var(--dd-accent-soft); }
.dd-app .dd-inputwrap.dd-computed input { color: var(--dd-accent-2); }
.dd-app .dd-inputwrap.dd-locked input { color: var(--dd-ink-3); }
.dd-app .dd-calc { border: 1px solid var(--dd-accent); background: var(--dd-paper); color: var(--dd-accent); border-radius: 4px; padding: 0 12px; cursor: pointer; font-family: var(--dd-font-cond); font-weight: 700; font-size: 13px; letter-spacing: .06em; text-transform: uppercase; white-space: nowrap; min-height: 42px; }
.dd-app .dd-calc:hover { background: var(--dd-accent); color: var(--dd-on-accent); }
.dd-app .dd-calc[disabled] { opacity: .4; cursor: not-allowed; background: var(--dd-paper); color: var(--dd-accent); }
.dd-app .dd-field.dd-has-err .dd-inputwrap { border-color: var(--dd-bad); }
.dd-app .dd-err { color: var(--dd-bad); font-size: 13px; margin-top: 4px; }
.dd-app .dd-hint { font-size: 12.5px; color: var(--dd-ink-3); margin-top: 4px; }
.dd-app .dd-pair { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: var(--dd-s3); }
.dd-app .dd-select { width: 100%; border: 1px solid var(--dd-field); border-radius: 4px; padding: 9px 10px; background: var(--dd-paper); color: var(--dd-ink); font-size: 15px; min-height: 42px; height: auto; }
.dd-app .dd-select:focus { border-color: var(--dd-accent); outline: none; box-shadow: 0 0 0 2px var(--dd-accent-soft); }
.dd-app .dd-actions { display: flex; gap: var(--dd-s2); flex-wrap: wrap; align-items: center; }
.dd-app .dd-btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; border: 1px solid var(--dd-line); background: var(--dd-paper); color: var(--dd-ink); border-radius: 4px; padding: 8px 14px; cursor: pointer; font-weight: 600; font-size: 14px; line-height: 1.2; text-decoration: none; }
.dd-app .dd-btn:hover { border-color: var(--dd-ink-3); }
.dd-app .dd-btn-primary { background: var(--dd-accent); border-color: var(--dd-accent); color: var(--dd-on-accent); }
.dd-app .dd-btn-primary:hover { background: var(--dd-accent-2); border-color: var(--dd-accent-2); }
.dd-app .dd-btn-lg { padding: 11px 22px; font-size: 16px; }
.dd-app .dd-btn-sm { padding: 5px 10px; font-size: 13px; }
.dd-app .dd-btn[disabled] { opacity: .5; cursor: not-allowed; }
.dd-app .dd-note { font-size: 12.5px; color: var(--dd-ink-3); }
.dd-app .dd-calcinfo { margin: calc(-1 * var(--dd-s1)) 0 0; padding: 7px 10px; font-size: 12.5px; line-height: 1.45; color: var(--dd-ink-2); background: var(--dd-zinc); border-left: 3px solid var(--dd-accent); border-radius: 0 4px 4px 0; }
.dd-app .dd-calcinfo[hidden] { display: none !important; }
.dd-app .dd-check { display: inline-flex; align-items: center; gap: 6px; font-size: 13.5px; color: var(--dd-ink-2); cursor: pointer; margin-right: var(--dd-s2); }
.dd-app .dd-check input[type=checkbox] { appearance: auto; -webkit-appearance: checkbox; width: 15px; height: 15px; margin: 0; padding: 0; accent-color: var(--dd-accent); cursor: pointer; }
.dd-app .dd-chosen { display: flex; align-items: center; gap: 10px; background: var(--dd-paper); border: 1px solid var(--dd-line); border-radius: var(--dd-r); padding: 6px 8px; }
.dd-app .dd-chosen img { width: 54px; height: 42px; object-fit: contain; }
.dd-app .dd-chosen strong { font-family: var(--dd-font-cond); font-size: 17px; display: block; line-height: 1.1; }
.dd-app .dd-chosen span { font-size: 12.5px; color: var(--dd-ink-2); }

.dd-app .dd-seg { display: inline-flex; flex-wrap: wrap; border: 1px solid var(--dd-line); border-radius: 4px; overflow: hidden; background: var(--dd-paper); }
.dd-app .dd-seg button { border: 0; background: var(--dd-paper); color: var(--dd-ink); padding: 6px 11px; cursor: pointer; font-size: 13.5px; line-height: 1.25; }
.dd-app .dd-seg button + button { border-left: 1px solid var(--dd-line); }
.dd-app .dd-seg button[aria-pressed="true"] { background: var(--dd-ink); color: var(--dd-paper); }

/* Filtri */
.dd-app .dd-filters { display: grid; gap: var(--dd-s3); margin-top: var(--dd-s4); }
.dd-app .dd-fgroup { border-top: 1px solid var(--dd-line); padding-top: var(--dd-s3); }
.dd-app .dd-fgroup > summary { list-style: none; cursor: pointer; display: flex; justify-content: space-between; align-items: center; font-family: var(--dd-font-cond); font-weight: 600; font-size: 14px; letter-spacing: .04em; text-transform: uppercase; color: var(--dd-ink-2); }
.dd-app .dd-fgroup > summary::-webkit-details-marker { display: none; }
.dd-app .dd-fgroup > summary::after { content: "+"; font-size: 18px; line-height: 1; color: var(--dd-ink-3); }
.dd-app .dd-fgroup[open] > summary::after { content: "\2212"; }
.dd-app .dd-fgroup .dd-count { font-family: var(--dd-font); font-weight: 600; font-size: 11px; background: var(--dd-accent); color: var(--dd-on-accent); border-radius: 9px; padding: 1px 7px; margin-left: 6px; letter-spacing: 0; }
.dd-app .dd-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: var(--dd-s2); }
.dd-app .dd-chip { border: 1px solid var(--dd-field); background: var(--dd-paper); color: var(--dd-ink); border-radius: 999px; padding: 4px 11px; font-size: 13.5px; cursor: pointer; line-height: 1.3; }
.dd-app .dd-chip:hover { border-color: var(--dd-accent); }
.dd-app .dd-chip[aria-pressed="true"] { background: var(--dd-ink); border-color: var(--dd-ink); color: var(--dd-paper); }
.dd-app .dd-chip .dd-chip-n { color: var(--dd-ink-3); font-size: 12px; margin-left: 4px; font-variant-numeric: tabular-nums; }
.dd-app .dd-chip[aria-pressed="true"] .dd-chip-n { color: inherit; opacity: .7; }
.dd-app .dd-range { display: grid; grid-template-columns: 1fr auto; gap: var(--dd-s2); align-items: center; margin-top: var(--dd-s2); }
.dd-app .dd-range input[type=range] { width: 100%; accent-color: var(--dd-accent); }
.dd-app .dd-range output { font-variant-numeric: tabular-nums; font-weight: 600; font-size: 13.5px; min-width: 84px; text-align: right; }
.dd-app .dd-range-l { font-size: 13px; color: var(--dd-ink-2); margin-top: var(--dd-s2); }
.dd-app .dd-check { display: flex; gap: 8px; align-items: flex-start; font-size: 14px; margin-top: var(--dd-s2); cursor: pointer; }
.dd-app .dd-check input { margin-top: 3px; accent-color: var(--dd-accent); }

/* ---------- Modelli ---------- */
.dd-app .dd-models-bar { display: flex; flex-wrap: wrap; gap: var(--dd-s2); align-items: center; justify-content: space-between; margin-bottom: var(--dd-s3); }
.dd-app .dd-models { display: grid; grid-template-columns: repeat(auto-fill, minmax(146px, 1fr)); gap: var(--dd-s3); max-height: 720px; overflow-y: auto; overscroll-behavior: contain; padding: 3px 6px 3px 3px; margin: -3px -6px -3px -3px; scrollbar-width: thin; }
.dd-app .dd-model { position: relative; display: flex; flex-direction: column; text-align: left; border: 1px solid var(--dd-line); background: var(--dd-paper); color: var(--dd-ink); font-size: 15px; line-height: 1.45; border-radius: var(--dd-r); padding: var(--dd-s2); cursor: pointer; min-width: 0; transition: border-color .12s, box-shadow .12s; }
.dd-app .dd-model:hover { border-color: var(--dd-ink-3); }
.dd-app .dd-model[aria-pressed="true"] { border-color: var(--dd-accent); box-shadow: 0 0 0 2px var(--dd-accent); }
.dd-app .dd-model-img { aspect-ratio: 4 / 3; display: flex; align-items: center; justify-content: center; background: #fff; border-radius: 4px; overflow: hidden; }
.dd-app .dd-model-img img { max-width: 100%; max-height: 100%; object-fit: contain; display: block; }
.dd-app .dd-model-all .dd-model-img { background: var(--dd-zinc-2); font-family: var(--dd-font-cond); font-weight: 700; font-size: 34px; color: var(--dd-ink-3); }
.dd-app .dd-model-name { font-family: var(--dd-font-cond); font-weight: 700; font-size: 17px; margin-top: 6px; line-height: 1.1; overflow-wrap: anywhere; }
.dd-app .dd-model-desc { font-size: 12.5px; color: var(--dd-ink-2); margin-top: 2px; line-height: 1.3; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.dd-app .dd-model-badge { position: absolute; top: 6px; right: 6px; font-size: 12px; font-weight: 700; border-radius: 999px; padding: 1px 8px; font-variant-numeric: tabular-nums; }
.dd-app .dd-model-badge.ok { background: var(--dd-ok); color: #fff; }
.dd-app .dd-model-badge.none { background: var(--dd-zinc-2); color: var(--dd-ink-3); }
.dd-app .dd-model.dd-dim { opacity: .45; }
.dd-app .dd-model.dd-dim:hover { opacity: .85; }
.dd-app .dd-model.dd-hide { display: none; }

/* ---------- Risultati ---------- */
.dd-app .dd-results { margin-top: var(--dd-s6); }
.dd-app .dd-results-head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: flex-end; gap: var(--dd-s3); border-bottom: 2px solid var(--dd-ink); padding-bottom: var(--dd-s2); margin-bottom: var(--dd-s3); }
.dd-app .dd-results-head h3 { font-size: 22px; font-weight: 700; }
.dd-app .dd-results-head .dd-sub { font-size: 14px; color: var(--dd-ink-2); }
.dd-app .dd-results-tools { display: flex; gap: var(--dd-s2); align-items: center; flex-wrap: wrap; font-size: 14px; }
.dd-app .dd-results-tools select { border: 1px solid var(--dd-line); border-radius: 4px; padding: 5px 8px; background: var(--dd-paper); color: var(--dd-ink); }
.dd-app .dd-list { display: grid; gap: var(--dd-s2); }
.dd-app .dd-empty { padding: var(--dd-s5); text-align: center; color: var(--dd-ink-2); background: var(--dd-zinc); border-radius: var(--dd-r); }
.dd-app .dd-row { display: grid; grid-template-columns: 76px minmax(0, 1.15fr) minmax(0, 1.7fr) minmax(0, 1fr) auto; gap: var(--dd-s3); align-items: center; background: var(--dd-paper); border: 1px solid var(--dd-line); border-left: 4px solid var(--dd-line); border-radius: var(--dd-r); padding: var(--dd-s2) var(--dd-s3); }
.dd-app .dd-row.st-ok { border-left-color: var(--dd-ok); }
.dd-app .dd-row.st-warn { border-left-color: var(--dd-warn); }
.dd-app .dd-row.st-no { border-left-color: var(--dd-bad); }
.dd-app .dd-row.st-na { border-left-color: var(--dd-ink-3); }
.dd-app .dd-rimg { width: 76px; height: 58px; display: flex; align-items: center; justify-content: center; background: #fff; border-radius: 4px; }
.dd-app .dd-rimg img { max-width: 100%; max-height: 100%; object-fit: contain; }
.dd-app .dd-rname { min-width: 0; }
.dd-app .dd-rname strong { font-family: var(--dd-font-cond); font-size: 18px; font-weight: 700; display: block; line-height: 1.15; overflow-wrap: anywhere; }
.dd-app .dd-rname span { font-size: 12.5px; color: var(--dd-ink-3); }
.dd-app .dd-tags { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 4px; }
.dd-app .dd-tag { font-size: 11.5px; border: 1px solid var(--dd-line); border-radius: 3px; padding: 0 5px; color: var(--dd-ink-2); white-space: nowrap; font-variant-numeric: tabular-nums; }
.dd-app .dd-tag.alt { border-style: dashed; }
.dd-app .dd-rdata { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 2px 14px; font-size: 13px; min-width: 0; }
.dd-app .dd-kv { display: flex; justify-content: space-between; gap: 6px; border-bottom: 1px dotted var(--dd-line); min-width: 0; }
.dd-app .dd-kv span:first-child { color: var(--dd-ink-3); white-space: nowrap; }
.dd-app .dd-kv span:last-child { font-weight: 600; text-align: right; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
.dd-app .dd-kv.big span:last-child { font-size: 14.5px; }
.dd-app .dd-rop { font-size: 13px; min-width: 0; display: grid; gap: 4px; align-content: start; }
.dd-app .dd-status { justify-self: start; display: inline-flex; align-items: center; gap: 5px; font-weight: 700; font-size: 12.5px; border-radius: 3px; padding: 1px 7px; }
.dd-app .dd-status.ok { background: var(--dd-ok-soft); color: var(--dd-ok); }
.dd-app .dd-status.warn { background: var(--dd-warn-soft); color: var(--dd-warn); }
.dd-app .dd-status.no { background: var(--dd-bad-soft); color: var(--dd-bad); }
.dd-app .dd-status.na { background: var(--dd-zinc-2); color: var(--dd-ink-2); }
.dd-app .dd-msg { color: var(--dd-ink-2); line-height: 1.35; }
.dd-app .dd-acc { font-size: 12.5px; }
.dd-app .dd-acc b { color: var(--dd-accent-2); }
.dd-app .dd-racts { display: flex; flex-direction: column; gap: 6px; }
.dd-app .dd-rmore { grid-column: 1 / -1; border-top: 1px solid var(--dd-line-2); padding-top: var(--dd-s3); display: grid; gap: var(--dd-s3); }
.dd-app .dd-rmore[hidden], .dd-app .dd-err[hidden] { display: none !important; }
.dd-app .dd-more-btn { display: block; margin: var(--dd-s3) auto 0; }

/* Bande d'ottava (silenziatori) */
.dd-app .dd-oct { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 3px; align-items: end; height: 54px; margin-top: 2px; }
.dd-app .dd-oct div { display: flex; flex-direction: column; justify-content: flex-end; align-items: center; height: 100%; min-width: 0; }
.dd-app .dd-oct i { display: block; width: 100%; background: var(--dd-accent); border-radius: 2px 2px 0 0; min-height: 2px; }
.dd-app .dd-oct b { font-size: 11px; font-weight: 600; font-variant-numeric: tabular-nums; line-height: 1.2; }
.dd-app .dd-oct small { font-size: 10px; color: var(--dd-ink-3); line-height: 1.1; }

/* Dettagli */
.dd-app .dd-spec { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 2px 18px; font-size: 13px; }
.dd-app .dd-tablewrap { overflow-x: auto; }
.dd-app .dd-table { border-collapse: collapse; font-size: 13px; width: 100%; font-variant-numeric: tabular-nums; }
.dd-app .dd-table th, .dd-app .dd-table td { border-bottom: 1px solid var(--dd-line-2); padding: 4px 8px; text-align: right; white-space: nowrap; }
.dd-app .dd-table th:first-child, .dd-app .dd-table td:first-child { text-align: left; }
.dd-app .dd-table th { font-family: var(--dd-font-cond); font-weight: 600; color: var(--dd-ink-2); background: var(--dd-zinc); }
.dd-app .dd-table tr.sel td { background: var(--dd-accent-soft); font-weight: 600; }
.dd-app .dd-notes { margin: 0; padding-left: 18px; font-size: 12.5px; color: var(--dd-ink-2); display: grid; gap: 2px; }
.dd-app .dd-small { font-size: 12.5px; color: var(--dd-ink-3); }
.dd-app .dd-warnbox { background: var(--dd-warn-soft); color: var(--dd-warn); border-radius: 4px; padding: 6px 10px; font-size: 13px; }
.dd-app .dd-h4 { font-family: var(--dd-font-cond); font-size: 15px; font-weight: 700; margin-bottom: 4px; }

/* ---------- Modale grafico ---------- */
.dd-app .dd-modal { position: fixed; inset: 0; z-index: 100000; display: flex; align-items: flex-start; justify-content: center; padding: max(16px, env(safe-area-inset-top, 0px)) max(12px, env(safe-area-inset-right, 0px)) 16px max(12px, env(safe-area-inset-left, 0px)); background: var(--dd-scrim); overflow-y: auto; }
.dd-app .dd-modal[hidden] { display: none !important; }
.dd-app .dd-dialog { background: var(--dd-paper); color: var(--dd-ink); width: min(1080px, 100%); border-radius: 8px; box-shadow: 0 18px 50px rgba(0,0,0,.3); margin: auto 0; min-width: 0; }
.dd-app .dd-dialog-head { display: flex; justify-content: space-between; align-items: flex-start; gap: var(--dd-s3); padding: var(--dd-s4) var(--dd-s4) var(--dd-s3); border-bottom: 1px solid var(--dd-line); }
.dd-app .dd-dialog-head h3 { font-size: 22px; font-weight: 700; }
.dd-app .dd-dialog-head p { font-size: 13px; color: var(--dd-ink-2); margin-top: 2px; }
.dd-app .dd-close { border: 1px solid var(--dd-line); background: var(--dd-paper); padding: 0; width: 36px; height: 36px; border-radius: 4px; cursor: pointer; font-size: 20px; line-height: 1; flex: none; color: var(--dd-ink); }
.dd-app .dd-dialog-body { padding: var(--dd-s4); display: grid; gap: var(--dd-s4); }
.dd-app .dd-chart-layout { display: grid; grid-template-columns: minmax(0, 1fr) 270px; gap: var(--dd-s4); align-items: start; }
.dd-app .dd-charts { display: grid; gap: var(--dd-s3); min-width: 0; }
.dd-app .dd-chart-box { position: relative; width: 100%; min-width: 0; }
.dd-app .dd-chart { width: 100%; height: auto; display: block; touch-action: none; user-select: none; -webkit-user-select: none; cursor: crosshair; }
.dd-app .dd-chart text { font-family: var(--dd-font); fill: var(--dd-ink-2); font-size: 12px; }
.dd-app .dd-chart .ax-title { font-family: var(--dd-font-cond); font-weight: 600; fill: var(--dd-ink); font-size: 13px; }
.dd-app .dd-chart .grid { stroke: var(--dd-line-2); stroke-width: 1; }
.dd-app .dd-chart .axis { stroke: var(--dd-ink-3); stroke-width: 1; }
.dd-app .dd-chart .band { fill: var(--dd-accent-soft); opacity: .7; }
.dd-app .dd-chart .crv { fill: none; stroke: var(--dd-accent); stroke-width: 2.4; stroke-linejoin: round; stroke-linecap: round; }
.dd-app .dd-chart .crv.ext { stroke-dasharray: 5 4; stroke-width: 1.6; opacity: .75; }
.dd-app .dd-chart .crv.alt { stroke: var(--dd-ink-3); stroke-width: 1.4; }
.dd-app .dd-chart .cat-pt { fill: var(--dd-paper); stroke: var(--dd-accent); stroke-width: 1.6; }
.dd-app .dd-chart .guide { stroke: var(--dd-req); stroke-width: 1; stroke-dasharray: 3 3; opacity: .8; }
.dd-app .dd-chart .m-op { fill: var(--dd-req); stroke: var(--dd-paper); stroke-width: 2; }
.dd-app .dd-chart .m-hov { fill: none; stroke: var(--dd-ink); stroke-width: 1.6; }
.dd-app .dd-chart .tip rect { fill: var(--dd-ink); opacity: .92; }
.dd-app .dd-chart .tip text { fill: var(--dd-paper); font-size: 11.5px; font-variant-numeric: tabular-nums; }
.dd-app .dd-chart .lbl { font-size: 12px; font-weight: 600; fill: var(--dd-ink); paint-order: stroke; stroke: var(--dd-paper); stroke-width: 4px; stroke-linejoin: round; }
.dd-app .dd-legend { display: flex; flex-wrap: wrap; gap: 6px 14px; font-size: 12.5px; color: var(--dd-ink-2); }
.dd-app .dd-legend i { display: inline-block; width: 18px; height: 0; border-top: 2.4px solid var(--dd-accent); vertical-align: middle; margin-right: 5px; }
.dd-app .dd-legend i.ext { border-top-style: dashed; }
.dd-app .dd-legend i.band { width: 14px; height: 10px; border: 0; background: var(--dd-accent-soft); }
.dd-app .dd-legend i.op { width: 10px; height: 10px; border: 0; border-radius: 50%; background: var(--dd-req); }
.dd-app .dd-legend i.pt { width: 9px; height: 9px; border: 1.6px solid var(--dd-accent); border-radius: 50%; }
.dd-app .dd-side { display: grid; gap: var(--dd-s3); min-width: 0; align-content: start; }
.dd-app .dd-card { border: 1px solid var(--dd-line); border-radius: var(--dd-r); padding: var(--dd-s3); background: var(--dd-zinc); }
.dd-app .dd-card h4 { font-size: 15px; font-weight: 700; margin-bottom: 6px; }
.dd-app .dd-card .dd-kv { font-size: 13px; }

/* ---------- Misure standard e ambiente ---------- */
.dd-app .dd-std { display: grid; gap: 4px; margin-top: calc(-1 * var(--dd-s1)); }
.dd-app .dd-std-l { font-size: 12px; color: var(--dd-ink-3); }
.dd-app .dd-std-list { display: flex; flex-wrap: wrap; gap: 4px; max-height: 62px; overflow-y: auto; scrollbar-width: thin; padding: 1px; }
.dd-app .dd-stdb { border: 1px solid var(--dd-line); background: var(--dd-paper); color: var(--dd-ink-2); border-radius: 3px; padding: 2px 7px; font-size: 12.5px; line-height: 1.3; cursor: pointer; font-variant-numeric: tabular-nums; }
.dd-app .dd-stdb:hover { border-color: var(--dd-accent); color: var(--dd-accent); }
.dd-app .dd-envbox { display: grid; gap: var(--dd-s3); border-top: 1px dashed var(--dd-line); padding-top: var(--dd-s3); }
.dd-app .dd-envbox-h { font-family: var(--dd-font-cond); font-weight: 600; font-size: 13px; letter-spacing: .08em; text-transform: uppercase; color: var(--dd-ink-2); }
.dd-app .dd-envf .dd-inputwrap input { font-size: 16px; padding: 7px 9px; }
.dd-app .dd-rangew { display: grid; grid-template-columns: minmax(0, 1fr) 48px; gap: var(--dd-s2); align-items: center; }
.dd-app .dd-rangew input[type=range] { width: 100%; accent-color: var(--dd-accent); appearance: auto; -webkit-appearance: auto; padding: 0; border: 0; }
.dd-app .dd-rangew output { font-weight: 700; font-variant-numeric: tabular-nums; text-align: right; }

/* ---------- Risultati del calcolo ---------- */
.dd-app .dd-kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(156px, 1fr)); gap: var(--dd-s2); margin-bottom: var(--dd-s3); }
.dd-app .dd-kpi { display: grid; gap: 2px; align-content: start; background: var(--dd-paper); border: 1px solid var(--dd-line); border-top: 3px solid var(--dd-ink-3); border-radius: var(--dd-r); padding: 10px 12px; min-width: 0; }
.dd-app .dd-kpi.big { border-top-color: var(--dd-accent); }
.dd-app .dd-kpi-l { font-family: var(--dd-font-cond); font-weight: 600; font-size: 13.5px; letter-spacing: .01em; color: var(--dd-ink-3); }
.dd-app .dd-kpi-v { font-family: var(--dd-font-cond); font-weight: 700; font-size: 30px; line-height: 1.05; color: var(--dd-ink); font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
.dd-app .dd-kpi-v small { font-family: var(--dd-font); font-weight: 500; font-size: 14px; color: var(--dd-ink-2); margin-left: 4px; }
.dd-app .dd-kpi-s { font-size: 12.5px; color: var(--dd-ink-3); }
.dd-app .dd-checks { list-style: none; margin: 0 0 var(--dd-s4); padding: 0; display: grid; gap: 4px; }
.dd-app .dd-checks li { position: relative; padding: 5px 10px 5px 32px; border-radius: 4px; font-size: 14px; line-height: 1.4; background: var(--dd-zinc); color: var(--dd-ink); }
.dd-app .dd-checks li::before { position: absolute; left: 9px; top: 6px; width: 16px; height: 16px; border-radius: 50%; font-size: 11px; font-weight: 700; line-height: 16px; text-align: center; color: #fff; }
.dd-app .dd-checks li.ok::before { content: "\2713"; background: var(--dd-ok); }
.dd-app .dd-checks li.warn { background: var(--dd-warn-soft); }
.dd-app .dd-checks li.warn::before { content: "!"; background: var(--dd-warn); }
.dd-app .dd-checks li.info::before { content: "i"; background: var(--dd-accent); font-style: italic; }
.dd-app[data-dd-theme="dark"] .dd-checks li::before { color: var(--dd-paper); }
.dd-app .dd-resgrid { display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr); gap: var(--dd-s4); align-items: start; }
.dd-app .dd-res-charts { display: grid; gap: var(--dd-s3); min-width: 0; background: var(--dd-paper); border: 1px solid var(--dd-line); border-radius: var(--dd-r); padding: var(--dd-s3); }
.dd-app .dd-res-side { display: grid; gap: var(--dd-s3); min-width: 0; }
.dd-app .dd-comfort { background: var(--dd-paper); }
.dd-app .dd-cgrid { display: grid; gap: 2px; margin-top: var(--dd-s2); }
.dd-app .dd-cgrid .dd-kv { font-size: 13.5px; padding: 2px 0; }
.dd-app .dd-diag { width: 100%; height: auto; display: block; background: var(--dd-zinc); border-radius: 4px; }
.dd-app .dd-diag .occ { fill: var(--dd-accent-soft); opacity: .55; }
.dd-app .dd-diag .floor, .dd-app .dd-diag .ceil { stroke: var(--dd-ink-2); stroke-width: 2; }
.dd-app .dd-diag .wall { stroke: var(--dd-ink-3); stroke-width: 2; }
.dd-app .dd-diag .mid { stroke: var(--dd-ink-3); stroke-width: 1; stroke-dasharray: 4 4; }
.dd-app .dd-diag .jet { fill: none; stroke: var(--dd-accent); stroke-width: 3; stroke-linecap: round; stroke-linejoin: round; }
.dd-app .dd-diag .heat { fill: none; stroke: var(--dd-req); stroke-width: 2.5; stroke-dasharray: 5 4; }
.dd-app .dd-diag .src { fill: var(--dd-ink); }
.dd-app .dd-diag .srcr { fill: var(--dd-ink); }
.dd-app .dd-diag .crit { fill: var(--dd-req); stroke: var(--dd-paper); stroke-width: 2; }
.dd-app .dd-diag .crit.okc { fill: var(--dd-ok); }
.dd-app .dd-select-sm { min-height: 36px; padding: 6px 8px; font-size: 14px; }
.dd-app .dd-diag .dlab { font-family: var(--dd-font); font-size: 11px; fill: var(--dd-ink-2); font-variant-numeric: tabular-nums; }
.dd-app .dd-detail > summary { cursor: pointer; font-family: var(--dd-font-cond); font-weight: 700; font-size: 15px; list-style: none; display: flex; justify-content: space-between; }
.dd-app .dd-detail > summary::-webkit-details-marker { display: none; }
.dd-app .dd-detail > summary::after { content: "+"; color: var(--dd-ink-3); }
.dd-app .dd-detail[open] > summary::after { content: "\2212"; }
.dd-app .dd-detail-b { display: grid; gap: 4px; margin-top: var(--dd-s2); }
.dd-app .dd-detail-b .dd-kv { flex-direction: column; gap: 0; font-size: 13px; padding-bottom: 3px; }
.dd-app .dd-detail-b .dd-kv span:last-child { text-align: left; font-weight: 500; }
.dd-app .dd-octbig { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 6px; align-items: end; height: 170px; margin: 4px 0 6px; }
.dd-app .dd-octbig div { display: flex; flex-direction: column; justify-content: flex-end; align-items: center; height: 100%; min-width: 0; gap: 3px; }
.dd-app .dd-octbig i { display: block; width: 100%; max-width: 54px; background: var(--dd-accent); border-radius: 3px 3px 0 0; }
.dd-app .dd-octbig b { font-size: 13px; font-variant-numeric: tabular-nums; }
.dd-app .dd-octbig small { font-size: 12px; color: var(--dd-ink-3); }
.dd-app .dd-rangebar { position: relative; height: 18px; background: var(--dd-zinc-2); border-radius: 9px; margin: 10px 0 6px; }
.dd-app .dd-rb-band { position: absolute; top: 0; bottom: 0; background: var(--dd-accent-soft); border: 1px solid var(--dd-accent); border-radius: 9px; }
.dd-app .dd-rb-std { position: absolute; top: -3px; bottom: -3px; width: 2px; background: var(--dd-ink-3); }
.dd-app .dd-rb-op { position: absolute; top: -5px; width: 14px; height: 28px; margin-left: -7px; border-radius: 7px; background: var(--dd-req); border: 2px solid var(--dd-paper); }
.dd-app .dd-rb-lab { display: flex; justify-content: space-between; font-size: 12.5px; color: var(--dd-ink-2); font-variant-numeric: tabular-nums; }

/* ---------- Anteprima scheda ---------- */
.dd-app.dd-print .dd-chart text { font-size: 15px; }
.dd-app.dd-print .dd-chart .ax-title { font-size: 15px; }
.dd-app.dd-print .dd-chart .lbl { font-size: 15px; }
.dd-app.dd-print .dd-diag .dlab { font-size: 12px; }
.dd-app.dd-prev-root { position: fixed; inset: 0; z-index: 100000; display: flex; justify-content: center; align-items: stretch; padding: 12px; margin: 0; background: var(--dd-scrim); font-size: 15px; max-width: none; width: auto; }
.dd-app .dd-dialog.dd-prev { width: min(900px, 100%); height: calc(100vh - 24px); margin: 0 auto; display: grid; grid-template-rows: auto minmax(0, 1fr); overflow: hidden; }
.dd-app .dd-prev .dd-dialog-head { align-items: center; }
.dd-app .dd-prev-act { display: flex; gap: var(--dd-s2); align-items: center; flex-wrap: wrap; justify-content: flex-end; }
.dd-app .dd-prev-b { overflow: auto; background: var(--dd-zinc-2); padding: 16px 12px 24px; display: flex; flex-direction: column; align-items: center; gap: 16px; overscroll-behavior: contain; }
.dd-app .dd-prev-page { display: block; max-width: 100%; height: auto; background: #fff; box-shadow: 0 2px 10px rgba(0, 0, 0, .25); border-radius: 2px; }
.dd-app .dd-toast { position: fixed; left: 50%; bottom: 24px; transform: translateX(-50%); z-index: 100001; background: var(--dd-ink); color: var(--dd-paper); padding: 10px 16px; border-radius: 6px; font-size: 14px; box-shadow: 0 6px 20px rgba(0, 0, 0, .25); max-width: calc(100vw - 32px); }
@media (max-width: 600px) { .dd-app .dd-prev .dd-dialog-head { flex-wrap: wrap; } .dd-app .dd-prev-act { width: 100%; } }

/* ---------- Tabella velocità consigliate ---------- */
.dd-app .dd-uni { margin-top: var(--dd-s6); }
.dd-app .dd-uni-head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: flex-end; gap: var(--dd-s2); border-bottom: 2px solid var(--dd-ink); padding-bottom: var(--dd-s2); margin-bottom: var(--dd-s3); }
.dd-app .dd-uni-head h3 { font-size: 20px; font-weight: 700; }
.dd-app .dd-uni table { border-collapse: collapse; width: 100%; font-size: 14px; }
.dd-app .dd-uni th { font-family: var(--dd-font-cond); font-weight: 600; text-align: left; color: var(--dd-ink-2); background: var(--dd-zinc); border-bottom: 1px solid var(--dd-line); padding: 6px 10px; }
.dd-app .dd-uni td { border-bottom: 1px solid var(--dd-line-2); padding: 0; vertical-align: top; color: var(--dd-ink); background-color: transparent; }
.dd-app .dd-uni td button { all: unset; box-sizing: border-box; display: block; width: 100%; padding: 6px 10px; cursor: pointer; color: inherit; -webkit-text-fill-color: currentColor; }
.dd-app .dd-uni tr:hover td { background: var(--dd-zinc); }
.dd-app .dd-uni tr.grp td:not(.n) { font-weight: 700; }
.dd-app .dd-uni tr.sub td:first-child button { padding-left: 24px; color: var(--dd-ink-2); }
.dd-app .dd-uni tr.sel td { background: var(--dd-accent-soft); }
.dd-app .dd-uni tr.sel td:first-child button { box-shadow: inset 3px 0 0 var(--dd-accent); }
.dd-app .dd-uni .v { white-space: nowrap; font-variant-numeric: tabular-nums; font-weight: 600; }
.dd-app .dd-uni .n { color: var(--dd-ink-2); }
.dd-app .dd-foot { margin-top: var(--dd-s5); font-size: 12px; color: var(--dd-ink-3); border-top: 1px solid var(--dd-line); padding-top: var(--dd-s2); display: grid; gap: 4px; }

/* ---------- Responsive (sul contenitore: funziona anche se il tema limita la larghezza) ---------- */
@container ddapp (max-width: 980px) {
  .dd-app .dd-top { grid-template-columns: minmax(0, 1fr); }
  .dd-app .dd-models { max-height: 470px; }
  .dd-app .dd-row { grid-template-columns: 60px minmax(0, 1fr) auto; grid-template-areas: "img name acts" "data data data" "op op op"; }
  .dd-app .dd-row .dd-rimg { grid-area: img; width: 60px; height: 48px; }
  .dd-app .dd-row .dd-rname { grid-area: name; }
  .dd-app .dd-row .dd-rdata { grid-area: data; }
  .dd-app .dd-row .dd-rop { grid-area: op; }
  .dd-app .dd-row .dd-racts { grid-area: acts; }
  .dd-app .dd-chart-layout { grid-template-columns: minmax(0, 1fr); }
  .dd-app .dd-resgrid { grid-template-columns: minmax(0, 1fr); }
}
@container ddapp (max-width: 560px) {
  .dd-app .dd-head h2 { font-size: 25px; }
  .dd-app .dd-cats { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: thin; padding-bottom: var(--dd-s2); }
  .dd-app .dd-models { grid-template-columns: repeat(auto-fill, minmax(118px, 1fr)); gap: var(--dd-s2); }
  .dd-app .dd-rdata { grid-template-columns: minmax(0, 1fr); }
  .dd-app .dd-row { grid-template-columns: 52px minmax(0, 1fr); grid-template-areas: "img name" "data data" "op op" "acts acts"; }
  .dd-app .dd-row .dd-racts { flex-direction: row; flex-wrap: wrap; }
  .dd-app .dd-uni .n { display: none; }
  .dd-app .dd-pair { grid-template-columns: minmax(0, 1fr); }
  .dd-app .dd-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .dd-app .dd-kpi-v { font-size: 25px; }
}
@media (max-width: 520px) { .dd-app { font-size: 14px; } .dd-app .dd-panel { padding: var(--dd-s3); } }
@media (prefers-reduced-motion: reduce) { .dd-app * { transition: none !important; } }
@media print {
  .dd-app .dd-cats, .dd-app .dd-calc, .dd-app .dd-models-bar, .dd-app .dd-models, .dd-app .dd-uni, .dd-app .dd-actions, .dd-app .dd-std, .dd-app .dd-results-tools, .dd-app .dd-linkbtn { display: none !important; }
  .dd-app .dd-top { grid-template-columns: minmax(0, 1fr); }
  .dd-app .dd-results { margin-top: var(--dd-s3); break-before: avoid; }
  .dd-app .dd-detail { display: block; }
  .dd-app .dd-detail > .dd-detail-b { display: grid !important; }
}

/* >>> voci-capitolato (generato) */
/* pulsanti Capitolato / Computo accanto a Stampa */
.dd-app .dd-btn.dd-btn-doc{color:var(--dd-accent);border-color:var(--dd-field);gap:5px}
.dd-app .dd-btn.dd-btn-doc svg{width:16px;height:16px;flex:none}
.dd-app .dd-btn.dd-btn-doc:hover{background:var(--dd-accent-soft);border-color:var(--dd-accent);color:var(--dd-accent-2)}
/* ==========================================================================
   Voci di capitolato e di computo metrico estimativo — finestra, anteprima su carta intestata, stampa
   (tutte le regole sono prefissate con .dd-app.dd-voce-root per non interferire con il tema)
   ========================================================================== */
.dd-app.dd-voce-root{
  --vx-ink:var(--dd-ink);--vx-muted:var(--dd-ink-2);--vx-faint:var(--dd-ink-3);--vx-line:var(--dd-line);--vx-line2:var(--dd-field);--vx-surface:var(--dd-paper);--vx-sunk:var(--dd-zinc);--vx-bg:var(--dd-zinc-2);--vx-accent:var(--dd-accent);--vx-accent-ink:var(--dd-on-accent);--vx-accent-soft:var(--dd-accent-soft);--vx-ok:var(--dd-ok);--vx-bad:var(--dd-bad);--vx-scrim:var(--dd-scrim);--vx-font:var(--dd-font);--vx-cond:var(--dd-font-cond);
  position:fixed;inset:0;z-index:100000;margin:0;max-width:none;width:auto;border-radius:0;
  display:flex;align-items:stretch;justify-content:center;
  padding:max(12px,env(safe-area-inset-top,0px)) max(12px,env(safe-area-inset-right,0px)) max(12px,env(safe-area-inset-bottom,0px)) max(12px,env(safe-area-inset-left,0px));
  background:var(--vx-scrim);font-family:var(--vx-font);font-size:15px;line-height:1.45;color:var(--vx-ink);text-align:left;
  animation:dd-vx-fade .14s ease-out;
}
.dd-app.dd-voce-root.dd-vp{z-index:100002}
@keyframes dd-vx-fade{from{opacity:0}to{opacity:1}}
.dd-app.dd-voce-root *,.dd-app.dd-voce-root *::before,.dd-app.dd-voce-root *::after{box-sizing:border-box}
.dd-app.dd-voce-root :is(h3,h4,h5,p,ul,li,table,th,td,label,span,b,small,article,div){letter-spacing:normal;text-transform:none;text-shadow:none}
.dd-app.dd-voce-root :is(h3,h4,h5,p,ul){margin:0;padding:0}
.dd-app.dd-voce-root :is(button,input,select){font:inherit;margin:0;text-transform:none;letter-spacing:normal;box-shadow:none;text-shadow:none}
.dd-app.dd-voce-root img{max-width:100%;height:auto;border:0;box-shadow:none;border-radius:0;padding:0;background:transparent;display:block}
.dd-app.dd-voce-root :focus-visible{outline:2px solid var(--vx-accent);outline-offset:2px}

/* ---------- finestra della voce */
.dd-app.dd-voce-root .dd-vm-dlg{background:var(--vx-surface);color:var(--vx-ink);border-radius:12px;width:min(1000px,100%);max-height:100%;display:grid;grid-template-rows:auto auto minmax(0,1fr) auto;overflow:hidden;box-shadow:0 22px 60px rgba(0,0,0,.35)}
.dd-app.dd-voce-root .dd-vm-h{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;padding:14px 18px 12px;border-bottom:1px solid var(--vx-line)}
.dd-app.dd-voce-root .dd-vm-ht{min-width:0}
.dd-app.dd-voce-root .dd-vm-eyebrow{font-family:var(--vx-cond);font-weight:600;font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--vx-accent)}
.dd-app.dd-voce-root .dd-vm-h h3{font-family:var(--vx-cond);font-weight:600;font-size:20px;line-height:1.2;color:var(--vx-ink);margin-top:2px;text-wrap:balance}
.dd-app.dd-voce-root .dd-vm-sub{font-size:13px;color:var(--vx-muted);margin-top:3px}
.dd-app.dd-voce-root .dd-vx{flex:none;width:36px;height:36px;border:1px solid var(--vx-line2);border-radius:7px;background:var(--vx-surface);color:var(--vx-ink);font-size:20px;line-height:1;padding:0;cursor:pointer;display:inline-flex;align-items:center;justify-content:center}
.dd-app.dd-voce-root .dd-vx:hover{border-color:var(--vx-accent);color:var(--vx-accent)}

.dd-app.dd-voce-root .dd-vm-tools{display:flex;flex-wrap:wrap;gap:12px 18px;align-items:flex-end;justify-content:space-between;padding:12px 18px;background:var(--vx-sunk);border-bottom:1px solid var(--vx-line)}
.dd-app.dd-voce-root .dd-vm-fields{display:flex;flex-wrap:wrap;gap:10px 12px;align-items:flex-end}
.dd-app.dd-voce-root .dd-vm-f{display:grid;gap:3px;font-size:12px;font-weight:600;color:var(--vx-muted);cursor:default}
.dd-app.dd-voce-root .dd-vm-f small{font-weight:400;color:var(--vx-faint)}
.dd-app.dd-voce-root .dd-vm-f :is(input,select){height:36px;border:1px solid var(--vx-line2);border-radius:6px;background:var(--vx-surface);color:var(--vx-ink);padding:0 9px;font-size:14px;font-weight:500;font-variant-numeric:tabular-nums;width:7.5rem;outline:none}
.dd-app.dd-voce-root .dd-vm-f input[data-vf="qty"]{width:5.5rem}
.dd-app.dd-voce-root .dd-vm-f select{width:7rem;padding-right:4px}
.dd-app.dd-voce-root .dd-vm-f :is(input,select):focus{border-color:var(--vx-accent);box-shadow:0 0 0 3px var(--vx-accent-soft)}
.dd-app.dd-voce-root .dd-vm-amount{font-size:13px;color:var(--vx-muted);align-self:center;padding-bottom:2px;min-width:12ch}
.dd-app.dd-voce-root .dd-vm-amount b{color:var(--vx-ink);font-variant-numeric:tabular-nums}
.dd-app.dd-voce-root .dd-vm-err{color:var(--vx-bad)}
.dd-app.dd-voce-root .dd-vm-acts{display:flex;flex-wrap:wrap;gap:8px;margin-left:auto}

.dd-app.dd-voce-root .dd-vbtn{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:38px;border:1px solid var(--vx-line2);border-radius:7px;background:var(--vx-surface);color:var(--vx-ink);padding:7px 13px;font-size:14px;font-weight:600;line-height:1.2;white-space:nowrap;cursor:pointer;transition:border-color .12s,background-color .12s,color .12s}
.dd-app.dd-voce-root .dd-vbtn svg{width:18px;height:18px;flex:none}
.dd-app.dd-voce-root .dd-vbtn:hover{border-color:var(--vx-accent);color:var(--vx-accent)}
.dd-app.dd-voce-root .dd-vbtn.dd-pri{background:var(--vx-accent);border-color:var(--vx-accent);color:var(--vx-accent-ink)}
.dd-app.dd-voce-root .dd-vbtn.dd-pri:hover{filter:brightness(1.08);color:var(--vx-accent-ink)}
.dd-app.dd-voce-root .dd-vbtn[disabled]{opacity:.6;cursor:progress}
.dd-app.dd-voce-root .dd-vbtn.dd-vbtn-done{border-color:var(--vx-ok);color:var(--vx-ok);background:var(--vx-surface)}
.dd-app.dd-voce-root .dd-vbtn.dd-pri.dd-vbtn-done{background:var(--vx-ok);border-color:var(--vx-ok);color:#fff}

.dd-app.dd-voce-root .dd-vm-b{overflow:auto;background:var(--vx-bg);padding:18px 14px 26px;overscroll-behavior:contain;min-height:0}
.dd-app.dd-voce-root .dd-vm-live{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* ---------- foglio su carta intestata (sempre chiaro, come la stampa) */
.dd-app.dd-voce-root .dd-vs-page{--ink:#14212a;--mut:#566874;--acc:#006f8e;--ln:#c9d4da;--soft:#eaf3f7;
  background:#fff;color:var(--ink);max-width:794px;margin:0 auto;padding:3.6% 9.75% 2.6%;border-radius:3px;box-shadow:0 2px 14px rgba(0,0,0,.2);
  font-family:"IBM Plex Sans","SV Plex Sans",var(--vx-font);font-size:13px;line-height:1.55;container-type:inline-size;hyphens:auto;-webkit-hyphens:auto}
.dd-app.dd-voce-root .dd-vs-head{width:95.8%;margin:0 0 0 2.1%}
.dd-app.dd-voce-root .dd-vs-body{margin-top:7%}
.dd-app.dd-voce-root .dd-vs-kicker{font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--mut)}
.dd-app.dd-voce-root .dd-vs-title{font-family:"IBM Plex Sans","SV Plex Sans",var(--vx-font);font-weight:600;font-size:19px;line-height:1.25;color:var(--ink);margin:4px 0 4px;text-wrap:balance}
.dd-app.dd-voce-root .dd-vs-meta{font-size:12px;color:var(--mut)}
.dd-app.dd-voce-root .dd-vs-h{font-family:"IBM Plex Sans","SV Plex Sans",var(--vx-font);font-size:13.5px;font-weight:600;color:var(--acc);border-bottom:1px solid var(--ln);padding-bottom:3px;margin:18px 0 7px;line-height:1.3}
.dd-app.dd-voce-root .dd-vs-h span{font-variant-numeric:tabular-nums}
.dd-app.dd-voce-root .dd-vs-p{text-align:justify;margin:0 0 7px;color:var(--ink)}
.dd-app.dd-voce-root .dd-vs-p b,.dd-app.dd-voce-root .dd-vs-ul b{font-weight:600;color:var(--ink)}
.dd-app.dd-voce-root .dd-vs-ul{list-style:none;margin:0 0 6px;padding:0}
.dd-app.dd-voce-root .dd-vs-ul li{position:relative;padding-left:16px;margin:0 0 4px;text-align:justify;color:var(--ink);list-style:none;background:none}
.dd-app.dd-voce-root .dd-vs-ul li::before{content:"–";position:absolute;left:1px;top:0;color:var(--acc);font-weight:600}
.dd-app.dd-voce-root .dd-vs-note{font-size:11.5px;color:var(--mut);margin:2px 0 6px;line-height:1.45}
.dd-app.dd-voce-root :is(.dd-vs-kv,.dd-vs-cme){border-collapse:collapse;width:100%;margin:0 0 8px;font-size:12.5px;background:transparent}
.dd-app.dd-voce-root .dd-vs-kv :is(th,td){border:0;border-bottom:1px solid var(--soft);padding:4px 10px 4px 0;text-align:left;vertical-align:top;background:transparent}
.dd-app.dd-voce-root .dd-vs-kv th{width:40%;font-weight:400;color:var(--mut)}
.dd-app.dd-voce-root .dd-vs-kv td{font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;padding-right:0}
.dd-app.dd-voce-root .dd-vs-tw{overflow-x:auto;margin:10px 0 4px}
.dd-app.dd-voce-root .dd-vs-cme{min-width:560px;font-size:12px;table-layout:fixed}
.dd-app.dd-voce-root .dd-vs-cme :is(th,td){border:1px solid var(--ln);padding:5px 6px;vertical-align:top;text-align:left;color:var(--ink);background:transparent}
.dd-app.dd-voce-root .dd-vs-cme thead th{background:var(--soft);font-weight:600;font-size:11px;vertical-align:bottom;line-height:1.25;white-space:normal;hyphens:manual}
.dd-app.dd-voce-root .dd-vs-cme .c{text-align:center}
.dd-app.dd-voce-root .dd-vs-cme .r{text-align:right;font-variant-numeric:tabular-nums}
.dd-app.dd-voce-root .dd-vs-cme td.r{white-space:nowrap}
.dd-app.dd-voce-root .dd-vs-cme .d{line-height:1.5;hyphens:auto}
.dd-app.dd-voce-root .dd-vs-cme .d b{font-weight:600}
.dd-app.dd-voce-root .dd-vs-cme tfoot td{font-weight:600}
.dd-app.dd-voce-root .dd-vs-foot{font-size:9.5px;color:var(--mut);margin:30px 0 6px;line-height:1.35}
.dd-app.dd-voce-root .dd-vs-footimg{width:95.8%;margin:0 0 0 2.1%}

/* ---------- anteprima di stampa */
.dd-app.dd-voce-root .dd-vp-dlg{background:var(--vx-surface);color:var(--vx-ink);border-radius:12px;width:min(900px,100%);height:100%;display:grid;grid-template-rows:auto minmax(0,1fr);overflow:hidden;box-shadow:0 22px 60px rgba(0,0,0,.35)}
.dd-app.dd-voce-root .dd-vp-h{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 18px;border-bottom:1px solid var(--vx-line)}
.dd-app.dd-voce-root .dd-vp-h h3{font-family:var(--vx-cond);font-weight:600;font-size:19px;color:var(--vx-ink)}
.dd-app.dd-voce-root .dd-vp-h p{font-size:13px;color:var(--vx-muted)}
.dd-app.dd-voce-root .dd-vp-act{display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}
.dd-app.dd-voce-root .dd-vp-b{overflow:auto;background:var(--vx-bg);padding:16px 12px 24px;display:flex;flex-direction:column;align-items:center;gap:16px;overscroll-behavior:contain}
.dd-app.dd-voce-root .dd-vp-page{width:min(794px,100%);flex:none;background:#fff;box-shadow:0 2px 12px rgba(0,0,0,.25);border-radius:2px;line-height:0}
.dd-app.dd-voce-root .dd-vp-page svg{display:block;width:100%;height:auto}

@media (max-width:640px){
  .dd-app.dd-voce-root{padding:6px}
  .dd-app.dd-voce-root .dd-vm-h,.dd-app.dd-voce-root .dd-vm-tools{padding-left:12px;padding-right:12px}
  .dd-app.dd-voce-root .dd-vm-h h3{font-size:17px}
  .dd-app.dd-voce-root .dd-vm-acts{width:100%;margin-left:0}
  .dd-app.dd-voce-root .dd-vm-acts .dd-vbtn{flex:1 1 auto}
  .dd-app.dd-voce-root .dd-vm-fields{width:100%}
  .dd-app.dd-voce-root .dd-vm-f{flex:1 1 40%}
  .dd-app.dd-voce-root .dd-vm-f :is(input,select),.dd-app.dd-voce-root .dd-vm-f input[data-vf="qty"]{width:100%}
  .dd-app.dd-voce-root .dd-vm-b{padding:10px 6px 16px}
  .dd-app.dd-voce-root .dd-vs-page{padding:4% 5% 3%;font-size:12.5px}
  .dd-app.dd-voce-root .dd-vs-kv th{width:46%}
  .dd-app.dd-voce-root .dd-vp-h{flex-wrap:wrap}
  .dd-app.dd-voce-root .dd-vp-act{width:100%}
  .dd-app.dd-voce-root .dd-vp-act .dd-vbtn{flex:1 1 auto}
}
@media (prefers-reduced-motion:reduce){.dd-app.dd-voce-root{animation:none}.dd-app.dd-voce-root .dd-vbtn{transition:none}}
/* <<< voci-capitolato */

/* >>> v3: calcolo sul server */
.dd-app .dd-loading,.dd-app .dd-loaderr{margin:0;padding:28px 6px;font-size:15px}
.dd-app .dd-loaderr{color:#b23b17}
.dd-app.dd-busy .dd-results{opacity:.6;transition:opacity .15s}
.dd-app.dd-busy .dd-actions .dd-btn-primary{cursor:progress}
/* <<< v3 */
