{"id":1665,"date":"2026-05-18T08:04:14","date_gmt":"2026-05-18T08:04:14","guid":{"rendered":"https:\/\/aiper.com\/blogs\/?page_id=1665"},"modified":"2026-11-04T09:49:00","modified_gmt":"2026-11-04T09:49:00","slug":"calculadora-sal-piscinas","status":"publish","type":"page","link":"https:\/\/aiper.com\/blogs\/es\/calculadora-sal-piscinas\/","title":{"rendered":"Calculadora de sal para piscinas"},"content":{"rendered":"\n<style>#pool-salt-calc-wrapper *, #pool-salt-calc-wrapper *::before, #pool-salt-calc-wrapper *::after { box-sizing: border-box; }\n#pool-salt-calc-wrapper {\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, sans-serif;\n    max-width: 680px; margin: 20px auto; padding: 0; line-height: 1.5;\n    --psc-teal: #1ecad3; --psc-teal-dark: #17a8b0; --psc-teal-light: #e8fafa;\n    --psc-bg: #ffffff; --psc-border: #e2e8f0; --psc-text: #2d3748; --psc-text-light: #5a6c7d;\n    --psc-shadow: 0 4px 24px rgba(0, 0, 0, 0.07); --psc-radius: 16px; --psc-radius-sm: 10px; --psc-radius-xs: 6px;\n}\n#pool-salt-calc-wrapper .psc-intro { max-width: 680px; margin: 0 auto 16px; padding: 0 24px; text-align: center; color: var(--psc-text-light); font-size: 15px; line-height: 1.5; }\n#pool-salt-calc-wrapper .psc-card { background: var(--psc-bg); border-radius: var(--psc-radius); box-shadow: var(--psc-shadow); padding: 28px 24px; margin-bottom: 20px; border: 1px solid var(--psc-border); }\n#pool-salt-calc-wrapper .psc-subtitle { font-size: 0.9rem; color: var(--psc-text-light); margin: 0 0 20px 0; }\n#pool-salt-calc-wrapper .psc-label { display: block; font-weight: 600; font-size: 0.9rem; color: var(--psc-text); margin-bottom: 5px; }\n#pool-salt-calc-wrapper .psc-input-row { display: flex; gap: 10px; align-items: stretch; margin-bottom: 18px; }\n#pool-salt-calc-wrapper .psc-input-field { flex: 1; padding: 12px 14px; border: 2px solid var(--psc-border); border-radius: var(--psc-radius-xs); font-size: 1rem; background: #f9fafb; outline: none; width: 100%; }\n#pool-salt-calc-wrapper .psc-input-field:focus { border-color: var(--psc-teal); background: #fff; }\n#pool-salt-calc-wrapper .psc-unit-toggle { display: flex; background: #f1f5f9; border-radius: var(--psc-radius-xs); overflow: hidden; border: 2px solid var(--psc-border); flex-wrap: wrap; }\n#pool-salt-calc-wrapper .psc-unit-btn { padding: 8px 14px; font-size: 0.85rem; font-weight: 600; cursor: pointer; border: none; background: transparent; color: var(--psc-text-light); }\n#pool-salt-calc-wrapper .psc-unit-btn:focus, #pool-salt-calc-wrapper .psc-unit-btn:active { outline: 2px solid var(--psc-teal); outline-offset: -2px; }\n#pool-salt-calc-wrapper .psc-unit-btn.psc-active { background: var(--psc-teal); color: #fff; }\n#pool-salt-calc-wrapper .psc-brand-row { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 18px; }\n#pool-salt-calc-wrapper .psc-brand-btn { padding: 6px 13px; font-size: 0.78rem; font-weight: 600; border-radius: 20px; border: 1.5px solid var(--psc-border); background: #fff; color: var(--psc-text-light); cursor: pointer; }\n#pool-salt-calc-wrapper .psc-brand-btn:focus, #pool-salt-calc-wrapper .psc-brand-btn:active { outline: 2px solid var(--psc-teal); outline-offset: 1px; }\n#pool-salt-calc-wrapper .psc-brand-btn.psc-active { border-color: var(--psc-teal); background: var(--psc-teal-light); color: var(--psc-teal-dark); }\n#pool-salt-calc-wrapper .psc-bagsize-row { display: flex; align-items: center; gap: 10px; margin-top: 16px; font-size: 0.85rem; color: var(--psc-text-light); flex-wrap: wrap; }\n#pool-salt-calc-wrapper .psc-result-area { display: none; margin-top: 25px; }\n#pool-salt-calc-wrapper .psc-result-area.psc-visible { display: block; animation: pscFade 0.4s ease; }\n@keyframes pscFade { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }\n#pool-salt-calc-wrapper .psc-result-card { background: linear-gradient(135deg, #f0fdfa 0%, #e6faf9 100%); border: 2px solid var(--psc-teal); border-radius: var(--psc-radius-sm); padding: 24px; text-align: center; }\n#pool-salt-calc-wrapper .psc-result-label { font-size: 0.85rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--psc-teal-dark); margin: 0 0 8px; }\n#pool-salt-calc-wrapper .psc-result-amount { font-size: 2.8rem; font-weight: 800; color: var(--psc-teal-dark); }\n#pool-salt-calc-wrapper .psc-result-amount .psc-unit-label { font-size: 1.2rem; }\n#pool-salt-calc-wrapper .psc-desc { margin: 5px 0 0; color: var(--psc-text-light); font-size: 0.92rem; }\n#pool-salt-calc-wrapper .psc-warn { display: none; margin-top: 12px; padding: 10px 14px; background: #fff7ed; border: 1px solid #fed7aa; border-radius: var(--psc-radius-xs); color: #9a3412; font-size: 0.82rem; text-align: left; }\n#pool-salt-calc-wrapper .psc-warn.psc-visible { display: block; }\n#pool-salt-calc-wrapper .psc-toggle-row { display: flex; justify-content: center; align-items: center; gap: 10px; margin-top: 20px; font-size: 0.85rem; color: var(--psc-text-light); }\n#pool-salt-calc-wrapper .psc-bag-info { display: inline-flex; align-items: center; gap: 8px; font-weight: 600; background: #fff; border-radius: 30px; padding: 10px 20px; margin-top: 15px; border: 1px solid var(--psc-border); }\n#pool-salt-calc-wrapper .psc-bag-count { color: var(--psc-teal-dark); font-size: 1.2rem; }\n#pool-salt-calc-wrapper .psc-bag-weight-label { margin-left: 5px; }\n#pool-salt-calc-wrapper .psc-algebra { margin: 14px 0 0; font-size: 0.78rem; color: #8899a6; }\n#pool-salt-calc-wrapper .psc-next { margin: 14px 0 0; font-size: 0.85rem; color: var(--psc-text-light); text-align: center; }\n#pool-salt-calc-wrapper .psc-next a { color: var(--psc-teal-dark); font-weight: 600; text-decoration: none; }\n#pool-salt-calc-wrapper .psc-next a:hover { text-decoration: underline; }\n#pool-salt-calc-wrapper .psc-info-section { display: none; margin-top: 20px; }\n#pool-salt-calc-wrapper .psc-info-section.psc-visible { display: block; }\n#pool-salt-calc-wrapper .psc-info-card { background: #fff; border: 1px solid var(--psc-border); border-radius: var(--psc-radius-sm); padding: 20px; font-size: 0.9rem; }\n#pool-salt-calc-wrapper .psc-info-title { font-weight: 700; font-size: 1rem; margin-bottom: 10px; }\n#pool-salt-calc-wrapper ol.psc-howto-list { margin: 0; padding: 0 0 0 20px; }\n#pool-salt-calc-wrapper ol.psc-howto-list li { margin-bottom: 6px; }\n#pool-salt-calc-wrapper .psc-error-msg { color: #dc2626; font-size: 0.85rem; font-weight: 600; text-align: center; margin-top: 10px; display: none; }\n#pool-salt-calc-wrapper .psc-error-msg.psc-visible { display: block; }\n@media (max-width: 500px) { #pool-salt-calc-wrapper .psc-input-row { flex-direction: column; } }\n\n#pool-salt-calc-wrapper .psc-calculate-btn { display: block; width: 100%; padding: 14px 30px; background: linear-gradient(135deg, #1ecad3, #9486f7); color: #fff; border: none; border-radius: 999px; font-size: 16px; font-weight: 600; letter-spacing: .5px; cursor: pointer; transition: all .2s; margin-top: 10px; }\n#pool-salt-calc-wrapper .psc-calculate-btn:hover { background: linear-gradient(135deg, #169fa6, #7b6be0); color: #fff; transform: translateY(-1px); box-shadow: 0 6px 16px rgba(148,134,247,.35); }\n#pool-salt-calc-wrapper .psc-calculate-btn:focus, #pool-salt-calc-wrapper .psc-calculate-btn:active { color: #fff; outline: none; box-shadow: 0 0 0 3px rgba(148,134,247,.45); }\n#pool-salt-calc-wrapper .psc-btn-row { display: flex; gap: 12px; max-width: 420px; margin: 26px auto 0; flex-wrap: wrap; }\n#pool-salt-calc-wrapper .psc-btn-row .psc-calculate-btn { flex: 1; min-width: 160px; width: auto; margin: 0; }\n#pool-salt-calc-wrapper .psc-reset-btn { display: block; flex: 1; min-width: 120px; padding: 14px 20px; background: #fff; color: #5a6c7d; border: 2px solid #d1e8ea; border-radius: 999px; font-size: 16px; font-weight: 600; letter-spacing: .5px; cursor: pointer; transition: all .2s; }\n#pool-salt-calc-wrapper .psc-reset-btn:hover { background: #f0f7f8; border-color: #1ecad3; color: #0f8c94; }\n#pool-salt-calc-wrapper .psc-reset-btn:focus, #pool-salt-calc-wrapper .psc-reset-btn:active { background: #fff; outline: none; border-color: #9486f7; color: #0f8c94; }\n@media (max-width: 600px) { #pool-salt-calc-wrapper .psc-btn-row { flex-direction: column; max-width: 280px; } #pool-salt-calc-wrapper .psc-reset-btn { padding: 12px 20px; font-size: 14px; } }\n<\/style>\n<!-- Pool Salt Calculator - WordPress Custom HTML Block -->\n<div id=\"pool-salt-calc-wrapper\">\n    <p class=\"psc-intro\">Descubre exactamente cu\u00e1nta sal a\u00f1adir para tu clorador salino \u2014 o, si tu nivel ya es demasiado alto, cu\u00e1nta agua vaciar y reponer.<\/p>\n    <div class=\"psc-card\">\n        <p class=\"psc-subtitle\">Indica el volumen de tu piscina y tu nivel de sal actual para obtener la cantidad exacta, en kilogramos o libras.<\/p>\n\n        <label class=\"psc-label\">Volumen de la piscina<\/label>\n        <div class=\"psc-input-row\">\n            <input type=\"number\" id=\"psc-pool-volume\" class=\"psc-input-field\" placeholder=\"ej. 15000\">\n            <div class=\"psc-unit-toggle\" id=\"psc-volume-unit-toggle\">\n                <button type=\"button\" class=\"psc-unit-btn\" data-unit=\"gallons\">Galones<\/button>\n                <button type=\"button\" class=\"psc-unit-btn psc-active\" data-unit=\"liters\">Litros<\/button>\n            <\/div>\n        <\/div>\n\n        <label class=\"psc-label\">Nivel de sal actual (ppm)<\/label>\n        <div class=\"psc-input-row\">\n            <input type=\"number\" id=\"psc-current-salt\" class=\"psc-input-field\" placeholder=\"ej. 1800\" value=\"0\">\n        <\/div>\n\n        <label class=\"psc-label\">Nivel de sal objetivo (ppm)<\/label>\n        <div class=\"psc-input-row\">\n            <input type=\"number\" id=\"psc-target-salt\" class=\"psc-input-field\" placeholder=\"ej. 3200\" value=\"3200\">\n        <\/div>\n        <div class=\"psc-brand-row\" id=\"psc-brand-row\">\n            <button type=\"button\" class=\"psc-brand-btn\" data-target=\"3000\">Intex<\/button>\n            <button type=\"button\" class=\"psc-brand-btn\" data-target=\"4000\">AstralPool<\/button>\n            <button type=\"button\" class=\"psc-brand-btn\" data-target=\"4000\">Idegis<\/button>\n            <button type=\"button\" class=\"psc-brand-btn\" data-target=\"4000\">Bayrol<\/button>\n        <\/div>\n\n        <div class=\"psc-btn-row\">\n\n            <button type=\"button\" id=\"psc-calculate-btn\" class=\"psc-calculate-btn\">Calcular<\/button>\n\n            <button type=\"button\" id=\"psc-reset-btn\" class=\"psc-reset-btn\">Restablecer<\/button>\n\n        <\/div>\n        <p id=\"psc-error-msg\" class=\"psc-error-msg\"><\/p>\n\n        <div id=\"psc-result-area\" class=\"psc-result-area\">\n            <div class=\"psc-result-card\">\n                <p class=\"psc-result-label\" id=\"psc-result-label\">Sal a a\u00f1adir<\/p>\n                <div class=\"psc-result-amount\">\n                    <span id=\"psc-salt-amount\">0<\/span>\n                    <span id=\"psc-salt-unit-display\" class=\"psc-unit-label\">kg<\/span>\n                <\/div>\n                <p id=\"psc-desc\" class=\"psc-desc\">Esta cantidad de sal es necesaria para alcanzar tu nivel objetivo.<\/p>\n                <div id=\"psc-warn\" class=\"psc-warn\"><\/div>\n                <div class=\"psc-bag-info\" id=\"psc-bag-info\">\n                    Aproximadamente <span id=\"psc-bag-count\" class=\"psc-bag-count\">0<\/span> sacos\n                    <small id=\"psc-bag-weight-label\" class=\"psc-bag-weight-label\">(25 kg por saco)<\/small>\n                <\/div>\n                <div class=\"psc-bagsize-row\" id=\"psc-bagsize-row\">\n                    <span>Tama\u00f1o del saco:<\/span>\n                    <div class=\"psc-unit-toggle\" id=\"psc-bagsize-toggle\"><\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"psc-toggle-row\" id=\"psc-toggle-row\">\n                <span>Mostrar resultado en:<\/span>\n                <div class=\"psc-unit-toggle\" id=\"psc-result-unit-toggle\">\n                    <button type=\"button\" class=\"psc-unit-btn\" data-unit=\"lbs\">Libras (lbs)<\/button>\n                    <button type=\"button\" class=\"psc-unit-btn psc-active\" data-unit=\"kg\">Kilogramos (kg)<\/button>\n                <\/div>\n            <\/div>\n            <p class=\"psc-algebra\" id=\"psc-algebra\"><\/p>\n            <p class=\"psc-next\">\u00bfNo conoces el volumen de tu piscina? Usa nuestra <a href=\"https:\/\/aiper.com\/blogs\/es\/calcular-volumen-piscina\/\">calculadora de volumen de piscina<\/a>.<\/p>\n        <\/div>\n    <\/div>\n\n    <div id=\"psc-info-section\" class=\"psc-info-section\">\n        <div class=\"psc-info-card\">\n            <div class=\"psc-info-title\">C\u00f3mo a\u00f1adir sal a tu piscina<\/div>\n            <ol class=\"psc-howto-list\">\n                <li>Apaga el clorador salino y reparte la cantidad de sal calculada de manera uniforme por el per\u00edmetro de la piscina (nunca directamente en el skimmer).<\/li>\n                <li>Cepilla la sal no disuelta del fondo y las paredes para que no se acumule en un punto y manche el revestimiento.<\/li>\n                <li>Mant\u00e9n la bomba en marcha sin parar durante al menos 24 horas para que la sal se disuelva y circule por completo.<\/li>\n                <li>Vuelve a medir el nivel de sal una vez disuelta, y enciende de nuevo el clorador.<\/li>\n            <\/ol>\n        <\/div>\n    <\/div>\n<\/div>\n\n<script>(function() {\n    var get = function(id) { return document.getElementById(id); };\n    var BRANDS = [];\n    var BAG_OPTS = { lbs: [40, 50, 25], kg: [25, 20] };\n    var state = { vUnit: 'liters', rUnit: 'kg', bagSize: 25, res: null };\n\n    var fmt = function(n) {\n        if (n >= 100) return Math.round(n).toLocaleString('es-ES');\n        return (Math.round(n * 10) \/ 10).toLocaleString('es-ES');\n    };\n\n    var clearBrandActive = function() {\n        Array.from(get('psc-brand-row').children).forEach(function(b) { b.classList.remove('psc-active'); });\n    };\n\n    get('psc-brand-row').addEventListener('click', function(e) {\n        if (!e.target.classList.contains('psc-brand-btn')) return;\n        clearBrandActive();\n        e.target.classList.add('psc-active');\n        get('psc-target-salt').value = e.target.dataset.target;\n    });\n    get('psc-target-salt').addEventListener('input', clearBrandActive);\n\n    var buildBagToggle = function() {\n        var wrap = get('psc-bagsize-toggle');\n        wrap.innerHTML = '';\n        BAG_OPTS[state.rUnit].forEach(function(sz) {\n            var b = document.createElement('button');\n            b.type = 'button';\n            b.className = 'psc-unit-btn' + (sz === state.bagSize ? ' psc-active' : '');\n            b.textContent = sz + ' ' + state.rUnit;\n            b.dataset.size = sz;\n            b.addEventListener('click', function() {\n                state.bagSize = sz;\n                buildBagToggle();\n                render();\n            });\n            wrap.appendChild(b);\n        });\n    };\n\n    var showError = function(msg) {\n        var err = get('psc-error-msg');\n        err.textContent = msg;\n        err.classList.add('psc-visible');\n        get('psc-result-area').classList.remove('psc-visible');\n        get('psc-info-section').classList.remove('psc-visible');\n    };\n\n    var calc = function() {\n        var err = get('psc-error-msg');\n        err.classList.remove('psc-visible');\n        err.textContent = '';\n\n        var v = parseFloat(get('psc-pool-volume').value);\n        var cRaw = get('psc-current-salt').value;\n        var c = cRaw === '' ? NaN : parseFloat(cRaw);\n        var t = parseFloat(get('psc-target-salt').value);\n\n        if (!v || v <= 0 || isNaN(v)) { showError('Introduce el volumen de tu piscina.'); return; }\n        if (isNaN(c) || c < 0) { showError('Introduce tu nivel de sal actual (0 si la piscina es nueva o se acaba de llenar).'); return; }\n        if (!t || t <= 0 || isNaN(t)) { showError('Introduce tu nivel de sal objetivo.'); return; }\n\n        var warn = get('psc-warn');\n        if (t > 4500) {\n            warn.textContent = \"Un objetivo superior a 4.500 ppm supera el m\u00e1ximo de la mayor\u00eda de cloradores salinos \u2014 consulta el manual de tu equipo antes de a\u00f1adir esta cantidad de sal.\";\n            warn.classList.add('psc-visible');\n        } else {\n            warn.textContent = '';\n            warn.classList.remove('psc-visible');\n        }\n\n        if (Math.abs(c - t) < 1) {\n            state.res = { mode: 'none' };\n        } else if (c > t) {\n            var drainAmt = v * (c - t) \/ c;\n            var pct = (c - t) \/ c * 100;\n            state.res = { mode: 'drain', drain: drainAmt, pct: pct, v: v, vUnit: state.vUnit };\n        } else {\n            var diff = t - c;\n            var lbs = (state.vUnit === 'gallons') ? (diff * v * 8.34 \/ 1000000) : (diff * v \/ 1000000 * 2.20462);\n            state.res = { mode: 'add', lbs: lbs, kg: lbs \/ 2.20462, diff: diff, v: v, c: c, t: t, vUnit: state.vUnit };\n        }\n\n        get('psc-result-area').classList.add('psc-visible');\n        get('psc-info-section').classList.add('psc-visible');\n        render();\n        get('psc-result-area').scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n    };\n\n    var render = function() {\n        if (!state.res) return;\n        var label = get('psc-result-label');\n        var amount = get('psc-salt-amount');\n        var unitDisplay = get('psc-salt-unit-display');\n        var desc = get('psc-desc');\n        var bagInfo = get('psc-bag-info');\n        var bagsizeRow = get('psc-bagsize-row');\n        var toggleRow = get('psc-toggle-row');\n        var algebra = get('psc-algebra');\n\n        if (state.res.mode === 'none') {\n            label.textContent = 'Ya en el nivel objetivo';\n            amount.textContent = '0';\n            unitDisplay.textContent = state.rUnit;\n            desc.textContent = 'Tu nivel de sal ya coincide con tu objetivo \u2014 no es necesario a\u00f1adir sal.';\n            bagInfo.style.display = 'none';\n            bagsizeRow.style.display = 'none';\n            toggleRow.style.display = 'none';\n            algebra.textContent = '';\n            return;\n        }\n\n        if (state.res.mode === 'drain') {\n            var unitLabel = state.res.vUnit === 'gallons' ? 'gal EE. UU.' : 'litros';\n            label.textContent = 'Agua a vaciar y reponer';\n            amount.textContent = fmt(state.res.drain);\n            unitDisplay.textContent = unitLabel;\n            desc.textContent = 'de agua de la piscina \u2014 vac\u00edala y rell\u00e9nala con agua dulce (aproximadamente ' + Math.round(state.res.pct) + '% de tu piscina) para bajar el nivel de sal hasta tu objetivo.';\n            bagInfo.style.display = 'none';\n            bagsizeRow.style.display = 'none';\n            toggleRow.style.display = 'none';\n            algebra.textContent = 'Tus cifras: ' + fmt(state.res.v) + ' ' + unitLabel + ' \u00d7 ' + Math.round(state.res.pct) + '% \u2248 ' + fmt(state.res.drain) + ' ' + unitLabel + ' a vaciar';\n            return;\n        }\n\n        bagInfo.style.display = '';\n        bagsizeRow.style.display = '';\n        toggleRow.style.display = '';\n        var isLbs = state.rUnit === 'lbs';\n        var val = isLbs ? state.res.lbs : state.res.kg;\n        label.textContent = 'Sal a a\u00f1adir';\n        amount.textContent = fmt(val);\n        unitDisplay.textContent = state.rUnit;\n        desc.textContent = 'Esta cantidad de sal es necesaria para alcanzar tu nivel objetivo.';\n        get('psc-bag-count').textContent = Math.ceil(val \/ state.bagSize);\n        get('psc-bag-weight-label').textContent = '(' + state.bagSize + ' ' + state.rUnit + ' por saco)';\n\n        var volUnitLabel = state.res.vUnit === 'gallons' ? 'gal' : 'L';\n        var base = 'Tus cifras: (' + fmt(state.res.t) + ' \u2212 ' + fmt(state.res.c) + ') ppm \u00d7 ' + fmt(state.res.v) + ' ' + volUnitLabel;\n        if (state.res.vUnit === 'gallons' && state.rUnit === 'lbs') {\n            algebra.textContent = base + ' \u00d7 8.34 \u00f7 1,000,000 \u2248 ' + fmt(state.res.lbs) + ' lbs';\n        } else if (state.res.vUnit === 'liters' && state.rUnit === 'kg') {\n            algebra.textContent = base + ' \u00f7 1,000,000 \u2248 ' + fmt(state.res.kg) + ' kg';\n        } else if (state.res.vUnit === 'liters' && state.rUnit === 'lbs') {\n            algebra.textContent = base + ' \u00f7 1,000,000 \u00d7 2.20462 \u2248 ' + fmt(state.res.lbs) + ' lbs';\n        } else {\n            algebra.textContent = base + ' \u00d7 8.34 \u00f7 1,000,000 \u00f7 2.20462 \u2248 ' + fmt(state.res.kg) + ' kg';\n        }\n    };\n\n    get('psc-volume-unit-toggle').onclick = function(e) {\n        if (!e.target.classList.contains('psc-unit-btn')) return;\n        state.vUnit = e.target.dataset.unit;\n        Array.from(get('psc-volume-unit-toggle').children).forEach(function(b) { b.classList.toggle('psc-active', b === e.target); });\n    };\n\n    get('psc-result-unit-toggle').onclick = function(e) {\n        if (!e.target.classList.contains('psc-unit-btn')) return;\n        state.rUnit = e.target.dataset.unit;\n        state.bagSize = BAG_OPTS[state.rUnit][0];\n        Array.from(get('psc-result-unit-toggle').children).forEach(function(b) { b.classList.toggle('psc-active', b === e.target); });\n        buildBagToggle();\n        render();\n    };\n\n\n    var INIT = {\n        vUnit: state.vUnit, rUnit: state.rUnit, bagSize: state.bagSize,\n        current: get('psc-current-salt').value, target: get('psc-target-salt').value\n    };\n    get('psc-reset-btn').onclick = function() {\n        get('psc-pool-volume').value = '';\n        get('psc-current-salt').value = INIT.current;\n        get('psc-target-salt').value = INIT.target;\n        clearBrandActive();\n        state.vUnit = INIT.vUnit; state.rUnit = INIT.rUnit; state.bagSize = INIT.bagSize; state.res = null;\n        Array.from(get('psc-volume-unit-toggle').children).forEach(function(b) { b.classList.toggle('psc-active', b.dataset.unit === INIT.vUnit); });\n        Array.from(get('psc-result-unit-toggle').children).forEach(function(b) { b.classList.toggle('psc-active', b.dataset.unit === INIT.rUnit); });\n        var err = get('psc-error-msg');\n        err.classList.remove('psc-visible');\n        err.textContent = '';\n        get('psc-result-area').classList.remove('psc-visible');\n        get('psc-info-section').classList.remove('psc-visible');\n        buildBagToggle();\n        get('psc-pool-volume').focus();\n    };\n    get('psc-calculate-btn').onclick = calc;\n    buildBagToggle();\n})();\n<\/script>\n\n\n\n<style>\n  #pool-salt-reference-table {\n    max-width: 860px;\n    margin: 2.5rem auto;\n    font-family: 'Inter', system-ui, sans-serif;\n    color: #2c3e50;\n    scroll-margin-top: 80px;\n  }\n  #pool-salt-reference-table h2 {\n    font-size: 1.5rem;\n    font-weight: 700;\n    color: #17a8b0;\n    margin: 0 0 8px;\n  }\n  #pool-salt-reference-table .psalt-subtitle {\n    font-size: 0.9rem;\n    color: #5a6c7d;\n    margin: 0 0 20px;\n    line-height: 1.5;\n  }\n  .psalt-table-wrap {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n    border: 1px solid #e0e5eb;\n    border-radius: 14px;\n    box-shadow: 0 4px 16px rgba(0,0,0,0.04);\n  }\n  .psalt-table {\n    width: 100%;\n    border-collapse: collapse;\n    font-size: 0.88rem;\n    min-width: 620px;\n  }\n  .psalt-table thead th {\n    background: linear-gradient(135deg, #1ecad3, #9486f7);\n    color: #fff;\n    font-weight: 600;\n    font-size: 0.78rem;\n    text-transform: uppercase;\n    letter-spacing: 0.05em;\n    padding: 12px 10px;\n    text-align: center;\n    white-space: nowrap;\n  }\n  .psalt-table thead th:first-child { border-radius: 13px 0 0 0; text-align: left; }\n  .psalt-table thead th:last-child { border-radius: 0 13px 0 0; }\n  .psalt-table tbody td {\n    padding: 10px 10px;\n    border-bottom: 1px solid #eef1f5;\n    vertical-align: middle;\n    text-align: center;\n  }\n  .psalt-table tbody tr:nth-child(even) { background: #fafcfd; }\n  .psalt-table tbody tr:hover { background: #e8fafb; }\n  .psalt-table .psalt-shape { font-weight: 600; color: #2c3e50; white-space: nowrap; text-align: left; }\n  .psalt-table .psalt-vol { font-weight: 600; color: #2c3e50; white-space: nowrap; text-align: left; }\n  .psalt-table .psalt-lbs { font-weight: 700; color: #0f8c94; white-space: nowrap; }\n  .psalt-table .psalt-bags { font-weight: 400; color: #8899a6; font-size: 0.78rem; }\n  .psalt-mt-28 { margin-top: 28px; }\n  .psalt-note-sm { margin-top: 16px; font-size: 0.8rem; }\n  @media (max-width: 500px) {\n    #pool-salt-reference-table { padding: 0 6px; }\n    .psalt-table { font-size: 0.78rem; min-width: 560px; }\n    .psalt-table thead th { padding: 8px 6px; font-size: 0.65rem; }\n    .psalt-table tbody td { padding: 7px 6px; }\n  }\n<\/style>\n<div id=\"pool-salt-reference-table\">\n  <h2>Tabla de sal \u2014 kilogramos de sal seg\u00fan el tama\u00f1o y el nivel actual<\/h2>\n  <p class=\"psalt-subtitle\">Todas las cantidades en <strong>kilogramos (kg)<\/strong> de sal para alcanzar 3.200\u00a0ppm \u2014 el objetivo recomendado por la mayor\u00eda de cloradores salinos. Usa la calculadora de arriba para libras u otro objetivo.<\/p>\n  <div class=\"psalt-table-wrap\">\n    <table class=\"psalt-table\">\n      <thead>\n        <tr>\n          <th>Volumen de la piscina<\/th>\n          <th>Desde 0 ppm<\/th>\n          <th>Desde 1.000 ppm<\/th>\n          <th>Desde 2.000 ppm<\/th>\n          <th>Desde 2.500 ppm<\/th>\n          <th>Desde 3.000 ppm<\/th>\n        <\/tr>\n      <\/thead>\n      <tbody>\n<tr><td class=\"psalt-vol\">10.000 L<\/td><td class=\"psalt-lbs\">30<\/td><td class=\"psalt-lbs\">20<\/td><td class=\"psalt-lbs\">12<\/td><td class=\"psalt-lbs\">8<\/td><td class=\"psalt-lbs\">2<\/td><\/tr>\n<tr><td class=\"psalt-vol\">15.000 L<\/td><td class=\"psalt-lbs\">50<\/td><td class=\"psalt-lbs\">35<\/td><td class=\"psalt-lbs\">18<\/td><td class=\"psalt-lbs\">10<\/td><td class=\"psalt-lbs\">4<\/td><\/tr>\n<tr><td class=\"psalt-vol\">17.000 L<\/td><td class=\"psalt-lbs\">55<\/td><td class=\"psalt-lbs\">35<\/td><td class=\"psalt-lbs\">20<\/td><td class=\"psalt-lbs\">12<\/td><td class=\"psalt-lbs\">4<\/td><\/tr>\n<tr><td class=\"psalt-vol\">20.000 L<\/td><td class=\"psalt-lbs\">65<\/td><td class=\"psalt-lbs\">45<\/td><td class=\"psalt-lbs\">25<\/td><td class=\"psalt-lbs\">14<\/td><td class=\"psalt-lbs\">4<\/td><\/tr>\n<tr><td class=\"psalt-vol\">25.000 L<\/td><td class=\"psalt-lbs\">80<\/td><td class=\"psalt-lbs\">55<\/td><td class=\"psalt-lbs\">30<\/td><td class=\"psalt-lbs\">18<\/td><td class=\"psalt-lbs\">4<\/td><\/tr>\n<tr><td class=\"psalt-vol\">30.000 L<\/td><td class=\"psalt-lbs\">95<\/td><td class=\"psalt-lbs\">65<\/td><td class=\"psalt-lbs\">35<\/td><td class=\"psalt-lbs\">20<\/td><td class=\"psalt-lbs\">6<\/td><\/tr>\n<tr><td class=\"psalt-vol\">40.000 L<\/td><td class=\"psalt-lbs\">130<\/td><td class=\"psalt-lbs\">90<\/td><td class=\"psalt-lbs\">50<\/td><td class=\"psalt-lbs\">30<\/td><td class=\"psalt-lbs\">8<\/td><\/tr>\n<tr><td class=\"psalt-vol\">50.000 L<\/td><td class=\"psalt-lbs\">160<\/td><td class=\"psalt-lbs\">110<\/td><td class=\"psalt-lbs\">60<\/td><td class=\"psalt-lbs\">35<\/td><td class=\"psalt-lbs\">10<\/td><\/tr>\n<tr><td class=\"psalt-vol\">60.000 L<\/td><td class=\"psalt-lbs\">190<\/td><td class=\"psalt-lbs\">130<\/td><td class=\"psalt-lbs\">70<\/td><td class=\"psalt-lbs\">40<\/td><td class=\"psalt-lbs\">12<\/td><\/tr>\n      <\/tbody>\n    <\/table>\n  <\/div>\n  <div class=\"psalt-table-wrap psalt-mt-28\">\n    <table class=\"psalt-table\">\n      <thead>\n        <tr>\n          <th>Forma de la piscina<\/th>\n          <th>Volumen t\u00edpico<\/th>\n          <th>Desde 0 ppm<\/th>\n          <th>Desde 2.000 ppm<\/th>\n        <\/tr>\n      <\/thead>\n      <tbody>\n<tr><td class=\"psalt-shape\">\u00d8 366 cm<\/td><td class=\"psalt-vol\">12.850 L<\/td><td class=\"psalt-lbs\">40 <span class=\"psalt-bags\">(2 sacos)<\/span><\/td><td class=\"psalt-lbs\">16 <span class=\"psalt-bags\">(1 saco)<\/span><\/td><\/tr>\n<tr><td class=\"psalt-shape\">\u00d8 457 cm<\/td><td class=\"psalt-vol\">20.000 L<\/td><td class=\"psalt-lbs\">65 <span class=\"psalt-bags\">(3 sacos)<\/span><\/td><td class=\"psalt-lbs\">25 <span class=\"psalt-bags\">(1 saco)<\/span><\/td><\/tr>\n<tr><td class=\"psalt-shape\">\u00d8 488 cm<\/td><td class=\"psalt-vol\">22.800 L<\/td><td class=\"psalt-lbs\">75 <span class=\"psalt-bags\">(3 sacos)<\/span><\/td><td class=\"psalt-lbs\">25 <span class=\"psalt-bags\">(1 saco)<\/span><\/td><\/tr>\n<tr><td class=\"psalt-shape\">\u00d8 549 cm<\/td><td class=\"psalt-vol\">28.900 L<\/td><td class=\"psalt-lbs\">90 <span class=\"psalt-bags\">(4 sacos)<\/span><\/td><td class=\"psalt-lbs\">35 <span class=\"psalt-bags\">(2 sacos)<\/span><\/td><\/tr>\n<tr><td class=\"psalt-shape\">\u00d8 610 cm<\/td><td class=\"psalt-vol\">35.650 L<\/td><td class=\"psalt-lbs\">110 <span class=\"psalt-bags\">(5 sacos)<\/span><\/td><td class=\"psalt-lbs\">45 <span class=\"psalt-bags\">(2 sacos)<\/span><\/td><\/tr>\n<tr><td class=\"psalt-shape\">3 x 6 m<\/td><td class=\"psalt-vol\">24.300 L<\/td><td class=\"psalt-lbs\">80 <span class=\"psalt-bags\">(4 sacos)<\/span><\/td><td class=\"psalt-lbs\">30 <span class=\"psalt-bags\">(2 sacos)<\/span><\/td><\/tr>\n<tr><td class=\"psalt-shape\">4 x 8 m<\/td><td class=\"psalt-vol\">43.200 L<\/td><td class=\"psalt-lbs\">140 <span class=\"psalt-bags\">(6 sacos)<\/span><\/td><td class=\"psalt-lbs\">50 <span class=\"psalt-bags\">(2 sacos)<\/span><\/td><\/tr>\n<tr><td class=\"psalt-shape\">5 x 10 m<\/td><td class=\"psalt-vol\">67.500 L<\/td><td class=\"psalt-lbs\">220 <span class=\"psalt-bags\">(9 sacos)<\/span><\/td><td class=\"psalt-lbs\">80 <span class=\"psalt-bags\">(4 sacos)<\/span><\/td><\/tr>\n      <\/tbody>\n    <\/table>\n  <\/div>\n  <p class=\"psalt-subtitle psalt-note-sm\">Los sacos se calculan en unidades de 25\u00a0kg. Piscinas redondas: 1,22\u00a0m de altura de agua; rectangulares: 1,35\u00a0m \u2014 para el volumen exacto de tu piscina, usa la calculadora de volumen enlazada arriba.<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Preguntas frecuentes sobre la calculadora de sal para piscinas<\/h2>\n\n\n<div class=\"schema-faq wp-block-yoast-faq-block\"><div class=\"schema-faq-section\" id=\"faq-salt-level\"><strong class=\"schema-faq-question\">\u00bfCu\u00e1l deber\u00eda ser el nivel de sal de mi piscina?<\/strong> <p class=\"schema-faq-answer\">La mayor\u00eda de los cloradores salinos funcionan mejor entre <strong>2.700 y 3.400 ppm<\/strong>, con 3.200\u00a0ppm como objetivo recomendado por la mayor\u00eda de fabricantes. El rango exacto depende de tu equipo \u2014 los sistemas Intex suelen funcionar en torno a 2.800\u20133.200\u00a0ppm, mientras que los cloradores AstralPool, Idegis o Bayrol suelen admitir valores m\u00e1s altos, alrededor de 4.000\u00a0ppm. Consulta siempre el manual de tu equipo: un nivel demasiado bajo reduce la producci\u00f3n de cloro, y uno demasiado alto puede da\u00f1ar la c\u00e9lula salina.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-salt-calc-how\"><strong class=\"schema-faq-question\">\u00bfC\u00f3mo calculo cu\u00e1nta sal necesita mi piscina?<\/strong> <p class=\"schema-faq-answer\">Resta tu nivel de sal actual del objetivo, multiplica la diferencia por el volumen de tu piscina en litros y divide el resultado entre 1.000.000: <strong>(objetivo &minus; actual) &times; litros &divide; 1.000.000 = kg de sal<\/strong>. La calculadora de arriba hace este c\u00e1lculo autom\u00e1ticamente y te muestra las cifras exactas que ha usado.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-salt-type\"><strong class=\"schema-faq-question\">\u00bfQu\u00e9 tipo de sal debo usar?<\/strong> <p class=\"schema-faq-answer\">Usa <strong>sal para piscinas pura al 99% o m\u00e1s, no yodada<\/strong> \u2014 se vende como &#8220;sal para piscinas&#8221; o &#8220;sal solar&#8221;. La sal de mesa y la sal para deshielo contienen aditivos e impurezas que pueden enturbiar el agua, manchar el revestimiento y recubrir la c\u00e9lula salina, reduciendo su producci\u00f3n de cloro. La sal para descalcificadores solo sirve si est\u00e1 garantizada al 99% de pureza y sin antiapelmazantes.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-salt-drop\"><strong class=\"schema-faq-question\">\u00bfPor qu\u00e9 baja constantemente mi nivel de sal?<\/strong> <p class=\"schema-faq-answer\">La sal no se evapora \u2014 solo lo hace el agua, as\u00ed que reponer agua por evaporaci\u00f3n no deber\u00eda cambiar mucho tu medici\u00f3n. La sal se pierde realmente por <strong>salpicaduras, el lavado a contracorriente del filtro, lluvias intensas o fugas<\/strong> \u2014 cualquier momento en que el agua sale f\u00edsicamente de la piscina y se repone con agua sin sal. Si tu nivel baja m\u00e1s r\u00e1pido de lo que esto explica, revisa el cuarto de m\u00e1quinas y el vaso de la piscina en busca de una fuga.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-salt-too-high\"><strong class=\"schema-faq-question\">\u00bfPuedo pasarme con la sal, y c\u00f3mo lo soluciono?<\/strong> <p class=\"schema-faq-answer\">S\u00ed \u2014 un nivel de sal muy por encima del m\u00e1ximo de tu equipo puede corroer piezas met\u00e1licas y dar al agua un sabor salado perceptible. Si introduces en la calculadora de arriba un nivel actual superior a tu objetivo, cambia autom\u00e1ticamente a un c\u00e1lculo de vaciado y reposici\u00f3n, indic\u00e1ndote aproximadamente qu\u00e9 porcentaje de agua de tu piscina reemplazar con agua dulce.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-salt-swim-wait\"><strong class=\"schema-faq-question\">\u00bfCu\u00e1nto tiempo despu\u00e9s de a\u00f1adir sal puedo ba\u00f1arme?<\/strong> <p class=\"schema-faq-answer\">Espera a que la sal se disuelva por completo \u2014 normalmente <strong>24 horas con la bomba en marcha sin parar<\/strong> \u2014 antes de ba\u00f1arte y de volver a medir el nivel de sal. Ba\u00f1arte antes no es peligroso, pero la sal sin disolver en el fondo puede enturbiar el agua y falsear la medici\u00f3n.<\/p> <\/div> <\/div>\n\n\n\n<p class=\"has-text-align-center aiper-last-updated has-small-font-size wp-block-paragraph\"><time datetime=\"2026-09-30\">\u00daltima actualizaci\u00f3n: 30 de septiembre de 2026<\/time><\/p>\n<style>.aiper-i18n-upgrade{box-sizing:border-box;width:100%;max-width:100%;overflow-wrap:anywhere;padding:24px;margin:24px 0;border:1px solid #1ecad3;border-radius:12px}.aiper-i18n-upgrade form{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:16px}.aiper-i18n-upgrade label{display:flex;flex-direction:column;gap:8px}.aiper-i18n-upgrade input{min-width:0;padding:12px;border:1px solid #a0b8c4;border-radius:8px}.aiper-i18n-upgrade button{padding:12px;background:#087e8b;color:white;border:0;border-radius:8px}.aiper-i18n-upgrade p{line-height:1.7}@media(max-width:600px){.aiper-i18n-upgrade form{grid-template-columns:minmax(0,1fr)}}<\/style><section class=\"aiper-i18n-upgrade\" id=\"aiper-upgrade-dilution\"><h2>Reposici\u00f3n de agua para reducir concentraciones<\/h2><p>Calcule una sustancia cada vez. Antes de vaciar cantidades importantes, revise nivel fre\u00e1tico, estructura y normas de vertido; mezcle y vuelva a medir entre etapas.<\/p><p>Introduzca decimales con punto (p. ej., 1.5). Galones estadounidenses salvo indicaci\u00f3n contraria. Importes en d\u00f3lares estadounidenses (USD).<\/p><form><label>Volumen de piscina (US gal)<input type=\"number\" name=\"v\" value=\"15000\" min=\"0\" step=\"any\" required><\/label><label>Lectura actual (ppm)<input type=\"number\" name=\"c\" value=\"100\" min=\"0\" step=\"any\" required><\/label><label>Lectura objetivo (ppm)<input type=\"number\" name=\"t\" value=\"50\" min=\"0\" step=\"any\" required><\/label><label>Lectura del agua de reposici\u00f3n (ppm)<input type=\"number\" name=\"f\" value=\"0\" min=\"0\" step=\"any\" required><\/label><label>Etapas iguales (1\u201310)<input type=\"number\" name=\"n\" value=\"1\" min=\"0\" step=\"any\" required><\/label><button type=\"submit\">Calcular<\/button><button type=\"reset\">Restablecer<\/button><\/form><p role=\"status\" aria-live=\"polite\"><\/p><\/section><script>(()=>{const root=document.currentScript.previousElementSibling,form=root.querySelector('form'),out=root.querySelector('[role=status]'),D={\"calc\": \"Calcular\", \"reset\": \"Restablecer\", \"format\": \"Introduzca decimales con punto (p. ej., 1.5). Galones estadounidenses salvo indicaci\u00f3n contraria.\", \"error\": \"Complete todos los campos con valores no negativos. El volumen, caudal y dimensiones deben ser positivos.\", \"unreachable\": \"No se puede alcanzar el objetivo con esta agua de reposici\u00f3n.\", \"day\": \"Por d\u00eda\", \"month\": \"Para 30 d\u00edas\", \"hours\": \"horas\", \"water\": \"Superficie del agua\", \"interior\": \"Superficie interior, fondo y paredes\", \"replace\": \"Reposici\u00f3n en una sola etapa\", \"stages\": \"Etapas iguales de reposici\u00f3n\", \"total\": \"Agua total utilizada\", \"flow\": \"Caudal medido de la manguera\", \"time\": \"Tiempo estimado de llenado\", \"target\": \"Objetivo temporal de cloro libre\", \"dose\": \"Cantidad de cloro l\u00edquido\", \"budget\": \"Presupuesto del proyecto con reserva\", \"invalid\": \"El objetivo no cabe en un d\u00eda de 24 horas.\", \"review\": \"Compruebe las mediciones, ajuste un par\u00e1metro cada vez, haga circular el agua y vuelva a medir. El revestimiento, el sistema desinfectante y la etiqueta determinan los objetivos.\", \"schedule\": \"Programa diario de varias velocidades\", \"off\": \"Apagado\", \"equal\": \"Comparaci\u00f3n con igual volumen de agua\", \"units\": \"US gal; ft; GPM; W; $\/kWh\", \"title\": [\"Tiempo diario y coste el\u00e9ctrico\", \"Comprobar superficie interior y del agua\", \"Reposici\u00f3n de agua para reducir concentraciones\", \"Medir el caudal de la manguera\", \"Reposici\u00f3n SLAM seg\u00fan el CYA\", \"Orden de ajuste del agua\", \"Presupuesto desglosado del proyecto\"], \"labels\": [\"Volumen de piscina (US gal)\", \"Caudal medido (GPM)\", \"Equivalentes de volumen al d\u00eda\", \"Tiempo m\u00ednimo de equipos (h)\", \"Potencia medida (W)\", \"Tarifa el\u00e9ctrica ($\/kWh)\", \"Longitud (ft)\", \"Anchura (ft)\", \"Profundidad m\u00ednima (ft)\", \"Profundidad m\u00e1xima (ft)\", \"Lectura actual (ppm)\", \"Lectura objetivo (ppm)\", \"Lectura del agua de reposici\u00f3n (ppm)\", \"Etapas iguales (1\u201310)\", \"Capacidad del cubo (US gal)\", \"Tiempo para llenar el cubo (s)\", \"CYA (ppm)\", \"Cloro libre actual (ppm)\", \"Concentraci\u00f3n de cloro l\u00edquido (%)\", \"Alcalinidad total (ppm)\", \"pH\", \"Dureza c\u00e1lcica (ppm)\", \"Construcci\u00f3n y equipos est\u00e1ndar ($)\", \"Excavaci\u00f3n ($)\", \"Terraza de piscina ($)\", \"Permisos y proyecto ($)\", \"Equipos opcionales ($)\", \"Reserva (%)\", \"Caudal a velocidad baja (GPM)\", \"Potencia a velocidad baja (W)\", \"Caudal a velocidad media (GPM)\", \"Potencia a velocidad media (W)\", \"Tiempo a velocidad media (h)\", \"Caudal a velocidad alta (GPM)\", \"Potencia a velocidad alta (W)\", \"Tiempo a velocidad alta (h)\"], \"help\": [\"Utilice mediciones reales. El tiempo de recirculaci\u00f3n no garantiza la calidad del agua; respete el caudal y tiempo m\u00ednimos de los equipos.\", \"El rect\u00e1ngulo incluye el fondo inclinado. Otras formas son aproximaciones sin escalones, bancos ni curvas de encuentro. Confirme medidas antes de comprar materiales.\", \"Calcule una sustancia cada vez. Antes de vaciar cantidades importantes, revise nivel fre\u00e1tico, estructura y normas de vertido; mezcle y vuelva a medir entre etapas.\", \"Mide la manguera de llenado, no el caudal de recirculaci\u00f3n requerido. Repita la medici\u00f3n con la instalaci\u00f3n real.\", \"Solo para CYA medido entre 20 y 90 ppm. El objetivo y la dosis no sustituyen el procedimiento SLAM completo. Mida el cloro libre antes de cada reposici\u00f3n, siga la etiqueta y no se ba\u00f1e durante el tratamiento.\", \"Esta lista no sustituye un an\u00e1lisis completo ni genera una mezcla autom\u00e1tica de productos.\", \"Introduzca presupuestos locales. El coste de construcci\u00f3n es distinto del pr\u00e9stamo y del mantenimiento.\"], \"pure\": \"Cantidades te\u00f3ricas para CaCl\u2082 anhidro puro al 100 % o cloruro c\u00e1lcico dihidratado puro; dureza expresada como ppm CaCO\u2083. Si el producto declara una fracci\u00f3n de CaCl\u2082 anhidro, divida la cantidad anhidra por esa fracci\u00f3n (77 % = 0.77). No aplique otra vez ese factor a la cantidad dihidratada. El hipoclorito c\u00e1lcico de choque es otro producto.\"},type=\"dilution\";form.addEventListener('submit',e=>{e.preventDefault();const inputs=[...form.querySelectorAll('input')];if(inputs.some(x=>x.value.trim()===''||!Number.isFinite(Number(x.value))||Number(x.value)<0)){out.textContent=D.error;return;}const x=Object.fromEntries(inputs.map(x=>[x.name,Number(x.value)])),fmt=n=>new Intl.NumberFormat(\"es-ES\",{maximumFractionDigits:2}).format(n),line=(k,v,u='')=>D[k]+': '+fmt(v)+' '+u;let result='';if(type==='dilution'){if(x.t>=x.c){result=line('replace',0,'US gal');}else if(x.f>=x.t){result=D.unreachable;}else if(x.v<=0||x.n<1||x.n>10||!Number.isInteger(x.n)){result=D.error;}else{let f=(x.c-x.t)\/(x.c-x.f),st=1-Math.pow((x.t-x.f)\/(x.c-x.f),1\/x.n);result=line('replace',x.v*f,'US gal')+' ('+fmt(f*100)+'%); '+line('stages',x.n)+': '+fmt(st*100)+'%; '+line('total',st*x.v*x.n,'US gal');}}else if(type==='runtime'){if(x.v<=0||x.q<=0||x.n<=0){result=D.error;}else{let h=Math.max(x.v*x.n\/x.q\/60,x.min);result=h>24?D.invalid:line('time',h,D.hours)+'; '+line('day',h*x.w\/1000,'kWh')+'; '+line('month',h*x.w\/1000*x.r*30,'$');}}else if(type==='surface'){if(Math.min(x.l,x.b,x.s,x.d)<=0||x.d<x.s){result=D.error;}else{let a=x.b*Math.hypot(x.l,x.d-x.s)+x.l*(x.s+x.d)+x.b*(x.s+x.d);result=line('water',x.l*x.b,'ft\u00b2')+'; '+line('interior',a,'ft\u00b2');}}else if(type==='fill'){if(Math.min(x.v,x.b,x.s)<=0){result=D.error;}else{let q=x.b*60\/x.s;result=line('flow',q,'GPM')+'; '+line('time',x.v\/q\/60,D.hours);const f=document.getElementById('flowRate');if(f){f.value=q.toFixed(3);f.dispatchEvent(new Event('input',{bubbles:true}));}}}else if(type==='slam'){if(x.v<=0||x.s<=0||x.s>15||x.c<20||x.c>90){result=D.error;}else{let target=.4*x.c,litres=Math.max(0,target-x.f)*x.v*3.785411784\/(x.s*10000);result=line('target',target,'ppm')+'; '+line('dose',litres,'L');}}else if(type==='chemical'){result=D.review;}else if(type==='budget'){result=line('budget',(x.shell+x.site+x.deck+x.permit+x.extras)*(1+x.reserve\/100),'$');}else if(type==='schedule'){if(Math.min(x.v,x.n,x.q1,x.q2,x.q3)<=0){result=D.error;}else{let target=x.v*x.n,h1=Math.max(0,(target-60*(x.q2*x.h2+x.q3*x.h3))\/(60*x.q1)),h=h1+x.h2+x.h3;let energy=(h1*x.w1+x.h2*x.w2+x.h3*x.w3)\/1000;result=h>24?D.invalid:D.schedule+': '+fmt(h1)+' \/ '+fmt(x.h2)+' \/ '+fmt(x.h3)+' '+D.hours+'; '+line('off',24-h,D.hours)+'; '+line('day',energy*x.r,'$')+'; '+D.equal+': '+[1,2,3].map(i=>fmt(target\/x['q'+i]\/60*x['w'+i]\/1000*x.r)+' $').join(' \/ ');}}out.textContent=result;});form.addEventListener('reset',()=>out.textContent='');})();<\/script>\n<p><a href=\"https:\/\/aiper.com\/blogs\/es\/calculadora-de-dilucion-de-piscina\/\" class=\"aiper-tl-tag\">Calculadora de diluci\u00f3n de piscina<\/a><\/p>\n<p><a href=\"https:\/\/aiper.com\/blogs\/es\/calculadora-de-capacidad-del-clorador-salino\/\" class=\"aiper-tl-tag\">Calculadora de capacidad del clorador salino<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Descubre exactamente cu\u00e1nta sal a\u00f1adir para tu clorador salino \u2014 o, si tu nivel ya es demasiado alto, cu\u00e1nta agua vaciar y reponer. Indica el volumen de tu piscina y tu nivel de sal actual para obtener la cantidad exacta, en kilogramos o libras. Volumen de la piscina Galones Litros Nivel de sal actual (ppm) [&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":5,"aiper_last_reviewed":"","aiper_reviewer":0,"aiper_related_ids":[],"aiper_layout":"","footnotes":""},"class_list":["post-1665","page","type-page","status-publish","hentry"],"lang":"es","translations":{"es":1665,"en":1373,"de":1661,"fr":1663},"_links":{"self":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/1665","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=1665"}],"version-history":[{"count":14,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/1665\/revisions"}],"predecessor-version":[{"id":13294,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/1665\/revisions\/13294"}],"wp:attachment":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/media?parent=1665"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}