{"id":2164,"date":"2026-06-14T15:09:57","date_gmt":"2026-06-14T13:09:57","guid":{"rendered":"https:\/\/cad-kompass.de\/?p=2164"},"modified":"2026-06-25T07:47:25","modified_gmt":"2026-06-25T05:47:25","slug":"klick-wut","status":"publish","type":"post","link":"https:\/\/cad-kompass.de\/?p=2164","title":{"rendered":"Klick-Wut"},"content":{"rendered":"\n<!--\n    (c) CAD-Kompass. Alle Rechte vorbehalten.\n    Dieses Tool einschliesslich Quellcode, Design und Logik ist geistiges\n    Eigentum von CAD-Kompass. Jegliche Vervielfaeltigung, Weitergabe oder\n    Einbindung auf fremden Webseiten ist ohne ausdrueckliche schriftliche\n    Genehmigung untersagt.\n-->\n<style>\n    .zz-box {\n        --zz-primary: #3f5f75;\n        --zz-primary-dark: #2c4a5e;\n        --zz-primary-deep: #1e3548;\n        --zz-accent: #e8913a;\n        --zz-ink: #1e293b;\n        --zz-text: #334155;\n        --zz-muted: #64748b;\n        --zz-faint: #94a3b8;\n        --zz-border: #c8d6e0;\n        --zz-surface: #f7f9fb;\n        background: var(--zz-surface);\n        border: 2px solid var(--zz-primary);\n        border-radius: 2px;\n        margin: 28px 0;\n        overflow: hidden;\n        position: relative;\n        font-family: inherit;\n        color: var(--zz-text);\n        line-height: 1.6;\n    }\n    \/* Top bar (Tool-Lab-Standard) *\/\n    .zz-header {\n        background: linear-gradient(135deg, var(--zz-primary-deep) 0%, var(--zz-primary-dark) 100%);\n        padding: 20px 28px 18px;\n        position: relative;\n        overflow: hidden;\n    }\n    .zz-header::after {\n        content: '';\n        position: absolute;\n        bottom: 0;\n        left: 0;\n        right: 0;\n        height: 3px;\n        background: repeating-linear-gradient(\n                90deg,\n                var(--zz-primary) 0px,\n                var(--zz-primary) 8px,\n                transparent 8px,\n                transparent 12px\n        );\n    }\n    .zz-header-top {\n        display: flex;\n        align-items: center;\n        gap: 12px;\n        margin-bottom: 6px;\n    }\n    .zz-header-icon {\n        width: 36px;\n        height: 36px;\n        flex-shrink: 0;\n        opacity: 0.85;\n    }\n    .zz-box .zz-box-title {\n        font-size: 1.15rem;\n        font-weight: 700;\n        color: #fff;\n        margin: 0;\n        padding: 0;\n        letter-spacing: 0.02em;\n        display: inline;\n    }\n    .zz-box .zz-box-desc {\n        font-size: 0.85rem;\n        color: rgba(255,255,255,0.65);\n        margin: 0;\n        padding: 0;\n        line-height: 1.5;\n        display: block;\n    }\n\n    \/* Body *\/\n    .zz-body {\n        padding: 22px 28px 24px;\n    }\n\n    \/* Privacy *\/\n    .zz-privacy {\n        background: #f0fdf4;\n        border: 1px solid #bbf7d0;\n        border-radius: 3px;\n        padding: 9px 14px;\n        margin-bottom: 20px;\n        font-size: 0.8rem;\n        color: #15803d;\n        line-height: 1.5;\n        display: flex;\n        align-items: center;\n        gap: 8px;\n    }\n    .zz-privacy::before {\n        content: '\\1F512';\n        flex-shrink: 0;\n        font-size: 0.9rem;\n    }\n\n    \/* Section label *\/\n    .zz-section-label {\n        display: flex;\n        align-items: center;\n        gap: 10px;\n        margin-bottom: 14px;\n        font-size: 0.72rem;\n        font-weight: 700;\n        text-transform: uppercase;\n        letter-spacing: 0.1em;\n        color: var(--zz-muted);\n    }\n    .zz-section-label::before,\n    .zz-section-label::after {\n        content: '';\n        height: 1px;\n        background: var(--zz-border);\n        flex: 1;\n    }\n    .zz-section-label::before {\n        max-width: 20px;\n    }\n\n    \/* Buttons (Tool-Lab-Standard) *\/\n    .zz-btn {\n        padding: 10px 24px;\n        font-size: 0.9rem;\n        font-family: inherit;\n        background: var(--zz-primary);\n        color: #fff;\n        border: none;\n        border-radius: 2px;\n        cursor: pointer;\n        white-space: nowrap;\n        font-weight: 600;\n        letter-spacing: 0.02em;\n        transition: background 0.15s;\n        position: relative;\n    }\n    .zz-btn:hover {\n        background: var(--zz-primary-dark);\n        color: #fff;\n    }\n    .zz-btn:disabled {\n        background: var(--zz-faint);\n        cursor: not-allowed;\n    }\n    .zz-btn::before {\n        content: '';\n        position: absolute;\n        left: 0;\n        top: 0;\n        bottom: 0;\n        width: 3px;\n        background: rgba(255,255,255,0.25);\n        border-radius: 2px 0 0 2px;\n    }\n    .zz-btn:focus-visible {\n        outline: 2px solid var(--zz-primary);\n        outline-offset: 2px;\n    }\n    \/* ====== Spielfl\u00e4che: Seekarten-Untergrund ====== *\/\n    .zz-stage {\n        background-color: #fdfdfd;\n        background-image: linear-gradient(#eef2f6 1px, transparent 1px), linear-gradient(90deg, #eef2f6 1px, transparent 1px);\n        background-size: 28px 28px;\n        border: 1px solid var(--zz-border);\n        border-radius: 2px;\n        padding: 22px;\n        margin-bottom: 18px;\n    }\n\n    \/* Eingefrorenes Civil-3D-Fenster *\/\n    .zz-win {\n        position: relative;\n        max-width: 600px;\n        margin: 0 auto;\n        background: #f4f6f8;\n        border: 1px solid #9fb0bd;\n        border-radius: 3px;\n        overflow: hidden;\n        box-shadow: 0 10px 28px rgba(30,53,72,0.18), 0 2px 6px rgba(30,53,72,0.10);\n        cursor: default;\n        user-select: none;\n        -webkit-user-select: none;\n        transition: transform 0.35s ease, box-shadow 0.35s ease;\n    }\n    .zz-win.zz-ended {\n        transform: rotate(0.8deg) translateY(4px);\n        box-shadow: 0 4px 10px rgba(30,53,72,0.14);\n        cursor: default;\n    }\n\n    .zz-win-titlebar {\n        display: flex;\n        align-items: center;\n        gap: 10px;\n        background: linear-gradient(180deg, var(--zz-primary), var(--zz-primary-dark));\n        color: #fff;\n        padding: 7px 12px;\n        font-size: 0.76rem;\n        font-weight: 600;\n    }\n    .zz-win-titlebar .zz-win-appicon {\n        width: 13px;\n        height: 13px;\n        border-radius: 2px;\n        background: var(--zz-accent);\n        flex-shrink: 0;\n    }\n    .zz-win-titlebar .zz-win-title {\n        flex: 1;\n        white-space: nowrap;\n        overflow: hidden;\n        text-overflow: ellipsis;\n    }\n    .zz-win-titlebar .zz-win-btns {\n        display: flex;\n        gap: 6px;\n        flex-shrink: 0;\n    }\n    .zz-win-titlebar .zz-win-btns span {\n        width: 18px;\n        height: 16px;\n        border-radius: 2px;\n        background: rgba(255,255,255,0.16);\n        font-size: 0.62rem;\n        line-height: 16px;\n        text-align: center;\n    }\n    .zz-win-titlebar .zz-win-btns span:last-child {\n        background: #b8432f;\n        cursor: pointer;\n    }\n    .zz-win-titlebar .zz-win-btns span:last-child:hover {\n        background: #e81123;\n    }\n\n    .zz-win-menu {\n        display: flex;\n        gap: 16px;\n        background: #e9edf1;\n        color: #8a98a3;\n        font-size: 0.72rem;\n        padding: 5px 12px;\n        border-bottom: 1px solid #d4dde4;\n    }\n\n    .zz-win-canvas {\n        position: relative;\n        height: 260px;\n        background: #fdfdfd;\n    }\n    .zz-win-canvas svg.zz-draw {\n        position: absolute;\n        inset: 0;\n        width: 100%;\n        height: 100%;\n    }\n\n    .zz-win-cmd {\n        background: #e9edf1;\n        border-top: 1px solid #d4dde4;\n        color: #8a98a3;\n        font-family: 'SF Mono', 'Consolas', monospace;\n        font-size: 0.7rem;\n        padding: 5px 12px;\n        white-space: nowrap;\n        overflow: hidden;\n    }\n\n    \/* Frost-Overlay: das Fenster reagiert nicht *\/\n    .zz-frost {\n        position: absolute;\n        inset: 0;\n        background: rgba(238,243,246,0.55);\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        justify-content: center;\n        gap: 8px;\n        padding: 8px;\n    }\n    .zz-frost-status {\n        display: flex;\n        align-items: center;\n        gap: 7px;\n        background: rgba(255,255,255,0.75);\n        padding: 3px 10px;\n        border-radius: 2px;\n    }\n\n    \/* Windows-Dialog: \u201ereagiert nicht\" *\/\n    .zz-dialog-anchor {\n        position: relative;\n        width: min(330px, 92%);\n        flex-shrink: 0;\n    }\n    .zz-dialog {\n        width: 100%;\n        background: #fff;\n        border: 1px solid #9aa6af;\n        border-radius: 2px;\n        box-shadow: 0 8px 24px rgba(30,53,72,0.30);\n        text-align: left;\n        overflow: hidden;\n    }\n    .zz-dialog.zz-shake {\n        animation: zzShake 0.25s ease;\n    }\n    @keyframes zzShake {\n        0%, 100% { transform: translateX(0); }\n        25% { transform: translateX(-4px); }\n        50% { transform: translateX(4px); }\n        75% { transform: translateX(-2px); }\n    }\n    .zz-dialog-titlebar {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        background: #fff;\n        border-bottom: 1px solid #e3e8ec;\n        padding: 5px 0 5px 10px;\n        font-size: 0.72rem;\n        color: var(--zz-ink);\n    }\n    .zz-dialog-x {\n        width: 34px;\n        text-align: center;\n        font-size: 0.7rem;\n        color: #444;\n        cursor: pointer;\n        padding: 2px 0;\n        align-self: stretch;\n        line-height: 1.6;\n    }\n    .zz-dialog-x:hover {\n        background: #e81123;\n        color: #fff;\n    }\n    .zz-dialog-body {\n        padding: 12px 14px 14px;\n    }\n    .zz-dialog-msg {\n        font-size: 0.82rem;\n        font-weight: 600;\n        color: var(--zz-ink);\n        margin: 0 0 4px;\n        line-height: 1.45;\n    }\n    .zz-dialog-sub {\n        font-size: 0.72rem;\n        color: var(--zz-muted);\n        margin: 0 0 12px;\n        line-height: 1.5;\n    }\n    .zz-dialog-btns {\n        display: flex;\n        justify-content: flex-end;\n        gap: 8px;\n        flex-wrap: wrap;\n    }\n    .zz-dlg-btn {\n        font-family: inherit;\n        font-size: 0.72rem;\n        color: #1a1a1a;\n        background: #e1e1e1;\n        border: 1px solid #adadad;\n        border-radius: 2px;\n        padding: 5px 12px;\n        cursor: pointer;\n    }\n    .zz-dlg-btn:hover {\n        background: #e5f1fb;\n        border-color: #0078d7;\n        color: #1a1a1a;\n    }\n    .zz-dlg-btn--primary {\n        border: 1px solid #0078d7;\n        box-shadow: inset 0 0 0 1px #0078d7;\n    }\n    .zz-win.zz-ended .zz-dialog {\n        opacity: 0.6;\n        pointer-events: none;\n    }\n    .zz-frost-spinner {\n        width: 16px;\n        height: 16px;\n        flex-shrink: 0;\n        border-radius: 50%;\n        border: 2px solid #c2cfd9;\n        border-top-color: var(--zz-primary);\n        animation: zzSpin 1.1s linear infinite;\n    }\n    .zz-frost-text {\n        font-size: 0.72rem;\n        font-weight: 600;\n        color: #5b6b78;\n        line-height: 1.4;\n    }\n    \/* Leichter Schleier \u00fcber dem Dialog, bis das Spiel freigegeben ist *\/\n    .zz-veil {\n        position: absolute;\n        inset: 0;\n        z-index: 2;\n        background: rgba(247,249,251,0.65);\n        border-radius: 2px;\n        cursor: pointer;\n    }\n    .zz-veil.zz-gone {\n        display: none;\n    }\n    .zz-cta {\n        position: absolute;\n        top: 50%;\n        left: 50%;\n        z-index: 3;\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        justify-content: center;\n        gap: 5px;\n        background: var(--zz-primary);\n        color: #fff;\n        font-size: 0.78rem;\n        font-weight: 700;\n        letter-spacing: 0.02em;\n        line-height: 1.45;\n        padding: 11px 18px 10px;\n        border-radius: 2px;\n        box-shadow: 0 4px 14px rgba(30,53,72,0.35);\n        cursor: pointer;\n        white-space: normal;\n        text-align: center;\n        max-width: 96%;\n        animation: zzPulse 1.6s ease-in-out infinite;\n    }\n    .zz-cta svg {\n        width: 16px;\n        height: 16px;\n        flex-shrink: 0;\n    }\n    .zz-cta.zz-gone {\n        display: none;\n    }\n    @keyframes zzPulse {\n        0%, 100% { transform: translate(-50%, -50%) scale(1); }\n        50% { transform: translate(-50%, -50%) scale(1.05); }\n    }\n\n    \/* Dezentes Highlight auf dem Klickziel, verschwindet beim ersten Klick *\/\n    .zz-dlg-btn--primary.zz-glow {\n        animation: zzGlow 1.6s ease-in-out infinite;\n    }\n    @keyframes zzGlow {\n        0%, 100% { box-shadow: inset 0 0 0 1px #0078d7, 0 0 0 2px rgba(63,95,117,0.35); }\n        50% { box-shadow: inset 0 0 0 1px #0078d7, 0 0 0 5px rgba(63,95,117,0.12); }\n    }\n    @keyframes zzSpin { to { transform: rotate(360deg); } }\n    .zz-win.zz-ended .zz-frost-spinner {\n        animation-play-state: paused;\n        opacity: 0.4;\n    }\n\n    \/* Risse *\/\n    .zz-cracks {\n        position: absolute;\n        inset: 0;\n        width: 100%;\n        height: 100%;\n        pointer-events: none;\n    }\n    .zz-cracks g {\n        opacity: 0;\n        transition: opacity 0.25s ease;\n    }\n    .zz-cracks g.zz-show {\n        opacity: 1;\n    }\n\n    \/* Klick-Feedback *\/\n    .zz-hit {\n        position: absolute;\n        width: 28px;\n        height: 28px;\n        border: 2px solid var(--zz-accent);\n        border-radius: 50%;\n        pointer-events: none;\n        animation: zzHit 0.4s ease-out forwards;\n    }\n    @keyframes zzHit {\n        0% { transform: scale(0.4); opacity: 0.9; }\n        100% { transform: scale(1.6); opacity: 0; }\n    }\n\n    \/* HUD *\/\n    .zz-hud {\n        display: flex;\n        align-items: stretch;\n        gap: 12px;\n        margin-top: 16px;\n        flex-wrap: wrap;\n        max-width: 600px;\n        margin-left: auto;\n        margin-right: auto;\n    }\n    .zz-hud-cell {\n        background: #fff;\n        border: 1px solid var(--zz-border);\n        border-left: 3px solid var(--zz-primary);\n        border-radius: 0 2px 2px 0;\n        padding: 8px 14px;\n        min-width: 96px;\n    }\n    .zz-hud-label {\n        font-size: 0.66rem;\n        font-weight: 700;\n        color: var(--zz-muted);\n        text-transform: uppercase;\n        letter-spacing: 0.08em;\n    }\n    .zz-hud-value {\n        font-size: 1.25rem;\n        font-weight: 700;\n        color: var(--zz-ink);\n        font-variant-numeric: tabular-nums;\n    }\n    .zz-hud-cell--gauge {\n        flex: 1;\n        min-width: 220px;\n    }\n    .zz-gauge {\n        display: flex;\n        gap: 3px;\n        margin-top: 7px;\n    }\n    .zz-seg {\n        flex: 1;\n        height: 12px;\n        border-radius: 2px;\n        background: #e1e8ee;\n        transition: background 0.15s ease;\n    }\n    .zz-seg:nth-child(-n+4).zz-on { background: var(--zz-primary); }\n    .zz-seg:nth-child(n+5):nth-child(-n+8).zz-on { background: var(--zz-accent); }\n    .zz-seg:nth-child(n+9).zz-on { background: #dc2626; }\n    .zz-gauge-label {\n        font-size: 0.72rem;\n        color: var(--zz-muted);\n        margin-top: 5px;\n        font-weight: 600;\n    }\n\n    .zz-hint {\n        font-size: 0.8rem;\n        color: var(--zz-muted);\n        line-height: 1.5;\n        margin: 14px auto 0;\n        max-width: 600px;\n        transition: opacity 0.3s ease;\n    }\n    .zz-hint.zz-hide {\n        opacity: 0;\n    }\n\n    \/* Ergebnis *\/\n    .zz-result {\n        display: none;\n        background: #fff;\n        border: 1px solid var(--zz-border);\n        border-left: 3px solid var(--zz-primary);\n        border-radius: 0 2px 2px 0;\n        padding: 18px 22px;\n        margin-top: 18px;\n        margin-bottom: 18px;\n    }\n    .zz-result.zz-open {\n        display: block;\n        animation: zzRise 0.35s ease;\n    }\n    @keyframes zzRise {\n        from { opacity: 0; transform: translateY(8px); }\n        to { opacity: 1; transform: none; }\n    }\n    .zz-result-num {\n        font-size: 1.7rem;\n        font-weight: 700;\n        color: var(--zz-ink);\n        line-height: 1.2;\n    }\n    .zz-result-num small {\n        font-size: 0.85rem;\n        font-weight: 600;\n        color: var(--zz-muted);\n    }\n    .zz-result-bft {\n        font-size: 1rem;\n        font-weight: 700;\n        color: var(--zz-primary-dark);\n        margin: 10px 0 4px;\n    }\n    .zz-result-spruch {\n        font-size: 0.88rem;\n        color: var(--zz-text);\n        margin: 0 0 14px;\n    }\n    .zz-result-record {\n        font-size: 0.78rem;\n        color: var(--zz-muted);\n        margin: 0 0 16px;\n    }\n\n    \/* ====== Bordbuch ====== *\/\n    .zz-board {\n        background: #fff;\n        border: 1px solid var(--zz-border);\n        border-radius: 2px;\n        padding: 16px 20px;\n    }\n    .zz-board-list {\n        list-style: none;\n        margin: 0;\n        padding: 0;\n    }\n    .zz-board-list li {\n        display: flex;\n        align-items: baseline;\n        gap: 10px;\n        padding: 5px 4px;\n        border-bottom: 1px solid #eef2f6;\n        font-size: 0.85rem;\n    }\n    .zz-board-list li:last-child {\n        border-bottom: none;\n    }\n    .zz-board-list li.zz-me {\n        background: #f0f7ff;\n    }\n    .zz-board-rank {\n        width: 24px;\n        text-align: right;\n        color: var(--zz-muted);\n        font-variant-numeric: tabular-nums;\n        flex-shrink: 0;\n    }\n    .zz-board-name {\n        flex: 1;\n        color: var(--zz-ink);\n        font-weight: 600;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n    }\n    .zz-board-score {\n        font-weight: 700;\n        color: var(--zz-primary-dark);\n        font-variant-numeric: tabular-nums;\n    }\n    .zz-board-empty {\n        font-size: 0.82rem;\n        color: var(--zz-muted);\n        margin: 0;\n    }\n    .zz-board-form {\n        display: none;\n        margin-top: 14px;\n        padding-top: 14px;\n        border-top: 1px solid #eef2f6;\n    }\n    .zz-board-form.zz-open {\n        display: block;\n    }\n    .zz-board-form-label {\n        font-size: 0.82rem;\n        color: var(--zz-text);\n        margin: 0 0 8px;\n    }\n    .zz-board-row {\n        display: flex;\n        gap: 8px;\n        flex-wrap: wrap;\n    }\n    .zz-board-row input {\n        flex: 1;\n        min-width: 160px;\n        padding: 10px 12px;\n        font-size: 0.92rem;\n        border: 1px solid var(--zz-border);\n        border-radius: 2px;\n        font-family: inherit;\n        color: var(--zz-ink);\n        background: #fff;\n        transition: border-color 0.15s, box-shadow 0.15s;\n        -webkit-appearance: none;\n    }\n    .zz-board-row input:focus {\n        outline: none;\n        border-color: var(--zz-primary);\n        box-shadow: 0 0 0 2px rgba(63,95,117,0.12);\n    }\n    .zz-board-row input::placeholder {\n        color: var(--zz-faint);\n    }\n    .zz-board-status {\n        font-size: 0.78rem;\n        color: var(--zz-muted);\n        margin: 10px 0 0;\n        line-height: 1.5;\n    }\n    .zz-board-status:empty {\n        display: none;\n    }\n\n    \/* Disclaimer *\/\n    .zz-disclaimer {\n        font-size: 0.76rem;\n        color: var(--zz-faint);\n        font-style: italic;\n        margin: 20px 0 0;\n        line-height: 1.5;\n        padding-top: 14px;\n        border-top: 1px solid #eef2f6;\n    }\n\n    @media (prefers-reduced-motion: reduce) {\n        .zz-frost-spinner { animation: none; }\n        .zz-cta { animation: none; transform: translate(-50%, -50%); }\n        .zz-dlg-btn--primary.zz-glow { animation: none; box-shadow: inset 0 0 0 1px #0078d7, 0 0 0 2px rgba(63,95,117,0.35); }\n        .zz-hit { animation-duration: 0.01s; }\n        .zz-win, .zz-result.zz-open { transition: none; animation: none; }\n    }\n    @media (max-width: 600px) {\n        .zz-header { padding: 16px 20px 14px; }\n        .zz-body { padding: 18px 20px 20px; }\n        .zz-stage { padding: 12px; }\n        .zz-win-canvas { height: 255px; }\n        .zz-win-menu span:nth-child(n+5) { display: none; }\n    }\n<\/style>\n\n<div class=\"zz-box\">\n    <div class=\"zz-header\">\n        <div class=\"zz-header-top\">\n            <svg class=\"zz-header-icon\" viewBox=\"0 0 36 36\" fill=\"none\">\n                <circle cx=\"18\" cy=\"19\" r=\"13\" stroke=\"rgba(255,255,255,0.5)\" stroke-width=\"1\"\/>\n                <line x1=\"18\" y1=\"6\" x2=\"18\" y2=\"9\" stroke=\"rgba(255,255,255,0.6)\" stroke-width=\"1\"\/>\n                <line x1=\"5\" y1=\"19\" x2=\"8\" y2=\"19\" stroke=\"rgba(255,255,255,0.6)\" stroke-width=\"1\"\/>\n                <line x1=\"28\" y1=\"19\" x2=\"31\" y2=\"19\" stroke=\"rgba(255,255,255,0.6)\" stroke-width=\"1\"\/>\n                <line x1=\"8.8\" y1=\"9.8\" x2=\"10.9\" y2=\"11.9\" stroke=\"rgba(255,255,255,0.6)\" stroke-width=\"1\"\/>\n                <line x1=\"27.2\" y1=\"9.8\" x2=\"25.1\" y2=\"11.9\" stroke=\"rgba(255,255,255,0.6)\" stroke-width=\"1\"\/>\n                <line x1=\"18\" y1=\"19\" x2=\"26\" y2=\"11.5\" stroke=\"rgba(255,255,255,0.9)\" stroke-width=\"1.5\"\/>\n                <circle cx=\"18\" cy=\"19\" r=\"1.8\" fill=\"rgba(255,255,255,0.9)\"\/>\n            <\/svg>\n            <span class=\"zz-box-title\">Klick-Wut<\/span>\n        <\/div>\n        <span class=\"zz-box-desc\">Zehn Sekunden auf ein Fenster, das nicht mehr reagiert. Der erste Klick startet die Uhr, am Ende zeigt die Windst\u00e4rke-Skala, wie viel Sturm in dir steckt.<\/span>\n    <\/div>\n\n    <div class=\"zz-body\">\n        <div class=\"zz-privacy\">Das Spiel l\u00e4uft komplett in deinem Browser. Erst wenn du dich ins Bordbuch eintr\u00e4gst, werden Rufzeichen und Punktzahl gespeichert und \u00f6ffentlich gelistet.<\/div>\n\n        <div class=\"zz-section-label\">Spielfl\u00e4che<\/div>\n        <div class=\"zz-stage\">\n            <div class=\"zz-win\" id=\"zzWin\" aria-label=\"Eingefrorenes Civil-3D-Fenster, zum Spielen anklicken\">\n                <div class=\"zz-win-titlebar\">\n                    <span class=\"zz-win-appicon\"><\/span>\n                    <span class=\"zz-win-title\">Civil 3D 2026 &ndash; [Projekt_final_v2_NEU.dwg] (Keine R\u00fcckmeldung)<\/span>\n                    <span class=\"zz-win-btns\"><span>&ndash;<\/span><span>&#9633;<\/span><span data-zz-hit=\"1\">&#10005;<\/span><\/span>\n                <\/div>\n                <div class=\"zz-win-menu\">\n                    <span>Datei<\/span><span>Bearbeiten<\/span><span>Ansicht<\/span><span>Einf\u00fcgen<\/span><span>\u00c4ndern<\/span><span>Vermessung<\/span><span>Hilfe<\/span>\n                <\/div>\n                <div class=\"zz-win-canvas\">\n                    <svg class=\"zz-draw\" viewBox=\"0 0 560 260\" preserveAspectRatio=\"none\" aria-hidden=\"true\">\n                        <path d=\"M20 200 Q 120 150, 220 175 T 420 145 T 545 160\" fill=\"none\" stroke=\"#ccd6dd\" stroke-width=\"1.4\"\/>\n                        <path d=\"M10 225 Q 130 185, 250 205 T 460 175 T 552 190\" fill=\"none\" stroke=\"#d8e0e6\" stroke-width=\"1.2\"\/>\n                        <path d=\"M35 175 Q 140 120, 240 148 T 430 115 T 548 130\" fill=\"none\" stroke=\"#d8e0e6\" stroke-width=\"1.2\"\/>\n                        <polyline points=\"40,230 150,160 290,185 410,90 520,110\" fill=\"none\" stroke=\"#a9bac6\" stroke-width=\"2\"\/>\n                        <circle cx=\"150\" cy=\"160\" r=\"4\" fill=\"none\" stroke=\"#a9bac6\" stroke-width=\"1.5\"\/>\n                        <circle cx=\"290\" cy=\"185\" r=\"4\" fill=\"none\" stroke=\"#a9bac6\" stroke-width=\"1.5\"\/>\n                        <circle cx=\"410\" cy=\"90\" r=\"4\" fill=\"none\" stroke=\"#a9bac6\" stroke-width=\"1.5\"\/>\n                        <g stroke=\"#b6c2cb\" stroke-width=\"1.6\">\n                            <line x1=\"22\" y1=\"244\" x2=\"52\" y2=\"244\"\/>\n                            <line x1=\"22\" y1=\"244\" x2=\"22\" y2=\"214\"\/>\n                        <\/g>\n                        <text x=\"56\" y=\"247\" font-family=\"sans-serif\" font-size=\"8\" fill=\"#b6c2cb\">X<\/text>\n                        <text x=\"18\" y=\"210\" font-family=\"sans-serif\" font-size=\"8\" fill=\"#b6c2cb\">Y<\/text>\n                    <\/svg>\n\n                    <svg class=\"zz-cracks\" viewBox=\"0 0 560 260\" preserveAspectRatio=\"none\" aria-hidden=\"true\">\n                        <g id=\"zzCrack1\" stroke=\"#2c4a5e\" stroke-width=\"1.4\" fill=\"none\" opacity=\"0\">\n                            <polyline points=\"180,120 162,99 149,93\"\/>\n                            <polyline points=\"180,120 204,111 224,116\"\/>\n                            <polyline points=\"180,120 173,144 159,159\"\/>\n                            <polyline points=\"180,120 192,138 190,156\"\/>\n                            <circle cx=\"180\" cy=\"120\" r=\"2.4\" fill=\"#2c4a5e\" stroke=\"none\"\/>\n                        <\/g>\n                        <g id=\"zzCrack2\" stroke=\"#2c4a5e\" stroke-width=\"1.4\" fill=\"none\" opacity=\"0\">\n                            <polyline points=\"382,78 360,66 351,52\"\/>\n                            <polyline points=\"382,78 401,90 420,92\"\/>\n                            <polyline points=\"382,78 388,57 380,42\"\/>\n                            <polyline points=\"382,78 369,98 372,114\"\/>\n                            <circle cx=\"382\" cy=\"78\" r=\"2.4\" fill=\"#2c4a5e\" stroke=\"none\"\/>\n                        <\/g>\n                        <g id=\"zzCrack3\" stroke=\"#2c4a5e\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0\">\n                            <polyline points=\"300,192 276,180 262,182 251,170\"\/>\n                            <polyline points=\"300,192 322,200 338,196\"\/>\n                            <polyline points=\"300,192 306,170 318,160\"\/>\n                            <polyline points=\"300,192 288,213 292,230\"\/>\n                            <polyline points=\"300,192 315,208 333,214\"\/>\n                            <circle cx=\"300\" cy=\"192\" r=\"2.8\" fill=\"#2c4a5e\" stroke=\"none\"\/>\n                        <\/g>\n                        <g id=\"zzCrack4\" stroke=\"#1e3548\" stroke-width=\"1.6\" fill=\"none\" opacity=\"0\">\n                            <polyline points=\"118,200 92,186 80,170 60,164\"\/>\n                            <polyline points=\"118,200 140,214 162,218\"\/>\n                            <polyline points=\"118,200 110,176 118,156 108,140\"\/>\n                            <polyline points=\"118,200 134,186 152,184\"\/>\n                            <polyline points=\"118,200 104,222 108,242\"\/>\n                            <circle cx=\"118\" cy=\"200\" r=\"3.2\" fill=\"#1e3548\" stroke=\"none\"\/>\n                        <\/g>\n                        <g id=\"zzCrack5\" stroke=\"#1e3548\" stroke-width=\"1.8\" fill=\"none\" opacity=\"0\">\n                            <polyline points=\"0,30 60,55 149,93 180,120 224,116 300,140 351,52 382,78\"\/>\n                            <polyline points=\"560,240 470,210 380,200 300,192 251,170 162,218 60,164 0,190\"\/>\n                            <polyline points=\"280,0 290,60 306,170 292,230 286,260\"\/>\n                        <\/g>\n                    <\/svg>\n\n                    <div class=\"zz-frost\">\n                        <div class=\"zz-frost-status\">\n                            <div class=\"zz-frost-spinner\" aria-hidden=\"true\"><\/div>\n                            <div class=\"zz-frost-text\" id=\"zzFrostText\">Keine R\u00fcckmeldung &hellip; Warten wird nicht helfen<\/div>\n                        <\/div>\n                        <div class=\"zz-dialog-anchor\">\n                            <div class=\"zz-dialog\" id=\"zzDialog\">\n                                <div class=\"zz-dialog-titlebar\">\n                                    <span>Civil 3D 2026<\/span>\n                                    <span class=\"zz-dialog-x\" data-zz-hit=\"1\">&#10005;<\/span>\n                                <\/div>\n                                <div class=\"zz-dialog-body\">\n                                    <p class=\"zz-dialog-msg\">Civil 3D 2026 reagiert nicht.<\/p>\n                                    <p class=\"zz-dialog-sub\">Wenn Sie das Programm sofort schlie\u00dfen, gehen nicht gespeicherte \u00c4nderungen verloren. Also alles seit 9:00 Uhr.<\/p>\n                                    <div class=\"zz-dialog-btns\">\n                                        <button type=\"button\" class=\"zz-dlg-btn zz-dlg-btn--primary zz-glow\" id=\"zzCloseBtn\" data-zz-hit=\"1\">Programm schlie\u00dfen<\/button>\n                                        <button type=\"button\" class=\"zz-dlg-btn\" id=\"zzWaitBtn\">Auf R\u00fcckmeldung warten<\/button>\n                                    <\/div>\n                                <\/div>\n                            <\/div>\n                            <div class=\"zz-veil\" id=\"zzVeil\"><\/div>\n                            <div class=\"zz-cta\" id=\"zzCta\" role=\"button\" aria-label=\"Spiel freigeben\">\n                                <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                                    <path d=\"M5 3 L5 17 L9 13.5 L11.5 19 L14 18 L11.5 12.5 L17 12.5 Z\" fill=\"currentColor\" stroke=\"none\"\/>\n                                <\/svg>\n                                <span>Klick auf \u201eProgramm schlie\u00dfen&#8220;. So oft du kannst.<\/span>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n                <div class=\"zz-win-cmd\">Befehl: REGENALL &nbsp;wird ausgef\u00fchrt &hellip; seit 14 Minuten<\/div>\n            <\/div>\n\n            <div class=\"zz-hud\">\n                <div class=\"zz-hud-cell\">\n                    <div class=\"zz-hud-label\">Zeit<\/div>\n                    <div class=\"zz-hud-value\"><span id=\"zzTime\">10,0<\/span>&thinsp;s<\/div>\n                <\/div>\n                <div class=\"zz-hud-cell\">\n                    <div class=\"zz-hud-label\">Klicks<\/div>\n                    <div class=\"zz-hud-value\" id=\"zzClicks\">0<\/div>\n                <\/div>\n                <div class=\"zz-hud-cell zz-hud-cell--gauge\">\n                    <div class=\"zz-hud-label\">Wutpegel (Windst\u00e4rke 0&ndash;12)<\/div>\n                    <div class=\"zz-gauge\" id=\"zzGauge\" aria-hidden=\"true\">\n                        <span class=\"zz-seg\"><\/span><span class=\"zz-seg\"><\/span><span class=\"zz-seg\"><\/span><span class=\"zz-seg\"><\/span><span class=\"zz-seg\"><\/span><span class=\"zz-seg\"><\/span><span class=\"zz-seg\"><\/span><span class=\"zz-seg\"><\/span><span class=\"zz-seg\"><\/span><span class=\"zz-seg\"><\/span><span class=\"zz-seg\"><\/span><span class=\"zz-seg\"><\/span>\n                    <\/div>\n                    <div class=\"zz-gauge-label\" id=\"zzGaugeLabel\">Windst\u00e4rke 0<\/div>\n                <\/div>\n            <\/div>\n\n            <p class=\"zz-hint\" id=\"zzHint\">Der erste Klick auf \u201eProgramm schlie\u00dfen&#8220; startet die Uhr. Das rote Schlie\u00dfen-Kreuz z\u00e4hlt auch. Der Rest des Fensters reagiert nicht, wie im echten Leben.<\/p>\n        <\/div>\n\n        <div class=\"zz-result\" id=\"zzResult\">\n            <div class=\"zz-result-num\"><span id=\"zzResClicks\">0<\/span> Klicks <small>(&Oslash; <span id=\"zzResKps\">0,0<\/span> pro Sekunde)<\/small><\/div>\n            <div class=\"zz-result-bft\" id=\"zzResBft\">Windst\u00e4rke 0 &middot; Windstille<\/div>\n            <p class=\"zz-result-spruch\" id=\"zzResSpruch\"><\/p>\n            <p class=\"zz-result-record\" id=\"zzResRecord\"><\/p>\n            <button type=\"button\" class=\"zz-btn\" id=\"zzAgain\">Noch eine Runde<\/button>\n        <\/div>\n\n        <div class=\"zz-section-label\">Bordbuch<\/div>\n        <div class=\"zz-board\">\n            <ol class=\"zz-board-list\" id=\"zzBoardList\"><\/ol>\n            <p class=\"zz-board-empty\" id=\"zzBoardEmpty\">Noch keine Eintr\u00e4ge. Die erste Sturmwarnung geh\u00f6rt dir.<\/p>\n            <div class=\"zz-board-form\" id=\"zzBoardForm\">\n                <p class=\"zz-board-form-label\" id=\"zzBoardFormLabel\">Trag dein Ergebnis ein:<\/p>\n                <div class=\"zz-board-row\">\n                    <input type=\"text\" id=\"zzName\" maxlength=\"12\" placeholder=\"Dein Rufzeichen (3&ndash;12 Zeichen)\" autocomplete=\"off\">\n                    <button type=\"button\" class=\"zz-btn\" id=\"zzSubmit\">Eintragen<\/button>\n                <\/div>\n            <\/div>\n            <p class=\"zz-board-status\" id=\"zzBoardStatus\"><\/p>\n        <\/div>\n\n        <p class=\"zz-disclaimer\">Kein Monument der Spielkunst, aber deutlich g\u00fcnstiger als eine neue Maus.<\/p>\n    <\/div>\n<\/div>\n\n<script>\n(function () {\n    'use strict';\n\n    var win = document.getElementById('zzWin');\n    var timeEl = document.getElementById('zzTime');\n    var clicksEl = document.getElementById('zzClicks');\n    var gaugeLabel = document.getElementById('zzGaugeLabel');\n    var segs = document.querySelectorAll('#zzGauge .zz-seg');\n    var hint = document.getElementById('zzHint');\n    var resultEl = document.getElementById('zzResult');\n    var resClicks = document.getElementById('zzResClicks');\n    var resKps = document.getElementById('zzResKps');\n    var resBft = document.getElementById('zzResBft');\n    var resSpruch = document.getElementById('zzResSpruch');\n    var resRecord = document.getElementById('zzResRecord');\n    var againBtn = document.getElementById('zzAgain');\n    var cta = document.getElementById('zzCta');\n    var veil = document.getElementById('zzVeil');\n    var cracks = [\n        document.getElementById('zzCrack1'),\n        document.getElementById('zzCrack2'),\n        document.getElementById('zzCrack3'),\n        document.getElementById('zzCrack4'),\n        document.getElementById('zzCrack5')\n    ];\n\n    var DURATION = 10000;\n    var CRACK_STEPS = [10, 25, 45, 70, 95];\n    var STORE_KEY = 'zz-klickwut-best';\n\n    \/* Windst\u00e4rke-Skala (Beaufort): min = Klicks in 10 Sekunden *\/\n    var BFT = [\n        { min: 0,   name: 'Windstille',           text: 'Kein einziger Klick. So viel Gelassenheit muss man erst mal haben.' },\n        { min: 1,   name: 'Leiser Zug',           text: 'Das war kein Wutausbruch, das war ein Anklopfen.' },\n        { min: 6,   name: 'Leichte Brise',        text: 'Ein h\u00f6flicher Hinweis an die Software. Mehr noch nicht.' },\n        { min: 16,  name: 'Schwache Brise',       text: 'Man sp\u00fcrt Unmut, aber der Kaffee steht noch sicher.' },\n        { min: 26,  name: 'M\u00e4\u00dfige Brise',         text: 'Solides Arbeitstempo. Du machst das nicht zum ersten Mal.' },\n        { min: 36,  name: 'Frische Brise',        text: 'Die Maus wei\u00df jetzt, dass du es ernst meinst.' },\n        { min: 46,  name: 'Starker Wind',         text: 'Am Nachbartisch schaut jemand r\u00fcber. Sag einfach, du bema\u00dft gerade.' },\n        { min: 56,  name: 'Steifer Wind',         text: 'Die Maus morst inzwischen um Hilfe. Niemand antwortet.' },\n        { min: 66,  name: 'St\u00fcrmischer Wind',     text: 'Bring die Tastatur in Sicherheit. F\u00fcr die Maus ist es zu sp\u00e4t.' },\n        { min: 76,  name: 'Sturm',                text: 'Die Ereignisanzeige schreibt jetzt Eintr\u00e4ge \u00fcber dich.' },\n        { min: 86,  name: 'Schwerer Sturm',       text: 'Dein Doppelklick ist ab sofort amtlich als Dauerfeuer eingestuft.' },\n        { min: 96,  name: 'Orkanartiger Sturm',   text: 'Autodesk hat dein Klickmuster versehentlich als Absturzbericht erhalten.' },\n        { min: 111, name: 'Orkan',                text: 'Windst\u00e4rke 12. Mehr misst die Skala nicht. Geh einen Kaffee trinken, den hast du dir verdient.' }\n    ];\n\n    function freshState() {\n        return { started: false, ended: false, clicks: 0, t0: 0, stamps: [], timer: null };\n    }\n    var state = freshState();\n\n    function fmt1(n) {\n        return n.toFixed(1).replace('.', ',');\n    }\n\n    function bftIndex(projected) {\n        var i, idx = 0;\n        for (i = 0; i < BFT.length; i++) {\n            if (projected >= BFT[i].min) { idx = i; }\n        }\n        return idx;\n    }\n\n    function updateGauge(projected) {\n        var idx = bftIndex(projected);\n        var i;\n        for (i = 0; i < segs.length; i++) {\n            if (i < idx) { segs[i].classList.add('zz-on'); } else { segs[i].classList.remove('zz-on'); }\n        }\n        gaugeLabel.textContent = 'Windst\u00e4rke ' + idx;\n        return idx;\n    }\n\n    function readBest() {\n        var best = 0;\n        try { best = parseInt(localStorage.getItem(STORE_KEY) || '0', 10); } catch (err) { best = 0; }\n        return isNaN(best) ? 0 : best;\n    }\n\n    function tick() {\n        var now = Date.now();\n        var left = DURATION - (now - state.t0);\n        if (left <= 0) { end(); return; }\n        timeEl.textContent = fmt1(left \/ 1000);\n        state.stamps = state.stamps.filter(function (t) { return (now - t) < 2000; });\n        var span = Math.min(2000, now - state.t0);\n        var kps = span > 0 ? state.stamps.length \/ (span \/ 1000) : 0;\n        updateGauge(kps * 10);\n    }\n\n    function start() {\n        state.started = true;\n        state.t0 = Date.now();\n        state.timer = setInterval(tick, 80);\n        hint.classList.add('zz-hide');\n        cta.classList.add('zz-gone');\n        veil.classList.add('zz-gone');\n        closeBtn.classList.remove('zz-glow');\n    }\n\n    function updateCracks() {\n        var i;\n        for (i = 0; i < CRACK_STEPS.length; i++) {\n            if (state.clicks >= CRACK_STEPS[i]) { cracks[i].classList.add('zz-show'); }\n        }\n    }\n\n    function flash(x, y) {\n        var s = document.createElement('span');\n        s.className = 'zz-hit';\n        s.style.left = (x - 14) + 'px';\n        s.style.top = (y - 14) + 'px';\n        win.appendChild(s);\n        s.addEventListener('animationend', function () { s.remove(); });\n    }\n\n    function end() {\n        clearInterval(state.timer);\n        state.ended = true;\n        timeEl.textContent = '0,0';\n        win.classList.add('zz-ended');\n\n        var idx = updateGauge(state.clicks);\n        resClicks.textContent = state.clicks;\n        resKps.textContent = fmt1(state.clicks \/ 10);\n        resBft.textContent = 'Windst\u00e4rke ' + idx + ' \u00b7 ' + BFT[idx].name;\n        resSpruch.textContent = BFT[idx].text;\n\n        var best = readBest();\n        if (state.clicks > best) {\n            best = state.clicks;\n            try { localStorage.setItem(STORE_KEY, String(best)); } catch (err) { \/* localStorage gesperrt: kein Drama *\/ }\n            resRecord.textContent = 'Neuer Bestwert auf diesem Ger\u00e4t. Vorher stand hier weniger.';\n        } else if (best > 0) {\n            resRecord.textContent = 'Bestwert auf diesem Ger\u00e4t: ' + best + ' Klicks.';\n        } else {\n            resRecord.textContent = '';\n        }\n\n        resultEl.classList.add('zz-open');\n\n        lastScore = state.clicks;\n        submitted = false;\n        submitBtn.disabled = false;\n        if (lastScore > 0) {\n            boardFormLabel.textContent = 'Dein Ergebnis: ' + lastScore + ' Klicks. Trag dich ins Bordbuch ein:';\n            if (!nameInput.value) {\n                var saved = '';\n                try { saved = localStorage.getItem(NAME_KEY) || ''; } catch (err) { saved = ''; }\n                nameInput.value = saved;\n            }\n            boardForm.classList.add('zz-open');\n        } else {\n            boardForm.classList.remove('zz-open');\n        }\n        loadBoard(null);\n    }\n\n    var dialog = document.getElementById('zzDialog');\n    var closeBtn = document.getElementById('zzCloseBtn');\n    var frostText = document.getElementById('zzFrostText');\n    var SNARK = [\n        'Du wartest. Mutig.',\n        'Windows wartet mit dir. Ihr seid jetzt zu zweit.',\n        'Immer noch nichts. \u00dcberraschung.',\n        'Die R\u00fcckmeldung kommt per Post.'\n    ];\n    var snarkIdx = 0;\n\n    function scoreClick(e) {\n        if (!state.started) { start(); }\n        state.clicks += 1;\n        state.stamps.push(Date.now());\n        clicksEl.textContent = state.clicks;\n        updateCracks();\n        var r = win.getBoundingClientRect();\n        flash(e.clientX - r.left, e.clientY - r.top);\n    }\n\n    function shakeDialog() {\n        dialog.classList.remove('zz-shake');\n        void dialog.offsetWidth;\n        dialog.classList.add('zz-shake');\n    }\n\n    win.addEventListener('click', function (e) {\n        if (state.ended) { return; }\n        var ctaHit = e.target.closest ? e.target.closest('#zzCta, #zzVeil') : null;\n        if (ctaHit) {\n            cta.classList.add('zz-gone');\n            veil.classList.add('zz-gone');\n            return;\n        }\n        var hit = e.target.closest ? e.target.closest('[data-zz-hit]') : null;\n        if (hit) { scoreClick(e); return; }\n        var waiting = e.target.closest ? e.target.closest('#zzWaitBtn') : null;\n        if (waiting) {\n            frostText.textContent = SNARK[snarkIdx % SNARK.length];\n            snarkIdx += 1;\n            return;\n        }\n        shakeDialog();\n    });\n\n    againBtn.addEventListener('click', function () {\n        clearInterval(state.timer);\n        state = freshState();\n        clicksEl.textContent = '0';\n        timeEl.textContent = '10,0';\n        win.classList.remove('zz-ended');\n        resultEl.classList.remove('zz-open');\n        hint.classList.remove('zz-hide');\n        cta.classList.remove('zz-gone');\n        veil.classList.remove('zz-gone');\n        frostText.textContent = 'Keine R\u00fcckmeldung \u2026 Warten wird nicht helfen';\n        snarkIdx = 0;\n        closeBtn.classList.add('zz-glow');\n        var i;\n        for (i = 0; i < cracks.length; i++) { cracks[i].classList.remove('zz-show'); }\n        updateGauge(0);\n        boardForm.classList.remove('zz-open');\n        boardStatus.textContent = '';\n    });\n\n    \/* ====== Bordbuch: global \u00fcber REST, lokaler Fallback ====== *\/\n    var API_URL = '\/?rest_route=\/zenzorn\/v1\/scores\/klick-wut';\n    var LOCAL_BOARD_KEY = 'zz-board-klick-wut';\n    var NAME_KEY = 'zz-bordname';\n    var NAME_RE = \/^[A-Za-z0-9\u00c4\u00d6\u00dc\u00e4\u00f6\u00fc\u00df._\\- ]{3,12}$\/;\n\n    var boardList = document.getElementById('zzBoardList');\n    var boardEmpty = document.getElementById('zzBoardEmpty');\n    var boardForm = document.getElementById('zzBoardForm');\n    var boardFormLabel = document.getElementById('zzBoardFormLabel');\n    var boardStatus = document.getElementById('zzBoardStatus');\n    var nameInput = document.getElementById('zzName');\n    var submitBtn = document.getElementById('zzSubmit');\n\n    var boardToken = null;\n    var remoteMode = true;\n    var submitted = false;\n    var lastScore = 0;\n\n    function localRead() {\n        var raw = null;\n        try { raw = localStorage.getItem(LOCAL_BOARD_KEY); } catch (err) { raw = null; }\n        if (!raw) { return []; }\n        var list = [];\n        try { list = JSON.parse(raw); } catch (err) { list = []; }\n        return Array.isArray(list) ? list : [];\n    }\n\n    function localAdd(name, score) {\n        var list = localRead();\n        list.push({ name: name, score: score });\n        list.sort(function (a, b) { return b.score - a.score; });\n        list = list.slice(0, 10);\n        try { localStorage.setItem(LOCAL_BOARD_KEY, JSON.stringify(list)); } catch (err) { \/* localStorage gesperrt *\/ }\n        return list;\n    }\n\n    function renderBoard(list, own) {\n        boardList.textContent = '';\n        var shown = list.slice(0, 10);\n        boardEmpty.style.display = shown.length === 0 ? '' : 'none';\n        var ownMarked = false;\n        var i;\n        for (i = 0; i < shown.length; i++) {\n            var li = document.createElement('li');\n            var rank = document.createElement('span');\n            rank.className = 'zz-board-rank';\n            rank.textContent = (i + 1) + '.';\n            var nm = document.createElement('span');\n            nm.className = 'zz-board-name';\n            nm.textContent = shown[i].name;\n            var sc = document.createElement('span');\n            sc.className = 'zz-board-score';\n            sc.textContent = shown[i].score;\n            li.appendChild(rank);\n            li.appendChild(nm);\n            li.appendChild(sc);\n            if (own) {\n                if (!ownMarked) {\n                    if (shown[i].name === own.name) {\n                        if (shown[i].score === own.score) {\n                            li.classList.add('zz-me');\n                            ownMarked = true;\n                        }\n                    }\n                }\n            }\n            boardList.appendChild(li);\n        }\n    }\n\n    function loadBoard(own) {\n        fetch(API_URL, { cache: 'no-store' })\n            .then(function (r) {\n                if (!r.ok) { throw new Error('http'); }\n                return r.json();\n            })\n            .then(function (data) {\n                remoteMode = true;\n                boardToken = data.token;\n                renderBoard(data.scores || [], own || null);\n                boardStatus.textContent = '';\n            })\n            .catch(function () {\n                remoteMode = false;\n                boardToken = null;\n                renderBoard(localRead(), own || null);\n                boardStatus.textContent = 'Keine Verbindung zum Server. Das Bordbuch l\u00e4uft gerade nur lokal auf diesem Ger\u00e4t.';\n            });\n    }\n\n    function submitScore() {\n        if (submitted) { return; }\n        var name = nameInput.value.trim();\n        if (!NAME_RE.test(name)) {\n            boardStatus.textContent = 'Rufzeichen bitte 3 bis 12 Zeichen: Buchstaben, Zahlen, Punkt, Strich.';\n            return;\n        }\n        try { localStorage.setItem(NAME_KEY, name); } catch (err) { \/* localStorage gesperrt *\/ }\n        if (!remoteMode) {\n            var list = localAdd(name, lastScore);\n            submitted = true;\n            boardForm.classList.remove('zz-open');\n            renderBoard(list, { name: name, score: lastScore });\n            boardStatus.textContent = 'Lokal eingetragen (nur auf diesem Ger\u00e4t sichtbar).';\n            return;\n        }\n        submitBtn.disabled = true;\n        boardStatus.textContent = 'Wird eingetragen \u2026';\n        fetch(API_URL, {\n            method: 'POST',\n            headers: { 'Content-Type': 'application\/json' },\n            body: JSON.stringify({ name: name, score: lastScore, token: boardToken, website: '' })\n        })\n            .then(function (r) {\n                return r.json().then(function (d) { return { ok: r.ok, data: d }; });\n            })\n            .then(function (res) {\n                if (res.ok) {\n                    submitted = true;\n                    boardForm.classList.remove('zz-open');\n                    renderBoard(res.data.scores || [], { name: name, score: lastScore });\n                    boardStatus.textContent = 'Eingetragen. Willkommen im Bordbuch, ' + name + '.';\n                } else {\n                    submitBtn.disabled = false;\n                    var msg = res.data ? res.data.message : '';\n                    boardStatus.textContent = msg ? msg : 'Der Eintrag wurde abgelehnt.';\n                    loadBoard(null);\n                }\n            })\n            .catch(function () {\n                submitBtn.disabled = false;\n                boardStatus.textContent = 'Verbindung fehlgeschlagen. Versuch es gleich nochmal.';\n            });\n    }\n\n    submitBtn.addEventListener('click', submitScore);\n    nameInput.addEventListener('keydown', function (e) {\n        if (e.key === 'Enter') { submitScore(); }\n    });\n\n    loadBoard(null);\n})();\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>Klick-Wut Zehn Sekunden auf ein Fenster, das nicht mehr reagiert. Der erste Klick startet die Uhr, am Ende zeigt die [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"disabled","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[41],"tags":[],"class_list":["post-2164","post","type-post","status-publish","format-standard","hentry","category-zen-zorn"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":false,"author_link":"https:\/\/cad-kompass.de\/?author=1"},"uagb_comment_info":0,"uagb_excerpt":"Klick-Wut Zehn Sekunden auf ein Fenster, das nicht mehr reagiert. Der erste Klick startet die Uhr, am Ende zeigt die [&hellip;]","_links":{"self":[{"href":"https:\/\/cad-kompass.de\/index.php?rest_route=\/wp\/v2\/posts\/2164","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cad-kompass.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cad-kompass.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cad-kompass.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cad-kompass.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2164"}],"version-history":[{"count":2,"href":"https:\/\/cad-kompass.de\/index.php?rest_route=\/wp\/v2\/posts\/2164\/revisions"}],"predecessor-version":[{"id":2169,"href":"https:\/\/cad-kompass.de\/index.php?rest_route=\/wp\/v2\/posts\/2164\/revisions\/2169"}],"wp:attachment":[{"href":"https:\/\/cad-kompass.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2164"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cad-kompass.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2164"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cad-kompass.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2164"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}