{"id":32941,"date":"2026-07-13T12:30:42","date_gmt":"2026-07-13T12:30:42","guid":{"rendered":"https:\/\/saunazilla.com\/?page_id=32941"},"modified":"2026-07-13T15:09:57","modified_gmt":"2026-07-13T15:09:57","slug":"sauna-power-consumption-calculator","status":"publish","type":"page","link":"https:\/\/saunazilla.com\/en\/sauna-power-consumption-calculator\/","title":{"rendered":"Sauna Power Consumption Calculator | Estimate Electricity Cost"},"content":{"rendered":"\n<p>How much electricity does your sauna heater consume per year? And how much does it actually cost you? Find out right here.<\/p><br>\n\n\n\n<p class=\"wp-block-paragraph\">You might have already used our <a href=\"https:\/\/saunazilla.com\/en\/sauna-heater-size-calculator\/\">sauna heater size calculator<\/a> and now want to find out about the heater&#8217;s costs. Please note, that even though this gets fairly advanced, it can still only get you an estimate. Every sauna build is different, and seasonal changes might affect it as well. There also might be differencies in energy efficiency between heaters.<\/p><br>\n\n\n\n<p class=\"wp-block-paragraph\">We also created a comparison between an <a href=\"https:\/\/saunazilla.com\/en\/electric-vs-infrared-sauna-calculator\/\">electric sauna vs. infrared<\/a>, if that&#8217;s something you might be thinking about.<br><\/p><br>\n\n\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Sauna Power Consumption Calculator<\/title>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Noto+Sans+Display:wght@400;500;600;700;800&#038;display=swap\" rel=\"stylesheet\">\n<style>\n  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n  :root {\n    --red: #F60202;\n    --red-dark: #C20000;\n    --red-light: #FFF0F0;\n    --red-bg: #FFF5F5;\n    --gray-50: #FAFAFA;\n    --gray-100: #F5F5F5;\n    --gray-200: #E5E5E5;\n    --gray-300: #D4D4D4;\n    --gray-400: #A3A3A3;\n    --gray-500: #737373;\n    --gray-600: #525252;\n    --gray-700: #404040;\n    --gray-800: #262626;\n    --gray-900: #171717;\n    --white: #FFFFFF;\n    --radius: 8px;\n    --radius-lg: 12px;\n  }\n\n  body {\n    font-family: 'Noto Sans Display', system-ui, -apple-system, sans-serif;\n    background: var(--gray-100);\n    color: var(--gray-900);\n    line-height: 1.5;\n    padding: 20px;\n  }\n\n  .calc-wrap {\n    max-width: 680px;\n    margin: 0 auto;\n  }\n\n  .calc-card {\n    background: var(--white);\n    border: 1px solid var(--gray-200);\n    border-radius: var(--radius-lg);\n    overflow: hidden;\n    box-shadow: 0 1px 3px rgba(0,0,0,0.06);\n  }\n\n  .calc-head {\n    background: var(--red);\n    color: var(--white);\n    padding: 24px 28px 20px;\n    text-align: center;\n  }\n\n  .calc-head .icon-wrap {\n    width: 48px;\n    height: 48px;\n    background: rgba(255,255,255,0.15);\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    margin: 0 auto 12px;\n  }\n\n  .calc-head .icon-wrap svg {\n    width: 24px;\n    height: 24px;\n  }\n\n  .calc-head h1 {\n    font-size: 1.25rem;\n    font-weight: 700;\n    letter-spacing: -0.01em;\n  }\n\n  .calc-head p {\n    font-size: 0.85rem;\n    opacity: 0.85;\n    margin-top: 4px;\n  }\n\n  .calc-body {\n    padding: 20px 24px 24px;\n  }\n\n  .row {\n    margin-bottom: 18px;\n  }\n\n  .row:last-child { margin-bottom: 0; }\n\n  .label {\n    font-size: 0.75rem;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: 0.04em;\n    color: var(--gray-500);\n    margin-bottom: 8px;\n  }\n\n  .label-row {\n    display: flex;\n    align-items: baseline;\n    justify-content: space-between;\n    margin-bottom: 8px;\n  }\n\n  .label-row label {\n    font-size: 0.75rem;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: 0.04em;\n    color: var(--gray-500);\n  }\n\n  .label-row .val {\n    font-size: 0.8rem;\n    font-weight: 600;\n    color: var(--red);\n  }\n\n  \/* Chip group *\/\n  .chip-group {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 6px;\n  }\n\n  .chip {\n    display: flex;\n    align-items: center;\n    gap: 6px;\n    padding: 7px 12px;\n    border: 1px solid var(--gray-200);\n    border-radius: 6px;\n    cursor: pointer;\n    transition: all 0.12s;\n    background: var(--white);\n    font-size: 0.82rem;\n    font-weight: 500;\n    color: var(--gray-600);\n  }\n\n  .chip:hover {\n    border-color: var(--gray-400);\n  }\n\n  .chip.active {\n    border-color: var(--red);\n    background: var(--red-light);\n    color: var(--red-dark);\n  }\n\n  \/* Custom kw inline *\/\n  .custom-kw-row {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    margin-top: 10px;\n  }\n\n  .custom-kw-row input[type=number] {\n    width: 88px;\n    padding: 7px 8px 7px 10px;\n    font-size: 0.9rem;\n    font-weight: 500;\n    border: 1px solid var(--gray-300);\n    border-radius: 6px;\n    outline: none;\n    transition: border-color 0.15s, box-shadow 0.15s;\n    font-family: inherit;\n    -moz-appearance: textfield;\n  }\n\n  .custom-kw-row input[type=number]::-webkit-inner-spin-button,\n  .custom-kw-row input[type=number]::-webkit-outer-spin-button {\n    opacity: 1;\n    height: 28px;\n  }\n\n  .custom-kw-row input[type=number]:focus {\n    border-color: var(--red);\n    box-shadow: 0 0 0 3px rgba(246,2,2,0.12);\n  }\n\n  .custom-kw-row span {\n    font-size: 0.75rem;\n    color: var(--gray-400);\n  }\n\n  \/* Range slider *\/\n  input[type=range] {\n    width: 100%;\n    -webkit-appearance: none;\n    appearance: none;\n    height: 6px;\n    border-radius: 99px;\n    background: var(--gray-200);\n    outline: none;\n  }\n\n  input[type=range]::-webkit-slider-thumb {\n    -webkit-appearance: none;\n    appearance: none;\n    width: 20px;\n    height: 20px;\n    border-radius: 50%;\n    background: var(--red);\n    border: 3px solid #fff;\n    box-shadow: 0 1px 4px rgba(0,0,0,.25);\n    cursor: pointer;\n  }\n\n  input[type=range]::-moz-range-thumb {\n    width: 20px;\n    height: 20px;\n    border-radius: 50%;\n    background: var(--red);\n    border: 3px solid #fff;\n    box-shadow: 0 1px 4px rgba(0,0,0,.25);\n    cursor: pointer;\n  }\n\n  .hint {\n    font-size: 0.72rem;\n    color: var(--gray-400);\n    margin-top: 6px;\n    line-height: 1.5;\n  }\n\n  \/* Checkbox *\/\n  .checkbox-row {\n    display: flex;\n    align-items: flex-start;\n    gap: 10px;\n    cursor: pointer;\n    font-size: 0.82rem;\n    font-weight: 500;\n    color: var(--gray-700);\n    line-height: 1.4;\n  }\n\n  .checkbox-row input[type=checkbox] {\n    margin-top: 2px;\n    width: 16px;\n    height: 16px;\n    accent-color: var(--red);\n    flex-shrink: 0;\n    cursor: pointer;\n  }\n\n  \/* Advanced toggle *\/\n  .advanced-toggle {\n    font-size: 0.78rem;\n    font-weight: 600;\n    color: var(--gray-500);\n    cursor: pointer;\n    display: flex;\n    align-items: center;\n    gap: 6px;\n    user-select: none;\n    margin-top: 4px;\n  }\n\n  .advanced-toggle .arrow {\n    transition: transform .15s ease;\n    display: inline-block;\n  }\n\n  .advanced-toggle.open .arrow {\n    transform: rotate(90deg);\n  }\n\n  .advanced-body {\n    display: none;\n    margin-top: 12px;\n    padding: 12px;\n    border-radius: var(--radius);\n    background: var(--gray-50);\n    border: 1px solid var(--gray-200);\n  }\n\n  .advanced-body.open {\n    display: block;\n  }\n\n  .advanced-body p {\n    font-size: 0.72rem;\n    color: var(--gray-500);\n    line-height: 1.5;\n    margin: 0 0 12px;\n  }\n\n  \/* Price row *\/\n  .price-row {\n    display: flex;\n    gap: 10px;\n  }\n\n  .price-row select {\n    padding: 8px;\n    font-size: 0.82rem;\n    font-weight: 500;\n    border: 1px solid var(--gray-300);\n    border-radius: 6px;\n    background: var(--white);\n    color: var(--gray-700);\n    font-family: inherit;\n    outline: none;\n    transition: border-color 0.15s;\n  }\n\n  .price-row select:focus {\n    border-color: var(--red);\n    box-shadow: 0 0 0 3px rgba(246,2,2,0.12);\n  }\n\n  .price-row input[type=number] {\n    flex: 1;\n    padding: 8px 10px;\n    font-size: 0.9rem;\n    font-weight: 500;\n    border: 1px solid var(--gray-300);\n    border-radius: 6px;\n    outline: none;\n    transition: border-color 0.15s, box-shadow 0.15s;\n    font-family: inherit;\n  }\n\n  .price-row input[type=number]:focus {\n    border-color: var(--red);\n    box-shadow: 0 0 0 3px rgba(246,2,2,0.12);\n  }\n\n  \/* Divider *\/\n  .divider {\n    height: 1px;\n    background: var(--gray-200);\n    margin: 18px 0;\n  }\n\n  \/* Result area *\/\n  .result-area {\n    background: var(--red-bg);\n    border: 1px solid rgba(246,2,2,0.12);\n    border-radius: var(--radius);\n    padding: 20px;\n  }\n\n  .stat-grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 10px;\n  }\n\n  .stat {\n    background: var(--white);\n    border: 1px solid var(--gray-200);\n    border-radius: var(--radius);\n    padding: 14px;\n    text-align: center;\n  }\n\n  .stat .n {\n    font-size: 1.6rem;\n    font-weight: 800;\n    color: var(--gray-900);\n    line-height: 1;\n    letter-spacing: -0.02em;\n  }\n\n  .stat .n span {\n    font-size: 0.72rem;\n    font-weight: 600;\n    color: var(--gray-400);\n    display: block;\n    margin-top: 2px;\n  }\n\n  .stat .l {\n    font-size: 0.65rem;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: 0.04em;\n    color: var(--gray-400);\n    margin-top: 6px;\n  }\n\n  .stat.hero {\n    grid-column: 1 \/ -1;\n    background: var(--red);\n    color: #fff;\n    border: none;\n  }\n\n  .stat.hero .n {\n    color: #fff;\n    font-size: 2rem;\n  }\n\n  .stat.hero .n span {\n    color: rgba(255,255,255,0.75);\n    display: inline;\n    margin-left: 4px;\n    font-size: 0.9rem;\n  }\n\n  .stat.hero .l {\n    color: rgba(255,255,255,0.8);\n  }\n\n  .cost-block {\n    display: none;\n    grid-template-columns: 1fr 1fr;\n    gap: 10px;\n    margin-top: 12px;\n  }\n\n  .cost-block.show {\n    display: grid;\n  }\n\n  .cost-block .stat .n {\n    color: var(--red);\n  }\n\n  \/* Gauge card *\/\n  .gauge-card {\n    background: var(--white);\n    border: 1px solid var(--gray-200);\n    border-radius: var(--radius);\n    padding: 16px;\n    margin-top: 14px;\n    text-align: center;\n  }\n\n  .gauge-title {\n    font-size: 0.7rem;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: 0.04em;\n    color: var(--gray-500);\n    margin-bottom: 12px;\n  }\n\n  .stones {\n    display: flex;\n    justify-content: center;\n    gap: 8px;\n    margin-bottom: 12px;\n  }\n\n  .stones svg {\n    width: 44px;\n    height: auto;\n  }\n\n  .gauge-caption {\n    font-size: 0.78rem;\n    color: var(--gray-500);\n    line-height: 1.5;\n  }\n\n  .gauge-caption b {\n    color: var(--gray-800);\n    font-weight: 700;\n  }\n\n  .compare-chips {\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: center;\n    gap: 6px;\n    margin-top: 10px;\n  }\n\n  .compare-chip {\n    font-size: 0.72rem;\n    padding: 5px 10px;\n    border-radius: 99px;\n    background: var(--gray-50);\n    border: 1px solid var(--gray-200);\n    color: var(--gray-500);\n  }\n\n  .compare-chip b {\n    color: var(--red);\n    font-weight: 700;\n  }\n\n  \/* Table *\/\n  .table-wrap {\n    padding: 20px 24px 24px;\n  }\n\n  .table-title {\n    font-size: 1rem;\n    font-weight: 700;\n    color: var(--gray-800);\n    margin: 0 0 2px;\n  }\n\n  .table-sub {\n    font-size: 0.75rem;\n    color: var(--gray-400);\n    margin: 0 0 16px;\n  }\n\n  table {\n    width: 100%;\n    border-collapse: collapse;\n    font-size: 0.82rem;\n  }\n\n  thead th {\n    text-align: left;\n    font-size: 0.65rem;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: 0.04em;\n    color: var(--gray-400);\n    padding: 0 10px 10px;\n    border-bottom: 1px solid var(--gray-200);\n  }\n\n  tbody td {\n    padding: 10px;\n    border-bottom: 1px solid var(--gray-200);\n    font-weight: 500;\n    color: var(--gray-700);\n  }\n\n  tbody tr.match {\n    background: var(--red-light);\n  }\n\n  tbody tr.match td:first-child {\n    color: var(--red);\n    font-weight: 700;\n  }\n\n  tbody tr:last-child td {\n    border-bottom: none;\n  }\n\n  .disclaimer {\n    padding: 16px 24px 24px;\n    font-size: 0.68rem;\n    color: var(--gray-400);\n    line-height: 1.6;\n  }\n\n  .sauna-branding {\n    text-align: center;\n    padding: 12px 0 4px;\n    opacity: 0.35;\n  }\n\n  @media (max-width: 540px) {\n    .calc-body { padding: 16px; }\n    .calc-head { padding: 20px 16px 16px; }\n    .table-wrap { padding: 16px; }\n    .disclaimer { padding: 12px 16px 16px; }\n    .stat .n { font-size: 1.3rem; }\n    .stat.hero .n { font-size: 1.6rem; }\n    .stat-grid { gap: 6px; }\n    .stat { padding: 10px; }\n    .stones svg { width: 36px; }\n  }\n<\/style>\n<\/head>\n<body>\n\n<div class=\"calc-wrap\">\n  <div class=\"calc-card\">\n    <div class=\"calc-head\">\n      <div class=\"icon-wrap\">\n        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n          <path d=\"M12 20h.01\"\/><path d=\"M12 14h.01\"\/><path d=\"M12 8h.01\"\/><path d=\"M4 4l16 16\"\/><path d=\"M9.21 3.1A6.98 6.98 0 0 1 19 8c0 3.5-2 6.5-5 7.5\"\/>\n        <\/svg>\n      <\/div>\n      <h1>Sauna Power Consumption &amp; Cost Calculator<\/h1>\n      <p>Find out how many kWh your sauna sessions add up to \u2014 and what that costs<\/p>\n    <\/div>\n\n    <div class=\"calc-body\">\n\n      <!-- Heater Size -->\n      <div class=\"row\">\n        <div class=\"label-row\">\n          <label>Heater size<\/label>\n          <span class=\"val\" id=\"kwVal\">6 kW<\/span>\n        <\/div>\n        <div class=\"chip-group\" id=\"kwChips\"><\/div>\n        <div class=\"custom-kw-row\">\n          <input type=\"number\" id=\"kwCustom\" step=\"0.1\" min=\"0.5\" max=\"30\" placeholder=\"\">\n          <span>kW \u2014 don&#8217;t see your size? Type it in<\/span>\n        <\/div>\n      <\/div>\n\n      <!-- Heat-up time -->\n      <div class=\"row\">\n        <div class=\"label-row\">\n          <label>Heat-up time<\/label>\n          <span class=\"val\" id=\"heatupVal\">30 min<\/span>\n        <\/div>\n        <input type=\"range\" id=\"heatup\" min=\"15\" max=\"45\" step=\"5\" value=\"30\">\n        <p class=\"hint\">Time to bring the room up to temperature \u2014 runs at close to full power.<\/p>\n      <\/div>\n\n      <!-- Soak time -->\n      <div class=\"row\">\n        <div class=\"label-row\">\n          <label>Time spent in the sauna<\/label>\n          <span class=\"val\" id=\"soakVal\">45 min<\/span>\n        <\/div>\n        <input type=\"range\" id=\"soak\" min=\"15\" max=\"120\" step=\"5\" value=\"45\">\n        <p class=\"hint\">Once at temperature, the thermostat cycles the heater on and off \u2014 average draw drops well below the rated kW.<\/p>\n      <\/div>\n\n      <!-- Sessions per week -->\n      <div class=\"row\">\n        <div class=\"label-row\">\n          <label>Sessions per week<\/label>\n          <span class=\"val\" id=\"freqVal\">2\u00d7<\/span>\n        <\/div>\n        <input type=\"range\" id=\"freq\" min=\"1\" max=\"14\" step=\"1\" value=\"2\">\n      <\/div>\n\n      <!-- Weeks per year -->\n      <div class=\"row\">\n        <div class=\"label-row\">\n          <label>Weeks used per year<\/label>\n          <span class=\"val\" id=\"weeksVal\">52<\/span>\n        <\/div>\n        <input type=\"range\" id=\"weeks\" min=\"1\" max=\"52\" step=\"1\" value=\"52\">\n      <\/div>\n\n      <!-- Outdoor checkbox -->\n      <div class=\"row\">\n        <label class=\"checkbox-row\" for=\"outdoor\">\n          <input type=\"checkbox\" id=\"outdoor\">\n          <span>Outdoor sauna or below-average insulation <span style=\"font-weight:400;color:var(--gray-400);\">(+25% energy)<\/span><\/span>\n        <\/label>\n      <\/div>\n\n      <!-- Advanced toggle -->\n      <div class=\"row\">\n        <div class=\"advanced-toggle\" id=\"advToggle\"><span class=\"arrow\">\u25b8<\/span> Advanced: power draw by phase<\/div>\n        <div class=\"advanced-body\" id=\"advBody\">\n          <p>A heater doesn&#8217;t draw its full rated kW for the whole session \u2014 it runs hardest while bringing the room up to temperature, then cycles down to hold it. Adjust these if you know your heater&#8217;s real behavior; the defaults are a solid general estimate.<\/p>\n          <div class=\"label-row\" style=\"margin-bottom:12px;\">\n            <label>Draw while heating up<\/label>\n            <span class=\"val\" id=\"heatupPctVal\">100%<\/span>\n          <\/div>\n          <input type=\"range\" id=\"heatupPct\" min=\"80\" max=\"100\" step=\"5\" value=\"100\" style=\"margin-bottom:16px;\">\n          <div class=\"label-row\" style=\"margin-bottom:12px;\">\n            <label>Draw while holding temperature<\/label>\n            <span class=\"val\" id=\"maintainPctVal\">50%<\/span>\n          <\/div>\n          <input type=\"range\" id=\"maintainPct\" min=\"30\" max=\"70\" step=\"5\" value=\"50\">\n        <\/div>\n      <\/div>\n\n      <!-- Electricity price -->\n      <div class=\"row\">\n        <div class=\"label\" style=\"margin-bottom:6px;\">Electricity price <span style=\"font-weight:400;color:var(--gray-400);text-transform:none;\">(optional)<\/span><\/div>\n        <div class=\"price-row\">\n          <select id=\"currency\">\n            <option value=\"$\">$ USD<\/option>\n            <option value=\"\u20ac\">\u20ac EUR<\/option>\n            <option value=\"\u00a3\">\u00a3 GBP<\/option>\n            <option value=\"\u00a4\">\u00a4 other<\/option>\n          <\/select>\n          <input type=\"number\" id=\"price\" step=\"0.01\" min=\"0\" placeholder=\"e.g. 0.15 per kWh\">\n        <\/div>\n        <p class=\"hint\">Enter your rate per kWh to see estimated cost. Leave blank to skip.<\/p>\n        <p class=\"hint\" style=\"margin-top:4px;border-left:3px solid var(--red);padding-left:10px;\">Do you also pay a regional electricity distribution fee \/ grid charge on top of your base price? If so, please also include that in your input amount.<\/p>\n      <\/div>\n\n      <div class=\"divider\"><\/div>\n\n      <!-- RESULTS -->\n      <div class=\"result-area\">\n        <div class=\"stat-grid\">\n          <div class=\"stat hero\">\n            <div class=\"n\" id=\"outYear\">0 <span>kWh \/ year<\/span><\/div>\n            <div class=\"l\">Annual power consumption<\/div>\n          <\/div>\n          <div class=\"stat\">\n            <div class=\"n\" id=\"outSession\">0 <span>kWh<\/span><\/div>\n            <div class=\"l\">Per session<\/div>\n          <\/div>\n          <div class=\"stat\">\n            <div class=\"n\" id=\"outWeek\">0 <span>kWh<\/span><\/div>\n            <div class=\"l\">Per week<\/div>\n          <\/div>\n          <div class=\"stat\">\n            <div class=\"n\" id=\"outMonth\">0 <span>kWh<\/span><\/div>\n            <div class=\"l\">Per month<\/div>\n          <\/div>\n        <\/div>\n\n        <div class=\"cost-block\" id=\"costBlock\">\n          <div class=\"stat\">\n            <div class=\"n\" id=\"costMonth\">0<\/div>\n            <div class=\"l\">Per month<\/div>\n          <\/div>\n          <div class=\"stat\">\n            <div class=\"n\" id=\"costYear\">0<\/div>\n            <div class=\"l\">Per year<\/div>\n          <\/div>\n        <\/div>\n\n        <div class=\"gauge-card\">\n          <div class=\"gauge-title\">Kiuas glow \u2014 your usage, at a glance<\/div>\n          <div class=\"stones\" id=\"stones\"><\/div>\n          <div class=\"gauge-caption\" id=\"gaugeCaption\">Fill in your details to see how your annual usage stacks up.<\/div>\n          <div class=\"compare-chips\" id=\"compareChips\"><\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- Table -->\n    <div class=\"table-wrap\">\n      <p class=\"table-title\">Same routine, different heater sizes<\/p>\n      <p class=\"table-sub\">Using your heat-up time, soak time, frequency, and weeks per year \u2014 how the numbers shift with heater size.<\/p>\n      <table>\n        <thead>\n          <tr><th>Heater<\/th><th>kWh \/ month<\/th><th>kWh \/ year<\/th><th id=\"costColHead\" style=\"display:none;\">Est. cost \/ year<\/th><\/tr>\n        <\/thead>\n        <tbody id=\"sizeTable\"><\/tbody>\n      <\/table>\n    <\/div>\n\n    <div class=\"disclaimer\">\n      Estimates only. Actual consumption depends on your heater&#8217;s real thermostat behavior, room insulation, climate, and how it&#8217;s wired. We model consumption in two phases \u2014 heat-up (near full power) and holding temperature (roughly half power, cycling on and off) \u2014 with adjustable defaults under &#8220;Advanced.&#8221; Comparisons (refrigerator-years, EV charges, laundry loads) use rough global averages for context only, not precise figures for your region.\n    <\/div>\n\n    <div class=\"sauna-branding\">\n      <a href=\"https:\/\/saunazilla.com\" target=\"_blank\" rel=\"noopener\" style=\"display:inline-block\">\n        <img decoding=\"async\" src=\"https:\/\/saunazilla.com\/wp-content\/uploads\/2024\/02\/Saunazilla-dark-red.png\" alt=\"Saunazilla\" style=\"height:18px;width:auto;display:block\">\n      <\/a>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\nconst kwSizes = [3, 4.5, 6, 8, 9, 10.5, 12, 15, 18];\nlet selectedKw = 6;\n\nconst kwChips = document.getElementById('kwChips');\nkwSizes.forEach(kw=>{\n  const b = document.createElement('div');\n  b.className = 'chip' + (kw===selectedKw ? ' active':'');\n  b.textContent = kw + ' kW';\n  b.dataset.kw = kw;\n  b.addEventListener('click', ()=>{\n    selectedKw = kw;\n    document.getElementById('kwCustom').value = '';\n    [...kwChips.children].forEach(c=>c.classList.toggle('active', parseFloat(c.dataset.kw)===kw));\n    calc();\n  });\n  kwChips.appendChild(b);\n});\n\ndocument.getElementById('kwCustom').addEventListener('input', e=>{\n  const v = parseFloat(e.target.value);\n  if(v>0){\n    selectedKw = v;\n    [...kwChips.children].forEach(c=>c.classList.remove('active'));\n    calc();\n  }\n});\n\nconst heatup = document.getElementById('heatup');\nconst soak = document.getElementById('soak');\nconst freq = document.getElementById('freq');\nconst weeks = document.getElementById('weeks');\nconst heatupPct = document.getElementById('heatupPct');\nconst maintainPct = document.getElementById('maintainPct');\nconst outdoor = document.getElementById('outdoor');\nconst price = document.getElementById('price');\nconst currency = document.getElementById('currency');\n\n[heatup,soak,freq,weeks,heatupPct,maintainPct,outdoor,price,currency].forEach(el=>el.addEventListener('input', calc));\n\nconst advToggle = document.getElementById('advToggle');\nconst advBody = document.getElementById('advBody');\nadvToggle.addEventListener('click', ()=>{\n  advToggle.classList.toggle('open');\n  advBody.classList.toggle('open');\n});\n\nfunction fmt(n, d=1){\n  if(n>=1000) return n.toLocaleString(undefined,{maximumFractionDigits:0});\n  return n.toLocaleString(undefined,{maximumFractionDigits:d});\n}\n\nfunction buildStones(){\n  const wrap = document.getElementById('stones');\n  wrap.innerHTML = '';\n  for(let i=0;i<5;i++){\n    const svg = document.createElementNS('http:\/\/www.w3.org\/2000\/svg','svg');\n    svg.setAttribute('viewBox','0 0 60 60');\n    svg.innerHTML = `\n      <circle cx=\"30\" cy=\"34\" r=\"22\" fill=\"#E5E5E5\" \/>\n      <circle class=\"glow\" cx=\"30\" cy=\"34\" r=\"22\" fill=\"url(#g${i})\" opacity=\"0\" \/>\n      <defs>\n        <radialGradient id=\"g${i}\" cx=\"35%\" cy=\"30%\" r=\"75%\">\n          <stop offset=\"0%\" stop-color=\"#FF6B6B\"\/>\n          <stop offset=\"55%\" stop-color=\"#F60202\"\/>\n          <stop offset=\"100%\" stop-color=\"#C20000\"\/>\n        <\/radialGradient>\n      <\/defs>`;\n    wrap.appendChild(svg);\n  }\n}\nbuildStones();\n\nfunction calc(){\n  const kw = selectedKw;\n  const heatupMin = parseFloat(heatup.value);\n  const soakMin = parseFloat(soak.value);\n  const f = parseFloat(freq.value);\n  const w = parseFloat(weeks.value);\n  const hp = parseFloat(heatupPct.value)\/100;\n  const mp = parseFloat(maintainPct.value)\/100;\n  const outdoorMult = outdoor.checked ? 1.25 : 1;\n  const p = parseFloat(price.value);\n  const cur = currency.value;\n\n  document.getElementById('kwVal').textContent = kw + ' kW';\n  document.getElementById('heatupVal').textContent = heatupMin + ' min';\n  document.getElementById('soakVal').textContent = soakMin + ' min';\n  document.getElementById('freqVal').textContent = f + '\u00d7';\n  document.getElementById('weeksVal').textContent = w;\n  document.getElementById('heatupPctVal').textContent = heatupPct.value + '%';\n  document.getElementById('maintainPctVal').textContent = maintainPct.value + '%';\n\n  const perSession = (kw*(heatupMin\/60)*hp + kw*(soakMin\/60)*mp) * outdoorMult;\n  const perWeek = perSession * f;\n  const perMonth = perWeek * (w\/12);\n  const perYear = perWeek * w;\n\n  document.getElementById('outSession').innerHTML = fmt(perSession,1) + ' <span>kWh<\/span>';\n  document.getElementById('outWeek').innerHTML = fmt(perWeek,1) + ' <span>kWh<\/span>';\n  document.getElementById('outMonth').innerHTML = fmt(perMonth,1) + ' <span>kWh<\/span>';\n  document.getElementById('outYear').innerHTML = fmt(perYear,0) + ' <span>kWh \/ year<\/span>';\n\n  const costBlock = document.getElementById('costBlock');\n  const costCol = document.getElementById('costColHead');\n  if(p > 0){\n    costBlock.classList.add('show');\n    costCol.style.display = '';\n    document.getElementById('costMonth').textContent = cur + fmt(perMonth*p,2);\n    document.getElementById('costYear').textContent = cur + fmt(perYear*p,2);\n  } else {\n    costBlock.classList.remove('show');\n    costCol.style.display = 'none';\n  }\n\n  \/\/ glow gauge \u2014 scale against a 1200 kWh\/yr ceiling\n  const frac = Math.min(perYear\/1200, 1);\n  const stones = document.querySelectorAll('#stones svg .glow');\n  stones.forEach((s,i)=>{\n    const local = Math.max(0, Math.min(1, frac*5 - i));\n    s.setAttribute('opacity', local);\n  });\n\n  const fridgeYears = perYear\/400;\n  const evCharges = perYear\/60;\n  const dryerLoads = perYear\/3;\n  document.getElementById('gaugeCaption').innerHTML =\n    `At this pace, your sauna uses about <b>${fmt(perYear,0)} kWh<\/b> a year.`;\n  document.getElementById('compareChips').innerHTML = `\n    <span class=\"compare-chip\">\u2248 <b>${fmt(fridgeYears,1)}<\/b> years of running a fridge<\/span>\n    <span class=\"compare-chip\">\u2248 <b>${fmt(evCharges,1)}<\/b> full EV charges<\/span>\n    <span class=\"compare-chip\">\u2248 <b>${fmt(dryerLoads,0)}<\/b> dryer loads<\/span>\n  `;\n\n  buildTable(heatupMin,soakMin,hp,mp,outdoorMult,f,w,p,cur,kw);\n}\n\nfunction buildTable(heatupMin,soakMin,hp,mp,outdoorMult,f,w,p,cur,activeKw){\n  const tbody = document.getElementById('sizeTable');\n  tbody.innerHTML = '';\n  kwSizes.forEach(kw=>{\n    const perSession = (kw*(heatupMin\/60)*hp + kw*(soakMin\/60)*mp) * outdoorMult;\n    const perWeek = perSession*f;\n    const perMonth = perWeek*(w\/12);\n    const perYear = perWeek*w;\n    const tr = document.createElement('tr');\n    if(Math.abs(kw-activeKw)<0.01) tr.className='match';\n    tr.innerHTML = `\n      <td>${kw} kW<\/td>\n      <td>${fmt(perMonth,0)}<\/td>\n      <td>${fmt(perYear,0)}<\/td>\n      <td style=\"display:${p>0?'':'none'}\">${p>0?cur+fmt(perYear*p,0):''}<\/td>\n    `;\n    tbody.appendChild(tr);\n  });\n  document.getElementById('costColHead').style.display = p>0 ? '' : 'none';\n}\n\ncalc();\n<\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>How much electricity does your sauna heater consume per year? And how much does it actually cost you? Find out right here. You might have already used our sauna heater size calculator and now want to find out about the heater&#8217;s costs. Please note, that even though this gets fairly advanced, it can still only [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":32944,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-templates\/alasivu.php","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-32941","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/saunazilla.com\/en\/wp-json\/wp\/v2\/pages\/32941","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/saunazilla.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/saunazilla.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/saunazilla.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/saunazilla.com\/en\/wp-json\/wp\/v2\/comments?post=32941"}],"version-history":[{"count":8,"href":"https:\/\/saunazilla.com\/en\/wp-json\/wp\/v2\/pages\/32941\/revisions"}],"predecessor-version":[{"id":32966,"href":"https:\/\/saunazilla.com\/en\/wp-json\/wp\/v2\/pages\/32941\/revisions\/32966"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/saunazilla.com\/en\/wp-json\/wp\/v2\/media\/32944"}],"wp:attachment":[{"href":"https:\/\/saunazilla.com\/en\/wp-json\/wp\/v2\/media?parent=32941"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}