<html lang="it"><head>

<link rel="stylesheet" type="text/css" href="https://ariston.kleecks-cdn.com/static/css/vendors.css">

<link rel="stylesheet" type="text/css" href="https://www.ariston.com/static/css/main.css?v=1771322105653">

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v6.4.2/css/all.css" integrity="sha384-blOohCVdhjmtROpu8+CfTnUWham9nkX7P7OZQMst+RUnhtoY/9qemFAkIKOYxDI3" crossorigin="anonymous">

<script type="text/javascript" async="" charset="utf-8" src="https://static.revechat.com/widget/scripts/new-livechat.js?1771327858327"></script><script type="text/javascript" async="" src="https://matomo-italia1.kleecks-stats.com/matomo.js"></script>

<link rel="preload" href="https://www.ariston.com/_next/static/0RcvIp7nZgmqmekMZPRcZ/pages/default.js" as="script">

<link rel="preload" href="https://www.ariston.com/_next/static/0RcvIp7nZgmqmekMZPRcZ/pages/_app.js" as="script">

<link rel="preload" href="https://www.ariston.com/_next/static/runtime/webpack-4ea8b5295b6d613200bb.js" as="script">

<link rel="preload" href="https://www.ariston.com/_next/static/chunks/commons.12566168a0b389f7d59c.js" as="script">

<link rel="preload" href="https://www.ariston.com/_next/static/runtime/main-2f6b578326f8b87de07d.js" as="script">

