{"id":640,"date":"2026-11-04T15:04:25","date_gmt":"2026-11-04T15:04:25","guid":{"rendered":"https:\/\/www.italhey.com\/?page_id=640"},"modified":"2026-11-05T15:29:28","modified_gmt":"2026-11-05T15:29:28","slug":"ppwr","status":"publish","type":"page","link":"https:\/\/www.italhey.com\/en\/ppwr\/","title":{"rendered":"PPWR"},"content":{"rendered":"<!doctype html>\r\n<html lang=\"it\">\r\n<head>\r\n<meta charset=\"utf-8\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n<title>PPWR | Valutazione packaging - Reg. UE 2025\/40<\/title>\r\n<style>\r\n:root{--bg:#f3f6f5;--paper:#fff;--ink:#183347;--sub:#647887;--nav:#102e3d;--nav2:#183e50;--line:#dce6e8;--a:#0c786e;--a-bg:#e7f6f0;--w:#956217;--w-bg:#fff5dc;--bad:#b4483e;--bad-bg:#ffefec;--accent:#df8556;--radius:17px;--shadow:0 4px 20px rgba(22,57,69,.055)}\r\n*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:14px\/1.55 Inter,'Segoe UI',Arial,sans-serif}h1,h2,h3,p{margin-top:0}h1{font-size:30px;letter-spacing:-.04em;margin:6px 0 8px;line-height:1.2}h2{font-size:20px;letter-spacing:-.025em;margin:0 0 6px}h3{font-size:15px;margin:0 0 9px}p{color:var(--sub)}button,input,select,textarea{font:inherit}button{cursor:pointer}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:3px solid #87bac7;outline-offset:2px}a{color:#096579}a:hover{text-decoration:underline}.shell{display:flex;min-height:100vh}.sidebar{width:254px;flex:0 0 254px;background:var(--nav);color:#d9e7e8;padding:25px 17px;position:sticky;top:0;height:100vh;display:flex;flex-direction:column;gap:22px}.brand{display:flex;align-items:center;gap:12px;padding:2px 11px 14px;border-bottom:1px solid #345263}.brand-mark{height:38px;width:38px;border-radius:11px;background:#e7a379;color:var(--nav);display:grid;place-items:center;font-weight:900;letter-spacing:-1px}.brand strong{font-size:17px;color:#fff;letter-spacing:.05em}.brand small{display:block;color:#a8c3ce;font-size:11px;letter-spacing:.09em}.nav-label{font-size:10px;color:#7fa5b6;text-transform:uppercase;letter-spacing:.15em;margin:2px 12px 5px;font-weight:800}.nav-btn{border:0;background:transparent;color:#c2d4da;text-align:left;width:100%;display:flex;align-items:center;gap:11px;padding:12px 13px;margin:4px 0;border-radius:10px;font-weight:650}.nav-btn .n{width:23px;height:23px;border:1px solid #607e89;border-radius:7px;display:grid;place-items:center;font-size:11px}.nav-btn:hover,.nav-btn.active{background:#234c60;color:white}.nav-btn.active .n{background:#edaa7b;color:#162e3a;border-color:#edaa7b}.side-bottom{margin-top:auto;padding:16px 12px;background:#17394a;border:1px solid #315163;border-radius:13px;font-size:12px;color:#acc7d0}.side-bottom strong{color:#fff}.side-bottom div+div{margin-top:7px}.main{max-width:1500px;width:calc(100% - 254px);margin:0 auto;padding:26px 35px 60px}.topbar{display:flex;gap:16px;justify-content:space-between;align-items:center;margin-bottom:23px}.eyebrow{font-size:11px;font-weight:850;color:#238076;letter-spacing:.14em;text-transform:uppercase}.muted{color:var(--sub)}.small{font-size:12px}.actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}button.btn,.file-button{padding:10px 14px;border-radius:10px;font-size:12px;font-weight:750;display:inline-flex;align-items:center;gap:8px;border:1px solid #c9d6da;background:#fff;color:var(--ink)}.btn:hover,.file-button:hover{background:#eef5f3}.btn.primary{background:#174957;color:#fff;border-color:#174957}.btn.primary:hover{background:#28616b}.btn.warn{color:#a34739}.file-button input{display:none}.tag{font-size:11px;display:inline-flex;align-items:center;padding:4px 9px;border-radius:30px;font-weight:750;white-space:nowrap}.tag.neutral{background:#e9eef1;color:#536777}.tag.good{background:var(--a-bg);color:var(--a)}.tag.watch{background:var(--w-bg);color:var(--w)}.tag.bad{background:var(--bad-bg);color:var(--bad)}.lead{max-width:820px;line-height:1.7}.stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:13px;margin:19px 0 26px}.stat{background:var(--paper);padding:17px 19px;border:1px solid var(--line);border-radius:15px;box-shadow:var(--shadow)}.stat .k{font-size:12px;color:var(--sub);font-weight:650}.stat .v{font-size:27px;font-weight:850;letter-spacing:-.035em;margin:5px 0 0;line-height:1.15}.stat small{color:var(--sub);font-size:11px}.panel{background:var(--paper);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:var(--radius);padding:23px 24px;margin-bottom:17px}.panelhead{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px}.panelhead p{margin:2px 0 0}.columns{display:grid;grid-template-columns:1fr 1fr;gap:17px}.cols3{display:grid;grid-template-columns:repeat(3,1fr);gap:15px}.field{display:flex;flex-direction:column;gap:6px;min-width:0}.field label,.fldlabel{font-size:12px;color:#445d6b;font-weight:750}.field input,.field select,.field textarea,select.cell-select,input.cell-input{min-height:38px;width:100%;border:1px solid #d2dfe1;background:#fbfdfd;border-radius:9px;padding:8px 10px;color:var(--ink)}.field textarea{min-height:75px;resize:vertical}.help{font-size:11px;color:#738996}.checks{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.check-card{border:1px solid #dbe5e7;border-radius:11px;padding:11px 12px;display:flex;align-items:center;gap:9px;cursor:pointer;background:#fcfefe;font-weight:650;min-height:45px}.check-card:has(input:checked){border-color:#60a9a2;background:#eff9f6;color:#09584f}.check-card input{width:16px;height:16px;accent-color:#0d8071;margin:0}.pills{display:flex;gap:7px;flex-wrap:wrap}.note{border-left:3px solid #4e96a7;background:#eff7f8;padding:12px 15px;border-radius:0 10px 10px 0;color:#385a68;font-size:12px}.note.amber{border-color:#e2ae5e;background:#fff8e9;color:#7d5927}.legend{display:flex;gap:15px;flex-wrap:wrap;align-items:center;font-size:11px;color:var(--sub)}.dot{width:8px;height:8px;border-radius:50%;display:inline-block;margin-right:5px}.dot.good{background:#0b9b81}.dot.watch{background:#dfa248}.dot.bad{background:#d06454}.tablewrap{overflow:auto;border:1px solid var(--line);border-radius:12px}table{width:100%;border-collapse:collapse;font-size:12.5px;text-align:left}th{background:#f2f6f6;color:#506b77;letter-spacing:.03em;font-size:10.5px;font-weight:850;text-transform:uppercase}th,td{padding:11px 12px;vertical-align:top;border-bottom:1px solid #e8eef0}tr:last-child td{border-bottom:0}tr.activeRow{background:#f2faf7}tr:hover td{background:#f9fcfc}tr.activeRow:hover td{background:#ecf8f3}.status{display:inline-flex;align-items:center;gap:6px;padding:5px 9px;font-size:11px;font-weight:800;border-radius:7px}.status.good{background:var(--a-bg);color:var(--a)}.status.watch{background:var(--w-bg);color:var(--w)}.status.bad{background:var(--bad-bg);color:var(--bad)}.status.neutral{background:#eaf0f2;color:#566e78}.scroll-limit{max-height:430px;overflow:auto}.row{display:flex;align-items:center;gap:9px;flex-wrap:wrap}.row-between{display:flex;align-items:center;justify-content:space-between;gap:12px}.divider{height:1px;background:var(--line);margin:18px 0}.form-top{margin-bottom:20px}.settings-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}.kpi-help{color:#78919b;font-size:11px}.component-table td{vertical-align:middle}.component-table select.cell-select{min-width:92px}.component-table input.cell-input{min-width:65px;width:83px}.component-table .c-name{white-space:nowrap;font-weight:750}.large-detail{background:#f4f8f8;border:1px dashed #adc4c9;border-radius:12px;padding:15px}.checkline{display:grid;grid-template-columns:minmax(0,1fr) 170px;gap:15px;padding:15px 0;border-bottom:1px solid var(--line)}.checkline:last-child{border-bottom:0}.checkline h3{margin:0 0 4px}.checkline .meta{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-bottom:7px}.checkline p{font-size:12px;margin:3px 0 8px}.checkline input,.checkline select{width:100%;border:1px solid #d0dee0;border-radius:9px;background:#fbfdfd;padding:9px;color:var(--ink);min-height:37px}.duedate{font-size:11px;font-weight:800;color:#6d8190}.ref{font-size:11px;text-decoration:none;color:#187a87}.ref:hover{text-decoration:underline}.docs-table td:nth-child(1){font-weight:750}.summary-item{padding:12px 0;border-bottom:1px solid var(--line)}.summary-item:last-child{border-bottom:0}.summary-item strong{display:block}.summary-item .muted{font-size:12px}.progress-bar{height:8px;border-radius:10px;background:#e7eeee;overflow:hidden;margin-top:8px}.progress-bar span{display:block;height:100%;background:#21a48e;transition:width .25s}.empty{padding:38px;text-align:center;color:var(--sub)}.footer{font-size:11px;color:#80939b;line-height:1.7;padding:0 4px}.hidden{display:none!important}.toast{position:fixed;bottom:20px;right:22px;padding:12px 18px;background:#183e50;color:white;border-radius:12px;box-shadow:0 8px 30px #0002;z-index:100;font-weight:750;display:none}.toast.show{display:block}.tab-page{display:none}.tab-page.active{display:block}.print-only{display:none}.section-number{background:#e6f1f1;color:#32666e;width:27px;height:27px;display:grid;place-items:center;border-radius:9px;font-weight:850}.compact{line-height:1.4}.not-link{cursor:default}.quick-info{border-radius:10px;padding:12px;border:1px solid var(--line);background:#f9fbfb}.quick-info strong{display:block;font-size:22px}.report-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.report-grid .panel{margin:0}.scorecard-label{font-size:12px;font-weight:750;color:var(--sub)}\r\n.language-switch{display:inline-flex;border:1px solid #b8cbd0;background:#eaf3f3;border-radius:10px;padding:3px;gap:2px}.language-switch button{border:0;background:transparent;color:#496575;padding:7px 12px;border-radius:7px;font-size:12px;font-weight:900}.language-switch button.active{background:#174957;color:#fff;box-shadow:0 1px 5px #0002}.compliance-card{background:#fff;border:1px solid var(--line);border-radius:17px;padding:21px 25px;margin-bottom:17px;box-shadow:var(--shadow)}.compliance-card h2{font-size:20px;margin:4px 0}.compliance-card p{max-width:740px;font-size:12px;margin:3px 0 12px}.score-number{font-size:42px;font-weight:900;letter-spacing:-.06em;white-space:nowrap}.compliance-track{height:17px;background:linear-gradient(90deg,#f9d9d7,#faebbe,#c8e9df);border-radius:30px;overflow:hidden;border:1px solid #d5dfdc}.compliance-fill{height:100%;border-radius:30px;transition:width .25s,background-color .25s}.score-inline{background:#f4f8f8;padding:12px 16px;border:1px solid #d9e8e7;border-radius:11px;margin-top:20px;font-size:12px}.score-inline strong{font-size:18px;margin-right:8px}.score-inline .progress-bar{margin-top:9px}.score-inline .progress-bar span{transition:width .2s}\r\n@media(max-width:1200px){.sidebar{width:215px;flex-basis:215px}.main{width:calc(100% - 215px);padding:25px}.stats{grid-template-columns:repeat(2,minmax(0,1fr))}.settings-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}\r\n@media(max-width:800px){.shell{display:block}.sidebar{position:static;height:auto;width:100%;display:block;padding:12px}.brand{border:0;padding:3px 5px;display:inline-flex;vertical-align:middle}.brand small,.side-bottom,.nav-label{display:none}.nav{display:flex;gap:4px;overflow:auto;margin-top:8px}.nav-btn{white-space:nowrap;display:inline-flex;width:auto;padding:9px}.main{width:100%;padding:21px 14px 50px}.topbar{display:block}.actions{margin-top:15px}.columns,.cols3,.report-grid{grid-template-columns:1fr}.checks{grid-template-columns:repeat(2,1fr)}.panel{padding:18px}.settings-grid{grid-template-columns:1fr 1fr}}\r\n@media(max-width:540px){.stats{grid-template-columns:1fr 1fr}.stat{padding:14px}.stat .v{font-size:24px}.checks{grid-template-columns:1fr 1fr}.checkline{grid-template-columns:1fr}.panelhead{display:block}.settings-grid{grid-template-columns:1fr}.topbar h1{font-size:24px}}\r\n@media print{@page{size:A4;margin:14mm}body{background:#fff;font-size:10pt}.sidebar,.actions,.toast,.no-print,.topbar .eyebrow{display:none!important}.shell{display:block}.main{width:100%;max-width:none;padding:0}.topbar{margin:0 0 16px}.topbar h1{font-size:23px}.lead{display:none}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:10px 0}.stat{box-shadow:none;padding:10px}.stat .v{font-size:18px}.panel{border:1px solid #cbd6d9;box-shadow:none;padding:12px;margin-bottom:10px;break-inside:avoid}.tab-page{display:none!important}#page-report{display:block!important}.print-only{display:block}table{font-size:8pt}th,td{padding:5px}a{color:#253b47;text-decoration:none}.footer{font-size:8pt}.report-grid{grid-template-columns:1fr 1fr}.tag,.status{border:1px solid #b8c8cc}}\r\n<\/style>\r\n<\/head>\r\n<body>\r\n<div class=\"shell\">\r\n  <aside class=\"sidebar\">\r\n    <div class=\"brand\"><div class=\"brand-mark\">P<\/div><div><strong>PPWR LAB<\/strong><small>PACKAGING REVIEW<\/small><\/div><\/div>\r\n    <div class=\"nav-label\">WORKSPACE<\/div>\r\n    <nav class=\"nav\" aria-label=\"Sezioni\"><button type=\"button\" class=\"nav-btn active\" data-tab=\"config\"><span class=\"n\">01<\/span> Configuratore<\/button><button type=\"button\" class=\"nav-btn\" data-tab=\"check\"><span class=\"n\">02<\/span> Checklist normativa<\/button><button type=\"button\" class=\"nav-btn\" data-tab=\"docs\"><span class=\"n\">03<\/span> Documenti<\/button><button type=\"button\" class=\"nav-btn\" data-tab=\"report\"><span class=\"n\">04<\/span> Riepilogo<\/button><\/nav>\r\n    <div class=\"side-bottom\"><strong>Reg. (UE) 2025\/40<\/strong><div>Applicazione generale dal 12.08.2026<\/div><div>Versione strumento 2.0 \u00b7 03.11.2026<\/div><div>Funziona anche senza internet. I dati restano nel browser.<\/div><\/div>\r\n  <\/aside>\r\n  <main class=\"main\">\r\n    <header class=\"topbar\">\r\n      <div><div class=\"eyebrow\">Conformit\u00e0 packaging \u00b7 Unione europea<\/div><h1>Valutazione PPWR<\/h1><div class=\"muted\">Configuratore materiali, criticit\u00e0 di riciclo e fascicolo di verifica<\/div><\/div>\r\n      <div class=\"actions no-print\">\r\n        <div class=\"language-switch\" role=\"group\" aria-label=\"Lingua \/ Language\"><button type=\"button\" id=\"lang-it\" data-lang=\"it\" aria-pressed=\"true\">IT<\/button><button type=\"button\" id=\"lang-en\" data-lang=\"en\" aria-pressed=\"false\">EN<\/button><\/div>\r\n        <button type=\"button\" class=\"btn\" id=\"save-json\">\u2193 Esporta progetto<\/button>\r\n        <label class=\"file-button\" tabindex=\"0\">\u2191 Importa progetto <input type=\"file\" id=\"import-json\" accept=\".json,application\/json\"><\/label>\r\n        <button type=\"button\" class=\"btn primary\" id=\"print-report\">\u25a4 Stampa \/ PDF<\/button>\r\n      <\/div>\r\n    <\/header>\r\n    <section class=\"compliance-card\" id=\"compliance-panel\" aria-label=\"Indice requisiti PPWR attuali\">\r\n      <div class=\"row-between\"><div><div class=\"eyebrow\" id=\"score-eyebrow\">STATO NORMATIVO ATTUALE \u00b7 2026<\/div><h2 id=\"score-title\">Adeguatezza ai requisiti PPWR attualmente applicabili<\/h2><p id=\"score-desc\">Solo requisiti attuali spuntati come conformi. Gli obblighi futuri e le voci non applicabili non influiscono sulla percentuale.<\/p><\/div><div class=\"score-number\" id=\"score-number\" aria-live=\"polite\">0%<\/div><\/div>\r\n      <div class=\"compliance-track\" role=\"progressbar\" id=\"score-track\" aria-label=\"Adeguatezza requisiti attuali\" aria-valuemin=\"0\" aria-valuemax=\"100\" aria-valuenow=\"0\"><div class=\"compliance-fill\" id=\"score-fill\" style=\"width:0%\"><\/div><\/div>\r\n      <div class=\"row-between\" style=\"margin-top:9px;align-items:flex-start\"><span class=\"small\" id=\"score-count\">0 su 7 requisiti attuali verificati come conformi<\/span><span class=\"small muted\" id=\"score-caveat\">Indice autodichiarato, non certificazione legale<\/span><\/div>\r\n    <\/section>\r\n    <div class=\"stats\" id=\"stats\"><\/div>\r\n    <section class=\"tab-page active\" id=\"page-config\">\r\n      <div class=\"panel\">\r\n        <div class=\"panelhead\"><div><h2>01 \u00b7 Identificazione del packaging<\/h2><p>Campi utilizzati nel riepilogo e nell'esportazione.<\/p><\/div><span class=\"tag neutral\">Anagrafica<\/span><\/div>\r\n        <div class=\"settings-grid\">\r\n          <div class=\"field\"><label for=\"project\">Progetto \/ codice PRJ<\/label><input id=\"project\" data-meta=\"project\" placeholder=\"Es. PRJ26_033_A\"><\/div>\r\n          <div class=\"field\"><label for=\"packCode\">Codice packaging \/ PF<\/label><input id=\"packCode\" data-meta=\"packCode\" placeholder=\"Es. PKG-001\"><\/div>\r\n          <div class=\"field\"><label for=\"description\">Descrizione<\/label><input id=\"description\" data-meta=\"description\" placeholder=\"Es. Bagnodoccia 500 mL\"><\/div>\r\n          <div class=\"field\"><label for=\"sector\">Destinazione prodotto<\/label><select id=\"sector\" data-meta=\"sector\"><option value=\"cosmetico\">Cosmetico<\/option><option value=\"detergente\">Detergente<\/option><option value=\"altro\">Altro \/ da definire<\/option><\/select><\/div>\r\n          <div class=\"field\"><label for=\"company\">Azienda \/ responsabile<\/label><input id=\"company\" data-meta=\"company\" placeholder=\"Nome azienda\"><\/div>\r\n          <div class=\"field\"><label for=\"role\">Ruolo nella filiera<\/label><select id=\"role\" data-meta=\"role\"><option value=\"da-definire\">Da verificare<\/option><option value=\"fabbricante\">Fabbricante PPWR<\/option><option value=\"importatore\">Importatore<\/option><option value=\"distributore\">Distributore<\/option><option value=\"fornitore\">Fornitore di packaging<\/option><\/select><\/div>\r\n          <div class=\"field\"><label for=\"market\">Mercato di destinazione<\/label><input id=\"market\" data-meta=\"market\" placeholder=\"Es. Italia, Francia\"><\/div>\r\n          <div class=\"field\"><label for=\"revision\">Revisione \/ data<\/label><input id=\"revision\" type=\"date\" data-meta=\"revision\"><\/div>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"panel\">\r\n        <div class=\"panelhead\"><div><h2>02 \u00b7 Seleziona i materiali<\/h2><p>Spunta pi\u00f9 materiali: il sistema genera tutte le associazioni flacone\u2013sleeve.<\/p><\/div><span class=\"tag neutral\">Selezione multipla<\/span><\/div>\r\n        <div class=\"columns\">\r\n          <div><h3>Materiali del flacone<\/h3><div class=\"checks\" id=\"bottle-checks\"><\/div><\/div>\r\n          <div><div class=\"row-between\"><h3>Materiali dello sleeve<\/h3><label class=\"row small\"><input type=\"checkbox\" id=\"sleeve-enabled\" checked> Sleeve presente<\/label><\/div><div class=\"checks\" id=\"sleeve-checks\"><\/div><\/div>\r\n        <\/div>\r\n        <div class=\"divider\"><\/div>\r\n        <div class=\"settings-grid\">\r\n          <div class=\"field\"><label for=\"coverageType\">Tipo di copertura<\/label><select id=\"coverageType\" data-setting=\"coverageType\"><option value=\"partial\">Parziale<\/option><option value=\"full\">Full-body \/ totale<\/option><\/select><\/div>\r\n          <div class=\"field\"><label for=\"coveragePct\">Copertura stimata (%)<\/label><input id=\"coveragePct\" type=\"number\" min=\"0\" max=\"100\" step=\"1\" data-setting=\"coveragePct\"><span class=\"help\">Dato descrittivo, non soglia PPWR.<\/span><\/div>\r\n          <div class=\"field\"><label for=\"nir\">Esito riconoscimento NIR<\/label><select id=\"nir\" data-setting=\"nir\"><option value=\"unknown\">Non testato \/ sconosciuto<\/option><option value=\"pass\">Confermato da prova<\/option><option value=\"fail\">Interferenza documentata<\/option><\/select><\/div>\r\n          <div class=\"field\"><label for=\"separation\">Separabilit\u00e0 dello sleeve<\/label><select id=\"separation\" data-setting=\"separation\"><option value=\"unknown\">Da verificare<\/option><option value=\"yes\">Confermata da prova<\/option><option value=\"no\">Non separabile<\/option><\/select><\/div>\r\n          <div class=\"field\"><label for=\"tear\">Linea di strappo \/ perforazione<\/label><select id=\"tear\" data-setting=\"tear\"><option value=\"unknown\">Non definita<\/option><option value=\"yes\">Presente<\/option><option value=\"no\">Assente<\/option><\/select><\/div>\r\n          <div class=\"field\"><label for=\"metal\">Sleeve metallizzato<\/label><select id=\"metal\" data-setting=\"metal\"><option value=\"no\">No<\/option><option value=\"yes\">S\u00ec<\/option><option value=\"unknown\">Da verificare<\/option><\/select><\/div>\r\n          <div class=\"field\"><label for=\"ink\">Stampa \/ inchiostri<\/label><select id=\"ink\" data-setting=\"ink\"><option value=\"unknown\">Da verificare<\/option><option value=\"ok\">Compatibilit\u00e0 documentata<\/option><option value=\"heavy\">Copertura elevata \/ criticit\u00e0<\/option><\/select><\/div>\r\n          <div class=\"field\"><label for=\"proof\">Riferimento test \/ documento<\/label><input id=\"proof\" data-setting=\"proof\" placeholder=\"Codice report NIR, RecyClass, EPBP...\"><\/div>\r\n        <\/div>\r\n        <div class=\"note amber\" style=\"margin-top:18px\">Le associazioni proposte sono un filtro preliminare basato su principi RecyClass\/EPBP. Un materiale spuntato non \u00e8 automaticamente conforme: la valutazione dipende anche da densit\u00e0 effettiva, colori, adesivi, inchiostri, copertura, selezione e separazione.<\/div>\r\n      <\/div>\r\n      <div class=\"panel\">\r\n        <div class=\"panelhead\"><div><h2>03 \u00b7 Matrice delle associazioni<\/h2><p>Seleziona una riga per collegarla alla distinta materiali e al report.<\/p><\/div><div class=\"pills\"><span class=\"tag good\" id=\"count-good\">0 favorevoli<\/span><span class=\"tag watch\" id=\"count-watch\">0 verifiche<\/span><span class=\"tag bad\" id=\"count-bad\">0 criticit\u00e0<\/span><\/div><\/div>\r\n        <div class=\"tablewrap scroll-limit\"><table><thead><tr><th style=\"width:45px\">Usa<\/th><th>Flacone<\/th><th>Sleeve<\/th><th>Esito tecnico preliminare<\/th><th>Motivazione \/ azione<\/th><\/tr><\/thead><tbody id=\"matrix-body\"><\/tbody><\/table><\/div>\r\n        <div class=\"large-detail\" style=\"margin-top:13px\" id=\"active-association\"><\/div>\r\n        <div class=\"row no-print\" style=\"margin-top:14px\"><button type=\"button\" class=\"btn\" id=\"export-matrix\">\u2193 Esporta matrice CSV<\/button><\/div>\r\n      <\/div>\r\n      <div class=\"panel\">\r\n        <div class=\"panelhead\"><div><h2>04 \u00b7 Distinta componenti<\/h2><p>Registra materiali, masse e percentuali PCR dichiarate. I valori restano modificabili.<\/p><\/div><span class=\"tag neutral\">Packaging completo<\/span><\/div>\r\n        <div class=\"tablewrap component-table\"><table><thead><tr><th>Presente<\/th><th>Componente<\/th><th>Materiale<\/th><th>Peso (g)<\/th><th>PCR (%)<\/th><th>Note<\/th><\/tr><\/thead><tbody id=\"components-body\"><\/tbody><\/table><\/div>\r\n        <div class=\"row-between\" style=\"margin-top:14px\"><span class=\"small muted\">Il PCR indicato \u00e8 un dato dichiarato di progetto; non sostituisce il calcolo PPWR su base impianto\/anno.<\/span><span class=\"tag neutral\" id=\"total-mass\">0 g totali<\/span><\/div>\r\n      <\/div>\r\n      <div class=\"panel\" id=\"pcr-panel\"><\/div>\r\n    <\/section>\r\n    <section class=\"tab-page\" id=\"page-check\">\r\n      <div class=\"panel\"><div class=\"panelhead\"><div><h2>Checklist normativa PPWR<\/h2><p>Verifica documentata: seleziona l'esito, specifica la prova e assegna eventuali azioni.<\/p><\/div><span class=\"tag watch\">Stato iniziale: da verificare<\/span><\/div>\r\n        <div class=\"note\">Gli obblighi sono divisi tra <strong>requisiti attuali<\/strong> e <strong>adeguamenti futuri<\/strong>. Una spunta \u201cVerificato\u201d segnala soltanto che \u00e8 stata svolta la valutazione: non produce una dichiarazione legale di conformit\u00e0.<\/div>\r\n        <div class=\"score-inline\" id=\"check-score\"><strong id=\"check-score-value\">0%<\/strong> <span id=\"check-score-text\">Avanzamento sui soli obblighi attuali<\/span><div class=\"progress-bar\"><span id=\"check-score-fill\" style=\"width:0%\"><\/span><\/div><\/div>\r\n        <h3 style=\"margin-top:24px\">Applicazione attuale \u00b7 2026<\/h3><div id=\"check-now\"><\/div>\r\n        <h3 style=\"margin-top:28px\">Preparazione agli obblighi successivi<\/h3><div id=\"check-future\"><\/div>\r\n        <div class=\"row no-print\" style=\"margin-top:16px\"><button class=\"btn\" id=\"export-checklist\" type=\"button\">\u2193 Esporta checklist CSV<\/button><\/div>\r\n      <\/div>\r\n    <\/section>\r\n    <section class=\"tab-page\" id=\"page-docs\">\r\n      <div class=\"panel\"><div class=\"panelhead\"><div><h2>Documentazione fornitori<\/h2><p>Controllo documentale per i componenti acquistati e per il fascicolo tecnico.<\/p><\/div><span class=\"tag neutral\">Allegato VII \/ VIII<\/span><\/div>\r\n        <div class=\"tablewrap\"><table class=\"docs-table\"><thead><tr><th style=\"width:38%\">Documento richiesto<\/th><th>Utilizzo<\/th><th style=\"width:165px\">Stato<\/th><\/tr><\/thead><tbody id=\"docs-body\"><\/tbody><\/table><\/div>\r\n        <div class=\"divider\"><\/div>\r\n        <div class=\"field\"><label for=\"suppliers\">Note fornitori \/ codici dei documenti<\/label><textarea id=\"suppliers\" data-meta=\"suppliers\" placeholder=\"Es. flacone: TDS ...; sleeve: relazione selezione NIR ...\"><\/textarea><\/div>\r\n        <p class=\"small\" style=\"margin:15px 0 0\">La dichiarazione UE di conformit\u00e0 va redatta dal soggetto qualificato come fabbricante ai sensi PPWR, sulla base di informazioni adeguate dei fornitori; non \u00e8 sufficiente acquisire una dichiarazione generica senza esaminare il proprio ruolo.<\/p>\r\n      <\/div>\r\n    <\/section>\r\n    <section class=\"tab-page\" id=\"page-report\">\r\n      <div class=\"print-only small\" style=\"margin-bottom:10px\">Report di valutazione interna \u00b7 PPWR, Reg. (UE) 2025\/40 \u00b7 Generato dalla pagina locale<\/div>\r\n      <div class=\"panel\"><div class=\"panelhead\"><div><h2>Riepilogo del progetto<\/h2><p>Documento preliminare da condividere con R&D, acquisti, qualit\u00e0 e regolatorio.<\/p><\/div><span class=\"tag neutral\" id=\"report-date\"><\/span><\/div><div id=\"report-meta\"><\/div><\/div>\r\n      <div class=\"report-grid\">\r\n        <div class=\"panel\"><h3>Associazione selezionata<\/h3><div id=\"report-pair\"><\/div><\/div>\r\n        <div class=\"panel\"><h3>Avanzamento della verifica<\/h3><div id=\"report-progress\"><\/div><\/div>\r\n      <\/div>\r\n      <div class=\"panel\" style=\"margin-top:17px\"><h3>Distinta materiali<\/h3><div class=\"tablewrap\"><table><thead><tr><th>Componente<\/th><th>Materiale<\/th><th>Peso (g)<\/th><th>PCR (%)<\/th><\/tr><\/thead><tbody id=\"report-components\"><\/tbody><\/table><\/div><\/div>\r\n      <div class=\"panel\"><h3>Checklist PPWR \u00b7 risultati e punti aperti<\/h3><div id=\"report-checks\"><\/div><\/div>\r\n      <div class=\"panel\"><h3>Documenti ancora mancanti<\/h3><div id=\"report-docs\"><\/div><\/div>\r\n      <div class=\"panel\"><h3>Conclusioni \/ prossime azioni<\/h3><div class=\"field\"><label for=\"conclusion\" class=\"no-print\">Note del valutatore<\/label><textarea id=\"conclusion\" data-meta=\"conclusion\" placeholder=\"Annota decisioni, prove da richiedere, sostituzioni proposte e responsabili...\"><\/textarea><\/div><div class=\"print-only\" id=\"print-conclusion\"><\/div><\/div>\r\n      <div class=\"note amber\"><strong>Limite del documento:<\/strong> questo report \u00e8 una valutazione interna preliminare. Non sostituisce la valutazione di conformit\u00e0 prevista dall'art. 38, la documentazione dell'Allegato VII n\u00e9 la dichiarazione UE dell'art. 39. L'esito sulle associazioni sleeve\u2013flacone non \u00e8 una classe PPWR A\/B\/C.<\/div>\r\n      <div class=\"row no-print\" style=\"margin-top:18px\"><button class=\"btn primary\" id=\"print-report2\" type=\"button\">\u25a4 Stampa o salva in PDF<\/button><button class=\"btn\" id=\"save-json2\" type=\"button\">\u2193 Salva progetto JSON<\/button><button class=\"btn warn\" id=\"reset-data\" type=\"button\">Ripristina dati esempio<\/button><\/div>\r\n    <\/section>\r\n    <div class=\"panel\" style=\"margin-top:24px\" id=\"sources\"><div class=\"panelhead\"><div><h2>Fonti e criteri tecnici<\/h2><p>Link ufficiali e guide di riferimento, da riesaminare in caso di aggiornamenti.<\/p><\/div><span class=\"tag neutral\">Agg. 03\/11\/2026<\/span><\/div><div class=\"columns\"><div>\r\n      <h3>Normativa<\/h3><p class=\"small\"><a href=\"https:\/\/eur-lex.europa.eu\/eli\/reg\/2025\/40\/oj\/ita\" target=\"_blank\" rel=\"noopener noreferrer\">Regolamento (UE) 2025\/40 \u2013 testo ufficiale<\/a><br><a href=\"https:\/\/eur-lex.europa.eu\/eli\/C\/2026\/3084\/oj\/ita\" target=\"_blank\" rel=\"noopener noreferrer\">Commissione UE \u2013 orientamenti applicativi 2026<\/a><br><a href=\"https:\/\/environment.ec.europa.eu\/publications\/faq-packaging-and-packaging-waste-regulation-ppwr_en\" target=\"_blank\" rel=\"noopener noreferrer\">Commissione UE \u2013 FAQ PPWR (agosto 2026)<\/a><br><a href=\"https:\/\/www.conai.org\/imprese\/servizi-e-strumenti-per-la-progettazione-degli-imballaggi\/regolamento-imballaggi-ppwr\/\" target=\"_blank\" rel=\"noopener noreferrer\">CONAI \u2013 PPWR ed etichettatura<\/a><\/p>\r\n      <\/div><div><h3>Riciclabilit\u00e0 tecnica<\/h3><p class=\"small\"><a href=\"https:\/\/recyclass.eu\/protocols-guidelines\/design-for-recycling-guidelines\/packaging\/\" target=\"_blank\" rel=\"noopener noreferrer\">RecyClass \u2013 Design for Recycling Guidelines<\/a><br><a href=\"https:\/\/www.epbp.org\/design-guidelines\/products\" target=\"_blank\" rel=\"noopener noreferrer\">EPBP \u2013 criteri per bottiglie PET<\/a><\/p><p class=\"small\">Il software non consulta automaticamente nuove norme, atti delegati o banche dati dei fornitori. Aggiornare periodicamente le verifiche tecniche.<\/p><\/div><\/div><\/div>\r\n    <footer class=\"footer\">PPWR LAB \u00b7 Strumento di lavoro interno, offline \u00b7 Stato e associazioni modificabili \u00b7 I dati vengono salvati nel browser corrente (localStorage), salvo in navigazione privata o cancellazione dati. Esporta il JSON per archiviarli in cartella condivisa.<\/footer>\r\n  <\/main>\r\n<\/div>\r\n<div role=\"status\" aria-live=\"polite\" class=\"toast\" id=\"toast\"><\/div>\r\n<script>\r\n'use strict';\r\nconst STORE='ppwr_packaging_local_v1';\r\nconst BOTTLES=['PET','HDPE','PP','VETRO','ALLUMINIO'];\r\nconst SLEEVES=['PE','PP \/ OPP','PET','PETG','PVC','OPS','CARTA','ALTRO'];\r\nconst MAT=['','PET','HDPE','LDPE','PE','PP','OPP','PETG','PVC','OPS','PS','CARTA','CARTONE','VETRO','ALLUMINIO','ACCIAIO','MULTIMATERIALE','ALTRO'];\r\nconst cmpNames=['Flacone','Tappo','Pompa \/ trigger','Etichetta','Sleeve','Astuccio','Cartone trasporto','Film trasporto'];\r\nconst defaultComponents=[['Flacone',true,'PET','','',''],['Tappo',true,'PP','','',''],['Pompa \/ trigger',false,'','','',''],['Etichetta',false,'','','',''],['Sleeve',true,'PE','','',''],['Astuccio',false,'CARTONE','','',''],['Cartone trasporto',true,'CARTONE','','',''],['Film trasporto',false,'PE','','','']].map(([name,enabled,material,mass,pcr,note])=>({name,enabled,material,mass,pcr,note}));\r\nconst checklist=[\r\n{id:'substances',group:'now',title:'Sostanze nei materiali e nei componenti',ref:'Art. 5',when:'Dal 12.08.2026',description:'Verificare restrizioni pertinenti e limite complessivo Pb + Cd + Hg + Cr(VI) \u2264100 mg\/kg, salvo deroghe; documentare evidenze di composizione. Limiti PFAS specifici dell\u2019art. 5(5) solo per packaging a contatto alimentare.'},\r\n{id:'baseline',group:'now',title:'Riciclabilit\u00e0 e requisiti tecnici attualmente pertinenti',ref:'Art. 6 e disposizioni transitorie',when:'Attuale \/ evoluzione 2030',description:'Verificare che il packaging non sia progettato in modo da pregiudicare riciclo e recupero; valutare sleeve, tappo, pompa, etichetta e interazioni con i flussi esistenti. I criteri UE armonizzati DfR sono successivi.'},\r\n{id:'trace',group:'now',title:'Tracciabilit\u00e0 e identificazione del fabbricante',ref:'Art. 15',when:'Dal 12.08.2026',description:'Verificare identificazione dell\u2019imballaggio e del fabbricante secondo le modalit\u00e0 dell\u2019art. 15, tenendo conto di dimensioni, natura e supporti ammessi.'},\r\n{id:'dossier',group:'now',title:'Fascicolo tecnico e valutazione di conformit\u00e0',ref:'Artt. 15, 38 \u00b7 All. VII',when:'Dal 12.08.2026',description:'Preparare prove, descrizione tecnica, analisi del rischio di non conformit\u00e0 e documentazione prevista per i requisiti applicabili.'},\r\n{id:'declaration',group:'now',title:'Dichiarazione UE di conformit\u00e0',ref:'Art. 39 \u00b7 All. VIII',when:'Dal 12.08.2026',description:'Verificare chi \u00e8 il fabbricante PPWR e la disponibilit\u00e0 della dichiarazione riferita all\u2019imballaggio, supportata dal fascicolo tecnico.'},\r\n{id:'italian',group:'now',title:'Etichettatura ambientale nazionale',ref:'Art. 12 \u00b7 norme nazionali\/transitorie',when:'Attuale',description:'Per mercati interessati, verificare gli obblighi nazionali vigenti, in Italia codici materiale e indicazioni di raccolta applicabili.'},\r\n{id:'epr',group:'now',title:'Responsabilit\u00e0 estesa del produttore (EPR)',ref:'Artt. 44\u201347',when:'Secondo obblighi applicabili',description:'Verificare ruolo di produttore e adempimenti di registrazione, comunicazione e contributi nei mercati di destinazione.'},\r\n{id:'reuseCurrent',group:'now',title:'Requisiti per imballaggi dichiarati riutilizzabili',ref:'Art. 11',when:'Dal 12.08.2026 se applicabile',description:'Se l\u2019imballaggio \u00e8 dichiarato riutilizzabile, valutare i requisiti e le prove richiesti dall\u2019art. 11; per packaging monouso segnare Non applicabile.'},\r\n{id:'compost',group:'future',title:'Compostabilit\u00e0 (solo formati interessati)',ref:'Art. 9',when:'Dal 12.02.2028 (casi previsti)',description:'Determinare se la tipologia rientra nei formati soggetti ai requisiti di compostabilit\u00e0. Non \u00e8 un obbligo generalizzato per flaconi e sleeve.'},\r\n{id:'harmonized',group:'future',title:'Etichette armonizzate UE',ref:'Art. 12',when:'Dal 12.08.2028 o 24 mesi da atti, se dopo',description:'Pianificare modifiche grafiche per etichette di composizione dei materiali e requisiti digitali applicabili; verificare atti attuativi e transizioni.'},\r\n{id:'recyclability',group:'future',title:'Classi UE Design for Recycling',ref:'Art. 6 \u00b7 All. II',when:'Dal 2030 o secondo atti',description:'Preparare il design per classi A\/B\/C (soglie 95%, 80%, 70%), poi verifica riciclaggio su scala dal 2035 e requisiti pi\u00f9 severi dal 2038. La classificazione richiede metodologia ufficiale, non deriva dalla matrice di questa pagina.'},\r\n{id:'pcr',group:'future',title:'Contenuto di plastica riciclata post-consumo',ref:'Art. 7',when:'2030 o 3 anni dall\u2019atto attuativo, se dopo',description:'Valutare categoria di imballaggio, deroghe, tracciabilit\u00e0 PCR e obiettivi applicabili. Calcolo PPWR come media per impianto produttivo e anno, per tipologia\/formato.'},\r\n{id:'minimize',group:'future',title:'Minimizzazione peso \/ volume',ref:'Art. 10 \u00b7 All. IV',when:'Entro 01.01.2030',description:'Documentare che peso e volume siano i minimi necessari a garantire funzionalit\u00e0, protezione, sicurezza e uso del prodotto.'},\r\n{id:'empty',group:'future',title:'Spazio vuoto per imballaggi multipli\/trasporto\/e-commerce',ref:'Art. 24',when:'2030 o 3 anni da atti attuativi, se dopo',description:'Per le categorie previste, prepararsi al limite del 50% con il metodo ufficiale; non applicare automaticamente tale limite all\u2019aria libera nel singolo flacone di vendita.'},\r\n{id:'bans',group:'future',title:'Formati vietati in Allegato V',ref:'Art. 25 \u00b7 All. V',when:'Dal 01.01.2030',description:'Verificare divieti per tipologie specifiche, inclusi imballaggi monouso di prodotti per igiene e toilette destinati a soggiorni in strutture ricettive, secondo le condizioni dell\u2019Allegato V.'},\r\n{id:'reuse',group:'future',title:'Obiettivi di riutilizzo degli imballaggi logistici',ref:'Art. 29',when:'Obiettivi dal 2030',description:'Valutare l\u2019applicazione degli obiettivi di riutilizzo alle tipologie di imballaggio logistico interessate e relative deroghe.'}\r\n];\r\nconst documents=[\r\n['tds','Schede tecniche per ogni componente','Materiale, densit\u00e0, spessore, peso, fornitore.'],\r\n['substance','Dichiarazioni sostanze \/ metalli pesanti','Art. 5, Pb\/Cd\/Hg\/Cr(VI) e restrizioni pertinenti.'],\r\n['composition','Composizione e distinta materiali','Polimeri, additivi, inchiostri, chiusure, adesivi.'],\r\n['recycle','Valutazione tecnica riciclabilit\u00e0','Prove, metodologie e compatibilit\u00e0 con flussi di riciclo.'],\r\n['nir','Test NIR \/ riconoscibilit\u00e0 sleeve','Particolarmente rilevante per copertura full-body.'],\r\n['separation','Prove separazione, densit\u00e0 e lavaggio','Sleeve, etichette e adesivi quando pertinenti.'],\r\n['pcr','Dichiarazioni e tracciabilit\u00e0 PCR','Contenuto riciclato e metodologia futura.'],\r\n['conformity','Fascicolo tecnico \/ dichiarazione UE','All. VII\u2013VIII secondo il ruolo economico.'],\r\n['labels','Artwork e istruzioni di raccolta','Etichettatura nei mercati di destinazione.'],\r\n['weight','Analisi minimizzazione peso\/volume','Supporto ad Art. 10 \/ All. IV.']\r\n];\r\n\r\n\/\/ Local bilingual UI: original source strings are retained in memory to support lossless language switching.\r\nconst EN={\"Configuratore\":\"Configurator\",\"Checklist normativa\":\"Regulatory checklist\",\"Documenti\":\"Documents\",\"Riepilogo\":\"Summary\",\"WORKSPACE\":\"WORKSPACE\",\"Applicazione generale dal 12.08.2026\":\"Generally applies from 12 Aug 2026\",\"Versione strumento 2.0 \u00b7 03.11.2026\":\"Tool version 2.0 \u00b7 03 Nov 2026\",\"Funziona anche senza internet. I dati restano nel browser.\":\"Works offline. Data are stored in your browser.\",\"Conformit\u00e0 packaging \u00b7 Unione europea\":\"Packaging compliance \u00b7 European Union\",\"Valutazione PPWR\":\"PPWR Assessment\",\"Configuratore materiali, criticit\u00e0 di riciclo e fascicolo di verifica\":\"Material configurator, recycling concerns and assessment dossier\",\"\u2193 Esporta progetto\":\"\u2193 Export project\",\"\u2191 Importa progetto\":\"\u2191 Import project\",\"\u25a4 Stampa \/ PDF\":\"\u25a4 Print \/ PDF\",\"STATO NORMATIVO ATTUALE \u00b7 2026\":\"CURRENT REGULATORY REQUIREMENTS \u00b7 2026\",\"Adeguatezza ai requisiti PPWR attualmente applicabili\":\"Alignment with currently applicable PPWR requirements\",\"Solo requisiti attuali spuntati come conformi. Gli obblighi futuri e le voci non applicabili non influiscono sulla percentuale.\":\"Only current requirements marked compliant. Future obligations and N\/A items do not affect the percentage.\",\"Indice autodichiarato, non certificazione legale\":\"Self-reported indicator, not legal certification\",\"Avanzamento sui soli obblighi attuali\":\"Progress on current obligations only\",\"01 \u00b7 Identificazione del packaging\":\"01 \u00b7 Packaging identification\",\"Campi utilizzati nel riepilogo e nell'esportazione.\":\"Fields used in the summary and exports.\",\"Anagrafica\":\"Project details\",\"Progetto \/ codice PRJ\":\"Project \/ PRJ code\",\"Codice packaging \/ PF\":\"Packaging \/ finished product code\",\"Descrizione\":\"Description\",\"Destinazione prodotto\":\"Product category\",\"Cosmetico\":\"Cosmetic\",\"Detergente\":\"Detergent\",\"Altro \/ da definire\":\"Other \/ to be defined\",\"Azienda \/ responsabile\":\"Company \/ owner\",\"Ruolo nella filiera\":\"Supply-chain role\",\"Da verificare\":\"To review\",\"Fabbricante PPWR\":\"PPWR manufacturer\",\"Importatore\":\"Importer\",\"Distributore\":\"Distributor\",\"Fornitore di packaging\":\"Packaging supplier\",\"Mercato di destinazione\":\"Target market\",\"Revisione \/ data\":\"Revision \/ date\",\"02 \u00b7 Seleziona i materiali\":\"02 \u00b7 Select materials\",\"Spunta pi\u00f9 materiali: il sistema genera tutte le associazioni flacone\u2013sleeve.\":\"Tick multiple materials: the tool generates every bottle\u2013sleeve combination.\",\"Selezione multipla\":\"Multi-select\",\"Materiali del flacone\":\"Bottle materials\",\"Materiali dello sleeve\":\"Sleeve materials\",\"Sleeve presente\":\"Sleeve included\",\"Tipo di copertura\":\"Coverage type\",\"Parziale\":\"Partial\",\"Full-body \/ totale\":\"Full-body \/ total\",\"Copertura stimata (%)\":\"Estimated coverage (%)\",\"Dato descrittivo, non soglia PPWR.\":\"Descriptive field; not a PPWR threshold.\",\"Esito riconoscimento NIR\":\"NIR recognition result\",\"Non testato \/ sconosciuto\":\"Not tested \/ unknown\",\"Confermato da prova\":\"Confirmed by testing\",\"Interferenza documentata\":\"Documented interference\",\"Separabilit\u00e0 dello sleeve\":\"Sleeve separability\",\"Confermata da prova\":\"Confirmed by testing\",\"Non separabile\":\"Not separable\",\"Linea di strappo \/ perforazione\":\"Tear strip \/ perforation\",\"Non definita\":\"Not defined\",\"Presente\":\"Present\",\"Assente\":\"Absent\",\"Sleeve metallizzato\":\"Metallised sleeve\",\"No\":\"No\",\"S\u00ec\":\"Yes\",\"Stampa \/ inchiostri\":\"Printing \/ inks\",\"Compatibilit\u00e0 documentata\":\"Documented compatibility\",\"Copertura elevata \/ criticit\u00e0\":\"High coverage \/ concern\",\"Riferimento test \/ documento\":\"Test \/ document reference\",\"Le associazioni proposte sono un filtro preliminare basato su principi RecyClass\/EPBP. Un materiale spuntato non \u00e8 automaticamente conforme: la valutazione dipende anche da densit\u00e0 effettiva, colori, adesivi, inchiostri, copertura, selezione e separazione.\":\"These combinations are preliminary screening based on RecyClass\/EPBP principles. Selecting a material does not establish compliance: actual density, colours, adhesives, inks, coverage, sorting and separation must also be considered.\",\"03 \u00b7 Matrice delle associazioni\":\"03 \u00b7 Combination matrix\",\"Seleziona una riga per collegarla alla distinta materiali e al report.\":\"Select a row to link it to the bill of materials and report.\",\"0 favorevoli\":\"0 favourable\",\"0 verifiche\":\"0 to review\",\"0 criticit\u00e0\":\"0 critical\",\"Usa\":\"Use\",\"Flacone\":\"Bottle\",\"Sleeve\":\"Sleeve\",\"Esito tecnico preliminare\":\"Preliminary technical result\",\"Motivazione \/ azione\":\"Rationale \/ action\",\"\u2193 Esporta matrice CSV\":\"\u2193 Export matrix CSV\",\"04 \u00b7 Distinta componenti\":\"04 \u00b7 Bill of components\",\"Registra materiali, masse e percentuali PCR dichiarate. I valori restano modificabili.\":\"Record materials, component weights and declared PCR percentages. All values remain editable.\",\"Packaging completo\":\"Complete packaging\",\"Componente\":\"Component\",\"Materiale\":\"Material\",\"Peso (g)\":\"Weight (g)\",\"PCR (%)\":\"PCR (%)\",\"Note\":\"Notes\",\"Il PCR indicato \u00e8 un dato dichiarato di progetto; non sostituisce il calcolo PPWR su base impianto\/anno.\":\"The PCR figure is a declared project value; it does not replace PPWR calculation by plant and year.\",\"0 g totali\":\"0 g total\",\"Checklist normativa PPWR\":\"PPWR regulatory checklist\",\"Verifica documentata: seleziona l'esito, specifica la prova e assegna eventuali azioni.\":\"Documented review: choose the outcome, record evidence and assign follow-up actions.\",\"Stato iniziale: da verificare\":\"Initial status: to review\",\"Gli obblighi sono divisi tra\":\"Requirements are divided into\",\"requisiti attuali\":\"current requirements\",\"e\":\"and\",\"adeguamenti futuri\":\"future requirements\",\". Una spunta \u201cVerificato\u201d segnala soltanto che \u00e8 stata svolta la valutazione: non produce una dichiarazione legale di conformit\u00e0.\":\". Marking an item \u201cCompliant \/ verified\u201d records your assessment; it is not an official declaration of conformity.\",\"Applicazione attuale \u00b7 2026\":\"Currently applicable \u00b7 2026\",\"Preparazione agli obblighi successivi\":\"Preparation for upcoming requirements\",\"\u2193 Esporta checklist CSV\":\"\u2193 Export checklist CSV\",\"Documentazione fornitori\":\"Supplier documentation\",\"Controllo documentale per i componenti acquistati e per il fascicolo tecnico.\":\"Document review for purchased components and the technical file.\",\"Allegato VII \/ VIII\":\"Annex VII \/ VIII\",\"Documento richiesto\":\"Required document\",\"Utilizzo\":\"Purpose\",\"Stato\":\"Status\",\"Note fornitori \/ codici dei documenti\":\"Supplier notes \/ document identifiers\",\"La dichiarazione UE di conformit\u00e0 va redatta dal soggetto qualificato come fabbricante ai sensi PPWR, sulla base di informazioni adeguate dei fornitori; non \u00e8 sufficiente acquisire una dichiarazione generica senza esaminare il proprio ruolo.\":\"The EU declaration of conformity must be drawn up by the party qualifying as manufacturer under the PPWR, supported by appropriate supplier information; a generic declaration is insufficient without confirming your role.\",\"Report di valutazione interna \u00b7 PPWR, Reg. (UE) 2025\/40 \u00b7 Generato dalla pagina locale\":\"Internal assessment report \u00b7 PPWR, Regulation (EU) 2025\/40 \u00b7 Generated by the local tool\",\"Riepilogo del progetto\":\"Project summary\",\"Documento preliminare da condividere con R&D, acquisti, qualit\u00e0 e regolatorio.\":\"Preliminary document for R&D, purchasing, quality and regulatory teams.\",\"Associazione selezionata\":\"Selected combination\",\"Avanzamento della verifica\":\"Assessment progress\",\"Distinta materiali\":\"Bill of materials\",\"Checklist PPWR \u00b7 risultati e punti aperti\":\"PPWR checklist \u00b7 results and open items\",\"Documenti ancora mancanti\":\"Outstanding documents\",\"Conclusioni \/ prossime azioni\":\"Conclusions \/ next steps\",\"Note del valutatore\":\"Assessor notes\",\"Limite del documento:\":\"Document limitation:\",\"questo report \u00e8 una valutazione interna preliminare. Non sostituisce la valutazione di conformit\u00e0 prevista dall'art. 38, la documentazione dell'Allegato VII n\u00e9 la dichiarazione UE dell'art. 39. L'esito sulle associazioni sleeve\u2013flacone non \u00e8 una classe PPWR A\/B\/C.\":\"this report is a preliminary internal assessment. It does not replace the conformity assessment under Article 38, Annex VII documentation or the EU declaration under Article 39. A bottle\u2013sleeve result is not a PPWR A\/B\/C grade.\",\"\u25a4 Stampa o salva in PDF\":\"\u25a4 Print or save as PDF\",\"\u2193 Salva progetto JSON\":\"\u2193 Save project JSON\",\"Ripristina dati esempio\":\"Reset sample data\",\"Fonti e criteri tecnici\":\"Sources and technical criteria\",\"Link ufficiali e guide di riferimento, da riesaminare in caso di aggiornamenti.\":\"Official sources and reference guidelines; review them when updates are published.\",\"Agg. 03\/11\/2026\":\"Updated 03 Nov 2026\",\"Normativa\":\"Legislation\",\"Regolamento (UE) 2025\/40 \u2013 testo ufficiale\":\"Regulation (EU) 2025\/40 \u2013 official text\",\"Commissione UE \u2013 orientamenti applicativi 2026\":\"European Commission \u2013 2026 implementation guidance\",\"Commissione UE \u2013 FAQ PPWR (agosto 2026)\":\"European Commission \u2013 PPWR FAQ (Aug 2026)\",\"CONAI \u2013 PPWR ed etichettatura\":\"CONAI \u2013 PPWR and labelling\",\"Riciclabilit\u00e0 tecnica\":\"Technical recyclability\",\"RecyClass \u2013 Design for Recycling Guidelines\":\"RecyClass \u2013 Design for Recycling Guidelines\",\"EPBP \u2013 criteri per bottiglie PET\":\"EPBP \u2013 PET bottle guidelines\",\"Il software non consulta automaticamente nuove norme, atti delegati o banche dati dei fornitori. Aggiornare periodicamente le verifiche tecniche.\":\"This offline tool does not automatically check new legislation, delegated acts or supplier databases. Review and update technical assessments periodically.\",\"PPWR LAB \u00b7 Strumento di lavoro interno, offline \u00b7 Stato e associazioni modificabili \u00b7 I dati vengono salvati nel browser corrente (localStorage), salvo in navigazione privata o cancellazione dati. Esporta il JSON per archiviarli in cartella condivisa.\":\"PPWR LAB \u00b7 Offline internal tool \u00b7 Editable results and combinations \u00b7 Data are stored locally in this browser (localStorage), except in private mode or after browser-data deletion. Export JSON for shared-folder storage.\",\"Es. PRJ26_033_A\":\"e.g. PRJ26_033_A\",\"Es. PKG-001\":\"e.g. PKG-001\",\"Es. Bagnodoccia 500 mL\":\"e.g. Shower gel 500 mL\",\"Nome azienda\":\"Company name\",\"Es. Italia, Francia\":\"e.g. Italy, France\",\"Codice report NIR, RecyClass, EPBP...\":\"NIR, RecyClass, EPBP report identifier...\",\"Es. flacone: TDS ...; sleeve: relazione selezione NIR ...\":\"e.g. bottle: TDS ...; sleeve: NIR sorting report ...\",\"Annota decisioni, prove da richiedere, sostituzioni proposte e responsabili...\":\"Record decisions, tests needed, proposed replacements and owners...\",\"Tappo\":\"Cap\",\"Pompa \/ trigger\":\"Pump \/ trigger\",\"Etichetta\":\"Label\",\"Astuccio\":\"Carton \/ box\",\"Cartone trasporto\":\"Transport carton\",\"Film trasporto\":\"Transport film\",\"VETRO\":\"GLASS\",\"ALLUMINIO\":\"ALUMINIUM\",\"CARTA\":\"PAPER\",\"CARTONE\":\"CARDBOARD\",\"ACCIAIO\":\"STEEL\",\"MULTIMATERIALE\":\"MULTIMATERIAL\",\"ALTRO\":\"OTHER\",\"cosmetico\":\"cosmetic\",\"detergente\":\"detergent\",\"altro\":\"other\",\"da-definire\":\"to be defined\",\"fabbricante\":\"manufacturer\",\"importatore\":\"importer\",\"distributore\":\"distributor\",\"fornitore\":\"supplier\",\"unknown\":\"unknown\",\"pass\":\"passed\",\"fail\":\"failed\",\"yes\":\"yes\",\"no\":\"no\",\"Sostanze nei materiali e nei componenti\":\"Substances in packaging materials and components\",\"Riciclabilit\u00e0 e requisiti tecnici attualmente pertinenti\":\"Recyclability and currently relevant technical requirements\",\"Tracciabilit\u00e0 e identificazione del fabbricante\":\"Traceability and manufacturer identification\",\"Fascicolo tecnico e valutazione di conformit\u00e0\":\"Technical file and conformity assessment\",\"Dichiarazione UE di conformit\u00e0\":\"EU declaration of conformity\",\"Etichettatura ambientale nazionale\":\"National environmental labelling\",\"Responsabilit\u00e0 estesa del produttore (EPR)\":\"Extended producer responsibility (EPR)\",\"Requisiti per imballaggi dichiarati riutilizzabili\":\"Requirements for packaging declared reusable\",\"Compostabilit\u00e0 (solo formati interessati)\":\"Compostability (relevant formats only)\",\"Etichette armonizzate UE\":\"Harmonised EU labels\",\"Classi UE Design for Recycling\":\"EU Design for Recycling grades\",\"Contenuto di plastica riciclata post-consumo\":\"Post-consumer recycled plastic content\",\"Minimizzazione peso \/ volume\":\"Weight \/ volume minimisation\",\"Spazio vuoto per imballaggi multipli\/trasporto\/e-commerce\":\"Empty-space ratio for grouped\/transport\/e-commerce packaging\",\"Formati vietati in Allegato V\":\"Formats prohibited under Annex V\",\"Obiettivi di riutilizzo degli imballaggi logistici\":\"Reuse targets for logistics packaging\",\"Dal 12.08.2026\":\"From 12 Aug 2026\",\"Attuale \/ evoluzione 2030\":\"Current \/ evolving through 2030\",\"Attuale\":\"Current\",\"Art. 6 e disposizioni transitorie\":\"Art. 6 and transitional provisions\",\"Italia\":\"Italy\",\"Secondo obblighi applicabili\":\"As applicable\",\"Dal 12.08.2026 se applicabile\":\"From 12 Aug 2026 if relevant\",\"Dal 12.02.2028 (casi previsti)\":\"From 12 Feb 2028 (specified cases)\",\"Dal 12.08.2028 o 24 mesi da atti, se dopo\":\"From 12 Aug 2028 or 24 months after acts, if later\",\"Dal 2030 o secondo atti\":\"From 2030 or as prescribed by acts\",\"2030 o 3 anni dall\u2019atto attuativo, se dopo\":\"2030 or 3 years after implementing act, if later\",\"Entro 01.01.2030\":\"By 1 Jan 2030\",\"2030 o 3 anni da atti attuativi, se dopo\":\"2030 or 3 years after implementing acts, if later\",\"Dal 01.01.2030\":\"From 1 Jan 2030\",\"Obiettivi dal 2030\":\"Targets from 2030\",\"Verificare restrizioni pertinenti e limite complessivo Pb + Cd + Hg + Cr(VI) \u2264100 mg\/kg, salvo deroghe; documentare evidenze di composizione. Limiti PFAS specifici dell\u2019art. 5(5) solo per packaging a contatto alimentare.\":\"Check applicable restrictions and combined Pb + Cd + Hg + Cr(VI) limit of 100 mg\/kg (subject to exemptions); document composition evidence. The PFAS limits in Article 5(5) specifically concern food-contact packaging.\",\"Verificare che il packaging non sia progettato in modo da pregiudicare riciclo e recupero; valutare sleeve, tappo, pompa, etichetta e interazioni con i flussi esistenti. I criteri UE armonizzati DfR sono successivi.\":\"Assess whether the packaging hinders recycling or recovery; examine sleeve, cap, pump, label and interactions with existing recycling streams. Harmonised EU DfR grades apply later.\",\"Verificare identificazione dell\u2019imballaggio e del fabbricante secondo le modalit\u00e0 dell\u2019art. 15, tenendo conto di dimensioni, natura e supporti ammessi.\":\"Confirm identification of the packaging and manufacturer as required by Article 15, allowing for size, nature and permitted information carriers.\",\"Preparare prove, descrizione tecnica, analisi del rischio di non conformit\u00e0 e documentazione prevista per i requisiti applicabili.\":\"Prepare supporting tests, technical description, risk analysis of non-compliance and the documentation required for applicable provisions.\",\"Verificare chi \u00e8 il fabbricante PPWR e la disponibilit\u00e0 della dichiarazione riferita all\u2019imballaggio, supportata dal fascicolo tecnico.\":\"Identify the PPWR manufacturer and verify that an appropriate EU declaration is available and supported by the technical file.\",\"Per mercati interessati, verificare gli obblighi nazionali vigenti, in Italia codici materiale e indicazioni di raccolta applicabili.\":\"Check the national rules in destination markets, including applicable material codes and collection instructions in Italy.\",\"Verificare ruolo di produttore e adempimenti di registrazione, comunicazione e contributi nei mercati di destinazione.\":\"Check the producer role and applicable registration, reporting and contribution duties in destination markets.\",\"Se l\u2019imballaggio \u00e8 dichiarato riutilizzabile, valutare i requisiti e le prove richiesti dall\u2019art. 11; per packaging monouso segnare Non applicabile.\":\"Where packaging is marketed as reusable, check Article 11 requirements and supporting evidence; mark as Not applicable for single-use packaging.\",\"Determinare se la tipologia rientra nei formati soggetti ai requisiti di compostabilit\u00e0. Non \u00e8 un obbligo generalizzato per flaconi e sleeve.\":\"Determine whether the format falls within the specified compostability requirements. This is not a general obligation for bottles and sleeves.\",\"Pianificare modifiche grafiche per etichette di composizione dei materiali e requisiti digitali applicabili; verificare atti attuativi e transizioni.\":\"Plan artwork changes for material-composition labels and applicable digital requirements; review implementing acts and transitional periods.\",\"Preparare il design per classi A\/B\/C (soglie 95%, 80%, 70%), poi verifica riciclaggio su scala dal 2035 e requisiti pi\u00f9 severi dal 2038. La classificazione richiede metodologia ufficiale, non deriva dalla matrice di questa pagina.\":\"Prepare designs for grades A\/B\/C (thresholds 95%, 80%, 70%), followed by recycling-at-scale assessment from 2035 and stricter requirements from 2038. Official methodology is required; this tool does not calculate PPWR grades.\",\"Valutare categoria di imballaggio, deroghe, tracciabilit\u00e0 PCR e obiettivi applicabili. Calcolo PPWR come media per impianto produttivo e anno, per tipologia\/formato.\":\"Assess packaging category, exemptions, PCR traceability and relevant targets. The PPWR calculation uses annual averages by manufacturing plant and packaging type\/format.\",\"Documentare che peso e volume siano i minimi necessari a garantire funzionalit\u00e0, protezione, sicurezza e uso del prodotto.\":\"Document that weight and volume are minimised while ensuring the product\u2019s functionality, protection, safety and use.\",\"Per le categorie previste, prepararsi al limite del 50% con il metodo ufficiale; non applicare automaticamente tale limite all\u2019aria libera nel singolo flacone di vendita.\":\"For relevant categories, prepare for the 50% maximum using the official methodology; do not automatically apply it to headspace in a single retail bottle.\",\"Verificare divieti per tipologie specifiche, inclusi imballaggi monouso di prodotti per igiene e toilette destinati a soggiorni in strutture ricettive, secondo le condizioni dell\u2019Allegato V.\":\"Check prohibitions for specified formats, including certain single-use toiletry packaging supplied for individual stays in accommodation, subject to Annex V conditions.\",\"Valutare l\u2019applicazione degli obiettivi di riutilizzo alle tipologie di imballaggio logistico interessate e relative deroghe.\":\"Evaluate reuse targets for the relevant logistics packaging types and applicable exemptions.\",\"Schede tecniche per ogni componente\":\"Technical datasheets for each component\",\"Materiale, densit\u00e0, spessore, peso, fornitore.\":\"Material, density, thickness, weight, supplier.\",\"Dichiarazioni sostanze \/ metalli pesanti\":\"Substances \/ heavy metals declarations\",\"Art. 5, Pb\/Cd\/Hg\/Cr(VI) e restrizioni pertinenti.\":\"Article 5, Pb\/Cd\/Hg\/Cr(VI) and applicable restrictions.\",\"Composizione e distinta materiali\":\"Composition and bill of materials\",\"Polimeri, additivi, inchiostri, chiusure, adesivi.\":\"Polymers, additives, inks, closures, adhesives.\",\"Valutazione tecnica riciclabilit\u00e0\":\"Technical recyclability assessment\",\"Prove, metodologie e compatibilit\u00e0 con flussi di riciclo.\":\"Tests, methodologies and compatibility with recycling streams.\",\"Test NIR \/ riconoscibilit\u00e0 sleeve\":\"NIR test \/ sleeve sortability\",\"Particolarmente rilevante per copertura full-body.\":\"Especially important for full-body coverage.\",\"Prove separazione, densit\u00e0 e lavaggio\":\"Separation, density and washing tests\",\"Sleeve, etichette e adesivi quando pertinenti.\":\"Sleeve, labels and adhesives as relevant.\",\"Dichiarazioni e tracciabilit\u00e0 PCR\":\"PCR declarations and traceability\",\"Contenuto riciclato e metodologia futura.\":\"Recycled content and future methodology.\",\"Fascicolo tecnico \/ dichiarazione UE\":\"Technical file \/ EU declaration\",\"All. VII\u2013VIII secondo il ruolo economico.\":\"Annexes VII\u2013VIII according to economic operator role.\",\"Artwork e istruzioni di raccolta\":\"Artwork and collection instructions\",\"Etichettatura nei mercati di destinazione.\":\"Labelling in destination markets.\",\"Analisi minimizzazione peso\/volume\":\"Weight\/volume minimisation analysis\",\"Supporto ad Art. 10 \/ All. IV.\":\"Support for Article 10 \/ Annex IV.\",\"Criticit\u00e0 elevata\":\"High concern\",\"Nessuno sleeve\":\"No sleeve\",\"Potenzialmente favorevole\":\"Potentially favourable\",\"Nessuna interferenza da sleeve; verificare comunque gli altri componenti.\":\"No sleeve interference; other components must still be assessed.\",\"Flusso di riciclo del contenitore non valutato automaticamente: servono linee guida specifiche.\":\"The container recycling stream has not been assessed automatically; dedicated guidance is required.\",\"Per bottiglie PET, questo materiale pu\u00f2 ostacolare la separazione o contaminare il riciclato; verificare linee guida EPBP\/RecyClass e alternative.\":\"For PET bottles, this material may hinder separation or contaminate recyclate; review EPBP\/RecyClass guidelines and alternatives.\",\"Poliolefina preferibile per PET se effettivamente separabile per densit\u00e0 e riconoscibile in selezione.\":\"Polyolefin may be preferable for PET if its density enables separation and the bottle can be recognised during sorting.\",\"Sleeve full-body: verificare lettura NIR e separazione. Materiale PE\/PP da solo non basta.\":\"Full-body sleeve: verify NIR identification and separation. PE\/PP material alone is insufficient.\",\"PVC critico nei flussi di riciclo delle poliolefine.\":\"PVC is problematic in polyolefin recycling streams.\",\"Famiglia poliolefinica coerente col contenitore; verificare separabilit\u00e0, colore e stampa.\":\"Same polyolefin family as the container; verify separability, colour and printing.\",\"Verificare riconoscibilit\u00e0 HDPE, separabilit\u00e0 e possibile contaminazione da sleeve.\":\"Check HDPE recognition, separability and potential sleeve contamination.\",\"PVC critico nel riciclo del PP.\":\"PVC is problematic in PP recycling.\",\"Materiale della famiglia PP, con copertura parziale; verificare comunque lettura e inchiostri.\":\"PP-family material with partial coverage; still verify sorting and printing inks.\",\"Verificare selezione ottica, compatibilit\u00e0 dei diversi polimeri e contaminazione.\":\"Check optical sorting, polymer compatibility and contamination.\",\"Copertura totale: valutazione NIR specifica raccomandata.\":\"Full-body coverage: dedicated NIR testing is recommended.\",\"Prova NIR negativa: lo sleeve ostacola il riconoscimento.\":\"Failed NIR test: the sleeve hinders identification.\",\"Separazione non ottenuta: rischio per la qualit\u00e0 del riciclato.\":\"Separation failed: risk to recycled material quality.\",\"Metallizzazione: possibile interferenza con selezione e riciclo.\":\"Metallisation may interfere with sorting and recycling.\",\"Stampa importante o non compatibilit\u00e0 degli inchiostri: richiedere prova.\":\"Heavy printing or incompatible inks: request evidence.\",\"Manca la prova di riconoscibilit\u00e0 NIR.\":\"NIR recognition testing is missing.\",\"Manca la verifica di separabilit\u00e0.\":\"Separation testing is missing.\",\"Test NIR positivo dichiarato.\":\"A passing NIR test has been declared.\",\"Separabilit\u00e0 confermata da prova.\":\"Separability confirmed by testing.\",\"Verificare metallizzazione.\":\"Check for metallisation.\"};\r\nconst originalText=new WeakMap();const originalAttrs=new WeakMap();\r\nfunction L(it,en){return state.lang==='en'?en:it;}\r\nfunction tr(value){return state.lang==='en'?(EN[String(value)]??String(value)):String(value);}\r\nfunction translateAll(){\r\n document.documentElement.lang=state.lang;\r\n const eur=document.querySelector('#sources a[href*=\"\/eli\/reg\/2025\/40\/oj\/\"]');\r\n if(eur)eur.href='https:\/\/eur-lex.europa.eu\/eli\/reg\/2025\/40\/oj\/'+(state.lang==='en'?'eng':'ita');\r\n const guidance=document.querySelector('#sources a[href*=\"\/eli\/C\/2026\/3084\/oj\/\"]');\r\n if(guidance)guidance.href='https:\/\/eur-lex.europa.eu\/eli\/C\/2026\/3084\/oj\/'+(state.lang==='en'?'eng':'ita');\r\n document.title=L('PPWR | Valutazione packaging - Reg. UE 2025\/40','PPWR | Packaging assessment - EU Regulation 2025\/40');\r\n document.querySelectorAll('[data-lang]').forEach(b=>{const selected=b.dataset.lang===state.lang;b.classList.toggle('active',selected);b.setAttribute('aria-pressed',String(selected));});\r\n const walker=document.createTreeWalker(document.body,NodeFilter.SHOW_TEXT);\r\n let node;while((node=walker.nextNode())){const par=node.parentElement;if(!par||par.closest('script,style,textarea'))continue;\r\n if(!originalText.has(node))originalText.set(node,node.nodeValue);\r\n const original=originalText.get(node),stripped=original.trim();if(!stripped)continue;\r\n const txt=tr(stripped);if(txt!==stripped||state.lang==='it')node.nodeValue=original.replace(stripped,txt);\r\n }\r\n for(const el of document.querySelectorAll('[placeholder],[title],[aria-label]')){\r\n  if(!originalAttrs.has(el))originalAttrs.set(el,{placeholder:el.getAttribute('placeholder'),title:el.getAttribute('title'),ariaLabel:el.getAttribute('aria-label')});\r\n  const attrs=originalAttrs.get(el);for(const [name,key] of [['placeholder','placeholder'],['title','title'],['aria-label','ariaLabel']])if(attrs[key]!==null)el.setAttribute(name,tr(attrs[key]));\r\n }\r\n}\r\n\r\nfunction baseState(){return {lang:'it',meta:{project:'',packCode:'',description:'',sector:'cosmetico',company:'',role:'da-definire',market:'Italia',revision:'2026-11-03',suppliers:'',conclusion:''},bottles:['PET','HDPE'],sleeves:['PE','PP \/ OPP','PETG'],sleeveEnabled:true,settings:{coverageType:'partial',coveragePct:'55',nir:'unknown',separation:'unknown',tear:'unknown',metal:'no',ink:'unknown',proof:''},activePair:'PET|PE',components:defaultComponents.map(x=>({...x})),checks:Object.fromEntries(checklist.map(c=>[c.id,{status:'todo',evidence:''}])),docs:Object.fromEntries(documents.map(d=>[d[0],'todo']))};}\r\nlet state=baseState();let selectedTab='config';\r\ntry{const raw=localStorage.getItem(STORE);if(raw)state=normalize(JSON.parse(raw));}catch(err){console.warn('Nessun salvataggio locale utilizzabile',err)}\r\nfunction normalize(data){const b=baseState();if(!data||typeof data!=='object'||Array.isArray(data))return b;\r\nb.lang=['it','en'].includes(data.lang)?data.lang:'it';\r\nconst md=data.meta||{};for(const k in b.meta)if(typeof md[k]==='string')b.meta[k]=md[k].slice(0,2500);\r\nb.bottles=BOTTLES.filter(v=>Array.isArray(data.bottles)&&data.bottles.includes(v));b.sleeves=SLEEVES.filter(v=>Array.isArray(data.sleeves)&&data.sleeves.includes(v));b.sleeveEnabled=data.sleeveEnabled!==false;\r\nconst ss=data.settings||{};for(const k in b.settings)if(typeof ss[k]==='string'&&ss[k].length<3000)b.settings[k]=ss[k];\r\nif(typeof data.activePair==='string')b.activePair=data.activePair;\r\nif(Array.isArray(data.components))b.components=b.components.map(c=>{const found=data.components.find(x=>x&&x.name===c.name);return found?{...c,enabled:!!found.enabled,material:MAT.includes(found.material)?found.material:'ALTRO',mass:String(found.mass??'').slice(0,20),pcr:String(found.pcr??'').slice(0,20),note:String(found.note??'').slice(0,700)}:c});\r\nfor(const item of checklist){const x=data.checks?.[item.id];if(x&&['todo','ok','fail','na'].includes(x.status))b.checks[item.id]={status:x.status,evidence:String(x.evidence??'').slice(0,1000)};}\r\nfor(const [id] of documents)if(['todo','ok','na'].includes(data.docs?.[id]))b.docs[id]=data.docs[id];return b;}\r\nfunction save(){try{localStorage.setItem(STORE,JSON.stringify(state));}catch(err){console.warn('Salvataggio browser non disponibile',err)}}\r\nfunction e(s){return String(s??'').replace(\/[&<>\"']\/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[c]));}\r\nfunction n(x){const val=Number(String(x).replace(',','.'));return Number.isFinite(val)?val:null;}\r\nfunction formatNum(x){return new Intl.NumberFormat(state.lang==='en'?'en-GB':'it-IT',{maximumFractionDigits:2}).format(x)}\r\nfunction badge(type,label){return `<span class=\"status ${type}\">${type==='good'?'\u25cf':type==='watch'?'\u25d0':type==='bad'?'!':'\u2013'} ${e(tr(label))}<\/span>`}\r\nfunction showToast(t){const node=document.getElementById('toast');node.textContent=t;node.classList.add('show');clearTimeout(showToast.timer);showToast.timer=setTimeout(()=>node.classList.remove('show'),2300)}\r\nfunction settingLabel(v){const m={unknown:['Da verificare','To review'],pass:['Prova positiva','Test passed'],fail:['Interferenza','Interference'],yes:['S\u00ec','Yes'],no:['No','No']};return m[v]?L(...m[v]):tr(v);}\r\nfunction currentPairs(){const bs=state.bottles,ss=state.sleeveEnabled?state.sleeves:['NESSUNO'];return bs.flatMap(b=>ss.map(s=>({b,s,key:b+'|'+s,...evaluate(b,s)})));}\r\nfunction evaluate(b,s){const st=state.settings;let level='watch',label='Da verificare';let reasons=[];\r\nif(s==='NESSUNO'){level='good';label='Nessuno sleeve';reasons.push('Nessuna interferenza da sleeve; verificare comunque gli altri componenti.');}\r\nelse if(!['PET','HDPE','PP'].includes(b)){reasons.push('Flusso di riciclo del contenitore non valutato automaticamente: servono linee guida specifiche.');}\r\nelse if(b==='PET'){\r\n if(['PVC','PETG','PET','OPS','CARTA','ALTRO'].includes(s)){level='bad';label='Criticit\u00e0 elevata';reasons.push('Per bottiglie PET, questo materiale pu\u00f2 ostacolare la separazione o contaminare il riciclato; verificare linee guida EPBP\/RecyClass e alternative.');}\r\n else if(st.coverageType==='partial'){level='good';label='Potenzialmente favorevole';reasons.push('Poliolefina preferibile per PET se effettivamente separabile per densit\u00e0 e riconoscibile in selezione.');}\r\n else{reasons.push('Sleeve full-body: verificare lettura NIR e separazione. Materiale PE\/PP da solo non basta.');}\r\n}else if(b==='HDPE'){\r\n if(s==='PVC'){level='bad';label='Criticit\u00e0 elevata';reasons.push('PVC critico nei flussi di riciclo delle poliolefine.');}\r\n else if(s==='PE'&&st.coverageType==='partial'){level='good';label='Potenzialmente favorevole';reasons.push('Famiglia poliolefinica coerente col contenitore; verificare separabilit\u00e0, colore e stampa.');}\r\n else{reasons.push('Verificare riconoscibilit\u00e0 HDPE, separabilit\u00e0 e possibile contaminazione da sleeve.');}\r\n}else if(b==='PP'){\r\n if(s==='PVC'){level='bad';label='Criticit\u00e0 elevata';reasons.push('PVC critico nel riciclo del PP.');}\r\n else if(s==='PP \/ OPP'&&st.coverageType==='partial'){level='good';label='Potenzialmente favorevole';reasons.push('Materiale della famiglia PP, con copertura parziale; verificare comunque lettura e inchiostri.');}\r\n else{reasons.push('Verificare selezione ottica, compatibilit\u00e0 dei diversi polimeri e contaminazione.');}\r\n}\r\nif(s!=='NESSUNO'){\r\n if(st.coverageType==='full'){if(level==='good'){level='watch';label='Da verificare'}reasons.push('Copertura totale: valutazione NIR specifica raccomandata.');}\r\n if(st.nir==='fail'){level='bad';label='Criticit\u00e0 elevata';reasons.push('Prova NIR negativa: lo sleeve ostacola il riconoscimento.');}\r\n if(st.separation==='no'){level='bad';label='Criticit\u00e0 elevata';reasons.push('Separazione non ottenuta: rischio per la qualit\u00e0 del riciclato.');}\r\n if(st.metal==='yes'){level='bad';label='Criticit\u00e0 elevata';reasons.push('Metallizzazione: possibile interferenza con selezione e riciclo.');}\r\n if(st.ink==='heavy'&&level!=='bad'){level='watch';label='Da verificare';reasons.push('Stampa importante o non compatibilit\u00e0 degli inchiostri: richiedere prova.');}\r\n if(st.nir==='unknown')reasons.push('Manca la prova di riconoscibilit\u00e0 NIR.');\r\n if(st.separation==='unknown')reasons.push('Manca la verifica di separabilit\u00e0.');\r\n if(st.nir==='pass')reasons.push('Test NIR positivo dichiarato.');\r\n if(st.separation==='yes')reasons.push('Separabilit\u00e0 confermata da prova.');\r\n if(st.metal==='unknown')reasons.push('Verificare metallizzazione.');\r\n}\r\nreturn {level,label:tr(label),reason:reasons.map(tr).join(' ')};}\r\nfunction fixActive(){const keys=currentPairs().map(p=>p.key);if(!keys.includes(state.activePair))state.activePair=keys[0]||'';updateActiveComponent();}\r\nfunction updateActiveComponent(){const pair=currentPairs().find(x=>x.key===state.activePair);if(!pair)return;const bottle=state.components.find(x=>x.name==='Flacone'),sleeve=state.components.find(x=>x.name==='Sleeve');bottle.material=pair.b==='VETRO'?'VETRO':pair.b==='ALLUMINIO'?'ALLUMINIO':pair.b;sleeve.enabled=state.sleeveEnabled;sleeve.material=pair.s==='PP \/ OPP'?'OPP':pair.s==='NESSUNO'?'':pair.s;}\r\nfunction renderChecksMaterial(){document.getElementById('bottle-checks').innerHTML=BOTTLES.map(m=>`<label class=\"check-card\"><input type=\"checkbox\" data-bottle=\"${e(m)}\" ${state.bottles.includes(m)?'checked':''}><span>${e(m)}<\/span><\/label>`).join('');document.getElementById('sleeve-checks').innerHTML=SLEEVES.map(m=>`<label class=\"check-card\"><input type=\"checkbox\" data-sleeve=\"${e(m)}\" ${state.sleeves.includes(m)?'checked':''} ${!state.sleeveEnabled?'disabled':''}><span>${e(m)}<\/span><\/label>`).join('');document.getElementById('sleeve-enabled').checked=state.sleeveEnabled;}\r\nfunction renderMatrix(){fixActive();const pairs=currentPairs(),counts={good:0,watch:0,bad:0};pairs.forEach(x=>counts[x.level]++);document.getElementById('count-good').textContent=counts.good+' '+L('favorevoli','favourable');document.getElementById('count-watch').textContent=counts.watch+' '+L('verifiche','to review');document.getElementById('count-bad').textContent=counts.bad+' '+L('criticit\u00e0','critical');document.getElementById('matrix-body').innerHTML=pairs.length?pairs.map(x=>`<tr class=\"${x.key===state.activePair?'activeRow':''}\"><td><input type=\"radio\" name=\"active-pair\" value=\"${e(x.key)}\" ${state.activePair===x.key?'checked':''} aria-label=\"${L('Seleziona','Select')} ${e(x.b)} ${L('con','with')} ${e(x.s)}\"><\/td><td><strong>${e(x.b)}<\/strong><\/td><td><strong>${e(x.s)}<\/strong><\/td><td>${badge(x.level,x.label)}<\/td><td class=\"compact muted\">${e(x.reason)}<\/td><\/tr>`).join(''):`<tr><td colspan=\"5\" class=\"empty\">${L('Spunta almeno un materiale del flacone e, se presente, uno sleeve.','Select at least one bottle material and, if relevant, one sleeve material.')}<\/td><\/tr>`;\r\nconst p=pairs.find(x=>x.key===state.activePair);document.getElementById('active-association').innerHTML=p?`<div class=\"row-between\"><div><div class=\"scorecard-label\">${L('Associazione attiva','Active combination')}<\/div><h3 style=\"margin:3px 0 7px\">${e(p.b)} + ${e(p.s)}<\/h3><\/div>${badge(p.level,p.label)}<\/div><div class=\"small muted\">${e(p.reason)}<\/div>`:`<span class=\"muted\">${L('Nessuna associazione selezionabile.','No combination available.')}<\/span>`;\r\n}\r\nfunction renderComponents(){document.getElementById('components-body').innerHTML=state.components.map((c,i)=>`<tr><td><input type=\"checkbox\" data-comp=\"${i}\" data-prop=\"enabled\" ${c.enabled?'checked':''} aria-label=\"${L('Includi','Include')} ${e(tr(c.name))}\"><\/td><td class=\"c-name\">${e(tr(c.name))}<\/td><td><select class=\"cell-select\" data-comp=\"${i}\" data-prop=\"material\" ${['Flacone','Sleeve'].includes(c.name)?`disabled title=\"${L('Derivato dall\u2019associazione attiva','Derived from the active combination')}\"`:''}>${MAT.map(m=>`<option value=\"${e(m)}\" ${c.material===m?'selected':''}>${e(m||'\u2014')}<\/option>`).join('')}<\/select><\/td><td><input type=\"number\" step=\"0.01\" min=\"0\" max=\"100000\" class=\"cell-input\" data-comp=\"${i}\" data-prop=\"mass\" value=\"${e(c.mass)}\" placeholder=\"\u2014\" ${!c.enabled?'disabled':''}><\/td><td><input type=\"number\" step=\"0.1\" min=\"0\" max=\"100\" class=\"cell-input\" data-comp=\"${i}\" data-prop=\"pcr\" value=\"${e(c.pcr)}\" placeholder=\"\u2014\" ${!c.enabled?'disabled':''}><\/td><td><input class=\"cell-input\" style=\"width:100%;min-width:140px\" data-comp=\"${i}\" data-prop=\"note\" value=\"${e(c.note)}\" placeholder=\"${L('Fornitore, colore, adesivo...','Supplier, colour, adhesive...')}\" ${!c.enabled?'disabled':''}><\/td><\/tr>`).join('');\r\nconst items=state.components.filter(x=>x.enabled&&n(x.mass)!==null&&String(x.mass).trim()!=='');const total=items.reduce((a,c)=>a+n(c.mass),0);document.getElementById('total-mass').textContent=formatNum(total)+' g \u00b7 '+items.length+' '+L('pesi indicati','weights entered');}\r\nfunction renderPCR(){const active=currentPairs().find(x=>x.key===state.activePair);const sector=state.meta.sector;const flacone=state.components.find(x=>x.name==='Flacone');let target30=null,target40=null;\r\nif(active&&['PET','HDPE','PP'].includes(active.b)){\r\n if(sector==='cosmetico'){target30=active.b==='PET'?30:10;target40=active.b==='PET'?50:25;}\r\n else if(sector==='detergente'){target30=35;target40=65;}\r\n}\r\nconst val=flacone.pcr!==''&&n(flacone.pcr)!==null?n(flacone.pcr):null;let html=`<div class=\"panelhead\"><div><h2>${L('05 \u00b7 Contenuto riciclato (PCR)','05 \u00b7 Recycled content (PCR)')}<\/h2><p>${L('Indicazione progettuale per il flacone selezionato, non attestazione legale.','Design indication for the selected bottle, not a legal declaration.')}<\/p><\/div><span class=\"tag neutral\">${L('Art. 7 \u00b7 prospettiva 2030','Art. 7 \u00b7 2030 outlook')}<\/span><\/div>`;\r\nif(target30!==null){const gap=val===null?L('n.d.','n\/a'):(val>=target30?'+'+formatNum(val-target30):'\u2212'+formatNum(target30-val))+' '+L('punti','points');html+=`<div class=\"cols3\"><div class=\"quick-info\"><div class=\"scorecard-label\">${L('Target teorico 2030','Indicative 2030 target')}<\/div><strong>${target30}%<\/strong><span class=\"muted small\">${e(tr(sector))} \u00b7 ${e(active.b)}<\/span><\/div><div class=\"quick-info\"><div class=\"scorecard-label\">${L('Target teorico 2040','Indicative 2040 target')}<\/div><strong>${target40}%<\/strong><span class=\"muted small\">${L('Salve deroghe\/aggiornamenti','Subject to exemptions\/updates')}<\/span><\/div><div class=\"quick-info\"><div class=\"scorecard-label\">${L('PCR flacone registrato','Recorded bottle PCR')}<\/div><strong>${val===null?L('n.d.','n\/a'):formatNum(val)+'%'}<\/strong><span class=\"muted small\">${L('Scostamento semplice dal 2030:','Simple gap to 2030:')} ${gap}<\/span><\/div><\/div>`;}\r\nelse html+=`<div class=\"note\">${L('Per la combinazione selezionata non \u00e8 disponibile un target plastica specifico calcolabile automaticamente. Definire il tipo di packaging, le deroghe e la classificazione prima di applicare l\u2019art. 7.','No specific plastic target can be calculated automatically for this combination. Confirm packaging type, exemptions and classification before applying Article 7.')}<\/div>`;\r\nhtml+=`<p class=\"small\" style=\"margin:15px 0 0\">${L('<strong>Attenzione:<\/strong> il valore del flacone \u00e8 solo un confronto indicativo. L\u2019art. 7 prevede percentuali medie per impianto produttivo, anno, tipo\/formato e regole\/deroghe specifiche. La decorrenza 2030 pu\u00f2 slittare a 3 anni dall\u2019entrata in vigore dell\u2019atto attuativo, se successiva. Per cosmetici si presume qui la categoria sensibile al contatto; confermare il caso concreto.','<strong>Important:<\/strong> the bottle value is illustrative only. Article 7 defines averages by manufacturing plant, year and packaging type\/format, subject to specific rules\/exemptions. The 2030 date may be postponed to three years after the relevant implementing act enters into force if later. Cosmetic packaging is assumed contact-sensitive here; check the individual case.')}<\/p>`;document.getElementById('pcr-panel').innerHTML=html;}\r\nfunction renderChecklist(){for(const group of ['now','future']){document.getElementById('check-'+group).innerHTML=checklist.filter(c=>c.group===group).map(c=>{const x=state.checks[c.id];return `<div class=\"checkline\"><div><div class=\"meta\"><span class=\"tag ${group==='now'?'neutral':'watch'}\">${e(tr(c.ref))}<\/span><span class=\"duedate\">${e(tr(c.when))}<\/span><\/div><h3>${e(tr(c.title))}<\/h3><p>${e(tr(c.description))}<\/p><div class=\"field\"><label for=\"ev-${c.id}\" class=\"help\">${L('Evidenza, riferimento, responsabile o azione aperta','Evidence, reference, owner or outstanding action')}<\/label><input id=\"ev-${c.id}\" data-evidence=\"${c.id}\" value=\"${e(x.evidence)}\" placeholder=\"${L('Documento \/ nota di verifica...','Document \/ verification note...')}\"><\/div><\/div><div class=\"field\"><label for=\"ck-${c.id}\">${L('Esito','Outcome')}<\/label><select id=\"ck-${c.id}\" data-check=\"${c.id}\"><option value=\"todo\" ${x.status==='todo'?'selected':''}>${L('Da verificare','To review')}<\/option><option value=\"ok\" ${x.status==='ok'?'selected':''}>${L('Conforme \/ verificato','Compliant \/ verified')}<\/option><option value=\"fail\" ${x.status==='fail'?'selected':''}>${L('Non conforme \/ criticit\u00e0','Noncompliant \/ concern')}<\/option><option value=\"na\" ${x.status==='na'?'selected':''}>${L('Non applicabile','Not applicable')}<\/option><\/select><\/div><\/div>`;}).join('');}}\r\nfunction renderDocs(){document.getElementById('docs-body').innerHTML=documents.map(([id,title,desc])=>`<tr><td>${e(tr(title))}<\/td><td class=\"muted\">${e(tr(desc))}<\/td><td><select class=\"cell-select\" data-doc=\"${id}\"><option value=\"todo\" ${state.docs[id]==='todo'?'selected':''}>${L('Da richiedere','To request')}<\/option><option value=\"ok\" ${state.docs[id]==='ok'?'selected':''}>${L('Ricevuto \/ verificato','Received \/ verified')}<\/option><option value=\"na\" ${state.docs[id]==='na'?'selected':''}>${L('Non applicabile','Not applicable')}<\/option><\/select><\/td><\/tr>`).join('');}\r\nfunction currentScore(){\r\n const applicable=checklist.filter(c=>c.group==='now'&&state.checks[c.id].status!=='na');\r\n const passed=applicable.filter(c=>state.checks[c.id].status==='ok').length;\r\n const failed=applicable.filter(c=>state.checks[c.id].status==='fail').length;\r\n return {passed,total:applicable.length,failed,pct:applicable.length?Math.round(100*passed\/applicable.length):null};\r\n}\r\nfunction getStat(){\r\n const a=currentScore(), docs=Object.values(state.docs).filter(x=>x==='todo').length,pairs=currentPairs(),bad=pairs.filter(x=>x.level==='bad').length;\r\n return {...a,docs,pairs:pairs.length,bad};\r\n}\r\nfunction renderScore(){\r\n const s=currentScore(),pct=s.pct??0,bar=document.getElementById('score-track'),col=`hsl(${Math.round(pct*1.48)} 59% 40%)`;\r\n document.getElementById('score-number').textContent=s.pct===null?'\u2014':s.pct+'%';\r\n document.getElementById('score-number').style.color=col;\r\n document.getElementById('score-fill').style.width=pct+'%';\r\n document.getElementById('score-fill').style.backgroundColor=col;\r\n bar.setAttribute('aria-valuenow',String(pct));\r\n document.getElementById('score-count').textContent=s.pct===null?L('Nessun requisito attuale applicabile selezionato','No currently applicable requirements selected'):L(`${s.passed} su ${s.total} requisiti attuali conformi`,`${s.passed} of ${s.total} current requirements marked compliant`);\r\n document.getElementById('check-score-value').textContent=s.pct===null?'\u2014':s.pct+'%';\r\n document.getElementById('check-score-fill').style.width=pct+'%';\r\n document.getElementById('check-score-fill').style.backgroundColor=col;\r\n}\r\nfunction renderStats(){const s=getStat();\r\n document.getElementById('stats').innerHTML=`<div class=\"stat\"><div class=\"k\">${L('Associazioni possibili','Possible material combinations')}<\/div><div class=\"v\">${s.pairs}<\/div><small>${L('Scenari materiali selezionati','Selected material scenarios')}<\/small><\/div><div class=\"stat\"><div class=\"k\">${L('Requisiti attuali conformi','Compliant current requirements')}<\/div><div class=\"v\">${s.passed}<span class=\"muted\" style=\"font-size:16px\"> \/ ${s.total}<\/span><\/div><small>${L('Escluse voci N\/A e obblighi futuri','N\/A and future requirements excluded')}<\/small><div class=\"progress-bar\"><span style=\"width:${s.pct??0}%;background:hsl(${Math.round((s.pct??0)*1.48)} 59% 40%)\"><\/span><\/div><\/div><div class=\"stat\"><div class=\"k\">${L('Scenari critici \/ punti NC attuali','Critical scenarios \/ current nonconformities')}<\/div><div class=\"v\" style=\"color:${s.failed+s.bad?'#b4483e':''}\">${s.failed+s.bad}<\/div><small>${s.bad} ${L('associazioni','associations')} \u00b7 ${s.failed} ${L('checklist attuale','current checks')}<\/small><\/div><div class=\"stat\"><div class=\"k\">${L('Documenti da richiedere','Documents to request')}<\/div><div class=\"v\">${s.docs}<\/div><small>${L('Su','Out of')} ${documents.length} ${L('documenti','documents')}<\/small><\/div>`;\r\n renderScore();\r\n}\r\nfunction renderReport(){const s=getStat(),p=currentPairs().find(x=>x.key===state.activePair),m=state.meta;\r\n document.getElementById('report-date').textContent=m.revision||L('Data non definita','Date not provided');\r\n document.getElementById('report-meta').innerHTML=`<div class=\"cols3\">${[[L('PRJ \/ progetto','PRJ \/ project'),m.project],[L('Codice packaging \/ PF','Packaging \/ finished product code'),m.packCode],[L('Descrizione','Description'),m.description],[L('Settore','Product sector'),tr(m.sector)],[L('Azienda','Company'),m.company],[L('Ruolo','Role'),tr(m.role)],[L('Mercati','Markets'),tr(m.market)]].map(([a,b])=>`<div class=\"summary-item\"><span class=\"muted small\">${e(a)}<\/span><strong>${e(b||L('Da compilare','To be completed'))}<\/strong><\/div>`).join('')}<\/div>`;\r\n document.getElementById('report-pair').innerHTML=p?`<h2>${e(p.b)} + ${e(p.s)}<\/h2>${badge(p.level,p.label)}<p class=\"small\" style=\"margin-top:9px\">${e(p.reason)}<\/p><p class=\"small\">${L('Copertura','Coverage')}: ${e(state.settings.coverageType==='full'?'Full-body':L('Parziale','Partial'))} ${e(state.settings.coveragePct)}% \u00b7 NIR: ${e(settingLabel(state.settings.nir))} \u00b7 ${L('Separazione','Separation')}: ${e(settingLabel(state.settings.separation))}<\/p><p class=\"small\">${L('Test di supporto','Supporting test')}: ${e(state.settings.proof||L('Non indicato','Not provided'))}<\/p>`:`<span class=\"muted\">${L('Nessuna associazione selezionata.','No combination selected.')}<\/span>`;\r\n document.getElementById('report-progress').innerHTML=`<div class=\"row-between\"><span class=\"scorecard-label\">${L('Solo requisiti attuali conformi','Compliant current requirements only')}<\/span><strong>${s.passed}\/${s.total} \u00b7 ${s.pct===null?'\u2014':s.pct+'%'}<\/strong><\/div><div class=\"compliance-track\" style=\"margin-top:9px\"><div class=\"compliance-fill\" style=\"width:${s.pct??0}%;background-color:hsl(${Math.round((s.pct??0)*1.48)} 59% 40%)\"><\/div><\/div><p style=\"margin-top:11px\" class=\"small\">${s.failed} ${L('requisiti attuali critici','critical current requirements')} \u00b7 ${s.docs} ${L('documenti ancora da richiedere','documents still to request')}<\/p><p class=\"small\">${L('Gli obblighi futuri e le voci N\/A sono esclusi dal calcolo. L\u2019indice \u00e8 autodichiarato e non costituisce certificazione legale.','Future obligations and N\/A items are excluded. This is a self-reported indicator, not legal certification.')}<\/p>`;\r\n document.getElementById('report-components').innerHTML=state.components.filter(x=>x.enabled).map(c=>`<tr><td>${e(tr(c.name))}<\/td><td>${e(tr(c.material||L('Da definire','To be defined')))}<\/td><td>${e(c.mass||'\u2014')}<\/td><td>${e(c.pcr===''?'\u2014':c.pcr+'%')}<\/td><\/tr>`).join('')||`<tr><td colspan=\"4\">${L('Nessun componente attivo.','No active components.')}<\/td><\/tr>`;\r\n document.getElementById('report-checks').innerHTML=checklist.map(c=>{const x=state.checks[c.id],kind={todo:'watch',ok:'good',fail:'bad',na:'neutral'}[x.status],label={todo:L('Da verificare','To review'),ok:L('Conforme \/ verificato','Compliant \/ verified'),fail:L('Criticit\u00e0','Noncompliant \/ concern'),na:'N\/A'}[x.status];return `<div class=\"summary-item\"><div class=\"row-between\"><div><strong>${e(tr(c.title))}<\/strong><span class=\"muted small\">${e(tr(c.ref))} \u00b7 ${e(tr(c.when))} \u00b7 ${c.group==='now'?L('Attuale','Current'):L('Futuro','Future')}<\/span><\/div>${badge(kind,label)}<\/div>${x.evidence?`<div class=\"small muted\" style=\"margin-top:4px\">${L('Evidenza','Evidence')}: ${e(x.evidence)}<\/div>`:''}<\/div>`;}).join('');\r\n const missing=documents.filter(([id])=>state.docs[id]==='todo');\r\n document.getElementById('report-docs').innerHTML=missing.length?missing.map(x=>`<div class=\"summary-item\">\u2022 ${e(tr(x[1]))}<\/div>`).join(''):`<div class=\"muted\">${L('Nessun documento segnato \u201cDa richiedere\u201d. Verificare completezza e pertinenza delle evidenze.','No document marked \u201cTo request\u201d. Check evidence completeness and relevance.')}<\/div>`;\r\n document.getElementById('print-conclusion').textContent=m.conclusion||L('Nessuna conclusione inserita.','No conclusions provided.');\r\n}\r\nfunction syncInputs(){for(const el of document.querySelectorAll('[data-meta]'))el.value=state.meta[el.dataset.meta]||'';for(const el of document.querySelectorAll('[data-setting]'))el.value=state.settings[el.dataset.setting]??'';}\r\nfunction renderAll(){syncInputs();renderChecksMaterial();renderMatrix();renderComponents();renderPCR();renderChecklist();renderDocs();renderStats();renderReport();translateAll();}\r\nfunction switchTab(t){if(!['config','check','docs','report'].includes(t))return;selectedTab=t;document.querySelectorAll('.nav-btn').forEach(b=>b.classList.toggle('active',b.dataset.tab===t));document.querySelectorAll('.tab-page').forEach(p=>p.classList.toggle('active',p.id==='page-'+t));if(t==='report')renderReport();window.scrollTo({top:0,behavior:'smooth'});}\r\nfunction download(name,content,type){const url=URL.createObjectURL(new Blob([content],{type}));const a=document.createElement('a');a.href=url;a.download=name;document.body.appendChild(a);a.click();a.remove();setTimeout(()=>URL.revokeObjectURL(url),1000);}\r\nfunction safeName(){return (state.meta.packCode||state.meta.project||'progetto').replace(\/[^a-z0-9_-]\/gi,'_').slice(0,55);}\r\nfunction exportJSON(){download('PPWR_'+safeName()+'.json',JSON.stringify({version:'2.0',exportedAt:new Date().toISOString(),...state},null,2),'application\/json;charset=utf-8');showToast(L('Progetto esportato in JSON','Project exported as JSON'));}\r\nfunction csv(rows){return '\\ufeff'+rows.map(row=>row.map(x=>'\"'+String(x??'').replace(\/\"\/g,'\"\"')+'\"').join(';')).join('\\r\\n');}\r\nfunction exportMatrix(){const rows=[[L('Flacone','Bottle'),'Sleeve',L('Copertura','Coverage'),L('Valutazione','Assessment'),L('Motivazione','Rationale'),L('Associazione attiva','Active combination')],...currentPairs().map(p=>[p.b,p.s,state.settings.coverageType==='full'?L('Totale','Full-body'):L('Parziale','Partial'),p.label,p.reason,p.key===state.activePair?L('S\u00ec','Yes'):L('No','No')])];download('PPWR_matrice_'+safeName()+'.csv',csv(rows),'text\/csv;charset=utf-8');showToast(L('Matrice esportata','Matrix exported'));}\r\nfunction exportChecklist(){const rows=[[L('Gruppo','Group'),L('Requisito','Requirement'),L('Riferimento','Reference'),L('Scadenza','Due date'),L('Stato','Status'),L('Evidenza','Evidence')],...checklist.map(c=>[c.group==='now'?L('Attuale','Current'):L('Futuro','Future'),tr(c.title),tr(c.ref),tr(c.when),{todo:L('Da verificare','To review'),ok:L('Conforme \/ verificato','Compliant \/ verified'),fail:L('Non conforme \/ criticit\u00e0','Noncompliant \/ concern'),na:L('Non applicabile','Not applicable')}[state.checks[c.id].status],state.checks[c.id].evidence])];download('PPWR_checklist_'+safeName()+'.csv',csv(rows),'text\/csv;charset=utf-8');showToast(L('Checklist esportata','Checklist exported'));}\r\nfunction refresh(panels=['stats','report']){save();if(panels.includes('matrix')){renderMatrix();renderComponents();renderPCR();}if(panels.includes('components'))renderComponents();if(panels.includes('pcr'))renderPCR();if(panels.includes('stats'))renderStats();if(panels.includes('report'))renderReport();translateAll();}\r\n\/\/ All editor events are delegated so re-rendered controls keep working.\r\ndocument.addEventListener('click',evt=>{const lang=evt.target.closest('[data-lang]');if(lang){state.lang=lang.dataset.lang;save();renderAll();return;}const b=evt.target.closest('[data-tab]');if(b)switchTab(b.dataset.tab);});\r\ndocument.addEventListener('change',evt=>{const t=evt.target;\r\nif(t.dataset.bottle){state.bottles=BOTTLES.filter(v=>document.querySelector(`[data-bottle=\"${CSS.escape(v)}\"]`).checked);refresh(['matrix','stats','report']);return;}\r\nif(t.dataset.sleeve){state.sleeves=SLEEVES.filter(v=>document.querySelector(`[data-sleeve=\"${CSS.escape(v)}\"]`).checked);refresh(['matrix','stats','report']);return;}\r\nif(t.id==='sleeve-enabled'){state.sleeveEnabled=t.checked;renderChecksMaterial();refresh(['matrix','stats','report']);return;}\r\nif(t.name==='active-pair'){state.activePair=t.value;refresh(['matrix','stats','report']);return;}\r\nif(t.dataset.comp!==undefined){const c=state.components[Number(t.dataset.comp)];if(!c)return;const prop=t.dataset.prop;let val=prop==='enabled'?t.checked:t.value;\r\nif(prop==='mass'||prop==='pcr'){const v=n(val);if(val!==''&&(v===null||v<0||(prop==='pcr'&&v>100))){showToast(L('Inserisci un valore valido','Enter a valid value'));renderComponents();return;}}c[prop]=val;refresh(['components','pcr','stats','report']);return;}\r\nif(t.dataset.check){state.checks[t.dataset.check].status=t.value;refresh();return;}\r\nif(t.dataset.doc){state.docs[t.dataset.doc]=t.value;refresh();return;}\r\nif(t.dataset.meta){state.meta[t.dataset.meta]=t.value;refresh(['pcr','stats','report']);return;}\r\nif(t.dataset.setting){state.settings[t.dataset.setting]=t.value;if(t.dataset.setting==='coveragePct'){const v=n(t.value);if(v===null||v<0||v>100){showToast(L('La copertura deve essere tra 0 e 100%','Coverage must be between 0 and 100%'));state.settings.coveragePct='';t.value='';}}refresh(['matrix','stats','report']);return;}\r\n});\r\ndocument.addEventListener('input',evt=>{const t=evt.target;if(t.dataset.meta){state.meta[t.dataset.meta]=t.value;save();if(selectedTab==='report'&&t.id!=='conclusion')renderReport();}\r\nif(t.dataset.evidence){state.checks[t.dataset.evidence].evidence=t.value;save();}\r\nif(t.dataset.setting&&(t.dataset.setting==='proof'||t.dataset.setting==='coveragePct')){state.settings[t.dataset.setting]=t.value;save();}\r\nif(t.dataset.comp!==undefined){const c=state.components[Number(t.dataset.comp)];if(c&&t.dataset.prop!=='enabled'){c[t.dataset.prop]=t.value;save();}}\r\n});\r\ndocument.getElementById('save-json').addEventListener('click',exportJSON);document.getElementById('save-json2').addEventListener('click',exportJSON);\r\ndocument.getElementById('export-matrix').addEventListener('click',exportMatrix);document.getElementById('export-checklist').addEventListener('click',exportChecklist);\r\nfor(const id of ['print-report','print-report2'])document.getElementById(id).addEventListener('click',()=>{renderReport();translateAll();window.print()});\r\ndocument.getElementById('import-json').addEventListener('change',async evt=>{const f=evt.target.files?.[0];if(!f)return;if(f.size>2_000_000){showToast(L('File troppo grande','File too large'));evt.target.value='';return;}try{state=normalize(JSON.parse(await f.text()));renderAll();save();showToast(L('Progetto importato','Project imported'));}catch(err){showToast(L('File non valido o non leggibile','Invalid or unreadable file'))}evt.target.value='';});\r\ndocument.getElementById('reset-data').addEventListener('click',()=>{if(!window.confirm(L('Ripristinare i dati di esempio? Il progetto corrente sar\u00e0 sovrascritto. Esporta prima una copia se necessario.','Reset sample data? The current project will be overwritten. Export a copy first if needed.')))return;state=baseState();renderAll();save();switchTab('config');showToast(L('Dati esempio ripristinati','Sample data restored'))});\r\nrenderAll();\r\n<\/script>\r\n<\/body>\r\n<\/html>\r\n\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"footnotes":""},"class_list":["post-640","page","type-page","status-publish","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.5 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.italhey.com\/en\/ppwr\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ItalHey S.r.l. - Al tuo fianco per la tua Impresa\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"PPWR - ItalHey S.r.l.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.italhey.com\/en\/ppwr\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-11-04T15:04:25+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-11-05T15:29:28+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"PPWR - ItalHey S.r.l.\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.italhey.com\\\/en\\\/ppwr\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.italhey.com\\\/en\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.italhey.com\\\/en\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.italhey.com\\\/en\\\/ppwr\\\/#listItem\",\"name\":\"PPWR\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.italhey.com\\\/en\\\/ppwr\\\/#listItem\",\"position\":2,\"name\":\"PPWR\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.italhey.com\\\/en\\\/#listItem\",\"name\":\"Home\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.italhey.com\\\/en\\\/#organization\",\"name\":\"ItalHey S.r.l.\",\"description\":\"Al tuo fianco per la tua Impresa\",\"url\":\"https:\\\/\\\/www.italhey.com\\\/en\\\/\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.italhey.com\\\/en\\\/ppwr\\\/#webpage\",\"url\":\"https:\\\/\\\/www.italhey.com\\\/en\\\/ppwr\\\/\",\"name\":\"PPWR - ItalHey S.r.l.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.italhey.com\\\/en\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.italhey.com\\\/en\\\/ppwr\\\/#breadcrumblist\"},\"datePublished\":\"2026-11-04T15:04:25+00:00\",\"dateModified\":\"2026-11-05T15:29:28+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.italhey.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/www.italhey.com\\\/en\\\/\",\"name\":\"ItalHey S.r.l. ItalHey S.r.l.\",\"alternateName\":\"Italhey\",\"description\":\"Al tuo fianco per la tua Impresa\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.italhey.com\\\/en\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"PPWR - ItalHey S.r.l.","description":"","canonical_url":"https:\/\/www.italhey.com\/en\/ppwr\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BreadcrumbList","@id":"https:\/\/www.italhey.com\/en\/ppwr\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.italhey.com\/en\/#listItem","position":1,"name":"Home","item":"https:\/\/www.italhey.com\/en\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.italhey.com\/en\/ppwr\/#listItem","name":"PPWR"}},{"@type":"ListItem","@id":"https:\/\/www.italhey.com\/en\/ppwr\/#listItem","position":2,"name":"PPWR","previousItem":{"@type":"ListItem","@id":"https:\/\/www.italhey.com\/en\/#listItem","name":"Home"}}]},{"@type":"Organization","@id":"https:\/\/www.italhey.com\/en\/#organization","name":"ItalHey S.r.l.","description":"Al tuo fianco per la tua Impresa","url":"https:\/\/www.italhey.com\/en\/"},{"@type":"WebPage","@id":"https:\/\/www.italhey.com\/en\/ppwr\/#webpage","url":"https:\/\/www.italhey.com\/en\/ppwr\/","name":"PPWR - ItalHey S.r.l.","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.italhey.com\/en\/#website"},"breadcrumb":{"@id":"https:\/\/www.italhey.com\/en\/ppwr\/#breadcrumblist"},"datePublished":"2026-11-04T15:04:25+00:00","dateModified":"2026-11-05T15:29:28+00:00"},{"@type":"WebSite","@id":"https:\/\/www.italhey.com\/en\/#website","url":"https:\/\/www.italhey.com\/en\/","name":"ItalHey S.r.l. ItalHey S.r.l.","alternateName":"Italhey","description":"Al tuo fianco per la tua Impresa","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.italhey.com\/en\/#organization"}}]},"og:locale":"en_US","og:site_name":"ItalHey S.r.l. - Al tuo fianco per la tua Impresa","og:type":"article","og:title":"PPWR - ItalHey S.r.l.","og:url":"https:\/\/www.italhey.com\/en\/ppwr\/","article:published_time":"2026-11-04T15:04:25+00:00","article:modified_time":"2026-11-05T15:29:28+00:00","twitter:card":"summary_large_image","twitter:title":"PPWR - ItalHey S.r.l."},"aioseo_meta_data":{"post_id":"640","title":null,"description":null,"keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"WebPage","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2026-11-04 15:04:31","updated":"2026-11-05 23:29:20","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.italhey.com\/en\/\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tPPWR\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.italhey.com\/en\/"},{"label":"PPWR","link":"https:\/\/www.italhey.com\/en\/ppwr\/"}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.italhey.com\/en\/wp-json\/wp\/v2\/pages\/640","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.italhey.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.italhey.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.italhey.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.italhey.com\/en\/wp-json\/wp\/v2\/comments?post=640"}],"version-history":[{"count":11,"href":"https:\/\/www.italhey.com\/en\/wp-json\/wp\/v2\/pages\/640\/revisions"}],"predecessor-version":[{"id":653,"href":"https:\/\/www.italhey.com\/en\/wp-json\/wp\/v2\/pages\/640\/revisions\/653"}],"wp:attachment":[{"href":"https:\/\/www.italhey.com\/en\/wp-json\/wp\/v2\/media?parent=640"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}