{"id":32996,"date":"2026-07-20T15:28:57","date_gmt":"2026-07-20T15:28:57","guid":{"rendered":"https:\/\/saunazilla.com\/?page_id=32996"},"modified":"2026-07-20T15:34:50","modified_gmt":"2026-07-20T15:34:50","slug":"funny-sauna-name-generator","status":"publish","type":"page","link":"https:\/\/saunazilla.com\/en\/funny-sauna-name-generator\/","title":{"rendered":"Funny Sauna Name Generator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><p>Discover your official sauna identity! It&#8217;s <em>Saunazilla-certified<\/em>, of course. Our free sauna name generator creates a unique sauna nickname, title, personality, and official sauna identity in a second. That&#8217;s incredible value for money!<\/p><br><\/p>\n\n\n\n<p>You can choose your personal vibe in the name style, or just live on the edge and get a randomized one. And if you&#8217;re a true <em>top-bencher<\/em>; share your results online.<\/p><br><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>Funny Sauna Name Generator \u2014 Get Your Finnish Sauna Identity<\/title>\n<meta name=\"description\" content=\"The funny sauna name generator that gives you an official Finnish sauna name, sauna nickname, sauna title, superpower, crime and certification. What is your sauna personality? Roll your sauna identity now.\">\n<link rel=\"canonical\" href=\"https:\/\/saunazilla.com\/funny-sauna-name-generator\/\">\n<meta property=\"og:type\" content=\"website\">\n<meta property=\"og:title\" content=\"Funny Sauna Name Generator \u2014 What Is Your Sauna Name?\">\n<meta property=\"og:description\" content=\"Every sauna regular has a secret identity. Get your funny Finnish sauna name, sauna title and sauna personality in one click.\">\n<meta property=\"og:url\" content=\"https:\/\/saunazilla.com\/funny-sauna-name-generator\/\">\n<meta name=\"twitter:card\" content=\"summary\">\n<meta name=\"twitter:title\" content=\"Funny Sauna Name Generator\">\n<meta name=\"twitter:description\" content=\"Get your official Finnish sauna name, sauna nickname and sauna title. Certified by absolutely no one.\">\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"WebApplication\",\n  \"name\": \"Funny Sauna Name Generator\",\n  \"url\": \"https:\/\/saunazilla.com\/funny-sauna-name-generator\/\",\n  \"description\": \"A funny sauna name generator that creates an official Finnish sauna identity: name, nickname, sauna title, superpower, sauna crime, motto and certification.\",\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 a sauna name generator?\",\n      \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"A sauna name generator is a joke tool that assigns you an official-sounding sauna identity: a funny Finnish sauna name, a sauna nickname, a sauna title like Chief Steam Officer, plus a superpower, a sauna crime and a certification. It is 100% unserious.\" }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Are these real Finnish sauna names?\",\n      \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"No. The generator mixes real Finnish sauna vocabulary (l\u00f6yly, kiuas, vihta, laude, pefletti) with English sauna words and classic Finnish surname endings to produce names that sound authentically Finnish but are completely made up.\" }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What does l\u00f6yly mean?\",\n      \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"L\u00f6yly is the Finnish word for the wave of heat and steam that rises from the sauna stones when water is thrown on them. It is the soul of the Finnish sauna experience, and roughly half of all funny sauna names ever generated contain it.\" }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Can I use my sauna name in a real sauna?\",\n      \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"You can, but nobody will call you that. In Finland everyone is equal in the sauna, and titles stay outside the door. Still, printing your sauna identity on a towel is strongly encouraged.\" }\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  .row { margin-bottom: 18px; }\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    text-align: center;\n  }\n\n  .chip-group {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 6px;\n    justify-content: center;\n  }\n\n  .chip {\n    padding: 7px 14px;\n    border: 1px solid var(--gray-200);\n    border-radius: 20px;\n    cursor: pointer;\n    transition: all 0.12s;\n    background: var(--white);\n    font-family: inherit;\n    font-size: 0.82rem;\n    font-weight: 600;\n    color: var(--gray-600);\n  }\n\n  .chip:hover { border-color: var(--gray-400); }\n\n  .chip.active {\n    border-color: var(--red);\n    background: var(--red-light);\n    color: var(--red-dark);\n  }\n\n  .divider {\n    height: 1px;\n    background: var(--gray-200);\n    margin: 18px 0;\n  }\n\n  \/* ---- Identity 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  .name-display {\n    font-family: 'Fraunces', serif;\n    font-weight: 600;\n    font-size: clamp(24px, 6.5vw, 34px);\n    line-height: 1.15;\n    color: var(--gray-900);\n    min-height: 1.3em;\n    transition: opacity 0.15s ease;\n    padding: 0 6px;\n    overflow-wrap: break-word;\n    hyphens: auto;\n  }\n  .name-display.fade { opacity: 0; }\n  .name-display .honorific { color: var(--gray-500); font-size: 0.72em; }\n  .name-display .accent { color: var(--red); }\n  .name-display .nick {\n    display: block;\n    font-family: 'Noto Sans Display', sans-serif;\n    font-style: italic;\n    font-weight: 500;\n    font-size: 0.46em;\n    color: var(--gray-600);\n    margin-top: 4px;\n  }\n\n  .id-fields {\n    margin-top: 16px;\n    text-align: left;\n    transition: opacity 0.15s ease;\n  }\n  .id-fields.fade { opacity: 0; }\n\n  .id-field {\n    display: flex;\n    gap: 10px;\n    padding: 7px 4px;\n    border-top: 1px dashed rgba(194,0,0,0.18);\n    font-size: 0.83rem;\n    line-height: 1.45;\n    align-items: baseline;\n  }\n  .id-field:first-child { border-top: none; }\n\n  .id-field .k {\n    flex: 0 0 118px;\n    font-size: 0.66rem;\n    font-weight: 700;\n    text-transform: uppercase;\n    letter-spacing: 0.05em;\n    color: var(--red-dark);\n    padding-top: 2px;\n  }\n\n  .id-field .v { flex: 1; color: var(--gray-800); font-weight: 500; }\n  .id-field .v .sub { display: block; font-size: 0.7rem; color: var(--gray-400); font-weight: 400; }\n\n  .stars { color: var(--red); letter-spacing: 0.08em; white-space: nowrap; }\n  .stars .dim { color: var(--gray-300); }\n\n  .auth-list { display: flex; flex-wrap: wrap; gap: 4px 12px; }\n  .auth-list span { white-space: nowrap; }\n  .auth-list .no { color: var(--gray-400); text-decoration: line-through; }\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  #generate {\n    background: var(--red);\n    color: #fff;\n    box-shadow: 0 8px 20px -8px rgba(246,2,2,0.5);\n  }\n  #generate:hover { background: var(--red-dark); }\n\n  #copy {\n    background: var(--white);\n    color: var(--red-dark);\n    border: 1.5px solid var(--red-dark);\n  }\n  #copy: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  @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    .name-display { font-size: clamp(22px, 7.2vw, 30px); }\n    .chip { font-size: 0.76rem; padding: 6px 11px; }\n    .id-field { gap: 8px; }\n    .id-field .k { flex-basis: 92px; }\n    .actions { flex-direction: column; }\n    .actions button { width: 100%; }\n    .auth-list { gap: 4px 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>Funny Sauna Name Generator<\/h1>\n      <p>Every sauna regular has a secret identity. Here&#8217;s yours.<\/p>\n    <\/div>\n\n    <div class=\"calc-body\">\n      <!-- Flavor toggle -->\n      <div class=\"row\">\n        <div class=\"label\">Name style<\/div>\n        <div class=\"chip-group\" id=\"flavorToggle\">\n          <button class=\"chip active\" data-flavor=\"any\">Any<\/button>\n          <button class=\"chip\" data-flavor=\"finnish\">Ridiculously Finnish<\/button>\n          <button class=\"chip\" data-flavor=\"tourist\">Tourist Turned Finn<\/button>\n          <button class=\"chip\" data-flavor=\"viking\">Viking<\/button>\n          <button class=\"chip\" data-flavor=\"legend\">Legend<\/button>\n        <\/div>\n      <\/div>\n\n      <div class=\"divider\"><\/div>\n\n      <!-- IDENTITY CARD -->\n      <div class=\"result-area\" id=\"resultArea\">\n        <div class=\"stamp-label\">Official Sauna Identity<\/div>\n        <div class=\"name-display\" id=\"nameDisplay\">\n          <span class=\"accent\">Your sauna name<\/span>\n        <\/div>\n\n        <div class=\"id-fields\" id=\"idFields\">\n          <div class=\"id-field\"><div class=\"k\">Sauna Title<\/div><div class=\"v\" id=\"fTitle\">\u2014<\/div><\/div>\n          <div class=\"id-field\"><div class=\"k\">Special Ability<\/div><div class=\"v\" id=\"fAbility\">\u2014<\/div><\/div>\n          <div class=\"id-field\"><div class=\"k\">Weakness<\/div><div class=\"v\" id=\"fWeakness\">\u2014<\/div><\/div>\n          <div class=\"id-field\"><div class=\"k\">Sauna Crime<\/div><div class=\"v\" id=\"fCrime\">\u2014<\/div><\/div>\n          <div class=\"id-field\"><div class=\"k\">Motto<\/div><div class=\"v\" id=\"fMotto\">\u2014<\/div><\/div>\n          <div class=\"id-field\"><div class=\"k\">Favorite Temp<\/div><div class=\"v\" id=\"fTemp\">\u2014<\/div><\/div>\n          <div class=\"id-field\"><div class=\"k\">Certified As<\/div><div class=\"v\" id=\"fCert\">\u2014<span class=\"sub\">*Self-certified.<\/span><\/div><\/div>\n          <div class=\"id-field\"><div class=\"k\">Authorized To<\/div><div class=\"v\"><div class=\"auth-list\" id=\"fAuth\"><\/div><\/div><\/div>\n          <div class=\"id-field\"><div class=\"k\">Sauna Rating<\/div><div class=\"v\"><span class=\"stars\" id=\"fStars\"><\/span><\/div><\/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=\"generate\">Generate identity<\/button>\n          <button class=\"secondary\" id=\"copy\">Copy<\/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 sauna identity<\/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 Republic of Saunazilla. Recognized nowhere.<\/div>\n      <\/div>\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\n   ========================================================= *\/\n\n\/\/ --- Curated legend names (picked whole) ---\nconst legends = [\n  \"L\u00f6yly McSteam\",\"Steamy Steve\",\"Sauna Sally\",\"Cedar Cooper\",\"Ben Benchman\",\"Finn Sweatley\",\n  \"Pamela Pine\",\"Hank Hotrocks\",\"Barbara Birch\",\"Johnny Steam\",\"Terry Thermometer\",\"Mike Saunafield\",\n  \"Susan Sweatmore\",\"Gary Cedarson\",\"Linda L\u00f6yly\",\"Randy Bench\",\"Santa Saunason\",\"Gordon Steamsey\",\n  \"Steam McSteamface\",\"L\u00f6yly Parton\",\"Saunald McDonald\",\"Clint Eastwood-Fired Sauna\",\"Sherlock Foams\",\n  \"Birch Willis\",\"Saunakin Skywalker\",\"Darth L\u00f6yly\",\"Professor Steamington\",\"Sir Sweats-a-Lot\",\n  \"Lady L\u00f6ylypants\",\"Captain Hotbucket\",\"Toasty McBench\",\"Sweaty McBirch\",\"Lord Sauna III\",\n  \"Baron Heatwave\",\"Queen Cedarbottom\",\"Chuck L\u00f6yly\",\"Hank Heatson\",\"Vihta Williams\",\"Birch Johnson\"\n];\n\n\/\/ --- Name parts ---\nconst honorifics = [\"Sir\",\"Lady\",\"Captain\",\"Professor\",\"Baron\",\"Duke\",\"Duchess\",\"Doctor\",\"Count\",\"Madame\",\"Judge\"];\n\nconst firstAmerican = [\"Chad\",\"Brad\",\"Kevin\",\"Kyle\",\"Bob\",\"Mike\",\"Randy\",\"Gary\",\"Terry\",\"Hank\",\"Dave\",\"Steve\",\n  \"Jessica\",\"Becky\",\"Nancy\",\"Jennifer\",\"Linda\",\"Susan\",\"Karen\",\"Pamela\",\"Barbara\",\"Ashley\"];\nconst firstViking = [\"Bjorn\",\"Ragnar\",\"Astrid\",\"Helga\",\"Olaf\",\"Freya\",\"Sven\",\"Erik\",\"Ingrid\",\"Gunnar\",\"Sigrid\",\"Leif\"];\nconst firstNeutral = [\"Arthur\",\"Emily\",\"John\",\"Gordon\",\"Hank\",\"Terry\",\"Ben\",\"Finn\",\"Clara\",\"Marge\",\"Walter\",\"Doris\"];\n\nconst finCores = [\"Sauna\",\"L\u00f6yly\",\"Kiuas\",\"Vihta\",\"Vasta\",\"Pefletti\",\"Laude\",\"Koivu\",\"Terva\",\"Hiki\",\"Kuuma\",\"M\u00f6kki\"];\nconst finEndings = [\"koski\",\"lahti\",\"m\u00e4ki\",\"j\u00e4rvi\",\"vaara\",\"pelto\",\"korpi\",\"kivi\",\"nen\",\"la\",\"salo\",\"ranta\"];\nconst engCores = [\"Steam\",\"Heat\",\"Sweat\",\"Birch\",\"Fire\",\"Hot\",\"Smoke\",\"Bench\",\"Stone\",\"Bucket\",\"Ladle\",\"Towel\",\"Splash\",\"Cedar\"];\nconst engEndings = [\"son\",\"man\",\"wood\",\"worth\",\"field\",\"smith\",\"walker\",\"ford\",\"burg\",\"hill\",\"stone\",\"ton\",\"dale\",\"ley\",\"brook\",\"more\",\"sey\"];\nconst occupational = [\"Steamkeeper\",\"Birchmaster\",\"Firebuilder\",\"Stone Turner\",\"Water Thrower\",\"Bench Lord\",\n  \"Bucket Bearer\",\"Ladle Master\",\"Sweat Collector\",\"Steam Caller\",\"Towel Warden\",\"Door Closer\"];\n\n\/\/ --- Card fields ---\nconst nicknames = [\n  \"The Steam Hammer\",\"Extra Water\",\"Three Buckets\",\"No Towel Needed\",\"Cold Feet\",\"The Quiet One\",\n  \"One Ladle\",\"Top Bench\",\"The Door Closer\",\"The Human Thermometer\",\"Maximum Heat\",\"The Ladle Dropper\",\n  \"The Birch Whisperer\",\"Ice Water\",\"The 6 AM Sauna Person\",\"Splash Damage\",\"The Stone Counter\",\"Old Smokey\"\n];\n\nconst titles = [\n  \"Chief Steam Officer\",\"Bucket Commander\",\"Grand L\u00f6yly Master\",\"Bench Supervisor\",\"Supreme Steam Wizard\",\n  \"Birch Marshal\",\"Stone Whisperer\",\"Chief Sweat Officer\",\"Certified Sauna Goblin\",\"Vice President of Heat\",\n  \"Assistant Steam Engineer\",\"Honorary Birch Inspector\",\"The Silent Sweater\",\"The Birch Warrior\",\n  \"The Bench Philosopher\",\"The Ice Hole Addict\",\"The Heat Collector\",\"The L\u00f6yly Chaser\",\"The Towel Forgetter\",\n  \"The Door Opener\",\"Regional Steam Director\",\"Senior Ladle Strategist\"\n];\n\nconst abilities = [\n  \"Never drops the ladle.\",\n  \"Can survive the hottest bench.\",\n  \"Creates perfect l\u00f6yly every time.\",\n  \"Creates perfect l\u00f6yly with exactly one ladle.\",\n  \"Scares mosquitoes by sweating.\",\n  \"Can smell a good sauna from 5 km away.\",\n  \"Turns cold beer warm by holding it.\",\n  \"Has thrown water on over 12,000 hot stones.\",\n  \"Never needs a towel.\",\n  \"Makes thermometers nervous.\",\n  \"Instantly finds the best bench.\",\n  \"Heats the sauna faster than the heater.\",\n  \"Can tell the temperature by ear.\",\n  \"Sweats in alphabetical order.\",\n  \"Knows when to throw water without asking.\",\n  \"Once steamed a whole steak medium-rare.\",\n  \"Can sit still for three full l\u00f6yly rounds.\",\n  \"Defogs glasses with pure willpower.\",\n  \"Always knows whose turn it is to get more water.\",\n  \"Can roll from bench to ice hole in one motion.\"\n];\n\nconst weaknesses = [\n  \"Always forgets where the towel is.\",\n  \"Cannot pronounce 'l\u00f6yly' correctly.\",\n  \"Once fell asleep on the top bench.\",\n  \"Sweats before entering the sauna.\",\n  \"Allergic to cold water. Claims.\",\n  \"Secretly prefers infrared.\",\n  \"Cannot fold a pefletti.\",\n  \"Always brings the wrong bucket.\",\n  \"Gets dizzy at exactly 80\u00b0C.\",\n  \"Talks to the stones. They don't answer.\",\n  \"Has never beaten anyone in a l\u00f6yly duel.\",\n  \"Afraid of the birch whisk.\",\n  \"Takes 45-minute 'quick showers' after.\",\n  \"Always sits directly in front of the door.\",\n  \"Cannot tell the thermometer from the hygrometer.\",\n  \"Once used the ladle as a drinking cup.\"\n];\n\nconst crimes = [\n  \"Poured beer on the stones.\",\n  \"Talked during peak l\u00f6yly.\",\n  \"Sat on the top bench with cold feet.\",\n  \"Brought a phone into the sauna.\",\n  \"Stole everyone's pefletti.\",\n  \"Left the door open.\",\n  \"Splashed too aggressively.\",\n  \"Forgot the bucket.\",\n  \"Wore socks inside the sauna.\",\n  \"Used eucalyptus without permission.\",\n  \"Asked if the sauna 'has Wi-Fi'.\",\n  \"Left after only one round.\",\n  \"Opened the door 'just to check something'.\",\n  \"Claimed 60\u00b0C is 'basically the same as 90\u00b0C'.\",\n  \"Sat on the lower bench the whole time.\",\n  \"Brought scented candles to a smoke sauna.\",\n  \"Measured the temperature. Out loud. Repeatedly.\",\n  \"Wore a swimsuit. In a Finnish sauna.\"\n];\n\nconst mottos = [\n  \"More steam. Less drama.\",\n  \"One more ladle.\",\n  \"Top bench or nothing.\",\n  \"Respect the stones.\",\n  \"If it's comfortable, it's too cold.\",\n  \"Sweat solves everything.\",\n  \"Never trust a cold sauna.\",\n  \"Steam first. Questions later.\",\n  \"Silence is golden. Steam is better.\",\n  \"The l\u00f6yly provides.\",\n  \"Bench, steam, repeat.\",\n  \"Hot is a state of mind.\",\n  \"Every stone deserves water.\",\n  \"There is no 'too hot'.\",\n  \"Sweat now, shine later.\",\n  \"The door stays closed.\"\n];\n\nconst certifications = [\n  \"Professional Steam Generator\",\"Birch Whisk Technician\",\"Senior Bucket Operator\",\"Level 4 L\u00f6yly Specialist\",\n  \"Sauna Safety Inspector\",\"Bench Comfort Analyst\",\"Thermal Relaxation Consultant\",\"Certified Ladle Handler\",\n  \"Accredited Stone Arranger\",\"Master of Towel Folding (failed, retried)\",\"Ice Hole Entry Specialist\",\n  \"Senior Sweat Analyst\",\"Regional Pefletti Distributor\",\"Steam Quality Assessor\",\"Advanced Bench Navigator\",\n  \"Diploma in Applied L\u00f6yly Sciences\"\n];\n\nconst authorizations = [\n  \"Throw water\",\"Sit on top bench\",\"Enter ice lake\",\"Give unsolicited sauna advice\",\"Refill the bucket\",\n  \"Judge other people's l\u00f6yly\",\"Nap between rounds\",\"Adjust the thermometer\",\"Occupy two benches\",\"Bring snacks\",\n  \"Complain it's too cold\",\"Start l\u00f6yly debates\"\n];\n\nconst temps = [\"62\u00b0C (rookie)\",\"71\u00b0C\",\"78\u00b0C\",\"84\u00b0C\",\"88\u00b0C\",\"92\u00b0C\",\"97\u00b0C\",\"101\u00b0C\",\"110\u00b0C (illegal in most countries)\",\"Exactly 80\u00b0C. Always.\"];\n\n\/* =========================================================\n   HELPERS\n   ========================================================= *\/\nfunction rnd(arr){ return arr[Math.floor(Math.random() * arr.length)]; }\nfunction chance(p){ return Math.random() < p; }\nfunction cap(s){ return s.charAt(0).toUpperCase() + s.slice(1); }\n\nfunction buildSurname(flavor){\n  const r = Math.random();\n  if (flavor === \"finnish\") {\n    \/\/ pure Finnish, or Finnish mixed with an English core\n    if (r < 0.55) return rnd(finCores) + rnd(finEndings);\n    if (r < 0.85) return rnd(engCores) + rnd(finEndings);\n    return rnd(finCores) + rnd(finEndings);\n  }\n  if (r < 0.30) return rnd(engCores) + rnd(engEndings);        \/\/ Heatson\n  if (r < 0.50) return rnd(finCores) + rnd(finEndings);        \/\/ L\u00f6ylym\u00e4ki\n  if (r < 0.68) return rnd(engCores) + rnd(finEndings);        \/\/ Steamkoski\n  if (r < 0.84) return rnd(finCores) + rnd(engEndings);        \/\/ L\u00f6ylywood\n  if (r < 0.92) return \"Mc\" + rnd(engCores);                   \/\/ McBench\n  return rnd(occupational);                                    \/\/ Steamkeeper\n}\n\nfunction pickFirst(flavor){\n  if (flavor === \"viking\") return rnd(firstViking);\n  if (flavor === \"tourist\") return rnd(firstAmerican);\n  const r = Math.random();\n  if (r < 0.5) return rnd(firstAmerican);\n  if (r < 0.8) return rnd(firstNeutral);\n  return rnd(firstViking);\n}\n\nfunction buildName(flavor){\n  if (flavor === \"legend\") {\n    const n = rnd(legends);\n    return { display: n, plain: n, isLegend: true };\n  }\n  let honorific = \"\";\n  if (chance(0.25)) honorific = rnd(honorifics);\n\n  const first = pickFirst(flavor);\n  const last = buildSurname(flavor);\n\n  let nick = \"\";\n  if (chance(0.45)) nick = rnd(nicknames);\n\n  const plain = (honorific ? honorific + \" \" : \"\") + first + \" \" + last;\n  let html = \"\";\n  if (honorific) html += '<span class=\"honorific\">' + honorific + ' <\/span>';\n  html += '<span class=\"accent\">' + first + '<\/span> ' + last;\n  if (nick) html += '<span class=\"nick\">&ldquo;' + nick + '&rdquo;<\/span>';\n\n  const plainWithNick = (honorific ? honorific + \" \" : \"\") + first + (nick ? ' \"' + nick + '\" ' : \" \") + last;\n  return { display: html, plain: plainWithNick, isLegend: false };\n}\n\nfunction buildAuthorizations(){\n  const n = 3 + Math.floor(Math.random() * 2); \/\/ 3-4 granted\n  const shuffled = authorizations.slice().sort(() => Math.random() - 0.5);\n  const granted = shuffled.slice(0, n);\n  let denied = null;\n  if (chance(0.35)) {\n    denied = rnd(authorizations.filter(a => !granted.includes(a)));\n  }\n  return { granted, denied };\n}\n\nfunction buildStars(){\n  \/\/ mostly 5, sometimes 4, rarely 3 \u2014 you're a sauna legend after all\n  const r = Math.random();\n  if (r < 0.6) return 5;\n  if (r < 0.9) return 4;\n  return 3;\n}\n\n\/* =========================================================\n   GENERATOR\n   ========================================================= *\/\nlet flavor = \"any\";\nlet currentText = \"\";\n\nconst nameDisplay = document.getElementById('nameDisplay');\nconst idFields = document.getElementById('idFields');\nconst copiedMsg = document.getElementById('copiedMsg');\nconst toggleEl = document.getElementById('flavorToggle');\n\nconst F = {\n  title: document.getElementById('fTitle'),\n  ability: document.getElementById('fAbility'),\n  weakness: document.getElementById('fWeakness'),\n  crime: document.getElementById('fCrime'),\n  motto: document.getElementById('fMotto'),\n  temp: document.getElementById('fTemp'),\n  cert: document.getElementById('fCert'),\n  auth: document.getElementById('fAuth'),\n  stars: document.getElementById('fStars')\n};\n\nfunction effectiveFlavor(){\n  if (flavor !== \"any\") return flavor;\n  return rnd([\"finnish\",\"tourist\",\"viking\",\"legend\",\"finnish\",\"tourist\"]); \/\/ legends slightly rarer\n}\n\nfunction render(){\n  const fl = effectiveFlavor();\n  const name = buildName(fl);\n  const title = rnd(titles);\n  const ability = rnd(abilities);\n  const weakness = rnd(weaknesses);\n  const crime = rnd(crimes);\n  const motto = rnd(mottos);\n  const temp = rnd(temps);\n  const cert = rnd(certifications);\n  const auth = buildAuthorizations();\n  const stars = buildStars();\n\n  nameDisplay.classList.add('fade');\n  idFields.classList.add('fade');\n\n  setTimeout(() => {\n    nameDisplay.innerHTML = name.display;\n    F.title.textContent = title;\n    F.ability.textContent = ability;\n    F.weakness.textContent = weakness;\n    F.crime.textContent = crime;\n    F.motto.textContent = \"\\u201C\" + motto + \"\\u201D\";\n    F.temp.textContent = temp;\n    F.cert.innerHTML = cert + '<span class=\"sub\">*Self-certified.<\/span>';\n\n    let authHtml = \"\";\n    auth.granted.forEach(a => { authHtml += \"<span>\\u2713 \" + a + \"<\/span>\"; });\n    if (auth.denied) authHtml += '<span class=\"no\">\\u2717 ' + auth.denied + \"<\/span>\";\n    F.auth.innerHTML = authHtml;\n\n    let starHtml = \"\";\n    for (let i = 1; i <= 5; i++) {\n      starHtml += i <= stars ? \"\\u2605\" : '<span class=\"dim\">\\u2605<\/span>';\n    }\n    F.stars.innerHTML = starHtml;\n\n    nameDisplay.classList.remove('fade');\n    idFields.classList.remove('fade');\n  }, 150);\n\n  currentText =\n    \"MY SAUNA IDENTITY\\n\" +\n    \"Name: \" + name.plain + \"\\n\" +\n    \"Sauna Title: \" + title + \"\\n\" +\n    \"Special Ability: \" + ability + \"\\n\" +\n    \"Weakness: \" + weakness + \"\\n\" +\n    \"Sauna Crime: \" + crime + \"\\n\" +\n    \"Motto: \\\"\" + motto + \"\\\"\\n\" +\n    \"Favorite Temperature: \" + temp + \"\\n\" +\n    \"Certified As: \" + cert + \"* (*Self-certified)\\n\" +\n    \"Authorized To: \" + auth.granted.join(\", \") + (auth.denied ? \" | REVOKED: \" + auth.denied : \"\") + \"\\n\" +\n    \"Sauna Rating: \" + stars + \"\/5\\n\" +\n    \"\u2014 Issued by the Republic of Saunazilla. Recognized nowhere.\";\n\n  copiedMsg.classList.remove('show');\n}\n\ndocument.getElementById('generate').addEventListener('click', render);\n\ntoggleEl.addEventListener('click', (e) => {\n  const btn = e.target.closest('button');\n  if (!btn) return;\n  toggleEl.querySelectorAll('button').forEach(b => b.classList.remove('active'));\n  btn.classList.add('active');\n  flavor = btn.dataset.flavor;\n});\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  const firstLine = currentText ? currentText.split(\"\\n\")[1].replace(\"Name: \", \"\") : \"\";\n  return firstLine\n    ? \"My sauna name is \" + firstLine + \". Get your funny sauna identity:\"\n    : \"Get your funny Finnish sauna identity:\";\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});\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});\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});\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<br><p class=\"wp-block-paragraph\">Be sure to also try our <a href=\"https:\/\/saunazilla.com\/en\/finnish-name-generator\/\">Finnish Name Generator<\/a> and <a href=\"https:\/\/saunazilla.com\/en\/sauna-myth-buster-quiz\/\">Sauna Myth Buster Quiz<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Discover your official sauna identity! It&#8217;s Saunazilla-certified, of course. Our free sauna name generator creates a unique sauna nickname, title, personality, and official sauna identity in a second. That&#8217;s incredible value for money! You can choose your personal vibe in the name style, or just live on the edge and get a randomized one. And [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":32998,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-templates\/alasivu.php","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-32996","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/saunazilla.com\/en\/wp-json\/wp\/v2\/pages\/32996","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=32996"}],"version-history":[{"count":4,"href":"https:\/\/saunazilla.com\/en\/wp-json\/wp\/v2\/pages\/32996\/revisions"}],"predecessor-version":[{"id":33008,"href":"https:\/\/saunazilla.com\/en\/wp-json\/wp\/v2\/pages\/32996\/revisions\/33008"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/saunazilla.com\/en\/wp-json\/wp\/v2\/media\/32998"}],"wp:attachment":[{"href":"https:\/\/saunazilla.com\/en\/wp-json\/wp\/v2\/media?parent=32996"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}