<style id="elementor-post-31454">.elementor-31454 .elementor-element.elementor-element-09a47f1 .trx_addons_bg_text{z-index:0;}.elementor-31454 .elementor-element.elementor-element-09a47f1 .trx_addons_bg_text.trx_addons_marquee_wrap:not(.trx_addons_marquee_reverse) .trx_addons_marquee_element{padding-right:50px;}.elementor-31454 .elementor-element.elementor-element-09a47f1 .trx_addons_bg_text.trx_addons_marquee_wrap.trx_addons_marquee_reverse .trx_addons_marquee_element{padding-left:50px;}</style>{"id":31454,"date":"2026-07-21T11:36:35","date_gmt":"2026-07-21T09:36:35","guid":{"rendered":"https:\/\/pleion.it\/pleihome-configurator\/"},"modified":"2026-07-22T12:09:16","modified_gmt":"2026-07-22T10:09:16","slug":"pleihome-configurator","status":"publish","type":"page","link":"https:\/\/pleion.it\/en\/pleihome-configurator\/","title":{"rendered":"PleiHome Configurator"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"31454\" class=\"elementor elementor-31454 elementor-31365\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-09a47f1 elementor-section-full_width elementor-section-height-default elementor-section-height-default sc_fly_static\" data-id=\"09a47f1\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-extended\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-e6212b4 sc_content_align_inherit sc_layouts_column_icons_position_left sc_fly_static\" data-id=\"e6212b4\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d2fa670 sc_fly_static elementor-widget elementor-widget-html\" data-id=\"d2fa670\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\n#pleihome-cfg *, #pleihome-cfg *::before, #pleihome-cfg *::after { margin: 0; padding: 0; box-sizing: border-box; }\n#pleihome-cfg {\n  font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n  background: linear-gradient(135deg, #eb3349 0%, #f45c43 100%);\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  padding: 20px;\n}\n#pleihome-cfg .logo-header { color: white; text-align: center; margin-bottom: 24px; padding-top: 10px; }\n#pleihome-cfg .logo-header h1 { font-size: 28px; font-weight: 700; letter-spacing: -0.5px; }\n#pleihome-cfg .logo-header p { opacity: 0.85; margin-top: 4px; font-size: 15px; }\n#pleihome-cfg .progress-wrap {\n  width: 100%; max-width: 820px;\n  background: rgba(255,255,255,0.15);\n  border-radius: 50px; height: 8px;\n  margin-bottom: 20px; overflow: hidden;\n}\n#pleihome-cfg .progress-bar { height: 100%; background: white; border-radius: 50px; transition: width 0.4s ease; }\n#pleihome-cfg .step-counter { color: rgba(255,255,255,0.9); font-size: 13px; text-align: center; margin-bottom: 16px; font-weight: 500; }\n#pleihome-cfg .container {\n  background: white; border-radius: 20px;\n  box-shadow: 0 20px 60px rgba(0,0,0,0.25);\n  max-width: 820px; width: 100%; padding: 40px;\n  animation: fadeIn 0.4s ease-in;\n}\n@keyframes fadeIn { from { opacity:0; transform:translateY(16px); } to { opacity:1; transform:translateY(0); } }\n#pleihome-cfg h2 { color: #222; font-size: 22px; margin-bottom: 6px; }\n#pleihome-cfg .step-subtitle { color: #666; font-size: 15px; margin-bottom: 20px; line-height: 1.5; }\n#pleihome-cfg \/* Info banner *\/\n.info-banner {\n  background: #f0f7ff; border: 1.5px solid #90caf9;\n  border-radius: 12px; padding: 14px 18px;\n  font-size: 13px; color: #1a5276;\n  margin-bottom: 20px;\n  display: flex; align-items: flex-start; gap: 10px;\n  line-height: 1.6;\n}\n#pleihome-cfg .info-banner-icon { font-size: 22px; flex-shrink: 0; margin-top: 1px; }\n#pleihome-cfg .info-banner strong { color: #1a5276; }\n#pleihome-cfg \/* System flow diagram *\/\n.system-flow {\n  display: flex; align-items: center; justify-content: center;\n  gap: 6px; margin-bottom: 24px; flex-wrap: wrap;\n}\n#pleihome-cfg .flow-step {\n  display: flex; flex-direction: column; align-items: center;\n  background: #f8f9ff; border: 2px solid #e0e0e0;\n  border-radius: 12px; padding: 10px 14px; min-width: 80px;\n  text-align: center; font-size: 11px; color: #555;\n  font-weight: 600; transition: border-color 0.3s;\n}\n#pleihome-cfg .flow-step .flow-icon { font-size: 26px; margin-bottom: 4px; }\n#pleihome-cfg .flow-step.active-flow { border-color: #eb3349; background: rgba(235,51,73,0.05); color: #eb3349; }\n#pleihome-cfg .flow-arrow { font-size: 20px; color: #ccc; }\n#pleihome-cfg \/* Cards *\/\n.cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 14px; margin-bottom: 10px; }\n#pleihome-cfg .cards.cols-2 { grid-template-columns: repeat(2, 1fr); }\n#pleihome-cfg .cards.cols-3 { grid-template-columns: repeat(3, 1fr); }\n#pleihome-cfg .cards.cols-4 { grid-template-columns: repeat(4, 1fr); }\n#pleihome-cfg .card {\n  border: 2px solid #e0e0e0; border-radius: 14px;\n  padding: 18px 14px; cursor: pointer; text-align: center;\n  transition: all 0.25s; background: #fafafa;\n  position: relative; user-select: none;\n}\n#pleihome-cfg .card:hover { border-color: #eb3349; background: white; box-shadow: 0 4px 16px rgba(235,51,73,0.15); transform: translateY(-2px); }\n#pleihome-cfg .card.selected {\n  background: linear-gradient(135deg, rgba(235,51,73,0.08), rgba(244,92,67,0.08));\n  border-color: #eb3349; border-width: 2.5px;\n  box-shadow: 0 4px 16px rgba(235,51,73,0.25);\n}\n#pleihome-cfg .card.selected::after {\n  content: '\u2713'; position: absolute; top: 8px; right: 10px;\n  width: 22px; height: 22px; background: #eb3349; color: white;\n  border-radius: 50%; font-size: 12px; font-weight: 700;\n  display: flex; align-items: center; justify-content: center; line-height: 22px;\n}\n#pleihome-cfg .card-icon { font-size: 38px; margin-bottom: 10px; display: block; }\n#pleihome-cfg .card-title { font-size: 14px; font-weight: 700; color: #222; margin-bottom: 4px; }\n#pleihome-cfg .card-desc { font-size: 12px; color: #777; line-height: 1.4; }\n#pleihome-cfg .card-device-badge {\n  display: inline-block; margin-top: 8px;\n  font-size: 10px; background: #f0f7ff;\n  border: 1px solid #90caf9; border-radius: 20px;\n  padding: 2px 8px; color: #1565c0; font-weight: 600;\n  line-height: 1.6;\n}\n#pleihome-cfg \/* Image card *\/\n.card-img-wrap {\n  width: 80px; height: 80px; margin: 0 auto 12px;\n  border-radius: 12px; overflow: hidden;\n  background: #f5f5f5; border: 1px solid #e0e0e0;\n  display: flex; align-items: center; justify-content: center;\n}\n#pleihome-cfg .card-img-wrap img { width: 100%; height: 100%; object-fit: contain; padding: 6px; }\n#pleihome-cfg \/* Generator icon circle *\/\n.gen-icon-wrap {\n  width: 72px; height: 72px; margin: 0 auto 12px;\n  border-radius: 50%; display: flex; align-items: center; justify-content: center;\n  font-size: 34px;\n}\n#pleihome-cfg .gen-icon-wrap.pdc { background: #fce4ec; }\n#pleihome-cfg .gen-icon-wrap.caldaia { background: #fff3e0; }\n#pleihome-cfg .gen-icon-wrap.biomassa { background: #f1f8e9; }\n#pleihome-cfg .gen-icon-wrap.solare { background: #fffde7; }\n#pleihome-cfg \/* Fields *\/\n.field-group { margin-bottom: 20px; }\n#pleihome-cfg .field-label { font-size: 14px; font-weight: 600; color: #333; margin-bottom: 6px; display: block; }\n#pleihome-cfg .field-input {\n  width: 100%; padding: 12px 14px; border: 2px solid #e0e0e0; border-radius: 10px;\n  font-size: 15px; transition: all 0.3s; font-family: inherit; background: #fafafa;\n}\n#pleihome-cfg .field-input:focus { outline: none; border-color: #eb3349; background: white; box-shadow: 0 0 0 3px rgba(235,51,73,0.08); }\n#pleihome-cfg \/* Qty rows *\/\n.qty-row {\n  display: flex; align-items: center; justify-content: space-between;\n  padding: 14px 18px; background: #f8f9ff;\n  border: 2px solid #e0e0e0; border-radius: 12px; margin-bottom: 12px;\n  transition: border-color 0.2s;\n}\n#pleihome-cfg .qty-row.highlight { border-color: #eb3349; background: rgba(235,51,73,0.04); }\n#pleihome-cfg .qty-label { font-size: 15px; font-weight: 600; color: #333; }\n#pleihome-cfg .qty-sublabel { font-size: 12px; color: #888; margin-top: 2px; }\n#pleihome-cfg .qty-controls { display: flex; align-items: center; gap: 10px; flex-shrink: 0; }\n#pleihome-cfg .qty-btn {\n  width: 34px; height: 34px; border-radius: 50%;\n  border: 2px solid #eb3349; background: white; color: #eb3349;\n  font-size: 20px; font-weight: 700; cursor: pointer;\n  transition: all 0.2s; display: flex; align-items: center; justify-content: center;\n}\n#pleihome-cfg .qty-btn:hover { background: #eb3349; color: white; }\n#pleihome-cfg .qty-value { font-size: 20px; font-weight: 700; color: #222; min-width: 28px; text-align: center; }\n#pleihome-cfg \/* Toggle *\/\n.toggle-row {\n  display: flex; align-items: center; justify-content: space-between;\n  padding: 16px 18px; background: #f8f9ff;\n  border: 2px solid #e0e0e0; border-radius: 12px; margin-bottom: 12px;\n  cursor: pointer; transition: all 0.3s;\n}\n#pleihome-cfg .toggle-row.active-toggle { border-color: #eb3349; background: rgba(235,51,73,0.05); }\n#pleihome-cfg .toggle-info .toggle-title { font-size: 15px; font-weight: 600; color: #333; }\n#pleihome-cfg .toggle-info .toggle-desc { font-size: 12px; color: #888; margin-top: 2px; }\n#pleihome-cfg .toggle {\n  width: 48px; height: 26px; border-radius: 13px;\n  background: #ccc; cursor: pointer; position: relative;\n  transition: all 0.3s; flex-shrink: 0;\n}\n#pleihome-cfg .toggle.on { background: #eb3349; }\n#pleihome-cfg .toggle::after {\n  content: ''; position: absolute; top: 3px; left: 3px;\n  width: 20px; height: 20px; border-radius: 50%;\n  background: white; box-shadow: 0 2px 4px rgba(0,0,0,0.2);\n  transition: transform 0.3s;\n}\n#pleihome-cfg .toggle.on::after { transform: translateX(22px); }\n#pleihome-cfg \/* Section divider *\/\n.section-label {\n  font-size: 12px; font-weight: 700; letter-spacing: 0.8px;\n  text-transform: uppercase; color: #eb3349;\n  margin: 20px 0 10px; padding-bottom: 6px;\n  border-bottom: 2px solid rgba(235,51,73,0.2);\n}\n#pleihome-cfg \/* Remaining rooms badge *\/\n.rooms-remaining {\n  text-align: center; padding: 12px;\n  background: #f8f9ff; border-radius: 10px;\n  margin-bottom: 16px; font-size: 15px; color: #555;\n  border: 2px solid #e0e0e0; transition: all 0.3s;\n}\n#pleihome-cfg .rooms-remaining .num { font-size: 28px; font-weight: 700; color: #eb3349; display: block; }\n#pleihome-cfg .rooms-remaining.ok { border-color: #4caf50; background: #f1f8f1; }\n#pleihome-cfg .rooms-remaining.ok .num { color: #2e7d32; }\n#pleihome-cfg .rooms-remaining.over { border-color: #f44336; background: #fef5f5; }\n#pleihome-cfg .rooms-remaining.over .num { color: #c62828; }\n#pleihome-cfg \/* Help expandable box *\/\n.help-expandable {\n  border: 2px solid #e0e0e0; border-radius: 12px;\n  margin-bottom: 20px; overflow: hidden;\n}\n#pleihome-cfg .help-expandable-header {\n  display: flex; align-items: center; justify-content: space-between;\n  padding: 12px 16px; cursor: pointer;\n  background: #f8f9ff; font-size: 13px; font-weight: 600; color: #555;\n  transition: background 0.2s;\n}\n#pleihome-cfg .help-expandable-header:hover { background: #eef3ff; color: #333; }\n#pleihome-cfg .help-toggle { font-size: 12px; transition: transform 0.3s; }\n#pleihome-cfg .help-toggle.open { transform: rotate(180deg); }\n#pleihome-cfg .help-expandable-body {\n  display: none; padding: 16px; font-size: 13px;\n  color: #555; line-height: 1.6; border-top: 1px solid #e0e0e0;\n  background: white;\n}\n#pleihome-cfg .help-expandable-body.open { display: block; }\n#pleihome-cfg .help-types-grid {\n  display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n  gap: 10px; margin-top: 12px;\n}\n#pleihome-cfg .help-type {\n  background: #f8f9ff; border-radius: 10px; padding: 12px;\n  font-size: 12px; color: #444; line-height: 1.5;\n  border: 1px solid #e0e0e0;\n}\n#pleihome-cfg .help-type-icon { display: block; font-size: 22px; margin-bottom: 6px; }\n#pleihome-cfg .help-type strong { color: #222; display: block; margin-bottom: 4px; }\n#pleihome-cfg \/* Accumuli visual *\/\n.acc-visual-grid {\n  display: grid; grid-template-columns: repeat(3, 1fr);\n  gap: 10px; margin-bottom: 16px;\n}\n#pleihome-cfg .acc-visual-card {\n  border: 2px solid #e0e0e0; border-radius: 12px;\n  padding: 12px 10px; text-align: center;\n  background: #fafafa; font-size: 11px; color: #666; line-height: 1.5;\n}\n#pleihome-cfg .acc-visual-card .av-icon { font-size: 30px; margin-bottom: 6px; display: block; }\n#pleihome-cfg .acc-visual-card strong { display: block; color: #333; font-size: 12px; margin-bottom: 3px; }\n#pleihome-cfg \/* Buttons *\/\n.btn-row { display: flex; gap: 12px; margin-top: 28px; }\n#pleihome-cfg .btn {\n  flex: 1; padding: 14px 24px; border: none; border-radius: 50px;\n  font-size: 16px; font-weight: 600; cursor: pointer; transition: all 0.25s;\n}\n#pleihome-cfg .btn-primary { background: linear-gradient(135deg, #eb3349, #f45c43); color: white; box-shadow: 0 4px 14px rgba(235,51,73,0.35); }\n#pleihome-cfg .btn-primary:hover { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(235,51,73,0.5); }\n#pleihome-cfg .btn-primary:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }\n#pleihome-cfg .btn-secondary { background: white; color: #eb3349; border: 2px solid #eb3349; box-shadow: none; flex: 0 0 auto; padding: 14px 28px; }\n#pleihome-cfg .btn-secondary:hover { background: #fef5f6; }\n#pleihome-cfg \/* \u2500\u2500 Result \u2500\u2500 *\/\n.result-header { text-align: center; margin-bottom: 32px; }\n#pleihome-cfg .result-header .check { font-size: 64px; margin-bottom: 12px; display: block; }\n#pleihome-cfg .result-section { margin-bottom: 28px; }\n#pleihome-cfg .result-section-title {\n  font-size: 12px; font-weight: 700; letter-spacing: 0.8px;\n  text-transform: uppercase; color: #eb3349;\n  margin-bottom: 12px; padding-bottom: 6px;\n  border-bottom: 2px solid rgba(235,51,73,0.2);\n}\n#pleihome-cfg .component-table { width: 100%; border-collapse: collapse; }\n#pleihome-cfg .component-table th { text-align: left; font-size: 12px; font-weight: 700; color: #888; padding: 8px 10px; border-bottom: 1px solid #f0f0f0; }\n#pleihome-cfg .component-table td { padding: 10px; font-size: 14px; border-bottom: 1px solid #f7f7f7; vertical-align: middle; }\n#pleihome-cfg .component-table tr:last-child td { border-bottom: none; }\n#pleihome-cfg .td-qty { font-weight: 700; color: #eb3349; width: 48px; text-align: center; vertical-align: top; padding-top: 14px; }\n#pleihome-cfg .td-item { color: #222; display: flex; align-items: flex-start; gap: 10px; }\n#pleihome-cfg .td-item-info { flex: 1; }\n#pleihome-cfg .td-item-name { font-weight: 700; color: #222; font-size: 14px; line-height: 1.3; }\n#pleihome-cfg .td-item-code { font-size: 11px; color: #b0b0b0; font-family: 'Courier New', monospace; margin-top: 2px; letter-spacing: 0.3px; }\n#pleihome-cfg .td-item-desc { font-size: 12px; color: #666; line-height: 1.5; margin-top: 5px; padding-top: 5px; border-top: 1px solid #f0f0f0; }\n#pleihome-cfg .td-note { color: #888; font-size: 12px; vertical-align: top; padding-top: 14px; }\n#pleihome-cfg \/* Device thumbnail in result *\/\n.device-thumb {\n  width: 48px; height: 48px; border-radius: 10px;\n  object-fit: contain; background: #f5f5f5;\n  border: 1px solid #e0e0e0; padding: 4px;\n  flex-shrink: 0; margin-top: 2px;\n}\n#pleihome-cfg .device-thumb-placeholder {\n  width: 48px; height: 48px; border-radius: 10px;\n  background: #f5f5f5; border: 1px solid #e0e0e0;\n  display: flex; align-items: center; justify-content: center;\n  font-size: 22px; flex-shrink: 0; margin-top: 2px;\n}\n#pleihome-cfg \/* Device gallery in result *\/\n.device-gallery {\n  display: flex; flex-wrap: wrap; gap: 10px;\n  padding: 16px; background: #f8f9ff;\n  border-radius: 14px; margin-bottom: 8px;\n  border: 1.5px solid #e0e0e0;\n}\n#pleihome-cfg .gallery-item {\n  display: flex; flex-direction: column; align-items: center;\n  gap: 4px; text-align: center; min-width: 70px;\n}\n#pleihome-cfg .gallery-img-wrap {\n  width: 56px; height: 56px; border-radius: 10px;\n  background: white; border: 1.5px solid #e0e0e0;\n  display: flex; align-items: center; justify-content: center;\n  overflow: hidden;\n}\n#pleihome-cfg .gallery-img-wrap img { width: 100%; height: 100%; object-fit: contain; padding: 4px; }\n#pleihome-cfg .gallery-img-wrap .gallery-emoji { font-size: 26px; }\n#pleihome-cfg .gallery-label { font-size: 10px; color: #666; line-height: 1.3; max-width: 70px; }\n#pleihome-cfg .badge-addon { display: inline-block; padding: 4px 10px; background: #f0f7ff; border: 1px solid #90caf9; border-radius: 20px; font-size: 13px; color: #1565c0; font-weight: 600; margin: 3px 4px 3px 0; }\n#pleihome-cfg .note-item { display: flex; gap: 8px; align-items: flex-start; padding: 8px 0; font-size: 13px; color: #555; border-bottom: 1px solid #f7f7f7; }\n#pleihome-cfg .note-item:last-child { border-bottom: none; }\n#pleihome-cfg .note-item::before { content: '\u2192'; color: #eb3349; font-weight: 700; flex-shrink: 0; }\n#pleihome-cfg .result-summary-box {\n  background: linear-gradient(135deg, rgba(235,51,73,0.06), rgba(244,92,67,0.06));\n  border: 2px solid rgba(235,51,73,0.25);\n  border-radius: 16px; padding: 20px 24px;\n  display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));\n  gap: 16px; margin-bottom: 28px;\n}\n#pleihome-cfg .summary-stat { text-align: center; }\n#pleihome-cfg .summary-stat .num { font-size: 32px; font-weight: 700; color: #eb3349; }\n#pleihome-cfg .summary-stat .label { font-size: 11px; color: #888; margin-top: 2px; }\n#pleihome-cfg .result-actions { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; margin-top: 32px; }\n#pleihome-cfg .print-btn { background: white; border: 2px solid #4caf50; color: #2e7d32; padding: 12px 28px; border-radius: 50px; font-size: 15px; font-weight: 600; cursor: pointer; transition: all 0.25s; }\n#pleihome-cfg .print-btn:hover { background: #e8f5e9; }\n#pleihome-cfg .restart-btn { background: white; border: 2px solid #eb3349; color: #eb3349; padding: 12px 28px; border-radius: 50px; font-size: 15px; font-weight: 600; cursor: pointer; transition: all 0.25s; }\n#pleihome-cfg .restart-btn:hover { background: #fef5f6; }\n#pleihome-cfg \/* \u2500\u2500 Kit cards \u2500\u2500 *\/\n.kit-card {\n  border: 2.5px solid #eb3349; border-radius: 16px;\n  margin-bottom: 16px; overflow: hidden;\n  box-shadow: 0 2px 12px rgba(235,51,73,0.10);\n}\n#pleihome-cfg \/* Colori per tipo di kit *\/\n.kit-card-base { border-color: #eb3349; box-shadow: 0 2px 14px rgba(235,51,73,0.15); }\n#pleihome-cfg .kit-card-ext-radiatori { border-color: #ff7043; box-shadow: 0 2px 12px rgba(255,112,67,0.13); }\n#pleihome-cfg .kit-card-ext-radiante { border-color: #66bb6a; box-shadow: 0 2px 12px rgba(102,187,106,0.13); }\n#pleihome-cfg .kit-card-ext-fancoil { border-color: #42a5f5; box-shadow: 0 2px 12px rgba(66,165,245,0.13); }\n#pleihome-cfg .kit-card-header {\n  display: flex; align-items: flex-start; gap: 16px;\n  padding: 18px 20px; border-bottom: 1.5px solid rgba(235,51,73,0.18);\n  background: linear-gradient(135deg, rgba(235,51,73,0.06), rgba(244,92,67,0.04));\n}\n#pleihome-cfg .kit-card-ext-radiatori .kit-card-header { background: linear-gradient(135deg,rgba(255,112,67,0.08),rgba(255,87,34,0.04)); border-bottom-color: rgba(255,112,67,0.25); }\n#pleihome-cfg .kit-card-ext-radiante  .kit-card-header { background: linear-gradient(135deg,rgba(102,187,106,0.09),rgba(76,175,80,0.04)); border-bottom-color: rgba(102,187,106,0.3); }\n#pleihome-cfg .kit-card-ext-fancoil   .kit-card-header { background: linear-gradient(135deg,rgba(66,165,245,0.10),rgba(33,150,243,0.05)); border-bottom-color: rgba(66,165,245,0.3); }\n#pleihome-cfg .kit-qty-badge {\n  font-size: 30px; font-weight: 800; color: #eb3349;\n  min-width: 52px; text-align: center; padding-top: 6px; line-height: 1;\n}\n#pleihome-cfg .kit-card-ext-radiatori .kit-qty-badge { color: #bf360c; }\n#pleihome-cfg .kit-card-ext-radiante  .kit-qty-badge { color: #2e7d32; }\n#pleihome-cfg .kit-card-ext-fancoil   .kit-qty-badge { color: #0d47a1; }\n#pleihome-cfg .kit-header-info { flex: 1; }\n#pleihome-cfg .kit-cod { font-size: 11px; font-family: 'Courier New', monospace; color: #aaa; margin-bottom: 3px; letter-spacing: 0.5px; }\n#pleihome-cfg .kit-name { font-size: 17px; font-weight: 800; color: #222; margin-bottom: 4px; }\n#pleihome-cfg .kit-desc { font-size: 13px; color: #666; line-height: 1.4; }\n#pleihome-cfg .kit-contents { padding: 14px 20px 18px; background: white; }\n#pleihome-cfg .kit-includes-title {\n  font-size: 11px; font-weight: 700; color: #eb3349;\n  letter-spacing: 0.8px; text-transform: uppercase;\n  margin-bottom: 10px; padding-bottom: 4px;\n  border-bottom: 1px solid rgba(235,51,73,0.15);\n}\n#pleihome-cfg .kit-card-ext-radiatori .kit-includes-title { color: #bf360c; border-bottom-color: rgba(255,112,67,0.3); }\n#pleihome-cfg .kit-card-ext-radiante  .kit-includes-title { color: #2e7d32; border-bottom-color: rgba(102,187,106,0.4); }\n#pleihome-cfg .kit-card-ext-fancoil   .kit-includes-title { color: #0d47a1; border-bottom-color: rgba(66,165,245,0.4); }\n#pleihome-cfg .kit-items-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 4px 16px; }\n#pleihome-cfg .kit-item { display: flex; align-items: flex-start; gap: 8px; padding: 8px 0; font-size: 13px; color: #333; border-bottom: 1px solid #f7f7f7; }\n#pleihome-cfg .kit-item:last-child { border-bottom: none; }\n#pleihome-cfg .kit-item-qty { font-weight: 700; color: #eb3349; min-width: 26px; font-size: 13px; flex-shrink: 0; padding-top: 10px; }\n#pleihome-cfg .kit-item-thumb { width: 40px; height: 40px; object-fit: contain; border-radius: 6px; background: #f5f5f5; padding: 3px; flex-shrink: 0; }\n#pleihome-cfg .kit-item-thumb-ph { width: 40px; height: 40px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; font-size: 20px; background: #f5f5f5; border-radius: 6px; }\n#pleihome-cfg .kit-card-ext-radiatori .kit-item-qty { color: #bf360c; }\n#pleihome-cfg .kit-card-ext-radiante  .kit-item-qty { color: #2e7d32; }\n#pleihome-cfg .kit-card-ext-fancoil   .kit-item-qty { color: #0d47a1; }\n#pleihome-cfg .kit-item-body { display: flex; flex-direction: column; gap: 2px; flex: 1; }\n#pleihome-cfg .kit-item-name { font-weight: 500; }\n#pleihome-cfg .kit-item-cod { font-size: 10px; color: #aaa; font-family: 'Courier New', monospace; }\n#pleihome-cfg .kit-item-desc { font-size: 11px; color: #888; line-height: 1.4; margin-top: 2px; }\n#pleihome-cfg \/* BOM table *\/\n.bom-table { width: 100%; border-collapse: collapse; font-size: 13px; }\n#pleihome-cfg .bom-table th { text-align: left; padding: 7px 10px; background: #f8f8f8; border-bottom: 2px solid #e0e0e0; font-size: 12px; color: #888; text-transform: uppercase; letter-spacing: 0.04em; }\n#pleihome-cfg .bom-table td { padding: 8px 10px; border-bottom: 1px solid #f3f3f3; }\n#pleihome-cfg .bom-table tr.bom-kit-row { background: #fff9f9; font-weight: 600; }\n#pleihome-cfg .bom-table tr.bom-kit-row td { border-bottom: 1px solid #fce4e4; }\n#pleihome-cfg .bom-qty { font-weight: 700; width: 50px; white-space: nowrap; }\n#pleihome-cfg .bom-cod { font-family: 'Courier New', monospace; font-size: 12px; color: #666; width: 130px; white-space: nowrap; }\n#pleihome-cfg .hidden { display: none !important; }\n#pleihome-cfg .step-block { display: none; }\n#pleihome-cfg .step-block.active { display: block; animation: fadeIn 0.35s ease-in; }\n\n@media (max-width: 520px) {\n#pleihome-cfg .acc-visual-grid { grid-template-columns: 1fr; }\n#pleihome-cfg .cards.cols-4 { grid-template-columns: repeat(2, 1fr); }\n#pleihome-cfg .help-types-grid { grid-template-columns: 1fr; }\n#pleihome-cfg .container { padding: 24px 18px; }\n}\n\n@media print {\n#pleihome-cfg body { background: white; padding: 0; }\n#pleihome-cfg .logo-header, #pleihome-cfg .progress-wrap, #pleihome-cfg .step-counter, #pleihome-cfg .btn-row, #pleihome-cfg .result-actions { display: none !important; }\n#pleihome-cfg .container { box-shadow: none; max-width: 100%; padding: 24px; }\n#pleihome-cfg .step-block { display: none !important; }\n#pleihome-cfg #result-page { display: block !important; }\n#pleihome-cfg .device-gallery { break-inside: avoid; }\n#pleihome-cfg .component-table tr { break-inside: avoid; }\n#pleihome-cfg .td-item-desc { color: #444; }\n#pleihome-cfg .td-item-code { color: #888; }\n}\n  <\/style>\n\n<div id=\"pleihome-cfg\">\n<div class=\"logo-header\">\n  <h1>PleIHome<\/h1>\n  <p>Customer Package Configurator<\/p>\n<\/div>\n<div class=\"progress-wrap\"><div class=\"progress-bar\" id=\"progress-bar\" style=\"width:14%\"><\/div><\/div>\n<div class=\"step-counter\" id=\"step-counter\">Step 1 of 7<\/div>\n\n<div class=\"container\" id=\"wizard-container\">\n\n  <!-- \u2550\u2550\u2550\u2550\u2550\u2550 STEP 1 \u2014 Cliente \u2550\u2550\u2550\u2550\u2550\u2550 -->\n  <div class=\"step-block active\" id=\"step-1\">\n    <h2>\ud83d\udc64 Customer Information<\/h2>\n    <p class=\"step-subtitle\">Enter the customer's information to customize the final report.<\/p>\n\n    <div class=\"info-banner\">\n      <span class=\"info-banner-icon\">\u2139\ufe0f<\/span>\n      <div>This configurator guides you step by step through the process of selecting the smart components needed for your system. When you're done, you'll receive a <strong>detailed list of devices<\/strong> to install. <\/div>\n    <\/div>\n\n    <!-- Diagramma sistema -->\n    <div class=\"system-flow\">\n      <div class=\"flow-step\">\n        <span class=\"flow-icon\">\ud83d\udd25<\/span>\n Generators\n      <\/div>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <div class=\"flow-step\">\n        <span class=\"flow-icon\">\ud83d\udee2\ufe0f<\/span>\n Accumuli\n      <\/div>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <div class=\"flow-step\">\n        <span class=\"flow-icon\">\ud83d\udd04<\/span>\n Distribution\n      <\/div>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <div class=\"flow-step\">\n        <span class=\"flow-icon\">\ud83c\udfe0<\/span>\n Rooms\n      <\/div>\n    <\/div>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\">First and Last Name \/ Company Name<\/label>\n      <input class=\"field-input\" id=\"f-nome\" type=\"text\" placeholder=\"e.g., Mario Rossi\" autocomplete=\"off\">\n    <\/div>\n    <div class=\"field-group\">\n      <label class=\"field-label\">Email<\/label>\n      <input class=\"field-input\" id=\"f-email\" type=\"email\" placeholder=\"E.g., mario.rossi@email.com\" autocomplete=\"off\">\n    <\/div>\n    <div class=\"field-group\">\n      <label class=\"field-label\">Address \/ City<\/label>\n      <input class=\"field-input\" id=\"f-citta\" type=\"text\" placeholder=\"E.g., Via Roma 1, Turin\" autocomplete=\"off\">\n    <\/div>\n\n    <div class=\"btn-row\">\n      <button class=\"btn btn-primary\" onclick=\"goTo(2)\">Next \u2192<\/button>\n    <\/div>\n  <\/div>\n\n  <!-- \u2550\u2550\u2550\u2550\u2550\u2550 STEP 2 \u2014 Generatori \u2550\u2550\u2550\u2550\u2550\u2550 -->\n  <div class=\"step-block\" id=\"step-2\">\n    <h2>\ud83d\udd25 Heat Generators<\/h2>\n    <p class=\"step-subtitle\">Select all generators in the system. (multiple selection) <\/p>\n\n    <div class=\"info-banner\">\n      <span class=\"info-banner-icon\">\ud83d\udca1<\/span>\n      <div><strong>Heaters<\/strong> are devices that generate heat to warm your home and heat domestic water. Select all the units that are installed, even if they aren't used year-round. <\/div>\n    <\/div>\n\n    <div class=\"cards cols-2\">\n      <div class=\"card multi-card\" data-val=\"pdc\" onclick=\"toggleMultiCard(this, 'gen')\">\n        <div class=\"gen-icon-wrap pdc\">\u2668\ufe0f<\/div>\n        <div class=\"card-title\">Heat Pump<\/div>\n        <div class=\"card-desc\">It generates heat (and cooling) using energy from the air or the ground. Very efficient. <\/div>\n      <\/div>\n      <div class=\"card multi-card\" data-val=\"caldaia\" onclick=\"toggleMultiCard(this, 'gen')\">\n        <div class=\"gen-icon-wrap caldaia\">\ud83d\udd25<\/div>\n        <div class=\"card-title\">Boiler<\/div>\n        <div class=\"card-desc\">It burns natural gas, diesel, or LPG to produce hot water for heating and domestic use.<\/div>\n      <\/div>\n      <div class=\"card multi-card\" data-val=\"biomassa\" onclick=\"toggleMultiCard(this, 'gen')\">\n        <div class=\"gen-icon-wrap biomassa\">\ud83e\udeb5<\/div>\n        <div class=\"card-title\">Biomass<\/div>\n        <div class=\"card-desc\">Boiler, stove, or fireplace insert fueled by pellets, wood, or wood chips.<\/div>\n      <\/div>\n      <div class=\"card multi-card\" data-val=\"solare_termico\" onclick=\"toggleMultiCard(this, 'gen')\">\n        <div class=\"gen-icon-wrap solare\">\u2600\ufe0f<\/div>\n        <div class=\"card-title\">Solar Thermal<\/div>\n        <div class=\"card-desc\">Solar panels for heating domestic hot water, with a Resol controller.<\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"btn-row\">\n      <button class=\"btn btn-secondary\" onclick=\"goTo(1)\">\u2190 Back<\/button>\n      <button class=\"btn btn-primary\" id=\"btn-2\" onclick=\"goTo(3)\" disabled=\"disabled\">Next \u2192<\/button>\n    <\/div>\n  <\/div>\n\n  <!-- \u2550\u2550\u2550\u2550\u2550\u2550 STEP 3 \u2014 ACS e Accumuli \u2550\u2550\u2550\u2550\u2550\u2550 -->\n  <div class=\"step-block\" id=\"step-3\">\n    <h2>\ud83d\udebf Storage Tanks and Reservoirs<\/h2>\n    <p class=\"step-subtitle\">Are there any thermal storage tanks or water heaters for domestic hot water?<\/p>\n\n    <div class=\"info-banner\">\n      <span class=\"info-banner-icon\">\ud83d\udca1<\/span>\n      <div>A <strong>storage<\/strong> tank is an insulated tank that stores hot water. It serves to decouple the water heater from water usage: the water heater heats the tank when it is most efficient to do so, and the tank releases the heat when needed. <\/div>\n    <\/div>\n\n    <div class=\"acc-visual-grid\">\n      <div class=\"acc-visual-card\">\n        <span class=\"av-icon\">\ud83d\udee2\ufe0f<\/span>\n <strong>       For Technical Use Only<\/strong>\n Heating buffer. Does not contain drinking water. \n      <\/div>\n      <div class=\"acc-visual-card\">\n        <span class=\"av-icon\">\ud83d\udebf<\/span>\n <strong>       DHW only<\/strong>\n Water heater for domestic hot water (shower, faucets).\n      <\/div>\n      <div class=\"acc-visual-card\">\n        <span class=\"av-icon\">\u267b\ufe0f<\/span>\n <strong>Mixed<\/strong>\n A single tank with two functions: heating + domestic hot water.\n      <\/div>\n    <\/div>\n\n    <div class=\"toggle-row\" id=\"toggle-accumuli\" onclick=\"toggleSwitch('accumuli')\">\n      <div class=\"toggle-info\">\n        <div class=\"toggle-title\">\ud83d\udee2\ufe0f There are storage tanks \/ water heaters<\/div>\n        <div class=\"toggle-desc\">Technical storage tanks or DHW tanks<\/div>\n      <\/div>\n      <div class=\"toggle\" id=\"sw-accumuli\"><\/div>\n    <\/div>\n\n    <div id=\"accumuli-detail\" class=\"hidden\" style=\"margin-top:20px;\">\n      <div class=\"section-label\">How many accumulations are there by type?<\/div>\n\n      <div class=\"qty-row\">\n        <div>\n          <div class=\"qty-label\">\ud83d\udee2\ufe0f Technical Only<\/div>\n          <div class=\"qty-sublabel\">Hydraulic buffer \u2014 heating only<\/div>\n        <\/div>\n        <div class=\"qty-controls\">\n          <button class=\"qty-btn\" onclick=\"changeQty('q-acc-tecnico', -1)\">\u2212<\/button>\n          <div class=\"qty-value\" id=\"q-acc-tecnico\">0<\/div>\n          <button class=\"qty-btn\" onclick=\"changeQty('q-acc-tecnico', 1)\">+<\/button>\n        <\/div>\n      <\/div>\n\n      <div class=\"qty-row\">\n        <div>\n          <div class=\"qty-label\">\ud83d\udebf Hot water only<\/div>\n          <div class=\"qty-sublabel\">Dedicated domestic hot water heater<\/div>\n        <\/div>\n        <div class=\"qty-controls\">\n          <button class=\"qty-btn\" onclick=\"changeQty('q-acc-acs', -1)\">\u2212<\/button>\n          <div class=\"qty-value\" id=\"q-acc-acs\">0<\/div>\n          <button class=\"qty-btn\" onclick=\"changeQty('q-acc-acs', 1)\">+<\/button>\n        <\/div>\n      <\/div>\n\n      <div class=\"qty-row\">\n        <div>\n          <div class=\"qty-label\">\u267b\ufe0f ACS + Technician (Mixed)<\/div>\n          <div class=\"qty-sublabel\">Combined Storage for Heating and Hot Water<\/div>\n        <\/div>\n        <div class=\"qty-controls\">\n          <button class=\"qty-btn\" onclick=\"changeQty('q-acc-misto', -1)\">\u2212<\/button>\n          <div class=\"qty-value\" id=\"q-acc-misto\">0<\/div>\n          <button class=\"qty-btn\" onclick=\"changeQty('q-acc-misto', 1)\">+<\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"btn-row\">\n      <button class=\"btn btn-secondary\" onclick=\"goTo(2)\">\u2190 Back<\/button>\n      <button class=\"btn btn-primary\" onclick=\"goTo(4)\">Next \u2192<\/button>\n    <\/div>\n  <\/div>\n\n  <!-- \u2550\u2550\u2550\u2550\u2550\u2550 STEP 4 \u2014 Emissione \u2550\u2550\u2550\u2550\u2550\u2550 -->\n  <div class=\"step-block\" id=\"step-4\">\n    <h2>\ud83c\udfe0 How is the heat distributed?<\/h2>\n    <p class=\"step-subtitle\">Select all the systems in your home. (multiple selections) <\/p>\n\n    <div class=\"info-banner\">\n      <span class=\"info-banner-icon\">\ud83d\udca1<\/span>\n      <div>These are the <strong>heating elements<\/strong> that distribute heat throughout the rooms. Each type requires different smart devices\u2014the images on the cards show the component that will be installed. <\/div>\n    <\/div>\n\n    <div class=\"cards cols-2\">\n      <div class=\"card multi-card\" data-val=\"radiatori\" onclick=\"toggleMultiCard(this, 'emissione')\">\n        <div class=\"card-img-wrap\">\n          <img decoding=\"async\" src=\"https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/trv_main.png\" alt=\"TRV Valve for Radiators\">\n        <\/div>\n        <div class=\"card-title\">Radiators<\/div>\n        <div class=\"card-desc\">Traditional radiators in every room<\/div>\n        <div class=\"card-device-badge\">Zigbee TRV Valve<\/div>\n      <\/div>\n      <div class=\"card multi-card\" data-val=\"pannelli_radianti\" onclick=\"toggleMultiCard(this, 'emissione')\">\n        <div class=\"card-img-wrap\">\n          <img decoding=\"async\" src=\"https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/switch.jpg\" alt=\"Radiant Panel Zone Switch\">\n        <\/div>\n        <div class=\"card-title\">Radiant Panels<\/div>\n        <div class=\"card-desc\">Zoned heated floor or ceiling<\/div>\n        <div class=\"card-device-badge\">Zigbee Zone Actuator<\/div>\n      <\/div>\n      <div class=\"card multi-card\" data-val=\"fancoil\" onclick=\"toggleMultiCard(this, 'emissione')\">\n        <div class=\"card-img-wrap\">\n          <img decoding=\"async\" src=\"https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/l1wz.jpg\" alt=\"0-10V Fan Coil Controller\">\n        <\/div>\n        <div class=\"card-title\">Fan Coil Unit<\/div>\n        <div class=\"card-desc\">Fan Coil Units: Warm in Winter, Cool in Summer<\/div>\n        <div class=\"card-device-badge\">Thermostat + 0-10V Controller<\/div>\n      <\/div>\n      <div class=\"card multi-card\" data-val=\"split_ir\" onclick=\"toggleMultiCard(this, 'emissione')\">\n        <div class=\"card-img-wrap\">\n          <img decoding=\"async\" src=\"https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/ir_blaster_moes1.jpg\" alt=\"IR Blaster for split systems\">\n        <\/div>\n        <div class=\"card-title\">Split (air conditioners)<\/div>\n        <div class=\"card-desc\">Infrared-Controlled Air Conditioners<\/div>\n        <div class=\"card-device-badge\">Zigbee IR Blaster<\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"btn-row\">\n      <button class=\"btn btn-secondary\" onclick=\"goTo(3)\">\u2190 Back<\/button>\n      <button class=\"btn btn-primary\" id=\"btn-4\" onclick=\"goTo(5)\" disabled=\"disabled\">Next \u2192<\/button>\n    <\/div>\n  <\/div>\n\n  <!-- \u2550\u2550\u2550\u2550\u2550\u2550 STEP 5 \u2014 Gruppi di Spinta \u2550\u2550\u2550\u2550\u2550\u2550 -->\n  <div class=\"step-block\" id=\"step-5\">\n    <h2>\ud83d\udd04 Propulsion Groups<\/h2>\n    <p class=\"step-subtitle\">How many hydraulic circulators does the system have, and what type are they? Leave this field blank if there are none or if you don't know. <\/p>\n\n    <div class=\"help-expandable\">\n      <div class=\"help-expandable-header\" onclick=\"toggleHelp(this)\">\n        <span>\u2753 What is a push group?<\/span>\n        <span class=\"help-toggle\">\u25bc<\/span>\n      <\/div>\n      <div class=\"help-expandable-body\">\n        <p>A <strong>circulation unit<\/strong> consists <strong>of<\/strong> a pump and valves that circulate hot water from the boiler to the heating elements (radiators, fan coils, panels). Each separate circuit has its own unit. <\/p>\n        <div class=\"help-types-grid\">\n          <div class=\"help-type\">\n            <span class=\"help-type-icon\">\u26a1<\/span>\n <strong>           Direct<\/strong>: The pump simply turns on. It does not regulate the temperature. Typical for an entire floor or a single zone.  \n          <\/div>\n          <div class=\"help-type\">\n            <span class=\"help-type-icon\">\ud83c\udf21\ufe0f<\/span>\n <strong>           Thermostatic<\/strong>. It has a zone valve: water flows only when needed. Common in multi-zone manifolds (e.g., underfloor heating per room). \n          <\/div>\n          <div class=\"help-type\">\n            <span class=\"help-type-icon\">\ud83d\udd04<\/span>\n <strong>           3-Way Climate Control: Mixes<\/strong>hot and cold water using a motorized 3-way valve to regulate the supply temperature.\n          <\/div>\n          <div class=\"help-type\">\n            <span class=\"help-type-icon\">\ud83d\udcca<\/span>\n <strong>           Climate Control 0-10V: Same as<\/strong>the 3-way version but with a 0-10V electronic signal. Requires a dedicated controller. \n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"qty-row\">\n      <div>\n        <div class=\"qty-label\">\u26a1 Live<\/div>\n        <div class=\"qty-sublabel\">ON\/OFF Pump without Temperature Control<\/div>\n      <\/div>\n      <div class=\"qty-controls\">\n        <button class=\"qty-btn\" onclick=\"changeQty('q-diretto', -1)\">\u2212<\/button>\n        <div class=\"qty-value\" id=\"q-diretto\">0<\/div>\n        <button class=\"qty-btn\" onclick=\"changeQty('q-diretto', 1)\">+<\/button>\n      <\/div>\n    <\/div>\n\n    <div class=\"qty-row\">\n      <div>\n        <div class=\"qty-label\">\ud83c\udf21\ufe0f Thermostatic Valves<\/div>\n        <div class=\"qty-sublabel\">With a zone valve or zone manifold<\/div>\n      <\/div>\n      <div class=\"qty-controls\">\n        <button class=\"qty-btn\" onclick=\"changeQty('q-termostatic', -1)\">\u2212<\/button>\n        <div class=\"qty-value\" id=\"q-termostatic\">0<\/div>\n        <button class=\"qty-btn\" onclick=\"changeQty('q-termostatic', 1)\">+<\/button>\n      <\/div>\n    <\/div>\n\n    <div class=\"qty-row\">\n      <div>\n        <div class=\"qty-label\">\ud83d\udd04 HVAC \u2014 3-Way Valve<\/div>\n        <div class=\"qty-sublabel\">Mixing with a 3-point motorized valve<\/div>\n      <\/div>\n      <div class=\"qty-controls\">\n        <button class=\"qty-btn\" onclick=\"changeQty('q-3vie', -1)\">\u2212<\/button>\n        <div class=\"qty-value\" id=\"q-3vie\">0<\/div>\n        <button class=\"qty-btn\" onclick=\"changeQty('q-3vie', 1)\">+<\/button>\n      <\/div>\n    <\/div>\n\n    <div class=\"qty-row\">\n      <div>\n        <div class=\"qty-label\">\ud83d\udcca Climate Control \u2014 0\u201310 V<\/div>\n        <div class=\"qty-sublabel\">Continuous adjustment via a 0\u201310 V signal<\/div>\n      <\/div>\n      <div class=\"qty-controls\">\n        <button class=\"qty-btn\" onclick=\"changeQty('q-0-10v', -1)\">\u2212<\/button>\n        <div class=\"qty-value\" id=\"q-0-10v\">0<\/div>\n        <button class=\"qty-btn\" onclick=\"changeQty('q-0-10v', 1)\">+<\/button>\n      <\/div>\n    <\/div>\n\n    <div class=\"btn-row\">\n      <button class=\"btn btn-secondary\" onclick=\"goTo(4)\">\u2190 Back<\/button>\n      <button class=\"btn btn-primary\" onclick=\"goTo(6)\">Next \u2192<\/button>\n    <\/div>\n  <\/div>\n\n  <!-- \u2550\u2550\u2550\u2550\u2550\u2550 STEP 6 \u2014 Raffreddamento \u2550\u2550\u2550\u2550\u2550\u2550 -->\n  <div class=\"step-block\" id=\"step-6\">\n    <h2>\u2744\ufe0f Cooling and Humidity<\/h2>\n    <p class=\"step-subtitle\">Will the system also need to handle summer cooling or dehumidification?<\/p>\n\n    <div class=\"info-banner\">\n      <span class=\"info-banner-icon\">\ud83d\udca1<\/span>\n      <div>If you have a <strong>heat pump<\/strong>, it can often run in reverse during the summer to provide cooling using the same plumbing system. Enable this option only if you want to control it with PleIHome. <\/div>\n    <\/div>\n\n    <div class=\"toggle-row\" id=\"toggle-cooling\" onclick=\"toggleSwitch('cooling')\">\n      <div class=\"toggle-info\">\n        <div class=\"toggle-title\">\u2744\ufe0f Summer Cooling<\/div>\n        <div class=\"toggle-desc\">System Operation in Cooling Mode During the Summer<\/div>\n      <\/div>\n      <div class=\"toggle\" id=\"sw-cooling\"><\/div>\n    <\/div>\n\n    <div id=\"cooling-method-section\" class=\"hidden\" style=\"margin-top:4px; margin-bottom:16px;\">\n      <div class=\"section-label\">How is cold produced?<\/div>\n      <div class=\"cards cols-2\">\n        <div class=\"card multi-card\" data-val=\"pdc_inversione\" onclick=\"toggleMultiCard(this, 'cooling')\">\n          <span class=\"card-icon\">\u2668\ufe0f<\/span>\n          <div class=\"card-title\">PDC Reversal<\/div>\n          <div class=\"card-desc\">The heat pump switches modes \u2014 same system, opposite season<\/div>\n        <\/div>\n        <div class=\"card multi-card\" data-val=\"fancoil_freddo\" onclick=\"toggleMultiCard(this, 'cooling')\">\n          <span class=\"card-icon\">\ud83d\udca8<\/span>\n          <div class=\"card-title\">Cooling fan coil units<\/div>\n          <div class=\"card-desc\">Fan coil units blow out cold air<\/div>\n        <\/div>\n        <div class=\"card multi-card\" data-val=\"radiante_freddo\" onclick=\"toggleMultiCard(this, 'cooling')\">\n          <span class=\"card-icon\">\ud83c\udf21\ufe0f<\/span>\n          <div class=\"card-title\">Radiant Cool<\/div>\n          <div class=\"card-desc\">Cool floor or ceiling \u2014 requires dehumidification<\/div>\n        <\/div>\n        <div class=\"card multi-card\" data-val=\"split_freddo\" onclick=\"toggleMultiCard(this, 'cooling')\">\n          <span class=\"card-icon\">\ud83c\udf00<\/span>\n          <div class=\"card-title\">Standalone split systems<\/div>\n          <div class=\"card-desc\">Air conditioners that operate independently of the plumbing system<\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"toggle-row\" id=\"toggle-deum\" onclick=\"toggleSwitch('deum')\">\n      <div class=\"toggle-info\">\n        <div class=\"toggle-title\">\ud83d\udca7 Dehumidifier<\/div>\n        <div class=\"toggle-desc\">Automatic Control of a Standalone Dehumidifier<\/div>\n      <\/div>\n      <div class=\"toggle\" id=\"sw-deum\"><\/div>\n    <\/div>\n\n    <div id=\"deum-conn-section\" class=\"hidden\" style=\"margin-top:4px;\">\n      <div class=\"qty-row\" style=\"margin-bottom:12px;\">\n        <div>\n          <div class=\"qty-label\">How many dehumidifiers?<\/div>\n        <\/div>\n        <div class=\"qty-controls\">\n          <button class=\"qty-btn\" onclick=\"changeQty('q-deum', -1)\">\u2212<\/button>\n          <div class=\"qty-value\" id=\"q-deum\">1<\/div>\n          <button class=\"qty-btn\" onclick=\"changeQty('q-deum', 1)\">+<\/button>\n        <\/div>\n      <\/div>\n      <div class=\"section-label\">How is the dehumidifier connected hydraulically?<\/div>\n      <div class=\"cards\">\n        <div class=\"card multi-card single-in-group\" data-val=\"indipendente\" onclick=\"selectSingle(this, 'deum-conn')\">\n          <span class=\"card-icon\">\ud83d\udd0c<\/span>\n          <div class=\"card-title\">Dedicated Group<\/div>\n          <div class=\"card-desc\">It has its own separate pump<\/div>\n        <\/div>\n        <div class=\"card multi-card single-in-group\" data-val=\"condiviso\" onclick=\"selectSingle(this, 'deum-conn')\">\n          <span class=\"card-icon\">\ud83d\udd17<\/span>\n          <div class=\"card-title\">Shared<\/div>\n          <div class=\"card-desc\">Use the same circulator as the radiant floor heating system<\/div>\n        <\/div>\n        <div class=\"card multi-card single-in-group\" data-val=\"pdc_diretta\" onclick=\"selectSingle(this, 'deum-conn')\">\n          <span class=\"card-icon\">\u26a1<\/span>\n          <div class=\"card-title\">Live PDC<\/div>\n          <div class=\"card-desc\">Directly connected to the heat pump<\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"btn-row\">\n      <button class=\"btn btn-secondary\" onclick=\"goTo(5)\">\u2190 Back<\/button>\n      <button class=\"btn btn-primary\" onclick=\"goTo(7)\">Next \u2192<\/button>\n    <\/div>\n  <\/div>\n\n  <!-- \u2550\u2550\u2550\u2550\u2550\u2550 STEP 7 \u2014 Stanze \u2550\u2550\u2550\u2550\u2550\u2550 -->\n  <div class=\"step-block\" id=\"step-7\">\n    <h2>\ud83d\udecf\ufe0f Rooms to Check<\/h2>\n    <p class=\"step-subtitle\">How many rooms do you want to monitor and control with PleIHome?<\/p>\n\n    <div class=\"info-banner\">\n      <span class=\"info-banner-icon\">\ud83d\udca1<\/span>\n      <div>At least one <strong>temperature and humidity sensor<\/strong> <img decoding=\"async\" src=\"https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/snzb02p_SNZB-02P.png\" alt=\"\" style=\"width:24px;height:24px;vertical-align:middle;border-radius:4px;margin:0 2px;object-fit:contain;background:#f5f5f5;padding:2px;\"\/> is installed in each room to measure environmental conditions and automatically adjust the heating.<\/div>\n    <\/div>\n\n    <div class=\"qty-row highlight\">\n      <div>\n        <div class=\"qty-label\">Total number of rooms<\/div>\n        <div class=\"qty-sublabel\">Systems to be monitored (thermostats, sensors)<\/div>\n      <\/div>\n      <div class=\"qty-controls\">\n        <button class=\"qty-btn\" onclick=\"changeRooms(-1)\">\u2212<\/button>\n        <div class=\"qty-value\" id=\"q-stanze-total\">0<\/div>\n        <button class=\"qty-btn\" onclick=\"changeRooms(1)\">+<\/button>\n      <\/div>\n    <\/div>\n\n    <!-- Shown only if multiple emission systems (split escluso dal conteggio) -->\n    <div id=\"rooms-distribution\" class=\"hidden\">\n      <div class=\"section-label\">How are emission systems distributed?<\/div>\n\n      <div id=\"rooms-remaining-box\" class=\"rooms-remaining\">\n        <span class=\"num\" id=\"rooms-remaining-num\">0<\/span>\n s still available\n      <\/div>\n\n      <div id=\"rooms-dist-rows\"><\/div>\n    <\/div>\n\n    <!-- Contatore split separato (nessun kit, solo IR Blaster) -->\n    <div id=\"split-counter-section\" class=\"hidden\" style=\"margin-top:14px;\">\n      <div class=\"info-banner\" style=\"margin-bottom:10px;\">\n        <span class=\"info-banner-icon\">\ud83c\udf00<\/span>\n        <div><strong>Split air conditioners<\/strong> are not included in the kit: they are added as separate IR blasters, one for each unit.<\/div>\n      <\/div>\n      <div class=\"qty-row\">\n        <div>\n          <div class=\"qty-label\">\ud83c\udf00 Split \/ Air Conditioners<\/div>\n          <div class=\"qty-sublabel\">1 Zigbee IR Blaster for Air Conditioner<\/div>\n        <\/div>\n        <div class=\"qty-controls\">\n          <button class=\"qty-btn\" onclick=\"changeSplit(-1)\">\u2212<\/button>\n          <div class=\"qty-value\" id=\"q-split\">0<\/div>\n          <button class=\"qty-btn\" onclick=\"changeSplit(1)\">+<\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"btn-row\">\n      <button class=\"btn btn-secondary\" onclick=\"goTo(6)\">\u2190 Back<\/button>\n      <button class=\"btn btn-primary\" id=\"btn-7\" onclick=\"generateAndShow()\" disabled=\"disabled\">Generate Package \u2192<\/button>\n    <\/div>\n  <\/div>\n\n  <!-- \u2550\u2550\u2550\u2550\u2550\u2550 RESULT PAGE \u2550\u2550\u2550\u2550\u2550\u2550 -->\n  <div class=\"step-block\" id=\"result-page\">\n    <div class=\"result-header\">\n      <span class=\"check\">\u2705<\/span>\n      <h2 id=\"res-title\">PleIHome Package<\/h2>\n      <p id=\"res-subtitle\" style=\"color:#666; margin-top:6px; font-size:15px;\"><\/p>\n    <\/div>\n\n    <div class=\"result-summary-box\" id=\"res-summary-box\"><\/div>\n\n    <!-- SEZIONE 1: Kit preconfigurati -->\n    <div class=\"result-section\" id=\"res-sec-kits\">\n      <div class=\"result-section-title\">\ud83d\udce6 Preconfigured Kits to Order<\/div>\n      <div id=\"res-kits\"><\/div>\n    <\/div>\n\n    <!-- SEZIONE 2: Componenti aggiuntivi (non inclusi nei kit) -->\n    <div class=\"result-section\" id=\"res-sec-addons\">\n      <div class=\"result-section-title\">\u2795 Additional Components<\/div>\n      <div class=\"info-banner\" style=\"margin-bottom:14px;\">\n        <span class=\"info-banner-icon\">\ud83d\udca1<\/span>\n        <div>These components are required for the specific configuration of this system and <strong>are not included in the pre-configured kits<\/strong>. They must be ordered separately. <\/div>\n      <\/div>\n      <div id=\"res-addons\"><\/div>\n    <\/div>\n\n    <!-- SEZIONE 3: Note -->\n    <div class=\"result-section\" id=\"res-sec-note\">\n      <div class=\"result-section-title\">\ud83d\udcdd Configuration Notes<\/div>\n      <div id=\"res-note\"><\/div>\n    <\/div>\n\n    <!-- SEZIONE 4: BOM riepilogo ordine -->\n    <div class=\"result-section\" id=\"res-sec-bom\">\n      <div class=\"result-section-title\">\ud83d\uded2 Order Summary by Code<\/div>\n      <div id=\"res-bom\"><\/div>\n    <\/div>\n\n    <div class=\"result-actions\">\n      <button class=\"print-btn\" onclick=\"window.print()\">\ud83d\udda8\ufe0f Print \/ Save as PDF<\/button>\n      <button class=\"restart-btn\" onclick=\"location.reload()\">\u21ba New Configuration<\/button>\n    <\/div>\n  <\/div>\n\n<\/div><!-- \/container -->\n<\/div>\n\n<script>\nfunction _s(v) {\n  if (v == null) return '';\n  return String(v).replace(\/&\/g,'&amp;').replace(\/<\/g,'&lt;').replace(\/>\/g,'&gt;')\n                  .replace(\/\"\/g,'&quot;').replace(\/'\/g,'&#39;');\n}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   DEVICE IMAGE MAP \u2014 con codici PLEION e descrizioni d'uso\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\nconst DEVICE_IMAGES = {\n  'Valvola TRV Zigbee': {\n    img: 'https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/trv_main.png', label: 'Valvola TRV',\n    codice: '7083571301',\n    desc: 'Si monta su ogni radiatore al posto della vecchia valvola manuale. Regola automaticamente il flusso d'acqua calda per mantenere la temperatura desiderata stanza per stanza, evitando sprechi.'\n  },\n  'Sensore temperatura sonda NTC Zigbee': {\n    img: 'https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/snzb02ld_main.png', label: 'Sonda NTC',\n    codice: '7083371201',\n    desc: 'Si fissa con fascette metalliche sul tubo di mandata del gruppo di spinta o sul serbatoio di accumulo. Misura la temperatura dell'acqua nell'impianto \u2014 dato fondamentale per la logica di controllo della centrale termica.'\n  },\n  'Sensore di temperatura Zigbee': {\n    img: 'https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/snzb02p_SNZB-02P.png', label: 'Sensore T+U',\n    codice: '7083371101',\n    desc: 'Si posiziona a parete in ogni stanza, lontano da finestre e fonti di calore dirette, ad almeno 1,5 m dal pavimento. Misura temperatura e umidit\u00e0 ambientali per alimentare l'algoritmo di termoregolazione di PleIHome.'\n  },\n  'Rel\u00e8 Zigbee a contatto pulito': {\n    img: 'https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/dry_contact_clean.jpg', label: 'Contatto pulito',\n    codice: '7083573202',\n    desc: 'Si collega al morsetto di abilitazione del generatore (caldaia, PDC, biomassa). Quando PleIHome decide di avviare il generatore, chiude il contatto esattamente come farebbe un vecchio termostato a muro. Richiede alimentazione 220V.'\n  },\n  'Sezionatore Zigbee': {\n    img: 'https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/repeater_correct.png', label: 'Sezionatore',\n    codice: '7083572101',\n    desc: 'Si installa sul cavo di alimentazione del circolatore (pompa del gruppo di spinta). Permette a PleIHome di accendere e spegnere ogni circolatore in base alle reali necessit\u00e0 delle zone, ottimizzando i consumi.'\n  },\n  'Attuatore zona + rel\u00e8 Zigbee': {\n    img: 'https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/switch.jpg', label: 'Attuatore zona',\n    codice: '7083572101',\n    desc: 'Si installa in serie al cavo della valvola di zona del pavimento o soffitto radiante. Apre e chiude il circuito idraulico di ogni stanza seguendo la programmazione, consentendo un controllo zona per zona.'\n  },\n  'Dispositivo 0-10V Zigbee': {\n    img: 'https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/l1wz.jpg', label: 'Reg. 0-10V',\n    codice: '7083573201',\n    desc: 'Si collega al segnale di controllo 0-10V del fancoil o della valvola miscelatrice del gruppo di spinta. Permette di regolare la velocit\u00e0 o la posizione in modo continuo e preciso \u2014 non semplice ON\/OFF ma una scala di valori.'\n  },\n  'Termostato Zigbee': {\n    img: 'https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/snzb02p_SNZB-02P.png', label: 'Termostato',\n    codice: '7083371101',\n    desc: 'Si posiziona a parete nella stanza dove \u00e8 presente il fancoil. Misura la temperatura locale e consente all'utente di impostare il setpoint direttamente dall'ambiente. Alimenta anche PleIHome con la lettura in tempo reale.'\n  },\n  'Rel\u00e8 Zigbee multi-canale': {\n    img: 'https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/try_dc7.jpg', label: 'Rel\u00e8 multi-canale',\n    codice: '7083573202',\n    desc: 'Si collega ai cavi delle diverse velocit\u00e0 del fancoil (1\u00aa, 2\u00aa, 3\u00aa velocit\u00e0). Permette a PleIHome di selezionare automaticamente la velocit\u00e0 della ventola in base alla richiesta termica della zona.'\n  },\n  'Rel\u00e8 Zigbee ON\/OFF': {\n    img: 'https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/try_ZBMINIL2.png', label: 'Mini rel\u00e8',\n    codice: '7083573202',\n    desc: 'Si installa sul cavo di alimentazione del circolatore del deumidificatore. Permette a PleIHome di avviare e fermare la pompa in risposta ai livelli di umidit\u00e0 rilevati, in modo completamente automatico.'\n  },\n  'Sensore Temperatura + Umidit\u00e0 Zigbee': {\n    img: 'https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/snzb02p_SNZB-02P.png', label: 'Sensore T+U',\n    codice: '7083371101',\n    desc: 'Si posiziona nella zona servita dal deumidificatore. Misura sia la temperatura che l'umidit\u00e0 relativa: quando l'umidit\u00e0 supera la soglia impostata, PleIHome avvia automaticamente il deumidificatore.'\n  },\n  'IR Blaster Zigbee': {\n    img: 'https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/ir_blaster_moes1.jpg', label: 'IR Blaster',\n    codice: '7083573301',\n    desc: 'Si posiziona vicino al condizionatore split, in vista del ricevitore IR. Trasmette i comandi a infrarossi di PleIHome al climatizzatore, integrando qualsiasi split nel sistema smart tramite i codici del telecomando.'\n  },\n};\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   KIT CATALOG PLEION\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\nconst KITS = {\n  radiante: {\n    base: {\n      cod: '7083999101', nome: 'KIT PLEIHOME RADIANTE',\n      desc: 'Per impianti a pannelli radianti a pavimento\/soffitto \u2014 fino a 4 zone',\n      maxZone: 4, contattiPuliti: 1,\n      contenuto: [\n        { qty:1, nome:'Unit\u00e0 centrale PLEIHOME',       cod:'7083169101' },\n        { qty:4, nome:'Sensore di temperatura',        cod:'7083371101' },\n        { qty:4, nome:'Switch radiante (attuatore zona)', cod:'7083572101' },\n        { qty:1, nome:'Switch Zigbee (quadro elettrico)',  cod:'7083572101', descOverride:'Si installa nel quadro elettrico del cliente per monitorare i consumi della linea. Permette a PleIHome di misurare i consumi elettrici in tempo reale.' },\n        { qty:1, nome:'Contatto pulito NO\/NC Zigbee',  cod:'7083573202' },\n        { qty:1, nome:'Chiavetta Zigbee',              cod:'7083471102' },\n        { qty:1, nome:'Presa Zigbee',                  cod:'7083571302' },\n      ],\n    },\n    ext: {\n      cod: '7083999102', nome: 'KIT ESTENSIONE RADIANTE',\n      desc: 'Estensione per 2 zone aggiuntive', zonePerKit: 2,\n      contenuto: [\n        { qty:2, nome:'Sensore di temperatura', cod:'7083371101' },\n        { qty:2, nome:'Switch radiante',         cod:'7083572101' },\n        { qty:1, nome:'Ripetitore Zigbee',       cod:'7083471101' },\n        { qty:1, nome:'Presa Zigbee',            cod:'7083571302' },\n      ],\n    }\n  },\n  radiatori: {\n    base: {\n      cod: '7083999201', nome: 'KIT PLEIHOME RADIATORI',\n      desc: 'Per impianti a radiatori\/termosifoni \u2014 fino a 4 zone',\n      maxZone: 4, contattiPuliti: 1,\n      contenuto: [\n        { qty:1, nome:'Unit\u00e0 centrale PLEIHOME',      cod:'7083169101' },\n        { qty:4, nome:'Sensore di temperatura',       cod:'7083371101' },\n        { qty:4, nome:'Valvola radiatore (TRV)',      cod:'7083571301' },\n        { qty:1, nome:'Contatto pulito NO\/NC Zigbee', cod:'7083573202' },\n        { qty:1, nome:'Chiavetta Zigbee',             cod:'7083471102' },\n        { qty:1, nome:'Presa Zigbee',                 cod:'7083571302' },\n        { qty:1, nome:'Switch Zigbee (quadro elettrico)', cod:'7083572101', descOverride:'Si installa nel quadro elettrico del cliente per monitorare i consumi della linea. Permette a PleIHome di misurare i consumi elettrici in tempo reale.' },\n      ],\n    },\n    ext: {\n      cod: '7083999202', nome: 'KIT ESTENSIONE RADIATORI',\n      desc: 'Estensione per 2 zone aggiuntive', zonePerKit: 2,\n      contenuto: [\n        { qty:2, nome:'Sensore di temperatura',  cod:'7083371101' },\n        { qty:2, nome:'Valvola radiatore (TRV)', cod:'7083571301' },\n        { qty:1, nome:'Ripetitore Zigbee',       cod:'7083471101' },\n        { qty:1, nome:'Presa Zigbee',            cod:'7083571302' },\n      ],\n    }\n  },\n  fancoil: {\n    base: {\n      cod: '7083999301', nome: 'KIT PLEIHOME FAN COIL',\n      desc: 'Per impianti a fancoil\/ventilconvettori \u2014 fino a 4 zone',\n      maxZone: 4, contattiPuliti: 1,\n      contenuto: [\n        { qty:1, nome:'Unit\u00e0 centrale PLEIHOME',      cod:'7083169101' },\n        { qty:4, nome:'Sensore di temperatura',       cod:'7083371101' },\n        { qty:4, nome:'Sonda di temperatura (NTC)',   cod:'7083371201' },\n        { qty:5, nome:'Contatto pulito NO\/NC Zigbee', cod:'7083573202' },\n        { qty:4, nome:'Regolatore 0-10V Zigbee',      cod:'7083573201' },\n        { qty:1, nome:'Chiavetta Zigbee',             cod:'7083471102' },\n        { qty:1, nome:'Presa Zigbee',                 cod:'7083571302' },\n        { qty:1, nome:'Switch Zigbee (quadro elettrico)', cod:'7083572101', descOverride:'Si installa nel quadro elettrico del cliente per monitorare i consumi della linea. Permette a PleIHome di misurare i consumi elettrici in tempo reale.' },\n      ],\n    },\n    ext: {\n      cod: '7083999302', nome: 'KIT ESTENSIONE FAN COIL',\n      desc: 'Estensione per 2 zone aggiuntive', zonePerKit: 2,\n      contenuto: [\n        { qty:2, nome:'Sensore di temperatura',     cod:'7083371101' },\n        { qty:2, nome:'Sonda di temperatura (NTC)', cod:'7083371201' },\n        { qty:3, nome:'Ripetitore Zigbee',          cod:'7083471101' },\n        { qty:2, nome:'Regolatore 0-10V Zigbee',    cod:'7083573201' },\n        { qty:1, nome:'Presa Zigbee',               cod:'7083571302' },\n      ],\n    }\n  }\n};\n\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   DEVICE DESC \u2014 descrizioni d'uso per ogni prodotto (key = codice)\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\nconst DEVICE_DESC = {\n  '7083169101': 'Hub e gateway del sistema PleIHome \u2014 gestisce la rete Zigbee e ospita tutte le automazioni climatiche della casa.',\n  '7083371101': 'Si posiziona a parete nella stanza da controllare. Misura temperatura e umidit\u00e0 in tempo reale per regolare automaticamente la zona.',\n  '7083371201': 'Si fissa sul tubo di mandata o sul serbatoio di accumulo. Misura la temperatura dell'acqua nell'impianto \u2014 dato fondamentale per la logica di controllo.',\n  '7083471101': 'Estende la copertura radio Zigbee nelle zone lontane dalla centrale. Garantisce comunicazione affidabile con tutti i dispositivi periferici.',\n  '7083471102': 'Coordinatore Zigbee USB: si collega alla centrale PleIHome e gestisce la rete radio di tutti i dispositivi smart dell'impianto.',\n  '7083571301': 'Si avvita al radiatore al posto della vecchia valvola manuale. Apre e chiude il flusso d'acqua calda in modo proporzionale per mantenere la temperatura stanza per stanza.',\n  '7083571302': 'Presa smart Zigbee che funge anche da ripetitore radio. Alimenta eventuali accessori e rafforza il segnale nella zona.',\n  '7083572101': 'Attuatore di zona: intercetta il circuito idraulico o il circolatore della zona. Apre e chiude il flusso su comando di PleIHome.',\n  '7083573201': 'Invia il segnale 0-10V al fancoil per regolare in modo continuo la velocit\u00e0 del ventilatore in base alla richiesta termica della stanza.',\n  '7083573202': 'Contatto pulito NO\/NC: chiude il circuito di abilitazione del generatore (caldaia, PDC) o di qualsiasi attuatore a bassa tensione.',\n};\n\n\/* Immagini per codice prodotto (usate nei kit card) *\/\nconst DEVICE_IMG_BY_CODE = {\n  '7083169101': 'https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/pleihome_logo.png',\n  '7083371101': 'https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/snzb02p_SNZB-02P.png',\n  '7083371201': 'https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/snzb02ld_main.png',\n  '7083471101': 'https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/repeater_correct.png',\n  '7083471102': 'https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/chiavetta_zigbee.jpg',\n  '7083571301': 'https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/trv_main.png',\n  '7083571302': 'https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/plug_correct.png',\n  '7083572101': 'https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/switch.jpg',\n  '7083573201': 'https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/l1wz.jpg',\n  '7083573202': 'https:\/\/pleion.it\/wp-content\/uploads\/2026\/07\/dry_contact_clean.jpg',\n};\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   STATE\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\nconst TOTAL_STEPS = 7;\n\nconst state = {\n  nome: '', email: '', citta: '',\n  generatori: [],\n  accumuli_presenti: false,\n  acc_tecnico: 0, acc_acs: 0, acc_misto: 0,\n  emissione: [],\n  q_diretto: 0, q_termostatico: 0, q_3vie: 0, q_0_10v: 0,\n  cooling: false, cooling_metodi: [],\n  deum: false, deum_conn: null, n_deum: 1,\n  n_stanze: 0,\n  stanze_dist: {}\n};\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   NAVIGATION\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\nfunction goTo(n) {\n  if (n === 2) {\n    state.nome  = document.getElementById('f-nome').value.trim();\n    state.email = document.getElementById('f-email').value.trim();\n    state.citta = document.getElementById('f-citta').value.trim();\n  }\n  document.querySelectorAll('.step-block').forEach(el => el.classList.remove('active'));\n  const id = (n === 'result') ? 'result-page' : `step-${n}`;\n  document.getElementById(id).classList.add('active');\n  window.scrollTo({ top: 0, behavior: 'smooth' });\n  if (n === 7) {\n    const splitSec = document.getElementById('split-counter-section');\n    if (splitSec) splitSec.classList.toggle('hidden', !state.emissione.includes('split_ir'));\n  }\n  if (n !== 'result') {\n    const pct = Math.round((n - 1) \/ TOTAL_STEPS * 100) + 14;\n    document.getElementById('progress-bar').style.width = Math.min(pct, 95) + '%';\n    document.getElementById('step-counter').textContent = `Passo ${n} di ${TOTAL_STEPS}`;\n  } else {\n    document.getElementById('progress-bar').style.width = '100%';\n    document.getElementById('step-counter').textContent = 'Configurazione completata \u2713';\n  }\n}\n\nfunction changeSplit(delta) {\n  const cur = state.stanze_dist['split_ir'] || 0;\n  const newVal = Math.max(0, cur + delta);\n  state.stanze_dist['split_ir'] = newVal;\n  document.getElementById('q-split').textContent = newVal;\n}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   HELP EXPANDABLE\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\nfunction toggleHelp(header) {\n  const body = header.nextElementSibling;\n  const toggle = header.querySelector('.help-toggle');\n  const isOpen = body.classList.contains('open');\n  body.classList.toggle('open', !isOpen);\n  toggle.classList.toggle('open', !isOpen);\n}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   MULTI-SELECT CARDS\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\nfunction toggleMultiCard(el, group) {\n  el.classList.toggle('selected');\n  const val = el.dataset.val;\n  const key = group === 'gen' ? 'generatori' : group === 'emissione' ? 'emissione' : 'cooling_metodi';\n  if (el.classList.contains('selected')) {\n    if (!state[key].includes(val)) state[key].push(val);\n  } else {\n    state[key] = state[key].filter(v => v !== val);\n  }\n  if (group === 'gen')      document.getElementById('btn-2').disabled = state.generatori.length === 0;\n  if (group === 'emissione') {\n    document.getElementById('btn-4').disabled = state.emissione.length === 0;\n    rebuildRoomsDistribution();\n  }\n}\n\n\/* Single-select within a group *\/\nfunction selectSingle(el, group) {\n  document.querySelectorAll(`[onclick=\"selectSingle(this, '${group}')\"]`).forEach(c => c.classList.remove('selected'));\n  el.classList.add('selected');\n  if (group === 'deum-conn') state.deum_conn = el.dataset.val;\n}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   TOGGLES\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\nfunction toggleSwitch(name) {\n  const sw = document.getElementById(`sw-${name}`);\n  const row = document.getElementById(`toggle-${name}`);\n  const isOn = !sw.classList.contains('on');\n  sw.classList.toggle('on', isOn);\n  row.classList.toggle('active-toggle', isOn);\n\n  if (name === 'accumuli') {\n    state.accumuli_presenti = isOn;\n    document.getElementById('accumuli-detail').classList.toggle('hidden', !isOn);\n  }\n  if (name === 'cooling') {\n    state.cooling = isOn;\n    document.getElementById('cooling-method-section').classList.toggle('hidden', !isOn);\n    if (!isOn) { state.cooling_metodi = []; document.querySelectorAll('[onclick*=\"cooling\"]').forEach(c => c.classList.remove('selected')); }\n  }\n  if (name === 'deum') {\n    state.deum = isOn;\n    document.getElementById('deum-conn-section').classList.toggle('hidden', !isOn);\n    if (!isOn) { state.deum_conn = null; document.querySelectorAll('[onclick*=\"deum-conn\"]').forEach(c => c.classList.remove('selected')); }\n  }\n}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   QTY CONTROLS\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\nconst qtyMap = {\n  'q-acc-tecnico': 'acc_tecnico', 'q-acc-acs': 'acc_acs', 'q-acc-misto': 'acc_misto',\n  'q-diretto': 'q_diretto', 'q-termostatic': 'q_termostatico',\n  'q-3vie': 'q_3vie', 'q-0-10v': 'q_0_10v', 'q-deum': 'n_deum'\n};\n\nfunction changeQty(id, delta) {\n  const el = document.getElementById(id);\n  const val = Math.max(0, parseInt(el.textContent) + delta);\n  el.textContent = val;\n  if (qtyMap[id]) state[qtyMap[id]] = val;\n}\n\nfunction getQty(id) { return parseInt(document.getElementById(id)?.textContent || '0'); }\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   ROOMS STEP\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\nfunction changeRooms(delta) {\n  state.n_stanze = Math.max(0, state.n_stanze + delta);\n  document.getElementById('q-stanze-total').textContent = state.n_stanze;\n  document.getElementById('btn-7').disabled = state.n_stanze === 0;\n\n  const distDiv = document.getElementById('rooms-distribution');\n  if (state.emissione.length > 1 && state.n_stanze > 0) {\n    distDiv.classList.remove('hidden');\n    rebuildRoomsDistribution();\n    updateRoomsRemaining();\n  } else {\n    distDiv.classList.add('hidden');\n  }\n}\n\nfunction rebuildRoomsDistribution() {\n  const container = document.getElementById('rooms-dist-rows');\n  const labels = {\n    radiatori: ['\ud83d\udd29', 'Radiatori'],\n    pannelli_radianti: ['\ud83c\udf21\ufe0f', 'Pannelli Radianti'],\n    fancoil: ['\ud83d\udca8', 'Fancoil'],\n    split_ir: ['\ud83c\udf00', 'Split IR']\n  };\n  container.innerHTML = '';\n  state.emissione.filter(em => em !== 'split_ir').forEach(em => {\n    const [icon, name] = labels[em] || ['\u2022', em];\n    const cur = state.stanze_dist[em] || 0;\n    container.innerHTML += `\n      <div class=\"qty-row\">\n        <div>\n          <div class=\"qty-label\">${icon} ${name}<\/div>\n          <div class=\"qty-sublabel\">Stanze con questo sistema<\/div>\n        <\/div>\n        <div class=\"qty-controls\">\n          <button class=\"qty-btn\" onclick=\"changeDistRoom('${em}', -1)\">\u2212<\/button>\n          <div class=\"qty-value\" id=\"dist-${em}\">${cur}<\/div>\n          <button class=\"qty-btn\" onclick=\"changeDistRoom('${em}', 1)\">+<\/button>\n        <\/div>\n      <\/div>`;\n  });\n  updateRoomsRemaining();\n}\n\nfunction changeDistRoom(em, delta) {\n  const cur = state.stanze_dist[em] || 0;\n  const newVal = Math.max(0, cur + delta);\n  state.stanze_dist[em] = newVal;\n  document.getElementById(`dist-${em}`).textContent = newVal;\n  updateRoomsRemaining();\n}\n\nfunction updateRoomsRemaining() {\n  const assigned = Object.entries(state.stanze_dist)\n    .filter(([em]) => em !== 'split_ir')\n    .reduce((s, [, v]) => s + v, 0);\n  const rem = state.n_stanze - assigned;\n  const box = document.getElementById('rooms-remaining-box');\n  const numEl = document.getElementById('rooms-remaining-num');\n  numEl.textContent = Math.abs(rem);\n  box.className = 'rooms-remaining' + (rem === 0 ? ' ok' : rem < 0 ? ' over' : '');\n  box.querySelector('span').nextSibling.textContent = rem < 0\n    ? ' stanze assegnate in eccesso'\n    : rem === 0 ? ' \u2014 distribuzione completata \u2713' : ' stanze ancora da assegnare';\n}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   GENERATE RESULT \u2014 logica kit multipli misti\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n\n\/* Mappa tipo emissione \u2192 tipo kit *\/\nconst EM_TO_KIT = {\n  'radiatori':       'radiatori',\n  'pannelli_radianti': 'radiante',\n  'fancoil':         'fancoil',\n  'split_ir':        null,\n};\n\n\/* Classe CSS per ogni tipo di kit estensione *\/\nconst KIT_CSS = {\n  'radiatori': 'kit-card-ext-radiatori',\n  'radiante':  'kit-card-ext-radiante',\n  'fancoil':   'kit-card-ext-fancoil',\n};\n\nfunction generateAndShow() {\n  state.q_diretto      = getQty('q-diretto');\n  state.q_termostatico = getQty('q-termostatic');\n  state.q_3vie         = getQty('q-3vie');\n  state.q_0_10v        = getQty('q-0-10v');\n  state.acc_tecnico    = getQty('q-acc-tecnico');\n  state.acc_acs        = getQty('q-acc-acs');\n  state.acc_misto      = getQty('q-acc-misto');\n  if (state.deum) state.n_deum = getQty('q-deum') || 1;\n\n  const notes  = [];\n  const addons = [];\n  const kits   = []; \/\/ { kitObj, qty, cardClass, label }\n\n  const getStanze = (em) => state.emissione.length === 1\n    ? state.n_stanze : (state.stanze_dist[em] || 0);\n\n  \/\/ \u2500\u2500 1. Kit base: sistema con pi\u00f9 zone (tiebreak: fancoil > radiatori > radiante) \u2500\u2500\n  const EM_PRIORITY = ['fancoil', 'radiatori', 'pannelli_radianti'];\n  const emWithKits  = state.emissione.filter(em => EM_TO_KIT[em] !== null);\n  const primaryEm   = emWithKits.length === 0 ? null\n    : emWithKits.reduce((best, em) => {\n        const z1 = getStanze(em), z2 = getStanze(best);\n        if (z1 !== z2) return z1 > z2 ? em : best;\n        return EM_PRIORITY.indexOf(em) <= EM_PRIORITY.indexOf(best) ? em : best;\n      });\n  const primaryType = primaryEm ? EM_TO_KIT[primaryEm] : null;\n\n  if (primaryType) {\n    kits.push({\n      kitObj:    KITS[primaryType].base,\n      qty:       1,\n      cardClass: 'kit-card-base',\n      label:     'Kit Base \u2014 include unit\u00e0 centrale PleIHome',\n    });\n\n    \/\/ Estensioni dello stesso tipo (zone primarie oltre le prime 4)\n    const zonePrimarie = getStanze(primaryEm);\n    const extSamePrimary = zonePrimarie > 4\n      ? Math.ceil((zonePrimarie - 4) \/ KITS[primaryType].ext.zonePerKit) : 0;\n    if (extSamePrimary > 0) {\n      kits.push({\n        kitObj:    KITS[primaryType].ext,\n        qty:       extSamePrimary,\n        cardClass: KIT_CSS[primaryType],\n        label:     `Estensione ${KITS[primaryType].base.nome.replace('KIT PLEIHOME ', '')} \u2014 zone aggiuntive`,\n      });\n    }\n  }\n\n  \/\/ \u2500\u2500 2. Kit estensione per OGNI sistema di emissione secondario \u2500\u2500\n  \/\/ Ogni tipo secondario \u2192 solo kit estensione (il PleIHome \u00e8 gi\u00e0 nel kit base)\n  state.emissione.forEach(em => {\n    const kitType = EM_TO_KIT[em];\n    if (!kitType) return;           \/\/ split_ir: nessun kit\n    if (kitType === primaryType) return; \/\/ gi\u00e0 gestito sopra\n    const nZone = getStanze(em);\n    if (nZone <= 0) return;\n    const extQty = Math.ceil(nZone \/ KITS[kitType].ext.zonePerKit);\n    kits.push({\n      kitObj:    KITS[kitType].ext,\n      qty:       extQty,\n      cardClass: KIT_CSS[kitType],\n      label:     `Estensione ${KITS[kitType].base.nome.replace('KIT PLEIHOME ', '')} \u2014 sistema aggiuntivo`,\n    });\n  });\n\n  \/\/ \u2500\u2500 3. Split IR \u2192 sempre componenti extra (nessun kit disponibile) \u2500\u2500\n  if (state.emissione.includes('split_ir')) {\n    const n = getStanze('split_ir');\n    if (n > 0) {\n      addons.push({ qty:n, item:'IR Blaster Zigbee', imgKey:'IR Blaster Zigbee',\n        cod:'7083573301', note:`${n} split \/ climatizzatori` });\n      notes.push('Split IR: acquisizione manuale dei codici IR per ogni modello di split installato');\n    }\n  }\n\n  \/\/ \u2500\u2500 4. Generatori \u2500\u2500\n  \/\/ Il kit base copre 1 generatore (1 contatto pulito incluso)\n  const genCoperto = primaryType ? 1 : 0;\n  const genNomi    = { pdc:'Pompa di Calore', caldaia:'Caldaia', biomassa:'Biomassa', solare_termico:'Solare Termico' };\n  state.generatori.forEach((g, idx) => {\n    if (g === 'pdc')     notes.push('PDC: verificare tipo segnale (contatto pulito, OpenTherm, RS485, CAN)');\n    if (g === 'caldaia') notes.push('Caldaia: verificare compatibilit\u00e0 (ON\/OFF, OpenTherm, ModBus)');\n    if (idx >= genCoperto)\n      addons.push({ qty:1, item:'Contatto pulito NO\/NC Zigbee', imgKey:'Rel\u00e8 Zigbee a contatto pulito',\n        cod:'7083573202', note:`Abilitazione ${genNomi[g] || g}` });\n  });\n\n  \/\/ \u2500\u2500 5. Accumuli \u2500\u2500 (sempre extra, non inclusi nei kit)\n  const totAcc = state.acc_tecnico + state.acc_acs + state.acc_misto;\n  if (totAcc > 0) {\n    addons.push({ qty:totAcc, item:'Sonda di temperatura (NTC)', imgKey:'Sensore temperatura sonda NTC Zigbee',\n      cod:'7083371201', note:`Temperatura serbatoi \u2014 ${totAcc} accumuli` });\n    if (state.acc_acs + state.acc_misto > 0)\n      notes.push('Anti-Legionella: automazione settimanale inclusa automaticamente per accumulo ACS\/misto');\n  }\n\n  \/\/ \u2500\u2500 6. Gruppi di spinta \u2500\u2500 componenti da verificare a parte (non sono dispositivi zona)\n  const nD = state.q_diretto, nT = state.q_termostatico, n3 = state.q_3vie, n0 = state.q_0_10v;\n  if (nD > 0) notes.push(`Gruppi diretti (${nD}): prevedere ${nD}\u00d7 rel\u00e8 ON\/OFF circolatore \u2014 Cod. 7083572101`);\n  if (nT > 0) notes.push(`Gruppi termostatici (${nT}): prevedere ${nT}\u00d7 rel\u00e8 ON\/OFF circolatore \u2014 Cod. 7083572101`);\n  if (n3 > 0) notes.push(`Gruppi 3 vie (${n3}): ${n3}\u00d7 rel\u00e8 pompa + ${n3*2}\u00d7 rel\u00e8 valvola + ${n3}\u00d7 sonda NTC mandata \u2014 Cod. 7083572101 \u00d7 ${n3+n3*2}, Cod. 7083371201 \u00d7 ${n3}`);\n  if (n0 > 0) {\n    notes.push(`Gruppi 0-10V (${n0}): ${n0}\u00d7 rel\u00e8 pompa + ${n0}\u00d7 regolatore 0-10V + ${n0}\u00d7 sonda NTC \u2014 Cod. 7083572101 \u00d7 ${n0}, Cod. 7083573201 \u00d7 ${n0}, Cod. 7083371201 \u00d7 ${n0}`);\n    notes.push('Circuiti 0-10V: verificare range (0-10V oppure 2-10V)');\n  }\n\n  \/\/ \u2500\u2500 7. Raffreddamento \u2500\u2500\n  if (state.cooling) {\n    const m = state.cooling_metodi;\n    if (m.includes('pdc_inversione'))  notes.push('Raffreddamento: inversione ciclo PDC \u2014 stagione gestita automaticamente');\n    if (m.includes('fancoil_freddo'))  notes.push('Raffreddamento fancoil: modalit\u00e0 caldo\/freddo configurata automaticamente');\n    if (m.includes('radiante_freddo')) notes.push('Raffreddamento radiante: richiede gestione punto di rugiada \u2014 deumidificazione consigliata');\n  }\n\n  \/\/ \u2500\u2500 8. Deumidificatore \u2500\u2500\n  if (state.deum) {\n    const nDeum = state.n_deum || 1;\n    if (state.deum_conn === 'indipendente')\n      addons.push({ qty:nDeum, item:'Switch radiante (sezionatore circolatore)', imgKey:'Sezionatore Zigbee',\n        cod:'7083572101', note:`Circolatore \u2014 ${nDeum} deumidificatori` });\n    addons.push({ qty:nDeum, item:'Contatto pulito NO\/NC Zigbee', imgKey:'Rel\u00e8 Zigbee a contatto pulito',\n      cod:'7083573202', note:`Abilitazione \u2014 ${nDeum} deumidificatori` });\n    notes.push('Deumidificatore: connessione idraulica \u2014 ' + (state.deum_conn || 'da definire'));\n  }\n\n  \/\/ \u2500\u2500 Render \u2500\u2500\n  \/\/ Aggrega addon per codice prodotto (una riga per tipo di componente)\n  const addonsAgg = aggregateAddons(addons);\n\n  const nome = state.nome || 'Cliente';\n  document.getElementById('res-title').textContent = `Pacchetto PleIHome \u2014 ${nome}`;\n  document.getElementById('res-subtitle').textContent = [state.email, state.citta].filter(Boolean).join(' \u00b7 ');\n\n  const totalKitPz  = kits.reduce((s, k) => s + k.qty, 0);\n  const totalAddon  = addons.reduce((s, x) => s + x.qty, 0);\n  \/\/ Zone controllate = solo sistemi con kit (esclude split IR)\n  const zoneKits    = emWithKits.reduce((sum, em) => sum + getStanze(em), 0);\n  document.getElementById('res-summary-box').innerHTML = `\n    <div class=\"summary-stat\"><div class=\"num\">${totalKitPz || '\u2014'}<\/div><div class=\"label\">Kit preconfigurati<\/div><\/div>\n    <div class=\"summary-stat\"><div class=\"num\">${totalAddon}<\/div><div class=\"label\">Comp. aggiuntivi<\/div><\/div>\n    <div class=\"summary-stat\"><div class=\"num\">${nD+nT+n3+n0}<\/div><div class=\"label\">Gruppi di spinta<\/div><\/div>\n    <div class=\"summary-stat\"><div class=\"num\">${zoneKits}<\/div><div class=\"label\">Zone controllate<\/div><\/div>\n  `;\n\n  \/\/ Kit section\n  const kitContainer = document.getElementById('res-kits');\n  if (kits.length === 0) {\n    kitContainer.innerHTML = `<div class=\"info-banner\"><span class=\"info-banner-icon\">\u2139\ufe0f<\/span><div>Nessun kit preconfigurato disponibile. Tutti i componenti sono nella sezione sottostante.<\/div><\/div>`;\n  } else {\n    kitContainer.innerHTML = kits.map(k => renderKitCard(k)).join('');\n  }\n\n  \/\/ Addons section\n  const addonsSec = document.getElementById('res-sec-addons');\n  const addonsEl  = document.getElementById('res-addons');\n  if (addons.length) {\n    addonsSec.classList.remove('hidden');\n    addonsEl.innerHTML = renderAddonTable(addonsAgg);\n  } else {\n    addonsSec.classList.add('hidden');\n  }\n\n  document.getElementById('res-note').innerHTML = notes.length\n    ? notes.map(n => `<div class=\"note-item\">${_s(n)}<\/div>`).join('')\n    : '<div class=\"note-item\">Nessuna nota aggiuntiva<\/div>';\n\n  document.getElementById('res-bom').innerHTML = renderBOM(kits, addonsAgg);\n\n  goTo('result');\n}\n\n\/* Aggrega addon per codice prodotto: 1 riga per tipo di componente *\/\nfunction aggregateAddons(addons) {\n  const map = {};\n  addons.forEach(r => {\n    const key = r.cod || r.item;\n    if (!map[key]) {\n      map[key] = { ...r, qty: r.qty, notes: [r.note] };\n    } else {\n      map[key].qty += r.qty;\n      map[key].notes.push(r.note);\n    }\n  });\n  return Object.values(map).map(r => ({ ...r, note: r.notes.join(' \u00b7 ') }));\n}\n\n\/* Render singola kit card *\/\nfunction renderKitCard({ kitObj, qty, cardClass, label }) {\n  const itemsHtml = kitObj.contenuto.map(c => {\n    const desc  = c.descOverride || (c.cod ? (DEVICE_DESC[c.cod] || '') : '');\n    const img   = c.cod ? (DEVICE_IMG_BY_CODE[c.cod] || null) : null;\n    const thumb = img\n      ? `<img decoding=\"async\" class=\"kit-item-thumb\" src=\"${_s(img)}\" alt=\"${_s(c.nome)}\">`\n      : `<div class=\"kit-item-thumb-ph\">\ud83d\udce6<\/div>`;\n    return `<div class=\"kit-item\">\n      <span class=\"kit-item-qty\">${c.qty}\u00d7<\/span>\n      ${thumb}\n      <div class=\"kit-item-body\">\n        <span class=\"kit-item-name\">${_s(c.nome)}<\/span>\n        ${c.cod ? `<span class=\"kit-item-cod\">Cod. ${_s(c.cod)}<\/span>` : ''}\n        ${desc ? `<div class=\"kit-item-desc\">${_s(desc)}<\/div>` : ''}\n      <\/div>\n    <\/div>`;\n  }).join('');\n  return `\n    <div class=\"kit-card ${_s(cardClass)}\">\n      <div class=\"kit-card-header\">\n        <div class=\"kit-qty-badge\">${qty}\u00d7<\/div>\n        <div class=\"kit-header-info\">\n          <div class=\"kit-cod\">Cod. ${_s(kitObj.cod)}<\/div>\n          <div class=\"kit-name\">${_s(kitObj.nome)}<\/div>\n          <div class=\"kit-desc\">${_s(kitObj.desc)}<\/div>\n        <\/div>\n      <\/div>\n      <div class=\"kit-contents\">\n        <div class=\"kit-includes-title\">${_s(label)}<\/div>\n        <div class=\"kit-items-grid\">${itemsHtml}<\/div>\n      <\/div>\n    <\/div>`;\n}\n\n\/* Render tabella componenti aggiuntivi *\/\nfunction renderAddonTable(addons) {\n  const rows = addons.map(r => {\n    const info      = DEVICE_IMAGES[r.imgKey] || null;\n    const thumbHtml = info\n      ? `<img decoding=\"async\" class=\"device-thumb\" src=\"${info.img}\" alt=\"${_s(r.item)}\">`\n      : `<div class=\"device-thumb-placeholder\">\ud83d\udce6<\/div>`;\n    const codeHtml = r.cod ? `<div class=\"td-item-code\">Cod. ${_s(r.cod)}<\/div>` : '';\n    const descHtml = info && info.desc ? `<div class=\"td-item-desc\">${_s(info.desc)}<\/div>` : '';\n    return `<tr>\n      <td class=\"td-qty\">${_s(r.qty)}\u00d7<\/td>\n      <td><div class=\"td-item\">${thumbHtml}<div class=\"td-item-info\">\n        <div class=\"td-item-name\">${_s(r.item)}<\/div>${codeHtml}${descHtml}\n      <\/div><\/div><\/td>\n      <td class=\"td-note\">${_s(r.note)}<\/td>\n    <\/tr>`;\n  }).join('');\n  return `<table class=\"component-table\">\n    <thead><tr><th>Qt\u00e0<\/th><th>Componente<\/th><th>Utilizzo nell'impianto<\/th><\/tr><\/thead>\n    <tbody>${rows}<\/tbody>\n  <\/table>`;\n}\n\n\/* BOM riepilogo ordine per codice (kit > componenti singoli) *\/\nfunction renderBOM(kits, addonsAgg) {\n  const kitRows = kits.map(k =>\n    `<tr class=\"bom-kit-row\">\n      <td class=\"bom-qty\">${k.qty}\u00d7<\/td>\n      <td class=\"bom-cod\">Cod. ${_s(k.kitObj.cod)}<\/td>\n      <td>${_s(k.kitObj.nome)}<\/td>\n    <\/tr>`\n  ).join('');\n  const addonRows = addonsAgg.filter(r => r.cod).map(r =>\n    `<tr>\n      <td class=\"bom-qty\">${r.qty}\u00d7<\/td>\n      <td class=\"bom-cod\">Cod. ${_s(r.cod)}<\/td>\n      <td>${_s(r.item)}<\/td>\n    <\/tr>`\n  ).join('');\n  return `<table class=\"bom-table\">\n    <thead><tr><th>Qt\u00e0<\/th><th>Codice<\/th><th>Descrizione<\/th><\/tr><\/thead>\n    <tbody>${kitRows}${addonRows}<\/tbody>\n  <\/table>`;\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>#pleihome-cfg *, #pleihome-cfg *::before, #pleihome-cfg *::after { margin: 0; padding: 0; box-sizing: border-box; } #pleihome-cfg { font-family: &#8216;Segoe UI&#8217;, Tahoma, Geneva, Verdana, sans-serif; background: linear-gradient(135deg, #eb3349 0%, #f45c43 100%); display:&hellip;<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":"","_members_access_role":[],"_members_access_error":""},"class_list":["post-31454","page","type-page","status-publish","hentry"],"acf":[],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO Pro 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"PleIHome Customer Package Configurator Step 1 of 7 \ud83d\udc64 Customer Information Enter the customer&#039;s information to customize the final report. \u2139\ufe0f This configurator guides you step by step through the process of selecting the smart components needed for your system. When you&#039;re done, you&#039;ll receive a detailed list of devices to install. \ud83d\udd25 Generators \u2192\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/pleion.it\/en\/pleihome-configurator\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO Pro (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Pleion - Solare Termico per Produzione di Acqua Sanitaria\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"PleiHome Configurator - Pleion\" \/>\n\t\t<meta property=\"og:description\" content=\"PleIHome Customer Package Configurator Step 1 of 7 \ud83d\udc64 Customer Information Enter the customer&#039;s information to customize the final report. \u2139\ufe0f This configurator guides you step by step through the process of selecting the smart components needed for your system. When you&#039;re done, you&#039;ll receive a detailed list of devices to install. \ud83d\udd25 Generators \u2192\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/pleion.it\/en\/pleihome-configurator\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/pleion.it\/wp-content\/uploads\/2026\/04\/cropped-logo-small-dark.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/pleion.it\/wp-content\/uploads\/2026\/04\/cropped-logo-small-dark.png\" \/>\n\t\t<meta property=\"og:image:width\" content=\"393\" \/>\n\t\t<meta property=\"og:image:height\" content=\"78\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-07-21T09:36:35+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-07-22T10:09:16+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/PleionItalia\/\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"PleiHome Configurator - Pleion\" \/>\n\t\t<meta name=\"twitter:description\" content=\"PleIHome Customer Package Configurator Step 1 of 7 \ud83d\udc64 Customer Information Enter the customer&#039;s information to customize the final report. \u2139\ufe0f This configurator guides you step by step through the process of selecting the smart components needed for your system. When you&#039;re done, you&#039;ll receive a detailed list of devices to install. \ud83d\udd25 Generators \u2192\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/pleion.it\/wp-content\/uploads\/2026\/04\/cropped-logo-small-dark.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/pleion.it\\\/en\\\/pleihome-configurator\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/pleion.it\\\/en\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/pleion.it\\\/en\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/pleion.it\\\/en\\\/pleihome-configurator\\\/#listItem\",\"name\":\"PleiHome Configurator\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/pleion.it\\\/en\\\/pleihome-configurator\\\/#listItem\",\"position\":2,\"name\":\"PleiHome Configurator\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/pleion.it\\\/en\\\/#listItem\",\"name\":\"Home\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/pleion.it\\\/en\\\/#organization\",\"name\":\"Pleion\",\"description\":\"Solare Termico per Produzione di Acqua Sanitaria\",\"url\":\"https:\\\/\\\/pleion.it\\\/en\\\/\",\"email\":\"info@pleion.it\",\"telephone\":\"+390452375112\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/pleion.it\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/pleion-logo-dark-2.png\",\"@id\":\"https:\\\/\\\/pleion.it\\\/en\\\/pleihome-configurator\\\/#organizationLogo\",\"width\":873,\"height\":175,\"caption\":\"logo pleion\"},\"image\":{\"@id\":\"https:\\\/\\\/pleion.it\\\/en\\\/pleihome-configurator\\\/#organizationLogo\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/PleionItalia\\\/\",\"https:\\\/\\\/www.instagram.com\\\/pleion_italia\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@PleionIt\"],\"address\":{\"@type\":\"PostalAddress\",\"streetAddress\":\"Via Broggio, 311\",\"addressLocality\":\"Isola Rizza\",\"addressRegion\":\"VR\",\"postalCode\":\"37050\",\"addressCountry\":\"IT\"},\"legalName\":\"Pleion S.p.A.\",\"vatID\":\"IT03820120230\",\"contactPoint\":[{\"@type\":\"ContactPoint\",\"contactType\":\"customer service\",\"telephone\":\"+390442320295\",\"email\":\"info@pleion.it\"}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pleion.it\\\/en\\\/pleihome-configurator\\\/#webpage\",\"url\":\"https:\\\/\\\/pleion.it\\\/en\\\/pleihome-configurator\\\/\",\"name\":\"PleiHome Configurator - Pleion\",\"description\":\"PleIHome Customer Package Configurator Step 1 of 7 \\ud83d\\udc64 Customer Information Enter the customer's information to customize the final report. \\u2139\\ufe0f This configurator guides you step by step through the process of selecting the smart components needed for your system. When you're done, you'll receive a detailed list of devices to install. \\ud83d\\udd25 Generators \\u2192\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pleion.it\\\/en\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/pleion.it\\\/en\\\/pleihome-configurator\\\/#breadcrumblist\"},\"datePublished\":\"2026-07-21T11:36:35+02:00\",\"dateModified\":\"2026-07-22T12:09:16+02:00\",\"publisher\":{\"@id\":\"https:\\\/\\\/pleion.it\\\/en\\\/#organization\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pleion.it\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/pleion.it\\\/en\\\/\",\"name\":\"Pleion\",\"description\":\"Solare Termico per Produzione di Acqua Sanitaria\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/pleion.it\\\/en\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO Pro -->\r\n\t\t<title>PleiHome Configurator - Pleion<\/title>\n\n","aioseo_head_json":{"title":"PleiHome Configurator - Pleion","description":"PleIHome Customer Package Configurator Step 1 of 7 \ud83d\udc64 Customer Information Enter the customer's information to customize the final report. \u2139\ufe0f This configurator guides you step by step through the process of selecting the smart components needed for your system. When you're done, you'll receive a detailed list of devices to install. \ud83d\udd25 Generators \u2192","canonical_url":"https:\/\/pleion.it\/en\/pleihome-configurator\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BreadcrumbList","@id":"https:\/\/pleion.it\/en\/pleihome-configurator\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/pleion.it\/en\/#listItem","position":1,"name":"Home","item":"https:\/\/pleion.it\/en\/","nextItem":{"@type":"ListItem","@id":"https:\/\/pleion.it\/en\/pleihome-configurator\/#listItem","name":"PleiHome Configurator"}},{"@type":"ListItem","@id":"https:\/\/pleion.it\/en\/pleihome-configurator\/#listItem","position":2,"name":"PleiHome Configurator","previousItem":{"@type":"ListItem","@id":"https:\/\/pleion.it\/en\/#listItem","name":"Home"}}]},{"@type":"Organization","@id":"https:\/\/pleion.it\/en\/#organization","name":"Pleion","description":"Solare Termico per Produzione di Acqua Sanitaria","url":"https:\/\/pleion.it\/en\/","email":"info@pleion.it","telephone":"+390452375112","logo":{"@type":"ImageObject","url":"https:\/\/pleion.it\/wp-content\/uploads\/2026\/04\/pleion-logo-dark-2.png","@id":"https:\/\/pleion.it\/en\/pleihome-configurator\/#organizationLogo","width":873,"height":175,"caption":"logo pleion"},"image":{"@id":"https:\/\/pleion.it\/en\/pleihome-configurator\/#organizationLogo"},"sameAs":["https:\/\/www.facebook.com\/PleionItalia\/","https:\/\/www.instagram.com\/pleion_italia\/","https:\/\/www.youtube.com\/@PleionIt"],"address":{"@type":"PostalAddress","streetAddress":"Via Broggio, 311","addressLocality":"Isola Rizza","addressRegion":"VR","postalCode":"37050","addressCountry":"IT"},"legalName":"Pleion S.p.A.","vatID":"IT03820120230","contactPoint":[{"@type":"ContactPoint","contactType":"customer service","telephone":"+390442320295","email":"info@pleion.it"}]},{"@type":"WebPage","@id":"https:\/\/pleion.it\/en\/pleihome-configurator\/#webpage","url":"https:\/\/pleion.it\/en\/pleihome-configurator\/","name":"PleiHome Configurator - Pleion","description":"PleIHome Customer Package Configurator Step 1 of 7 \ud83d\udc64 Customer Information Enter the customer's information to customize the final report. \u2139\ufe0f This configurator guides you step by step through the process of selecting the smart components needed for your system. When you're done, you'll receive a detailed list of devices to install. \ud83d\udd25 Generators \u2192","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/pleion.it\/en\/#website"},"breadcrumb":{"@id":"https:\/\/pleion.it\/en\/pleihome-configurator\/#breadcrumblist"},"datePublished":"2026-07-21T11:36:35+02:00","dateModified":"2026-07-22T12:09:16+02:00","publisher":{"@id":"https:\/\/pleion.it\/en\/#organization"}},{"@type":"WebSite","@id":"https:\/\/pleion.it\/en\/#website","url":"https:\/\/pleion.it\/en\/","name":"Pleion","description":"Solare Termico per Produzione di Acqua Sanitaria","inLanguage":"en-US","publisher":{"@id":"https:\/\/pleion.it\/en\/#organization"}}]},"og:locale":"en_US","og:site_name":"Pleion - Solare Termico per Produzione di Acqua Sanitaria","og:type":"article","og:title":"PleiHome Configurator - Pleion","og:description":"PleIHome Customer Package Configurator Step 1 of 7 \ud83d\udc64 Customer Information Enter the customer's information to customize the final report. \u2139\ufe0f This configurator guides you step by step through the process of selecting the smart components needed for your system. When you're done, you'll receive a detailed list of devices to install. \ud83d\udd25 Generators \u2192","og:url":"https:\/\/pleion.it\/en\/pleihome-configurator\/","og:image":"https:\/\/pleion.it\/wp-content\/uploads\/2026\/04\/cropped-logo-small-dark.png","og:image:secure_url":"https:\/\/pleion.it\/wp-content\/uploads\/2026\/04\/cropped-logo-small-dark.png","og:image:width":393,"og:image:height":78,"article:published_time":"2026-07-21T09:36:35+00:00","article:modified_time":"2026-07-22T10:09:16+00:00","article:publisher":"https:\/\/www.facebook.com\/PleionItalia\/","twitter:card":"summary_large_image","twitter:title":"PleiHome Configurator - Pleion","twitter:description":"PleIHome Customer Package Configurator Step 1 of 7 \ud83d\udc64 Customer Information Enter the customer's information to customize the final report. \u2139\ufe0f This configurator guides you step by step through the process of selecting the smart components needed for your system. When you're done, you'll receive a detailed list of devices to install. \ud83d\udd25 Generators \u2192","twitter:image":"https:\/\/pleion.it\/wp-content\/uploads\/2026\/04\/cropped-logo-small-dark.png"},"aioseo_meta_data":{"post_id":"31454","title":"#post_title #separator_sa #site_title","description":"#post_content","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_custom_url":null,"og_image_custom_fields":null,"og_image_url":null,"og_image_width":null,"og_image_height":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_custom_url":null,"twitter_image_custom_fields":null,"twitter_image_url":null,"twitter_title":null,"twitter_description":null,"schema_type":"default","schema_type_options":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"WebPage","isEnabled":true},"graphs":[]},"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,"limit_modified_date":false,"ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"breadcrumb_settings":null,"seo_analyzer_scan_date":"2026-07-22 10:23:04","created":"2026-07-22 10:09:15","updated":"2026-07-22 12:18:26","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t<a href=\"https:\/\/pleion.it\/en\/\" title=\"Home\">Home<\/a>\n<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\tPleiHome Configurator\n<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/pleion.it\/en\/"},{"label":"PleiHome Configurator","link":"https:\/\/pleion.it\/en\/pleihome-configurator\/"}],"_links":{"self":[{"href":"https:\/\/pleion.it\/en\/wp-json\/wp\/v2\/pages\/31454","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pleion.it\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/pleion.it\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/pleion.it\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/pleion.it\/en\/wp-json\/wp\/v2\/comments?post=31454"}],"version-history":[{"count":2,"href":"https:\/\/pleion.it\/en\/wp-json\/wp\/v2\/pages\/31454\/revisions"}],"predecessor-version":[{"id":31457,"href":"https:\/\/pleion.it\/en\/wp-json\/wp\/v2\/pages\/31454\/revisions\/31457"}],"wp:attachment":[{"href":"https:\/\/pleion.it\/en\/wp-json\/wp\/v2\/media?parent=31454"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}