{"id":5663,"date":"2025-04-20T02:04:06","date_gmt":"2025-04-20T01:04:06","guid":{"rendered":"https:\/\/melodypartybox.de\/myzeil\/?page_id=5663"},"modified":"2026-05-02T21:20:41","modified_gmt":"2026-05-02T20:20:41","slug":"raumpreisberechnung","status":"publish","type":"page","link":"https:\/\/melodypartybox.de\/myzeil\/raumpreisberechnung\/","title":{"rendered":"Interner Raumpreisrechner"},"content":{"rendered":"<div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1378px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:20px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\">\t<!DOCTYPE html>\n<html lang=\"de\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Raumpreise Berechnung<\/title>\n    <!-- Version: 20260502-221625 (Preise abgestimmt mit melodypartybox.de\/myzeil\/raumpreise\/) -->\n    <link href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.3.3\/dist\/css\/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\n    <link href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/5.15.4\/css\/all.min.css\" rel=\"stylesheet\">\n    <style>\n        body {\n            padding-top: 20px;\n            background-color: #f8f9fa;\n            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n        }\n        .container {\n            max-width: 600px;\n            background-color: #ffffff;\n            padding: 20px;\n            border-radius: 8px;\n            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n            margin-bottom: 20px;\n        }\n\n        @media (max-width: 768px) {\n            .container {\n                max-width: 100%;\n                margin: 10px;\n                padding: 15px;\n                border-radius: 4px;\n            }\n            body {\n                padding-top: 10px;\n                padding-left: 5px;\n                padding-right: 5px;\n            }\n            h1 {\n                font-size: 2rem;\n                margin-bottom: 0.5rem;\n            }\n            h3 {\n                font-size: 1.25rem;\n            }\n        }\n\n        @media (max-width: 480px) {\n            .container {\n                margin: 5px;\n                padding: 10px;\n            }\n            body {\n                padding-top: 5px;\n                padding-left: 2px;\n                padding-right: 2px;\n            }\n            h1 {\n                font-size: 1.75rem;\n            }\n            h3 {\n                font-size: 1.1rem;\n            }\n        }\n\n        h1 {\n            color: var(--bs-primary);\n            font-size: 2.5rem;\n            margin-bottom: 1rem;\n        }\n\n        .result {\n            background-color: #f1f1f1;\n            padding: 15px;\n            border-radius: 8px;\n            margin-top: 20px;\n        }\n\n        .result p {\n            margin: 0.1rem 0;\n            line-height: 1.2;\n        }\n\n        #disclaimer {\n            font-size: 0.85rem;\n            color: #6c757d;\n        }\n\n        input, select, textarea {\n            font-size: 16px;\n        }\n\n        select.form-control {\n            padding-top: 0.375rem;\n            padding-bottom: 0.375rem;\n            height: auto;\n        }\n\n        @media (max-width: 768px) {\n            .form-control {\n                font-size: 16px;\n                padding: 0.75rem;\n            }\n            .btn {\n                padding: 0.75rem 1rem;\n                font-size: 16px;\n            }\n            .form-check-input {\n                margin-top: 0.3rem;\n            }\n            .form-check-label {\n                padding-left: 0.5rem;\n            }\n        }\n\n        #copyResultBtn {\n            position: sticky;\n            top: 0;\n            z-index: 1;\n        }\n\n        #copyResultBtn.btn {\n            color: #212529;\n            border-color: #343a40;\n        }\n\n        #resetFormLink {\n            margin-top: 10px;\n            padding: 8px 16px;\n            font-weight: 500;\n            transition: all 0.2s ease;\n        }\n\n        #resetFormLink:hover {\n            background-color: #6c757d;\n            color: white;\n            transform: translateY(-1px);\n        }\n\n        #timeError {\n            border-left: 4px solid #dc3545;\n            background-color: #f8d7da;\n            border-radius: 4px;\n            padding: 12px 16px;\n            margin-top: 8px;\n            box-shadow: 0 2px 4px rgba(220, 53, 69, 0.1);\n            animation: shake 0.5s ease-in-out;\n        }\n\n        @keyframes shake {\n            0%, 100% { transform: translateX(0); }\n            25% { transform: translateX(-5px); }\n            75% { transform: translateX(5px); }\n        }\n\n        @media (max-width: 768px) {\n            .result {\n                padding: 10px;\n                margin-top: 15px;\n            }\n            .result p {\n                font-size: 14px;\n                margin: 0.2rem 0;\n            }\n            #copyResultBtn {\n                width: 100%;\n                margin-bottom: 15px;\n            }\n            #timeError {\n                font-size: 14px;\n                padding: 10px 12px;\n            }\n        }\n    <\/style>\n<\/head>\n<body>\n    <div class=\"container\">\n        <h1>Raumpreise Berechnung<\/h1>\n        <h3 class=\"text-primary\">Standort: Melody Myzeil<\/h3>\n        <form id=\"priceCalculationForm\">\n            <div class=\"mb-3\">\n                <label for=\"quickEntryInput\" class=\"form-label\">Schnelleingabe (Text einf\u00fcgen):<\/label>\n                <textarea id=\"quickEntryInput\" class=\"form-control\" rows=\"6\" placeholder=\"von: Name (z. B. Uhrzeit) <email>\nRaumgr\u00f6\u00dfe: Bronze Raum ( 1 - 6 Personen)\nPersonenanzahl: 3\nZeit: Montag, 09.03.2026 , von 18:00 bis 19:00 Uhr\nHandy: 017642773687\nAnlass: Geburtstagsfeier\"><\/textarea>\n                <small id=\"hintMissing\" class=\"form-text text-danger d-none\">Hinweis: Bitte Datum und Zeit (von\/bis) angeben oder pr\u00fcfen.<\/small>\n                <div class=\"text-center mt-2\">\n                    <button type=\"button\" id=\"resetFormLink\" class=\"btn btn-outline-secondary btn-sm\">\n                        <i class=\"fas fa-undo me-2\"><\/i>Reset Form\n                    <\/button>\n                <\/div>\n            <\/div>\n            <div class=\"mb-3\">\n                <label for=\"datePicker\" class=\"form-label\">Datum:<\/label>\n                <input type=\"date\" id=\"datePicker\" class=\"form-control\" required>\n            <\/div>\n            <div class=\"mb-3\">\n                <div class=\"form-check\">\n                    <input class=\"form-check-input\" type=\"checkbox\" id=\"holidayCheckbox\" style=\"transform: scale(1.5);\">\n                    <label class=\"form-check-label\" id=\"holidayLabel\" for=\"holidayCheckbox\" style=\"font-size: 16px;\">\n                        Vor- & Feiertag\n                    <\/label>\n                <\/div>\n            <\/div>\n            <div class=\"mb-3\">\n                <label for=\"roomSize\" class=\"form-label\">Raumgr\u00f6\u00dfe:<\/label>\n                <select id=\"roomSize\" class=\"form-control\" required>\n                    <option value=\"Bronze\">Bronze (bis zu 6 Personen)<\/option>\n                    <option value=\"Silver\">Silver (bis zu 10 Personen)<\/option>\n                    <option value=\"Gold\">Gold (bis zu 14 Personen)<\/option>\n                    <option value=\"Platinum\">Platinum (bis zu 20 Personen)<\/option>\n                    <option value=\"Diamond\">Diamond (bis zu 30 Personen)<\/option>\n                <\/select>\n            <\/div>\n            <div class=\"mb-3\">\n                <label for=\"entryTime\" class=\"form-label\">Eintrittszeit:<\/label>\n                <select id=\"entryTime\" class=\"form-control\" required disabled><\/select>\n                <div id=\"timeError\" class=\"alert alert-danger d-none mt-2\" role=\"alert\">\n                    <strong>\u26a0\ufe0f Fehler:<\/strong> Eintrittszeit muss vor Austrittszeit liegen.\n                <\/div>\n            <\/div>\n            <div class=\"mb-3\">\n                <label for=\"exitTime\" class=\"form-label\">Austrittszeit:<\/label>\n                <select id=\"exitTime\" class=\"form-control\" required disabled><\/select>\n            <\/div>\n        <\/form>\n\n        <div id=\"result\" class=\"result d-none\">\n            <div class=\"d-flex justify-content-between align-items-center mb-3\">\n                <h4 class=\"mb-0 text-primary\">Berechnungsergebnis:<\/h4>\n                <button type=\"button\" id=\"copyResultBtn\" class=\"btn btn-sm btn-outline-secondary\">Kopieren<\/button>\n            <\/div>\n            <p id=\"resultName\">Name: <strong><\/strong><\/p>\n            <p id=\"resultRoomSize\">Raumgr\u00f6\u00dfe: <strong><\/strong><\/p>\n            <p id=\"resultPersonen\">Personenanzahl: <strong><\/strong><\/p>\n            <p id=\"resultZeit\">Zeit: <strong><\/strong><\/p>\n            <p id=\"resultHandy\">Handy: <strong><\/strong><\/p>\n            <p id=\"resultAnlass\">Anlass: <strong><\/strong><\/p>\n            <p id=\"resultRaummiete\">Raummiete: <strong><\/strong><\/p>\n            <p id=\"resultMindestverzehr\">Mindestverzehr: <strong><\/strong><\/p>\n            <p id=\"resultGesamtMin\">Voraussichtlicher Mindestgesamtpreis: <strong><\/strong><\/p>\n        <\/div>\n\n        <div id=\"depositResult\" class=\"result d-none mt-4\">\n            <div class=\"d-flex justify-content-between align-items-center mb-3\">\n                <h4 class=\"mb-0 text-primary\">Anzahlung:<\/h4>\n                <button type=\"button\" id=\"copyDepositBtn\" class=\"btn btn-sm btn-outline-secondary\">Kopieren<\/button>\n            <\/div>\n            <p id=\"resultAnzahlung\" style=\"font-size: 1.5rem; font-weight: bold;\"><strong><\/strong><\/p>\n        <\/div>\n\n        <div id=\"depositDeadlineResult\" class=\"result d-none mt-4\">\n            <div class=\"d-flex justify-content-between align-items-center mb-3\">\n                <h4 class=\"mb-0 text-primary\">Anzahlungsfrist:<\/h4>\n                <button type=\"button\" id=\"copyDeadlineBtn\" class=\"btn btn-sm btn-outline-secondary\">Kopieren<\/button>\n            <\/div>\n            <p id=\"resultAnzahlungFrist\" style=\"font-size: 1.5rem; font-weight: bold; margin: 0; color: #000000;\"><strong><\/strong><\/p>\n        <\/div>\n\n        <p id=\"disclaimer\" class=\"mt-3\">\n            Bitte beachten Sie, dass bei dieser Berechnung bestimmte Faktoren wie Feiertage und Betriebsurlaub nicht ber\u00fccksichtigt werden k\u00f6nnen. Der ermittelte Preis dient lediglich zur Orientierung und stellt kein verbindliches Angebot dar.\n        <\/p>\n\n        <div class=\"mt-4 pt-3 border-top\">\n            <small class=\"text-muted\">\n                <strong>Version:<\/strong> 20260502-221625\n            <\/small>\n        <\/div>\n    <\/div>\n\n    <script>\n        const TIME_INTERVAL_MINUTES = 15;\n        const OPEN_CONFIG = {\n            sundayStartHour: 14,\n            sundayStartMinutes: 45,\n            defaultStartHour: 10,\n            defaultStartMinutes: 0,\n            endHourInclusive: 26\n        };\n\n        \/** Eine Quelle f\u00fcr alle Preisberechnungen (15-Minuten-Tarife, \u20ac \/ Viertelstunde). *\/\n        const PRICE_TABLE = {\n            Bronze: {\n                weekdays: [\n                    { start: 600, end: 900, price: 4.25 },\n                    { start: 900, end: 1200, price: 5.75 },\n                    { start: 1200, end: 1500, price: 8.75 }\n                ],\n                friday: [\n                    { start: 600, end: 900, price: 5 },\n                    { start: 900, end: 1200, price: 7.25 },\n                    { start: 1200, end: 1500, price: 9.75 }\n                ],\n                saturday: [\n                    { start: 600, end: 900, price: 6.75 },\n                    { start: 900, end: 1200, price: 9 },\n                    { start: 1200, end: 1500, price: 11.50 }\n                ],\n                sunday: [\n                    { start: 600, end: 900, price: 5 },\n                    { start: 900, end: 1200, price: 7.25 },\n                    { start: 1200, end: 1500, price: 9.75 }\n                ]\n            },\n            Silver: {\n                weekdays: [\n                    { start: 600, end: 900, price: 5 },\n                    { start: 900, end: 1200, price: 6.75 },\n                    { start: 1200, end: 1500, price: 10 }\n                ],\n                friday: [\n                    { start: 600, end: 900, price: 6.25 },\n                    { start: 900, end: 1200, price: 8.50 },\n                    { start: 1200, end: 1500, price: 11.25 }\n                ],\n                saturday: [\n                    { start: 600, end: 900, price: 9.25 },\n                    { start: 900, end: 1200, price: 11.50 },\n                    { start: 1200, end: 1500, price: 14 }\n                ],\n                sunday: [\n                    { start: 600, end: 900, price: 6.25 },\n                    { start: 900, end: 1200, price: 8.50 },\n                    { start: 1200, end: 1500, price: 11.25 }\n                ]\n            },\n            Gold: {\n                weekdays: [\n                    { start: 600, end: 900, price: 6.25 },\n                    { start: 900, end: 1200, price: 9.75 },\n                    { start: 1200, end: 1500, price: 12.25 }\n                ],\n                friday: [\n                    { start: 600, end: 900, price: 8.50 },\n                    { start: 900, end: 1200, price: 11.50 },\n                    { start: 1200, end: 1500, price: 13.75 }\n                ],\n                saturday: [\n                    { start: 600, end: 900, price: 11.25 },\n                    { start: 900, end: 1200, price: 14.25 },\n                    { start: 1200, end: 1500, price: 16.75 }\n                ],\n                sunday: [\n                    { start: 600, end: 900, price: 8.50 },\n                    { start: 900, end: 1200, price: 11.50 },\n                    { start: 1200, end: 1500, price: 13.75 }\n                ]\n            },\n            Platinum: {\n                weekdays: [\n                    { start: 600, end: 900, price: 8.75 },\n                    { start: 900, end: 1200, price: 13.75 },\n                    { start: 1200, end: 1500, price: 17.50 }\n                ],\n                friday: [\n                    { start: 600, end: 900, price: 11.25 },\n                    { start: 900, end: 1200, price: 16.25 },\n                    { start: 1200, end: 1500, price: 18.75 }\n                ],\n                saturday: [\n                    { start: 600, end: 900, price: 12.50 },\n                    { start: 900, end: 1200, price: 17.50 },\n                    { start: 1200, end: 1500, price: 21.25 }\n                ],\n                sunday: [\n                    { start: 600, end: 900, price: 11.25 },\n                    { start: 900, end: 1200, price: 16.25 },\n                    { start: 1200, end: 1500, price: 18.75 }\n                ]\n            },\n            Diamond: {\n                weekdays: [\n                    { start: 600, end: 900, price: 11.25 },\n                    { start: 900, end: 1200, price: 16.25 },\n                    { start: 1200, end: 1500, price: 21.25 }\n                ],\n                friday: [\n                    { start: 600, end: 900, price: 13.75 },\n                    { start: 900, end: 1200, price: 18.75 },\n                    { start: 1200, end: 1500, price: 23.75 }\n                ],\n                saturday: [\n                    { start: 600, end: 900, price: 15 },\n                    { start: 900, end: 1200, price: 22.50 },\n                    { start: 1200, end: 1500, price: 27.25 }\n                ],\n                sunday: [\n                    { start: 600, end: 900, price: 13.75 },\n                    { start: 900, end: 1200, price: 18.75 },\n                    { start: 1200, end: 1500, price: 23.75 }\n                ]\n            }\n        };\n\n        let LAST_EXTRAS = { nameValue: '', handyValue: '', anlassValue: '', personenAnzahl: null };\n\n        const $ = (id) => document.getElementById(id);\n\n        const minutesToHHMM = (mins) =>\n            `${String(Math.floor((mins % (24 * 60)) \/ 60)).padStart(2, '0')}:${String(mins % 60).padStart(2, '0')}`;\n\n        function parseLocalDateFromPicker(isoDateStr) {\n            if (!isoDateStr) return null;\n            const p = isoDateStr.split('-').map(Number);\n            if (p.length !== 3 || p.some((n) => Number.isNaN(n))) return null;\n            return new Date(p[0], p[1] - 1, p[2], 12, 0, 0, 0);\n        }\n\n        const formatEuro = (val) =>\n            `${val.toLocaleString('de-DE', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\\u00A0\u20ac`;\n\n        const formatDeposit = (val) => `${Math.round(val).toLocaleString('de-DE')} \u20ac`;\n\n        const setRowValue = (selector, value) => {\n            const row = document.querySelector(selector);\n            const strong = row ? row.querySelector('strong') : null;\n            if (!row || !strong) return;\n            if (value !== undefined && value !== null && String(value).trim() !== '') {\n                strong.textContent = value;\n                row.classList.remove('d-none');\n            } else {\n                strong.textContent = '';\n                row.classList.add('d-none');\n            }\n        };\n\n        function getApplicablePrices(roomSize, dayOfWeek, isHoliday) {\n            const row = PRICE_TABLE[roomSize];\n            if (isHoliday) return row.saturday;\n            if (dayOfWeek === 5) return row.friday;\n            if (dayOfWeek === 6) return row.saturday;\n            if (dayOfWeek === 0) return row.sunday;\n            return row.weekdays;\n        }\n\n        \/** Preis f\u00fcr ein 15-Minuten-Fenster [start, end) in Minuten seit Mitternacht (inkl. Folgetag +1440\u2026). *\/\n        function getIntervalPrice(roomSize, pricingDayOfWeek, isHoliday, startMin, endMin) {\n            const intervals = getApplicablePrices(roomSize, pricingDayOfWeek, isHoliday);\n            let price = 0;\n            intervals.forEach((priceInterval) => {\n                if (startMin < priceInterval.end && endMin > priceInterval.start) {\n                    price = priceInterval.price;\n                }\n            });\n            return price;\n        }\n\n        function getHighestHourlyRate(roomSize, dayOfWeek, isHoliday, startTime, endTime) {\n            const applicablePrices = getApplicablePrices(roomSize, dayOfWeek, isHoliday);\n            let maxPrice = 0;\n            applicablePrices.forEach((priceInterval) => {\n                if (startTime < priceInterval.end && endTime > priceInterval.start) {\n                    maxPrice = Math.max(maxPrice, priceInterval.price);\n                }\n            });\n            return maxPrice * 4;\n        }\n\n        function calculateTwoHourlyRates(roomSize, dayOfWeek, isHoliday, startTime, endTime) {\n            const applicablePrices = getApplicablePrices(roomSize, dayOfWeek, isHoliday);\n            const middleTime = startTime + 60;\n            let firstHourRate = 0;\n            let secondHourRate = 0;\n            applicablePrices.forEach((priceInterval) => {\n                if (startTime < priceInterval.end && middleTime > priceInterval.start) {\n                    firstHourRate = Math.max(firstHourRate, priceInterval.price);\n                }\n            });\n            applicablePrices.forEach((priceInterval) => {\n                if (middleTime < priceInterval.end && endTime > priceInterval.start) {\n                    secondHourRate = Math.max(secondHourRate, priceInterval.price);\n                }\n            });\n            return firstHourRate * 4 + secondHourRate * 4;\n        }\n\n        function calculateDepositDeadline(bookingDate) {\n            const now = new Date();\n            const booking = new Date(bookingDate);\n            const timeDiff = booking.getTime() - now.getTime();\n            const daysDiff = Math.ceil(timeDiff \/ (1000 * 3600 * 24));\n            let deadline;\n\n            if (daysDiff < 3) {\n                deadline = 'Spontane Reservierung, manuelle Frist';\n            } else {\n                const sevenDaysFromToday = new Date(now);\n                sevenDaysFromToday.setDate(now.getDate() + 7);\n                sevenDaysFromToday.setHours(18, 0, 0, 0);\n\n                const threeDaysBeforeBooking = new Date(booking);\n                threeDaysBeforeBooking.setDate(booking.getDate() - 3);\n\n                if (sevenDaysFromToday <= threeDaysBeforeBooking) {\n                    deadline = sevenDaysFromToday;\n                } else {\n                    deadline = threeDaysBeforeBooking;\n                    deadline.setHours(18, 0, 0, 0);\n                }\n\n                const hoursUntilDeadline = (deadline.getTime() - now.getTime()) \/ (1000 * 3600);\n\n                if (hoursUntilDeadline < 4) {\n                    deadline = 'Spontane Reservierung, manuelle Frist';\n                } else {\n                    const weekdays = ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'];\n                    const months = [\n                        'Januar', 'Februar', 'M\u00e4rz', 'April', 'Mai', 'Juni',\n                        'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'\n                    ];\n                    const weekday = weekdays[deadline.getDay()];\n                    const day = deadline.getDate();\n                    const month = months[deadline.getMonth()];\n                    const year = deadline.getFullYear();\n                    const hours = deadline.getHours().toString().padStart(2, '0');\n                    const minutes = deadline.getMinutes().toString().padStart(2, '0');\n                    deadline = `[${weekday}, ${day}. ${month} ${year}, ${hours}:${minutes} Uhr]`;\n                }\n            }\n            return deadline;\n        }\n\n        function getTimeOptionsForDay(dayOfWeek) {\n            const startHour = dayOfWeek === 0 ? OPEN_CONFIG.sundayStartHour : OPEN_CONFIG.defaultStartHour;\n            const startMinutes = dayOfWeek === 0 ? OPEN_CONFIG.sundayStartMinutes : OPEN_CONFIG.defaultStartMinutes;\n            const endHour = OPEN_CONFIG.endHourInclusive;\n            const options = [];\n            for (let hour = startHour; hour < endHour; hour++) {\n                for (let minute = hour === startHour ? startMinutes : 0; minute < 60; minute += TIME_INTERVAL_MINUTES) {\n                    const labelHour = hour > 23 ? hour - 24 : hour;\n                    const label = minutesToHHMM(labelHour * 60 + minute);\n                    const value = hour * 60 + minute;\n                    options.push({ label, value, hour });\n                }\n            }\n            return options;\n        }\n\n        function renderTimeOptions(selectEl, options, predicate) {\n            selectEl.innerHTML = '';\n            options.forEach((opt) => {\n                if (!predicate || predicate(opt)) {\n                    selectEl.add(new Option(opt.label, opt.value));\n                }\n            });\n        }\n\n        function setTimesEnabled(enabled) {\n            $('entryTime').disabled = !enabled;\n            $('exitTime').disabled = !enabled;\n        }\n\n        function populateTimeOptions() {\n            const datePicker = $('datePicker');\n            const entrySelect = $('entryTime');\n            const exitSelect = $('exitTime');\n\n            datePicker.addEventListener('change', function () {\n                const te = document.getElementById('timeError');\n                if (te) te.classList.add('d-none');\n                const selectedDate = parseLocalDateFromPicker(this.value);\n                if (!selectedDate) return;\n                const dayOfWeek = selectedDate.getDay();\n                const options = getTimeOptionsForDay(dayOfWeek);\n                renderTimeOptions(entrySelect, options, (o) => o.hour < 25);\n                renderTimeOptions(exitSelect, options, (o) => o.hour > 10 && o.hour <= 26);\n                setTimesEnabled(true);\n            });\n        }\n\n        function parseQuickEntryText(rawText) {\n            const text = (rawText || '').replace(\/\\r\\n|\\r\/g, '\\n');\n            const lines = text.split('\\n').map((l) => l.trim());\n\n            let roomSize = null;\n            const raumLine = lines.find((l) => \/^Raumgr\u00f6\u00dfe\\s*:\/i.test(l));\n            if (raumLine) {\n                const roomMatch = raumLine.match(\/\\b(Bronze|Silver|Gold|Platinum|Diamond)\\b\/i);\n                if (roomMatch) {\n                    roomSize = roomMatch[1].charAt(0).toUpperCase() + roomMatch[1].slice(1).toLowerCase();\n                }\n            }\n            if (!roomSize) {\n                const roomMatch = text.match(\/\\b(Bronze|Silver|Gold|Platinum|Diamond)\\b\/i);\n                if (roomMatch) {\n                    roomSize = roomMatch[1].charAt(0).toUpperCase() + roomMatch[1].slice(1).toLowerCase();\n                }\n            }\n\n            let personenAnzahl = null;\n            const personenLine = lines.find((l) => \/^Personenanzahl\\s*:\/i.test(l));\n            if (personenLine) {\n                const personenMatch = personenLine.match(\/Personenanzahl\\s*:\\s*(\\d{1,2})\/i);\n                if (personenMatch) personenAnzahl = parseInt(personenMatch[1], 10);\n            }\n            if (personenAnzahl == null) {\n                const pm = text.match(\/Personenanzahl\\s*:\\s*(\\d{1,2})\/i);\n                if (pm) personenAnzahl = parseInt(pm[1], 10);\n            }\n\n            let nameValue = null;\n            const vonLine = lines.find((l) => \/^von\\s*:\/i.test(l));\n            if (vonLine) {\n                let name = vonLine.replace(\/^von\\s*:\\s*\/i, '').trim();\n                name = name.replace(\/\\s*\\([^)]*\\)\\s*$\/, '').trim();\n                name = name.replace(\/\\s*<[^>]+>\\s*$\/, '').trim();\n                if (name) nameValue = name;\n            }\n            if (!nameValue) {\n                const nameMatch = text.match(\/^(?:von|name)\\s*:\\s*(.+)$\/im);\n                if (nameMatch) {\n                    const n = nameMatch[1].trim().replace(\/\\s*\\([^)]*\\)\\s*$\/, '').trim().replace(\/\\s*<[^>]+>\\s*$\/, '').trim();\n                    if (n) nameValue = n;\n                }\n            }\n\n            let handyValue = null;\n            const handyLine = lines.find((l) => \/^Handy\\s*:\/i.test(l));\n            if (handyLine) {\n                const handyMatch = handyLine.match(\/Handy\\s*:\\s*([+\\d][\\d\\s\\\/\\-]{6,})\/i);\n                if (handyMatch) handyValue = handyMatch[1].replace(\/\\s+\/g, '').trim();\n            }\n            if (!handyValue) {\n                const handyMatch = text.match(\/Handy\\s*:\\s*([+\\d][\\d\\s\\\/\\-]{6,})\/i);\n                if (handyMatch) handyValue = handyMatch[1].replace(\/\\s+\/g, '');\n            }\n\n            let anlassValue = null;\n            const anlassLine = lines.find((l) => \/^Anlass\\s*:\/i.test(l));\n            if (anlassLine) {\n                const anlassMatch = anlassLine.match(\/Anlass\\s*:\\s*(.+)$\/i);\n                if (anlassMatch) anlassValue = anlassMatch[1].trim();\n            }\n            if (!anlassValue) {\n                const anlassMatch = text.match(\/Anlass\\s*:\\s*(.+)$\/im);\n                if (anlassMatch) anlassValue = anlassMatch[1].trim();\n            }\n\n            let isoDate = null;\n            const zeitLine = lines.find((l) => \/^Zeit\\s*:\/i.test(l));\n            if (zeitLine) {\n                const dateInZeit = zeitLine.match(\/(\\d{1,2})\\.(\\d{1,2})\\.(\\d{4})\/);\n                if (dateInZeit) {\n                    const d = dateInZeit[1].padStart(2, '0');\n                    const m = dateInZeit[2].padStart(2, '0');\n                    isoDate = `${dateInZeit[3]}-${m}-${d}`;\n                }\n            }\n            if (!isoDate) {\n                const dateMatch = text.match(\/(\\d{1,2})\\.(\\d{1,2})\\.(\\d{4})\/);\n                if (dateMatch) {\n                    const d = dateMatch[1].padStart(2, '0');\n                    const m = dateMatch[2].padStart(2, '0');\n                    isoDate = `${dateMatch[3]}-${m}-${d}`;\n                }\n            }\n\n            let startTime = null;\n            let endTime = null;\n            const zeitLineForTime = zeitLine || text;\n            const timeMatch = zeitLineForTime.match(\/von\\s+(\\d{1,2}:\\d{2})\\s+bis\\s+(\\d{1,2}:\\d{2})\/i);\n            if (timeMatch) {\n                startTime = timeMatch[1].replace(\/^(\\d):\/, '0$1:');\n                endTime = timeMatch[2].replace(\/^(\\d):\/, '0$1:');\n            } else {\n                const timePattern = \/(\\d{1,2}:\\d{2})\/g;\n                const timeMatches = (zeitLine || text).match(timePattern);\n                if (timeMatches && timeMatches.length >= 2) {\n                    startTime = timeMatches[0].replace(\/^(\\d):\/, '0$1:');\n                    endTime = timeMatches[1].replace(\/^(\\d):\/, '0$1:');\n                } else if (timeMatches && timeMatches.length === 1) {\n                    startTime = timeMatches[0].replace(\/^(\\d):\/, '0$1:');\n                }\n            }\n\n            if (!roomSize && typeof personenAnzahl === 'number') {\n                if (personenAnzahl <= 6) roomSize = 'Bronze';\n                else if (personenAnzahl <= 10) roomSize = 'Silver';\n                else if (personenAnzahl <= 14) roomSize = 'Gold';\n                else if (personenAnzahl <= 20) roomSize = 'Platinum';\n                else if (personenAnzahl <= 30) roomSize = 'Diamond';\n            }\n\n            return { roomSize, isoDate, startTime, endTime, personenAnzahl, nameValue, handyValue, anlassValue };\n        }\n\n        function hhmmToMinutes(hhmm) {\n            if (!hhmm) return null;\n            const [hStr, mStr] = hhmm.split(':');\n            const h = parseInt(hStr, 10);\n            const m = parseInt(mStr, 10);\n            return h * 60 + m;\n        }\n\n        function applyQuickEntry(shouldCalculate = false) {\n            const input = document.getElementById('quickEntryInput').value;\n            const { roomSize, isoDate, startTime, endTime, personenAnzahl, nameValue, handyValue, anlassValue } =\n                parseQuickEntryText(input);\n\n            if (roomSize) {\n                document.getElementById('roomSize').value = roomSize;\n            }\n\n            if (isoDate) {\n                const datePicker = document.getElementById('datePicker');\n                datePicker.value = isoDate;\n                datePicker.dispatchEvent(new Event('change'));\n            }\n\n            setTimeout(() => {\n                const entrySelect = document.getElementById('entryTime');\n                const exitSelect = document.getElementById('exitTime');\n                const entryMinutesBase = hhmmToMinutes(startTime);\n                const exitMinutesBase = hhmmToMinutes(endTime);\n\n                if (entryMinutesBase != null) {\n                    let entryOption = Array.from(entrySelect.options).find((opt) => {\n                        const minutes = parseInt(opt.value, 10);\n                        const hour = Math.floor(minutes \/ 60);\n                        const minute = minutes % 60;\n                        const label = `${(hour > 23 ? hour - 24 : hour).toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}`;\n                        const wanted = `${Math.floor(entryMinutesBase \/ 60).toString().padStart(2, '0')}:${(entryMinutesBase % 60).toString().padStart(2, '0')}`;\n                        return label === wanted;\n                    });\n                    if (!entryOption && startTime && startTime.includes(':')) {\n                        const [sh, sm] = startTime.split(':');\n                        const want = `${String(parseInt(sh, 10)).padStart(2, '0')}:${String(parseInt(sm, 10)).padStart(2, '0')}`;\n                        entryOption = Array.from(entrySelect.options).find((opt) => opt.text.trim() === want);\n                    }\n                    if (entryOption) entrySelect.value = entryOption.value;\n                }\n\n                if (exitMinutesBase != null) {\n                    let exitTarget = exitMinutesBase;\n                    if (entryMinutesBase != null && exitMinutesBase <= entryMinutesBase) {\n                        exitTarget += 24 * 60;\n                    }\n                    let exitOption = Array.from(exitSelect.options).find(\n                        (opt) => parseInt(opt.value, 10) === exitTarget\n                    );\n                    \/\/ Fallback: Label z. B. \u201e00:45\u201c (Sonntag\/Folgetag), falls value===exitTarget keinen Treffer liefert\n                    if (!exitOption && endTime && endTime.includes(':')) {\n                        const [eh, em] = endTime.split(':');\n                        const want = `${String(parseInt(eh, 10)).padStart(2, '0')}:${String(parseInt(em, 10)).padStart(2, '0')}`;\n                        exitOption = Array.from(exitSelect.options).find((opt) => opt.text.trim() === want);\n                    }\n                    if (exitOption) exitSelect.value = exitOption.value;\n                }\n\n                entrySelect.dispatchEvent(new Event('change', { bubbles: true }));\n                exitSelect.dispatchEvent(new Event('change', { bubbles: true }));\n\n                if (typeof personenAnzahl === 'number') LAST_EXTRAS.personenAnzahl = personenAnzahl;\n                if (nameValue) LAST_EXTRAS.nameValue = nameValue;\n                if (handyValue) LAST_EXTRAS.handyValue = handyValue;\n                if (anlassValue) LAST_EXTRAS.anlassValue = anlassValue;\n\n                if (shouldCalculate) {\n                    if (document.getElementById('datePicker').value && entrySelect.value && exitSelect.value) {\n                        calculatePricing({ personenAnzahl, nameValue, handyValue, anlassValue });\n                    }\n                }\n            }, 0);\n        }\n\n        function calculatePricing(parsedExtras) {\n            const date = parseLocalDateFromPicker(document.getElementById('datePicker').value);\n            if (!date || Number.isNaN(date.getTime())) return;\n\n            const dayOfWeek = date.getDay();\n            const roomSize = document.getElementById('roomSize').value;\n            const entryTime = parseInt(document.getElementById('entryTime').value, 10);\n            let exitTime = parseInt(document.getElementById('exitTime').value, 10);\n\n            if (exitTime <= entryTime) {\n                exitTime += 24 * 60;\n            }\n\n            const isHoliday = document.getElementById('holidayCheckbox').checked;\n\n            let total = 0;\n            let currentTime = entryTime;\n            let lastValidPrice = 0;\n\n            while (currentTime < exitTime) {\n                const nextTime = currentTime + 15;\n                let pricingDayOfWeek = dayOfWeek;\n                let pricingTime = currentTime;\n                if (currentTime >= 24 * 60) {\n                    pricingDayOfWeek = (dayOfWeek + 1) % 7;\n                    pricingTime = currentTime - 24 * 60;\n                }\n                let currentPrice = getIntervalPrice(roomSize, pricingDayOfWeek, isHoliday, pricingTime, pricingTime + 15);\n                if (currentPrice === 0 && currentTime >= 24 * 60) {\n                    currentPrice = lastValidPrice;\n                }\n                if (currentPrice > 0) {\n                    lastValidPrice = currentPrice;\n                }\n                total += currentPrice;\n                currentTime = nextTime;\n            }\n\n            document.getElementById('result').classList.remove('d-none');\n            document.getElementById('depositResult').classList.remove('d-none');\n            document.getElementById('depositDeadlineResult').classList.remove('d-none');\n\n            const extras = Object.assign({}, LAST_EXTRAS, parsedExtras || {});\n            const personenAnzahlExtra = extras.personenAnzahl != null ? String(extras.personenAnzahl) : '';\n            const nameExtra = extras.nameValue || '';\n            const handyExtra = extras.handyValue || '';\n            const anlassExtra = extras.anlassValue || '';\n\n            const dateStr = date.toLocaleDateString('de-DE', {\n                weekday: 'long',\n                year: 'numeric',\n                month: '2-digit',\n                day: '2-digit'\n            });\n            const fmt = (mins) =>\n                `${String(Math.floor((mins % (24 * 60)) \/ 60)).padStart(2, '0')}:${String(mins % 60).padStart(2, '0')}`;\n            const zeitStr = `${dateStr}, von ${fmt(entryTime)} bis ${fmt(exitTime)} Uhr`;\n\n            const totalHours = (exitTime - entryTime) \/ 60;\n            const isWeekend = dayOfWeek === 5 || dayOfWeek === 6 || dayOfWeek === 0;\n            const isPlatinumOrDiamond = roomSize === 'Platinum' || roomSize === 'Diamond';\n            const durationOverThreeHours = totalHours >= 3;\n            const requiresAnzahlung = isWeekend || isHoliday || isPlatinumOrDiamond || durationOverThreeHours;\n\n            let anzahlung = 0;\n            if (requiresAnzahlung) {\n                if (totalHours <= 3) {\n                    anzahlung = getHighestHourlyRate(roomSize, dayOfWeek, isHoliday, exitTime - 60, exitTime);\n                } else {\n                    anzahlung = calculateTwoHourlyRates(roomSize, dayOfWeek, isHoliday, exitTime - 120, exitTime);\n                }\n            }\n\n            const hasMindestverzehr = requiresAnzahlung;\n            const mindestverzehr = hasMindestverzehr ? total * 0.5 : 0;\n            const gesamtMin = total + mindestverzehr;\n\n            setRowValue('#resultName', nameExtra);\n            setRowValue('#resultRoomSize', roomSize);\n            setRowValue('#resultPersonen', personenAnzahlExtra);\n            setRowValue('#resultZeit', zeitStr);\n            setRowValue('#resultHandy', handyExtra);\n            setRowValue('#resultAnlass', anlassExtra);\n\n            const raummieteText = isHoliday ? `${formatEuro(total)} (Feiertagspreis)` : formatEuro(total);\n            setRowValue('#resultRaummiete', raummieteText);\n\n            setRowValue('#resultAnzahlung', requiresAnzahlung ? formatDeposit(anzahlung) : 'Keine Anzahlung n\u00f6tig');\n\n            const depositDeadline = calculateDepositDeadline(date);\n            setRowValue('#resultAnzahlungFrist', depositDeadline);\n\n            setRowValue('#resultMindestverzehr', hasMindestverzehr && mindestverzehr > 0 ? formatEuro(mindestverzehr) : '');\n            setRowValue('#resultGesamtMin', formatEuro(gesamtMin));\n        }\n\n        function copyRichToClipboard({ plain, html, button, successClass }) {\n            const doFb = () => {\n                if (button) {\n                    const originalText = button.textContent;\n                    const originalClasses = button.className;\n                    button.textContent = 'Kopiert!';\n                    button.className = successClass || 'btn btn-sm btn-success';\n                    button.disabled = true;\n                    setTimeout(() => {\n                        button.textContent = originalText;\n                        button.className = originalClasses;\n                        button.disabled = false;\n                    }, 3000);\n                }\n            };\n\n            const fallback = () => {\n                const temp = document.createElement('div');\n                temp.setAttribute('contenteditable', 'true');\n                temp.style.position = 'fixed';\n                temp.style.left = '-9999px';\n                temp.innerHTML = html;\n                document.body.appendChild(temp);\n                const range = document.createRange();\n                range.selectNodeContents(temp);\n                const sel = window.getSelection();\n                sel.removeAllRanges();\n                sel.addRange(range);\n                try {\n                    document.execCommand('copy');\n                } catch (e) {\n                    \/* ignore *\/\n                }\n                document.body.removeChild(temp);\n                sel.removeAllRanges();\n                doFb();\n            };\n\n            const canClipboardItem =\n                typeof ClipboardItem !== 'undefined' && navigator.clipboard && navigator.clipboard.write;\n            if (canClipboardItem) {\n                const data = {\n                    'text\/html': new Blob([html], { type: 'text\/html' }),\n                    'text\/plain': new Blob([plain], { type: 'text\/plain' })\n                };\n                navigator.clipboard.write([new ClipboardItem(data)]).then(doFb).catch(fallback);\n            } else if (navigator.clipboard && navigator.clipboard.writeText) {\n                navigator.clipboard.writeText(plain).then(doFb).catch(fallback);\n            } else {\n                fallback();\n            }\n        }\n\n        document.addEventListener('DOMContentLoaded', function () {\n            populateTimeOptions();\n\n            const datePickerEl = document.getElementById('datePicker');\n            const roomSizeEl = document.getElementById('roomSize');\n            const entryEl = document.getElementById('entryTime');\n            const exitEl = document.getElementById('exitTime');\n            const timeError = document.getElementById('timeError');\n            const hintMissing = document.getElementById('hintMissing');\n\n            const maybeCalc = () => {\n                const hasDate = !!datePickerEl.value;\n                const hasEntry = !!entryEl.value;\n                const hasExit = !!exitEl.value;\n                if (!hasDate || !hasEntry || !hasExit) {\n                    if (hintMissing) hintMissing.classList.remove('d-none');\n                } else if (hintMissing) {\n                    hintMissing.classList.add('d-none');\n                }\n\n                if (hasDate && hasEntry && hasExit) {\n                    const entryVal = parseInt(entryEl.value, 10);\n                    const exitVal = parseInt(exitEl.value, 10);\n                    let invalid = false;\n                    if (exitVal <= entryVal) {\n                        \/\/ Austritt ab 00:00 Folgetag im Raster (Minute-Wert >= 24h): g\u00fcltig\n                        const austrittFolgetagAbMitternacht = exitVal >= 24 * 60;\n                        \/\/ Sp\u00e4ter Abendeintritt, fr\u00fcher Morgenaustritt am n\u00e4chsten Kalendertag (z. B. 22:00 \u2192 09:00)\n                        const ueberNachtTypisch =\n                            exitVal < 12 * 60 && entryVal >= 12 * 60;\n                        if (!austrittFolgetagAbMitternacht && !ueberNachtTypisch && exitVal < 24 * 60) {\n                            invalid = true;\n                        }\n                    }\n                    if (timeError) timeError.classList.toggle('d-none', !invalid);\n                    if (!invalid) calculatePricing();\n                }\n            };\n\n            datePickerEl.addEventListener('change', maybeCalc);\n            roomSizeEl.addEventListener('change', maybeCalc);\n            entryEl.addEventListener('change', maybeCalc);\n            exitEl.addEventListener('change', maybeCalc);\n\n            const holidayCheckbox = document.getElementById('holidayCheckbox');\n            const holidayLabel = document.getElementById('holidayLabel');\n            if (holidayCheckbox) {\n                holidayCheckbox.addEventListener('change', function () {\n                    if (holidayLabel) {\n                        holidayLabel.style.fontWeight = this.checked ? 'bold' : 'normal';\n                    }\n                    maybeCalc();\n                });\n            }\n\n            const quickInput = document.getElementById('quickEntryInput');\n            if (quickInput) {\n                let debounceTimer = null;\n                const handler = () => {\n                    if (debounceTimer) clearTimeout(debounceTimer);\n                    debounceTimer = setTimeout(() => applyQuickEntry(true), 300);\n                };\n                quickInput.addEventListener('input', handler);\n                quickInput.addEventListener('change', handler);\n                quickInput.addEventListener('paste', handler);\n            }\n\n            const copyBtn = document.getElementById('copyResultBtn');\n            if (copyBtn) {\n                copyBtn.addEventListener('click', function () {\n                    const ps = Array.from(document.querySelectorAll('#result p')).filter((p) => {\n                        if (p.classList.contains('d-none')) return false;\n                        const strong = p.querySelector('strong');\n                        if (strong && strong.textContent.trim() === '') return false;\n                        return true;\n                    });\n\n                    const getVisibleText = (element) => {\n                        let text = '';\n                        element.childNodes.forEach((node) => {\n                            if (node.nodeType === Node.TEXT_NODE) {\n                                text += node.textContent;\n                            } else if (node.nodeType === Node.ELEMENT_NODE) {\n                                if (!node.classList.contains('d-none')) {\n                                    text += getVisibleText(node);\n                                }\n                            }\n                        });\n                        return text;\n                    };\n\n                    const textToCopy = ps.map((p) => getVisibleText(p).trim()).join('\\n');\n                    const htmlLines = ps.map((p) => {\n                        const clone = p.cloneNode(true);\n                        clone.querySelectorAll('.d-none').forEach((el) => el.remove());\n                        const gmailHtml = clone.innerHTML.replace(\/<strong>\/g, '<b>').replace(\/<\\\/strong>\/g, '<\/b>');\n                        return `<div style=\"margin: 0; padding: 0; line-height: 1.3; font-family: Arial, sans-serif;\">${gmailHtml}<\/div>`;\n                    });\n                    copyRichToClipboard({\n                        plain: textToCopy,\n                        html: htmlLines.join(''),\n                        button: copyBtn,\n                        successClass: 'btn btn-sm btn-success mb-2'\n                    });\n                });\n            }\n\n            const copyDepositBtn = document.getElementById('copyDepositBtn');\n            if (copyDepositBtn) {\n                copyDepositBtn.addEventListener('click', function () {\n                    const depositAmountElement = document.querySelector('#resultAnzahlung strong');\n                    const depositAmount = depositAmountElement ? depositAmountElement.textContent.trim() : '';\n                    const htmlToCopy = `<div style=\"margin: 0; padding: 0; line-height: 1.3; font-family: Arial, sans-serif; font-size: 18px; font-weight: bold; text-align: center;\">${depositAmount}<\/div>`;\n                    copyRichToClipboard({\n                        plain: depositAmount,\n                        html: htmlToCopy,\n                        button: copyDepositBtn,\n                        successClass: 'btn btn-sm btn-success'\n                    });\n                });\n            }\n\n            const copyDeadlineBtn = document.getElementById('copyDeadlineBtn');\n            if (copyDeadlineBtn) {\n                copyDeadlineBtn.addEventListener('click', function () {\n                    const depositDeadlineElement = document.querySelector('#resultAnzahlungFrist strong');\n                    const depositDeadline = depositDeadlineElement ? depositDeadlineElement.textContent.trim() : '';\n                    const htmlToCopy = `<div style=\"margin: 0; padding: 0; line-height: 1.3; font-family: Arial, sans-serif; font-size: 18px; font-weight: bold; color: #000000;\">${depositDeadline}<\/div>`;\n                    copyRichToClipboard({\n                        plain: depositDeadline,\n                        html: htmlToCopy,\n                        button: copyDeadlineBtn,\n                        successClass: 'btn btn-sm btn-success'\n                    });\n                });\n            }\n\n            const today = new Date();\n            const maxDate = new Date();\n            maxDate.setDate(today.getDate() + 365);\n\n            let dd = String(today.getDate()).padStart(2, '0');\n            let mm = String(today.getMonth() + 1).padStart(2, '0');\n            let yyyy = today.getFullYear();\n            const minDateStr = `${yyyy}-${mm}-${dd}`;\n\n            dd = String(maxDate.getDate()).padStart(2, '0');\n            mm = String(maxDate.getMonth() + 1).padStart(2, '0');\n            yyyy = maxDate.getFullYear();\n            const maxDateStr = `${yyyy}-${mm}-${dd}`;\n\n            document.getElementById('datePicker').setAttribute('min', minDateStr);\n            document.getElementById('datePicker').setAttribute('max', maxDateStr);\n\n            const resetLink = document.getElementById('resetFormLink');\n            if (resetLink) {\n                resetLink.addEventListener('click', function (e) {\n                    e.preventDefault();\n                    document.getElementById('priceCalculationForm').reset();\n                    const entrySelect = document.getElementById('entryTime');\n                    const exitSelect = document.getElementById('exitTime');\n                    entrySelect.innerHTML = '';\n                    exitSelect.innerHTML = '';\n                    entrySelect.disabled = true;\n                    exitSelect.disabled = true;\n                    const hc = document.getElementById('holidayCheckbox');\n                    const hl = document.getElementById('holidayLabel');\n                    if (hc) hc.checked = false;\n                    if (hl) hl.style.fontWeight = 'normal';\n                    const timeErrorEl = document.getElementById('timeError');\n                    if (timeErrorEl) timeErrorEl.classList.add('d-none');\n                    const hintEl = document.getElementById('hintMissing');\n                    if (hintEl) hintEl.classList.add('d-none');\n                    const resultEl = document.getElementById('result');\n                    if (resultEl) resultEl.classList.add('d-none');\n                    const depositEl = document.getElementById('depositResult');\n                    if (depositEl) depositEl.classList.add('d-none');\n                    const depositDeadlineEl = document.getElementById('depositDeadlineResult');\n                    if (depositDeadlineEl) depositDeadlineEl.classList.add('d-none');\n                });\n            }\n        });\n    <\/script>\n<\/body>\n<\/html><\/div><\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-5663","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/melodypartybox.de\/myzeil\/wp-json\/wp\/v2\/pages\/5663","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/melodypartybox.de\/myzeil\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/melodypartybox.de\/myzeil\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/melodypartybox.de\/myzeil\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/melodypartybox.de\/myzeil\/wp-json\/wp\/v2\/comments?post=5663"}],"version-history":[{"count":7,"href":"https:\/\/melodypartybox.de\/myzeil\/wp-json\/wp\/v2\/pages\/5663\/revisions"}],"predecessor-version":[{"id":5936,"href":"https:\/\/melodypartybox.de\/myzeil\/wp-json\/wp\/v2\/pages\/5663\/revisions\/5936"}],"wp:attachment":[{"href":"https:\/\/melodypartybox.de\/myzeil\/wp-json\/wp\/v2\/media?parent=5663"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}