{"id":2156,"date":"2026-06-01T03:07:29","date_gmt":"2026-06-01T03:07:29","guid":{"rendered":"https:\/\/aiper.com\/blogs\/?page_id=2156"},"modified":"2026-06-24T04:24:36","modified_gmt":"2026-06-24T04:24:36","slug":"calculateur-indice-saturation-piscine","status":"publish","type":"page","link":"https:\/\/aiper.com\/blogs\/fr\/calculateur-indice-saturation-piscine\/","title":{"rendered":"Calculateur d&#8217;indice de saturation pour piscine (LSI)"},"content":{"rendered":"\n<div class=\"pool-calc-container\">\n\n    <form id=\"pool-calc-form\" onsubmit=\"event.preventDefault();\">\n        <!-- Step 1: Water Parameters -->\n        <div class=\"pool-calc-step\">\n            <div class=\"step-badge\">\u00c9tape 1<\/div>\n            <h3 class=\"step-title\">Saisissez les param\u00e8tres de l&#8217;eau<\/h3>\n\n            <div class=\"pool-calc-grid\">\n                <div class=\"input-group\">\n                    <label for=\"pool-ph\">Niveau de pH<\/label>\n                    <input type=\"number\" id=\"pool-ph\" step=\"0.1\" value=\"7.5\" min=\"6.0\" max=\"9.0\">\n                    <span class=\"input-hint\">Id\u00e9al&nbsp;: 7.2 &#8211; 7.8<\/span>\n                <\/div>\n\n                <div class=\"input-group\">\n                    <label for=\"pool-alk\">Alcalinit\u00e9 totale (ppm)<\/label>\n                    <input type=\"number\" id=\"pool-alk\" step=\"1\" value=\"100\" min=\"0\" max=\"500\">\n                    <span class=\"input-hint\">Id\u00e9al&nbsp;: 80 &#8211; 120 ppm<\/span>\n                <\/div>\n\n                <div class=\"input-group\">\n                    <label for=\"pool-cal\">Duret\u00e9 calcique (ppm)<\/label>\n                    <input type=\"number\" id=\"pool-cal\" step=\"1\" value=\"300\" min=\"0\" max=\"1000\">\n                    <span class=\"input-hint\">Id\u00e9al&nbsp;: 200 &#8211; 400 ppm<\/span>\n                <\/div>\n\n                <div class=\"input-group\">\n                    <label for=\"pool-cya\">Acide cyanurique (ppm)<\/label>\n                    <input type=\"number\" id=\"pool-cya\" step=\"1\" value=\"40\" min=\"0\" max=\"200\">\n                    <span class=\"input-hint\">Id\u00e9al&nbsp;: 30 &#8211; 50 ppm<\/span>\n                <\/div>\n\n                <div class=\"input-group\">\n                    <label for=\"pool-tds\">Sel \/ TDS (ppm)<\/label>\n                    <input type=\"number\" id=\"pool-tds\" step=\"1\" value=\"1000\" min=\"0\" max=\"6000\">\n                    <span class=\"input-hint\">Sans sel&nbsp;: &lt; 1500 | Sel&nbsp;: ~3200<\/span>\n                <\/div>\n\n                <div class=\"input-group\">\n                    <label for=\"pool-borate\">Borates (ppm)<\/label>\n                    <input type=\"number\" id=\"pool-borate\" step=\"1\" value=\"0\" min=\"0\" max=\"100\">\n                    <span class=\"input-hint\">Optionnel&nbsp;: 0 &#8211; 50 ppm<\/span>\n                <\/div>\n\n                <div class=\"input-group full-width\">\n                    <label>Temp\u00e9rature de l&#8217;eau<\/label>\n                    <div class=\"temp-control-wrapper\">\n                        <input type=\"number\" id=\"pool-temp\" step=\"1\" value=\"80\" style=\"flex: 1;\">\n                        <div class=\"temp-toggle-container\">\n                            <button type=\"button\" class=\"temp-toggle-btn active\" id=\"btn-f\" onclick=\"setTempUnit('F')\">\u00b0F<\/button>\n                            <button type=\"button\" class=\"temp-toggle-btn\" id=\"btn-c\" onclick=\"setTempUnit('C')\">\u00b0C<\/button>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <!-- Step 2: Calculation & Action Buttons -->\n        <div class=\"pool-calc-step\" style=\"border-bottom: none; margin-bottom: 0; padding-bottom: 10px;\">\n            <div class=\"step-badge\">\u00c9tape 2<\/div>\n            <h3 class=\"step-title\">Lancer l&#8217;analyse<\/h3>\n            <div class=\"btn-group\">\n                <button type=\"button\" class=\"calculate-btn\" onclick=\"calculateLSI()\">Calculer<\/button>\n                <button type=\"button\" class=\"reset-btn\" onclick=\"resetCalculator()\">R\u00e9initialiser<\/button>\n            <\/div>\n        <\/div>\n    <\/form>\n\n    <!-- Dashboard Results Section -->\n    <div id=\"results-dashboard\" class=\"results-dashboard\" style=\"display: none;\">\n        <div class=\"dashboard-header\">\n            <h4>R\u00e9sultats du calcul<\/h4>\n        <\/div>\n        <div class=\"dashboard-body\">\n            <div class=\"result-score-block\">\n                <div class=\"score-label\">Votre score LSI<\/div>\n                <div id=\"lsi-value\" class=\"score-number\">0.00<\/div>\n                <div id=\"lsi-status\" class=\"score-status\">\u00c9quilibr\u00e9e<\/div>\n            <\/div>\n            <div class=\"result-meta-block\">\n                <div class=\"target-range-box\">\n                    <strong>Plage cible&nbsp;:<\/strong> <span class=\"highlight-text\">-0.30 \u00e0 +0.30<\/span>\n                <\/div>\n                <p id=\"lsi-description\" class=\"explanation-text\">\n                    Vos param\u00e8tres d&#8217;eau sont en cours d&#8217;analyse\u2026\n                <\/p>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<style>\n\/* Custom WordPress CSS Wrapper with #1ecad3 thematic color *\/\n.pool-calc-container {\n    background: #ffffff;\n    border: 1px solid #e2e8f0;\n    border-radius: 12px;\n    padding: 25px;\n    max-width: 650px;\n    margin: 20px auto;\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n    box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);\n    box-sizing: border-box;\n}\n.pool-calc-container * {\n    box-sizing: border-box;\n}\n.pool-calc-title {\n    color: #1a202c;\n    font-size: 24px;\n    font-weight: 700;\n    margin-top: 0;\n    margin-bottom: 25px;\n    border-bottom: 2px solid #f1f5f9;\n    padding-bottom: 15px;\n}\n.pool-calc-step {\n    margin-bottom: 25px;\n    border-bottom: 1px dashed #e2e8f0;\n    padding-bottom: 25px;\n}\n\/* Block-level normal flow layout (prevents overlap) *\/\n.step-badge {\n    display: inline-block;\n    background-color: #1ecad3;\n    color: #ffffff;\n    font-size: 11px;\n    font-weight: 700;\n    padding: 4px 8px;\n    border-radius: 6px;\n    text-transform: uppercase;\n    letter-spacing: 0.5px;\n    margin-bottom: 8px;\n}\n.step-title {\n    font-size: 18px;\n    color: #2d3748;\n    margin-top: 0;\n    margin-bottom: 20px;\n    font-weight: 600;\n}\n.pool-calc-grid {\n    display: grid;\n    grid-template-columns: repeat(2, 1fr);\n    gap: 15px;\n}\n@media (max-width: 480px) {\n    .pool-calc-grid {\n        grid-template-columns: 1fr;\n    }\n}\n.input-group {\n    display: flex;\n    flex-direction: column;\n}\n.input-group.full-width {\n    grid-column: span 2;\n}\n@media (max-width: 480px) {\n    .input-group.full-width {\n        grid-column: span 1;\n    }\n}\n.input-group label {\n    font-size: 14px;\n    font-weight: 600;\n    color: #4a5568;\n    margin-bottom: 6px;\n}\n.input-group input {\n    padding: 10px 12px;\n    border: 1px solid #cbd5e1;\n    border-radius: 6px;\n    font-size: 15px;\n    color: #334155;\n    outline: none;\n    transition: border-color 0.2s ease;\n}\n.input-group input:focus {\n    border-color: #1ecad3;\n    box-shadow: 0 0 0 3px rgba(30, 202, 211, 0.15);\n}\n.input-hint {\n    font-size: 11px;\n    color: #94a3b8;\n    margin-top: 4px;\n}\n.temp-control-wrapper {\n    display: flex;\n    gap: 8px;\n}\n.temp-toggle-container {\n    display: flex;\n    border: 1px solid #cbd5e1;\n    border-radius: 6px;\n    overflow: hidden;\n}\n.temp-toggle-btn {\n    background: #f8fafc;\n    border: none;\n    padding: 0 14px;\n    font-size: 14px;\n    font-weight: 600;\n    color: #64748b;\n    cursor: pointer;\n    transition: all 0.2s;\n}\n.temp-toggle-btn.active {\n    background-color: #1ecad3;\n    color: #ffffff;\n}\n\n\/* Button group flexbox layout *\/\n.btn-group {\n    display: flex;\n    gap: 12px;\n    width: 100%;\n}\n@media (max-width: 480px) {\n    .btn-group {\n        flex-direction: column;\n    }\n}\n.calculate-btn {\n    background-color: #1ecad3;\n    color: #ffffff;\n    border: none;\n    padding: 12px 24px;\n    font-size: 16px;\n    font-weight: 700;\n    border-radius: 6px;\n    cursor: pointer;\n    flex: 3;\n    transition: background-color 0.2s, transform 0.1s;\n}\n.calculate-btn:hover {\n    background-color: #16b3bb;\n}\n.calculate-btn:active {\n    transform: scale(0.99);\n}\n\/* Reset button style *\/\n.reset-btn {\n    background-color: #f8fafc;\n    color: #64748b;\n    border: 1px solid #cbd5e1;\n    padding: 12px 24px;\n    font-size: 16px;\n    font-weight: 600;\n    border-radius: 6px;\n    cursor: pointer;\n    flex: 1;\n    transition: all 0.2s;\n}\n.reset-btn:hover {\n    background-color: #f1f5f9;\n    color: #334155;\n    border-color: #94a3b8;\n}\n.reset-btn:active {\n    transform: scale(0.99);\n}\n\n\/* Dashboard styles *\/\n.results-dashboard {\n    margin-top: 25px;\n    border: 2px solid #1ecad3;\n    border-radius: 8px;\n    overflow: hidden;\n    background: #fcfdfd;\n    animation: fadeIn 0.4s ease-out;\n}\n.dashboard-header {\n    background-color: #1ecad3;\n    padding: 12px 15px;\n}\n.dashboard-header h4 {\n    margin: 0;\n    color: #ffffff;\n    font-size: 16px;\n    font-weight: 600;\n}\n.dashboard-body {\n    display: flex;\n    padding: 20px;\n    gap: 20px;\n    align-items: center;\n}\n@media (max-width: 550px) {\n    .dashboard-body {\n        flex-direction: column;\n        text-align: center;\n    }\n}\n.result-score-block {\n    flex: 0 0 140px;\n    text-align: center;\n    background: #ffffff;\n    padding: 15px;\n    border-radius: 8px;\n    border: 1px solid #e2e8f0;\n}\n.score-label {\n    font-size: 11px;\n    text-transform: uppercase;\n    letter-spacing: 0.5px;\n    color: #64748b;\n    font-weight: 600;\n}\n.score-number {\n    font-size: 32px;\n    font-weight: 800;\n    color: #1a202c;\n    margin: 5px 0;\n}\n.score-status {\n    font-size: 12px;\n    font-weight: 700;\n    padding: 3px 8px;\n    border-radius: 12px;\n    display: inline-block;\n}\n.status-balanced { background: #dcfce7; color: #166534; }\n.status-corrosive { background: #fee2e2; color: #991b1b; }\n.status-scaling { background: #fef3c7; color: #92400e; }\n\n.result-meta-block {\n    flex: 1;\n}\n.target-range-box {\n    font-size: 14px;\n    color: #334155;\n    margin-bottom: 10px;\n    background: #f1f5f9;\n    padding: 6px 12px;\n    border-radius: 4px;\n    display: inline-block;\n}\n.highlight-text {\n    color: #16b3bb;\n    font-weight: 700;\n}\n.explanation-text {\n    font-size: 14px;\n    line-height: 1.5;\n    color: #475569;\n    margin: 0;\n}\n\n@keyframes fadeIn {\n    from { opacity: 0; transform: translateY(10px); }\n    to { opacity: 1; transform: translateY(0); }\n}\n<\/style>\n\n<script>\nlet currentTempUnit = 'F';\n\nfunction setTempUnit(unit) {\n    if (currentTempUnit === unit) return;\n\n    currentTempUnit = unit;\n    document.getElementById('btn-f').classList.toggle('active', unit === 'F');\n    document.getElementById('btn-c').classList.toggle('active', unit === 'C');\n\n    let tempInput = document.getElementById('pool-temp');\n    let currentVal = parseFloat(tempInput.value);\n    if (!isNaN(currentVal)) {\n        if (unit === 'C') {\n            tempInput.value = Math.round((currentVal - 32) * 5 \/ 9);\n        } else {\n            tempInput.value = Math.round((currentVal * 9 \/ 5) + 32);\n        }\n    }\n}\n\nfunction resetCalculator() {\n    \/\/ Restore default values\n    document.getElementById('pool-ph').value = \"7.5\";\n    document.getElementById('pool-alk').value = \"100\";\n    document.getElementById('pool-cal').value = \"300\";\n    document.getElementById('pool-cya').value = \"40\";\n    document.getElementById('pool-tds').value = \"1000\";\n    document.getElementById('pool-borate').value = \"0\";\n\n    \/\/ Reset temperature to Fahrenheit default\n    currentTempUnit = 'C';\n    setTempUnit('F');\n    document.getElementById('pool-temp').value = \"80\";\n\n    \/\/ Hide dashboard\n    document.getElementById('results-dashboard').style.display = 'none';\n}\n\nfunction calculateLSI() {\n    const ph = parseFloat(document.getElementById('pool-ph').value) || 0;\n    const alk = parseFloat(document.getElementById('pool-alk').value) || 0;\n    const cal = parseFloat(document.getElementById('pool-cal').value) || 0;\n    const cya = parseFloat(document.getElementById('pool-cya').value) || 0;\n    const tds = parseFloat(document.getElementById('pool-tds').value) || 0;\n    const borate = parseFloat(document.getElementById('pool-borate').value) || 0;\n    let tempF = parseFloat(document.getElementById('pool-temp').value) || 0;\n\n    if (currentTempUnit === 'C') {\n        tempF = (tempF * 9 \/ 5) + 32;\n    }\n\n    \/\/ Temperature factor (TF)\n    let tf = 0;\n    if (tempF < 32) tf = 0.0;\n    else if (tempF <= 50) tf = 0.1;\n    else if (tempF <= 65) tf = 0.3;\n    else if (tempF <= 76) tf = 0.5;\n    else if (tempF <= 84) tf = 0.6;\n    else if (tempF <= 94) tf = 0.7;\n    else if (tempF <= 105) tf = 0.8;\n    else tf = 0.9;\n\n    \/\/ Calcium hardness factor (CF)\n    let cf = Math.log10(cal || 1) - 0.7;\n\n    \/\/ Corrected alkalinity (after CYA & borate)\n    let cyaCorrection = cya * 0.33;\n    let borateCorrection = borate * 0.11;\n    let correctedAlk = alk - cyaCorrection - borateCorrection;\n    if (correctedAlk < 1) correctedAlk = 1;\n\n    \/\/ Alkalinity factor (AF)\n    let af = Math.log10(correctedAlk);\n\n    \/\/ TDS factor (TDSF)\n    let tdsf = (tds > 1000) ? 12.2 : 12.1;\n\n    \/\/ LSI formula\n    let lsi = ph + tf + cf + af - tdsf;\n    lsi = Math.round(lsi * 100) \/ 100;\n\n    \/\/ Update dashboard\n    const lsiValEl = document.getElementById('lsi-value');\n    const lsiStatusEl = document.getElementById('lsi-status');\n    const lsiDescEl = document.getElementById('lsi-description');\n\n    lsiValEl.innerText = (lsi >= 0 ? \"+\" : \"\") + lsi.toFixed(2);\n    lsiStatusEl.className = \"score-status\";\n\n    if (lsi >= -0.30 && lsi <= 0.30) {\n        lsiStatusEl.innerText = \"\u00c9quilibr\u00e9e\";\n        lsiStatusEl.classList.add(\"status-balanced\");\n        lsiDescEl.innerText = \"Excellent\u00a0! Votre eau est chimiquement \u00e9quilibr\u00e9e. Cet \u00e9tat id\u00e9al prot\u00e8ge les \u00e9quipements de la piscine contre la corrosion et emp\u00eache les d\u00e9p\u00f4ts de tartre sur les surfaces.\";\n    } else if (lsi < -0.30) {\n        lsiStatusEl.innerText = \"Corrosive\";\n        lsiStatusEl.classList.add(\"status-corrosive\");\n        lsiDescEl.innerText = \"Attention\u00a0: l'eau est sous-satur\u00e9e et corrosive. Elle dissout agressivement le calcium du pl\u00e2tre, des joints de carrelage et des composants m\u00e9talliques. Envisagez d'augmenter le pH, l'alcalinit\u00e9 ou la duret\u00e9 calcique.\";\n    } else {\n        lsiStatusEl.innerText = \"Entartrante\";\n        lsiStatusEl.classList.add(\"status-scaling\");\n        lsiDescEl.innerText = \"Attention\u00a0: l'eau est sursatur\u00e9e et entartrante. L'exc\u00e8s de min\u00e9raux calcaires peut se d\u00e9poser sur les lignes d'eau, colmater le m\u00e9dia filtrant et rendre l'eau trouble. Il est recommand\u00e9 de baisser le pH ou l'alcalinit\u00e9.\";\n    }\n\n    document.getElementById('results-dashboard').style.display = 'block';\n}\n<\/script>\n\n\n\n<div class=\"lsi-chart-container\">\n    <h3 class=\"lsi-chart-title\">Tableau de r\u00e9f\u00e9rence de l'indice LSI<\/h3>\n    <p class=\"lsi-chart-subtitle\">Utilisez ce guide visuel pour comprendre comment l'indice de saturation de votre piscine influe sur l'\u00e9quilibre de l'eau et la long\u00e9vit\u00e9 du bassin.<\/p>\n\n    <!-- Color bar -->\n    <div class=\"lsi-bar-wrapper\">\n        <div class=\"lsi-bar\">\n            <div class=\"lsi-zone corrosive-dark\"><\/div>\n            <div class=\"lsi-zone corrosive-light\"><\/div>\n            <div class=\"lsi-zone balanced-zone\">\n                <span class=\"balanced-label\">ID\u00c9AL<\/span>\n            <\/div>\n            <div class=\"lsi-zone scaling-light\"><\/div>\n            <div class=\"lsi-zone scaling-dark\"><\/div>\n        <\/div>\n        <div class=\"lsi-scale-labels\">\n            <span>-0.5 et moins<\/span>\n            <span>-0.3<\/span>\n            <span>0.0<\/span>\n            <span>+0.3<\/span>\n            <span>+0.5 et plus<\/span>\n        <\/div>\n    <\/div>\n\n    <!-- Status detail grid -->\n    <div class=\"lsi-status-grid\">\n        <!-- Corrosive -->\n        <div class=\"status-card status-corrosive-card\">\n            <div class=\"status-card-header\">\n                <span class=\"status-dot dot-corrosive\"><\/span>\n                <strong>-0.31 \u00e0 -0.50+ (zone corrosive)<\/strong>\n            <\/div>\n            <p>L'eau est sous-satur\u00e9e. Elle agit comme une \u00e9ponge liquide qui cherche \u00e0 dissoudre des min\u00e9raux pour s'\u00e9quilibrer. Cela provoque une attaque permanente du pl\u00e2tre, dissout les joints et corrode rapidement les \u00e9quipements m\u00e9talliques comme les r\u00e9chauffeurs ou les \u00e9chelles.<\/p>\n        <\/div>\n\n        <!-- Balanced -->\n        <div class=\"status-card status-balanced-card\">\n            <div class=\"status-card-header\">\n                <span class=\"status-dot dot-balanced\"><\/span>\n                <strong>-0.30 \u00e0 +0.30 (\u00e9quilibre parfait)<\/strong>\n            <\/div>\n            <p>L'eau est parfaitement satur\u00e9e et stable. Elle ne dissout pas les surfaces et ne d\u00e9pose pas de tartre. Maintenir votre piscine dans cette zone id\u00e9ale maximise la dur\u00e9e de vie de la plomberie, des mat\u00e9riaux de surface et des \u00e9quipements.<\/p>\n        <\/div>\n\n        <!-- Scaling -->\n        <div class=\"status-card status-scaling-card\">\n            <div class=\"status-card-header\">\n                <span class=\"status-dot dot-scaling\"><\/span>\n                <strong>+0.31 \u00e0 +0.50+ (zone entartrante)<\/strong>\n            <\/div>\n            <p>L'eau est sursatur\u00e9e en min\u00e9raux calcaires. Elle expulse activement le calcium de la solution, ce qui entra\u00eene des d\u00e9p\u00f4ts de tartre blanc rugueux le long de la ligne d'eau, une eau trouble et la calcification\/le colmatage de l'\u00e9l\u00e9ment filtrant de votre piscine.<\/p>\n        <\/div>\n    <\/div>\n<\/div>\n\n<style>\n\/* Standalone chart container *\/\n.lsi-chart-container {\n    background: #ffffff;\n    border: 1px solid #e2e8f0;\n    border-radius: 12px;\n    padding: 25px;\n    max-width: 650px;\n    margin: 20px auto;\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n    box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);\n    box-sizing: border-box;\n}\n.lsi-chart-container * {\n    box-sizing: border-box;\n}\n.lsi-chart-title {\n    color: #1a202c;\n    font-size: 20px;\n    font-weight: 700;\n    margin-top: 0;\n    margin-bottom: 8px;\n}\n.lsi-chart-subtitle {\n    color: #64748b;\n    font-size: 14px;\n    line-height: 1.4;\n    margin-top: 0;\n    margin-bottom: 25px;\n}\n\n\/* Gradient bar layout *\/\n.lsi-bar-wrapper {\n    margin-bottom: 30px;\n}\n.lsi-bar {\n    display: flex;\n    height: 35px;\n    border-radius: 6px;\n    overflow: hidden;\n    box-shadow: inset 0 2px 4px rgba(0,0,0,0.06);\n}\n.lsi-zone {\n    height: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n}\n\/* Bar segment weights *\/\n.corrosive-dark  { background-color: #ef4444; flex: 2; } \/* severe corrosion - red *\/\n.corrosive-light { background-color: #fca5a5; flex: 1; } \/* mild corrosion - light red *\/\n.balanced-zone   { background-color: #1ecad3; flex: 3; } \/* perfect balance - brand color *\/\n.scaling-light   { background-color: #fde047; flex: 1; } \/* mild scaling - light yellow *\/\n.scaling-dark    { background-color: #eab308; flex: 2; } \/* severe scaling - yellow\/orange *\/\n\n.balanced-label {\n    color: #ffffff;\n    font-size: 11px;\n    font-weight: 800;\n    letter-spacing: 1px;\n}\n\n\/* Scale labels *\/\n.lsi-scale-labels {\n    display: flex;\n    justify-content: space-between;\n    padding: 6px 4px 0 4px;\n    font-size: 12px;\n    color: #64748b;\n    font-weight: 600;\n}\n\n\/* Status cards *\/\n.lsi-status-grid {\n    display: flex;\n    flex-direction: column;\n    gap: 12px;\n}\n.status-card {\n    border-radius: 8px;\n    padding: 15px;\n    border: 1px solid #e2e8f0;\n    background-color: #f8fafc;\n}\n.status-card-header {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    font-size: 14px;\n    color: #1a202c;\n    margin-bottom: 6px;\n}\n.status-card p {\n    margin: 0;\n    font-size: 13px;\n    line-height: 1.5;\n    color: #475569;\n}\n\n\/* Status dots *\/\n.status-dot {\n    width: 10px;\n    height: 10px;\n    border-radius: 50%;\n    display: inline-block;\n}\n.dot-corrosive { background-color: #ef4444; }\n.dot-balanced  { background-color: #1ecad3; }\n.dot-scaling   { background-color: #eab308; }\n\n\/* Per-card background tweaks *\/\n.status-corrosive-card { border-left: 4px solid #ef4444; }\n.status-balanced-card  { border-left: 4px solid #1ecad3; background-color: #fcfdfd; }\n.status-scaling-card   { border-left: 4px solid #eab308; }\n<\/style>\n\n\n<!-- aiper-tool-links -->\n<div class=\"aiper-tool-links\">\n  <div class=\"aiper-tl-section\">\n    <div class=\"aiper-tl-heading\">Plus d'outils<\/div>\n    <div class=\"aiper-tl-tags\">\n      <a href=\"https:\/\/aiper.com\/blogs\/fr\/calculateur-temps-remplissage-piscine\/\" class=\"aiper-tl-tag\">Calculateur de temps de remplissage de piscine<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/fr\/calculateur-taux-renouvellement-piscine\/\" class=\"aiper-tl-tag\">Calculateur de taux de renouvellement de piscine<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/fr\/calculateur-borax-piscine\/\" class=\"aiper-tl-tag\">Calculateur de borax pour piscine<\/a>\n    <\/div>\n  <\/div>\n  <div class=\"aiper-tl-section\">\n    <div class=\"aiper-tl-heading\">Articles connexes<\/div>\n    <div class=\"aiper-tl-tags\">\n      <a href=\"https:\/\/aiper.com\/blogs\/fr\/reduire-alcalinite-piscine\/\" class=\"aiper-tl-tag\">Comment r\u00e9duire l'alcalinit\u00e9 d'une piscine<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/fr\/robot-piscine-bloque-drain-principal\/\" class=\"aiper-tl-tag\">Pourquoi le robot de piscine reste bloqu\u00e9 sur le drain principal ?<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/fr\/hivernage-piscine-enterree\/\" class=\"aiper-tl-tag\">Hivernage piscine enterr\u00e9e : guide \u00e9tape par \u00e9tape<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/fr\/laisser-robot-nettoyeur-piscine-dans-eau\/\" class=\"aiper-tl-tag\">Peut-on laisser un robot nettoyeur de piscine dans l'eau ?<\/a>\n    <\/div>\n  <\/div>\n<\/div>\n\n<style>\n.aiper-tool-links{margin:2.5rem 0 1.5rem;padding:1.5rem 1.75rem;background:linear-gradient(135deg,rgba(148,134,247,.04),rgba(30,202,211,.04));border-radius:12px;border:1px solid rgba(148,134,247,.10)}\n.aiper-tl-section{margin-bottom:1.25rem}\n.aiper-tl-section:last-child{margin-bottom:0}\n.aiper-tl-heading{font-size:.75rem;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:#8899aa;margin:0 0 .65rem}\n.aiper-tl-tags{display:flex;flex-wrap:wrap;gap:.5rem}\n.aiper-tl-tag{display:inline-block;padding:.4rem .95rem;font-size:.82rem;font-weight:500;line-height:1.35;color:#9486f7;background:rgba(148,134,247,.055);border:1px solid rgba(30,202,211,.25);border-radius:22px;text-decoration:none;transition:all .18s}\n.aiper-tl-tag:hover{background:#1ecad3;color:#fff;border-color:#1ecad3;box-shadow:0 2px 10px rgba(30,202,211,.22)}\n<\/style>","protected":false},"excerpt":{"rendered":"<p>\u00c9tape 1 Saisissez les param\u00e8tres de l&#8217;eau Niveau de pH Id\u00e9al&nbsp;: 7.2 &#8211; 7.8 Alcalinit\u00e9 totale (ppm) Id\u00e9al&nbsp;: 80 &#8211; 120 ppm Duret\u00e9 calcique (ppm) Id\u00e9al&nbsp;: 200 &#8211; 400 ppm Acide cyanurique (ppm) Id\u00e9al&nbsp;: 30 &#8211; 50 ppm Sel \/ TDS (ppm) Sans sel&nbsp;: &lt; 1500 | Sel&nbsp;: ~3200 Borates (ppm) Optionnel&nbsp;: 0 &#8211; 50 [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"aiper_reading_time":2,"aiper_last_reviewed":"","aiper_reviewer":0,"aiper_related_ids":[],"aiper_layout":"","footnotes":""},"class_list":["post-2156","page","type-page","status-publish","hentry"],"lang":"fr","translations":{"fr":2156,"de":2155,"en":1841,"es":2157},"_links":{"self":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/2156","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/comments?post=2156"}],"version-history":[{"count":3,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/2156\/revisions"}],"predecessor-version":[{"id":4356,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/2156\/revisions\/4356"}],"wp:attachment":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/media?parent=2156"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}