{"id":33012,"date":"2026-07-20T17:46:43","date_gmt":"2026-07-20T17:46:43","guid":{"rendered":"https:\/\/saunazilla.com\/?page_id=33012"},"modified":"2026-07-20T17:51:31","modified_gmt":"2026-07-20T17:51:31","slug":"sauna-bro-personality-test","status":"publish","type":"page","link":"https:\/\/saunazilla.com\/en\/sauna-bro-personality-test\/","title":{"rendered":"The Ultimate Sauna Bro Personality Test"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Think you know your sauna? Our (absolutely ridiculous) Sauna Bro personality test analyzes your <em>l\u00f6yly<\/em> confidence, bench dominance, towel stability, and completely unscientific sauna instincts. Answer a handful of absurd questions and receive a your official Sauna Bro assessment.<\/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 Bro Personality Test \u2014 Official Sauna Bro Assessment &#038; Certification<\/title>\n<meta name=\"description\" content=\"The internationally unrecognized Sauna Bro Personality Test: answer 7 scientific questions and receive your official Sauna Bro title, bro-quality metrics, achievements and certification. Accuracy: 107% (according to us).\">\n<link rel=\"canonical\" href=\"https:\/\/saunazilla.com\/sauna-bro-survey\/\">\n<meta property=\"og:type\" content=\"website\">\n<meta property=\"og:title\" content=\"Sauna Bro Personality Test \u2014 What Is Your Sauna Bro Type?\">\n<meta property=\"og:description\" content=\"Seven questions. One official assessment. Find out your Sauna Bro title, Steam Confidence and Grandpa Approval Rating.\">\n<meta property=\"og:url\" content=\"https:\/\/saunazilla.com\/sauna-bro-survey\/\">\n<meta name=\"twitter:card\" content=\"summary\">\n<meta name=\"twitter:title\" content=\"Sauna Bro Personality Test\">\n<meta name=\"twitter:description\" content=\"Get your official Sauna Bro Personality Assessment. Peer-reviewed by absolutely no one.\">\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"WebApplication\",\n  \"name\": \"Sauna Bro Personality Test\",\n  \"url\": \"https:\/\/saunazilla.com\/sauna-bro-survey\/\",\n  \"description\": \"A joke quiz that classifies you as an official Sauna Bro with a title, bro-quality progress bars, fake statistics, achievements and warnings.\",\n  \"applicationCategory\": \"GameApplication\",\n  \"operatingSystem\": \"Any\",\n  \"offers\": { \"@type\": \"Offer\", \"price\": \"0\", \"priceCurrency\": \"USD\" }\n}\n<\/script>\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What is the Sauna Bro Personality Test?\",\n      \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"The Sauna Bro Personality Test is a completely unserious quiz based on the internationally unrecognized Sauna Bro Index (SBI\\u2122). You answer seven ridiculous questions and receive an official-looking assessment: a Sauna Bro title, bro-quality metrics, achievements and certifications. It is 100% fake science.\" }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Is the Sauna Bro Assessment scientifically accurate?\",\n      \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"Our internal research indicates an accuracy of 107% (according to us). The assessment has not been evaluated by any actual institution, ministry or grandpa, although several grandpas were consulted informally.\" }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What is a Sauna Bro?\",\n      \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"A Sauna Bro is anyone who treats the sauna with the seriousness it deserves: respects the l\\u00f6yly, defends the top bench, and knows that 'it's not even that hot yet' is both a statement and a lifestyle.\" }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Can my Sauna Bro title be used officially?\",\n      \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"Your title (for example Chief L\\u00f6yly Officer, Class II) is recognized nowhere, but printing it on a towel is strongly encouraged. In Finland everyone is equal in the sauna \\u2014 titles stay outside the door.\" }\n    }\n  ]\n}\n<\/script>\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=Fraunces:ital,opsz,wght@0,9..144,600;1,9..144,600&#038;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    overflow-x: hidden;\n  }\n\n  .calc-wrap {\n    max-width: 480px;\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 { width: 24px; height: 24px; }\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 { padding: 20px 24px 24px; }\n\n  .screen { display: none; }\n  .screen.active { display: block; }\n\n  \/* ---- Intro screen ---- *\/\n  .intro-box {\n    background: var(--red-bg);\n    border: 1px solid rgba(246,2,2,0.12);\n    border-radius: var(--radius);\n    padding: 18px;\n    text-align: center;\n  }\n\n  .intro-box .institute {\n    font-size: 0.66rem;\n    font-weight: 700;\n    text-transform: uppercase;\n    letter-spacing: 0.1em;\n    color: var(--red-dark);\n    border: 1.5px solid var(--red-dark);\n    display: inline-block;\n    padding: 3px 10px;\n    border-radius: 20px;\n    transform: rotate(-2deg);\n    margin-bottom: 12px;\n  }\n\n  .intro-box h2 {\n    font-family: 'Fraunces', serif;\n    font-weight: 600;\n    font-size: 1.35rem;\n    color: var(--gray-900);\n    margin-bottom: 8px;\n  }\n\n  .intro-box p {\n    font-size: 0.83rem;\n    color: var(--gray-600);\n    line-height: 1.55;\n    margin-bottom: 10px;\n  }\n\n  .intro-box p:last-of-type { margin-bottom: 0; }\n\n  .intro-stats {\n    display: flex;\n    justify-content: center;\n    gap: 14px;\n    flex-wrap: wrap;\n    margin: 14px 0 4px;\n  }\n\n  .intro-stat {\n    background: var(--white);\n    border: 1px solid var(--gray-200);\n    border-radius: var(--radius);\n    padding: 8px 12px;\n    min-width: 96px;\n  }\n\n  .intro-stat .n {\n    font-size: 1.05rem;\n    font-weight: 800;\n    color: var(--red);\n  }\n\n  .intro-stat .l {\n    font-size: 0.6rem;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: 0.05em;\n    color: var(--gray-400);\n  }\n\n  .fine-print {\n    font-size: 0.66rem;\n    color: var(--gray-400);\n    margin-top: 12px;\n    line-height: 1.5;\n  }\n\n  \/* ---- Question screen ---- *\/\n  .progress-wrap { margin-bottom: 16px; }\n\n  .progress-meta {\n    display: flex;\n    justify-content: space-between;\n    font-size: 0.66rem;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: 0.05em;\n    color: var(--gray-400);\n    margin-bottom: 6px;\n  }\n\n  .progress-meta .q-cat { color: var(--red-dark); }\n\n  .progress-track {\n    height: 6px;\n    background: var(--gray-200);\n    border-radius: 99px;\n    overflow: hidden;\n  }\n\n  .progress-fill {\n    height: 100%;\n    background: linear-gradient(90deg, #FF6B6B, var(--red));\n    border-radius: 99px;\n    width: 0%;\n    transition: width 0.25s ease;\n  }\n\n  .question-card { min-height: 260px; }\n\n  .question-text {\n    font-family: 'Fraunces', serif;\n    font-weight: 600;\n    font-size: 1.18rem;\n    line-height: 1.35;\n    color: var(--gray-900);\n    text-align: center;\n    margin-bottom: 16px;\n    min-height: 3.2em;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    padding: 0 4px;\n  }\n\n  .options { display: flex; flex-direction: column; gap: 8px; }\n\n  .opt-btn {\n    font-family: inherit;\n    text-align: left;\n    background: var(--white);\n    border: 1px solid var(--gray-200);\n    border-radius: var(--radius);\n    padding: 12px 14px;\n    font-size: 0.86rem;\n    font-weight: 500;\n    color: var(--gray-700);\n    cursor: pointer;\n    transition: border-color 0.12s ease, background 0.12s ease, transform 0.12s ease;\n    display: flex;\n    align-items: baseline;\n    gap: 10px;\n  }\n\n  .opt-btn .opt-letter {\n    flex: 0 0 auto;\n    font-size: 0.64rem;\n    font-weight: 800;\n    color: var(--red);\n    text-transform: uppercase;\n  }\n\n  .opt-btn:hover {\n    border-color: var(--red);\n    background: var(--red-light);\n    color: var(--gray-900);\n  }\n\n  .opt-btn:active { transform: translateY(1px) scale(0.99); }\n\n  .opt-btn.picked {\n    border-color: var(--red);\n    background: var(--red-light);\n    color: var(--red-dark);\n  }\n\n  \/* ---- Result stamp card ---- *\/\n  .result-area {\n    position: relative;\n    background: var(--red-bg);\n    border: 1px solid rgba(246,2,2,0.12);\n    border-radius: var(--radius);\n    padding: 26px 18px 20px;\n    text-align: center;\n    isolation: isolate;\n  }\n\n  .result-area::before,\n  .result-area::after {\n    content: \"\";\n    position: absolute;\n    left: 0; right: 0;\n    height: 12px;\n    background-image: radial-gradient(circle, var(--white) 5px, transparent 5.5px);\n    background-size: 18px 18px;\n    background-repeat: repeat-x;\n    background-position: center;\n  }\n  .result-area::before { top: -6px; }\n  .result-area::after { bottom: -6px; }\n\n  .stamp-label {\n    font-size: 10.5px;\n    letter-spacing: 0.12em;\n    text-transform: uppercase;\n    color: var(--red-dark);\n    font-weight: 700;\n    border: 1.5px solid var(--red-dark);\n    display: inline-block;\n    padding: 3px 10px;\n    border-radius: 20px;\n    transform: rotate(-2deg);\n    margin-bottom: 14px;\n  }\n\n  .title-display {\n    font-family: 'Fraunces', serif;\n    font-weight: 600;\n    font-size: clamp(24px, 6.5vw, 32px);\n    line-height: 1.15;\n    color: var(--gray-900);\n    padding: 0 6px;\n    overflow-wrap: break-word;\n    hyphens: auto;\n  }\n  .title-display .accent { color: var(--red); }\n  .title-display .class-sub {\n    display: block;\n    font-family: 'Noto Sans Display', sans-serif;\n    font-size: 0.42em;\n    font-weight: 600;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    color: var(--gray-500);\n    margin-top: 5px;\n  }\n\n  .verdict-text {\n    font-size: 0.83rem;\n    color: var(--gray-700);\n    line-height: 1.55;\n    margin-top: 12px;\n    text-align: left;\n  }\n\n  .verdict-text p { margin-bottom: 8px; }\n  .verdict-text p:last-child { margin-bottom: 0; }\n\n  .section-label {\n    font-size: 0.66rem;\n    font-weight: 700;\n    text-transform: uppercase;\n    letter-spacing: 0.06em;\n    color: var(--red-dark);\n    margin: 18px 0 10px;\n    text-align: left;\n  }\n\n  \/* ---- Metric bars ---- *\/\n  .metric { margin-bottom: 12px; text-align: left; }\n  .metric:last-child { margin-bottom: 0; }\n\n  .metric-head {\n    display: flex;\n    justify-content: space-between;\n    align-items: baseline;\n    gap: 8px;\n    margin-bottom: 4px;\n  }\n\n  .metric-name {\n    font-size: 0.72rem;\n    font-weight: 700;\n    text-transform: uppercase;\n    letter-spacing: 0.04em;\n    color: var(--gray-700);\n  }\n\n  .metric-pct {\n    font-size: 0.78rem;\n    font-weight: 800;\n    color: var(--red);\n    white-space: nowrap;\n  }\n\n  .metric-track {\n    height: 8px;\n    background: var(--gray-200);\n    border-radius: 99px;\n    overflow: hidden;\n  }\n\n  .metric-fill {\n    height: 100%;\n    width: 0%;\n    background: linear-gradient(90deg, #FF6B6B, var(--red) 60%, var(--red-dark));\n    border-radius: 99px;\n    transition: width 0.7s cubic-bezier(0.22, 1, 0.36, 1);\n  }\n\n  .metric-flavor {\n    font-size: 0.7rem;\n    color: var(--gray-400);\n    font-style: italic;\n    margin-top: 3px;\n  }\n\n  \/* ---- Report lists ---- *\/\n  .report-list { text-align: left; }\n\n  .report-item {\n    display: flex;\n    gap: 10px;\n    padding: 6px 4px;\n    border-top: 1px dashed rgba(194,0,0,0.18);\n    font-size: 0.8rem;\n    line-height: 1.45;\n    color: var(--gray-800);\n    font-weight: 500;\n    align-items: baseline;\n  }\n  .report-item:first-child { border-top: none; }\n\n  .report-item .mark {\n    flex: 0 0 auto;\n    font-weight: 800;\n  }\n  .report-item .mark.ok { color: var(--red); }\n  .report-item .mark.bad { color: var(--gray-400); }\n\n  .report-item .k {\n    color: var(--gray-500);\n    font-weight: 600;\n  }\n\n  \/* ---- Warning boxes ---- *\/\n  .warning-box {\n    text-align: left;\n    background: var(--white);\n    border: 1px solid var(--gray-200);\n    border-left: 3px solid var(--red);\n    border-radius: 6px;\n    padding: 9px 12px;\n    margin-bottom: 8px;\n  }\n  .warning-box:last-child { margin-bottom: 0; }\n\n  .warning-box .w-type {\n    font-size: 0.62rem;\n    font-weight: 800;\n    letter-spacing: 0.1em;\n    color: var(--red-dark);\n    text-transform: uppercase;\n  }\n\n  .warning-box .w-text {\n    font-size: 0.78rem;\n    color: var(--gray-700);\n    font-weight: 500;\n    margin-top: 2px;\n    line-height: 1.45;\n  }\n\n  \/* ---- Cursed outcome ---- *\/\n  .cursed-box {\n    text-align: center;\n    padding: 8px 4px;\n  }\n  .cursed-box .cursed-line {\n    font-family: 'Fraunces', serif;\n    font-weight: 600;\n    font-size: 1.25rem;\n    color: var(--gray-900);\n    margin-bottom: 8px;\n  }\n  .cursed-box .cursed-line .accent { color: var(--red); }\n  .cursed-box .cursed-sub {\n    font-size: 0.8rem;\n    color: var(--gray-500);\n  }\n\n  .dot-divider {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 6px;\n    margin: 16px 0 14px;\n    opacity: 0.6;\n  }\n  .dot-divider span {\n    width: 5px; height: 5px; border-radius: 50%; background: var(--red);\n  }\n  .dot-divider span:nth-child(2) { background: var(--gray-400); }\n\n  .actions {\n    display: flex;\n    gap: 10px;\n    justify-content: center;\n    flex-wrap: wrap;\n  }\n\n  button.primary, button.secondary {\n    font-family: 'Noto Sans Display', sans-serif;\n    font-weight: 700;\n    font-size: 0.9rem;\n    border: none;\n    cursor: pointer;\n    border-radius: var(--radius);\n    padding: 12px 22px;\n    transition: transform 0.12s ease, box-shadow 0.12s ease, background 0.12s ease;\n  }\n  button:active { transform: translateY(1px) scale(0.98); }\n\n  .primary {\n    background: var(--red);\n    color: #fff;\n    box-shadow: 0 8px 20px -8px rgba(246,2,2,0.5);\n  }\n  .primary:hover { background: var(--red-dark); }\n\n  .secondary {\n    background: var(--white);\n    color: var(--red-dark);\n    border: 1.5px solid var(--red-dark);\n  }\n  .secondary:hover { background: var(--red-light); }\n\n  .copied-msg {\n    font-size: 0.72rem;\n    color: var(--red-dark);\n    margin-top: 10px;\n    height: 14px;\n    opacity: 0;\n    transition: opacity 0.2s ease;\n  }\n  .copied-msg.show { opacity: 1; }\n\n  .share-box {\n    background: var(--gray-50);\n    border: 1px solid var(--gray-200);\n    border-radius: var(--radius);\n    padding: 14px 16px;\n    margin-top: 14px;\n    text-align: center;\n  }\n\n  .share-box .e-label {\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: 10px;\n  }\n\n  .share-row {\n    display: flex;\n    gap: 10px;\n    justify-content: center;\n    flex-wrap: wrap;\n  }\n\n  .share-btn {\n    width: 38px;\n    height: 38px;\n    border-radius: 50%;\n    border: 1.5px solid var(--gray-200);\n    background: #fff;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    cursor: pointer;\n    color: var(--gray-700);\n    transition: transform 0.12s ease, border-color 0.12s ease, color 0.12s ease;\n  }\n  .share-btn:hover {\n    border-color: var(--red);\n    color: var(--red);\n    transform: translateY(-2px);\n  }\n  .share-btn svg { width: 16px; height: 16px; }\n\n  .footnote {\n    font-size: 0.68rem;\n    color: var(--gray-400);\n    margin-top: 10px;\n    padding-top: 10px;\n    border-top: 1px solid var(--gray-200);\n  }\n\n  .start-row { margin-top: 16px; text-align: center; }\n\n  @media (prefers-reduced-motion: reduce) {\n    * { transition: none !important; }\n  }\n\n  @media (max-width: 480px) {\n    body { padding: 12px; }\n    .calc-body { padding: 16px 14px; }\n    .calc-head { padding: 20px 16px 16px; }\n    .calc-head p { font-size: 0.8rem; }\n    .title-display { font-size: clamp(22px, 7.2vw, 28px); }\n    .question-text { font-size: 1.05rem; }\n    .opt-btn { font-size: 0.8rem; padding: 11px 12px; }\n    .actions { flex-direction: column; }\n    .actions button { width: 100%; }\n    .intro-stats { gap: 8px; }\n    .intro-stat { min-width: 84px; padding: 7px 10px; }\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 2c1 3-2 4-2 7a4 4 0 0 0 8 0c0-1-.5-2-1-3\"\/>\n          <path d=\"M5 13h14v2a7 7 0 0 1-14 0v-2z\"\/>\n        <\/svg>\n      <\/div>\n      <h1>Sauna Bro Personality Test<\/h1>\n      <p>Seven questions. One official assessment. Zero science.<\/p>\n    <\/div>\n\n    <div class=\"calc-body\">\n\n      <!-- ============ SCREEN 1: INTRO ============ -->\n      <div class=\"screen active\" id=\"screenIntro\">\n        <div class=\"intro-box\">\n          <div class=\"institute\">Peer-Reviewed Saunazilla Laboratories<\/div>\n          <h2>Official Sauna Bro Assessment<\/h2>\n          <p>This survey is based on the internationally unrecognized <strong>Sauna Bro Index (SBI&trade;)<\/strong>, developed over decades of completely fictional research.<\/p>\n          <div class=\"intro-stats\">\n            <div class=\"intro-stat\"><div class=\"n\">107%<\/div><div class=\"l\">Accuracy*<\/div><\/div>\n            <div class=\"intro-stat\"><div class=\"n\">7<\/div><div class=\"l\">Questions<\/div><\/div>\n            <div class=\"intro-stat\"><div class=\"n\">0.7s<\/div><div class=\"l\">Analysis Time<\/div><\/div>\n          <\/div>\n          <p class=\"fine-print\">*According to us. Your answers will be evaluated with total confidence by an algorithm whose sole mission is to study sweaty people sitting on wooden benches.<\/p>\n        <\/div>\n        <div class=\"start-row\">\n          <button class=\"primary\" id=\"startBtn\">Begin the assessment<\/button>\n        <\/div>\n      <\/div>\n\n      <!-- ============ SCREEN 2: QUESTIONS ============ -->\n      <div class=\"screen\" id=\"screenQuiz\">\n        <div class=\"progress-wrap\">\n          <div class=\"progress-meta\">\n            <span class=\"q-cat\" id=\"qCategory\">Heat<\/span>\n            <span id=\"qCounter\">Question 1 \/ 7<\/span>\n          <\/div>\n          <div class=\"progress-track\"><div class=\"progress-fill\" id=\"progressFill\"><\/div><\/div>\n        <\/div>\n        <div class=\"question-card\">\n          <div class=\"question-text\" id=\"questionText\"><\/div>\n          <div class=\"options\" id=\"options\"><\/div>\n        <\/div>\n      <\/div>\n\n      <!-- ============ SCREEN 3: RESULT ============ -->\n      <div class=\"screen\" id=\"screenResult\">\n        <div class=\"result-area\">\n          <div class=\"stamp-label\" id=\"stampLabel\">Official Sauna Bro Assessment<\/div>\n\n          <div id=\"normalResult\">\n            <div class=\"title-display\" id=\"titleDisplay\"><\/div>\n            <div class=\"verdict-text\" id=\"verdictText\"><\/div>\n\n            <div class=\"section-label\">Bro-Quality Metrics<\/div>\n            <div id=\"metrics\"><\/div>\n\n            <div class=\"section-label\">Scientific Observations<\/div>\n            <div class=\"report-list\" id=\"stats\"><\/div>\n\n            <div class=\"section-label\">Achievements Unlocked<\/div>\n            <div class=\"report-list\" id=\"achievements\"><\/div>\n\n            <div class=\"section-label\">Bro Code Violations<\/div>\n            <div class=\"report-list\" id=\"violations\"><\/div>\n\n            <div class=\"section-label\">Official Notices<\/div>\n            <div id=\"warnings\"><\/div>\n          <\/div>\n\n          <div id=\"cursedResult\" style=\"display:none\">\n            <div class=\"cursed-box\" id=\"cursedBox\"><\/div>\n          <\/div>\n\n          <div class=\"dot-divider\"><span><\/span><span><\/span><span><\/span><\/div>\n\n          <div class=\"actions\">\n            <button class=\"primary\" id=\"retake\">Retake survey<\/button>\n            <button class=\"secondary\" id=\"copy\">Copy result<\/button>\n          <\/div>\n          <div class=\"copied-msg\" id=\"copiedMsg\">Copied to clipboard<\/div>\n        <\/div>\n\n        <!-- SHARE -->\n        <div class=\"share-box\">\n          <div class=\"e-label\">Share your assessment<\/div>\n          <div class=\"share-row\">\n            <button class=\"share-btn\" id=\"shareX\" title=\"Share on X\" aria-label=\"Share on X\">\n              <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M18.9 2H22l-7.4 8.5L23.3 22H16.7l-5.2-6.8L5.5 22H2.4l7.9-9.1L1.7 2h6.8l4.7 6.2L18.9 2Zm-1.2 18h1.7L7.4 3.9H5.6L17.7 20Z\"\/><\/svg>\n            <\/button>\n            <button class=\"share-btn\" id=\"shareFb\" title=\"Share on Facebook\" aria-label=\"Share on Facebook\">\n              <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M13.5 22v-8.4h2.8l.4-3.3h-3.2V8.1c0-.9.3-1.6 1.7-1.6h1.7V3.5c-.3 0-1.3-.1-2.5-.1-2.5 0-4.2 1.5-4.2 4.3v2.4H7.5v3.3h2.7V22h3.3Z\"\/><\/svg>\n            <\/button>\n            <button class=\"share-btn\" id=\"shareWa\" title=\"Share on WhatsApp\" aria-label=\"Share on WhatsApp\">\n              <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M17 14.2c-.3-.1-1.6-.8-1.9-.9-.2-.1-.4-.1-.6.1-.2.3-.7.9-.8 1-.2.2-.3.2-.5.1-.3-.1-1.2-.4-2.2-1.4-.8-.7-1.4-1.6-1.5-1.9-.2-.3 0-.5.1-.6l.4-.5c.1-.1.2-.3.2-.4.1-.2 0-.3 0-.5l-.8-1.9c-.2-.5-.4-.4-.6-.4h-.5c-.2 0-.5.1-.7.3-.3.3-1 1-1 2.4s1 2.8 1.2 3c.1.2 2 3 4.8 4.3.7.3 1.2.5 1.6.6.7.2 1.3.2 1.8.1.5-.1 1.6-.7 1.9-1.3.2-.6.2-1.1.2-1.2 0-.2-.2-.2-.5-.4ZM12 2C6.5 2 2 6.5 2 12c0 1.8.5 3.5 1.3 5L2 22l5.2-1.4c1.4.8 3 1.2 4.8 1.2 5.5 0 10-4.5 10-10S17.5 2 12 2Zm0 18.2c-1.6 0-3.1-.4-4.4-1.2l-.3-.2-3.1.8.8-3-.2-.3C4 14.9 3.6 13.5 3.6 12c0-4.6 3.8-8.4 8.4-8.4s8.4 3.8 8.4 8.4-3.8 8.2-8.4 8.2Z\"\/><\/svg>\n            <\/button>\n            <button class=\"share-btn\" id=\"shareTumblr\" title=\"Share on Tumblr\" aria-label=\"Share on Tumblr\">\n              <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M14.6 21.8c-2.9.1-4.7-1.5-4.7-4.3v-6H7.2V8.1c2.4-.9 3.5-2.7 3.7-4.9h2.7v5h4v3.3h-4v5.1c0 1.5.8 2 2.1 2h1.9v3.2h-3z\"\/><\/svg>\n            <\/button>\n          <\/div>\n          <div class=\"footnote\">Issued by the Peer-Reviewed Saunazilla Laboratories. Recognized nowhere.<\/div>\n        <\/div>\n      <\/div>\n\n    <\/div>\n\n    <!-- Saunazilla -->\n    <div style=\"text-align:center;padding:12px 0 4px;opacity:0.35\">\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>\n\/* =========================================================\n   POOLS \u2014 edit freely, logic doesn't care\n   ========================================================= *\/\n\n\/\/ Each question: category, q text, 3 options (mild \u2192 proper \u2192 unhinged).\n\/\/ s = score added to [heat, dominance, chaos] axes when picked.\nconst QUESTION_POOL = [\n  \/\/ ---- Heat ----\n  { cat: \"Heat\", q: \"How hot should a sauna be?\",\n    opts: [\n      { t: \"Nice and cozy.\", s: [0,0,0] },\n      { t: \"Hot enough.\", s: [1,0,0] },\n      { t: \"If the thermometer isn't nervous, it's too cold.\", s: [2,1,1] }\n    ]},\n  { cat: \"Heat\", q: \"The steam feels weak. You...\",\n    opts: [\n      { t: \"Add one scoop.\", s: [0,0,0] },\n      { t: \"Add two scoops.\", s: [1,0,0] },\n      { t: \"Keep pouring until someone negotiates.\", s: [2,1,1] }\n    ]},\n  { cat: \"Heat\", q: \"Your eyebrows begin making life choices.\",\n    opts: [\n      { t: \"Time to leave.\", s: [0,0,0] },\n      { t: \"Time to endure.\", s: [1,0,0] },\n      { t: \"Time to add more water.\", s: [2,0,1] }\n    ]},\n  { cat: \"Heat\", q: \"Someone says \\\"It's getting a bit hot.\\\"\",\n    opts: [\n      { t: \"Fair enough.\", s: [0,0,0] },\n      { t: \"Skill issue.\", s: [1,1,0] },\n      { t: \"Increase the l\u00f6yly.\", s: [2,1,0] }\n    ]},\n  \/\/ ---- Bench Behavior ----\n  { cat: \"Bench Behavior\", q: \"The top bench is empty.\",\n    opts: [\n      { t: \"Sit there.\", s: [0,1,0] },\n      { t: \"Work your way up.\", s: [0,0,0] },\n      { t: \"Claim it like you've owned it for generations.\", s: [1,2,0] }\n    ]},\n  { cat: \"Bench Behavior\", q: \"A stranger sits unusually close.\",\n    opts: [\n      { t: \"Nod.\", s: [0,0,0] },\n      { t: \"Ignore them.\", s: [0,1,0] },\n      { t: \"Accept that this is now your sauna cousin.\", s: [0,1,1] }\n    ]},\n  { cat: \"Bench Behavior\", q: \"Your towel occupies half the bench.\",\n    opts: [\n      { t: \"Fold it.\", s: [0,0,0] },\n      { t: \"Leave it.\", s: [0,1,0] },\n      { t: \"Establish territorial dominance.\", s: [0,2,1] }\n    ]},\n  { cat: \"Bench Behavior\", q: \"Your favorite spot on the bench is taken.\",\n    opts: [\n      { t: \"Pick another.\", s: [0,0,0] },\n      { t: \"Wait patiently.\", s: [0,0,0] },\n      { t: \"Heat them into surrender.\", s: [2,2,0] }\n    ]},\n  \/\/ ---- Sauna Etiquette ----\n  { cat: \"Sauna Etiquette\", q: \"Someone keeps opening the door.\",\n    opts: [\n      { t: \"Mild annoyance.\", s: [0,0,0] },\n      { t: \"Deep disappointment.\", s: [0,1,0] },\n      { t: \"Put them on your black list.\", s: [0,2,0] }\n    ]},\n  { cat: \"Sauna Etiquette\", q: \"Talking during sauna?\",\n    opts: [\n      { t: \"A little is fine.\", s: [0,0,0] },\n      { t: \"Less is better.\", s: [0,1,0] },\n      { t: \"Silence has a heavenly sound.\", s: [0,1,1] }\n    ]},\n  { cat: \"Sauna Etiquette\", q: \"A phone appears.\",\n    opts: [\n      { t: \"Weird.\", s: [0,0,0] },\n      { t: \"Very weird.\", s: [0,1,0] },\n      { t: \"Straight to sauna jail.\", s: [0,2,0] }\n    ]},\n  { cat: \"Sauna Etiquette\", q: \"Someone asks if it's okay to throw more water.\",\n    opts: [\n      { t: \"Absolutely.\", s: [1,0,0] },\n      { t: \"Depends.\", s: [0,0,0] },\n      { t: \"The answer was yes before they asked.\", s: [2,0,1] }\n    ]},\n  \/\/ ---- Food & Drinks ----\n  { cat: \"Food & Drinks\", q: \"Post-sauna beverage?\",\n    opts: [\n      { t: \"Water.\", s: [0,0,0] },\n      { t: \"Beer.\", s: [0,1,0] },\n      { t: \"Two beers.\", s: [0,1,1] }\n    ]},\n  { cat: \"Food & Drinks\", q: \"You discover grilled sausages waiting outside.\",\n    opts: [\n      { t: \"Pretty nice.\", s: [0,0,0] },\n      { t: \"Outstanding.\", s: [0,0,0] },\n      { t: \"This was destiny.\", s: [0,0,1] }\n    ]},\n  { cat: \"Food & Drinks\", q: \"Snack inside the sauna?\",\n    opts: [\n      { t: \"Never.\", s: [0,0,0] },\n      { t: \"Maybe.\", s: [0,0,0] },\n      { t: \"Sausages, always.\", s: [0,1,1] }\n    ]},\n  \/\/ ---- Nature ----\n  { cat: \"Nature\", q: \"You see a hole in the frozen lake.\",\n    opts: [\n      { t: \"Think about plunging.\", s: [0,0,0] },\n      { t: \"Choose to plunge in.\", s: [1,0,0] },\n      { t: \"Already airborne.\", s: [2,0,1] }\n    ]},\n  { cat: \"Nature\", q: \"Winter outside the sauna.\",\n    opts: [\n      { t: \"Wear shoes.\", s: [0,0,0] },\n      { t: \"Sprint.\", s: [1,0,0] },\n      { t: \"Snow is just crunchy air.\", s: [2,0,1] }\n    ]},\n  { cat: \"Nature\", q: \"Mosquitoes appear.\",\n    opts: [\n      { t: \"Annoying.\", s: [0,0,0] },\n      { t: \"Ignore.\", s: [0,1,0] },\n      { t: \"They also came for the sauna.\", s: [0,0,1] }\n    ]},\n  \/\/ ---- Random Absurdity ----\n  { cat: \"Random Absurdity\", q: \"A reindeer enters the sauna.\",\n    opts: [\n      { t: \"Impossible.\", s: [0,0,0] },\n      { t: \"Accept the situation.\", s: [0,0,1] },\n      { t: \"Offer it a spot on the bench.\", s: [0,1,2] }\n    ]},\n  { cat: \"Random Absurdity\", q: \"The sauna elf asks for one scoop of water.\",\n    opts: [\n      { t: \"Certainly.\", s: [0,0,0] },\n      { t: \"Two scoops.\", s: [1,0,1] },\n      { t: \"Show the elf what you're made of.\", s: [2,1,1] }\n    ]},\n  { cat: \"Random Absurdity\", q: \"You find a perfectly folded towel with nobody around.\",\n    opts: [\n      { t: \"Leave it.\", s: [0,0,0] },\n      { t: \"Use it.\", s: [0,0,0] },\n      { t: \"It belongs to your Sauna Council.\", s: [0,1,2] }\n    ]},\n  { cat: \"Random Absurdity\", q: \"You sneeze during l\u00f6yly.\",\n    opts: [\n      { t: \"Apologize.\", s: [0,0,0] },\n      { t: \"Proceed.\", s: [0,0,0] },\n      { t: \"Call it steam propulsion.\", s: [1,0,2] }\n    ]},\n  \/\/ ---- Bro Science ----\n  { cat: \"Bro Science\", q: \"How many sauna sessions per week?\",\n    opts: [\n      { t: \"One or two.\", s: [0,0,0] },\n      { t: \"Several.\", s: [1,0,0] },\n      { t: \"My calendar revolves around them.\", s: [1,0,1] }\n    ]},\n  { cat: \"Bro Science\", q: \"Estimated hydration strategy.\",\n    opts: [\n      { t: \"Drink water.\", s: [0,0,0] },\n      { t: \"Drink lots of water.\", s: [0,0,0] },\n      { t: \"Become 99% water.\", s: [0,0,2] }\n    ]},\n  { cat: \"Bro Science\", q: \"Your resting sauna face is...\",\n    opts: [\n      { t: \"Peaceful.\", s: [0,0,0] },\n      { t: \"Stoic.\", s: [0,1,0] },\n      { t: \"Looking like you're a Viking leader about to go to war.\", s: [1,2,1] }\n    ]},\n  { cat: \"Bro Science\", q: \"How many times do you say \\\"One more round\\\"?\",\n    opts: [\n      { t: \"Once.\", s: [0,0,0] },\n      { t: \"Twice.\", s: [1,0,0] },\n      { t: \"Until someone physically drives me home.\", s: [1,0,2] }\n    ]},\n  \/\/ ---- Impossible Choices ----\n  { cat: \"Impossible Choices\", q: \"You may save only one.\",\n    opts: [\n      { t: \"The ladle.\", s: [1,0,0] },\n      { t: \"The towel.\", s: [0,0,0] },\n      { t: \"Your spot on the top bench.\", s: [0,2,0] }\n    ]},\n  { cat: \"Impossible Choices\", q: \"Your birch whisk gets a name.\",\n    opts: [\n      { t: \"Bj\u00f6rn.\", s: [0,0,0] },\n      { t: \"Sir Whacksalot.\", s: [0,0,1] },\n      { t: \"It names itself.\", s: [0,1,2] }\n    ]},\n  { cat: \"Impossible Choices\", q: \"A friend says 60\u00b0C\/140\u00b0F is enough.\",\n    opts: [\n      { t: \"Respectfully disagree.\", s: [1,0,0] },\n      { t: \"Laugh politely.\", s: [1,1,0] },\n      { t: \"Pretend you didn't hear them.\", s: [1,1,1] }\n    ]},\n  { cat: \"Impossible Choices\", q: \"The sauna spirit grants one blessing.\",\n    opts: [\n      { t: \"Infinite firewood.\", s: [1,0,0] },\n      { t: \"Endless cold drinks.\", s: [0,0,0] },\n      { t: \"Perfect l\u00f6yly forever.\", s: [2,0,1] }\n    ]}\n];\n\n\/\/ ---- Titles: picked by dominant axis (+ chaos override) ----\nconst TITLES = {\n  heat: [\n    \"Steam Wizard\", \"Thermal Menace\", \"Department of Excessive Heat\",\n    \"Heat Goblin Supreme\", \"CEO of L\u00f6yly\", \"Chief L\u00f6yly Officer\"\n  ],\n  dominance: [\n    \"Assistant Bench Captain\", \"Birch Commander\", \"Vice President of Sweating\",\n    \"Bench Philosopher\", \"Certified Sauna Unit\", \"Steam Accountant\"\n  ],\n  balanced: [\n    \"Sauna Goblin\", \"The Moist One\", \"Humidity Influencer\",\n    \"Steam Wizard\", \"Bench Philosopher\", \"Chief L\u00f6yly Officer\"\n  ],\n  chaos: [\n    \"Heat Goblin Supreme\", \"The Moist One\", \"Sauna Goblin\",\n    \"Thermal Menace\", \"Humidity Influencer\"\n  ]\n};\n\nconst TITLE_CLASSES = [\"Class III\", \"Class II\", \"Class I\", \"Grand Class\"];\n\n\/\/ ---- Verdict paragraphs (government-document serious) ----\nconst VERDICT_OPENERS = [\n  \"Following extensive analysis (lasting approximately 0.7 seconds), our algorithm has reached a conclusion it is extremely confident about.\",\n  \"Your responses were processed through the Sauna Bro Index (SBI\u2122) core algorithm, which wishes to state for the record that it has never been wrong.\",\n  \"Analysis complete. Independent reviewers were not consulted, but the algorithm remains fully confident.\"\n];\n\nconst VERDICT_HEAT_HIGH = \"Your steam generation falls within the \\\"aggressively enthusiastic\\\" range. Reviewers agree that you would almost certainly insist \\\"it's not even that hot yet\\\" moments before everyone else evacuates.\";\nconst VERDICT_HEAT_MID = \"Your heat preferences are respectable. You throw solid l\u00f6yly and the benches have formally noted your restraint.\";\nconst VERDICT_HEAT_LOW = \"Your heat tolerance remains within civilian parameters. The Institute encourages you to stay hydrated and stop apologizing to the thermometer.\";\nconst VERDICT_DOM_HIGH = \"You exhibit advanced Bench Confidence. Other sauna users unknowingly adjust their seating around you, and the top bench has begun referring to you as \\\"landlord\\\".\";\nconst VERDICT_DOM_MID = \"Your Bench Dominance is developing. You instinctively locate a good seat, though the optimal one continues to elude you by roughly 40 centimeters.\";\nconst VERDICT_DOM_LOW = \"Your bench behavior is polite to a degree that concerns our researchers. The lower bench appreciates you. Someone has to sit there.\";\nconst VERDICT_CHAOS_HIGH = \"Your responses contain patterns our models describe only as \\\"moist irregularity\\\". The Ministry of Heat has been notified as a precaution.\";\nconst VERDICT_CHAOS_MID = \"While your Steam Aggression remains within tolerances, your Snack Recovery Index is exceptional.\";\nconst VERDICT_CLOSERS = [\n  \"We estimate a 94% chance that you have said \\\"just one more round\\\" at least once in your life.\",\n  \"Your towel folding technique remains under investigation, but your commitment to unnecessary extra rounds has earned you a Gold-Level Moisture Certification.\",\n  \"The Institute reminds you that this classification is binding nowhere, but spiritually binding everywhere.\"\n];\n\n\/\/ ---- Bro-quality metrics: name + flavor lines by score band ----\nconst METRICS = [\n  {\n    name: \"Steam Confidence\",\n    bands: [\n      \"You ask permission before adding steam. Twice.\",\n      \"You throw respectable l\u00f6yly. The benches appreciate your restraint.\",\n      \"Your ladle hand has developed muscle memory.\",\n      \"Local humidity increases whenever you enter the building.\"\n    ]\n  },\n  {\n    name: \"Bench Dominance\",\n    bands: [\n      \"You sit wherever is free. Even by the door.\",\n      \"You instinctively locate a good seat within seconds.\",\n      \"Other sauna users unknowingly adjust their seating around you.\",\n      \"You radiate Upper Bench Energy.\"\n    ]\n  },\n  {\n    name: \"Grandpa Approval Rating\",\n    bands: [\n      \"One noncommittal grunt.\",\n      \"A slow nod.\",\n      \"\\\"Not bad.\\\"\",\n      \"You have earned the honorary title of \\\"That lad.\\\"\"\n    ]\n  },\n  {\n    name: \"Silent Brooding\",\n    bands: [\n      \"Comfortable silence.\",\n      \"Respectful silence.\",\n      \"Powerful silence.\",\n      \"Has intimidated entire changing rooms.\"\n    ]\n  },\n  {\n    name: \"Moisture Aura\",\n    bands: [\n      \"Dry. Plants avoid you.\",\n      \"Balanced. Healthy steam ecosystem.\",\n      \"Humid. Windows fog upon your arrival.\",\n      \"Legendary. Weather satellites have noticed.\"\n    ]\n  },\n  {\n    name: \"L\u00f6yly Accuracy\",\n    bands: [\n      \"Your steam timing is enthusiastic but harmless.\",\n      \"Your scoops arrive roughly when expected.\",\n      \"Your scoops arrive precisely when morale begins to drop.\",\n      \"Independent testing confirms you can smell dry air from another room.\"\n    ]\n  },\n  {\n    name: \"Towel Stability Index\",\n    bands: [\n      \"Folded.\",\n      \"Functional.\",\n      \"Hanging on through sheer determination.\",\n      \"Existing in multiple dimensions.\"\n    ]\n  },\n  {\n    name: \"Firewood Intuition\",\n    bands: [\n      \"You can identify firewood when labeled.\",\n      \"You can identify good firewood by looking at it.\",\n      \"You can identify good firewood by hearing it.\",\n      \"Trees become nervous when you walk past.\"\n    ]\n  },\n  {\n    name: \"Cold Plunge Commitment\",\n    bands: [\n      \"Carefully enters.\",\n      \"Jumps immediately.\",\n      \"Physics struggles to explain your enthusiasm.\",\n      \"The ice hole recognizes you.\"\n    ]\n  },\n  {\n    name: \"Probability of Secretly Owning an Axe\",\n    bands: [\n      \"Low. Suspiciously low.\",\n      \"Moderate. The shed is locked for a reason.\",\n      \"High. Neighbors have theories.\",\n      \"Confirmed. The axe also has a name.\"\n    ]\n  }\n];\n\n\/\/ ---- Fake statistics: [label, value] ----\nconst FAKE_STATS = [\n  [\"Average Sauna Duration\", \"4 hours 17 minutes\"],\n  [\"Average Number of \\\"Ahhh\\\"\", \"37\"],\n  [\"Estimated Water Consumption\", \"One lake.\"],\n  [\"Probability of Saying \\\"Now THIS is sauna.\\\"\", \"98%\"],\n  [\"Calories Burned\", \"Enough.\"],\n  [\"Calories Immediately Replaced\", \"Also enough.\"],\n  [\"Birch Leaf Compatibility\", \"47%\"],\n  [\"Estimated Nods Per Session\", \"12 respectful, 3 meaningful\"],\n  [\"Thermometer Trust Level\", \"Conditional\"],\n  [\"Towel Reuse Confidence\", \"High. Too high.\"]\n];\n\n\/\/ ---- Achievements ----\nconst ACHIEVEMENTS = [\n  \"Survived 13 imaginary sauna sessions.\",\n  \"Scared away one fake tourist.\",\n  \"Bench temperature increased by 2%.\",\n  \"Accidentally invented new steam.\",\n  \"Your towel has developed consciousness.\",\n  \"Nodded at a stranger. Stranger nodded back.\",\n  \"Opened and closed the door correctly. Twice.\",\n  \"Remained seated through someone else's story about CrossFit.\",\n  \"Reached the top bench without using your hands.\",\n  \"Said \\\"one more round\\\" and meant it.\"\n];\n\n\/\/ ---- Bro Code Violations ----\nconst VIOLATIONS = [\n  \"Looked at the thermometer too often.\",\n  \"Overthought the l\u00f6yly.\",\n  \"Left before becoming one with the steam.\",\n  \"Asked whose turn it was to throw water. It was yours.\",\n  \"Referred to the sauna as \\\"basically a hot room\\\".\",\n  \"Wore a swimsuit. The benches remember.\"\n];\nconst VIOLATION_PENALTIES = [\n  \"Penalty: You must nod respectfully at three strangers.\",\n  \"Penalty: One session on the lower bench. Reflect.\",\n  \"Penalty: You must refill the bucket without being asked.\"\n];\nconst NO_VIOLATIONS_TEXT = \"No violations detected. Suspicious. The Institute will monitor your future sauna activity.\";\n\n\/\/ ---- Certifications (one shown inside verdict closers is separate; list for copy text) ----\nconst CERTIFICATIONS = [\n  \"Certified Steam Enthusiast\", \"Licensed Bench Occupant\", \"Moisture Specialist\",\n  \"Level II L\u00f6yly Technician\", \"Senior Heat Consultant\", \"Professional Sweat Generator\",\n  \"Honorary Firewood Inspector\", \"Thermal Operations Supervisor\",\n  \"Department of Sauna Affairs Approved\", \"Official Birch Whisperer\",\n  \"Nordic Steam Associate\", \"Certified Wooden Bench Professional\"\n];\n\n\/\/ ---- Warnings ----\nconst WARNINGS = [\n  { type: \"NOTICE\", text: \"Your Steam Confidence exceeds recommended household limits.\" },\n  { type: \"WARNING\", text: \"Friends may begin asking you to \\\"handle the l\u00f6yly.\\\"\" },\n  { type: \"CAUTION\", text: \"Extended exposure to your sauna opinions may result in lengthy discussions about bench height.\" },\n  { type: \"ADVISORY\", text: \"You have reached Grandpa-Level Confidence without completing the required paperwork.\" },\n  { type: \"HEAT ALERT\", text: \"Local humidity may increase by up to 18% during your visit.\" },\n  { type: \"EU COMPLIANCE\", text: \"Your sauna behavior has not been evaluated for regulatory approval.\" },\n  { type: \"QUALITY CONTROL\", text: \"Your towel folding technique is currently under peer review.\" },\n  { type: \"SCIENTIFIC NOTE\", text: \"You appear to generate morale as a side effect of sweating.\" }\n];\n\n\/\/ ---- Cursed outcomes (~1 in 100) ----\nconst CURSED_OUTCOMES = [\n  { lines: [\"You are not a Sauna Bro.\", \"You ARE the sauna.\"], sub: \"The Institute has no protocol for this. Please stop radiating heat.\" },\n  { lines: [\"We've never seen answers like yours.\"], sub: \"We're forwarding this to the Ministry of Heat.\" },\n  { lines: [\"ERROR\"], sub: \"Your Steam Level exceeds EU regulations.\" }\n];\n\n\/\/ ---- Fake compatibility: shown as part of stats sometimes ----\nconst COMPATIBILITY = [\n  [\"Dad who never admits it's hot\", \"94%\"],\n  [\"Silent fisherman\", \"97%\"],\n  [\"Guy who throws way too much water\", \"61%\"],\n  [\"German tourist wearing flip-flops\", \"38%\"],\n  [\"Competitive CrossFit enthusiast\", \"12%\"],\n  [\"Someone who brought a Bluetooth speaker\", \"0%\"]\n];\n\n\/* =========================================================\n   HELPERS\n   ========================================================= *\/\nfunction rnd(arr){ return arr[Math.floor(Math.random() * arr.length)]; }\nfunction chance(p){ return Math.random() < p; }\nfunction shuffle(arr){ return arr.slice().sort(() => Math.random() - 0.5); }\n\nfunction pickQuestions(n){\n  \/\/ sample across categories so each run feels varied\n  const byCat = {};\n  QUESTION_POOL.forEach(q => { (byCat[q.cat] = byCat[q.cat] || []).push(q); });\n  const cats = shuffle(Object.keys(byCat));\n  const picked = [];\n  let ci = 0;\n  while (picked.length < n &#038;&#038; cats.length) {\n    const cat = cats[ci % cats.length];\n    const pool = byCat[cat].filter(q => !picked.includes(q));\n    if (pool.length) picked.push(rnd(pool));\n    else cats.splice(cats.indexOf(cat), 1);\n    ci++;\n  }\n  return picked;\n}\n\n\/* =========================================================\n   SURVEY FLOW\n   ========================================================= *\/\nconst QUESTIONS_PER_RUN = 7;\nconst BARS_SHOWN = 5;\n\nlet runQuestions = [];\nlet currentIndex = 0;\nlet scores = [0, 0, 0]; \/\/ heat, dominance, chaos\n\nconst screenIntro = document.getElementById('screenIntro');\nconst screenQuiz = document.getElementById('screenQuiz');\nconst screenResult = document.getElementById('screenResult');\n\nconst qCategory = document.getElementById('qCategory');\nconst qCounter = document.getElementById('qCounter');\nconst progressFill = document.getElementById('progressFill');\nconst questionText = document.getElementById('questionText');\nconst optionsEl = document.getElementById('options');\n\nfunction showScreen(el){\n  [screenIntro, screenQuiz, screenResult].forEach(s => s.classList.remove('active'));\n  el.classList.add('active');\n}\n\nfunction startSurvey(){\n  runQuestions = pickQuestions(QUESTIONS_PER_RUN);\n  currentIndex = 0;\n  scores = [0, 0, 0];\n  showScreen(screenQuiz);\n  renderQuestion();\n}\n\nfunction renderQuestion(){\n  const q = runQuestions[currentIndex];\n  qCategory.textContent = q.cat;\n  qCounter.textContent = \"Question \" + (currentIndex + 1) + \" \/ \" + runQuestions.length;\n  progressFill.style.width = (currentIndex \/ runQuestions.length * 100) + \"%\";\n  questionText.textContent = q.q;\n  optionsEl.innerHTML = \"\";\n  const letters = [\"A\", \"B\", \"C\"];\n  q.opts.forEach((opt, i) => {\n    const btn = document.createElement('button');\n    btn.className = 'opt-btn';\n    btn.innerHTML = '<span class=\"opt-letter\">' + letters[i] + '<\/span><span>' + opt.t + '<\/span>';\n    btn.addEventListener('click', () => answerQuestion(i, btn));\n    optionsEl.appendChild(btn);\n  });\n}\n\nfunction answerQuestion(i, btn){\n  const q = runQuestions[currentIndex];\n  const s = q.opts[i].s;\n  scores[0] += s[0]; scores[1] += s[1]; scores[2] += s[2];\n  btn.classList.add('picked');\n  setTimeout(() => {\n    currentIndex++;\n    if (currentIndex < runQuestions.length) {\n      renderQuestion();\n    } else {\n      progressFill.style.width = \"100%\";\n      renderResult();\n      showScreen(screenResult);\n    }\n  }, 220);\n}\n\n\/* =========================================================\n   RESULT BUILDING\n   ========================================================= *\/\nconst titleDisplay = document.getElementById('titleDisplay');\nconst verdictText = document.getElementById('verdictText');\nconst metricsEl = document.getElementById('metrics');\nconst statsEl = document.getElementById('stats');\nconst achievementsEl = document.getElementById('achievements');\nconst violationsEl = document.getElementById('violations');\nconst warningsEl = document.getElementById('warnings');\nconst normalResult = document.getElementById('normalResult');\nconst cursedResult = document.getElementById('cursedResult');\nconst cursedBox = document.getElementById('cursedBox');\nconst copiedMsg = document.getElementById('copiedMsg');\n\nlet currentText = \"\";\n\nfunction bandIndex(pct){ \/\/ 0..3\n  if (pct < 26) return 0;\n  if (pct < 51) return 1;\n  if (pct < 76) return 2;\n  return 3;\n}\n\nfunction pickTitle(){\n  const [h, d, c] = scores;\n  if (c >= 5 && chance(0.75)) return rnd(TITLES.chaos);\n  if (h > d && h >= 5) return rnd(TITLES.heat);\n  if (d > h && d >= 5) return rnd(TITLES.dominance);\n  return rnd(TITLES.balanced);\n}\n\nfunction buildVerdict(title, cls){\n  const [h, d, c] = scores;\n  const paras = [];\n  paras.push(rnd(VERDICT_OPENERS) + \" You have been classified as a <strong>\" + title + \", \" + cls + \"<\/strong>.\");\n  paras.push(h >= 6 ? VERDICT_HEAT_HIGH : (h >= 3 ? VERDICT_HEAT_MID : VERDICT_HEAT_LOW));\n  paras.push(d >= 6 ? VERDICT_DOM_HIGH : (d >= 3 ? VERDICT_DOM_MID : VERDICT_DOM_LOW));\n  if (c >= 5) paras.push(VERDICT_CHAOS_HIGH);\n  else paras.push(VERDICT_CHAOS_MID);\n  paras.push(rnd(VERDICT_CLOSERS));\n  return paras;\n}\n\nfunction buildMetrics(){\n  \/\/ 5 bars from pool; scores shape the first three, rest are vibes\n  const [h, d, c] = scores;\n  const total = Math.max(1, h + d + c);\n  const base = {\n    heat: Math.round(h \/ 14 * 100),\n    dom: Math.round(d \/ 14 * 100),\n    chaos: Math.round(c \/ 14 * 100),\n    overall: Math.round((h + d) \/ 22 * 100)\n  };\n  const clampPct = v => Math.max(4, Math.min(100, v));\n\n  const chosen = [];\n  const pool = shuffle(METRICS);\n\n  \/\/ Hand-pick first three to reflect answers, then fill to 5\n  const byName = name => METRICS.find(m => m.name === name);\n  const first = [\n    { m: byName(\"Steam Confidence\"), pct: clampPct(base.heat + Math.round(c * 3)) },\n    { m: byName(\"Bench Dominance\"), pct: clampPct(base.dom) },\n    { m: byName(\"Grandpa Approval Rating\"), pct: clampPct(base.overall + 18) }\n  ];\n  first.forEach(x => chosen.push(x));\n  for (const m of pool) {\n    if (chosen.length >= BARS_SHOWN) break;\n    if (chosen.some(x => x.m.name === m.name)) continue;\n    chosen.push({ m, pct: clampPct(20 + Math.round(Math.random() * 78)) });\n  }\n\n  return chosen.map(x => {\n    const bi = bandIndex(x.pct);\n    return { name: x.m.name, pct: x.pct, flavor: x.m.bands[bi] };\n  });\n}\n\nfunction buildStats(){\n  const items = shuffle(FAKE_STATS).slice(0, 3);\n  if (chance(0.6)) {\n    const comp = rnd(COMPATIBILITY);\n    items.push([\"Sauna Compatibility: \" + comp[0], comp[1]]);\n  }\n  return items;\n}\n\nfunction buildAchievements(){\n  return shuffle(ACHIEVEMENTS).slice(0, 3);\n}\n\nfunction buildViolations(){\n  if (chance(0.35)) return { items: [], penalty: null };\n  const items = shuffle(VIOLATIONS).slice(0, 1 + Math.floor(Math.random() * 2));\n  return { items, penalty: rnd(VIOLATION_PENALTIES) };\n}\n\nfunction buildWarnings(){\n  return shuffle(WARNINGS).slice(0, 2);\n}\n\nfunction renderResult(){\n  \/\/ Cursed outcome: ~1 in 100\n  if (chance(0.01)) {\n    normalResult.style.display = \"none\";\n    cursedResult.style.display = \"block\";\n    const c = rnd(CURSED_OUTCOMES);\n    let html = \"\";\n    c.lines.forEach((line, i) => {\n      html += '<div class=\"cursed-line\">' + (i === c.lines.length - 1 ? '<span class=\"accent\">' + line + '<\/span>' : line) + '<\/div>';\n    });\n    html += '<div class=\"cursed-sub\">' + c.sub + '<\/div>';\n    cursedBox.innerHTML = html;\n    document.getElementById('stampLabel').textContent = \"Irregular Finding\";\n\n    currentText =\n      \"OFFICIAL SAUNA BRO ASSESSMENT\\n\" +\n      c.lines.join(\"\\n\") + \"\\n\" + c.sub + \"\\n\" +\n      \"\u2014 Issued by the Peer-Reviewed Saunazilla Laboratories. Recognized nowhere.\";\n    return;\n  }\n\n  normalResult.style.display = \"block\";\n  cursedResult.style.display = \"none\";\n  document.getElementById('stampLabel').textContent = \"Official Sauna Bro Assessment\";\n\n  const title = pickTitle();\n  const cls = rnd(TITLE_CLASSES);\n  const cert = rnd(CERTIFICATIONS);\n\n  titleDisplay.innerHTML = '<span class=\"accent\">' + title + '<\/span>' +\n    '<span class=\"class-sub\">' + cls + ' \u00b7 ' + cert + '<\/span>';\n\n  const paras = buildVerdict(title, cls);\n  verdictText.innerHTML = paras.map(p => \"<p>\" + p + \"<\/p>\").join(\"\");\n\n  const metrics = buildMetrics();\n  metricsEl.innerHTML = \"\";\n  metrics.forEach((m, i) => {\n    const div = document.createElement('div');\n    div.className = 'metric';\n    div.innerHTML =\n      '<div class=\"metric-head\"><span class=\"metric-name\">' + m.name + '<\/span>' +\n      '<span class=\"metric-pct\">' + m.pct + '%<\/span><\/div>' +\n      '<div class=\"metric-track\"><div class=\"metric-fill\" data-pct=\"' + m.pct + '\"><\/div><\/div>' +\n      '<div class=\"metric-flavor\">' + m.flavor + '<\/div>';\n    metricsEl.appendChild(div);\n  });\n  \/\/ animate bars after paint\n  requestAnimationFrame(() => {\n    setTimeout(() => {\n      metricsEl.querySelectorAll('.metric-fill').forEach(f => {\n        f.style.width = f.dataset.pct + \"%\";\n      });\n    }, 60);\n  });\n\n  const stats = buildStats();\n  statsEl.innerHTML = stats.map(s =>\n    '<div class=\"report-item\"><span class=\"k\">' + s[0] + ':<\/span><span>' + s[1] + '<\/span><\/div>'\n  ).join(\"\");\n\n  const ach = buildAchievements();\n  achievementsEl.innerHTML = ach.map(a =>\n    '<div class=\"report-item\"><span class=\"mark ok\">\\u2713<\/span><span>' + a + '<\/span><\/div>'\n  ).join(\"\");\n\n  const vio = buildViolations();\n  if (vio.items.length === 0) {\n    violationsEl.innerHTML = '<div class=\"report-item\"><span class=\"mark ok\">\\u2713<\/span><span>' + NO_VIOLATIONS_TEXT + '<\/span><\/div>';\n  } else {\n    violationsEl.innerHTML = vio.items.map(v =>\n      '<div class=\"report-item\"><span class=\"mark bad\">\\u2717<\/span><span>' + v + '<\/span><\/div>'\n    ).join(\"\") +\n    '<div class=\"report-item\"><span class=\"mark bad\">\\u2717<\/span><span><em>' + vio.penalty + '<\/em><\/span><\/div>';\n  }\n\n  const warns = buildWarnings();\n  warningsEl.innerHTML = warns.map(w =>\n    '<div class=\"warning-box\"><div class=\"w-type\">' + w.type + '<\/div><div class=\"w-text\">' + w.text + '<\/div><\/div>'\n  ).join(\"\");\n\n  \/\/ plain-text version for copy\/share\n  currentText =\n    \"OFFICIAL SAUNA BRO ASSESSMENT\\n\" +\n    \"Classification: \" + title + \", \" + cls + \"\\n\" +\n    \"Certified As: \" + cert + \"\\n\\n\" +\n    paras.map(p => p.replace(\/<[^>]+>\/g, \"\")).join(\"\\n\") + \"\\n\\n\" +\n    \"BRO-QUALITY METRICS\\n\" +\n    metrics.map(m => m.name + \": \" + m.pct + \"% \u2014 \" + m.flavor).join(\"\\n\") + \"\\n\\n\" +\n    \"SCIENTIFIC OBSERVATIONS\\n\" +\n    stats.map(s => s[0] + \": \" + s[1]).join(\"\\n\") + \"\\n\\n\" +\n    \"ACHIEVEMENTS UNLOCKED\\n\" +\n    ach.map(a => \"\\u2713 \" + a).join(\"\\n\") + \"\\n\\n\" +\n    \"BRO CODE VIOLATIONS\\n\" +\n    (vio.items.length === 0 ? NO_VIOLATIONS_TEXT : vio.items.map(v => \"\\u2717 \" + v).join(\"\\n\") + \"\\n\" + vio.penalty) + \"\\n\\n\" +\n    \"OFFICIAL NOTICES\\n\" +\n    warns.map(w => w.type + \": \" + w.text).join(\"\\n\") + \"\\n\" +\n    \"\u2014 Issued by the Peer-Reviewed Saunazilla Laboratories. Recognized nowhere.\";\n\n  copiedMsg.classList.remove('show');\n}\n\n\/* =========================================================\n   WIRING\n   ========================================================= *\/\ndocument.getElementById('startBtn').addEventListener('click', startSurvey);\ndocument.getElementById('retake').addEventListener('click', startSurvey);\n\ndocument.getElementById('copy').addEventListener('click', () => {\n  if (!currentText) return;\n  navigator.clipboard.writeText(currentText).then(() => {\n    copiedMsg.classList.add('show');\n    setTimeout(() => copiedMsg.classList.remove('show'), 1600);\n  });\n});\n\nfunction shareText(){\n  if (currentText) {\n    const line = currentText.split(\"\\n\").find(l => l.startsWith(\"Classification:\"));\n    if (line) return \"I was classified as a \" + line.replace(\"Classification: \", \"\") + \" by the official Sauna Bro Personality Test. Get your assessment:\";\n  }\n  return \"Get your official Sauna Bro Assessment:\";\n}\n\ndocument.getElementById('shareX').addEventListener('click', () => {\n  const url = \"https:\/\/twitter.com\/intent\/tweet?text=\" + encodeURIComponent(shareText()) + \"&url=\" + encodeURIComponent(location.href);\n  window.open(url, \"_blank\", \"noopener,noreferrer,width=550,height=420\");\n});\ndocument.getElementById('shareFb').addEventListener('click', () => {\n  const url = \"https:\/\/www.facebook.com\/sharer\/sharer.php?u=\" + encodeURIComponent(location.href) + \"&quote=\" + encodeURIComponent(shareText());\n  window.open(url, \"_blank\", \"noopener,noreferrer,width=550,height=420\");\n});\ndocument.getElementById('shareWa').addEventListener('click', () => {\n  const url = \"https:\/\/wa.me\/?text=\" + encodeURIComponent(shareText() + \" \" + location.href);\n  window.open(url, \"_blank\", \"noopener,noreferrer\");\n});\ndocument.getElementById('shareTumblr').addEventListener('click', () => {\n  const url = \"https:\/\/www.tumblr.com\/widgets\/share\/tool?canonicalUrl=\" + encodeURIComponent(location.href) + \"&caption=\" + encodeURIComponent(shareText());\n  window.open(url, \"_blank\", \"noopener,noreferrer,width=550,height=600\");\n});\n<\/script>\n\n<\/body>\n<\/html>\n\n\n\n\n<br><p>If you&#8217;re too scared to take our Sauna Bro test, feel free to try our <a href=\"https:\/\/saunazilla.com\/en\/funny-sauna-name-generator\/\">Sauna Name Generator<\/a>, or the <a href=\"https:\/\/saunazilla.com\/en\/finnish-name-generator\/\">Finnish Name Generator<\/a>. If you think you&#8217;re a legit sauna enthusiast, you can also try our <a href=\"https:\/\/saunazilla.com\/en\/sauna-myth-buster-quiz\/\">Sauna Myth Buster Quiz<\/a>.<\/p><br>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<br>\n\n\n\n<h2 class=\"wp-block-heading\">FAQ:<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Is this a real sauna personality test?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Umm&#8230; Sure, of course, absolutely.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>How accurate is the Sauna Bro assessment?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Approximately 107%, according to our data.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Can I retake the quiz?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As many times as necessary until you achieve the title you wanted.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Think you know your sauna? Our (absolutely ridiculous) Sauna Bro personality test analyzes your l\u00f6yly confidence, bench dominance, towel stability, and completely unscientific sauna instincts. Answer a handful of absurd questions and receive a your official Sauna Bro assessment. Sauna Bro Personality Test \u2014 Official Sauna Bro Assessment &#038; Certification Sauna Bro Personality Test Seven [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":33010,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-templates\/alasivu.php","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-33012","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/saunazilla.com\/en\/wp-json\/wp\/v2\/pages\/33012","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=33012"}],"version-history":[{"count":7,"href":"https:\/\/saunazilla.com\/en\/wp-json\/wp\/v2\/pages\/33012\/revisions"}],"predecessor-version":[{"id":33019,"href":"https:\/\/saunazilla.com\/en\/wp-json\/wp\/v2\/pages\/33012\/revisions\/33019"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/saunazilla.com\/en\/wp-json\/wp\/v2\/media\/33010"}],"wp:attachment":[{"href":"https:\/\/saunazilla.com\/en\/wp-json\/wp\/v2\/media?parent=33012"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}