{"id":320,"date":"2026-02-25T05:57:00","date_gmt":"2026-02-25T05:57:00","guid":{"rendered":"https:\/\/oualator.com\/calculate\/?p=320"},"modified":"2026-02-28T23:03:22","modified_gmt":"2026-02-28T23:03:22","slug":"dandys-world-wheel-of-names","status":"publish","type":"post","link":"https:\/\/oualator.com\/calculate\/dandys-world-wheel-of-names\/","title":{"rendered":"Dandy\u2019s World Wheel of Names \u2013 Spin, Pick &amp; Discover"},"content":{"rendered":"\n<div class=\"bg-gray-50\">\n  <div class=\"max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-8 sm:py-10\">\n\n    <!-- HERO -->\n    <div class=\"rounded-2xl overflow-hidden shadow-lg bg-gradient-to-br from-black via-gray-800 to-blue-900\">\n      <div class=\"px-5 py-8 sm:px-8 sm:py-10 lg:px-10 lg:py-12\">\n        \n        <div class=\"flex flex-col lg:flex-row gap-8 lg:items-center lg:justify-between\">\n\n          <!-- LEFT CONTENT -->\n          <div class=\"text-white w-full\">\n\n\n\n            <p class=\"mt-5 text-2xl sm:text-3xl lg:text-4xl font-extrabold leading-snug\">\n              Dandy\u2019s World Wheel of Names:\n              <span class=\"block text-white\/90 font-semibold mt-2\">\n                Beat \u201cchoice paralysis\u201d and make every run unpredictable\n              <\/span>\n            <\/p>\n\n            <p class=\"mt-4 text-white\/90 text-sm sm:text-base lg:text-lg leading-relaxed max-w-3xl\">\n              The Dandy&#8217;s World Wheel of Names is the pinnacle of playful features for fans and newbies alike.\n              Meant for revealing the varied personalities of Dandy&#8217;s world, this wheel includes all-time favorites \n              like Poppy, Shelly, and Pebble. Whether you&#8217;re simply messing around or preparing for a Dandy-inspired \n              game, the wheel brings exciting surprise and delight into the process.\n              If you fond of fonts, you can check the \n              <a href=\"https:\/\/oualator.com\/calculate\/disney-font-generator\/\"\n                 target=\"_blank\"\n                 rel=\"noreferrer noopener\"\n                 class=\"text-blue-300 font-medium hover:text-blue-400 underline\">\n                 disney font generator tool\n              <\/a>.\n            <\/p>\n\n            <!-- BUTTONS -->\n            <div class=\"mt-6 flex flex-col sm:flex-row gap-3 w-full sm:w-auto\">\n\n              <a href=\"#how-it-works\"\n                 class=\"w-full sm:w-auto inline-flex items-center justify-center gap-2 bg-white text-indigo-700 font-semibold px-5 py-3 rounded-xl shadow hover:bg-indigo-50 transition\">\n                <i class=\"fa-solid fa-circle-play\"><\/i>\n                <span>How it works<\/span>\n              <\/a>\n\n              <a href=\"#app\"\n                 class=\"w-full sm:w-auto inline-flex items-center justify-center gap-2 bg-black\/30 text-white font-semibold px-5 py-3 rounded-xl border border-white\/20 hover:bg-black\/40 transition\">\n                <i class=\"fa-solid fa-circle-notch\"><\/i>\n                <span>Tool<\/span>\n              <\/a>\n\n            <\/div>\n\n            <div class=\"mt-6 text-xs sm:text-sm text-white\/80\">\n              Looking for the game? Here\u2019s the Roblox experience page for\n              <a class=\"underline font-semibold hover:text-white\"\n                 href=\"#app\">\n                Dandy\u2019s World\n              <\/a>.\n            <\/div>\n\n          <\/div>\n\n          <!-- RIGHT SIDE CARD -->\n          <div class=\"bg-white\/10 border border-white\/20 rounded-2xl p-5 text-white w-full lg:w-80 shrink-0\">\n\n            <div class=\"font-bold text-lg\">Quick jump<\/div>\n\n            <div class=\"mt-4 grid grid-cols-1 gap-2 text-sm\">\n              <a href=\"#what-is\" class=\"rounded-lg px-3 py-2 bg-white\/10 hover:bg-white\/15 transition\">\n                <i class=\"fa-solid fa-circle-question mr-2\"><\/i>What it is\n              <\/a>\n              <a href=\"#why-love\" class=\"rounded-lg px-3 py-2 bg-white\/10 hover:bg-white\/15 transition\">\n                <i class=\"fa-solid fa-heart mr-2\"><\/i>Why players use it\n              <\/a>\n              <a href=\"#challenges\" class=\"rounded-lg px-3 py-2 bg-white\/10 hover:bg-white\/15 transition\">\n                <i class=\"fa-solid fa-trophy mr-2\"><\/i>Gameplay challenges\n              <\/a>\n              <a href=\"#roles\" class=\"rounded-lg px-3 py-2 bg-white\/10 hover:bg-white\/15 transition\">\n                <i class=\"fa-solid fa-users mr-2\"><\/i>Roles &#038; strategy\n              <\/a>\n              <a href=\"#faq\" class=\"rounded-lg px-3 py-2 bg-white\/10 hover:bg-white\/15 transition\">\n                <i class=\"fa-solid fa-comments mr-2\"><\/i>FAQ\n              <\/a>\n            <\/div>\n\n          <\/div>\n\n        <\/div>\n      <\/div>\n    <\/div>\n\n\n\n<link href=\"https:\/\/cdn.jsdelivr.net\/npm\/tailwindcss@2.2.19\/dist\/tailwind.min.css\" rel=\"stylesheet\">\n    <link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/@fortawesome\/fontawesome-free@6.4.0\/css\/all.min.css\">\n    <style>\n        \/* \u2500\u2500\u2500 Base Reset \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n        *, *::before, *::after {\n            box-sizing: border-box;\n            -webkit-tap-highlight-color: transparent;\n        }\n\n        \/* \u2500\u2500\u2500 Wheel Container \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n        .wheel-container {\n            position: relative;\n            width: min(88vw, 400px);\n            height: min(88vw, 400px);\n            margin: 0 auto;\n        }\n\n        .wheel {\n            width: 100%;\n            height: 100%;\n            border-radius: 50%;\n            position: relative;\n            cursor: pointer;\n            border: 6px solid #2563eb;\n            box-shadow: 0 0 24px rgba(37, 99, 235, 0.35);\n            background: white;\n            touch-action: manipulation;\n            -webkit-user-select: none;\n            user-select: none;\n            -webkit-tap-highlight-color: transparent;\n            will-change: transform;\n        }\n\n        .wheel.spinning {\n            transition: transform 6s cubic-bezier(0.23, 1, 0.32, 1);\n        }\n\n        .wheel-svg {\n            width: 100%;\n            height: 100%;\n            border-radius: 50%;\n            overflow: hidden;\n            display: block;\n        }\n\n        .segment-text {\n            font-weight: bold;\n            fill: white;\n            text-shadow: none;\n            dominant-baseline: middle;\n            text-anchor: middle;\n            pointer-events: none;\n        }\n\n        \/* \u2500\u2500\u2500 Pointer Arrow \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n        .wheel-pointer {\n            position: absolute;\n            top: 50%;\n            right: -18px;\n            transform: translateY(-50%);\n            width: 0;\n            height: 0;\n            border-top: 18px solid transparent;\n            border-bottom: 18px solid transparent;\n            border-right: 36px solid #ef4444;\n            z-index: 10;\n            filter: drop-shadow(0 3px 6px rgba(0,0,0,0.35));\n        }\n\n        \/* \u2500\u2500\u2500 Winner Display \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n        .winner-display {\n            text-align: center;\n            margin-bottom: 16px;\n            min-height: 56px;\n            display: flex;\n            flex-direction: column;\n            justify-content: center;\n            align-items: center;\n            padding: 0 12px;\n        }\n\n        .winner-text {\n            font-size: clamp(22px, 7vw, 46px);\n            font-weight: 800;\n            color: #2563eb;\n            margin-bottom: 10px;\n            opacity: 0;\n            transform: scale(0.5);\n            transition: all 0.55s cubic-bezier(0.68, -0.55, 0.265, 1.55);\n            word-break: break-word;\n            line-height: 1.2;\n        }\n\n        .winner-text.show {\n            opacity: 1;\n            transform: scale(1);\n        }\n\n        .winner-actions {\n            display: flex;\n            gap: 10px;\n            opacity: 0;\n            transition: opacity 0.4s ease 0.3s;\n            flex-wrap: wrap;\n            justify-content: center;\n        }\n\n        .winner-actions.show {\n            opacity: 1;\n        }\n\n        \/* \u2500\u2500\u2500 Buttons \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n        .winner-btn {\n            background: linear-gradient(135deg, #535353 0%, #000 100%);\n            color: white;\n            border: none;\n            padding: 10px 18px;\n            border-radius: 10px;\n            cursor: pointer;\n            font-weight: 700;\n            font-size: clamp(12px, 3.5vw, 14px);\n            touch-action: manipulation;\n            min-height: 44px;\n            min-width: 44px;\n            -webkit-appearance: none;\n            transition: transform 0.15s, box-shadow 0.15s;\n        }\n\n        .winner-btn:active {\n            transform: scale(0.95);\n        }\n\n        .control-btn {\n            background: linear-gradient(135deg, #9d9d9d 0%, #000 100%);\n            color: white;\n            border: none;\n            padding: 12px 16px;\n            border-radius: 10px;\n            cursor: pointer;\n            font-weight: 700;\n            font-size: clamp(12px, 3.5vw, 14px);\n            touch-action: manipulation;\n            min-height: 48px;\n            min-width: 48px;\n            margin: 4px;\n            -webkit-appearance: none;\n            transition: transform 0.15s, box-shadow 0.15s;\n        }\n\n        .control-btn:active {\n            transform: scale(0.94);\n        }\n\n        .control-btn:disabled {\n            opacity: 0.5;\n            cursor: not-allowed;\n            transform: none;\n        }\n\n        .sort-btn {\n            background: linear-gradient(135deg, #7b7b7b 0%, #000 100%);\n            color: white;\n            border: none;\n            padding: 10px 14px;\n            border-radius: 8px;\n            cursor: pointer;\n            font-weight: 700;\n            font-size: clamp(11px, 3vw, 13px);\n            min-height: 44px;\n            min-width: 44px;\n            touch-action: manipulation;\n            -webkit-appearance: none;\n            transition: transform 0.15s;\n        }\n\n        .sort-btn:active {\n            transform: scale(0.94);\n        }\n\n        \/* \u2500\u2500\u2500 Controls Row \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n        .controls-container {\n            display: flex;\n            flex-wrap: wrap;\n            justify-content: center;\n            gap: 6px;\n            padding: 0 8px;\n        }\n\n        \/* \u2500\u2500\u2500 Edit Modal \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n        .edit-modal {\n            position: fixed;\n            inset: 0;\n            background: rgba(0,0,0,0.55);\n            z-index: 9999;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            padding: 16px;\n            -webkit-overflow-scrolling: touch;\n        }\n\n        .edit-content {\n            background: white;\n            padding: 18px;\n            border-radius: 18px;\n            max-width: 500px;\n            width: 100%;\n            max-height: 85vh;\n            overflow-y: auto;\n            -webkit-overflow-scrolling: touch;\n            overscroll-behavior: contain;\n        }\n\n        \/* \u2500\u2500\u2500 Name List Items \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n        .name-item {\n            display: flex;\n            align-items: center;\n            padding: 8px 10px;\n            margin: 6px 0;\n            background: #f3f4f6;\n            border-radius: 10px;\n            gap: 8px;\n            flex-wrap: wrap;\n        }\n\n        .name-item input {\n            flex: 1;\n            padding: 8px 10px;\n            border: 1.5px solid #e2e8f0;\n            background: white;\n            border-radius: 8px;\n            font-size: 16px; \/* prevents iOS zoom on focus *\/\n            min-width: 120px;\n            -webkit-appearance: none;\n            outline: none;\n            transition: border-color 0.2s;\n        }\n\n        .name-item input:focus {\n            border-color: #6366f1;\n        }\n\n        .name-item.hidden-name {\n            opacity: 0.5;\n            background: #fef2f2;\n        }\n\n        .name-item-buttons {\n            display: flex;\n            gap: 6px;\n            flex-shrink: 0;\n        }\n\n        .name-item-buttons button {\n            min-height: 36px;\n            min-width: 36px;\n            border: none;\n            border-radius: 8px;\n            cursor: pointer;\n            font-size: 13px;\n            font-weight: 600;\n            padding: 6px 10px;\n            touch-action: manipulation;\n            -webkit-appearance: none;\n            transition: transform 0.12s, filter 0.12s;\n        }\n\n        .name-item-buttons button:active {\n            transform: scale(0.93);\n            filter: brightness(0.9);\n        }\n\n        .btn-hide  { background: #f59e0b; color: white; }\n        .btn-del   { background: #ef4444; color: white; }\n\n        \/* \u2500\u2500\u2500 Sort Controls \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n        .sort-controls {\n            display: flex;\n            flex-wrap: wrap;\n            gap: 8px;\n            justify-content: center;\n            margin-bottom: 14px;\n        }\n\n        \/* \u2500\u2500\u2500 Pulse \/ Spinning FX \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n        .pulse-animation {\n            animation: pulse 0.3s ease-in-out;\n        }\n\n        @keyframes pulse {\n            0%   { transform: scale(1); }\n            50%  { transform: scale(1.04); }\n            100% { transform: scale(1); }\n        }\n\n        .spinning-effect {\n            animation: spin-glow 0.15s infinite;\n        }\n\n        @keyframes spin-glow {\n            0%,100% { filter: brightness(1); }\n            50%      { filter: brightness(1.12); }\n        }\n\n        \/* \u2500\u2500\u2500 Fullscreen Mode \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n        .fullscreen-mode {\n            position: fixed !important;\n            inset: 0 !important;\n            width: 100vw !important;\n            height: 100vh !important;\n            z-index: 999999 !important;\n            background: #fff !important;\n            overflow-y: auto !important;\n            -webkit-overflow-scrolling: touch;\n            padding: 16px !important;\n        }\n\n        .fullscreen-mode .wheel-container {\n            width: min(80vmin, 480px) !important;\n            height: min(80vmin, 480px) !important;\n        }\n\n        .fullscreen-mode .edit-modal {\n            z-index: 1000000 !important;\n        }\n\n        \/* \u2500\u2500\u2500 Info Cards \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n        .shortcut-card {\n            background: white;\n            border: 1px solid #e0e7ff;\n            border-radius: 14px;\n            padding: 16px;\n            text-align: center;\n            box-shadow: 0 1px 4px rgba(0,0,0,0.06);\n        }\n\n        .shortcut-key {\n            font-size: clamp(15px, 4vw, 20px);\n            font-weight: 800;\n            color: #4f46e5;\n            margin-bottom: 6px;\n        }\n\n        \/* \u2500\u2500\u2500 Responsive Tweaks \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n        @media (max-width: 480px) {\n            .wheel-container {\n                width: min(86vw, 340px);\n                height: min(86vw, 340px);\n            }\n\n            .control-btn {\n                padding: 11px 12px;\n                font-size: 12px;\n            }\n\n            .winner-btn {\n                padding: 9px 12px;\n                font-size: 12px;\n            }\n\n            .edit-content {\n                padding: 14px;\n                border-radius: 14px;\n            }\n\n            h2.page-title {\n                font-size: 20px;\n            }\n        }\n\n        @media (max-width: 360px) {\n            .wheel-container {\n                width: 82vw;\n                height: 82vw;\n            }\n        }\n\n        \/* \u2500\u2500\u2500 Safe-area (iPhone notch) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n        @supports (padding: max(0px)) {\n            .controls-container {\n                padding-left:  max(8px, env(safe-area-inset-left));\n                padding-right: max(8px, env(safe-area-inset-right));\n            }\n            .fullscreen-mode {\n                padding-top:    max(16px, env(safe-area-inset-top)) !important;\n                padding-bottom: max(16px, env(safe-area-inset-bottom)) !important;\n                padding-left:   max(16px, env(safe-area-inset-left)) !important;\n                padding-right:  max(16px, env(safe-area-inset-right)) !important;\n            }\n        }\n\n        \/* \u2500\u2500\u2500 No-hover devices (pure touch) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n        @media (hover: none) {\n            .control-btn:hover,\n            .winner-btn:hover,\n            .sort-btn:hover { transform: none; box-shadow: none; }\n        }\n\n        \/* \u2500\u2500\u2500 Landscape phone \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n        @media (max-height: 500px) and (orientation: landscape) {\n            .wheel-container {\n                width: min(60vh, 280px);\n                height: min(60vh, 280px);\n            }\n            .winner-text { font-size: clamp(18px, 5vw, 30px); }\n            .controls-container { gap: 4px; }\n            .control-btn { padding: 9px 12px; font-size: 11px; min-height: 40px; }\n        }\n    <\/style>\n\n<div id=\"app\" class=\"container mx-auto px-3 py-4 md:py-8\">\n\n    <h2 class=\"page-title text-2xl md:text-4xl font-bold text-center text-gray-800 mb-4 md:mb-8\">\n        Dandy&#8217;s World Wheel of Names\n    <\/h2>\n\n    <!-- Winner Display -->\n    <div class=\"winner-display\" id=\"winnerDisplay\">\n        <div class=\"winner-text\" id=\"winnerText\"><\/div>\n        <div class=\"winner-actions\" id=\"winnerActions\">\n            <button class=\"winner-btn\" id=\"hideSelectedBtn\">\n                <i class=\"fas fa-eye-slash mr-1\"><\/i>Hide Selected\n            <\/button>\n            <button class=\"winner-btn\" id=\"closeWinnerBtn\">\n                <i class=\"fas fa-times mr-1\"><\/i>Close\n            <\/button>\n        <\/div>\n    <\/div>\n\n    <!-- Wheel -->\n    <div class=\"wheel-container\" id=\"wheelContainer\">\n        <div class=\"wheel-pointer\"><\/div>\n        <div class=\"wheel\" id=\"wheel\" role=\"button\" aria-label=\"Spin the wheel\">\n            <svg class=\"wheel-svg\" viewBox=\"0 0 400 400\" id=\"wheelSvg\"><\/svg>\n        <\/div>\n    <\/div>\n\n    <!-- Controls -->\n    <div class=\"controls-container mt-5 md:mt-8\">\n        <button id=\"spinBtn\" class=\"control-btn\">\n            <i class=\"fas fa-play mr-1\"><\/i>Spin\n        <\/button>\n        <button id=\"editBtn\" class=\"control-btn\">\n            <i class=\"fas fa-edit mr-1\"><\/i>Edit\n        <\/button>\n        <button id=\"resetBtn\" class=\"control-btn\">\n            <i class=\"fas fa-undo mr-1\"><\/i>Reset\n        <\/button>\n        <button id=\"fullscreenBtn\" class=\"control-btn\">\n            <i class=\"fas fa-expand mr-1\"><\/i>Full Screen\n        <\/button>\n    <\/div>\n\n    <!-- \u2500\u2500 Keyboard Shortcuts + Characters Info \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n    <div class=\"bg-gradient-to-br from-indigo-50 via-white to-purple-50 rounded-2xl shadow-xl p-6 md:p-8 mb-8 mt-8\">\n\n        <h2 class=\"text-xl md:text-2xl font-bold text-gray-800 text-center mb-6\">\n            \ud83c\udfae Keyboard Shortcuts\n        <\/h2>\n\n        <div class=\"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-3 text-center\">\n            <div class=\"shortcut-card\"><div class=\"shortcut-key\">SPACE<\/div><p class=\"text-gray-600 text-xs md:text-sm\">Spin Wheel<\/p><\/div>\n            <div class=\"shortcut-card\"><div class=\"shortcut-key\">E<\/div><p class=\"text-gray-600 text-xs md:text-sm\">Edit Names<\/p><\/div>\n            <div class=\"shortcut-card\"><div class=\"shortcut-key\">R<\/div><p class=\"text-gray-600 text-xs md:text-sm\">Reset Wheel<\/p><\/div>\n            <div class=\"shortcut-card\"><div class=\"shortcut-key\">F<\/div><p class=\"text-gray-600 text-xs md:text-sm\">Full Screen<\/p><\/div>\n            <div class=\"shortcut-card\"><div class=\"shortcut-key\">X<\/div><p class=\"text-gray-600 text-xs md:text-sm\">Close Winner<\/p><\/div>\n            <div class=\"shortcut-card\"><div class=\"shortcut-key\">S<\/div><p class=\"text-gray-600 text-xs md:text-sm\">Hide Selected<\/p><\/div>\n        <\/div>\n\n        <p class=\"text-center text-gray-600 text-sm mt-5\">\n            Tap the wheel or press <strong class=\"text-indigo-600\">SPACE<\/strong> to spin!\n            Use the <strong class=\"text-indigo-600\">Edit<\/strong> button to customise names.\n        <\/p>\n\n        <!-- Characters -->\n        <h2 class=\"text-xl md:text-2xl font-bold text-gray-800 text-center mt-10 mb-6\">\n            \ud83c\udf1f Meet the Characters Through the Wheel\n        <\/h2>\n\n        <div class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-5\">\n            <div class=\"bg-white rounded-2xl p-5 border-l-4 border-pink-400 shadow-sm\">\n                <p class=\"font-semibold text-gray-800 mb-1\">Poppy \u2013 Dandy&#8217;s World<\/p>\n                <p class=\"text-gray-600 text-sm\">The epicentre of the group who is always looking for a new adventure.<\/p>\n            <\/div>\n            <div class=\"bg-white rounded-2xl p-5 border-l-4 border-blue-400 shadow-sm\">\n                <p class=\"font-semibold text-gray-800 mb-1\">Shelly \u2013 Dandy&#8217;s World<\/p>\n                <p class=\"text-gray-600 text-sm\">Cool, calm and curious \u2014 a name that always delivers knowledge.<\/p>\n            <\/div>\n            <div class=\"bg-white rounded-2xl p-5 border-l-4 border-green-400 shadow-sm\">\n                <p class=\"font-semibold text-gray-800 mb-1\">Pebble \u2013 Dandy World<\/p>\n                <p class=\"text-gray-600 text-sm\">Small but sassy, Pebble always adds the spice to every spin.<\/p>\n            <\/div>\n            <div class=\"bg-white rounded-2xl p-5 border-l-4 border-purple-400 shadow-sm\">\n                <p class=\"font-semibold text-gray-800 mb-1\">The Twisted Dandy<\/p>\n                <p class=\"text-gray-600 text-sm\">The one who arrives with a twist in their pocket.<\/p>\n            <\/div>\n            <div class=\"bg-white rounded-2xl p-5 border-l-4 border-yellow-400 shadow-sm\">\n                <p class=\"font-semibold text-gray-800 mb-1\">Tropical Toodles<\/p>\n                <p class=\"text-gray-600 text-sm\">Bubbly and bright, Toodle brings sunshine wherever she may wander.<\/p>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <!-- \u2500\u2500 How to Use \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n    <div class=\"bg-gradient-to-br from-indigo-50 via-white to-purple-50 rounded-2xl shadow-md p-6 md:p-8 mb-8 border border-indigo-100\">\n        <div class=\"text-center mb-5\">\n            <h3 class=\"text-xl md:text-2xl font-bold text-indigo-700 mb-2\">\ud83c\udfa1 How to Use the Dandy&#8217;s World Wheel of Names?<\/h3>\n            <div class=\"w-16 h-1 bg-indigo-500 mx-auto rounded-full\"><\/div>\n        <\/div>\n        <div class=\"max-w-2xl mx-auto bg-white rounded-xl p-5 shadow-sm border border-gray-100\">\n            <p class=\"text-gray-700 leading-relaxed mb-3\">\n                Simply press <span class=\"font-semibold text-indigo-600\">Spin<\/span> and see which character the wheel gives you.\n            <\/p>\n            <p class=\"text-gray-600 leading-relaxed\">\n                Whether you are throwing a party, creating fun stories, or just wandering around\n                <span class=\"font-medium text-purple-600\">Dandy&#8217;s universe<\/span>,\n                the wheel becomes your playful portal to spontaneous fun.\n            <\/p>\n            <div class=\"mt-5 flex justify-center\">\n                <div class=\"bg-gray-900 text-white px-5 py-2 rounded-full text-sm font-medium shadow\">\n                    \ud83c\udf89 Spin \u2022 Discover \u2022 Enjoy\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <!-- \u2500\u2500 Core Features \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n    <div class=\"bg-gradient-to-br from-indigo-50 to-purple-50 rounded-2xl p-6 md:p-8 shadow-md mb-8\">\n        <div class=\"text-center mb-6\">\n            <h3 class=\"text-2xl md:text-3xl font-bold text-gray-800 mb-1\">\ud83c\udfaf Core Spinning Features of Dandy&#8217;s World Wheel of Names<\/h3>\n            <p class=\"text-gray-600 text-sm\">Powerful interactive controls and advanced name management<\/p>\n        <\/div>\n\n        <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-5\">\n            <div class=\"bg-white rounded-xl p-5 shadow-sm border border-indigo-100\">\n                <div class=\"font-semibold text-indigo-600 mb-1\">Interactive Wheel Interface<\/div>\n                <div class=\"text-gray-600 text-sm\">Tap the wheel, press SPACE, or use the Spin button to rotate with realistic physics.<\/div>\n            <\/div>\n            <div class=\"bg-white rounded-xl p-5 shadow-sm border border-purple-100\">\n                <div class=\"font-semibold text-purple-600 mb-1\">Pre-loaded Names<\/div>\n                <div class=\"text-gray-600 text-sm\">Includes 20 default characters from Dandy&#8217;s World to get started instantly.<\/div>\n            <\/div>\n            <div class=\"bg-white rounded-xl p-5 shadow-sm border border-pink-100\">\n                <div class=\"font-semibold text-pink-600 mb-1\">Edit &#038; Modify Entries<\/div>\n                <div class=\"text-gray-600 text-sm\">Open the edit panel to modify, randomize, and manage all entries easily.<\/div>\n            <\/div>\n            <div class=\"bg-white rounded-xl p-5 shadow-sm border border-blue-100\">\n                <div class=\"font-semibold text-blue-600 mb-1\">Add &#038; Rename Names<\/div>\n                <div class=\"text-gray-600 text-sm\">Quickly add new names or rename existing ones with inline editing.<\/div>\n            <\/div>\n            <div class=\"bg-white rounded-xl p-5 shadow-sm border border-red-100\">\n                <div class=\"font-semibold text-red-600 mb-1\">Delete &#038; Hide Names<\/div>\n                <div class=\"text-gray-600 text-sm\">Delete names individually or hide them temporarily without permanent removal.<\/div>\n            <\/div>\n            <div class=\"bg-white rounded-xl p-5 shadow-sm border border-green-100\">\n                <div class=\"font-semibold text-green-600 mb-1\">Smart Validation<\/div>\n                <div class=\"text-gray-600 text-sm\">Prevents empty entries and ensures at least one valid name stays on the wheel.<\/div>\n            <\/div>\n            <div class=\"bg-white rounded-xl p-5 shadow-sm border border-yellow-100\">\n                <div class=\"font-semibold text-yellow-600 mb-1\">Randomize (Fisher-Yates)<\/div>\n                <div class=\"text-gray-600 text-sm\">Shuffle all names randomly using the efficient Fisher-Yates algorithm.<\/div>\n            <\/div>\n            <div class=\"bg-white rounded-xl p-5 shadow-sm border border-teal-100\">\n                <div class=\"font-semibold text-teal-600 mb-1\">Sorting Options<\/div>\n                <div class=\"text-gray-600 text-sm\">Sort names A\u2013Z or Z\u2013A instantly for organised selection.<\/div>\n            <\/div>\n            <div class=\"bg-white rounded-xl p-5 shadow-sm border border-orange-100 sm:col-span-2\">\n                <div class=\"font-semibold text-orange-600 mb-1\">Bulk Actions<\/div>\n                <div class=\"text-gray-600 text-sm\">Edit multiple names at once for faster management and organisation.<\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n<\/div><!-- \/#app -->\n\n<!-- \u2500\u2500 Edit Modal \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n<div id=\"editModal\" class=\"edit-modal\" style=\"display:none;\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Edit Names\">\n    <div class=\"edit-content\">\n        <h2 class=\"text-xl md:text-2xl font-bold mb-4\">Edit Names<\/h2>\n\n        <div class=\"sort-controls\">\n            <button id=\"randomizeBtn\" class=\"sort-btn\"><i class=\"fas fa-dice mr-1\"><\/i>\ud83c\udfb2 Randomize<\/button>\n            <button id=\"sortAscBtn\"   class=\"sort-btn\"><i class=\"fas fa-sort-alpha-down mr-1\"><\/i>A \u2192 Z<\/button>\n            <button id=\"sortDescBtn\"  class=\"sort-btn\"><i class=\"fas fa-sort-alpha-up mr-1\"><\/i>Z \u2192 A<\/button>\n        <\/div>\n\n        <div id=\"namesList\"><\/div>\n\n        <div class=\"mt-4\">\n            <button id=\"addNameBtn\" class=\"control-btn w-full\">\n                <i class=\"fas fa-plus mr-2\"><\/i>Add Name\n            <\/button>\n        <\/div>\n        <div class=\"mt-3 flex gap-3\">\n            <button id=\"saveNamesBtn\"   class=\"control-btn flex-1\"><i class=\"fas fa-save mr-1\"><\/i>Save<\/button>\n            <button id=\"cancelEditBtn\"  class=\"control-btn flex-1\"><i class=\"fas fa-times mr-1\"><\/i>Cancel<\/button>\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n<script>\nclass RandomNameWheel {\n    constructor() {\n        this.names = [\n            'Toodles','Shelly','Boxten','Flutter','Vee','Pebble','Cosmo',\n            'Shrimpo','Brightney','Scraps','Astro','Teagan','Poppy',\n            'Razzle & Dazzle','Rodger','Tisha','Glisten','Dandy','Goob','Sprout'\n        ];\n\n        this.hiddenNames    = new Set();\n        this.isSpinning     = false;\n        this.currentRotation = 0;\n        this.selectedName   = '';\n        this.isFullscreen   = false;\n        this.audioContext   = null;\n        this.originalParent = null;\n        this.fullscreenEl   = null;\n        this._touchMoved    = false;\n\n        this._initElements();\n        this._setupEvents();\n        this._initAudio();\n        this.renderWheel();\n    }\n\n    \/* \u2500\u2500 DOM refs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n    _initElements() {\n        const $ = id => document.getElementById(id);\n        this.wheel           = $('wheel');\n        this.wheelSvg        = $('wheelSvg');\n        this.spinBtn         = $('spinBtn');\n        this.editBtn         = $('editBtn');\n        this.resetBtn        = $('resetBtn');\n        this.fullscreenBtn   = $('fullscreenBtn');\n        this.winnerText      = $('winnerText');\n        this.winnerActions   = $('winnerActions');\n        this.closeWinnerBtn  = $('closeWinnerBtn');\n        this.hideSelectedBtn = $('hideSelectedBtn');\n        this.editModal       = $('editModal');\n        this.namesList       = $('namesList');\n        this.addNameBtn      = $('addNameBtn');\n        this.saveNamesBtn    = $('saveNamesBtn');\n        this.cancelEditBtn   = $('cancelEditBtn');\n        this.wheelContainer  = $('wheelContainer');\n        this.app             = $('app');\n        this.randomizeBtn    = $('randomizeBtn');\n        this.sortAscBtn      = $('sortAscBtn');\n        this.sortDescBtn     = $('sortDescBtn');\n    }\n\n    \/* \u2500\u2500 Events \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n    _setupEvents() {\n        \/* Spin *\/\n        this.spinBtn.addEventListener('click', () => this.spin());\n\n        \/* Touch-safe wheel click \u2014 ignore if finger dragged\/scrolled *\/\n        this.wheel.addEventListener('touchstart', e => {\n            this._touchMoved = false;\n        }, { passive: true });\n\n        this.wheel.addEventListener('touchmove', () => {\n            this._touchMoved = true;\n        }, { passive: true });\n\n        this.wheel.addEventListener('touchend', e => {\n            if (!this._touchMoved) {\n                e.preventDefault();\n                this.spin();\n            }\n        }, { passive: false });\n\n        \/* Desktop click *\/\n        this.wheel.addEventListener('click', () => this.spin());\n\n        \/* Controls *\/\n        this.editBtn.addEventListener('click',         () => this.openEditModal());\n        this.resetBtn.addEventListener('click',        () => this.reset());\n        this.fullscreenBtn.addEventListener('click',   () => this.toggleFullscreen());\n        this.closeWinnerBtn.addEventListener('click',  () => this.closeWinner());\n        this.hideSelectedBtn.addEventListener('click', () => this.hideSelected());\n        this.addNameBtn.addEventListener('click',      () => this.addNameInput());\n        this.saveNamesBtn.addEventListener('click',    () => this.saveNames());\n        this.cancelEditBtn.addEventListener('click',   () => this.closeEditModal());\n\n        \/* Sort *\/\n        this.randomizeBtn.addEventListener('click', () => this.randomizeNames());\n        this.sortAscBtn.addEventListener('click',   () => this.sortNames(true));\n        this.sortDescBtn.addEventListener('click',  () => this.sortNames(false));\n\n        \/* Close modal on backdrop tap *\/\n        this.editModal.addEventListener('click', e => {\n            if (e.target === this.editModal) this.closeEditModal();\n        });\n\n        \/* Keyboard shortcuts *\/\n        document.addEventListener('keydown', e => {\n            if (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA') return;\n            switch (e.key.toLowerCase()) {\n                case ' ':       e.preventDefault(); this.spin(); break;\n                case 'x':       this.closeWinner();   break;\n                case 's':       this.hideSelected();  break;\n                case 'r':       this.reset();         break;\n                case 'e':       this.openEditModal(); break;\n                case 'f':       this.toggleFullscreen(); break;\n                case 'escape':\n                    this.closeWinner();\n                    this.closeEditModal();\n                    if (this.isFullscreen) this.exitFullscreen();\n                    break;\n            }\n        });\n\n        \/* Native fullscreen change (e.g. user presses Esc in browser) *\/\n        document.addEventListener('fullscreenchange',       () => this._onFsChange());\n        document.addEventListener('webkitfullscreenchange', () => this._onFsChange());\n    }\n\n    _onFsChange() {\n        if (!document.fullscreenElement && !document.webkitFullscreenElement && this.isFullscreen) {\n            this.exitFullscreen();\n        }\n    }\n\n    \/* \u2500\u2500 Audio \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n    _initAudio() {\n        try {\n            this.audioContext = new (window.AudioContext || window.webkitAudioContext)();\n        } catch (e) { \/* audio unavailable *\/ }\n    }\n\n    _resumeAudio() {\n        if (this.audioContext && this.audioContext.state === 'suspended') {\n            this.audioContext.resume();\n        }\n    }\n\n    _playTone(freq, dur, type = 'sine', vol = 0.08) {\n        if (!this.audioContext) return;\n        try {\n            const osc  = this.audioContext.createOscillator();\n            const gain = this.audioContext.createGain();\n            osc.connect(gain);\n            gain.connect(this.audioContext.destination);\n            osc.frequency.setValueAtTime(freq, this.audioContext.currentTime);\n            osc.type = type;\n            gain.gain.setValueAtTime(vol, this.audioContext.currentTime);\n            gain.gain.exponentialRampToValueAtTime(0.001, this.audioContext.currentTime + dur);\n            osc.start(this.audioContext.currentTime);\n            osc.stop(this.audioContext.currentTime + dur);\n        } catch (e) { \/* ignore *\/ }\n    }\n\n    _playSpinSound() {\n        let freq = 150, count = 0;\n        const id = setInterval(() => {\n            if (!this.isSpinning) { clearInterval(id); return; }\n            this._playTone(freq, 0.08, 'square', 0.06);\n            freq = Math.min(freq + (count < 30 ? 30 : -20), 1000);\n            count++;\n        }, 80);\n    }\n\n    _playWinSound() {\n        [[523,0],[659,300],[784,600],[1047,1000]].forEach(([f,d]) =>\n            setTimeout(() => this._playTone(f, 0.35, 'sine', 0.1), d)\n        );\n    }\n\n    \/* \u2500\u2500 Wheel Render \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n    renderWheel() {\n        const active = this.names.filter(n => !this.hiddenNames.has(n));\n        this.wheelSvg.innerHTML = '';\n\n        if (active.length === 0) {\n            const t = document.createElementNS('http:\/\/www.w3.org\/2000\/svg','text');\n            t.setAttribute('x','200'); t.setAttribute('y','200');\n            t.setAttribute('text-anchor','middle'); t.setAttribute('dominant-baseline','middle');\n            t.setAttribute('fill','#666'); t.setAttribute('font-size','18');\n            t.textContent = 'No names available';\n            this.wheelSvg.appendChild(t);\n            return;\n        }\n\n        const COLORS = [\n            '#ef4444','#f97316','#eab308','#22c55e',\n            '#06b6d4','#3b82f6','#8b5cf6','#ec4899',\n            '#f59e0b','#10b981','#6366f1','#d946ef',\n            '#ff6b6b','#4ecdc4','#45b7d1','#96ceb4',\n            '#ffeaa7','#dda0dd','#98d8c8','#f7dc6f'\n        ];\n\n        const step = 360 \/ active.length;\n        const R    = 190;\n        const cx   = 200, cy = 200;\n\n        \/* Dynamic font size based on segment count *\/\n        const rawSize = Math.max(7, Math.min(14, 220 \/ active.length));\n        const fontSize = rawSize;\n\n        active.forEach((name, i) => {\n            const a1 = i * step, a2 = (i + 1) * step;\n            const r1 = (a1 * Math.PI) \/ 180, r2 = (a2 * Math.PI) \/ 180;\n            const x1 = cx + R * Math.cos(r1), y1 = cy + R * Math.sin(r1);\n            const x2 = cx + R * Math.cos(r2), y2 = cy + R * Math.sin(r2);\n            const large = a2 - a1 > 180 ? 1 : 0;\n\n            const path = document.createElementNS('http:\/\/www.w3.org\/2000\/svg','path');\n            path.setAttribute('d',\n                `M ${cx} ${cy} L ${x1} ${y1} A ${R} ${R} 0 ${large} 1 ${x2} ${y2} Z`\n            );\n            path.setAttribute('fill', COLORS[i % COLORS.length]);\n            path.setAttribute('stroke','#fff');\n            path.setAttribute('stroke-width','2');\n\n            const mid  = (a1 + a2) \/ 2;\n            const tr   = R * 0.65;\n            const tx   = cx + tr * Math.cos((mid * Math.PI) \/ 180);\n            const ty   = cy + tr * Math.sin((mid * Math.PI) \/ 180);\n            const rot  = mid > 90 && mid < 270 ? mid + 180 : mid;\n\n            const text = document.createElementNS('http:\/\/www.w3.org\/2000\/svg','text');\n            text.setAttribute('x', tx);\n            text.setAttribute('y', ty);\n            text.setAttribute('class','segment-text');\n            text.setAttribute('font-size', fontSize);\n            text.setAttribute('transform',`rotate(${rot} ${tx} ${ty})`);\n            text.setAttribute('fill','white');\n            text.setAttribute('font-weight','bold');\n\n            \/* Truncate long names so they fit *\/\n            const maxChars = Math.max(4, Math.floor(18 \/ (active.length \/ 8)));\n            text.textContent = name.length > maxChars ? name.slice(0, maxChars) + '\u2026' : name;\n\n            this.wheelSvg.appendChild(path);\n            this.wheelSvg.appendChild(text);\n        });\n    }\n\n    \/* \u2500\u2500 Spin \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n    spin() {\n        if (this.isSpinning) return;\n        const active = this.names.filter(n => !this.hiddenNames.has(n));\n        if (active.length === 0) { alert('No names available to spin!'); return; }\n\n        this.isSpinning = true;\n        this.spinBtn.disabled = true;\n        this.closeWinner();\n        this._resumeAudio();\n\n        \/* Reset transition cleanly *\/\n        this.wheel.classList.remove('spinning','spinning-effect');\n        void this.wheel.offsetHeight; \/\/ force reflow\n\n        this.wheel.classList.add('spinning','spinning-effect');\n        this.wheelContainer.classList.add('pulse-animation');\n        setTimeout(() => this.wheelContainer.classList.remove('pulse-animation'), 350);\n\n        this._playSpinSound();\n\n        const spins        = 8 + Math.random() * 7;\n        const finalAngle   = Math.random() * 360;\n        const totalRotation = this.currentRotation + spins * 360 + finalAngle;\n\n        this.wheel.style.transform = `rotate(${totalRotation}deg)`;\n        this.currentRotation = totalRotation;\n\n        \/* Determine winner *\/\n        const step      = 360 \/ active.length;\n        const norm      = ((this.currentRotation % 360) + 360) % 360;\n        const pointer   = (360 - norm + 360) % 360;\n        const idx       = Math.floor(pointer \/ step) % active.length;\n        this.selectedName = active[idx];\n\n        setTimeout(() => {\n            this.wheel.classList.remove('spinning','spinning-effect');\n            this.isSpinning  = false;\n            this.spinBtn.disabled = false;\n            this._showWinner();\n            this._playWinSound();\n        }, 6000);\n    }\n\n    \/* \u2500\u2500 Winner UI \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n    _showWinner() {\n        this.winnerText.textContent = this.selectedName;\n        this.winnerText.classList.add('show');\n        setTimeout(() => this.winnerActions.classList.add('show'), 300);\n    }\n\n    closeWinner() {\n        this.winnerText.classList.remove('show');\n        this.winnerActions.classList.remove('show');\n        setTimeout(() => { this.winnerText.textContent = ''; }, 300);\n    }\n\n    hideSelected() {\n        if (this.selectedName) {\n            this.hiddenNames.add(this.selectedName);\n            this.renderWheel();\n            this.closeWinner();\n        }\n    }\n\n    \/* \u2500\u2500 Reset \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n    reset() {\n        this.hiddenNames.clear();\n        this.currentRotation = 0;\n        this.wheel.classList.remove('spinning','spinning-effect');\n        this.wheel.style.transition = 'none';\n        this.wheel.style.transform  = 'rotate(0deg)';\n        void this.wheel.offsetHeight;\n        this.wheel.style.transition = '';\n        this.closeWinner();\n        this.renderWheel();\n    }\n\n    \/* \u2500\u2500 Fullscreen \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n    toggleFullscreen() {\n        this.isFullscreen ? this.exitFullscreen() : this.enterFullscreen();\n    }\n\n    enterFullscreen() {\n        this.originalParent = this.app.parentNode;\n        this.fullscreenEl   = document.createElement('div');\n        this.fullscreenEl.className = 'fullscreen-mode';\n        this.fullscreenEl.appendChild(this.app);\n        document.body.appendChild(this.fullscreenEl);\n        this.isFullscreen = true;\n        this._updateFsBtn();\n\n        \/* Prevent body scroll while in fullscreen *\/\n        document.body.style.overflow = 'hidden';\n\n        try {\n            const req = this.fullscreenEl.requestFullscreen || this.fullscreenEl.webkitRequestFullscreen;\n            if (req) req.call(this.fullscreenEl).catch(() => {});\n        } catch (e) {}\n    }\n\n    exitFullscreen() {\n        if (this.fullscreenEl && this.originalParent) {\n            this.originalParent.appendChild(this.app);\n            if (this.fullscreenEl.parentNode)\n                this.fullscreenEl.parentNode.removeChild(this.fullscreenEl);\n            this.fullscreenEl = null;\n        }\n        this.isFullscreen = false;\n        this._updateFsBtn();\n        document.body.style.overflow = '';\n\n        try {\n            if (document.fullscreenElement || document.webkitFullscreenElement)\n                (document.exitFullscreen || document.webkitExitFullscreen).call(document).catch(() => {});\n        } catch (e) {}\n    }\n\n    _updateFsBtn() {\n        this.fullscreenBtn.innerHTML = this.isFullscreen\n            ? '<i class=\"fas fa-compress mr-1\"><\/i>Exit Full Screen'\n            : '<i class=\"fas fa-expand mr-1\"><\/i>Full Screen';\n    }\n\n    \/* \u2500\u2500 Edit Modal \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n    openEditModal() {\n        this._renderNamesList();\n        this.editModal.style.display = 'flex';\n        \/* Prevent body scroll behind modal *\/\n        document.body.style.overflow = 'hidden';\n    }\n\n    closeEditModal() {\n        this.editModal.style.display = 'none';\n        if (!this.isFullscreen) document.body.style.overflow = '';\n    }\n\n    _renderNamesList() {\n        this.namesList.innerHTML = '';\n        this.names.forEach((name, i) => {\n            const item = document.createElement('div');\n            item.className = `name-item ${this.hiddenNames.has(name) ? 'hidden-name' : ''}`;\n\n            const input = document.createElement('input');\n            input.type  = 'text';\n            input.value = name;\n            input.setAttribute('data-index', i);\n            input.setAttribute('autocomplete','off');\n            input.setAttribute('autocorrect','off');\n            input.setAttribute('spellcheck','false');\n            input.setAttribute('inputmode','text');\n\n            const btnWrap = document.createElement('div');\n            btnWrap.className = 'name-item-buttons';\n\n            const hideBtn = document.createElement('button');\n            hideBtn.className = 'btn-hide';\n            hideBtn.textContent = this.hiddenNames.has(name) ? 'Show' : 'Hide';\n            hideBtn.addEventListener('click', () => this.toggleNameVisibility(i));\n\n            const delBtn = document.createElement('button');\n            delBtn.className = 'btn-del';\n            delBtn.innerHTML = '<i class=\"fas fa-trash\"><\/i>';\n            delBtn.addEventListener('click', () => this.removeName(i));\n\n            btnWrap.appendChild(hideBtn);\n            btnWrap.appendChild(delBtn);\n            item.appendChild(input);\n            item.appendChild(btnWrap);\n            this.namesList.appendChild(item);\n        });\n    }\n\n    toggleNameVisibility(index) {\n        const name = this.names[index];\n        this.hiddenNames.has(name) ? this.hiddenNames.delete(name) : this.hiddenNames.add(name);\n        this._renderNamesList();\n    }\n\n    removeName(index) {\n        if (this.names.length <= 1) { alert('You need at least one name!'); return; }\n        this.hiddenNames.delete(this.names[index]);\n        this.names.splice(index, 1);\n        this._renderNamesList();\n    }\n\n    addNameInput() {\n        this.names.push('New Name');\n        this._renderNamesList();\n        const inputs = this.namesList.querySelectorAll('input');\n        const last   = inputs[inputs.length - 1];\n        last.focus();\n        last.select();\n    }\n\n    saveNames() {\n        const inputs = this.namesList.querySelectorAll('input');\n        const newNames  = [];\n        const newHidden = new Set();\n\n        inputs.forEach((inp, i) => {\n            const val = inp.value.trim();\n            if (!val) return;\n            newNames.push(val);\n            if (this.names[i] && this.hiddenNames.has(this.names[i]))\n                newHidden.add(val);\n        });\n\n        if (newNames.length === 0) { alert('You need at least one name!'); return; }\n\n        this.names       = newNames;\n        this.hiddenNames = newHidden;\n        this.renderWheel();\n        this.closeEditModal();\n    }\n\n    \/* \u2500\u2500 Sort \/ Randomize \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n    randomizeNames() {\n        for (let i = this.names.length - 1; i > 0; i--) {\n            const j = Math.floor(Math.random() * (i + 1));\n            [this.names[i], this.names[j]] = [this.names[j], this.names[i]];\n        }\n        this._renderNamesList();\n    }\n\n    sortNames(asc = true) {\n        this.names.sort((a, b) =>\n            asc ? a.toLowerCase().localeCompare(b.toLowerCase())\n                : b.toLowerCase().localeCompare(a.toLowerCase())\n        );\n        this._renderNamesList();\n    }\n}\n\n\/* \u2500\u2500 Boot \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\nwindow.addEventListener('DOMContentLoaded', () => {\n    window.wheel = new RandomNameWheel();\n});\n<\/script>\n\n\n\n<!-- SECTION: Intro -->\n    <div id=\"how-it-works\" class=\"mt-10 bg-white rounded-2xl shadow-md p-6 md:p-8\">\n      <div class=\"flex items-start gap-4\">\n        <div class=\"h-12 w-12 rounded-xl bg-indigo-50 text-indigo-700 flex items-center justify-center\">\n          <i class=\"fa-solid fa-bolt text-xl\"><\/i>\n        <\/div>\n        <div>\n          <h3 class=\"text-2xl font-bold text-gray-900\">A better way to pick your next Toon<\/h3>\n          <div class=\"mt-2 text-gray-700 leading-relaxed\">\n            If you\u2019ve spent even a few hours in <span class=\"font-semibold\">Dandy\u2019s World<\/span>, you already know:\n            selecting a Toon isn\u2019t easy. Stats, stamina, extraction speed, abilities\u2014there\u2019s a lot to weigh, and it\u2019s\n            easy to default to the same comfortable picks. A wheel-based randomizer flips that on its head and makes\n            your run feel fresh again.\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"mt-6 grid grid-cols-1 md:grid-cols-3 gap-4\">\n        <div class=\"rounded-xl border border-gray-100 bg-gray-50 p-5\">\n          <div class=\"font-semibold text-gray-900\">\n            <i class=\"fa-solid fa-shuffle mr-2 text-gray-700\"><\/i>Instant decision\n          <\/div>\n          <div class=\"mt-2 text-gray-700 text-sm leading-relaxed\">\n            Spin once, lock in a Toon, and move on\u2014no more staring at the selection screen.\n          <\/div>\n        <\/div>\n\n        <div class=\"rounded-xl border border-gray-100 bg-gray-50 p-5\">\n          <div class=\"font-semibold text-gray-900\">\n            <i class=\"fa-solid fa-wand-magic-sparkles mr-2 text-gray-700\"><\/i>More variety\n          <\/div>\n          <div class=\"mt-2 text-gray-700 text-sm leading-relaxed\">\n            You\u2019ll naturally explore underused characters and learn new approaches to surviving each floor.\n          <\/div>\n        <\/div>\n\n        <div class=\"rounded-xl border border-gray-100 bg-gray-50 p-5\">\n          <div class=\"font-semibold text-gray-900\">\n            <i class=\"fa-solid fa-fire mr-2 text-gray-700\"><\/i>Higher tension\n          <\/div>\n          <div class=\"mt-2 text-gray-700 text-sm leading-relaxed\">\n            \u201cBad spins\u201d create memorable moments\u2014especially when Panic Mode hits and you still pull it off.\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- SECTION: What is it -->\n    <div id=\"what-is\" class=\"mt-8 bg-white rounded-2xl shadow-md p-6 md:p-8\">\n      <div class=\"flex flex-col md:flex-row md:items-start md:justify-between gap-6\">\n        <div class=\"max-w-3xl\">\n          <h3 class=\"text-2xl font-bold text-gray-900\">\n            What is the\n            <a class=\"text-indigo-700 underline hover:text-indigo-800\"\n               href=\"#app\">Dandy\u2019s World<\/a>\n            Wheel of Names?\n          <\/h3>\n\n          <div class=\"mt-3 text-gray-700 leading-relaxed\">\n            It\u2019s a fan-created spinning tool that randomly selects a Toon for your next run. Instead of choosing a\n            \u201cmeta\u201d character every time, you let the wheel decide and adapt your playstyle to whatever you get.\n            This creates challenge runs, role-play prompts, and chaotic team comps\u2014without needing any in-game changes.\n          <\/div>\n\n          <div class=\"mt-4 text-gray-700 leading-relaxed\">\n            Community wheels already exist on popular spinner sites\u2014use them as-is or copy their idea to make your own\n            custom wheel with the exact Toons\/roles you want:\n          <\/div>\n        <\/div>\n\n        <!-- Side note -->\n        <div class=\"md:w-80 rounded-2xl border border-gray-100 bg-gray-50 p-5\">\n          <div class=\"font-bold text-gray-900\">\n            <i class=\"fa-solid fa-circle-info mr-2 text-gray-700\"><\/i>Keep it fair\n          <\/div>\n          <div class=\"mt-2 text-sm text-gray-700 leading-relaxed\">\n            If you\u2019re using the wheel in multiplayer, agree on rules (no rerolls, no duplicates, etc.) before you spin.\n            That way everyone commits to the chaos equally.\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- SECTION: Why love -->\n    <div id=\"why-love\" class=\"mt-8 bg-white rounded-2xl shadow-md p-6 md:p-8\">\n      <h4 class=\"text-2xl font-bold text-gray-900\">\n        Why players love a Roblox Dandy\u2019s World Toon picker\n      <\/h4>\n      <div class=\"mt-3 text-gray-700 leading-relaxed\">\n        The randomizer isn\u2019t just \u201cfor fun.\u201d It changes decision-making, builds fundamentals, and makes repetitive runs\n        feel new again\u2014especially when you\u2019re forced into low-stamina or off-role picks.\n      <\/div>\n\n      <div class=\"mt-6 grid grid-cols-1 md:grid-cols-3 gap-4\">\n        <div class=\"rounded-2xl p-5 border border-gray-100\">\n          <div class=\"flex items-center gap-3\">\n            <div class=\"h-11 w-11 rounded-xl bg-fuchsia-50 text-fuchsia-700 flex items-center justify-center\">\n              <i class=\"fa-solid fa-arrows-rotate\"><\/i>\n            <\/div>\n            <div class=\"font-semibold text-gray-900\">Replayability<\/div>\n          <\/div>\n          <div class=\"mt-2 text-sm text-gray-700 leading-relaxed\">\n            Every spin reshapes your plan: extraction focus, kiting routes, trinket priorities, and risk tolerance.\n          <\/div>\n        <\/div>\n\n        <div class=\"rounded-2xl p-5 border border-gray-100\">\n          <div class=\"flex items-center gap-3\">\n            <div class=\"h-11 w-11 rounded-xl bg-amber-50 text-amber-700 flex items-center justify-center\">\n              <i class=\"fa-solid fa-ban\"><\/i>\n            <\/div>\n            <div class=\"font-semibold text-gray-900\">Breaks the meta<\/div>\n          <\/div>\n          <div class=\"mt-2 text-sm text-gray-700 leading-relaxed\">\n            If your team always leans on the same \u201cbest\u201d Toons, the wheel forces experimentation and adaptation.\n          <\/div>\n        <\/div>\n\n        <div class=\"rounded-2xl p-5 border border-gray-100\">\n          <div class=\"flex items-center gap-3\">\n            <div class=\"h-11 w-11 rounded-xl bg-emerald-50 text-emerald-700 flex items-center justify-center\">\n              <i class=\"fa-solid fa-brain\"><\/i>\n            <\/div>\n            <div class=\"font-semibold text-gray-900\">Skill building<\/div>\n          <\/div>\n          <div class=\"mt-2 text-sm text-gray-700 leading-relaxed\">\n            Weak picks sharpen movement, awareness, and panic decision-making\u2014there\u2019s less room for autopilot.\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- SECTION: Challenges -->\n    <div id=\"challenges\" class=\"mt-8 bg-white rounded-2xl shadow-md p-6 md:p-8\">\n      <h4 class=\"text-2xl font-bold text-gray-900\">\n        Gameplay challenges you can run with the wheel\n      <\/h4>\n      <div class=\"mt-3 text-gray-700 leading-relaxed\">\n        Don\u2019t just spin casually\u2014add structure. These formats turn the randomizer into a consistent challenge system.\n      <\/div>\n\n      <div class=\"mt-6 grid grid-cols-1 lg:grid-cols-3 gap-4\">\n        <!-- Random Run -->\n        <div class=\"rounded-2xl border border-gray-100 p-6\">\n          <div class=\"flex items-center gap-3\">\n            <div class=\"h-11 w-11 rounded-xl bg-indigo-50 text-indigo-700 flex items-center justify-center\">\n              <i class=\"fa-solid fa-bullseye\"><\/i>\n            <\/div>\n            <div>\n              <div class=\"font-semibold text-gray-900\">Random Run (No Rerolls)<\/div>\n              <div class=\"text-sm text-gray-600\">The classic \u201caccept your fate\u201d mode<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"mt-4 text-sm text-gray-700 leading-relaxed\">\n            Rules:\n          <\/div>\n          <div class=\"mt-2 space-y-2 text-sm text-gray-700\">\n            <div class=\"flex gap-2\">\n              <div class=\"font-bold text-gray-900\">1)<\/div>\n              <div>Spin the wheel once.<\/div>\n            <\/div>\n            <div class=\"flex gap-2\">\n              <div class=\"font-bold text-gray-900\">2)<\/div>\n              <div>Lock that Toon for the next floor\/run.<\/div>\n            <\/div>\n            <div class=\"flex gap-2\">\n              <div class=\"font-bold text-gray-900\">3)<\/div>\n              <div>No rerolls. No exceptions.<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"mt-4 rounded-xl bg-gray-50 border border-gray-100 p-4 text-sm text-gray-700\">\n            <div class=\"font-semibold text-gray-900\">\n              <i class=\"fa-solid fa-lightbulb mr-2 text-gray-700\"><\/i>Difficulty booster\n            <\/div>\n            <div class=\"mt-1\">\n              Pair this with random trinkets to force creative builds.\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <!-- Role-play -->\n        <div class=\"rounded-2xl border border-gray-100 p-6\">\n          <div class=\"flex items-center gap-3\">\n            <div class=\"h-11 w-11 rounded-xl bg-fuchsia-50 text-fuchsia-700 flex items-center justify-center\">\n              <i class=\"fa-solid fa-masks-theater\"><\/i>\n            <\/div>\n            <div>\n              <div class=\"font-semibold text-gray-900\">Role-Play Decision Wheel<\/div>\n              <div class=\"text-sm text-gray-600\">Story-driven rules without scripting<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"mt-4 text-sm text-gray-700 leading-relaxed\">\n            Use the wheel to decide:\n          <\/div>\n          <div class=\"mt-2 space-y-2 text-sm text-gray-700\">\n            <div class=\"flex items-start gap-2\">\n              <i class=\"fa-solid fa-angle-right mt-1 text-gray-500\"><\/i>\n              <div>Your role: Extractor, Distractor, Support, Survival.<\/div>\n            <\/div>\n            <div class=\"flex items-start gap-2\">\n              <i class=\"fa-solid fa-angle-right mt-1 text-gray-500\"><\/i>\n              <div>Which threats to prioritize avoiding.<\/div>\n            <\/div>\n            <div class=\"flex items-start gap-2\">\n              <i class=\"fa-solid fa-angle-right mt-1 text-gray-500\"><\/i>\n              <div>\u201cLore runs\u201d like Support-only survival attempts.<\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <!-- Team selection -->\n        <div class=\"rounded-2xl border border-gray-100 p-6\">\n          <div class=\"flex items-center gap-3\">\n            <div class=\"h-11 w-11 rounded-xl bg-emerald-50 text-emerald-700 flex items-center justify-center\">\n              <i class=\"fa-solid fa-people-group\"><\/i>\n            <\/div>\n            <div>\n              <div class=\"font-semibold text-gray-900\">Random Team (No Duplicates)<\/div>\n              <div class=\"text-sm text-gray-600\">Multiplayer chaos mode<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"mt-4 text-sm text-gray-700 leading-relaxed\">\n            Everyone spins. If duplicates happen, reroll duplicates only (once). Then you must build strategy around the\n            team you got\u2014balanced or not.\n          <\/div>\n\n          <div class=\"mt-4 rounded-xl bg-gray-50 border border-gray-100 p-4 text-sm text-gray-700\">\n            <div class=\"font-semibold text-gray-900\">\n              <i class=\"fa-solid fa-triangle-exclamation mr-2 text-gray-700\"><\/i>Expect weird comps\n            <\/div>\n            <div class=\"mt-1\">\n              Sometimes you\u2019ll get too many Survivalists and not enough extraction pressure. That\u2019s the point.\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- SECTION: Roles -->\n    <div id=\"roles\" class=\"mt-8 bg-white rounded-2xl shadow-md p-6 md:p-8\">\n      <h4 class=\"text-2xl font-bold text-gray-900\">Deep dive: characters &#038; roles (play smart even when the wheel is random)<\/h4>\n      <div class=\"mt-3 text-gray-700 leading-relaxed\">\n        The wheel is random\u2014your knowledge shouldn\u2019t be. If you understand roles, you\u2019ll adapt faster regardless of the Toon you roll.\n      <\/div>\n\n      <div class=\"mt-6 grid grid-cols-1 md:grid-cols-2 gap-4\">\n        <!-- Extractors -->\n        <div class=\"rounded-2xl border border-gray-100 p-6\">\n          <div class=\"flex items-center justify-between gap-4\">\n            <div class=\"flex items-center gap-3\">\n              <div class=\"h-11 w-11 rounded-xl bg-blue-50 text-blue-700 flex items-center justify-center\">\n                <i class=\"fa-solid fa-screwdriver-wrench\"><\/i>\n              <\/div>\n              <div>\n                <div class=\"font-semibold text-gray-900\">Extractors<\/div>\n                <div class=\"text-sm text-gray-600\">Machine progress and team tempo<\/div>\n              <\/div>\n            <\/div>\n            <div class=\"text-xs bg-blue-50 text-blue-800 px-3 py-1 rounded-full border border-blue-100\">Examples: Vee, Astro<\/div>\n          <\/div>\n\n          <div class=\"mt-4 text-sm text-gray-700 leading-relaxed\">\n            If your spin lands on an extractor-type Toon, your biggest win condition is staying alive long enough to keep machines moving.\n            Speed doesn\u2019t matter if you\u2019re forced into bad positions during chases.\n          <\/div>\n        <\/div>\n\n        <!-- Distractors -->\n        <div class=\"rounded-2xl border border-gray-100 p-6\">\n          <div class=\"flex items-center justify-between gap-4\">\n            <div class=\"flex items-center gap-3\">\n              <div class=\"h-11 w-11 rounded-xl bg-rose-50 text-rose-700 flex items-center justify-center\">\n                <i class=\"fa-solid fa-person-running\"><\/i>\n              <\/div>\n              <div>\n                <div class=\"font-semibold text-gray-900\">Distractors<\/div>\n                <div class=\"text-sm text-gray-600\">Kite Twisteds away from objectives<\/div>\n              <\/div>\n            <\/div>\n            <div class=\"text-xs bg-rose-50 text-rose-800 px-3 py-1 rounded-full border border-rose-100\">Example: Goob<\/div>\n          <\/div>\n\n          <div class=\"mt-4 text-sm text-gray-700 leading-relaxed\">\n            A strong distractor can stabilize the entire team by pulling pressure away from machines and controlling chase flow.\n            If your team has no kiting power, even great extraction gets overwhelmed.\n          <\/div>\n        <\/div>\n\n        <!-- Survivalists -->\n        <div class=\"rounded-2xl border border-gray-100 p-6\">\n          <div class=\"flex items-center justify-between gap-4\">\n            <div class=\"flex items-center gap-3\">\n              <div class=\"h-11 w-11 rounded-xl bg-amber-50 text-amber-700 flex items-center justify-center\">\n                <i class=\"fa-solid fa-shield-halved\"><\/i>\n              <\/div>\n              <div>\n                <div class=\"font-semibold text-gray-900\">Survivalists<\/div>\n                <div class=\"text-sm text-gray-600\">Endurance for late-game pressure<\/div>\n              <\/div>\n            <\/div>\n            <div class=\"text-xs bg-amber-50 text-amber-800 px-3 py-1 rounded-full border border-amber-100\">Examples: Pebble, Shelly<\/div>\n          <\/div>\n\n          <div class=\"mt-4 text-sm text-gray-700 leading-relaxed\">\n            Survivalists shine when things get messy\u2014especially in endgame situations where calm pathing and stamina discipline matter more than raw speed.\n          <\/div>\n        <\/div>\n\n        <!-- Supporters -->\n        <div class=\"rounded-2xl border border-gray-100 p-6\">\n          <div class=\"flex items-center justify-between gap-4\">\n            <div class=\"flex items-center gap-3\">\n              <div class=\"h-11 w-11 rounded-xl bg-emerald-50 text-emerald-700 flex items-center justify-center\">\n                <i class=\"fa-solid fa-handshake-angle\"><\/i>\n              <\/div>\n              <div>\n                <div class=\"font-semibold text-gray-900\">Supporters<\/div>\n                <div class=\"text-sm text-gray-600\">Efficiency and team consistency<\/div>\n              <\/div>\n            <\/div>\n            <div class=\"text-xs bg-emerald-50 text-emerald-800 px-3 py-1 rounded-full border border-emerald-100\">Examples: Tisha, Brightney<\/div>\n          <\/div>\n\n          <div class=\"mt-4 text-sm text-gray-700 leading-relaxed\">\n            Support picks may not \u201clook\u201d strong on paper, but they often raise the floor of the whole squad. In coordinated groups, that can be the difference between clean clears and panic spirals.\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <!-- High-risk -->\n      <div class=\"mt-6 rounded-2xl border border-gray-100 bg-gray-50 p-6\">\n        <div class=\"flex items-start gap-4\">\n          <div class=\"h-12 w-12 rounded-xl bg-gray-900 text-white flex items-center justify-center\">\n            <i class=\"fa-solid fa-skull\"><\/i>\n          <\/div>\n          <div>\n            <h4 class=\"text-lg font-bold text-gray-900\">High-risk spins (example: Shrimpo)<\/h4>\n            <div class=\"mt-2 text-gray-700 leading-relaxed\">\n              Some Toons can feel like a \u201chard mode\u201d roll. Treat these as training tools: mastering weaker picks forces cleaner movement, smarter rotations, and better threat reads. When you go back to comfortable picks later, you\u2019ll notice the improvement.\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- SECTION: Tips -->\n    <div class=\"mt-8 bg-white rounded-2xl shadow-md p-6 md:p-8\">\n      <h4 class=\"text-2xl font-bold text-gray-900\">Tips for mastering Dandy\u2019s World (even with random picks)<\/h4>\n\n      <div class=\"mt-6 grid grid-cols-1 lg:grid-cols-3 gap-4\">\n        <div class=\"rounded-2xl border border-gray-100 p-6\">\n          <div class=\"font-semibold text-gray-900\">\n            <i class=\"fa-solid fa-backpack mr-2 text-gray-700\"><\/i>Trinket synergy\n          <\/div>\n          <div class=\"mt-2 text-sm text-gray-700 leading-relaxed\">\n            Build around your weakness. Stamina boosts help kite-focused roles; extraction boosts can make \u201caverage\u201d picks viable; panic-related bonuses can save the run.\n          <\/div>\n        <\/div>\n\n        <div class=\"rounded-2xl border border-gray-100 p-6\">\n          <div class=\"font-semibold text-gray-900\">\n            <i class=\"fa-solid fa-siren-on mr-2 text-gray-700\"><\/i>Survive Panic Mode\n          <\/div>\n          <div class=\"mt-2 text-sm text-gray-700 leading-relaxed\">\n            Plan exits early, avoid teammate clustering, and if you\u2019re the distractor, pull threats away before the team commits to final objectives.\n          <\/div>\n        <\/div>\n\n        <div class=\"rounded-2xl border border-gray-100 p-6\">\n          <div class=\"font-semibold text-gray-900\">\n            <i class=\"fa-solid fa-ghost mr-2 text-gray-700\"><\/i>Learn common threats\n          <\/div>\n          <div class=\"mt-2 text-sm text-gray-700 leading-relaxed\">\n            Recognize patterns and pressure styles of common Twisteds. The faster you identify behavior, the less the wheel\u2019s randomness matters.\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- SECTION: Lore -->\n    <div class=\"mt-8 bg-white rounded-2xl shadow-md p-6 md:p-8\">\n      <h4 class=\"text-2xl font-bold text-gray-900\">How the wheel connects to Dandy\u2019s World lore<\/h4>\n      <div class=\"mt-3 text-gray-700 leading-relaxed\">\n        Dandy\u2019s World leans into a cartoon-horror tone\u2014corruption, transformation, split identities (Toon vs Twisted).\n        Forcing random characters can make each run feel like a different \u201cepisode\u201d of the same unsettling universe:\n        your mood and choices change depending on who you\u2019re playing.\n      <\/div>\n    <\/div>\n\n    <!-- FAQ -->\n    <div id=\"faq\" class=\"mt-8 bg-white rounded-2xl shadow-md p-6 md:p-8\">\n      <h4 class=\"text-2xl font-bold text-gray-900\">Frequently Asked Questions (FAQ)<\/h4>\n\n      <div class=\"mt-6 grid grid-cols-1 gap-4\">\n        <div class=\"rounded-2xl border border-gray-100 p-6\">\n          <div class=\"font-semibold text-gray-900\">How many characters are in Dandy\u2019s World?<\/div>\n          <div class=\"mt-2 text-sm text-gray-700 leading-relaxed\">\n            The roster changes as the experience updates. Expect dozens of Toons with different stat distributions and abilities.\n            For the most current official reference, check the game page:\n            <a class=\"text-indigo-700 underline hover:text-indigo-800\"\n               href=\"#app\">Dandy\u2019s World on Roblox<\/a>.\n          <\/div>\n        <\/div>\n\n        <div class=\"rounded-2xl border border-gray-100 p-6\">\n          <div class=\"font-semibold text-gray-900\">Who is the best character for beginners?<\/div>\n          <div class=\"mt-2 text-sm text-gray-700 leading-relaxed\">\n            Many players recommend beginner-friendly picks that provide strong objective value and survivability. But if you want to improve fastest,\n            rotate roles: play at least one survival-focused pick and one distractor-style pick so you learn both routing and pressure control.\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- FINAL CTA -->\n    <div class=\"mt-8 rounded-2xl shadow-md overflow-hidden bg-gradient-to-r from-gray-900 via-slate-900 to-gray-900\">\n      <div class=\"p-6 md:p-8\">\n        <div class=\"flex flex-col md:flex-row md:items-center md:justify-between gap-6\">\n          <div class=\"text-white\">\n            <h4 class=\"text-2xl font-extrabold\">Final thoughts: should you use the wheel?<\/h4>\n            <div class=\"mt-2 text-white\/80 leading-relaxed max-w-3xl\">\n              If you\u2019re grinding, streaming, playing with friends, or trying to break out of predictable patterns, the wheel turns routine gameplay into high-stakes adaptability practice.\n              The most memorable wins often come from the worst spins.\n            <\/div>\n          <\/div>\n\n          <div class=\"flex flex-col sm:flex-row gap-3\">\n            <a href=\"#how-it-works\"\n               class=\"inline-flex items-center justify-center gap-2 bg-white text-gray-900 font-semibold px-5 py-3 rounded-xl shadow hover:bg-gray-100 transition\">\n              <i class=\"fa-solid fa-dice-d20\"><\/i>\n              <div>Spin a fan wheel<\/div>\n            <\/a>\n\n            <a href=\"#app\"\n               class=\"inline-flex items-center justify-center gap-2 bg-white\/10 text-white font-semibold px-5 py-3 rounded-xl border border-white\/20 hover:bg-white\/15 transition\">\n              <i class=\"fa-solid fa-gamepad\"><\/i>\n              <div>Open the game<\/div>\n            <\/a>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n      <\/div>\n    <\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":326,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"class_list":["post-320","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wheel","infinite-scroll-item","generate-columns","tablet-grid-50","mobile-grid-100","grid-parent","grid-33"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Dandy\u2019s World Wheel of Names \u2013 Fun Picks &amp; Surprises<\/title>\n<meta name=\"description\" content=\"Spin Dandy&#039;s World Wheel of Names and get random picks from Poppy, Shelly, Pebble, and more. Explore the magic of Dandy\u2019s playful universe today!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/oualator.com\/calculate\/dandys-world-wheel-of-names\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dandy\u2019s World Wheel of Names \u2013 Fun Picks &amp; Surprises\" \/>\n<meta property=\"og:description\" content=\"Spin Dandy&#039;s World Wheel of Names and get random picks from Poppy, Shelly, Pebble, and more. Explore the magic of Dandy\u2019s playful universe today!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/oualator.com\/calculate\/dandys-world-wheel-of-names\/\" \/>\n<meta property=\"og:site_name\" content=\"Oualator\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-25T05:57:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-28T23:03:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/oualator.com\/calculate\/wp-content\/uploads\/2025\/06\/dandys-world.png\" \/>\n\t<meta property=\"og:image:width\" content=\"900\" \/>\n\t<meta property=\"og:image:height\" content=\"602\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"mikarmiaura\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"mikarmiaura\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/dandys-world-wheel-of-names\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/dandys-world-wheel-of-names\\\/\"},\"author\":{\"name\":\"mikarmiaura\",\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/#\\\/schema\\\/person\\\/4ea451aa69c0b6773dc729ab8e30a78a\"},\"headline\":\"Dandy\u2019s World Wheel of Names \u2013 Spin, Pick &amp; Discover\",\"datePublished\":\"2026-02-25T05:57:00+00:00\",\"dateModified\":\"2026-02-28T23:03:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/dandys-world-wheel-of-names\\\/\"},\"wordCount\":1422,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/dandys-world-wheel-of-names\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/dandys-world.png\",\"articleSection\":[\"Wheel\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/oualator.com\\\/calculate\\\/dandys-world-wheel-of-names\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/dandys-world-wheel-of-names\\\/\",\"url\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/dandys-world-wheel-of-names\\\/\",\"name\":\"Dandy\u2019s World Wheel of Names \u2013 Fun Picks & Surprises\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/dandys-world-wheel-of-names\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/dandys-world-wheel-of-names\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/dandys-world.png\",\"datePublished\":\"2026-02-25T05:57:00+00:00\",\"dateModified\":\"2026-02-28T23:03:22+00:00\",\"description\":\"Spin Dandy's World Wheel of Names and get random picks from Poppy, Shelly, Pebble, and more. Explore the magic of Dandy\u2019s playful universe today!\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/dandys-world-wheel-of-names\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/oualator.com\\\/calculate\\\/dandys-world-wheel-of-names\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/dandys-world-wheel-of-names\\\/#primaryimage\",\"url\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/dandys-world.png\",\"contentUrl\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/dandys-world.png\",\"width\":900,\"height\":602,\"caption\":\"dandys world wheel of names\u200b\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/dandys-world-wheel-of-names\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dandy\u2019s World Wheel of Names \u2013 Spin, Pick &amp; Discover\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/#website\",\"url\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/\",\"name\":\"Oualator\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/#organization\",\"name\":\"Oualator\",\"url\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/cropped-oualator-1.png\",\"contentUrl\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/cropped-oualator-1.png\",\"width\":500,\"height\":167,\"caption\":\"Oualator\"},\"image\":{\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/#\\\/schema\\\/person\\\/4ea451aa69c0b6773dc729ab8e30a78a\",\"name\":\"mikarmiaura\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/70d88366569bf8d9508ed6385a52290c21d112d7f9f8e8ba174309f9cd69e484?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/70d88366569bf8d9508ed6385a52290c21d112d7f9f8e8ba174309f9cd69e484?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/70d88366569bf8d9508ed6385a52290c21d112d7f9f8e8ba174309f9cd69e484?s=96&d=mm&r=g\",\"caption\":\"mikarmiaura\"},\"sameAs\":[\"https:\\\/\\\/oualator.com\\\/calculate\"],\"url\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/author\\\/mikarmiaura\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Dandy\u2019s World Wheel of Names \u2013 Fun Picks & Surprises","description":"Spin Dandy's World Wheel of Names and get random picks from Poppy, Shelly, Pebble, and more. Explore the magic of Dandy\u2019s playful universe today!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/oualator.com\/calculate\/dandys-world-wheel-of-names\/","og_locale":"en_US","og_type":"article","og_title":"Dandy\u2019s World Wheel of Names \u2013 Fun Picks & Surprises","og_description":"Spin Dandy's World Wheel of Names and get random picks from Poppy, Shelly, Pebble, and more. Explore the magic of Dandy\u2019s playful universe today!","og_url":"https:\/\/oualator.com\/calculate\/dandys-world-wheel-of-names\/","og_site_name":"Oualator","article_published_time":"2026-02-25T05:57:00+00:00","article_modified_time":"2026-02-28T23:03:22+00:00","og_image":[{"width":900,"height":602,"url":"https:\/\/oualator.com\/calculate\/wp-content\/uploads\/2025\/06\/dandys-world.png","type":"image\/png"}],"author":"mikarmiaura","twitter_card":"summary_large_image","twitter_misc":{"Written by":"mikarmiaura","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/oualator.com\/calculate\/dandys-world-wheel-of-names\/#article","isPartOf":{"@id":"https:\/\/oualator.com\/calculate\/dandys-world-wheel-of-names\/"},"author":{"name":"mikarmiaura","@id":"https:\/\/oualator.com\/calculate\/#\/schema\/person\/4ea451aa69c0b6773dc729ab8e30a78a"},"headline":"Dandy\u2019s World Wheel of Names \u2013 Spin, Pick &amp; Discover","datePublished":"2026-02-25T05:57:00+00:00","dateModified":"2026-02-28T23:03:22+00:00","mainEntityOfPage":{"@id":"https:\/\/oualator.com\/calculate\/dandys-world-wheel-of-names\/"},"wordCount":1422,"commentCount":0,"publisher":{"@id":"https:\/\/oualator.com\/calculate\/#organization"},"image":{"@id":"https:\/\/oualator.com\/calculate\/dandys-world-wheel-of-names\/#primaryimage"},"thumbnailUrl":"https:\/\/oualator.com\/calculate\/wp-content\/uploads\/2025\/06\/dandys-world.png","articleSection":["Wheel"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/oualator.com\/calculate\/dandys-world-wheel-of-names\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/oualator.com\/calculate\/dandys-world-wheel-of-names\/","url":"https:\/\/oualator.com\/calculate\/dandys-world-wheel-of-names\/","name":"Dandy\u2019s World Wheel of Names \u2013 Fun Picks & Surprises","isPartOf":{"@id":"https:\/\/oualator.com\/calculate\/#website"},"primaryImageOfPage":{"@id":"https:\/\/oualator.com\/calculate\/dandys-world-wheel-of-names\/#primaryimage"},"image":{"@id":"https:\/\/oualator.com\/calculate\/dandys-world-wheel-of-names\/#primaryimage"},"thumbnailUrl":"https:\/\/oualator.com\/calculate\/wp-content\/uploads\/2025\/06\/dandys-world.png","datePublished":"2026-02-25T05:57:00+00:00","dateModified":"2026-02-28T23:03:22+00:00","description":"Spin Dandy's World Wheel of Names and get random picks from Poppy, Shelly, Pebble, and more. Explore the magic of Dandy\u2019s playful universe today!","breadcrumb":{"@id":"https:\/\/oualator.com\/calculate\/dandys-world-wheel-of-names\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/oualator.com\/calculate\/dandys-world-wheel-of-names\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/oualator.com\/calculate\/dandys-world-wheel-of-names\/#primaryimage","url":"https:\/\/oualator.com\/calculate\/wp-content\/uploads\/2025\/06\/dandys-world.png","contentUrl":"https:\/\/oualator.com\/calculate\/wp-content\/uploads\/2025\/06\/dandys-world.png","width":900,"height":602,"caption":"dandys world wheel of names\u200b"},{"@type":"BreadcrumbList","@id":"https:\/\/oualator.com\/calculate\/dandys-world-wheel-of-names\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/oualator.com\/calculate\/"},{"@type":"ListItem","position":2,"name":"Dandy\u2019s World Wheel of Names \u2013 Spin, Pick &amp; Discover"}]},{"@type":"WebSite","@id":"https:\/\/oualator.com\/calculate\/#website","url":"https:\/\/oualator.com\/calculate\/","name":"Oualator","description":"","publisher":{"@id":"https:\/\/oualator.com\/calculate\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/oualator.com\/calculate\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/oualator.com\/calculate\/#organization","name":"Oualator","url":"https:\/\/oualator.com\/calculate\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/oualator.com\/calculate\/#\/schema\/logo\/image\/","url":"https:\/\/oualator.com\/calculate\/wp-content\/uploads\/2025\/03\/cropped-oualator-1.png","contentUrl":"https:\/\/oualator.com\/calculate\/wp-content\/uploads\/2025\/03\/cropped-oualator-1.png","width":500,"height":167,"caption":"Oualator"},"image":{"@id":"https:\/\/oualator.com\/calculate\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/oualator.com\/calculate\/#\/schema\/person\/4ea451aa69c0b6773dc729ab8e30a78a","name":"mikarmiaura","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/70d88366569bf8d9508ed6385a52290c21d112d7f9f8e8ba174309f9cd69e484?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/70d88366569bf8d9508ed6385a52290c21d112d7f9f8e8ba174309f9cd69e484?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70d88366569bf8d9508ed6385a52290c21d112d7f9f8e8ba174309f9cd69e484?s=96&d=mm&r=g","caption":"mikarmiaura"},"sameAs":["https:\/\/oualator.com\/calculate"],"url":"https:\/\/oualator.com\/calculate\/author\/mikarmiaura\/"}]}},"_links":{"self":[{"href":"https:\/\/oualator.com\/calculate\/wp-json\/wp\/v2\/posts\/320","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oualator.com\/calculate\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oualator.com\/calculate\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oualator.com\/calculate\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oualator.com\/calculate\/wp-json\/wp\/v2\/comments?post=320"}],"version-history":[{"count":19,"href":"https:\/\/oualator.com\/calculate\/wp-json\/wp\/v2\/posts\/320\/revisions"}],"predecessor-version":[{"id":747,"href":"https:\/\/oualator.com\/calculate\/wp-json\/wp\/v2\/posts\/320\/revisions\/747"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/oualator.com\/calculate\/wp-json\/wp\/v2\/media\/326"}],"wp:attachment":[{"href":"https:\/\/oualator.com\/calculate\/wp-json\/wp\/v2\/media?parent=320"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oualator.com\/calculate\/wp-json\/wp\/v2\/categories?post=320"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oualator.com\/calculate\/wp-json\/wp\/v2\/tags?post=320"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}