{"id":6,"date":"2026-05-25T19:44:40","date_gmt":"2026-05-25T16:44:40","guid":{"rendered":"https:\/\/holygaia.com\/?page_id=6"},"modified":"2026-06-19T20:05:04","modified_gmt":"2026-06-19T17:05:04","slug":"aquarium-volume-and-chemicals-calculator","status":"publish","type":"page","link":"https:\/\/holygaia.com\/?page_id=6","title":{"rendered":"Tools"},"content":{"rendered":"\n<h2 class=\"wp-block-heading has-text-align-center\">Aquarium Volume \/ Chemicals Calculator<\/h2>\n\n\n\n<div class=\"aq-calc-container\">\n    <div class=\"aq-calc-grid\">\n        \n        <!-- LEFT SIDE: DOSAGE CALCULATOR -->\n        <div class=\"aq-card dosage-card\">\n            <h3>Product Dosage<\/h3>\n            <div class=\"product-selection-row\">\n                <div class=\"input-group main-product-group\">\n                    <label for=\"calculator-select\">Select Product:<\/label>\n                    <select id=\"calculator-select\" onchange=\"updateProductVariants()\">\n                        <option value=\"custom\">Calculate Your Own<\/option>\n                        <option value=\"apg_fix\">APG Fix (Algae Treatment)<\/option>\n                        <option value=\"apg_fix_lite\">APG Fix Lite (Algae Treatment)<\/option>\n                        <option value=\"fluval_bio\">FLUVAL Biological Enhancer<\/option>\n                        <option value=\"accr\">FRITZ A.C.C.R.<\/option>\n                        <option value=\"fritzzyme\">FRITZ Zyme<\/option>\n                        <option value=\"methylblue\">SeaStar METHYL BLUE<\/option>\n                        <option value=\"aquasafe\">Tetra AquaSafe<\/option>\n                        <option value=\"crystalwater\">Tetra Crystal Water<\/option>\n                        <option value=\"easybalance\">Tetra EasyBalance<\/option>\n                        <option value=\"antychlor\">Tropical ANTYCHLOR<\/option>\n                        <option value=\"ph_buffer\">Waterlife pH 6.5 BUFFER<\/option>\n                    <\/select>\n                <\/div>\n                <div id=\"variant-select-container\" class=\"input-group variant-product-group\" style=\"display: none;\">\n                    <label for=\"variant-select\">Usage Option:<\/label>\n                    <select id=\"variant-select\" onchange=\"updateDosage()\">\n                        <!-- Options will be dynamically populated -->\n                    <\/select>\n                <\/div>\n            <\/div>\n\n            <div id=\"dosage-inputs\" style=\"margin-top: 20px;\">\n                <div id=\"custom-fields\">\n                    <div class=\"input-group\">\n                        <label>Bottle Dose (ml):<\/label>\n                        <input type=\"number\" id=\"bottle-ml\" value=\"5\" oninput=\"updateDosage()\">\n                    <\/div>\n                    <div class=\"input-group\">\n                        <label>Per (Liters):<\/label>\n                        <input type=\"number\" id=\"bottle-liters\" value=\"10\" oninput=\"updateDosage()\">\n                    <\/div>\n                <\/div>\n                \n                <div id=\"fixed-info\" style=\"display:none; font-style: italic; color: #666; margin-bottom: 10px;\">\n                    <span id=\"product-ratio\"><\/span>\n                <\/div>\n\n                <div class=\"result-box dose-highlight\">\n                    <strong>Your Required Dose:<\/strong>\n                    <div class=\"result-value\"><span id=\"final-dose\">58.8<\/span> <span id=\"dose-unit\">ml<\/span><\/div>\n                    <div id=\"dose-breakdown\" style=\"font-size: 0.85em; color: #555; margin-top:5px; border-top: 1px solid #c8e6c9; padding-top: 5px;\"><\/div>\n                <\/div>\n                \n                <!-- DYNAMIC WARNING NOTES -->\n                <div id=\"apg-fix-note\" class=\"calc-note\" style=\"display:none; color: #d32f2f; margin-top: 10px; border-top: 1px solid #ffcdd2; padding-top: 8px;\">\n                    <strong style=\"color: #b71c1c;\">\u26a0\ufe0f WARNING:<\/strong> NOT safe for Mosses. Ensure strong water aeration. For sensitive fish\/shrimp, use half dosage (<span id=\"apg-fix-half\">0.0<\/span> ml).\n                <\/div>\n\n                <div id=\"apg-lite-note\" class=\"calc-note\" style=\"display:none; color: #e65100; margin-top: 10px; border-top: 1px solid #ffe0b2; padding-top: 8px;\">\n                    <strong style=\"color: #e65100;\">\ud83c\udf3f MOSS SAFE:<\/strong> Safe to use with Mosses. Ensure strong water aeration. For sensitive fish\/shrimp, use half dosage (<span id=\"apg-lite-half\">0.0<\/span> ml).\n                <\/div>\n\n                <p id=\"fritzzyme-note\" class=\"calc-note\" style=\"display:none; color: #d32f2f; margin-top: 10px; text-align: center;\">\n                    * For a large livestock load, Dosage may be safely increased 10x (<span id=\"fritzzyme-10x\">0.0<\/span> ml)\n                <\/p>\n\n                <p id=\"buffer-note\" class=\"calc-note\" style=\"display:none; color: #d32f2f; margin-top: 10px; font-weight: 600; text-align: center;\">\n                    * Check pH parameters every 30 mins after administration.\n                <\/p>\n            <\/div>\n        <\/div>\n\n        <!-- RIGHT SIDE: VOLUME CALCULATOR -->\n        <div class=\"aq-card volume-card\">\n            <h3>Aquarium Volume<\/h3>\n            <div id=\"dimensions-row\" class=\"input-row\">\n                <div class=\"input-group\">\n                    <label>Length (cm):<\/label>\n                    <input type=\"number\" id=\"aq-length\" value=\"120\" oninput=\"calculateVolume()\">\n                <\/div>\n                <div class=\"input-group\">\n                    <label>Width (cm):<\/label>\n                    <input type=\"number\" id=\"aq-width\" value=\"35\" oninput=\"calculateVolume()\">\n                <\/div>\n                <div class=\"input-group\">\n                    <label>Height (cm):<\/label>\n                    <input type=\"number\" id=\"aq-height\" value=\"40\" oninput=\"calculateVolume()\">\n                <\/div>\n            <\/div>\n            \n            <div id=\"fill-level-container\" class=\"input-group fill-level\">\n                <label>Fill Level (%):<\/label>\n                <input type=\"number\" id=\"aq-fill\" value=\"70\" min=\"1\" max=\"100\" oninput=\"calculateVolume()\">\n                <p class=\"calc-note\">*Please account for the Substrate \/ Gravel too not just the unfilled gap to the lid of the Aquarium<\/p>\n            <\/div>\n\n            <!-- Checkbox Option -->\n            <div class=\"input-group checkbox-group\">\n                <label class=\"checkbox-label\">\n                    <input type=\"checkbox\" id=\"manual-checkbox\" onchange=\"toggleManualVolume()\">\n                    Enter Volume Manually\n                <\/label>\n            <\/div>\n\n            <!-- Manual Inputs Row -->\n            <div id=\"manual-volume-row\" class=\"manual-input-row\" style=\"display: none;\">\n                <div class=\"input-group\">\n                    <label>Your Volume:<\/label>\n                    <input type=\"number\" id=\"manual-volume-input\" value=\"100\" oninput=\"calculateVolume()\">\n                <\/div>\n                <div class=\"input-group\">\n                    <label>Unit:<\/label>\n                    <select id=\"manual-volume-unit\" onchange=\"calculateVolume()\">\n                        <option value=\"liters\">Liters<\/option>\n                        <option value=\"gallons\">Gallons (US)<\/option>\n                    <\/select>\n                <\/div>\n            <\/div>\n            \n            <div class=\"result-box volume-result\" style=\"margin-bottom: 15px;\">\n                <strong>Net Water Volume:<\/strong>\n                <div class=\"result-value\"><span id=\"total-liters\">117.6<\/span> Liters<\/div>\n                <div style=\"font-size: 0.85em; color: #555; margin-top:5px;\">\n                    Total Capacity: <span id=\"raw-liters\">168.0<\/span> L<br>\n                    Est. Weight: <span id=\"total-kg\">117.6<\/span> KG\n                <\/div>\n            <\/div>\n\n            <!-- Generate Report Button -->\n            <button type=\"button\" class=\"aq-btn-report\" onclick=\"generateFullReport()\">\ud83d\udccb Generate Full Dosage Report<\/button>\n        <\/div>\n\n    <\/div>\n\n    <!-- FULL DOSAGE REPORT CONTAINER (Spans both columns below) -->\n    <div id=\"full-report-section\" class=\"aq-card report-card\" style=\"display: none;\">\n        <h3>Full Dosage Report (<span id=\"report-volume-heading\">0.0<\/span> L Net Volume)<\/h3>\n        <div class=\"table-responsive\">\n            <table class=\"report-table\">\n                <thead>\n                    <tr>\n                        <th>Product \/ Brand Name<\/th>\n                        <th>Application Stage \/ Type<\/th>\n                        <th>Standard Dose<\/th>\n                        <th>Safety Notes \/ Special Ratios<\/th>\n                    <\/tr>\n                <\/thead>\n                <tbody id=\"report-table-body\">\n                    <!-- Javascript will append rows dynamically here -->\n                <\/tbody>\n            <\/table>\n        <\/div>\n    <\/div>\n<\/div>\n\n<style>\n    .aq-calc-container { font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif; max-width: 950px; margin: 20px auto; color: #333; line-height: 1.5; }\n    .aq-calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 25px; margin-bottom: 25px; }\n    \n    @media (max-width: 768px) { \n        .aq-calc-grid { grid-template-columns: 1fr; } \n        .volume-card { order: 1; }\n        .dosage-card { order: 2; }\n    }\n    \n    .aq-card { background: #ffffff; padding: 25px; border-radius: 12px; border: 1px solid #e0e0e0; box-shadow: 0 4px 6px rgba(0,0,0,0.05); }\n    .aq-card h3 { margin: 0 0 20px 0; color: #1e88e5; font-size: 1.25rem; text-transform: uppercase; letter-spacing: 1px; border-bottom: 2px solid #e3f2fd; padding-bottom: 10px; }\n    \n    .product-selection-row { display: flex; flex-wrap: wrap; gap: 15px; }\n    .main-product-group { flex: 2 1 200px; }\n    .variant-product-group { flex: 1 1 150px; }\n    \n    .input-row { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 10px; transition: opacity 0.2s; }\n    .manual-input-row { display: grid; grid-template-columns: 2fr 1fr; gap: 10px; margin-bottom: 18px; }\n    .input-group { margin-bottom: 18px; }\n    .input-group label { display: block; font-size: 0.85rem; margin-bottom: 6px; font-weight: 600; color: #555; }\n    .input-group input, .aq-card select { width: 100%; padding: 10px; border: 2px solid #eee; border-radius: 6px; font-size: 1rem; transition: border-color 0.2s, background-color 0.2s; }\n    .input-group input:focus, .aq-card select:focus { border-color: #1e88e5; outline: none; }\n    \n    .input-group input:disabled, .aq-card select:disabled { background-color: #f5f5f5; color: #999; border-color: #e8e8e8; cursor: not-allowed; }\n    \n    .fill-level { background: #fff8e1; padding: 12px; border-radius: 6px; border: 1px solid #ffe082; transition: opacity 0.2s; }\n    .calc-note { font-size: 0.75rem; margin: 8px 0 0 0; line-height: 1.3; font-style: italic; }\n\n    .checkbox-group { margin: 12px 0; }\n    .checkbox-label { display: inline-flex !important; align-items: center; font-weight: normal !important; cursor: pointer; font-size: 0.9rem; color: #444; }\n    .checkbox-label input[type=\"checkbox\"] { width: auto; margin-right: 8px; cursor: pointer; }\n\n    .result-box { margin-top: 20px; padding: 20px; border-radius: 8px; text-align: center; }\n    .dose-highlight { background: #e8f5e9; border: 1px solid #c8e6c9; }\n    .volume-result { background: #e3f2fd; border: 1px solid #bbdefb; }\n    .result-value { font-size: 2rem; font-weight: 800; color: #2e7d32; margin-top: 5px; }\n    .volume-result .result-value { color: #1565c0; }\n\n    \/* Button and Table Styles *\/\n    .aq-btn-report { width: 100%; padding: 12px; background: #1e88e5; color: #fff; border: none; border-radius: 6px; font-size: 1rem; font-weight: bold; cursor: pointer; transition: background 0.2s; display: block; text-align: center; box-shadow: 0 2px 4px rgba(30,136,229,0.3); }\n    .aq-btn-report:hover { background: #1565c0; }\n    \n    .report-card { border: 1px solid #b3e5fc; background: #fafafa; }\n    .report-card h3 { color: #0288d1; border-bottom: 2px solid #b3e5fc; }\n    .table-responsive { overflow-x: auto; margin-top: 15px; }\n    .report-table { width: 100%; border-collapse: collapse; text-align: left; font-size: 0.9rem; }\n    .report-table th, .report-table td { padding: 10px 12px; border-bottom: 1px solid #e0e0e0; }\n    .report-table th { background: #e1f5fe; color: #0277bd; font-weight: bold; }\n    .report-table tr:hover { background: #f1f8ff; }\n    .text-warning-bold { color: #c62828; font-weight: 600; }\n    .text-safe-bold { color: #2e7d32; font-weight: 600; }\n<\/style>\n\n<script>\n    const presets = {\n        custom: { name: \"Custom Product\", multi: false, unit: \"ml\" },\n        apg_fix: { name: \"APG Fix (Algae Treatment)\", multi: false, ml: 5, liters: 50, unit: \"ml\", note: \"\u274c NOT safe for mosses! Half dose for shrimp setup.\" },\n        apg_fix_lite: { name: \"APG Fix Lite (Algae Treatment)\", multi: false, ml: 10, liters: 100, unit: \"ml\", note: \"\ud83c\udf3f Moss safe! Half dose for shrimp setup.\" },\n        fluval_bio: {\n            name: \"FLUVAL Biological Enhancer\",\n            multi: true,\n            unit: \"ml\",\n            variants: [\n                { id: \"day1\", label: \"Day 1\", ml: 25, liters: 40 },\n                { id: \"day2\", label: \"Day 2\", ml: 10, liters: 40 },\n                { id: \"day3\", label: \"Day 3\", ml: 10, liters: 40 },\n                { id: \"maintenance\", label: \"Maintenance\", ml: 7, liters: 40 }\n            ]\n        },\n        accr: { name: \"FRITZ A.C.C.R.\", multi: false, ml: 5, liters: 38, unit: \"ml\", note: \"Binds heavy metals; clear tap safely.\" },\n        fritzzyme: {\n            name: \"FRITZ Zyme\",\n            multi: true,\n            unit: \"ml\",\n            note: \"\ud83d\udd34 Safe to increase up to 10x for heavy livestock loads.\",\n            variants: [\n                { id: \"new\", label: \"New System\", ml: 118, liters: 38 },\n                { id: \"est\", label: \"Established System\", ml: 30, liters: 38 }\n            ]\n        },\n        methylblue: { name: \"SeaStar METHYL BLUE\", multi: false, ml: 10, liters: 100, unit: \"ml\", note: \"\u26a0\ufe0f Highly toxic to shrimplets & biological filters!\" },\n        aquasafe: { name: \"Tetra AquaSafe\", multi: false, ml: 5, liters: 10, unit: \"ml\", note: \"Standard protective water conditioner.\" },\n        crystalwater: { name: \"Tetra Crystal Water\", multi: false, ml: 2.5, liters: 10, unit: \"ml\", note: \"Clumps particles. Use with caution around shrimplets.\" },\n        easybalance: { name: \"Tetra EasyBalance\", multi: false, ml: 2.5, liters: 10, unit: \"ml\", note: \"Stabilizes chemical parameters.\" },\n        antychlor: { name: \"Tropical ANTYCHLOR\", multi: false, ml: 10, liters: 100, unit: \"ml\", note: \"Fast chlorine neutralizer.\" },\n        ph_buffer: { name: \"Waterlife pH 6.5 BUFFER\", multi: false, ml: 2, liters: 100, unit: \"Teaspoons\", note: \"\u26a0\ufe0f Monitor parameters closely every 30 mins.\" }\n    };\n\n    function toggleManualVolume() {\n        const isManual = document.getElementById('manual-checkbox').checked;\n        document.getElementById('aq-length').disabled = isManual;\n        document.getElementById('aq-width').disabled = isManual;\n        document.getElementById('aq-height').disabled = isManual;\n        document.getElementById('aq-fill').disabled = isManual;\n        document.getElementById('dimensions-row').style.opacity = isManual ? \"0.4\" : \"1\";\n        document.getElementById('fill-level-container').style.opacity = isManual ? \"0.4\" : \"1\";\n        document.getElementById('manual-volume-row').style.display = isManual ? \"grid\" : \"none\";\n        calculateVolume();\n    }\n\n    function calculateVolume() {\n        const isManual = document.getElementById('manual-checkbox').checked;\n        let rawVolume = 0;\n        let netVolume = 0;\n\n        if (isManual) {\n            const manualVal = parseFloat(document.getElementById('manual-volume-input').value) || 0;\n            const unit = document.getElementById('manual-volume-unit').value;\n            netVolume = (unit === 'gallons') ? manualVal * 3.78541 : manualVal;\n            rawVolume = NaN; \n        } else {\n            const L = parseFloat(document.getElementById('aq-length').value) || 0;\n            const W = parseFloat(document.getElementById('aq-width').value) || 0;\n            const H = parseFloat(document.getElementById('aq-height').value) || 0;\n            const fill = parseFloat(document.getElementById('aq-fill').value) || 0;\n            rawVolume = (L * W * H) \/ 1000;\n            netVolume = rawVolume * (fill \/ 100);\n        }\n        \n        document.getElementById('raw-liters').innerText = isNaN(rawVolume) ? \"N\/A\" : rawVolume.toFixed(1);\n        document.getElementById('total-liters').innerText = netVolume.toFixed(1);\n        document.getElementById('total-kg').innerText = netVolume.toFixed(1);\n        \n        updateDosage();\n        \n        \/\/ Auto-refresh report if it is already open\n        if (document.getElementById('full-report-section').style.display === 'block') {\n            generateFullReport();\n        }\n    }\n\n    function updateProductVariants() {\n        const productType = document.getElementById('calculator-select').value;\n        const variantContainer = document.getElementById('variant-select-container');\n        const variantSelect = document.getElementById('variant-select');\n        const customFields = document.getElementById('custom-fields');\n        const productRatio = document.getElementById('product-ratio');\n        const product = presets[productType];\n        \n        productRatio.innerText = \"\";\n        customFields.style.display = (productType === 'custom') ? 'block' : 'none';\n\n        if (product && product.multi) {\n            variantSelect.innerHTML = \"\";\n            product.variants.forEach((v, index) => {\n                const opt = document.createElement('option');\n                opt.value = v.id;\n                opt.innerText = v.label;\n                if (index === 0) opt.selected = true;\n                variantSelect.appendChild(opt);\n            });\n            variantContainer.style.display = 'block';\n        } else {\n            variantContainer.style.display = 'none';\n        }\n        updateDosage();\n    }\n\n    function updateDosage() {\n        const productType = document.getElementById('calculator-select').value;\n        const variantId = document.getElementById('variant-select').value;\n        const netVolume = parseFloat(document.getElementById('total-liters').innerText) || 0;\n        \n        const fixedInfo = document.getElementById('fixed-info');\n        const ratioLabel = document.getElementById('product-ratio');\n        const breakdownDiv = document.getElementById('dose-breakdown');\n        const doseUnitSpan = document.getElementById('dose-unit');\n        \n        const apgFixNote = document.getElementById('apg-fix-note');\n        const apgFixHalf = document.getElementById('apg-fix-half');\n        const apgLiteNote = document.getElementById('apg-lite-note');\n        const apgLiteHalf = document.getElementById('apg-lite-half');\n        const fritzzymeNote = document.getElementById('fritzzyme-note');\n        const fritzzyme10xSpan = document.getElementById('fritzzyme-10x');\n        const bufferNote = document.getElementById('buffer-note');\n        \n        const product = presets[productType];\n        let bottleMl = 0, bottleL = 1;\n        let ratioLabelText = \"\";\n        let displayUnit = \"ml\";\n\n        if (productType === 'custom') {\n            bottleMl = parseFloat(document.getElementById('bottle-ml').value) || 0;\n            bottleL = parseFloat(document.getElementById('bottle-liters').value) || 1;\n            ratioLabelText = `Custom Product (${bottleMl}ml\/${bottleL}L)`;\n            fixedInfo.style.display = 'block';\n        } else if (product && product.multi) {\n            fixedInfo.style.display = 'block';\n            displayUnit = product.unit;\n            if (variantId) {\n                const activeVariant = product.variants.find(v => v.id === variantId);\n                if (activeVariant) {\n                    bottleMl = activeVariant.ml;\n                    bottleL = activeVariant.liters;\n                    ratioLabelText = (productType === 'fritzzyme' ? 'FRITZ Zyme: ' : 'FLUVAL Bio: ') + activeVariant.label;\n                }\n            }\n        } else if (product) {\n            fixedInfo.style.display = 'block';\n            bottleMl = product.ml;\n            bottleL = product.liters;\n            ratioLabelText = product.label;\n            displayUnit = product.unit;\n        } else {\n            fixedInfo.style.display = 'none';\n        }\n\n        if (productType !== 'custom') ratioLabel.innerText = ratioLabelText;\n        doseUnitSpan.innerText = displayUnit;\n\n        const dose = bottleL > 0 ? (bottleMl \/ bottleL) * netVolume : 0;\n        document.getElementById('final-dose').innerText = dose.toFixed(1);\n\n        const mathUnitAbbr = (displayUnit === \"Teaspoons\") ? \"tsp\" : \"ml\";\n\n        if (productType !== 'custom' && productType !== \"\") {\n            breakdownDiv.innerHTML = `(${bottleMl} ${mathUnitAbbr} \/ ${bottleL} L) &times; ${netVolume.toFixed(1)} L = ${dose.toFixed(1)} ${mathUnitAbbr}`;\n        } else {\n            breakdownDiv.innerHTML = \"\";\n        }\n\n        apgFixNote.style.display = (productType === 'apg_fix') ? 'block' : 'none';\n        if (productType === 'apg_fix') apgFixHalf.innerText = (dose \/ 2).toFixed(1);\n\n        apgLiteNote.style.display = (productType === 'apg_fix_lite') ? 'block' : 'none';\n        if (productType === 'apg_fix_lite') apgLiteHalf.innerText = (dose \/ 2).toFixed(1);\n\n        fritzzymeNote.style.display = (productType === 'fritzzyme') ? 'block' : 'none';\n        if (productType === 'fritzzyme') fritzzyme10xSpan.innerText = (dose * 10).toFixed(1);\n        \n        bufferNote.style.display = (productType === 'ph_buffer') ? 'block' : 'none';\n    }\n\n    \/\/ GENERATE FULL REPORT LOGIC\n    function generateFullReport() {\n        const netVolume = parseFloat(document.getElementById('total-liters').innerText) || 0;\n        document.getElementById('report-volume-heading').innerText = netVolume.toFixed(1);\n        \n        const tbody = document.getElementById('report-table-body');\n        tbody.innerHTML = \"\"; \/\/ Reset contents\n\n        \/\/ Explicit keys in alphabetical brand order (matching dropdown)\n        const sortedKeys = ['apg_fix', 'apg_fix_lite', 'fluval_bio', 'accr', 'fritzzyme', 'methylblue', 'aquasafe', 'crystalwater', 'easybalance', 'antychlor', 'ph_buffer'];\n\n        sortedKeys.forEach(key => {\n            const p = presets[key];\n            \n            if (p.multi) {\n                \/\/ Generate sub-rows for each dynamic variant option\n                p.variants.forEach((v, index) => {\n                    const dose = (v.ml \/ v.liters) * netVolume;\n                    const row = document.createElement('tr');\n                    \n                    \/\/ Main brand cell only populates on the first variant row to keep design neat\n                    if (index === 0) {\n                        const cellName = document.createElement('td');\n                        cellName.rowSpan = p.variants.length;\n                        cellName.innerHTML = `<strong>${p.name}<\/strong>`;\n                        row.appendChild(cellName);\n                    }\n                    \n                    const cellStage = document.createElement('td');\n                    cellStage.innerText = v.label;\n                    row.appendChild(cellStage);\n                    \n                    const cellDose = document.createElement('td');\n                    cellDose.innerHTML = `<strong>${dose.toFixed(1)}<\/strong> ${p.unit}`;\n                    row.appendChild(cellDose);\n                    \n                    const cellNote = document.createElement('td');\n                    if (key === 'fritzzyme') {\n                        cellNote.innerHTML = `<span class=\"text-safe-bold\">10x Load Dose: ${(dose * 10).toFixed(1)} ml<\/span>`;\n                    } else {\n                        cellNote.innerText = \"-\";\n                    }\n                    row.appendChild(cellNote);\n                    tbody.appendChild(row);\n                });\n            } else {\n                \/\/ Generate basic rows for single entries\n                const dose = (p.ml \/ p.liters) * netVolume;\n                const row = document.createElement('tr');\n                \n                const cellName = document.createElement('td');\n                cellName.innerHTML = `<strong>${p.name}<\/strong>`;\n                row.appendChild(cellName);\n                \n                const cellStage = document.createElement('td');\n                cellStage.style.fontStyle = \"italic\";\n                cellStage.innerText = \"Standard Application\";\n                row.appendChild(cellStage);\n                \n                const cellDose = document.createElement('td');\n                const mathAbbr = (p.unit === \"Teaspoons\") ? \"tsp\" : \"ml\";\n                cellDose.innerHTML = `<strong>${dose.toFixed(1)}<\/strong> ${mathAbbr}`;\n                row.appendChild(cellDose);\n                \n                const cellNote = document.createElement('td');\n                if (key.startsWith('apg_fix')) {\n                    cellNote.innerHTML = `<span class=\"text-warning-bold\">Shrimp Safe Half Dose: ${(dose \/ 2).toFixed(1)} ml<\/span><br><small>${p.note}<\/small>`;\n                } else {\n                    cellNote.innerHTML = `<small>${p.note || '-'}<\/small>`;\n                }\n                row.appendChild(cellNote);\n                tbody.appendChild(row);\n            }\n        });\n\n        \/\/ Reveal report container layout panel\n        document.getElementById('full-report-section').style.display = 'block';\n        \n        \/\/ Smooth scroll window down directly to the newly built report summary matrix\n        document.getElementById('full-report-section').scrollIntoView({ behavior: 'smooth' });\n    }\n\n    window.onload = calculateVolume;\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Aquarium Volume \/ Chemicals Calculator Product Dosage Select Product: Calculate Your OwnAPG Fix (Algae Treatment)APG Fix Lite (Algae Treatment)FLUVAL Biological EnhancerFRITZ A.C.C.R.FRITZ ZymeSeaStar METHYL BLUETetra AquaSafeTetra Crystal WaterTetra EasyBalanceTropical ANTYCHLORWaterlife pH 6.5 BUFFER Usage Option: Bottle Dose (ml): Per (Liters): Your Required Dose: 58.8 ml \u26a0\ufe0f WARNING: NOT safe for Mosses. Ensure strong water aeration. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-6","page","type-page","status-publish","hentry"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/holygaia.com\/index.php?rest_route=\/wp\/v2\/pages\/6","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/holygaia.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/holygaia.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/holygaia.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/holygaia.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6"}],"version-history":[{"count":7,"href":"https:\/\/holygaia.com\/index.php?rest_route=\/wp\/v2\/pages\/6\/revisions"}],"predecessor-version":[{"id":168,"href":"https:\/\/holygaia.com\/index.php?rest_route=\/wp\/v2\/pages\/6\/revisions\/168"}],"wp:attachment":[{"href":"https:\/\/holygaia.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}