{"id":1841,"date":"2026-05-22T01:54:42","date_gmt":"2026-05-22T01:54:42","guid":{"rendered":"https:\/\/aiper.com\/blogs\/?page_id=1841"},"modified":"2026-06-24T03:45:36","modified_gmt":"2026-06-24T03:45:36","slug":"pool-saturation-index-calculator","status":"publish","type":"page","link":"https:\/\/aiper.com\/blogs\/pool-saturation-index-calculator\/","title":{"rendered":"Pool Saturation Index Calculator"},"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\">Step 1<\/div>\n            <h3 class=\"step-title\">Enter Water Parameters<\/h3>\n            \n            <div class=\"pool-calc-grid\">\n                <div class=\"input-group\">\n                    <label for=\"pool-ph\">pH Level<\/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\">Ideal: 7.2 &#8211; 7.8<\/span>\n                <\/div>\n                \n                <div class=\"input-group\">\n                    <label for=\"pool-alk\">Total Alkalinity (ppm)<\/label>\n                    <input type=\"number\" id=\"pool-alk\" step=\"1\" value=\"100\" min=\"0\" max=\"500\">\n                    <span class=\"input-hint\">Ideal: 80 &#8211; 120 ppm<\/span>\n                <\/div>\n                \n                <div class=\"input-group\">\n                    <label for=\"pool-cal\">Calcium Hardness (ppm)<\/label>\n                    <input type=\"number\" id=\"pool-cal\" step=\"1\" value=\"300\" min=\"0\" max=\"1000\">\n                    <span class=\"input-hint\">Ideal: 200 &#8211; 400 ppm<\/span>\n                <\/div>\n                \n                <div class=\"input-group\">\n                    <label for=\"pool-cya\">Cyanuric Acid (ppm)<\/label>\n                    <input type=\"number\" id=\"pool-cya\" step=\"1\" value=\"40\" min=\"0\" max=\"200\">\n                    <span class=\"input-hint\">Ideal: 30 &#8211; 50 ppm<\/span>\n                <\/div>\n\n                <div class=\"input-group\">\n                    <label for=\"pool-tds\">Salt \/ TDS (ppm)<\/label>\n                    <input type=\"number\" id=\"pool-tds\" step=\"1\" value=\"1000\" min=\"0\" max=\"6000\">\n                    <span class=\"input-hint\">Non-Salt: &lt; 1500 | Salt: ~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\">Optional: 0 &#8211; 50 ppm<\/span>\n                <\/div>\n                \n                <div class=\"input-group full-width\">\n                    <label>Water Temperature<\/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\">Step 2<\/div>\n            <h3 class=\"step-title\">Run Analytics<\/h3>\n            <div class=\"btn-group\">\n                <button type=\"button\" class=\"calculate-btn\" onclick=\"calculateLSI()\">Calculate it<\/button>\n                <button type=\"button\" class=\"reset-btn\" onclick=\"resetCalculator()\">Reset<\/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>Calculation Results<\/h4>\n        <\/div>\n        <div class=\"dashboard-body\">\n            <div class=\"result-score-block\">\n                <div class=\"score-label\">Your LSI Score<\/div>\n                <div id=\"lsi-value\" class=\"score-number\">0.00<\/div>\n                <div id=\"lsi-status\" class=\"score-status\">Balanced<\/div>\n            <\/div>\n            <div class=\"result-meta-block\">\n                <div class=\"target-range-box\">\n                    <strong>Target Range:<\/strong> <span class=\"highlight-text\">-0.30 to +0.30<\/span>\n                <\/div>\n                <p id=\"lsi-description\" class=\"explanation-text\">\n                    Your water parameters are being analyzed&#8230;\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\/* \u4fee\u590d\u906e\u6321\uff1a\u6539\u4e3a\u5757\u7ea7\u6807\u51c6\u6d41\u5e03\u5c40\uff0c\u81ea\u7136\u6491\u5f00\u7a7a\u95f4 *\/\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\/* \u6309\u94ae\u7ec4\u5f39\u6027\u76d2\u5e03\u5c40 *\/\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 \u6309\u94ae\u6837\u5f0f *\/\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 \u4eea\u8868\u76d8\u6837\u5f0f *\/\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    \/\/ \u6062\u590d\u9ed8\u8ba4\u521d\u503c\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    \/\/ \u91cd\u7f6e\u6e29\u5ea6\u81f3\u534e\u6c0f\u5ea6\u9ed8\u8ba4\n    currentTempUnit = 'C'; \n    setTempUnit('F'); \n    document.getElementById('pool-temp').value = \"80\";\n\n    \/\/ \u9690\u85cf\u4eea\u8868\u76d8\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    \/\/ \u8ba1\u7b97\u6e29\u5ea6\u56e0\u5b50 (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    \/\/ \u9499\u786c\u5ea6\u56e0\u5b50 (CF)\n    let cf = Math.log10(cal || 1) - 0.7;\n    \n    \/\/ \u4fee\u6b63\u6c30\u5c3f\u9178\u4e0e\u787c\u9178\u76d0\u540e\u7684\u5b9e\u9645\u603b\u78b1\u5ea6\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    \/\/ \u78b1\u5ea6\u56e0\u5b50 (AF)\n    let af = Math.log10(correctedAlk);\n\n    \/\/ \u6eb6\u89e3\u56fa\u4f53\u603b\u91cf\u56e0\u5b50 (TDSF)\n    let tdsf = (tds > 1000) ? 12.2 : 12.1;\n\n    \/\/ LSI \u516c\u5f0f\u8ba1\u7b97\n    let lsi = ph + tf + cf + af - tdsf;\n    lsi = Math.round(lsi * 100) \/ 100;\n\n    \/\/ \u66f4\u65b0\u4eea\u8868\u76d8\u6e32\u67d3\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 = \"Balanced\";\n        lsiStatusEl.classList.add(\"status-balanced\");\n        lsiDescEl.innerText = \"Excellent! Your water is chemically balanced. This ideal state protects pool equipment from corrosion and prevents scaling layout lines on surfaces.\";\n    } else if (lsi < -0.30) {\n        lsiStatusEl.innerText = \"Corrosive\";\n        lsiStatusEl.classList.add(\"status-corrosive\");\n        lsiDescEl.innerText = \"Warning: The water is undersaturated and corrosive. It will aggressively dissolve calcium from plaster, tile grout, and metal components. Consider raising pH, Alkalinity, or Calcium Hardness.\";\n    } else {\n        lsiStatusEl.innerText = \"Scaling\";\n        lsiStatusEl.classList.add(\"status-scaling\");\n        lsiDescEl.innerText = \"Warning: The water is oversaturated and scale-forming. Excess calcium minerals may deposit on water lines, clog filtration media, and cause cloudy water conditions. Lowering pH or Alkalinity is recommended.\";\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\">LSI Range Reference Chart<\/h3>\n    <p class=\"lsi-chart-subtitle\">Use this visual guide to understand how your pool's Saturation Index score impacts water balance and pool longevity.<\/p>\n    \n    <!-- \u89c6\u89c9\u8272\u6761\u5e26 -->\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\">IDEAL<\/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 & Less<\/span>\n            <span>-0.3<\/span>\n            <span>0.0<\/span>\n            <span>+0.3<\/span>\n            <span>+0.5 & More<\/span>\n        <\/div>\n    <\/div>\n\n    <!-- \u8be6\u7ec6\u72b6\u6001\u8bf4\u660e\u7f51\u683c -->\n    <div class=\"lsi-status-grid\">\n        <!-- \u8150\u8680\u72b6\u6001 -->\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 to -0.50+ (Corrosive Zone)<\/strong>\n            <\/div>\n            <p>Water is undersaturated. It acts like a liquid sponge trying to dissolve minerals to balance itself. This leads to permanent etching of pool plaster, dissolving grout, and rapid corrosion of metal equipment heaters or ladders.<\/p>\n        <\/div>\n\n        <!-- \u5e73\u8861\u72b6\u6001 -->\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 to +0.30 (Perfect Balance)<\/strong>\n            <\/div>\n            <p>Water is perfectly saturated and stable. It will neither dissolve surfaces nor deposit scale. Keeping your pool in this sweet spot maximizes the lifespan of your plumbing, surface materials, and equipment.<\/p>\n        <\/div>\n\n        <!-- \u7ed3\u57a2\u72b6\u6001 -->\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 to +0.50+ (Scale-Forming Zone)<\/strong>\n            <\/div>\n            <p>Water is oversaturated with calcium minerals. It will actively reject calcium out of solution, leading to rough white scale deposits along the waterline, cloudy water conditions, and calcification\/clogging of your pool filter element.<\/p>\n        <\/div>\n    <\/div>\n<\/div>\n\n<style>\n\/* \u72ec\u7acb\u56fe\u8868\u5bb9\u5668\u6837\u5f0f *\/\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\/* \u6e10\u53d8\u8272\u5e26\u5e03\u5c40 *\/\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\/* \u8272\u5e26\u6743\u91cd\u5206\u914d *\/\n.corrosive-dark  { background-color: #ef4444; flex: 2; } \/* \u6781\u5ea6\u8150\u8680 - \u7ea2 *\/\n.corrosive-light { background-color: #fca5a5; flex: 1; } \/* \u8f7b\u5fae\u8150\u8680 - \u6d45\u7ea2 *\/\n.balanced-zone   { background-color: #1ecad3; flex: 3; } \/* \u5b8c\u7f8e\u5e73\u8861 - \u4e3b\u8272\u8c03 *\/\n.scaling-light   { background-color: #fde047; flex: 1; } \/* \u8f7b\u5fae\u7ed3\u57a2 - \u6d45\u9ec4 *\/\n.scaling-dark    { background-color: #eab308; flex: 2; } \/* \u4e25\u91cd\u7ed3\u57a2 - \u9ec4\/\u6a59 *\/\n\n.balanced-label {\n    color: #ffffff;\n    font-size: 11px;\n    font-weight: 800;\n    letter-spacing: 1px;\n}\n\n\/* \u523b\u5ea6\u5c3a\u6570\u5b57\u6392\u7248 *\/\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\/* \u8be6\u60c5\u72b6\u6001\u8bf4\u660e\u5361\u7247 *\/\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\/* \u5706\u70b9\u6807\u5fd7 *\/\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\/* \u9488\u5bf9\u7279\u5b9a\u5361\u7247\u7684\u5fae\u8c03\u80cc\u666f\u8272\uff0c\u589e\u52a0\u53ef\u8bfb\u6027 *\/\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\">More Tools<\/div>\n    <div class=\"aiper-tl-tags\">\n      <a href=\"https:\/\/aiper.com\/blogs\/pool-fill-time-calculator\/\" class=\"aiper-tl-tag\">Pool Fill Time Calculator<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/pool-turnover-rate-calculator\/\" class=\"aiper-tl-tag\">Pool Turnover Rate Calculator<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/pool-borax-calculator\/\" class=\"aiper-tl-tag\">Pool Borax Calculator<\/a>\n    <\/div>\n  <\/div>\n  <div class=\"aiper-tl-section\">\n    <div class=\"aiper-tl-heading\">Related Articles<\/div>\n    <div class=\"aiper-tl-tags\">\n      <a href=\"https:\/\/aiper.com\/blogs\/how-to-lower-alkalinity-in-pool\/\" class=\"aiper-tl-tag\">How to Lower Alkalinity in a Pool (and When You Actually Need To)<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/pool-robot-gets-stuck-on-main-drain\/\" class=\"aiper-tl-tag\">Why Does Your Pool Robot Get Stuck on the Main Drain?<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/how-to-winterize-inground-pool\/\" class=\"aiper-tl-tag\">How to Winterize an Inground Pool: Step-by-Step<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/how-to-get-rid-of-algae-in-pool\/\" class=\"aiper-tl-tag\">The Complete Guide to Pool Algae: How to Identify, Treat, and Prevent Every Type<\/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>Step 1 Enter Water Parameters pH Level Ideal: 7.2 &#8211; 7.8 Total Alkalinity (ppm) Ideal: 80 &#8211; 120 ppm Calcium Hardness (ppm) Ideal: 200 &#8211; 400 ppm Cyanuric Acid (ppm) Ideal: 30 &#8211; 50 ppm Salt \/ TDS (ppm) Non-Salt: &lt; 1500 | Salt: ~3200 Borates (ppm) Optional: 0 &#8211; 50 ppm Water Temperature \u00b0F&#8230;<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-1841","page","type-page","status-publish","hentry"],"lang":"en","translations":{"en":1841,"de":2155,"fr":2156,"es":2157},"_links":{"self":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/1841","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=1841"}],"version-history":[{"count":5,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/1841\/revisions"}],"predecessor-version":[{"id":4282,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/1841\/revisions\/4282"}],"wp:attachment":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/media?parent=1841"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}