{"id":1394,"date":"2025-12-28T14:35:35","date_gmt":"2025-12-28T05:35:35","guid":{"rendered":"https:\/\/huongvietjp.com\/?page_id=1394"},"modified":"2025-12-28T14:35:35","modified_gmt":"2025-12-28T05:35:35","slug":"tinh-gio","status":"publish","type":"page","link":"https:\/\/banhangnhat.com\/vi\/tinh-gio\/","title":{"rendered":"Tinh Gi\u1edd Ph\u00f2ng Karaoke v\u00e0 Bida"},"content":{"rendered":"    <style>\n        .kmp-pro-timer-wrapper {\n            max-width: 1200px;\n            margin: 0 auto;\n            padding: 8px;\n            box-sizing: border-box;\n        }\n        .kmp-pro-tv-toggle {\n            margin-top: 4px;\n            padding: 6px 12px;\n            font-size: 13px;\n            border-radius: 4px;\n            border: none;\n            background-color: #e67e22;\n            color: #ffffff;\n            cursor: pointer;\n        }\n        .kmp-pro-tv-toggle:hover {\n            background-color: #d35400;\n        }\n        .kmp-pro-timer-wrapper.kmp-pro-tv-mode {\n            max-width: 100%;\n            padding: 4px;\n            background: #000000;\n            color: #ffffff;\n        }\n        .kmp-pro-timer-wrapper.kmp-pro-tv-mode .kmp-pro-room-card {\n            flex: 1 1 320px;\n            min-width: 320px;\n            background: rgba(0,0,0,0.8);\n            color: #ffffff;\n        }\n        .kmp-pro-timer-wrapper.kmp-pro-tv-mode select,\n        .kmp-pro-timer-wrapper.kmp-pro-tv-mode input[type=\"text\"],\n        .kmp-pro-timer-wrapper.kmp-pro-tv-mode input[type=\"number\"],\n        .kmp-pro-timer-wrapper.kmp-pro-tv-mode input[type=\"tel\"],\n        .kmp-pro-timer-wrapper.kmp-pro-tv-mode input[type=\"time\"],\n        .kmp-pro-timer-wrapper.kmp-pro-tv-mode textarea {\n            background-color: #111111;\n            color: #ffffff;\n            border-color: #555555;\n        }\n        .kmp-pro-timer-wrapper.kmp-pro-tv-mode select option {\n            background-color: #000000;\n            color: #ffffff;\n        }\n        .kmp-pro-timer-wrapper.kmp-pro-tv-mode .select2-container--default .select2-selection--single {\n            background-color: #111111;\n            color: #ffffff;\n            border-color: #555555;\n        }\n        .kmp-pro-timer-wrapper.kmp-pro-tv-mode .select2-container--default .select2-selection--single .select2-selection__rendered {\n            color: #ffffff;\n        }\n        .kmp-pro-timer-wrapper.kmp-pro-tv-mode .select2-container--default .select2-selection--single .select2-selection__arrow b {\n            border-top-color: #ffffff;\n        }\n\n        .kmp-pro-timer-wrapper.kmp-pro-tv-mode .kmp-pro-room-header {\n            font-size: 18px;\n        }\n        .kmp-pro-room-card.kmp-pro-running {\n            border: 2px solid #27ae60;\n            box-shadow: 0 0 12px rgba(39, 174, 96, 0.7);\n        }\n        .kmp-pro-timer-title {\n            text-align: center;\n            margin-bottom: 10px;\n        }\n        .kmp-pro-timer-grid {\n            display: flex;\n            flex-wrap: wrap;\n            gap: 8px;\n        }\n        .kmp-pro-room-card {\n            flex: 1 1 260px;\n            min-width: 260px;\n            background: #ffffff;\n            border-radius: 10px;\n            box-shadow: 0 2px 6px rgba(0,0,0,0.08);\n            padding: 10px;\n            box-sizing: border-box;\n        }\n        .kmp-pro-room-header {\n            font-weight: 600;\n            margin-bottom: 6px;\n            font-size: 16px;\n        }\n        .kmp-pro-row {\n            margin-bottom: 6px;\n            font-size: 14px;\n        }\n        .kmp-pro-row label {\n            display: block;\n            margin-bottom: 2px;\n        }\n        .kmp-pro-row select,\n        .kmp-pro-row input[type=\"number\"] {\n            width: 100%;\n            padding: 4px 6px;\n            font-size: 14px;\n        }\n        .kmp-pro-buttons {\n            display: flex;\n            gap: 6px;\n            margin: 6px 0;\n        }\n        .kmp-pro-btn-start,\n        .kmp-pro-btn-stop {\n            flex: 1 1 0;\n            padding: 8px 4px;\n            border-radius: 6px;\n            border: none;\n            font-size: 15px;\n            font-weight: 600;\n            color: #ffffff;\n            cursor: pointer;\n        }\n        .kmp-pro-btn-start {\n            background-color: #009944; \/* xanh *\/\n        }\n        .kmp-pro-btn-stop {\n            background-color: #cc0000; \/* \u0111\u1ecf *\/\n        }\n        .kmp-pro-info {\n            font-size: 13px;\n            line-height: 1.4;\n        }\n        .kmp-pro-info-row {\n            margin-bottom: 2px;\n        }\n        .kmp-pro-amount {\n            font-size: 16px;\n            font-weight: 700;\n            color: #d35400;\n        }\n        .kmp-pro-bill-area {\n            margin-top: 10px;\n            border-top: 1px dashed #ddd;\n            padding-top: 8px;\n            display: none;\n            font-size: 12px;\n        }\n        .kmp-pro-bill-detail table {\n            width: 100%;\n            border-collapse: collapse;\n            margin-top: 4px;\n        }\n        .kmp-pro-bill-detail th,\n        .kmp-pro-bill-detail td {\n            border: 1px solid #ddd;\n            padding: 3px 4px;\n            text-align: left;\n        }\n        .kmp-pro-bill-actions {\n            margin-top: 6px;\n            display: flex;\n            flex-wrap: wrap;\n            gap: 8px;\n        }\n        .kmp-pro-bill-actions button {\n            padding: 6px 10px;\n            font-size: 13px;\n            border-radius: 4px;\n            border: none;\n            cursor: pointer;\n        }\n        .kmp-pro-btn-print {\n            background-color: #2c3e50;\n            color: #ffffff;\n        }\n        .kmp-pro-btn-email {\n            background-color: #2980b9;\n            color: #ffffff;\n        }\n\n        @media (max-width: 600px) {\n            .kmp-pro-room-card {\n                flex: 1 1 100%;\n            }\n        }\n    <\/style>\n    <div class=\"kmp-pro-timer-wrapper\">\n        <div class=\"kmp-pro-timer-title\">\n            <h2>Nh\u00e0 H\u00e0ng H\u01b0\u01a1ng Vi\u1ec7t \u2013 T\u00ednh Gi\u1edd Karaoke<\/h2>\n            <p style=\"margin:4px 0;font-size:13px;\">Giao di\u1ec7n t\u1ed1i \u01b0u cho \u0111i\u1ec7n tho\u1ea1i v\u00e0 m\u00e1y t\u00ednh b\u1ea3ng.<\/p>\n            <button type=\"button\" class=\"kmp-pro-tv-toggle\">TV MODE<\/button>\n        <\/div>\n        <div class=\"kmp-pro-timer-grid\">\n                            <div class=\"kmp-pro-room-card\" data-room-id=\"1\">\n                    <div class=\"kmp-pro-room-header\">\n                        Ph\u00f2ng VIP 1~10 kh\u00e1ch                    <\/div>\n\n                    <div class=\"kmp-pro-row\">\n                        <label>Kh\u00e1ch \u0111\u1eb7t tr\u01b0\u1edbc hay ch\u01b0a?<\/label>\n                        <select class=\"kmp-pro-reserved\">\n                            <option value=\"no\">KH\u00d4NG<\/option>\n                            <option value=\"yes\">C\u00d3<\/option>\n                        <\/select>\n                    <\/div>\n\n                    <div class=\"kmp-pro-row kmp-pro-reservation-row\" style=\"display:none;\">\n                        <label>Ch\u1ecdn l\u1ecbch \u0111\u1eb7t (v\u1edbi kh\u00e1ch \u0111\u1eb7t tr\u01b0\u1edbc)<\/label>\n                        <select class=\"kmp-pro-reservation-select\">\n                            <option value=\"\">(Ch\u01b0a k\u1ebft n\u1ed1i l\u1ecbch \u0111\u1eb7t \u2013 s\u1ebd n\u00e2ng c\u1ea5p sau)<\/option>\n                        <\/select>\n                    <\/div>\n\n                    <div class=\"kmp-pro-row\">\n                        <label>Ch\u1ecdn s\u1ed1 kh\u00e1ch<\/label>\n                        <input type=\"number\" class=\"kmp-pro-guest\" min=\"1\" max=\"30\" value=\"2\" \/>\n                    <\/div>\n\n                    <div class=\"kmp-pro-buttons\">\n                        <button type=\"button\" class=\"kmp-pro-btn-start\">B\u1eaft \u0110\u1ea7u T\u00ednh Gi\u1edd<\/button>\n                        <button type=\"button\" class=\"kmp-pro-btn-stop\" disabled>K\u1ebft Th\u00fac T\u00ednh Gi\u1edd<\/button>\n                    <\/div>\n\n                    <div class=\"kmp-pro-info\">\n                        <div class=\"kmp-pro-info-row kmp-pro-people-text\">S\u1ed1 kh\u00e1ch: \u2014<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-start-text\">Gi\u1edd b\u1eaft \u0111\u1ea7u: \u2014<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-end-text\">Gi\u1edd k\u1ebft th\u00fac: \u2014<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-duration-text\">Th\u1eddi l\u01b0\u1ee3ng: \u2014<\/div>\n                        <div class=\"kmp-pro-info-row\">Ti\u1ec1n t\u1ea1m t\u00ednh \u0111\u1ebfn th\u1eddi \u0111i\u1ec3m hi\u1ec7n t\u1ea1i:<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-amount\">0 \u00a5<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-note\" style=\"color:#666;\">Gi\u00e1 \u0111\u01b0\u1ee3c t\u00ednh theo b\u1ea3ng gi\u00e1 theo gi\u1edd, c\u1eadp nh\u1eadt t\u1ef1 \u0111\u1ed9ng.<\/div>\n                    <\/div>\n                    <div class=\"kmp-pro-bill-area\">\n                        <div class=\"kmp-pro-bill-detail\"><\/div>\n                        <div class=\"kmp-pro-bill-actions\">\n                            <button type=\"button\" class=\"kmp-pro-btn-print\">IN BILL<\/button>\n                            <button type=\"button\" class=\"kmp-pro-btn-email\">G\u1eecI EMAIL<\/button>\n                        <\/div>\n                    <\/div>\n                <\/div>\n                            <div class=\"kmp-pro-room-card\" data-room-id=\"2\">\n                    <div class=\"kmp-pro-room-header\">\n                        Ph\u00f2nfg VIP MAX 1~30 kh\u00e1ch                    <\/div>\n\n                    <div class=\"kmp-pro-row\">\n                        <label>Kh\u00e1ch \u0111\u1eb7t tr\u01b0\u1edbc hay ch\u01b0a?<\/label>\n                        <select class=\"kmp-pro-reserved\">\n                            <option value=\"no\">KH\u00d4NG<\/option>\n                            <option value=\"yes\">C\u00d3<\/option>\n                        <\/select>\n                    <\/div>\n\n                    <div class=\"kmp-pro-row kmp-pro-reservation-row\" style=\"display:none;\">\n                        <label>Ch\u1ecdn l\u1ecbch \u0111\u1eb7t (v\u1edbi kh\u00e1ch \u0111\u1eb7t tr\u01b0\u1edbc)<\/label>\n                        <select class=\"kmp-pro-reservation-select\">\n                            <option value=\"\">(Ch\u01b0a k\u1ebft n\u1ed1i l\u1ecbch \u0111\u1eb7t \u2013 s\u1ebd n\u00e2ng c\u1ea5p sau)<\/option>\n                        <\/select>\n                    <\/div>\n\n                    <div class=\"kmp-pro-row\">\n                        <label>Ch\u1ecdn s\u1ed1 kh\u00e1ch<\/label>\n                        <input type=\"number\" class=\"kmp-pro-guest\" min=\"1\" max=\"30\" value=\"2\" \/>\n                    <\/div>\n\n                    <div class=\"kmp-pro-buttons\">\n                        <button type=\"button\" class=\"kmp-pro-btn-start\">B\u1eaft \u0110\u1ea7u T\u00ednh Gi\u1edd<\/button>\n                        <button type=\"button\" class=\"kmp-pro-btn-stop\" disabled>K\u1ebft Th\u00fac T\u00ednh Gi\u1edd<\/button>\n                    <\/div>\n\n                    <div class=\"kmp-pro-info\">\n                        <div class=\"kmp-pro-info-row kmp-pro-people-text\">S\u1ed1 kh\u00e1ch: \u2014<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-start-text\">Gi\u1edd b\u1eaft \u0111\u1ea7u: \u2014<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-end-text\">Gi\u1edd k\u1ebft th\u00fac: \u2014<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-duration-text\">Th\u1eddi l\u01b0\u1ee3ng: \u2014<\/div>\n                        <div class=\"kmp-pro-info-row\">Ti\u1ec1n t\u1ea1m t\u00ednh \u0111\u1ebfn th\u1eddi \u0111i\u1ec3m hi\u1ec7n t\u1ea1i:<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-amount\">0 \u00a5<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-note\" style=\"color:#666;\">Gi\u00e1 \u0111\u01b0\u1ee3c t\u00ednh theo b\u1ea3ng gi\u00e1 theo gi\u1edd, c\u1eadp nh\u1eadt t\u1ef1 \u0111\u1ed9ng.<\/div>\n                    <\/div>\n                    <div class=\"kmp-pro-bill-area\">\n                        <div class=\"kmp-pro-bill-detail\"><\/div>\n                        <div class=\"kmp-pro-bill-actions\">\n                            <button type=\"button\" class=\"kmp-pro-btn-print\">IN BILL<\/button>\n                            <button type=\"button\" class=\"kmp-pro-btn-email\">G\u1eecI EMAIL<\/button>\n                        <\/div>\n                    <\/div>\n                <\/div>\n                            <div class=\"kmp-pro-room-card\" data-room-id=\"3\">\n                    <div class=\"kmp-pro-room-header\">\n                        B\u00e0n BIDA th\u01b0\u1eddng                    <\/div>\n\n                    <div class=\"kmp-pro-row\">\n                        <label>Kh\u00e1ch \u0111\u1eb7t tr\u01b0\u1edbc hay ch\u01b0a?<\/label>\n                        <select class=\"kmp-pro-reserved\">\n                            <option value=\"no\">KH\u00d4NG<\/option>\n                            <option value=\"yes\">C\u00d3<\/option>\n                        <\/select>\n                    <\/div>\n\n                    <div class=\"kmp-pro-row kmp-pro-reservation-row\" style=\"display:none;\">\n                        <label>Ch\u1ecdn l\u1ecbch \u0111\u1eb7t (v\u1edbi kh\u00e1ch \u0111\u1eb7t tr\u01b0\u1edbc)<\/label>\n                        <select class=\"kmp-pro-reservation-select\">\n                            <option value=\"\">(Ch\u01b0a k\u1ebft n\u1ed1i l\u1ecbch \u0111\u1eb7t \u2013 s\u1ebd n\u00e2ng c\u1ea5p sau)<\/option>\n                        <\/select>\n                    <\/div>\n\n                    <div class=\"kmp-pro-row\">\n                        <label>Ch\u1ecdn s\u1ed1 kh\u00e1ch<\/label>\n                        <input type=\"number\" class=\"kmp-pro-guest\" min=\"1\" max=\"30\" value=\"2\" \/>\n                    <\/div>\n\n                    <div class=\"kmp-pro-buttons\">\n                        <button type=\"button\" class=\"kmp-pro-btn-start\">B\u1eaft \u0110\u1ea7u T\u00ednh Gi\u1edd<\/button>\n                        <button type=\"button\" class=\"kmp-pro-btn-stop\" disabled>K\u1ebft Th\u00fac T\u00ednh Gi\u1edd<\/button>\n                    <\/div>\n\n                    <div class=\"kmp-pro-info\">\n                        <div class=\"kmp-pro-info-row kmp-pro-people-text\">S\u1ed1 kh\u00e1ch: \u2014<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-start-text\">Gi\u1edd b\u1eaft \u0111\u1ea7u: \u2014<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-end-text\">Gi\u1edd k\u1ebft th\u00fac: \u2014<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-duration-text\">Th\u1eddi l\u01b0\u1ee3ng: \u2014<\/div>\n                        <div class=\"kmp-pro-info-row\">Ti\u1ec1n t\u1ea1m t\u00ednh \u0111\u1ebfn th\u1eddi \u0111i\u1ec3m hi\u1ec7n t\u1ea1i:<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-amount\">0 \u00a5<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-note\" style=\"color:#666;\">Gi\u00e1 \u0111\u01b0\u1ee3c t\u00ednh theo b\u1ea3ng gi\u00e1 theo gi\u1edd, c\u1eadp nh\u1eadt t\u1ef1 \u0111\u1ed9ng.<\/div>\n                    <\/div>\n                    <div class=\"kmp-pro-bill-area\">\n                        <div class=\"kmp-pro-bill-detail\"><\/div>\n                        <div class=\"kmp-pro-bill-actions\">\n                            <button type=\"button\" class=\"kmp-pro-btn-print\">IN BILL<\/button>\n                            <button type=\"button\" class=\"kmp-pro-btn-email\">G\u1eecI EMAIL<\/button>\n                        <\/div>\n                    <\/div>\n                <\/div>\n                            <div class=\"kmp-pro-room-card\" data-room-id=\"4\">\n                    <div class=\"kmp-pro-room-header\">\n                        B\u00e0n BIDA VIP                    <\/div>\n\n                    <div class=\"kmp-pro-row\">\n                        <label>Kh\u00e1ch \u0111\u1eb7t tr\u01b0\u1edbc hay ch\u01b0a?<\/label>\n                        <select class=\"kmp-pro-reserved\">\n                            <option value=\"no\">KH\u00d4NG<\/option>\n                            <option value=\"yes\">C\u00d3<\/option>\n                        <\/select>\n                    <\/div>\n\n                    <div class=\"kmp-pro-row kmp-pro-reservation-row\" style=\"display:none;\">\n                        <label>Ch\u1ecdn l\u1ecbch \u0111\u1eb7t (v\u1edbi kh\u00e1ch \u0111\u1eb7t tr\u01b0\u1edbc)<\/label>\n                        <select class=\"kmp-pro-reservation-select\">\n                            <option value=\"\">(Ch\u01b0a k\u1ebft n\u1ed1i l\u1ecbch \u0111\u1eb7t \u2013 s\u1ebd n\u00e2ng c\u1ea5p sau)<\/option>\n                        <\/select>\n                    <\/div>\n\n                    <div class=\"kmp-pro-row\">\n                        <label>Ch\u1ecdn s\u1ed1 kh\u00e1ch<\/label>\n                        <input type=\"number\" class=\"kmp-pro-guest\" min=\"1\" max=\"30\" value=\"2\" \/>\n                    <\/div>\n\n                    <div class=\"kmp-pro-buttons\">\n                        <button type=\"button\" class=\"kmp-pro-btn-start\">B\u1eaft \u0110\u1ea7u T\u00ednh Gi\u1edd<\/button>\n                        <button type=\"button\" class=\"kmp-pro-btn-stop\" disabled>K\u1ebft Th\u00fac T\u00ednh Gi\u1edd<\/button>\n                    <\/div>\n\n                    <div class=\"kmp-pro-info\">\n                        <div class=\"kmp-pro-info-row kmp-pro-people-text\">S\u1ed1 kh\u00e1ch: \u2014<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-start-text\">Gi\u1edd b\u1eaft \u0111\u1ea7u: \u2014<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-end-text\">Gi\u1edd k\u1ebft th\u00fac: \u2014<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-duration-text\">Th\u1eddi l\u01b0\u1ee3ng: \u2014<\/div>\n                        <div class=\"kmp-pro-info-row\">Ti\u1ec1n t\u1ea1m t\u00ednh \u0111\u1ebfn th\u1eddi \u0111i\u1ec3m hi\u1ec7n t\u1ea1i:<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-amount\">0 \u00a5<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-note\" style=\"color:#666;\">Gi\u00e1 \u0111\u01b0\u1ee3c t\u00ednh theo b\u1ea3ng gi\u00e1 theo gi\u1edd, c\u1eadp nh\u1eadt t\u1ef1 \u0111\u1ed9ng.<\/div>\n                    <\/div>\n                    <div class=\"kmp-pro-bill-area\">\n                        <div class=\"kmp-pro-bill-detail\"><\/div>\n                        <div class=\"kmp-pro-bill-actions\">\n                            <button type=\"button\" class=\"kmp-pro-btn-print\">IN BILL<\/button>\n                            <button type=\"button\" class=\"kmp-pro-btn-email\">G\u1eecI EMAIL<\/button>\n                        <\/div>\n                    <\/div>\n                <\/div>\n                            <div class=\"kmp-pro-room-card\" data-room-id=\"5\">\n                    <div class=\"kmp-pro-room-header\">\n                        T\u1ea6NG 4                    <\/div>\n\n                    <div class=\"kmp-pro-row\">\n                        <label>Kh\u00e1ch \u0111\u1eb7t tr\u01b0\u1edbc hay ch\u01b0a?<\/label>\n                        <select class=\"kmp-pro-reserved\">\n                            <option value=\"no\">KH\u00d4NG<\/option>\n                            <option value=\"yes\">C\u00d3<\/option>\n                        <\/select>\n                    <\/div>\n\n                    <div class=\"kmp-pro-row kmp-pro-reservation-row\" style=\"display:none;\">\n                        <label>Ch\u1ecdn l\u1ecbch \u0111\u1eb7t (v\u1edbi kh\u00e1ch \u0111\u1eb7t tr\u01b0\u1edbc)<\/label>\n                        <select class=\"kmp-pro-reservation-select\">\n                            <option value=\"\">(Ch\u01b0a k\u1ebft n\u1ed1i l\u1ecbch \u0111\u1eb7t \u2013 s\u1ebd n\u00e2ng c\u1ea5p sau)<\/option>\n                        <\/select>\n                    <\/div>\n\n                    <div class=\"kmp-pro-row\">\n                        <label>Ch\u1ecdn s\u1ed1 kh\u00e1ch<\/label>\n                        <input type=\"number\" class=\"kmp-pro-guest\" min=\"1\" max=\"30\" value=\"2\" \/>\n                    <\/div>\n\n                    <div class=\"kmp-pro-buttons\">\n                        <button type=\"button\" class=\"kmp-pro-btn-start\">B\u1eaft \u0110\u1ea7u T\u00ednh Gi\u1edd<\/button>\n                        <button type=\"button\" class=\"kmp-pro-btn-stop\" disabled>K\u1ebft Th\u00fac T\u00ednh Gi\u1edd<\/button>\n                    <\/div>\n\n                    <div class=\"kmp-pro-info\">\n                        <div class=\"kmp-pro-info-row kmp-pro-people-text\">S\u1ed1 kh\u00e1ch: \u2014<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-start-text\">Gi\u1edd b\u1eaft \u0111\u1ea7u: \u2014<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-end-text\">Gi\u1edd k\u1ebft th\u00fac: \u2014<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-duration-text\">Th\u1eddi l\u01b0\u1ee3ng: \u2014<\/div>\n                        <div class=\"kmp-pro-info-row\">Ti\u1ec1n t\u1ea1m t\u00ednh \u0111\u1ebfn th\u1eddi \u0111i\u1ec3m hi\u1ec7n t\u1ea1i:<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-amount\">0 \u00a5<\/div>\n                        <div class=\"kmp-pro-info-row kmp-pro-note\" style=\"color:#666;\">Gi\u00e1 \u0111\u01b0\u1ee3c t\u00ednh theo b\u1ea3ng gi\u00e1 theo gi\u1edd, c\u1eadp nh\u1eadt t\u1ef1 \u0111\u1ed9ng.<\/div>\n                    <\/div>\n                    <div class=\"kmp-pro-bill-area\">\n                        <div class=\"kmp-pro-bill-detail\"><\/div>\n                        <div class=\"kmp-pro-bill-actions\">\n                            <button type=\"button\" class=\"kmp-pro-btn-print\">IN BILL<\/button>\n                            <button type=\"button\" class=\"kmp-pro-btn-email\">G\u1eecI EMAIL<\/button>\n                        <\/div>\n                    <\/div>\n                <\/div>\n                    <\/div>\n    <\/div>\n    <script>\n    (function(){\n        const ajaxUrl = \"https:\\\/\\\/banhangnhat.com\\\/wp-admin\\\/admin-ajax.php\";\n        const tzOffsetMinutes = 540;\n        const bookingsApiUrl = \"https:\\\/\\\/banhangnhat.com\\\/vi\\\/wp-json\\\/kmp\\\/v1\\\/bookings\";\n\n        function getBlogNow() {\n            \/\/ Th\u1eddi gian hi\u1ec7n t\u1ea1i theo m\u00fai gi\u1edd website (WordPress)\n            const now = new Date();\n            const utcMs = now.getTime() + now.getTimezoneOffset() * 60000;\n            const blogMs = utcMs + tzOffsetMinutes * 60000;\n            return new Date(blogMs);\n        }\n\n        function formatBlogDate(d) {\n            const y = d.getFullYear();\n            const m = ('0' + (d.getMonth()+1)).slice(-2);\n            const day = ('0' + d.getDate()).slice(-2);\n            return y + '-' + m + '-' + day;\n        }\n\n        function formatTime(d) {\n            const y = d.getFullYear();\n            const m = ('0' + (d.getMonth()+1)).slice(-2);\n            const day = ('0' + d.getDate()).slice(-2);\n            const h = ('0' + d.getHours()).slice(-2);\n            const min = ('0' + d.getMinutes()).slice(-2);\n            return y + '-' + m + '-' + day + ' ' + h + ':' + min;\n        }\n\n        function toBlogTimestamp(dateObj) {\n            \/\/ Chuy\u1ec3n Date (gi\u1edd m\u00e1y) -> timestamp theo m\u00fai gi\u1edd website (WordPress)\n            const utcSeconds = Math.floor(dateObj.getTime() \/ 1000);\n            return utcSeconds + tzOffsetMinutes * 60;\n        }\n\n        function fromBlogTimestamp(blogTs) {\n            \/\/ Chuy\u1ec3n timestamp theo m\u00fai gi\u1edd website -> Date (gi\u1edd m\u00e1y)\n            const utcSeconds = blogTs - tzOffsetMinutes * 60;\n            return new Date(utcSeconds * 1000);\n        }\n\n        function bindCard(card) {\n            const reservedSelect = card.querySelector('.kmp-pro-reserved');\n            const reservationRow = card.querySelector('.kmp-pro-reservation-row');\n            const guestInput     = card.querySelector('.kmp-pro-guest');\n            const btnStart       = card.querySelector('.kmp-pro-btn-start');\n            const btnStop        = card.querySelector('.kmp-pro-btn-stop');\n            const btnStartOriginalText = btnStart ? btnStart.textContent : '';\n            const startText      = card.querySelector('.kmp-pro-start-text');\n            const endText        = card.querySelector('.kmp-pro-end-text');\n            const durationText   = card.querySelector('.kmp-pro-duration-text');\n            const peopleText     = card.querySelector('.kmp-pro-people-text');\n            const amountText     = card.querySelector('.kmp-pro-amount');\n            const noteText       = card.querySelector('.kmp-pro-note');\n            const billArea       = card.querySelector('.kmp-pro-bill-area');\n            const billDetail     = card.querySelector('.kmp-pro-bill-detail');\n            const btnPrint       = card.querySelector('.kmp-pro-btn-print');\n            const btnEmail       = card.querySelector('.kmp-pro-btn-email');\n            const roomHeader     = card.querySelector('.kmp-pro-room-header');\n\n\n            const roomId = card.getAttribute('data-room-id');\n            let state = {\n                running: false,\n                start: null,\n                guestCount: null,\n                timerId: null,\n                lastBreakdown: []\n            };\n\n            \/\/ Danh s\u00e1ch booking trong ng\u00e0y cho \u0111\u00fang ph\u00f2ng n\u00e0y\n            let todaysBookings = [];\n\n            function buildRoomBookings(rows) {\n                todaysBookings = [];\n                if (!Array.isArray(rows)) return;\n\n                \/\/ Ch\u1ec9 l\u1ea5y c\u00e1c booking \u0111ang \"\u0111\u1ee3i s\u1eed d\u1ee5ng\" (status = booked) c\u1ee7a ph\u00f2ng n\u00e0y\n                const now = getBlogNow();\n                rows.forEach(function(row){\n                    if (!row) return;\n                    if (String(row.room_id) !== String(roomId)) return;\n\n                    const status = row.status || '';\n                    if (status !== 'booked') return;\n\n                    const sStr = row.start_time || '';\n                    const eStr = row.end_time || '';\n                    if (!sStr || !eStr) return;\n\n                    \/\/ Chu\u1ed7i 'YYYY-mm-dd HH:ii:ss' -> Date\n                    const s = new Date(sStr.replace(' ', 'T'));\n                    const e = new Date(eStr.replace(' ', 'T'));\n                    if (isNaN(s.getTime()) || isNaN(e.getTime())) return;\n\n                    \/\/ N\u1ebfu \u0111\u00e3 k\u1ebft th\u00fac (e <= now) th\u00ec b\u1ecf qua \u2013 ch\u1ec9 gi\u1eef l\u1ecbch ch\u01b0a s\u1eed d\u1ee5ng\n                    if (e <= now) return;\n\n                    todaysBookings.push({\n                        id: row.id,\n                        start: s,\n                        end: e,\n                        guest_count: row.guest_count || null,\n                        status: status\n                    });\n                });\n            }\n\n            function updateReservationSelect() {\n                if (!reservationRow) return;\n                const select = reservationRow.querySelector('.kmp-pro-reservation-select');\n                if (!select) return;\n\n                select.innerHTML = '';\n                if (!todaysBookings.length) {\n                    const opt = document.createElement('option');\n                    opt.value = '';\n                    opt.textContent = '(Kh\u00f4ng c\u00f3 l\u1ecbch \u0111\u1eb7t trong ng\u00e0y)';\n                    select.appendChild(opt);\n                    return;\n                }\n\n                const placeholder = document.createElement('option');\n                placeholder.value = '';\n                placeholder.textContent = '\u2014 Ch\u1ecdn l\u1ecbch \u0111\u1eb7t \u2014';\n                select.appendChild(placeholder);\n\n                todaysBookings.forEach(function(b){\n                    const sh = ('0' + b.start.getHours()).slice(-2);\n                    const sm = ('0' + b.start.getMinutes()).slice(-2);\n                    const eh = ('0' + b.end.getHours()).slice(-2);\n                    const em = ('0' + b.end.getMinutes()).slice(-2);\n                    const opt = document.createElement('option');\n                    opt.value = String(b.id);\n                    let label = sh + ':' + sm + ' \u2013 ' + eh + ':' + em;\n                    if (b.guest_count) {\n                        label += ' (' + b.guest_count + ' kh\u00e1ch)';\n                    }\n                    opt.textContent = label;\n                    select.appendChild(opt);\n                });\n            }\n\n            function loadRoomBookingsToday() {\n                if (!bookingsApiUrl) return;\n                const today = formatBlogDate(getBlogNow());\n                const url = bookingsApiUrl + '?date=' + encodeURIComponent(today);\n                fetch(url, { credentials: 'same-origin' })\n                    .then(function(r){ return r.json(); })\n                    .then(function(rows){\n                        buildRoomBookings(rows);\n                        updateReservationSelect();\n                    })\n                    .catch(function(err){\n                        console.error('Kh\u00f4ng t\u1ea3i \u0111\u01b0\u1ee3c danh s\u00e1ch \u0111\u1eb7t ph\u00f2ng', err);\n                    });\n            }\n\n            function findActiveBookingNow() {\n                if (!todaysBookings.length) return null;\n                const now = getBlogNow();\n                for (let i = 0; i < todaysBookings.length; i++) {\n                    const b = todaysBookings[i];\n                    if (now >= b.start && now <= b.end) {\n                        return b;\n                    }\n                }\n                return null;\n            }\n\n            function clearBillDetail() {\n                if (billDetail) {\n                    billDetail.innerHTML = '';\n                }\n                if (billArea) {\n                    billArea.style.display = 'none';\n                }\n                state.lastBreakdown = [];\n            }\n\n            function renderBillDetail(breakdown) {\n                if (!billArea || !billDetail) {\n                    return;\n                }\n                if (!breakdown || !Array.isArray(breakdown) || breakdown.length === 0) {\n                    clearBillDetail();\n                    return;\n                }\n                state.lastBreakdown = breakdown.slice();\n                let html = '';\n                html += '<div><strong>Chi ti\u1ebft t\u00ednh ti\u1ec1n:<\/strong><\/div>';\n                html += '<table><thead><tr>';\n                html += '<th>T\u1eeb<\/th><th>\u0110\u1ebfn<\/th><th>Gi\u1edd<\/th><th>\u0110\u01a1n gi\u00e1 (\u00a5\/gi\u1edd)<\/th><th>Th\u00e0nh ti\u1ec1n (\u00a5)<\/th><th>Ghi ch\u00fa<\/th>';\n                html += '<\/tr><\/thead><tbody>';\n                breakdown.forEach(function(row){\n                    const from = row.from || '';\n                    const to   = row.to || '';\n                    const hours = Number(row.hours || 0);\n                    const pricePerHour = Number(row.price_per_hour || 0);\n                    const subtotal = Number(row.subtotal || 0);\n                    const rule = row.rule || '';\n                    html += '<tr>';\n                    html += '<td>' + from + '<\/td>';\n                    html += '<td>' + to + '<\/td>';\n                    html += '<td>' + hours.toFixed(2) + '<\/td>';\n                    html += '<td>' + (pricePerHour ? pricePerHour.toLocaleString() : '') + '<\/td>';\n                    html += '<td>' + (subtotal ? subtotal.toLocaleString() : '') + '<\/td>';\n                    html += '<td>' + rule + '<\/td>';\n                    html += '<\/tr>';\n                });\n                html += '<\/tbody><\/table>';\n                billDetail.innerHTML = html;\n                billArea.style.display = 'block';\n            }\n\n            function initFromServer() {\n                const formData = new FormData();\n                formData.append('action', 'kmp_pro_timer_state');\n                formData.append('room_id', roomId);\n\n                fetch(ajaxUrl, {\n                    method: 'POST',\n                    body: formData\n                })\n                .then(function(r){ return r.json(); })\n                .then(function(data){\n                    if (!data || !data.success) {\n                        return;\n                    }\n                    clearBillDetail();\n                    if (data.running && data.start_ts) {\n                        const startDate = fromBlogTimestamp(data.start_ts);\n                        state.start   = startDate;\n                        state.running = true;\n                        \/\/ Sync guest count from server for correct realtime pricing\n                        state.guestCount = parseInt((data.guest_count !== undefined ? data.guest_count : (guestInput.value || '1')), 10);\n                        if (!isNaN(state.guestCount)) { guestInput.value = String(state.guestCount); }\n                        guestInput.disabled = true;\n                        startText.textContent = 'Gi\u1edd b\u1eaft \u0111\u1ea7u: ' + formatTime(startDate);\n                        endText.textContent   = 'Gi\u1edd k\u1ebft th\u00fac: \u2014';\n                        if (peopleText) {\n                            var g = parseInt((data.guest_count !== undefined ? data.guest_count : guestInput.value || '1'), 10);\n                            peopleText.textContent = 'S\u1ed1 kh\u00e1ch: ' + (isNaN(g) ? '\u2014' : g + ' kh\u00e1ch');\n                        }\n                        if (data.total_formatted) {\n                            amountText.textContent = data.total_formatted + ' \u00a5';\n                        }\n                        if (data.duration_text) {\n                            durationText.textContent = 'Th\u1eddi l\u01b0\u1ee3ng: ' + data.duration_text;\n                        }\n                        if (data.rule_summary) {\n                            noteText.textContent = data.duration_text + ' \u2013 ' + data.rule_summary;\n                        } else {\n                            noteText.textContent = '\u0110ang t\u00ednh gi\u1edd...';\n                        }\n                        if (card && card.classList) {\n                            card.classList.add('kmp-pro-running');\n                        }\n                        \/\/ \u0110\u00e3 c\u00f3 phi\u00ean \u0111ang ch\u1ea1y -> kh\u00f3a n\u00fat B\u1eaft \u0111\u1ea7u, ch\u1ec9 cho k\u1ebft th\u00fac\n                        btnStart.disabled = true;\n                        btnStop.disabled  = false;\n                        if (btnStartOriginalText) {\n                            btnStart.textContent = '\u0110ANG T\u00cdNH';\n                        }\n                        if (state.timerId) {\n                            clearInterval(state.timerId);\n                        }\n                        state.timerId = setInterval(function(){\n                            if (!state.running) return;\n                            requestPrice(null);\n                        }, 10000);\n\n                        \/\/ G\u1ecdi ngay m\u1ed9t l\u1ea7n \u0111\u1ec3 sau khi F5 hi\u1ec3n th\u1ecb lu\u00f4n s\u1ed1 ti\u1ec1n\/tgian hi\u1ec7n t\u1ea1i\n                        requestPrice(null);\n                    } else {\n                        \/\/ Kh\u00f4ng c\u00f3 phi\u00ean \u0111ang ch\u1ea1y\n                        if (card && card.classList) {\n                            card.classList.remove('kmp-pro-running');\n                        }\n                        startText.textContent    = 'Gi\u1edd b\u1eaft \u0111\u1ea7u: \u2014';\n                        endText.textContent      = 'Gi\u1edd k\u1ebft th\u00fac: \u2014';\n                        durationText.textContent = 'Th\u1eddi l\u01b0\u1ee3ng: \u2014';\n                        amountText.textContent   = '0 \u00a5';\n                        noteText.textContent     = 'Gi\u00e1 \u0111\u01b0\u1ee3c t\u00ednh theo b\u1ea3ng gi\u00e1 theo gi\u1edd, c\u1eadp nh\u1eadt t\u1ef1 \u0111\u1ed9ng.';\n                        btnStart.disabled = false;\n                        btnStop.disabled  = true;\n                        state.guestCount = null;\n                        guestInput.disabled = false;\n                        if (btnStartOriginalText) {\n                            btnStart.textContent = btnStartOriginalText;\n                        }\n                    }\n                })\n                .catch(function(err){\n                    console.error('kmp_pro_timer_state error', err);\n                });\n            }\n\n            reservedSelect.addEventListener('change', function(){\n                if (this.value === 'yes') {\n                    reservationRow.style.display = 'block';\n                    loadRoomBookingsToday();\n                } else {\n                    reservationRow.style.display = 'none';\n                }\n            });\n\n            function updateDurationDisplay(start, end) {\n                if (!start || !end) {\n                    durationText.textContent = 'Th\u1eddi l\u01b0\u1ee3ng: \u2014';\n                    return;\n                }\n                const diffMs = end.getTime() - start.getTime();\n                if (diffMs <= 0) {\n                    durationText.textContent = 'Th\u1eddi l\u01b0\u1ee3ng: \u2014';\n                    return;\n                }\n                const minutes = Math.floor(diffMs \/ 60000);\n                const hours   = Math.floor(minutes \/ 60);\n                const mins    = minutes % 60;\n                durationText.textContent = 'Th\u1eddi l\u01b0\u1ee3ng: ' + hours + ' gi\u1edd ' + mins + ' ph\u00fat';\n            }\n\n            function requestPrice(finalEnd) {\n                if (!state.start) return;\n\n                const startTs = toBlogTimestamp(state.start);\n                const endDateForDisplay = finalEnd || new Date();\n\n                \/\/ IMPORTANT:\n                \/\/ - During realtime display (finalEnd == null), DO NOT use client clock.\n                \/\/   Let the server use its current_time('timestamp') to avoid drift and wrong totals.\n                \/\/ - When finalEnd is provided (stop), we still let server finalize (end_ts can be omitted),\n                \/\/   but we keep this path for possible future use.\n                let endTs = 0;\n                if (finalEnd) {\n                    const endDate = finalEnd;\n                    endTs = toBlogTimestamp(endDate);\n                    if (endTs <= startTs) return;\n                }\n\n                const guestCount = parseInt((state.guestCount !== null && state.guestCount !== undefined) ? state.guestCount : (guestInput.value || '1'), 10);\n                const formData = new FormData();\n                formData.append('action', 'kmp_pro_calc_price');\n                formData.append('room_id', roomId);\n                formData.append('guest_count', isNaN(guestCount) ? '1' : String(guestCount));\n                formData.append('start_ts', String(startTs));\n                if (endTs > 0) { formData.append('end_ts', String(endTs)); }\n\n                fetch(ajaxUrl, {\n                    method: 'POST',\n                    body: formData\n                })\n                .then(function(r){ return r.json(); })\n                .then(function(data){\n                    if (!data || !data.success) {\n                        return;\n                    }\n                    amountText.textContent = data.total_formatted + ' \u00a5';\n                    noteText.textContent   = data.duration_text + (data.rule_summary ? ' \u2013 ' + data.rule_summary : '');\n                    updateDurationDisplay(state.start, endDateForDisplay);\n                })\n                .catch(function(err){\n                    console.error('kmp_pro_calc_price error', err);\n                });\n            }\n\n            btnStart.addEventListener('click', function(){\n                \/\/ N\u1ebfu KH\u00d4NG ch\u1ecdn \"C\u00d3 kh\u00e1ch \u0111\u1eb7t tr\u01b0\u1edbc\" th\u00ec ch\u1eb7n kh\u00e1ch ch\u00e8n ngang\n                if (reservedSelect && reservedSelect.value !== 'yes') {\n                    const active = findActiveBookingNow();\n                    if (active) {\n                        const sh = ('0' + active.start.getHours()).slice(-2);\n                        const sm = ('0' + active.start.getMinutes()).slice(-2);\n                        const eh = ('0' + active.end.getHours()).slice(-2);\n                        const em = ('0' + active.end.getMinutes()).slice(-2);\n                        alert('Trong kho\u1ea3ng ' + sh + ':' + sm + ' \u2013 ' + eh + ':' + em + ' \u0111\u00e3 c\u00f3 kh\u00e1ch \u0111\u1eb7t tr\u01b0\u1edbc. Kh\u00f4ng th\u1ec3 nh\u1eadn kh\u00e1ch m\u1edbi.');\n                        return;\n                    }\n                }\n\n                const gSel = card.querySelector('.kmp-pro-guest');\n                if (peopleText && gSel) peopleText.textContent = 'S\u1ed1 kh\u00e1ch: ' + (gSel.value || '') + ' kh\u00e1ch';\n                clearBillDetail();\n                const guestCount = parseInt((state.guestCount !== null && state.guestCount !== undefined) ? state.guestCount : (guestInput.value || '1'), 10);\n                const formData = new FormData();\n                formData.append('action', 'kmp_pro_start_timer');\n                formData.append('room_id', roomId);\n                formData.append('guest_count', isNaN(guestCount) ? '1' : String(guestCount));\n                \/\/ G\u1eedi lu\u00f4n timestamp b\u1eaft \u0111\u1ea7u theo m\u00fai gi\u1edd website\n                const nowDate  = new Date();\n                const startTs  = toBlogTimestamp(nowDate);\n                formData.append('start_ts', String(startTs));\n\n                fetch(ajaxUrl, {\n                    method: 'POST',\n                    body: formData\n                })\n                .then(function(r){ return r.json(); })\n                .then(function(data){\n                    if (!data || !data.success || !data.start_ts) {\n                        return;\n                    }\n                    const startDate = fromBlogTimestamp(data.start_ts);\n                    state.start   = startDate;\n                    state.running = true;\n                        \/\/ Sync guest count from server for correct realtime pricing\n                        state.guestCount = parseInt((data.guest_count !== undefined ? data.guest_count : (guestInput.value || '1')), 10);\n                        if (!isNaN(state.guestCount)) { guestInput.value = String(state.guestCount); }\n                        guestInput.disabled = true;\n                    if (card && card.classList) {\n                        card.classList.add('kmp-pro-running');\n                    }\n                    startText.textContent = 'Gi\u1edd b\u1eaft \u0111\u1ea7u: ' + formatTime(startDate);\n                    endText.textContent   = 'Gi\u1edd k\u1ebft th\u00fac: \u2014';\n                    amountText.textContent = (data.total_formatted ? data.total_formatted : '0') + ' \u00a5';\n                    noteText.textContent   = data.duration_text ? (data.duration_text + (data.rule_summary ? ' \u2013 ' + data.rule_summary : '')) : '\u0110ang t\u00ednh gi\u1edd...';\n                    btnStart.disabled = true;\n                    btnStop.disabled  = false;\n                    if (btnStartOriginalText) {\n                        btnStart.textContent = '\u0110ANG T\u00cdNH GI\u1edc';\n                    }\n\n                    \/\/ Sau khi b\u1eaft \u0111\u1ea7u, set timer t\u1ef1 \u0111\u1ed9ng requestPrice (gi\u1eef nguy\u00ean logic c\u0169)\n                    if (state.timerId) {\n                        clearInterval(state.timerId);\n                    }\n                    state.timerId = setInterval(function(){\n                        if (!state.running) return;\n                        requestPrice(null);\n                    }, 10000); \/\/ c\u1eadp nh\u1eadt m\u1ed7i 10 gi\u00e2y\n\n                    requestPrice(null);\n                })\n                .catch(function(err){\n                    console.error('kmp_pro_start_timer error', err);\n                });\n            });\n\n            btnStop.addEventListener('click', function(){\n                if (!state.start) return;\n\n                const guestCount = parseInt((state.guestCount !== null && state.guestCount !== undefined) ? state.guestCount : (guestInput.value || '1'), 10);\n                const formData = new FormData();\n                formData.append('action', 'kmp_pro_stop_timer');\n                formData.append('room_id', roomId);\n                formData.append('guest_count', isNaN(guestCount) ? '1' : String(guestCount));\n\n                fetch(ajaxUrl, {\n                    method: 'POST',\n                    body: formData\n                })\n                .then(function(r){ return r.json(); })\n                .then(function(data){\n                    const now = (data && data.end_ts) ? fromBlogTimestamp(data.end_ts) : new Date();\n                    state.running = false;\n                    state.guestCount = null;\n                    guestInput.disabled = false;\n                    if (card && card.classList) {\n                        card.classList.remove('kmp-pro-running');\n                    }\n                    endText.textContent = 'Gi\u1edd k\u1ebft th\u00fac: ' + formatTime(now);\n                    btnStart.disabled = false;\n                    btnStop.disabled  = true;\n                    if (btnStartOriginalText) {\n                        btnStart.textContent = btnStartOriginalText;\n                    }\n                    if (state.timerId) {\n                        clearInterval(state.timerId);\n                        state.timerId = null;\n                    }\n\n                    if (data && data.success) {\n                        amountText.textContent = data.total_formatted + ' \u00a5';\n                        if (data.duration_text) {\n                            durationText.textContent = 'Th\u1eddi l\u01b0\u1ee3ng: ' + data.duration_text;\n                        }\n                        if (data.rule_summary) {\n                            noteText.textContent = data.duration_text + ' \u2013 ' + data.rule_summary;\n                        } else if (data.duration_text) {\n                            noteText.textContent = data.duration_text;\n                        } else {\n                            noteText.textContent = '\u0110\u00e3 k\u1ebft th\u00fac t\u00ednh gi\u1edd.';\n                        }\n                        if (data.breakdown && Array.isArray(data.breakdown) && data.breakdown.length) {\n                            renderBillDetail(data.breakdown);\n                        } else {\n                            clearBillDetail();\n                        }\n                    } else {\n                        noteText.textContent = '\u0110\u00e3 k\u1ebft th\u00fac t\u00ednh gi\u1edd.';\n                        clearBillDetail();\n                        requestPrice(now);\n                    }\n                })\n                .catch(function(err){\n                    console.error('kmp_pro_stop_timer error', err);\n                });\n            });\n\n            if (btnPrint) {\n                btnPrint.addEventListener('click', function(){\n                    if (!state.lastBreakdown || !Array.isArray(state.lastBreakdown) || state.lastBreakdown.length === 0) {\n                        alert('Ch\u01b0a c\u00f3 d\u1eef li\u1ec7u \u0111\u1ec3 in. Vui l\u00f2ng K\u1ebft Th\u00fac T\u00ednh Gi\u1edd tr\u01b0\u1edbc.');\n                        return;\n                    }\n                    const roomName = roomHeader ? roomHeader.textContent.trim() : '';\n                    const popup = window.open('', '', 'width=800,height=600');\n                    if (!popup) {\n                        alert('Tr\u00ecnh duy\u1ec7t \u0111ang ch\u1eb7n c\u1eeda s\u1ed5 in. Vui l\u00f2ng cho ph\u00e9p popup.');\n                        return;\n                    }\n                    popup.document.write('<html><head><meta charset=\"UTF-8\"><title>H\u00f3a \u0111\u01a1n Karaoke<\/title>');\n                    popup.document.write('<style>body{font-family:sans-serif;font-size:13px;} table{width:100%;border-collapse:collapse;margin-top:8px;} th,td{border:1px solid #ccc;padding:4px;text-align:left;} h2{margin-top:0;}<\/style>');\n                    popup.document.write('<\/head><body>');\n                    popup.document.write('<h2>H\u00f3a \u0111\u01a1n t\u00ednh gi\u1edd Karaoke<\/h2>');\n                    if (roomName) {\n                        popup.document.write('<p><strong>Ph\u00f2ng:<\/strong> ' + roomName + '<\/p>');\n                    }\n                    popup.document.write('<p>' +\n                        startText.textContent + '<br>' +\n                        endText.textContent + '<br>' +\n                        durationText.textContent + '<br>' +\n                        'Ti\u1ec1n ph\u1ea3i tr\u1ea3: ' + amountText.textContent +\n                    '<\/p>');\n                    if (billDetail) {\n                        popup.document.write(billDetail.innerHTML);\n                    }\n                    popup.document.write('<\/body><\/html>');\n                    popup.document.close();\n                    popup.focus();\n                    popup.print();\n                });\n            }\n\n            if (btnEmail) {\n                btnEmail.addEventListener('click', function(){\n                    if (!state.lastBreakdown || !Array.isArray(state.lastBreakdown) || state.lastBreakdown.length === 0) {\n                        alert('Ch\u01b0a c\u00f3 d\u1eef li\u1ec7u \u0111\u1ec3 g\u1eedi email. Vui l\u00f2ng K\u1ebft Th\u00fac T\u00ednh Gi\u1edd tr\u01b0\u1edbc.');\n                        return;\n                    }\n                    const email = window.prompt('Nh\u1eadp email c\u1ee7a kh\u00e1ch \u0111\u1ec3 g\u1eedi h\u00f3a \u0111\u01a1n:');\n                    if (!email) {\n                        return;\n                    }\n                    const roomName = roomHeader ? roomHeader.textContent.trim() : '';\n                    const lines = [];\n                    lines.push('H\u00f3a \u0111\u01a1n t\u00ednh gi\u1edd Karaoke');\n                    if (roomName) {\n                        lines.push('Ph\u00f2ng: ' + roomName);\n                    }\n                    lines.push(startText.textContent);\n                    lines.push(endText.textContent);\n                    lines.push(durationText.textContent);\n                    lines.push('Ti\u1ec1n ph\u1ea3i tr\u1ea3: ' + amountText.textContent);\n                    lines.push('');\n                    lines.push('Chi ti\u1ebft t\u00ednh ti\u1ec1n:');\n                    state.lastBreakdown.forEach(function(row){\n                        const from = row.from || '';\n                        const to   = row.to || '';\n                        const hours = Number(row.hours || 0);\n                        const pricePerHour = Number(row.price_per_hour || 0);\n                        const subtotal = Number(row.subtotal || 0);\n                        const rule = row.rule || '';\n                        lines.push(\n                            from + ' -> ' + to +\n                            ' | Gi\u1edd: ' + hours.toFixed(2) +\n                            (pricePerHour ? ' | \u0110\u01a1n gi\u00e1: ' + pricePerHour.toLocaleString() + ' \u00a5\/gi\u1edd' : '') +\n                            (subtotal ? ' | Th\u00e0nh ti\u1ec1n: ' + subtotal.toLocaleString() + ' \u00a5' : '') +\n                            (rule ? ' | Ghi ch\u00fa: ' + rule : '')\n                        );\n                    });\n\n                    const formData = new FormData();\n                    formData.append('action', 'kmp_pro_send_bill_email');\n                    formData.append('email', email);\n                    formData.append('subject', roomName ? ('H\u00f3a \u0111\u01a1n Karaoke - ' + roomName) : 'H\u00f3a \u0111\u01a1n Karaoke');\n                    formData.append('body', lines.join('\\n'));\n\n                    fetch(ajaxUrl, {\n                        method: 'POST',\n                        body: formData\n                    })\n                    .then(function(r){ return r.json(); })\n                    .then(function(data){\n                        if (data && data.success) {\n                            alert('\u0110\u00e3 g\u1eedi h\u00f3a \u0111\u01a1n \u0111\u1ebfn: ' + email);\n                        } else {\n                            alert((data && data.message) ? data.message : 'Kh\u00f4ng g\u1eedi \u0111\u01b0\u1ee3c email. Vui l\u00f2ng th\u1eed l\u1ea1i.');\n                        }\n                    })\n                    .catch(function(err){\n                        console.error('kmp_pro_send_bill_email error', err);\n                        alert('L\u1ed7i k\u1ebft n\u1ed1i khi g\u1eedi email.');\n                    });\n                });\n            }\n\n            initFromServer();\n            loadRoomBookingsToday();\n        }\n\n        document.addEventListener('DOMContentLoaded', function(){\n            const wrapper = document.querySelector('.kmp-pro-timer-wrapper');\n            const cards   = wrapper ? wrapper.querySelectorAll('.kmp-pro-room-card') : document.querySelectorAll('.kmp-pro-room-card');\n\n            cards.forEach(function(card){\n                bindCard(card);\n            });\n\n            if (wrapper) {\n                const toggle = wrapper.querySelector('.kmp-pro-tv-toggle');\n                if (toggle) {\n                    toggle.addEventListener('click', function(){\n                        const isOn = wrapper.classList.toggle('kmp-pro-tv-mode');\n                        if (isOn) {\n                            toggle.textContent = 'Tho\u00e1t TV Mode';\n                            if (wrapper.requestFullscreen) {\n                                wrapper.requestFullscreen();\n                            } else if (document.documentElement.requestFullscreen) {\n                                document.documentElement.requestFullscreen();\n                            }\n                        } else {\n                            toggle.textContent = 'TV MODE';\n                            if (document.fullscreenElement && document.exitFullscreen) {\n                                document.exitFullscreen();\n                            }\n                        }\n                    });\n                }\n            }\n        });\n    })();\n    <\/script>\n    \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-1394","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/banhangnhat.com\/vi\/wp-json\/wp\/v2\/pages\/1394","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/banhangnhat.com\/vi\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/banhangnhat.com\/vi\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/banhangnhat.com\/vi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/banhangnhat.com\/vi\/wp-json\/wp\/v2\/comments?post=1394"}],"version-history":[{"count":1,"href":"https:\/\/banhangnhat.com\/vi\/wp-json\/wp\/v2\/pages\/1394\/revisions"}],"predecessor-version":[{"id":1395,"href":"https:\/\/banhangnhat.com\/vi\/wp-json\/wp\/v2\/pages\/1394\/revisions\/1395"}],"wp:attachment":[{"href":"https:\/\/banhangnhat.com\/vi\/wp-json\/wp\/v2\/media?parent=1394"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}