<style type="text/css">/*!

* fullPage 3.0.8

* https://github.com/alvarotrigo/fullPage.js

*

* @license GPLv3 for open source use only

* or Fullpage Commercial License for commercial use

* http://alvarotrigo.com/fullPage/pricing/

*

* Copyright (C) 2018 http://alvarotrigo.com/fullPage - A project by Alvaro Trigo

*/.fp-enabled body,html.fp-enabled{margin:0;padding:0;overflow:hidden;-webkit-tap-highlight-color:rgba(0,0,0,0)}.fp-section{position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.fp-slide{float:left}.fp-slide,.fp-slidesContainer{height:100%;display:block}.fp-slides{z-index:1;height:100%;overflow:hidden;position:relative;-webkit-transition:all .3s ease-out;transition:all .3s ease-out}.fp-section.fp-table,.fp-slide.fp-table{display:table;table-layout:fixed;width:100%}.fp-tableCell{display:table-cell;vertical-align:middle;width:100%;height:100%}.fp-slidesContainer{float:left;position:relative}.fp-controlArrow{-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none;position:absolute;z-index:4;top:50%;cursor:pointer;width:0;height:0;border-style:solid;margin-top:-38px;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0)}.fp-controlArrow.fp-prev{left:15px;width:0;border-width:38.5px 34px 38.5px 0;border-color:transparent #fff transparent transparent}.fp-controlArrow.fp-next{right:15px;border-width:38.5px 0 38.5px 34px;border-color:transparent transparent transparent #fff}.fp-scrollable{position:relative}.fp-scrollable,.fp-scroller{overflow:hidden}.iScrollIndicator{border:0!important}.fp-notransition{-webkit-transition:none!important;transition:none!important}#fp-nav{position:fixed;z-index:100;margin-top:-32px;top:50%;opacity:1;-webkit-transform:translateZ(0)}#fp-nav.fp-right{right:17px}#fp-nav.fp-left{left:17px}.fp-slidesNav{position:absolute;z-index:4;opacity:1;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);left:0!important;right:0;margin:0 auto!important}.fp-slidesNav.fp-bottom{bottom:17px}.fp-slidesNav.fp-top{top:17px}#fp-nav ul,.fp-slidesNav ul{margin:0;padding:0}#fp-nav ul li,.fp-slidesNav ul li{display:block;width:14px;height:13px;margin:7px;position:relative}.fp-slidesNav ul li{display:inline-block}#fp-nav ul li a,.fp-slidesNav ul li a{display:block;position:relative;z-index:1;width:100%;height:100%;cursor:pointer;text-decoration:none}#fp-nav ul li:hover a.active span,#fp-nav ul li a.active span,.fp-slidesNav ul li:hover a.active span,.fp-slidesNav ul li a.active span{height:12px;width:12px;margin:-6px 0 0 -6px;border-radius:100%}#fp-nav ul li a span,.fp-slidesNav ul li a span{border-radius:50%;position:absolute;z-index:1;height:4px;width:4px;border:0;background:#333;left:50%;top:50%;margin:-2px 0 0 -2px;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;-o-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#fp-nav ul li:hover a span,.fp-slidesNav ul li:hover a span{width:10px;height:10px;margin:-5px 0 0 -5px}#fp-nav ul li .fp-tooltip{position:absolute;top:-2px;color:#fff;font-size:14px;font-family:arial,helvetica,sans-serif;white-space:nowrap;max-width:220px;overflow:hidden;display:block;opacity:0;width:0;cursor:pointer}#fp-nav.fp-show-active a.active+.fp-tooltip,#fp-nav ul li:hover .fp-tooltip{-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in;width:auto;opacity:1}#fp-nav ul li .fp-tooltip.fp-right{right:20px}#fp-nav ul li .fp-tooltip.fp-left{left:20px}.fp-auto-height.fp-section,.fp-auto-height .fp-slide,.fp-auto-height .fp-tableCell,.fp-responsive .fp-auto-height-responsive.fp-section,.fp-responsive .fp-auto-height-responsive .fp-slide,.fp-responsive .fp-auto-height-responsive .fp-tableCell{height:auto!important}.fp-sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}</style><link rel="stylesheet" type="text/css" href="https://www.ariston.com/static/css/vendors.css" class="next-head"><link rel="stylesheet" type="text/css" href="https://www.ariston.com/static/css/main.css?v=1771327858096" class="next-head"><link rel="stylesheet" href="https://use.fontawesome.com/releases/v6.4.2/css/all.css" integrity="sha384-blOohCVdhjmtROpu8+CfTnUWham9nkX7P7OZQMst+RUnhtoY/9qemFAkIKOYxDI3" crossorigin="anonymous" class="next-head"><script charset="utf-8" src="https://www.ariston.com/_next/static/chunks/02ed.9ad588e651db1a7105b4.js"></script><link rel="canonical" href="https://www.ariston.com/it-it/formula-plus/" class="next-head"><link href="https://www.ariston.com/landing/formula-plus/styles/style4.css" media="screen" rel="stylesheet" data-react-helmet="true"><script src="https://www.ariston.com/landing/formula-plus/scripts/scripts.js" data-react-helmet="true"></script></head>

<body class="locale-it-it KL-D-2 KL-LANG-it KL-P_URL_1-it-it KL-URL-formula-plus KL-URL-LEVEL-2 KL-CMS_URL-LEVEL-2 KL-UA-DESKTOP sp-CONTENT">

<div id="__next"><div class="boxedContainer"><div><div id="lp202424">

<div id="formulamutuo">

<section class="fm-Sei-Un-Professionista has-text-centered">

Sei un professionista? <a href="https://www.ariston.com/it-it/formula-plus-professionisti">Scopri i vantaggi dedicati a te</a>

</section>

<section class="fm hero is-halfheight is-fluid">

<div class="hero-body" style="padding: 40px">

<div class="hero-content">

<p class="title">

Da oggi il risparmio ha una <strong>nuova Formula</strong>

</p>

<p class="subtitle">

Scopri <strong>Ariston Formula Plus</strong>, l'alternativa

allo sconto in fattura che ti garantisce altissima efficienza e massimo comfort.

</p>

</div>

<div class="hero-image">

<img src=" https://www.ariston.com/landing/formula-plus/images/chiamaci.png" class="loaded" data-was-processed="true" alt="ariston-formula-plus-l-alternativa-di-ariston-allo-sconto-in-fattura-1">

</div>

</div>

</section>

<section class="fm-Content">

<section class="fm-Cose">

<h1><span>FORMULA PLUS</span> è l'alternativa di Ariston allo sconto in fattura</h1>

<p class="has-text-centered">Con <strong>Formula Plus</strong> puoi usufruire di tutti i vantaggi degli <strong>incentivi statali</strong> - dall'<strong>Ecobonus</strong> al <strong>Conto Termico</strong> - per ottenere il massimo comfort a condizioni imperdibili!</p>

<p class="has-text-centered">Ti supportiamo a partire dalla scelta del prodotto più adatto alle tue esigenze fino a occuparci delle pratiche burocratiche per consentirti di ottenere gli incentivi statali. E non solo! Grazie al nostro <strong>partner Fiditalia</strong> potrai richiedere un <strong>finanziamento su misura</strong> per rendere la tua casa ancora più sostenibile.</p>

</section>

<section class="fm-Come-Funziona box">

<div class="has-text-centered">

<h2>COME FUNZIONA FORMULA PLUS</h2>

<div class="container tabs is-fullwidth">

<ul>

<li class="tab is-active" onclick="openTab(event,'contotermico')"><a>Conto Termico</a></li>

<li class="tab" onclick="openTab(event,'ecobonus')"><a>ECOBONUS 65%</a></li>

</ul>

</div>

<div class="container section">

<div id="contotermico" class="content-tab">

<p>Con <b>Formula Plus</b>, per un intervento di incremento dell'efficienza energetica con un prodotto Ariston, è possibile usufruire dell'incentivo Conto Termico in massima semplicità e sicurezza per recuperare fino al 65% della spesa sostenuta. In più, grazie al <strong>mandato irrevocabile all'incasso</strong> puoi ottenere uno sconto immediato fino al 65%.</p>

<p>Esempio: valore fattura 1.600€ IVA inclusa per uno scaldacqua a pompa di calore Ariston</p>

<img class="is-hidden-mobile loaded" src="https://www.ariston.com/landing/formula-plus/images/come-funziona-formula-plus.png" alt="=COME FUNZIONA FORMULA PLUS" data-was-processed="true">

<img class="is-hidden-desktop is-hidden-tablet" src="https://www.ariston.com/landing/formula-plus/images/come-funziona-formula-plus-mobile.png" width="334" height="753" alt="=COME FUNZIONA FORMULA PLUS">

<p class="smaller">1 - Messaggio pubblicitario con finalità promozionale. Per le condizioni contrattuali si veda il documento “IEBCC” presso i Punti vendita aderenti all'iniziativa. Ariston SpA opera quale intermediario del credito in regime di non esclusiva con Fiditalia. La valutazione del merito creditizio è soggetta all'approvazione di Fiditalia SpA.</p>

<a class="cta" href="https://www.ariston.com/it-it/sconto-termico" target="_self" rel="noopener">SCOPRI DI PIÙ</a>

</div>

<div id="ecobonus" class="content-tab" style="display:none">

<p>Con <strong>Formula Plus</strong>, per un intervento di riqualificazione energetica con un prodotto Ariston che accede all'Ecobonus, <strong>recuperi il 65% del valore della fattura</strong> grazie alla detrazione fiscale e puoi decidere di <strong>accedere a un finanziamento personalizzato</strong>.</p>

<p>Esempio: valore fattura 4.000€ IVA inclusa</p>

<img class="is-hidden-mobile" src="https://www.ariston.com/landing/formula-plus/images/come-funziona-formula-plus-2.png" alt="=COME FUNZIONA FORMULA PLUS">

<img class="is-hidden-desktop is-hidden-tablet" src="https://www.ariston.com/landing/formula-plus/images/come-funziona-formula-plus-mobile-2.png" width="241" height="636" alt="=COME FUNZIONA FORMULA PLUS">

</div>

</div>

<p>Per te, sempre la massima <strong>flessibilità</strong> con piani personalizzabili: la partnership con Fiditalia garantisce finanziamenti su misura, sia dal punto di vista degli importi, sia della tipologia e della durata.</p>

<p class="mt-3"><strong>E i vantaggi non finiscono qui!</strong> Con Formula Plus ricevi anche il set documentale necessario per ottenere gli incentivi statali e il finanziamento con Fiditalia. Il tutto, verificato da <strong>un team di consulenti qualificati</strong>.</p>

<h3><span>FORMULA PLUS</span>: UN SERVIZIO SENZA PENSIERI</h3>

</div>

</section>

<section class="fm-Come-Accedere has-text-centered">

<h2>COME ACCEDERE A FORMULA PLUS</h2>

<div class="box">

<p class="titolo"><span>1</span> Troviamo insieme la soluzione adatta a te, scegliendo tra i nostri

prodotti:</p>

<div class="columns is-full is-mobile">

<div class="column has-text-centered">

<div><img src="https://www.ariston.com/landing/formula-plus/images/condizionatori.png" alt="=CONDIZIONATORI"></div>

<p class="has-text-centered">CONDIZIONATORI</p>

</div>

<div class="column has-text-centered">

<div><img src="https://www.ariston.com/landing/formula-plus/images/pompe-di-calore-e-sistemi-ibridi.png" alt="=POMPE DI CALORE E SISTEMI IBRIDI"></div>

<p class="has-text-centered">POMPE DI CALORE E SISTEMI IBRIDI</p>

</div>

<div class="column has-text-centered">

<div><img src="https://www.ariston.com/landing/formula-plus/images/scaldacqua-a-pompa-di-calore.png" alt="=SCALDACQUA A POMPA DI CALORE"></div>

<p class="has-text-centered">SCALDACQUA A POMPA DI CALORE</p>

</div>

<div class="column has-text-centered">

<div><img src="https://www.ariston.com/landing/formula-plus/images/solare-termico.png" alt="=SOLARE TERMICO"></div>

<p class="has-text-centered">SOLARE TERMICO</p>

</div>

</div>

</div>

<div class="box">

<p class="titolo"><span>2</span> Un professionista Ariston installa il prodotto prescelto.</p>

</div>

<div class="box">

<p class="titolo"><span>3</span> Noi ci occupiamo della burocrazia, tu ottieni condizioni paragonabili allo sconto in fattura.</p>

</div>

</section>

<section class="fm-Prodotti">

<div class="columns is-full columns-reverse">

<div class="column is-half"><img src="https://www.ariston.com/landing/formula-plus/images/condizionatori.jpg" alt="=CONDIZIONATORI"></div>

<div class="column is-half fm-Prodotto">

<h3>CONDIZIONATORI</h3>

<ul>

<li>Pacchetto chiavi in mano</li>

<li>Gas refrigerante R32</li>

<li>Classe energetica fino ad A+++</li>

<li>Tecnologia 2D INVERTER</li>

<li>Compatibile con Kit Wi-Fi</li>

<li>Funzione Auto-Pulente</li>

</ul>

<p>Configura subito la tua caldaia a condensazione e organizza un sopralluogo gratuito.</p>

<a href="https://www.configuratore.ariston.com/configurator/answers.html?questionId=1.1" target="_self" rel="noopener">Vai al configuratore</a>

</div>

</div>

</section>

<h1>CERCHI SOLUZIONI ALTERNATIVE?</h1>

<section class="fm-Prodotti">

<div class="columns is-full">

<div class="column is-half"><img src="https://www.ariston.com/landing/formula-plus/images/pompe-di-calore-e-sistemi-ibridi.jpg" alt="=POMPE DI CALORE E SISTEMI IBRIDI"></div>

<div class="column is-half fm-Prodotto">

<h3>POMPE DI CALORE E SISTEMI IBRIDI</h3>

<ul>

<li>Installazione sicura da parte di un tecnico esperto Ariston</li>

<li>Gas ecologico R32</li>

<li>Classe energetica A+</li>

<li>Semplicità di installazione con i kit accessori</li>

<li>Wi-Fi integrato per controllo a distanza e vocale</li>

<li>Bassa rumorosità</li>

</ul>

<a href="https://www.ariston.com/it-it/prodotti/pompe-di-calore" target="_self" rel="noopener">SCOPRI DI PIÙ</a>

</div>

</div>

<div class="columns is-full columns-reverse">

<div class="column is-half"><img src="https://www.ariston.com/landing/formula-plus/images/scaldacqua-a-pompa-di-calore.jpg" alt="=SCALDACQUA A POMPA DI CALORE"></div>

<div class="column is-half fm-Prodotto">

<h3>SCALDACQUA A POMPA DI CALORE</h3>

<ul>

<li>Installazione sicura da parte di un tecnico esperto Ariston</li>

<li>Classe energetica fino ad A+</li>

<li>Soluzione compatta e facile da installare</li>

<li>Bassa rumorosità</li>

</ul>

<a href="https://www.ariston.com/it-it/prodotti/scaldacqua/pompa-di-calore" target="_self" rel="noopener">SCOPRI DI PIÙ</a>

</div>

</div>

<div class="columns is-full">

<div class="column is-half"><img src="https://www.ariston.com/landing/formula-plus/images/solare-termico.jpg" alt="=SOLARE TERMICO"></div>

<div class="column is-half fm-Prodotto">

<h3>SOLARE TERMICO</h3>

<ul>

<li>Installazione sicura da parte di un tecnico esperto Ariston</li>

<li>Performance elevate per garantire la temperatura ideale dell'acqua calda</li>

<li>Soluzione compatta e facile da installare</li>

<li>Elevata resistenza alle infiltrazioni</li>

</ul>

<a href="https://www.ariston.com/it-it/prodotti/solare-termico/circolazione-naturale" target="_self" rel="noopener">SCOPRI DI PIÙ</a>

</div>

</div>

</section>

</section>

<section class="talkwithariston ">

<h3 class="is-darkGrey">CONTATTA ARISTON</h3>

<div class="talkwithariston-container">

<div class="talkwithariston-column">

<span class="is-not-uppercase title-xl aristonRed">Chiama i nostri operatori</span>

<p>Dal Lunedì alla Domenica dalle 08.00 alle 20.00 (esclusi i giorni di festività)<br> al seguente numero di telefono verde:</p>

<a title="800 220 055" type="button" class="gtm-callcenter-cta link-button numero-verde" target="" href="tel:800 220 055" rel="noopener"><img src="https://www.ariston.com/landing/formula-plus/images/icon-telefono.png" alt="ariston-formula-plus-l-alternativa-di-ariston-allo-sconto-in-fattura-2"> 800 220 055</a>

</div>

</div>

</section>

</div>

</div></div></div></div>

<script async="" id="__NEXT_PAGE__/default" src="https://www.ariston.com/_next/static/0RcvIp7nZgmqmekMZPRcZ/pages/default.js"></script>

<script async="" id="__NEXT_PAGE__/_app" src="https://www.ariston.com/_next/static/0RcvIp7nZgmqmekMZPRcZ/pages/_app.js"></script>

<script src="https://www.ariston.com/_next/static/runtime/webpack-4ea8b5295b6d613200bb.js" async=""></script>

<script src="https://www.ariston.com/_next/static/chunks/commons.12566168a0b389f7d59c.js" async=""></script>

<script src="https://www.ariston.com/_next/static/runtime/main-2f6b578326f8b87de07d.js" async=""></script>

<script>// Generic Alt Text Setter Script

// Sets alt text for any remaining images/SVGs without alt text using ariston-*h1*-*number* pattern

(function() {

'use strict';

let consecutiveResults = [];

let intervalId;

let observerActive = false;

let imageCounter = 1;

// Configuration

const CONFIG = {

checkInterval: 1000, // Check every second

requiredConsecutiveResults: 5, // Stop after 5 consecutive same results

debug: false // Set to false to disable console logging

};

// Logging function

function log(message, type = 'info') {

if (!CONFIG.debug) return;

const timestamp = new Date().toLocaleTimeString();

const prefix = `[${timestamp}] Generic Alt Setter:`;

switch(type) {

case 'error':

console.error(prefix, message);

break;

case 'warn':

console.warn(prefix, message);

break;

case 'success':

console.log(`%c${prefix} ${message}`, 'color: blue; font-weight: bold;');

break;

default:

console.log(prefix, message);

}

}

// Get the main heading text from the page

function getMainHeading() {

// Try to find h1 first, then h2, then h3

const h1 = document.querySelector('h1');

if (h1 && h1.textContent.trim()) {

return h1.textContent.trim().toLowerCase().replace(/[^a-z0-9]+/g, '-');

}

const h2 = document.querySelector('h2');

if (h2 && h2.textContent.trim()) {

return h2.textContent.trim().toLowerCase().replace(/[^a-z0-9]+/g, '-');

}

const h3 = document.querySelector('h3');

if (h3 && h3.textContent.trim()) {

return h3.textContent.trim().toLowerCase().replace(/[^a-z0-9]+/g, '-');

}

// Fallback to page title or generic

const title = document.title;

if (title && title.trim()) {

return title.trim().toLowerCase().replace(/[^a-z0-9]+/g, '-');

}

return 'page';

}

// Generate alt text using the ariston-*h1*-*number* pattern

function generateAltText(element, index) {

const heading = getMainHeading();

const elementType = element.tagName.toLowerCase();

// Create the pattern: ariston-[heading]-[number]

return `ariston-${heading}-${imageCounter++}`;

}

// Check if element already has alt text or aria-label

function hasAltText(element) {

const alt = element.getAttribute('alt');

const ariaLabel = element.getAttribute('aria-label');

return (alt && alt.trim() !== '') || (ariaLabel && ariaLabel.trim() !== '');

}

// Check if element should be excluded (decorative, hidden, etc.)

function shouldExclude(element) {

// Skip hidden elements

const style = window.getComputedStyle(element);

if (style.display === 'none' || style.visibility === 'hidden' || style.opacity === '0') {

return true;

}

// Skip elements with aria-hidden="true"

if (element.getAttribute('aria-hidden') === 'true') {

return true;

}

// Skip elements with role="presentation" or role="none"

const role = element.getAttribute('role');

if (role === 'presentation' || role === 'none') {

return true;

}

// Skip very small images (likely decorative)

if (element.tagName.toLowerCase() === 'img') {

const width = element.naturalWidth || element.width || 0;

const height = element.naturalHeight || element.height || 0;

if (width <= 1 || height <= 1) {

return true;

}

}

return false;

}

// Process individual image or SVG

function processElement(element, index) {

let altTextSet = false;

let reason = '';

try {

// Skip if element already has alt text

if (hasAltText(element)) {

return { processed: false, reason: 'Already has alt text or aria-label', altText: element.getAttribute('alt') || element.getAttribute('aria-label') };

}

// Skip if element should be excluded

if (shouldExclude(element)) {

return { processed: false, reason: 'Excluded (decorative, hidden, or too small)' };

}

// Generate and set alt text

const altText = generateAltText(element, index);

if (element.tagName.toLowerCase() === 'svg') {

// For SVG, prefer aria-label over alt

element.setAttribute('aria-label', altText);

} else {

// For IMG, use alt attribute

element.setAttribute('alt', altText);

}

altTextSet = true;

reason = `Generated alt text using ariston pattern`;

log(`${element.tagName} ${index + 1}: Set ${element.tagName.toLowerCase() === 'svg' ? 'aria-label' : 'alt'}="${altText}" - ${reason}`, 'success');

} catch (error) {

log(`Error processing ${element.tagName.toLowerCase()} ${index + 1}: ${error.message}`, 'error');

reason = `error: ${error.message}`;

}

return {

processed: altTextSet,

reason: reason,

altText: altTextSet ? (element.getAttribute('alt') || element.getAttribute('aria-label')) : null

};

}

// Main function to process all images and SVGs

function processAllElements() {

const elements = document.querySelectorAll('img, svg');

let processedCount = 0;

let candidateElements = 0; // Elements that need alt text

let totalElements = elements.length;

log(`Found ${totalElements} images and SVGs on page`);

if (totalElements === 0) {

return { processed: 0, candidates: 0 };

}

elements.forEach((element, index) => {

// Check if element needs alt text

const needsAltText = !hasAltText(element) && !shouldExclude(element);

if (needsAltText) {

candidateElements++;

const result = processElement(element, index);

if (result.processed) {

processedCount++;

}

if (CONFIG.debug && !result.processed) {

log(`${element.tagName} ${index + 1}: Not processed - ${result.reason}`);

}

}

});

log(`Processed ${processedCount} out of ${candidateElements} candidate elements (${totalElements} total elements)`);

return { processed: processedCount, candidates: candidateElements };

}

// Check if we should stop based on consecutive results

function shouldStop(result) {

const currentCandidates = result.candidates;

const currentProcessed = result.processed;

consecutiveResults.push(currentCandidates);

// Keep only the last 'requiredConsecutiveResults' results

if (consecutiveResults.length > CONFIG.requiredConsecutiveResults) {

consecutiveResults.shift();

}

// Check if we have enough consecutive results

if (consecutiveResults.length === CONFIG.requiredConsecutiveResults) {

const firstResult = consecutiveResults[0];

const allSame = consecutiveResults.every(result => result === firstResult);

// Stop if we have consistent results and no new processing

if (allSame && currentProcessed === 0) {

if (firstResult === 0) {

log(`Stopping: No candidate elements found for ${CONFIG.requiredConsecutiveResults} consecutive checks`, 'success');

} else {

log(`Stopping: Found ${firstResult} candidate elements with 0 new processed for ${CONFIG.requiredConsecutiveResults} consecutive checks`, 'success');

}

return true;

}

}

return false;

}

// Main checking function

function runCheck() {

log('Running generic alt text check...');

const result = processAllElements();

log(`Check result: ${result.processed} elements processed, ${result.candidates} candidates found`);

if (shouldStop(result)) {

stopMonitoring();

log('Generic monitoring stopped - consistent results achieved', 'success');

}

}

// Start monitoring function

function startMonitoring() {

if (intervalId) {

log('Generic monitoring already active');

return;

}

log('Starting generic alt text monitoring...', 'success');

log(`Configuration: Check every ${CONFIG.checkInterval}ms, stop after ${CONFIG.requiredConsecutiveResults} consecutive same results`);

// Reset state

consecutiveResults = [];

imageCounter = 1; // Reset counter

// Run initial check

runCheck();

// Set up interval for continuous checking

intervalId = setInterval(runCheck, CONFIG.checkInterval);

// Set up MutationObserver to detect DOM changes

if (!observerActive && window.MutationObserver) {

const observer = new MutationObserver((mutations) => {

let hasElementChanges = false;

mutations.forEach((mutation) => {

if (mutation.type === 'childList') {

mutation.addedNodes.forEach((node) => {

if (node.nodeType === Node.ELEMENT_NODE) {

if (node.tagName === 'IMG' || node.tagName === 'SVG' || node.querySelector('img, svg')) {

hasElementChanges = true;

}

}

});

}

});

if (hasElementChanges) {

log('DOM changes detected with new images/SVGs');

// Reset consecutive results when DOM changes

consecutiveResults = [];

}

});

observer.observe(document.body, {

childList: true,

subtree: true

});

observerActive = true;

log('MutationObserver activated for generic alt text');

}

}

// Stop monitoring function

function stopMonitoring() {

if (intervalId) {

clearInterval(intervalId);

intervalId = null;

log('Generic monitoring stopped', 'success');

}

}

// Expose control functions to global scope for manual control

window.genericAltTextSetter = {

start: startMonitoring,

stop: stopMonitoring,

runOnce: () => processAllElements(),

getStatus: () => ({

active: !!intervalId,

consecutiveResults: [...consecutiveResults],

currentCounter: imageCounter,

config: { ...CONFIG }

}),

setCounter: (newCounter) => {

imageCounter = newCounter;

log(`Counter reset to ${newCounter}`);

}

};

// Auto-start when DOM is ready (with a slight delay to let specific script run first)

if (document.readyState === 'loading') {

document.addEventListener('DOMContentLoaded', () => {

setTimeout(startMonitoring, 2000); // Wait 2 seconds after DOM ready

});

} else {

// DOM is already ready

setTimeout(startMonitoring, 2000); // Wait 2 seconds

}

log('Generic Alt Text Setter script loaded successfully', 'success');

log('Use window.genericAltTextSetter.start(), .stop(), .runOnce(), .setCounter(n), or .getStatus() for manual control');

})();</script>

<script>// Image Alt Text Auto-Setter Script

// Continuously monitors and sets alt text for images based on specific parent conditions

(function() {

'use strict';

let consecutiveResults = [];

let intervalId;

let observerActive = false;

// Configuration

const CONFIG = {

checkInterval: 1000, // Check every second

requiredConsecutiveResults: 5, // Stop after 5 consecutive same results

debug: false // Set to false to disable console logging

};

// Logging function

function log(message, type = 'info') {

if (!CONFIG.debug) return;

const timestamp = new Date().toLocaleTimeString();

const prefix = `[${timestamp}] Alt Text Setter:`;

switch(type) {

case 'error':

console.error(prefix, message);

break;

case 'warn':

console.warn(prefix, message);

break;

case 'success':

console.log(`%c${prefix} ${message}`, 'color: green; font-weight: bold;');

break;

default:

console.log(prefix, message);

}

}

// Check if element has specific class

function hasClass(element, className) {

return element && element.classList && element.classList.contains(className);

}

// Get ancestor element by tag name

function getAncestorByTag(element, tagName, maxLevels = 10) {

let current = element.parentElement;

let level = 0;

while (current && level < maxLevels) {

if (current.tagName && current.tagName.toLowerCase() === tagName.toLowerCase()) {

return current;

}

current = current.parentElement;

level++;

}

return null;

}

// Get parent with specific class

function getParentWithClass(element, className, maxLevels = 10) {

let current = element.parentElement;

let level = 0;

while (current && level < maxLevels) {

if (hasClass(current, className)) {

return current;

}

current = current.parentElement;

level++;

}

return null;

}

// Get second parent (grandparent)

function getSecondParent(element) {

return element.parentElement && element.parentElement.parentElement;

}

// Process individual image

function processImage(img, index) {

let altTextSet = false;

let reason = '';

// Skip if image already has alt text

if (img.getAttribute('alt') && img.getAttribute('alt').trim() !== '') {

return { processed: false, reason: 'Already has alt text', altText: img.getAttribute('alt') };

}

try {

// Case 1: Image has class "trigger-banner-image"

if (hasClass(img, 'trigger-banner-image')) {

img.setAttribute('alt', 'background-banner-image');

altTextSet = true;

reason = 'trigger-banner-image class detected';

log(`Image ${index + 1}: Set alt="background-banner-image" - ${reason}`, 'success');

}

// Case 2: Image has parent with class "mega-menu__col"

else if (getParentWithClass(img, 'mega-menu__col')) {

img.setAttribute('alt', 'menu-background-image');

altTextSet = true;

reason = 'parent with mega-menu__col class detected';

log(`Image ${index + 1}: Set alt="menu-background-image" - ${reason}`, 'success');

}

// Case 3: Image has anchor as second parent

else {

const secondParent = getSecondParent(img);

if (secondParent && secondParent.tagName && secondParent.tagName.toLowerCase() === 'a') {

const titleAttr = secondParent.getAttribute('title');

if (titleAttr && titleAttr.trim() !== '') {

img.setAttribute('alt', titleAttr.trim());

altTextSet = true;

reason = `anchor second parent with title="${titleAttr}"`;

log(`Image ${index + 1}: Set alt="${titleAttr}" - ${reason}`, 'success');

} else {

reason = 'anchor second parent found but no title attribute';

log(`Image ${index + 1}: ${reason}`, 'warn');

}

} else {

reason = 'no matching conditions found';

}

}

} catch (error) {

log(`Error processing image ${index + 1}: ${error.message}`, 'error');

reason = `error: ${error.message}`;

}

return {

processed: altTextSet,

reason: reason,

altText: altTextSet ? img.getAttribute('alt') : null

};

}

// Main function to process all images

function processAllImages() {

const images = document.querySelectorAll('img');

let processedCount = 0;

let candidateImages = 0; // Images that match our criteria

let totalImages = images.length;

log(`Found ${totalImages} images on page`);

if (totalImages === 0) {

return { processed: 0, candidates: 0 };

}

images.forEach((img, index) => {

// Check if image matches any of our criteria first

const matchesCriteria = hasClass(img, 'trigger-banner-image') ||

getParentWithClass(img, 'mega-menu__col') ||

(getSecondParent(img) && getSecondParent(img).tagName && getSecondParent(img).tagName.toLowerCase() === 'a');

if (matchesCriteria) {

candidateImages++;

const result = processImage(img, index);

if (result.processed) {

processedCount++;

}

if (CONFIG.debug && !result.processed && result.reason !== 'Already has alt text') {

log(`Image ${index + 1}: Not processed - ${result.reason}`);

}

}

});

log(`Processed ${processedCount} out of ${candidateImages} candidate images (${totalImages} total images)`);

return { processed: processedCount, candidates: candidateImages };

}

// Check if we should stop based on consecutive results

function shouldStop(result) {

const currentCandidates = result.candidates;

const currentProcessed = result.processed;

consecutiveResults.push(currentCandidates);

// Keep only the last 'requiredConsecutiveResults' results

if (consecutiveResults.length > CONFIG.requiredConsecutiveResults) {

consecutiveResults.shift();

}

// Check if we have enough consecutive results and they're all the same non-zero value

if (consecutiveResults.length === CONFIG.requiredConsecutiveResults) {

const firstResult = consecutiveResults[0];

const allSame = consecutiveResults.every(result => result === firstResult);

const isNonZero = firstResult > 0;

if (allSame && isNonZero && currentProcessed === 0) {

log(`Stopping: Found ${firstResult} candidate images with 0 new processed for ${CONFIG.requiredConsecutiveResults} consecutive checks`, 'success');

return true;

}

}

return false;

}

// Main checking function

function runCheck() {

log('Running image alt text check...');

const result = processAllImages();

log(`Check result: ${result.processed} images processed, ${result.candidates} candidates found`);

if (shouldStop(result)) {

stopMonitoring();

log('Monitoring stopped - consistent results achieved', 'success');

}

}

// Start monitoring function

function startMonitoring() {

if (intervalId) {

log('Monitoring already active');

return;

}

log('Starting image alt text monitoring...', 'success');

log(`Configuration: Check every ${CONFIG.checkInterval}ms, stop after ${CONFIG.requiredConsecutiveResults} consecutive same results`);

// Reset state

consecutiveResults = [];

// Run initial check

runCheck();

// Set up interval for continuous checking

intervalId = setInterval(runCheck, CONFIG.checkInterval);

// Set up MutationObserver to detect DOM changes

if (!observerActive && window.MutationObserver) {

const observer = new MutationObserver((mutations) => {

let hasImageChanges = false;

mutations.forEach((mutation) => {

if (mutation.type === 'childList') {

mutation.addedNodes.forEach((node) => {

if (node.nodeType === Node.ELEMENT_NODE) {

if (node.tagName === 'IMG' || node.querySelector('img')) {

hasImageChanges = true;

}

}

});

}

});

if (hasImageChanges) {

log('DOM changes detected with new images');

// Reset consecutive results when DOM changes

consecutiveResults = [];

}

});

observer.observe(document.body, {

childList: true,

subtree: true

});

observerActive = true;

log('MutationObserver activated');

}

}

// Stop monitoring function

function stopMonitoring() {

if (intervalId) {

clearInterval(intervalId);

intervalId = null;

log('Monitoring stopped', 'success');

}

}

// Expose control functions to global scope for manual control

window.imageAltTextSetter = {

start: startMonitoring,

stop: stopMonitoring,

runOnce: () => processAllImages(),

getStatus: () => ({

active: !!intervalId,

consecutiveResults: [...consecutiveResults],

config: { ...CONFIG }

})

};

// Auto-start when DOM is ready

if (document.readyState === 'loading') {

document.addEventListener('DOMContentLoaded', startMonitoring);

} else {

// DOM is already ready

startMonitoring();

}

log('Image Alt Text Setter script loaded successfully', 'success');

log('Use window.imageAltTextSetter.start(), .stop(), .runOnce(), or .getStatus() for manual control');

})();</script>

<script type="text/javascript">

var _paq = window._paq = window._paq || [];

// tracker methods like "setCustomDimension" should be called before "trackPageView"

_paq.push(["trackPageView"]);

_paq.push(["enableLinkTracking"]);

(function () {

var u = "https://matomo-italia1.kleecks-stats.com/";

_paq.push(["setTrackerUrl", u + "matomo.php"]);

_paq.push(["setSiteId", "www-ariston-com"]);

var d = document, g = d.createElement("script"), s = d.getElementsByTagName("script")[0];

g.type = "text/javascript"; g.async = true; g.src = u + "matomo.js"; s.parentNode.insertBefore(g, s);

})();

</script>

<noscript>

<p><img src="https://matomo-italia1.kleecks-stats.com/matomo.php?idsite=www-ariston-com&amp;rec=1" style="border:0;" alt=""></p>

</noscript>

<script defer="" src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon="{&quot;version&quot;:&quot;2024.11.0&quot;,&quot;token&quot;:&quot;88aee7e3881c4bdbb754a69fe7cf203e&quot;,&quot;server_timing&quot;:{&quot;name&quot;:{&quot;cfCacheStatus&quot;:true,&quot;cfEdge&quot;:true,&quot;cfExtPri&quot;:true,&quot;cfL4&quot;:true,&quot;cfOrigin&quot;:true,&quot;cfSpeedBrain&quot;:true},&quot;location_startswith&quot;:null}}" crossorigin="anonymous"></script>

<div class="ReactModalPortal"></div><div class="ReactModalPortal"></div><div class="ReactModalPortal"></div><div class="ReactModalPortal"></div><style>.hero-body, .section {padding: 0;}.footer{padding:0;}#formulamutuo{top:0;}.pre-footer-overlay span{font-size:16px;}a.announcement-banner-link:hover{color: inherit;font-weight: 600;}</style></body></html>