<style id="elementor-post-32067">.elementor-32067 .elementor-element.elementor-element-09a47f1 .trx_addons_bg_text{z-index:0;}.elementor-32067 .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-32067 .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":32067,"date":"2026-07-21T11:36:35","date_gmt":"2026-07-21T09:36:35","guid":{"rendered":"https:\/\/pleion.it\/configurateur-pleihome\/"},"modified":"2026-07-22T12:12:46","modified_gmt":"2026-07-22T10:12:46","slug":"configurateur-pleihome","status":"publish","type":"page","link":"https:\/\/pleion.it\/fr\/configurateur-pleihome\/","title":{"rendered":"Configurateur PleiHome"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"32067\" class=\"elementor elementor-32067 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>Configurateur de forfait client<\/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\">\u00c9tape 1 sur 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 Donn\u00e9es du client<\/h2>\n    <p class=\"step-subtitle\">Veuillez saisir les informations relatives au client afin de personnaliser le rapport final.<\/p>\n\n    <div class=\"info-banner\">\n      <span class=\"info-banner-icon\">\u2139\ufe0f<\/span>\n      <div>Ce configurateur vous guide \u00e9tape par \u00e9tape dans le choix des composants connect\u00e9s n\u00e9cessaires \u00e0 votre installation. \u00c0 la fin, vous recevrez une <strong>liste pr\u00e9cise des appareils<\/strong> \u00e0 installer. <\/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 G\u00e9n\u00e9rateurs\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 Chambres\n      <\/div>\n    <\/div>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\">Nom et pr\u00e9nom \/ Raison sociale<\/label>\n      <input class=\"field-input\" id=\"f-nome\" type=\"text\" placeholder=\"Ex. : Mario Rossi\" autocomplete=\"off\">\n    <\/div>\n    <div class=\"field-group\">\n      <label class=\"field-label\">E-mail<\/label>\n      <input class=\"field-input\" id=\"f-email\" type=\"email\" placeholder=\"Ex. : mario.rossi@email.com\" autocomplete=\"off\">\n    <\/div>\n    <div class=\"field-group\">\n      <label class=\"field-label\">Adresse \/ Ville<\/label>\n      <input class=\"field-input\" id=\"f-citta\" type=\"text\" placeholder=\"Par exemple : 1, Via Roma, Turin\" autocomplete=\"off\">\n    <\/div>\n\n    <div class=\"btn-row\">\n      <button class=\"btn btn-primary\" onclick=\"goTo(2)\">Suivant \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 G\u00e9n\u00e9rateurs de chaleur<\/h2>\n    <p class=\"step-subtitle\">S\u00e9lectionnez tous les g\u00e9n\u00e9rateurs pr\u00e9sents dans l'installation. (s\u00e9lection multiple) <\/p>\n\n    <div class=\"info-banner\">\n      <span class=\"info-banner-icon\">\ud83d\udca1<\/span>\n      <div><strong>Les g\u00e9n\u00e9rateurs<\/strong> sont les appareils qui produisent la chaleur n\u00e9cessaire au chauffage de la maison et \u00e0 la production d'eau chaude sanitaire. S\u00e9lectionnez tous les appareils install\u00e9s, m\u00eame s'ils ne sont pas utilis\u00e9s toute l'ann\u00e9e. <\/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\">Pompe \u00e0 chaleur<\/div>\n        <div class=\"card-desc\">Il produit de la chaleur (et du froid) en utilisant l'\u00e9nergie de l'air ou du sol. Tr\u00e8s efficace. <\/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\">Chaudi\u00e8re<\/div>\n        <div class=\"card-desc\">Il fonctionne au gaz, au gazole ou au GPL pour produire de l'eau chaude destin\u00e9e au chauffage et \u00e0 l'usage sanitaire.<\/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\">Biomasse<\/div>\n        <div class=\"card-desc\">Chaudi\u00e8re, po\u00eale ou chemin\u00e9e \u00e0 pellets, \u00e0 bois ou \u00e0 copeaux de bois.<\/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\">\u00c9nergie solaire thermique<\/div>\n        <div class=\"card-desc\">Panneaux solaires pour le chauffage de l'eau sanitaire, \u00e9quip\u00e9s d'un r\u00e9gulateur Resol.<\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"btn-row\">\n      <button class=\"btn btn-secondary\" onclick=\"goTo(1)\">\u2190 Pr\u00e9c\u00e9dent<\/button>\n      <button class=\"btn btn-primary\" id=\"btn-2\" onclick=\"goTo(3)\" disabled=\"disabled\">Suivant \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 R\u00e9servoirs de stockage et citernes<\/h2>\n    <p class=\"step-subtitle\">Y a-t-il des r\u00e9servoirs de stockage thermique ou des chauffe-eau pour l'eau chaude sanitaire ?<\/p>\n\n    <div class=\"info-banner\">\n      <span class=\"info-banner-icon\">\ud83d\udca1<\/span>\n      <div>Un <strong>ballon de stockage<\/strong> est un r\u00e9servoir isol\u00e9 qui stocke de l'eau chaude. Il sert \u00e0 dissocier le g\u00e9n\u00e9rateur de la consommation : le g\u00e9n\u00e9rateur chauffe le r\u00e9servoir lorsque cela est opportun, et le r\u00e9servoir restitue la chaleur lorsque cela est n\u00e9cessaire. <\/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       \u00c0 <strong>usage technique uniquement<\/strong>\n R\u00e9servoir tampon pour le chauffage. Ne contient pas d'eau potable. \n      <\/div>\n      <div class=\"acc-visual-card\">\n        <span class=\"av-icon\">\ud83d\udebf<\/span>\n <strong>       ACS uniquement<\/strong>\n Chauffe-eau pour l'eau chaude sanitaire (douche, robinets).\n      <\/div>\n      <div class=\"acc-visual-card\">\n        <span class=\"av-icon\">\u267b\ufe0f<\/span>\n <strong>       Mixte<\/strong>\n Un seul ballon avec deux fonctions : chauffage + eau sanitaire.\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 Il y a des r\u00e9servoirs \/ des chauffe-eau<\/div>\n        <div class=\"toggle-desc\">R\u00e9servoirs techniques de stockage ou d'eau chaude sanitaire (ECS)<\/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\">Combien y a-t-il d'accumulations par type ?<\/div>\n\n      <div class=\"qty-row\">\n        <div>\n          <div class=\"qty-label\">\ud83d\udee2\ufe0f Uniquement technique<\/div>\n          <div class=\"qty-sublabel\">R\u00e9servoir tampon hydraulique \u2014 chauffage uniquement<\/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 ACS uniquement<\/div>\n          <div class=\"qty-sublabel\">Chauffe-eau d\u00e9di\u00e9 \u00e0 l'eau chaude sanitaire<\/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 + Technique (mixte)<\/div>\n          <div class=\"qty-sublabel\">Stockage combin\u00e9 chauffage + eau chaude sanitaire<\/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 Pr\u00e9c\u00e9dent<\/button>\n      <button class=\"btn btn-primary\" onclick=\"goTo(4)\">Suivant \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 Comment la chaleur est-elle r\u00e9partie ?<\/h2>\n    <p class=\"step-subtitle\">S\u00e9lectionnez tous les syst\u00e8mes pr\u00e9sents dans la maison. (s\u00e9lection multiple) <\/p>\n\n    <div class=\"info-banner\">\n      <span class=\"info-banner-icon\">\ud83d\udca1<\/span>\n      <div>Il s'agit des <strong>\u00e9l\u00e9ments chauffants<\/strong> qui diffusent la chaleur dans les pi\u00e8ces. Chaque type n\u00e9cessite des dispositifs connect\u00e9s diff\u00e9rents \u2014 les images figurant sur les fiches pr\u00e9sentent le composant qui sera install\u00e9. <\/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=\"Vanne TRV pour radiateurs\">\n        <\/div>\n        <div class=\"card-title\">Radiateurs<\/div>\n        <div class=\"card-desc\">Des radiateurs traditionnels dans chaque pi\u00e8ce<\/div>\n        <div class=\"card-device-badge\">Vanne TRV Zigbee<\/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=\"Commutateur de zone pour panneaux radiants\">\n        <\/div>\n        <div class=\"card-title\">Panneaux radiants<\/div>\n        <div class=\"card-desc\">Chauffage par le sol ou au plafond par zones<\/div>\n        <div class=\"card-device-badge\">Actionneur de zone Zigbee<\/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=\"R\u00e9gulateur 0-10 V pour ventilo-convecteurs\">\n        <\/div>\n        <div class=\"card-title\">Ventilo-convecteur<\/div>\n        <div class=\"card-desc\">Ventilo-convecteurs : chaleur en hiver, fra\u00eecheur en \u00e9t\u00e9<\/div>\n        <div class=\"card-device-badge\">Thermostat + R\u00e9gulateur 0-10 V<\/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 pour climatiseurs split\">\n        <\/div>\n        <div class=\"card-title\">Split (climatiseurs)<\/div>\n        <div class=\"card-desc\">Climatiseurs command\u00e9s par infrarouge<\/div>\n        <div class=\"card-device-badge\">\u00c9metteur IR Zigbee<\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"btn-row\">\n      <button class=\"btn btn-secondary\" onclick=\"goTo(3)\">\u2190 Pr\u00e9c\u00e9dent<\/button>\n      <button class=\"btn btn-primary\" id=\"btn-4\" onclick=\"goTo(5)\" disabled=\"disabled\">Suivant \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 Groupes de pouss\u00e9e<\/h2>\n    <p class=\"step-subtitle\">Combien de circulateurs hydrauliques l'installation comporte-t-elle et de quel type sont-ils ? Indiquez \u00ab 0 \u00bb s'il n'y en a pas ou si vous ne le savez pas. <\/p>\n\n    <div class=\"help-expandable\">\n      <div class=\"help-expandable-header\" onclick=\"toggleHelp(this)\">\n        <span>\u2753 Qu'est-ce qu'un groupe de soutien ?<\/span>\n        <span class=\"help-toggle\">\u25bc<\/span>\n      <\/div>\n      <div class=\"help-expandable-body\">\n        <p>Un <strong>groupe de circulation<\/strong> est constitu\u00e9 de la pompe et des vannes qui acheminent l'eau chaude du g\u00e9n\u00e9rateur vers les \u00e9l\u00e9ments de chauffage (radiateurs, ventilo-convecteurs, panneaux). Chaque circuit distinct dispose de son propre groupe. <\/p>\n        <div class=\"help-types-grid\">\n          <div class=\"help-type\">\n            <span class=\"help-type-icon\">\u26a1<\/span>\n <strong>           En direct<\/strong>: la pompe se met simplement en marche. Elle ne r\u00e9gule pas la temp\u00e9rature. Ce type de syst\u00e8me est g\u00e9n\u00e9ralement utilis\u00e9 pour un \u00e9tage entier ou une zone sp\u00e9cifique.  \n          <\/div>\n          <div class=\"help-type\">\n            <span class=\"help-type-icon\">\ud83c\udf21\ufe0f<\/span>\n <strong>           Thermostatique<\/strong>. Il est \u00e9quip\u00e9 d'une vanne de zone : l'eau ne circule que lorsque cela est n\u00e9cessaire. Couramment utilis\u00e9 dans les collecteurs \u00e0 plusieurs zones (par exemple, chauffage au sol par pi\u00e8ce). \n          <\/div>\n          <div class=\"help-type\">\n            <span class=\"help-type-icon\">\ud83d\udd04<\/span>\n <strong>           Mitigeur climatique \u00e0 3 voies : m\u00e9lange<\/strong>l'eau chaude et l'eau froide \u00e0 l'aide d'une vanne motoris\u00e9e \u00e0 3 positions permettant de r\u00e9gler la temp\u00e9rature de d\u00e9part.\n          <\/div>\n          <div class=\"help-type\">\n            <span class=\"help-type-icon\">\ud83d\udcca<\/span>\n <strong>           Climatique 0-10 V : identique<\/strong>au mod\u00e8le \u00e0 3 voies, mais avec un signal \u00e9lectronique de 0 \u00e0 10 V. Un r\u00e9gulateur d\u00e9di\u00e9 est n\u00e9cessaire. \n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"qty-row\">\n      <div>\n        <div class=\"qty-label\">\u26a1 En direct<\/div>\n        <div class=\"qty-sublabel\">Pompe marche\/arr\u00eat sans r\u00e9gulation de la temp\u00e9rature<\/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 Thermostatiques<\/div>\n        <div class=\"qty-sublabel\">Avec vanne de zone ou collecteur \u00e0 zones<\/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 Climatisation \u2014 Vanne \u00e0 3 voies<\/div>\n        <div class=\"qty-sublabel\">M\u00e9lange \u00e0 l'aide d'une vanne motoris\u00e9e \u00e0 3 positions<\/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 Climatisation \u2014 0-10 V<\/div>\n        <div class=\"qty-sublabel\">R\u00e9glage en continu par signal 0-10 V<\/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 Pr\u00e9c\u00e9dent<\/button>\n      <button class=\"btn btn-primary\" onclick=\"goTo(6)\">Suivant \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 Temp\u00e9ratures basses et humidit\u00e9<\/h2>\n    <p class=\"step-subtitle\">Le syst\u00e8me devra-t-il \u00e9galement assurer le refroidissement en \u00e9t\u00e9 ou la d\u00e9shumidification ?<\/p>\n\n    <div class=\"info-banner\">\n      <span class=\"info-banner-icon\">\ud83d\udca1<\/span>\n      <div>Si vous disposez d'une <strong>pompe \u00e0 chaleur<\/strong>, celle-ci peut souvent fonctionner en mode invers\u00e9 en \u00e9t\u00e9, en produisant du froid \u00e0 partir du m\u00eame circuit hydraulique. N'activez cette option que si vous souhaitez la g\u00e9rer via 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 Climatisation estivale<\/div>\n        <div class=\"toggle-desc\">Gestion de l'installation en mode \u00ab froid \u00bb pendant l'\u00e9t\u00e9<\/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\">Comment le froid est-il produit ?<\/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\">Inversion PDC<\/div>\n          <div class=\"card-desc\">La pompe \u00e0 chaleur fonctionne en sens inverse \u2014 m\u00eame installation, saison inverse<\/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\">Ventilo-convecteurs en mode refroidissement<\/div>\n          <div class=\"card-desc\">Les ventilo-convecteurs soufflent de l'air froid<\/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\">Chaleur rayonnante froide<\/div>\n          <div class=\"card-desc\">Sol ou plafond humides \u2014 une d\u00e9shumidification est n\u00e9cessaire<\/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\">Climatiseurs autonomes<\/div>\n          <div class=\"card-desc\">Climatiseurs ind\u00e9pendants du circuit hydraulique<\/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 D\u00e9shumidificateur<\/div>\n        <div class=\"toggle-desc\">Commande automatique d'un d\u00e9shumidificateur autonome<\/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\">Combien de d\u00e9shumidificateurs ?<\/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\">Comment le d\u00e9shumidificateur est-il raccord\u00e9 au circuit hydraulique ?<\/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\">Groupe d\u00e9di\u00e9<\/div>\n          <div class=\"card-desc\">Elle dispose de sa propre pompe<\/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\">Partag\u00e9<\/div>\n          <div class=\"card-desc\">Utilisez la m\u00eame pompe de circulation que celle du plancher chauffant<\/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\">PDC en direct<\/div>\n          <div class=\"card-desc\">Raccord\u00e9 directement \u00e0 la pompe \u00e0 chaleur<\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"btn-row\">\n      <button class=\"btn btn-secondary\" onclick=\"goTo(5)\">\u2190 Pr\u00e9c\u00e9dent<\/button>\n      <button class=\"btn btn-primary\" onclick=\"goTo(7)\">Suivant \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 Pi\u00e8ces \u00e0 v\u00e9rifier<\/h2>\n    <p class=\"step-subtitle\">Combien de pi\u00e8ces souhaitez-vous surveiller et contr\u00f4ler avec PleIHome ?<\/p>\n\n    <div class=\"info-banner\">\n      <span class=\"info-banner-icon\">\ud83d\udca1<\/span>\n      <div>Dans chaque pi\u00e8ce, au moins un <strong>capteur de temp\u00e9rature et d'humidit\u00e9<\/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;\"\/> est install\u00e9 afin de mesurer les conditions ambiantes et de r\u00e9guler automatiquement le chauffage.<\/div>\n    <\/div>\n\n    <div class=\"qty-row highlight\">\n      <div>\n        <div class=\"qty-label\">Nombre total de chambres<\/div>\n        <div class=\"qty-sublabel\">\u00c9l\u00e9ments \u00e0 contr\u00f4ler (thermostats, capteurs)<\/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\">Comment se r\u00e9partissent les syst\u00e8mes d'\u00e9mission ?<\/div>\n\n      <div id=\"rooms-remaining-box\" class=\"rooms-remaining\">\n        <span class=\"num\" id=\"rooms-remaining-num\">0<\/span>\n s chambres encore disponibles\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>Les climatiseurs split<\/strong> ne font pas partie du kit : ils sont ajout\u00e9s sous forme d'\u00e9metteurs IR Blaster distincts, \u00e0 raison d'un par unit\u00e9.<\/div>\n      <\/div>\n      <div class=\"qty-row\">\n        <div>\n          <div class=\"qty-label\">\ud83c\udf00 Syst\u00e8mes split \/ Climatiseurs<\/div>\n          <div class=\"qty-sublabel\">1 \u00e9metteur IR Zigbee pour climatiseur<\/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 Retour<\/button>\n      <button class=\"btn btn-primary\" id=\"btn-7\" onclick=\"generateAndShow()\" disabled=\"disabled\">G\u00e9n\u00e9rer un paquet \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\">Offre PleIHome<\/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 Kits pr\u00e9configur\u00e9s \u00e0 commander<\/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 Composants suppl\u00e9mentaires<\/div>\n      <div class=\"info-banner\" style=\"margin-bottom:14px;\">\n        <span class=\"info-banner-icon\">\ud83d\udca1<\/span>\n        <div>Ces composants sont n\u00e9cessaires \u00e0 la configuration sp\u00e9cifique de cette installation et <strong>ne sont pas inclus dans les kits pr\u00e9configur\u00e9s<\/strong>. Ils doivent \u00eatre command\u00e9s s\u00e9par\u00e9ment. <\/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 Notes de configuration<\/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 R\u00e9capitulatif de la commande par r\u00e9f\u00e9rence<\/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 Imprimer \/ Enregistrer au format PDF<\/button>\n      <button class=\"restart-btn\" onclick=\"location.reload()\">\u21ba Nouvelle 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 Configurateur de forfait client \u00c9tape 1 sur 7 \ud83d\udc64 Donn\u00e9es du client Veuillez saisir les informations relatives au client afin de personnaliser le rapport final. \u2139\ufe0f Ce configurateur vous&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-32067","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 Configurateur de forfait client \u00c9tape 1 sur 7 \ud83d\udc64 Donn\u00e9es du client Veuillez saisir les informations relatives au client afin de personnaliser le rapport final. \u2139\ufe0f Ce configurateur vous guide \u00e9tape par \u00e9tape dans le choix des composants connect\u00e9s n\u00e9cessaires \u00e0 votre installation. \u00c0 la fin, vous recevrez une liste pr\u00e9cise des appareils \u00e0\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/pleion.it\/fr\/configurateur-pleihome\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO Pro (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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=\"Configurateur PleiHome - Pleion\" \/>\n\t\t<meta property=\"og:description\" content=\"PleIHome Configurateur de forfait client \u00c9tape 1 sur 7 \ud83d\udc64 Donn\u00e9es du client Veuillez saisir les informations relatives au client afin de personnaliser le rapport final. \u2139\ufe0f Ce configurateur vous guide \u00e9tape par \u00e9tape dans le choix des composants connect\u00e9s n\u00e9cessaires \u00e0 votre installation. \u00c0 la fin, vous recevrez une liste pr\u00e9cise des appareils \u00e0\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/pleion.it\/fr\/configurateur-pleihome\/\" \/>\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:12:46+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=\"Configurateur PleiHome - Pleion\" \/>\n\t\t<meta name=\"twitter:description\" content=\"PleIHome Configurateur de forfait client \u00c9tape 1 sur 7 \ud83d\udc64 Donn\u00e9es du client Veuillez saisir les informations relatives au client afin de personnaliser le rapport final. \u2139\ufe0f Ce configurateur vous guide \u00e9tape par \u00e9tape dans le choix des composants connect\u00e9s n\u00e9cessaires \u00e0 votre installation. \u00c0 la fin, vous recevrez une liste pr\u00e9cise des appareils \u00e0\" \/>\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\\\/fr\\\/configurateur-pleihome\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/pleion.it\\\/fr\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/pleion.it\\\/fr\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/pleion.it\\\/fr\\\/configurateur-pleihome\\\/#listItem\",\"name\":\"Configurateur PleiHome\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/pleion.it\\\/fr\\\/configurateur-pleihome\\\/#listItem\",\"position\":2,\"name\":\"Configurateur PleiHome\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/pleion.it\\\/fr\\\/#listItem\",\"name\":\"Home\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/pleion.it\\\/fr\\\/#organization\",\"name\":\"Pleion\",\"description\":\"Solare Termico per Produzione di Acqua Sanitaria\",\"url\":\"https:\\\/\\\/pleion.it\\\/fr\\\/\",\"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\\\/fr\\\/configurateur-pleihome\\\/#organizationLogo\",\"width\":873,\"height\":175,\"caption\":\"logo pleion\"},\"image\":{\"@id\":\"https:\\\/\\\/pleion.it\\\/fr\\\/configurateur-pleihome\\\/#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\\\/fr\\\/configurateur-pleihome\\\/#webpage\",\"url\":\"https:\\\/\\\/pleion.it\\\/fr\\\/configurateur-pleihome\\\/\",\"name\":\"Configurateur PleiHome - Pleion\",\"description\":\"PleIHome Configurateur de forfait client \\u00c9tape 1 sur 7 \\ud83d\\udc64 Donn\\u00e9es du client Veuillez saisir les informations relatives au client afin de personnaliser le rapport final. \\u2139\\ufe0f Ce configurateur vous guide \\u00e9tape par \\u00e9tape dans le choix des composants connect\\u00e9s n\\u00e9cessaires \\u00e0 votre installation. \\u00c0 la fin, vous recevrez une liste pr\\u00e9cise des appareils \\u00e0\",\"inLanguage\":\"fr-FR\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pleion.it\\\/fr\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/pleion.it\\\/fr\\\/configurateur-pleihome\\\/#breadcrumblist\"},\"datePublished\":\"2026-07-21T11:36:35+02:00\",\"dateModified\":\"2026-07-22T12:12:46+02:00\",\"publisher\":{\"@id\":\"https:\\\/\\\/pleion.it\\\/fr\\\/#organization\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pleion.it\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/pleion.it\\\/fr\\\/\",\"name\":\"Pleion\",\"description\":\"Solare Termico per Produzione di Acqua Sanitaria\",\"inLanguage\":\"fr-FR\",\"publisher\":{\"@id\":\"https:\\\/\\\/pleion.it\\\/fr\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO Pro -->\r\n\t\t<title>Configurateur PleiHome - Pleion<\/title>\n\n","aioseo_head_json":{"title":"Configurateur PleiHome - Pleion","description":"PleIHome Configurateur de forfait client \u00c9tape 1 sur 7 \ud83d\udc64 Donn\u00e9es du client Veuillez saisir les informations relatives au client afin de personnaliser le rapport final. \u2139\ufe0f Ce configurateur vous guide \u00e9tape par \u00e9tape dans le choix des composants connect\u00e9s n\u00e9cessaires \u00e0 votre installation. \u00c0 la fin, vous recevrez une liste pr\u00e9cise des appareils \u00e0","canonical_url":"https:\/\/pleion.it\/fr\/configurateur-pleihome\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BreadcrumbList","@id":"https:\/\/pleion.it\/fr\/configurateur-pleihome\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/pleion.it\/fr\/#listItem","position":1,"name":"Home","item":"https:\/\/pleion.it\/fr\/","nextItem":{"@type":"ListItem","@id":"https:\/\/pleion.it\/fr\/configurateur-pleihome\/#listItem","name":"Configurateur PleiHome"}},{"@type":"ListItem","@id":"https:\/\/pleion.it\/fr\/configurateur-pleihome\/#listItem","position":2,"name":"Configurateur PleiHome","previousItem":{"@type":"ListItem","@id":"https:\/\/pleion.it\/fr\/#listItem","name":"Home"}}]},{"@type":"Organization","@id":"https:\/\/pleion.it\/fr\/#organization","name":"Pleion","description":"Solare Termico per Produzione di Acqua Sanitaria","url":"https:\/\/pleion.it\/fr\/","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\/fr\/configurateur-pleihome\/#organizationLogo","width":873,"height":175,"caption":"logo pleion"},"image":{"@id":"https:\/\/pleion.it\/fr\/configurateur-pleihome\/#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\/fr\/configurateur-pleihome\/#webpage","url":"https:\/\/pleion.it\/fr\/configurateur-pleihome\/","name":"Configurateur PleiHome - Pleion","description":"PleIHome Configurateur de forfait client \u00c9tape 1 sur 7 \ud83d\udc64 Donn\u00e9es du client Veuillez saisir les informations relatives au client afin de personnaliser le rapport final. \u2139\ufe0f Ce configurateur vous guide \u00e9tape par \u00e9tape dans le choix des composants connect\u00e9s n\u00e9cessaires \u00e0 votre installation. \u00c0 la fin, vous recevrez une liste pr\u00e9cise des appareils \u00e0","inLanguage":"fr-FR","isPartOf":{"@id":"https:\/\/pleion.it\/fr\/#website"},"breadcrumb":{"@id":"https:\/\/pleion.it\/fr\/configurateur-pleihome\/#breadcrumblist"},"datePublished":"2026-07-21T11:36:35+02:00","dateModified":"2026-07-22T12:12:46+02:00","publisher":{"@id":"https:\/\/pleion.it\/fr\/#organization"}},{"@type":"WebSite","@id":"https:\/\/pleion.it\/fr\/#website","url":"https:\/\/pleion.it\/fr\/","name":"Pleion","description":"Solare Termico per Produzione di Acqua Sanitaria","inLanguage":"fr-FR","publisher":{"@id":"https:\/\/pleion.it\/fr\/#organization"}}]},"og:locale":"fr_FR","og:site_name":"Pleion - Solare Termico per Produzione di Acqua Sanitaria","og:type":"article","og:title":"Configurateur PleiHome - Pleion","og:description":"PleIHome Configurateur de forfait client \u00c9tape 1 sur 7 \ud83d\udc64 Donn\u00e9es du client Veuillez saisir les informations relatives au client afin de personnaliser le rapport final. \u2139\ufe0f Ce configurateur vous guide \u00e9tape par \u00e9tape dans le choix des composants connect\u00e9s n\u00e9cessaires \u00e0 votre installation. \u00c0 la fin, vous recevrez une liste pr\u00e9cise des appareils \u00e0","og:url":"https:\/\/pleion.it\/fr\/configurateur-pleihome\/","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:12:46+00:00","article:publisher":"https:\/\/www.facebook.com\/PleionItalia\/","twitter:card":"summary_large_image","twitter:title":"Configurateur PleiHome - Pleion","twitter:description":"PleIHome Configurateur de forfait client \u00c9tape 1 sur 7 \ud83d\udc64 Donn\u00e9es du client Veuillez saisir les informations relatives au client afin de personnaliser le rapport final. \u2139\ufe0f Ce configurateur vous guide \u00e9tape par \u00e9tape dans le choix des composants connect\u00e9s n\u00e9cessaires \u00e0 votre installation. \u00c0 la fin, vous recevrez une liste pr\u00e9cise des appareils \u00e0","twitter:image":"https:\/\/pleion.it\/wp-content\/uploads\/2026\/04\/cropped-logo-small-dark.png"},"aioseo_meta_data":{"post_id":"32067","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:30:22","created":"2026-07-22 10:12:42","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\/fr\/\" title=\"Home\">Home<\/a>\n<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\tConfigurateur PleiHome\n<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/pleion.it\/fr\/"},{"label":"Configurateur PleiHome","link":"https:\/\/pleion.it\/fr\/configurateur-pleihome\/"}],"_links":{"self":[{"href":"https:\/\/pleion.it\/fr\/wp-json\/wp\/v2\/pages\/32067","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pleion.it\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/pleion.it\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/pleion.it\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/pleion.it\/fr\/wp-json\/wp\/v2\/comments?post=32067"}],"version-history":[{"count":1,"href":"https:\/\/pleion.it\/fr\/wp-json\/wp\/v2\/pages\/32067\/revisions"}],"predecessor-version":[{"id":32071,"href":"https:\/\/pleion.it\/fr\/wp-json\/wp\/v2\/pages\/32067\/revisions\/32071"}],"wp:attachment":[{"href":"https:\/\/pleion.it\/fr\/wp-json\/wp\/v2\/media?parent=32067"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}