 

{"id":5307,"date":"2024-10-30T09:55:51","date_gmt":"2024-10-30T09:55:51","guid":{"rendered":"https:\/\/nutrigo.hk\/custom-meal-prep\/"},"modified":"2025-04-23T09:34:23","modified_gmt":"2025-04-23T01:34:23","slug":"custom-meal-prep","status":"publish","type":"page","link":"https:\/\/nutrigo.hk\/en\/custom-meal-prep\/","title":{"rendered":"DIY meal box"},"content":{"rendered":"<script>\n        var ajaxurl = \"https:\/\/nutrigo.hk\/wp-admin\/admin-ajax.php\";\n        var forcedLanguage = \"\";\n        \/\/ Track the currently selected UI language\n        var currentUILanguage = \"zh\"; \/\/ Default to Chinese\n    <\/script><style>\n        \/* Common Variables *\/\n        :root {\n            --primary-color: #4CAF50;\n            --primary-hover: #45a049;\n            --text-light: #ffffff;\n            --text-dark: #2c3e50;\n            --border-color: #ddd;\n            --bg-light: #f8f9fa;\n            --bg-dark: #2c3e50;\n            --shadow: 0 2px 15px rgba(0,0,0,0.1);\n        }\n\n        \/* Meal Builder Container *\/\n        .meal-builder {\n            max-width: 600px;\n            margin: 20px auto;\n            padding: 20px;\n            background: var(--bg-light);\n            border-radius: 10px;\n            box-shadow: var(--shadow);\n        }\n\n        \/* Section Styling *\/\n        .meal-section {\n            background: var(--text-light);\n            padding: 20px;\n            margin-bottom: 20px;\n            border-radius: 8px;\n            border-left: 4px solid var(--primary-color);\n            width: 100%;\n            box-sizing: border-box;\n        }\n\n        .meal-section h3 {\n            color: var(--text-dark);\n            margin-bottom: 15px;\n            font-size: 1.2em;\n            font-weight: 600;\n        }\n\n        \/* Dropdown Styling *\/\n        .product-select {\n            width: 100%;\n            padding: 12px;\n            margin-bottom: 15px;\n            border: 1px solid var(--border-color);\n            border-radius: 4px;\n            background: var(--text-light);\n            color: var(--text-dark);\n            font-size: 14px;\n            box-sizing: border-box;\n        }\n\n        \/* Quantity Controls *\/\n        .quantity-control {\n            display: flex;\n            align-items: center;\n            gap: 10px;\n            margin-bottom: 15px;\n            width: 100%;\n            box-sizing: border-box;\n        }\n\n        .quantity-input {\n            flex: 1;\n            max-width: 120px;\n            padding: 10px;\n            border: 1px solid var(--border-color);\n            border-radius: 4px;\n            text-align: center;\n            font-size: 14px;\n        }\n\n        .quantity-btn {\n            background: var(--primary-color);\n            color: var(--text-light);\n            border: none;\n            padding: 10px 15px;\n            border-radius: 4px;\n            cursor: pointer;\n            transition: background 0.3s;\n            font-size: 14px;\n        }\n\n        .quantity-btn:hover {\n            background: var(--primary-hover);\n        }\n\n        \/* Meal Summary *\/\n        .meal-summary {\n            background: var(--bg-dark);\n            color: var(--text-light);\n            padding: 20px;\n            border-radius: 8px;\n            margin-top: 20px;\n            width: 100%;\n            box-sizing: border-box;\n        }\n\n        .meal-summary h3 {\n            color: var(--primary-color);\n            margin-bottom: 20px;\n            font-size: 1.2em;\n            font-weight: 600;\n        }\n\n        .meal-summary .total-price {\n            font-size: 1.2em;\n            padding: 12px 0;\n            border-bottom: 1px solid rgba(255,255,255,0.1);\n            margin-bottom: 20px;\n            font-weight: 600;\n        }\n\n        .meal-summary .nutrition-facts {\n            background: rgba(255,255,255,0.05);\n            padding: 15px;\n            border-radius: 8px;\n            margin-bottom: 20px;\n        }\n\n        .meal-summary .nutrition-facts h4 {\n            color: var(--primary-color);\n            margin: 0 0 15px 0;\n            font-size: 1.1em;\n            font-weight: 600;\n        }\n\n        .meal-summary .nutrition-facts p {\n            margin: 10px 0;\n            font-size: 1em;\n            display: flex;\n            justify-content: space-between;\n            padding: 6px 0;\n            border-bottom: 1px solid rgba(255,255,255,0.1);\n        }\n\n        .add-to-cart-btn {\n            background: var(--primary-color);\n            color: var(--text-light);\n            padding: 12px 20px;\n            border: none;\n            border-radius: 4px;\n            cursor: pointer;\n            width: 100%;\n            font-size: 1em;\n            margin-top: 20px;\n            transition: background 0.3s;\n            text-transform: uppercase;\n            font-weight: 600;\n            letter-spacing: 0.5px;\n        }\n\n        .add-to-cart-btn:hover {\n            background: var(--primary-hover);\n        }\n\n        \/* Responsive Design *\/\n        @media (max-width: 768px) {\n            .meal-builder {\n                margin: 10px;\n                padding: 15px;\n            }\n\n            .meal-section {\n                padding: 15px;\n            }\n\n            .meal-summary {\n                padding: 15px;\n            }\n\n            .quantity-control {\n                flex-wrap: wrap;\n            }\n\n            .quantity-input {\n                max-width: none;\n                width: 100%;\n            }\n        }\n\n        \/* Remove spinner arrows from number input *\/\n        .quantity-input::-webkit-outer-spin-button,\n        .quantity-input::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n        .quantity-input[type=number] {\n            -moz-appearance: textfield;\n        }\n\n        \/* Quantity Controls *\/\n        .quantity-control {\n            display: flex;\n            align-items: center;\n            gap: 10px;\n            margin: 15px 0;\n        }\n\n        .quantity-buttons {\n            display: flex;\n            gap: 5px;\n        }\n\n        .quantity-input {\n            flex: 1;\n            max-width: 120px;\n            padding: 10px;\n            border: 1px solid var(--border-color);\n            border-radius: 4px;\n            text-align: center;\n            font-size: 14px;\n        }\n\n        .quantity-btn {\n            background: var(--primary-color);\n            color: var(--text-light);\n            border: none;\n            padding: 8px 15px;\n            border-radius: 4px;\n            cursor: pointer;\n            transition: background 0.3s;\n            font-size: 14px;\n            min-width: 40px;\n        }\n\n        \/* Vegetable Selection *\/\n        .vegetable-selection {\n            margin: 20px 0;\n            padding: 18px;\n            background: linear-gradient(135deg, #f0f9f0 0%, #e3f5e3 100%);\n            border-radius: 10px;\n            border: 1px solid #b0d9b0;\n            box-shadow: 0 4px 10px rgba(0,0,0,0.05);\n            transition: all 0.3s ease;\n            position: relative;\n            overflow: hidden;\n        }\n        \n        .vegetable-selection:before {\n            content: \"\";\n            position: absolute;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background: url(\"data:image\/svg+xml,%3Csvg width=\\\"100\\\" height=\\\"100\\\" viewBox=\\\"0 0 100 100\\\" xmlns=\\\"http:\/\/www.w3.org\/2000\/svg\\\"%3E%3Cpath d=\\\"M11 18c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm48 25c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm-43-7c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm63 31c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM34 90c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm56-76c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM12 86c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm28-65c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm23-11c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-6 60c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm29 22c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zM32 63c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm57-13c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-9-21c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM60 91c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM35 41c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM12 60c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2z\\\" fill=\\\"%234CAF50\\\" fill-opacity=\\\"0.05\\\" fill-rule=\\\"evenodd\\\"%2F%3E%3C%2Fsvg%3E\");\n            opacity: 0.5;\n            z-index: 0;\n        }\n        \n        .vegetable-selection:hover {\n            transform: translateY(-2px);\n            box-shadow: 0 6px 15px rgba(0,0,0,0.1);\n        }\n        \n        .vegetable-selection label {\n            color: #2e7d32;\n            font-weight: 700;\n            font-size: 16px;\n            margin-bottom: 15px;\n            display: block;\n            position: relative;\n            z-index: 1;\n            text-shadow: 0 1px 1px rgba(255,255,255,0.8);\n        }\n        \n        .vegetable-selection .vegetable-options {\n            display: flex;\n            gap: 15px;\n            margin: 15px 0;\n            position: relative;\n            z-index: 1;\n        }\n        \n        .vegetable-selection .vegetable-option {\n            background-color: rgba(255,255,255,0.7);\n            padding: 8px 15px;\n            border-radius: 6px;\n            display: flex;\n            align-items: center;\n            gap: 5px;\n            transition: all 0.2s ease;\n            border: 1px solid rgba(76,175,80,0.3);\n        }\n        \n        .vegetable-selection .vegetable-option:hover {\n            background-color: rgba(255,255,255,0.9);\n            box-shadow: 0 2px 5px rgba(0,0,0,0.05);\n        }\n        \n        \/* Veggie quantity options styling *\/\n        .veggie-label,\n        .veggie-type-label {\n            color: #2e7d32;\n            font-weight: 600;\n            margin-bottom: 10px;\n            position: relative;\n            z-index: 1;\n        }\n        \n        .veggie-description {\n            font-weight: normal;\n            font-size: 0.9em;\n            margin-left: 5px;\n            opacity: 0.85;\n        }\n        \n        .veggie-quantity-radio-group {\n            display: flex;\n            gap: 15px;\n            flex-wrap: wrap;\n            position: relative;\n            z-index: 1;\n            margin-bottom: 10px;\n        }\n        \n        .veggie-quantity-option {\n            background-color: rgba(255,255,255,0.7);\n            padding: 8px 15px;\n            border-radius: 6px;\n            display: flex;\n            align-items: center;\n            gap: 5px;\n            transition: all 0.2s ease;\n            border: 1px solid rgba(76,175,80,0.3);\n        }\n        \n        .veggie-quantity-option:hover {\n            background-color: rgba(255,255,255,0.9);\n            box-shadow: 0 2px 5px rgba(0,0,0,0.05);\n        }\n        \n        \/* Veggie type options styling *\/\n        .veggie-type-checkbox-group {\n            display: flex;\n            gap: 15px;\n            flex-wrap: wrap;\n            position: relative;\n            z-index: 1;\n        }\n        \n        .veggie-type-option {\n            background-color: rgba(255,255,255,0.7);\n            padding: 8px 15px;\n            border-radius: 6px;\n            display: flex;\n            align-items: center;\n            gap: 5px;\n            transition: all 0.2s ease;\n            border: 1px solid rgba(76,175,80,0.3);\n        }\n        \n        .veggie-type-option:hover {\n            background-color: rgba(255,255,255,0.9);\n            box-shadow: 0 2px 5px rgba(0,0,0,0.05);\n        }\n        \n        .veggie-type-option input[type=\"checkbox\"]:checked + span {\n            font-weight: 600;\n            color: #2e7d32;\n        }\n        \n        \/* Existing dropdown styling *\/\n        .vegetable-selection .vegetable-options .vegetable-option input[type=\"radio\"] {\n            margin: 0;\n        }\n\n        .required-mark {\n            color: #ff4444;\n            margin-left: 4px;\n        }\n\n        .ajax-response {\n            padding: 10px;\n            margin: 10px 0;\n            border-radius: 4px;\n            display: none;\n        }\n        \n        .ajax-response.success {\n            background: #d4edda;\n            color: #155724;\n            border: 1px solid #c3e6cb;\n        }\n        \n        .ajax-response.error {\n            background: #f8d7da;\n            color: #721c24;\n            border: 1px solid #f5c6cb;\n        }\n        \n        .add-to-cart-btn.loading {\n            opacity: 0.5;\n            pointer-events: none;\n        }\n\n        .add-to-cart-btn.disabled {\n            background: #cccccc !important;\n            cursor: not-allowed !important;\n        }\n\n        #price-warning {\n            color: #dc3545;\n            font-size: 0.9em;\n            margin-top: 10px;\n            display: none;\n        }\n\n        .favorite-selection {\n            margin: 20px 0;\n            padding: 18px;\n            background: linear-gradient(135deg, #fff5e6 0%, #fff0d9 100%);\n            border-radius: 10px;\n            border: 1px solid #e9d5b0;\n            box-shadow: 0 4px 10px rgba(0,0,0,0.05);\n            transition: all 0.3s ease;\n            position: relative;\n            overflow: hidden;\n        }\n        \n        .favorite-selection:before {\n            content: \"\";\n            position: absolute;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background: url(\"data:image\/svg+xml,%3Csvg width=\\\"100\\\" height=\\\"100\\\" viewBox=\\\"0 0 100 100\\\" xmlns=\\\"http:\/\/www.w3.org\/2000\/svg\\\"%3E%3Cpath d=\\\"M11 18c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm48 25c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm-43-7c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm63 31c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM34 90c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm56-76c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM12 86c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm28-65c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm23-11c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-6 60c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm29 22c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zM32 63c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm57-13c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-9-21c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM60 91c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM35 41c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM12 60c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2z\\\" fill=\\\"%23f0ad4e\\\" fill-opacity=\\\"0.05\\\" fill-rule=\\\"evenodd\\\"%2F%3E%3C%2Fsvg%3E\");\n            opacity: 0.5;\n            z-index: 0;\n        }\n        \n        .favorite-selection:hover {\n            transform: translateY(-2px);\n            box-shadow: 0 6px 15px rgba(0,0,0,0.1);\n        }\n        \n        .favorite-selection label.translatable-text {\n            color: #7d5f18;\n            font-weight: 700;\n            font-size: 16px;\n            margin-bottom: 15px;\n            display: block;\n            position: relative;\n            z-index: 1;\n            text-shadow: 0 1px 1px rgba(255,255,255,0.8);\n        }\n        \n        .favorite-selection .favorite-options {\n            display: flex;\n            gap: 15px;\n            margin: 15px 0;\n            position: relative;\n            z-index: 1;\n        }\n        \n        .favorite-selection .favorite-option {\n            background-color: rgba(255,255,255,0.7);\n            padding: 8px 15px;\n            border-radius: 6px;\n            display: flex;\n            align-items: center;\n            gap: 5px;\n            transition: all 0.2s ease;\n            border: 1px solid rgba(240,173,78,0.3);\n        }\n        \n        .favorite-selection .favorite-option:hover {\n            background-color: rgba(255,255,255,0.9);\n            box-shadow: 0 2px 5px rgba(0,0,0,0.05);\n        }\n        \n        .favorite-selection .favorite-name-input {\n            position: relative;\n            z-index: 1;\n            margin-top: 15px;\n        }\n        \n        .favorite-selection .favorite-name-input input {\n            width: 100%;\n            padding: 10px 15px;\n            border: 2px solid #e9bb6e;\n            border-radius: 6px;\n            background-color: rgba(255,255,255,0.8);\n            font-size: 15px;\n            transition: all 0.3s ease;\n            box-shadow: inset 0 1px 3px rgba(0,0,0,0.1);\n        }\n        \n        .favorite-selection .favorite-name-input input:focus {\n            border-color: #f0ad4e;\n            background-color: #fff;\n            box-shadow: 0 0 0 3px rgba(240,173,78,0.2);\n            outline: none;\n        }\n        \n        .favorite-selection .description {\n            background-color: rgba(255,255,255,0.7);\n            padding: 8px 12px;\n            border-radius: 6px;\n            margin-top: 10px;\n            font-size: 13px;\n            line-height: 1.5;\n            color: #6d563d;\n            border-left: 3px solid #f0ad4e;\n        }\n        \n        .favorite-selection .description span {\n            display: block;\n            margin-top: 5px;\n            color: #7d6b55;\n            font-size: 12px;\n        }\n        \n        \/* Floating Price Banner *\/\n        .floating-price-banner {\n            position: fixed;\n            bottom: 0;\n            left: 0;\n            right: 0;\n            background: var(--bg-dark);\n            color: var(--text-light);\n            padding: 12px 20px;\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            z-index: 1000;\n            box-shadow: 0 -2px 10px rgba(0,0,0,0.2);\n            transition: transform 0.3s ease;\n            transform: translateY(100%);\n        }\n        \n        .floating-price-banner.visible {\n            transform: translateY(0);\n        }\n        \n        .floating-price-banner .banner-price {\n            font-weight: bold;\n            font-size: 1.1em;\n        }\n        \n        .floating-price-banner .banner-nutrition {\n            font-size: 0.9em;\n            opacity: 0.9;\n        }\n        \n        .floating-price-banner .view-details {\n            background: var(--primary-color);\n            color: var(--text-light);\n            border: none;\n            padding: 8px 15px;\n            border-radius: 4px;\n            cursor: pointer;\n            font-size: 0.9em;\n        }\n        \n        .floating-price-banner .view-details:hover {\n            background: var(--primary-hover);\n        }\n        \n        @media (max-width: 768px) {\n            .floating-price-banner {\n                padding: 10px;\n            }\n            \n            .floating-price-banner .banner-price {\n                font-size: 1em;\n            }\n            \n            .floating-price-banner .view-details {\n                padding: 6px 12px;\n                font-size: 0.8em;\n            }\n        }\n\n        \/* Slider Control Styling *\/\n        .slider-control {\n            margin: 15px 0;\n            width: 100%; \/* Make sure it takes full width *\/\n        }\n\n        .slider-container {\n            position: relative;\n            padding: 15px 0 25px; \/* Increased bottom padding to provide more space *\/\n            width: 100%; \/* Ensure full width *\/\n        }\n\n        .quantity-slider {\n            -webkit-appearance: none;\n            width: 100%;\n            height: 10px; \/* Slightly taller track for better visibility *\/\n            border-radius: 5px;\n            background: #ddd;\n            outline: none;\n            margin: 0; \/* Remove any default margins *\/\n        }\n\n        \/* Update the thumb color styles in the CSS *\/\n\n        \/* Regular slider thumbs - change to a warm golden color *\/\n        .quantity-slider::-webkit-slider-thumb {\n            -webkit-appearance: none;\n            appearance: none;\n            width: 28px; \/* Increased from 20px *\/\n            height: 28px; \/* Increased from 20px *\/\n            border-radius: 50%;\n            background: #FFC107; \/* Warm golden color *\/\n            cursor: pointer;\n            border: 2px solid var(--text-light);\n            box-shadow: 0 2px 4px rgba(0,0,0,0.3); \/* Slightly stronger shadow for the larger thumb *\/\n        }\n\n        .quantity-slider::-moz-range-thumb {\n            width: 28px; \/* Increased from 20px *\/\n            height: 28px; \/* Increased from 20px *\/\n            border-radius: 50%;\n            background: #FFC107; \/* Warm golden color *\/\n            cursor: pointer;\n            border: 2px solid var(--text-light);\n            box-shadow: 0 2px 4px rgba(0,0,0,0.3); \/* Slightly stronger shadow for the larger thumb *\/\n        }\n\n        .quantity-slider:active::-webkit-slider-thumb {\n            background: #FFA000; \/* Darker gold for active state *\/\n            transform: scale(1.1);\n        }\n\n        .quantity-slider:active::-moz-range-thumb {\n            background: #FFA000; \/* Darker gold for active state *\/\n            transform: scale(1.1);\n        }\n\n        \/* Piece-based slider thumbs - using a complementary color *\/\n        .quantity-slider.piece-based::-webkit-slider-thumb {\n            background: #66BB6A; \/* Lighter green *\/\n            width: 28px; \/* Increased from 20px *\/\n            height: 28px; \/* Increased from 20px *\/\n        }\n\n        .quantity-slider.piece-based::-moz-range-thumb {\n            background: #66BB6A; \/* Lighter green *\/\n            width: 28px; \/* Increased from 20px *\/\n            height: 28px; \/* Increased from 20px *\/\n        }\n\n        .quantity-slider.piece-based:active::-webkit-slider-thumb {\n            background: #4CAF50; \/* Regular green when active *\/\n        }\n\n        .quantity-slider.piece-based:active::-moz-range-thumb {\n            background: #4CAF50; \/* Regular green when active *\/\n        }\n\n        .slider-value-display {\n            position: absolute;\n            top: -30px; \/* Moved up slightly from -25px *\/\n            right: 0;\n            background: var(--primary-color);\n            color: white;\n            padding: 3px 10px; \/* Slightly larger padding *\/\n            border-radius: 4px;\n            font-size: 14px; \/* Increased from 12px *\/\n            font-weight: bold;\n            display: inline-block;\n            min-width: 45px; \/* Increased from 40px *\/\n            text-align: center;\n        }\n\n        \/* For piece-based sliders *\/\n        .quantity-slider.piece-based {\n            background: #e0f7fa;\n        }\n        \n        .quantity-slider.piece-based::-webkit-slider-thumb {\n            background: #00acc1;\n        }\n        \n        .quantity-slider.piece-based::-moz-range-thumb {\n            background: #00acc1;\n        }\n        \n        .quantity-slider.piece-based:active::-webkit-slider-thumb {\n            background: #0097a7;\n        }\n        \n        .quantity-slider.piece-based:active::-moz-range-thumb {\n            background: #0097a7;\n        }\n        \n        \/* Responsive adjustments *\/\n        @media (max-width: 768px) {\n            .slider-container {\n                padding: 15px 0;\n            }\n            \n            .slider-value-display {\n                top: -20px;\n            }\n        }\n\n        @media (min-width: 768px) {\n            \/* On larger screens, make the slider area more prominent *\/\n            .meal-builder {\n                max-width: 800px; \/* Increased from 600px *\/\n            }\n            \n            .slider-container {\n                padding: 20px 5px 30px; \/* More vertical space *\/\n            }\n        }\n\n        \/* Veggie Type Options *\/\n        .veggie-type-options {\n            margin-top: 15px;\n            padding-left: 20px;\n        }\n\n        .veggie-type-checkbox-group {\n            display: flex;\n            flex-wrap: wrap;\n            gap: 15px;\n        }\n\n        .veggie-type-option {\n            display: flex;\n            align-items: center;\n            gap: 5px;\n            padding: 8px 12px;\n            background: rgba(76, 175, 80, 0.1);\n            border-radius: 4px;\n            border: 1px solid rgba(76, 175, 80, 0.3);\n            transition: all 0.2s ease;\n        }\n\n        .veggie-type-option:hover {\n            background: rgba(76, 175, 80, 0.2);\n        }\n\n        .veggie-type-option input[type=\"checkbox\"] {\n            margin: 0;\n        }\n\n        .veggie-type-label {\n            color: #2e7d32;\n            font-weight: 600;\n            margin-bottom: 10px;\n            position: relative;\n            z-index: 1;\n        }\n\n        .veggie-description {\n            font-weight: normal;\n            font-size: 0.9em;\n            margin-left: 5px;\n            opacity: 0.85;\n        }\n        \n        .allergen-dropdown-warning.compact {\n            background-color: #fff3cd;\n            color: #856404;\n            padding: 8px 12px;\n            margin: 5px 0 10px 0;\n            border-left: 3px solid #ffeeba;\n            border-radius: 3px;\n            font-size: 13px;\n            line-height: 1.3;\n        }\n        \n        \/* Responsive styles *\/\n        @media (max-width: 768px) {\n            .allergen-dropdown-warning.compact {\n                padding: 6px 10px;\n                font-size: 12px;\n                margin: 4px 0 8px 0;\n            }\n        }\n\n        .price-strikethrough {\n            position: relative;\n        }\n        \n        .price-strikethrough::after {\n            content: \"\";\n            position: absolute;\n            left: 0;\n            top: 50%;\n            width: 100%;\n            height: 3px; \/* Increased from 2px to make it thicker *\/\n            background-color: #e74c3c;\n            transform: rotate(-5deg);\n        }\n        \n        .price-strikethrough:hover::after {\n            height: 3px;\n            transform: rotate(-7deg);\n            transition: all 0.2s ease;\n        }\n\n        \/* Add a new class for the discounted price *\/\n        .discounted-price {\n            color: #27ae60; \/* Green color for the discounted price *\/\n            margin-left: 10px;\n            font-weight: bold;\n        }\n\n        \/* Language Switcher *\/\n        .language-switcher {\n            display: flex;\n            justify-content: flex-end;\n            margin-bottom: 20px;\n        }\n        \n        .language-toggle {\n            background: var(--primary-color);\n            color: white;\n            border: none;\n            padding: 8px 15px;\n            border-radius: 4px;\n            cursor: pointer;\n            font-size: 14px;\n            transition: background 0.2s;\n        }\n        \n        .language-toggle:hover {\n            background: var(--primary-hover);\n        }\n        \n        html[lang=\"en\"] .language-toggle[data-lang=\"zh\"],\n        html[lang=\"zh\"] .language-toggle[data-lang=\"en\"] {\n            display: inline-block;\n        }\n        \n        html[lang=\"en\"] .language-toggle[data-lang=\"en\"],\n        html[lang=\"zh\"] .language-toggle[data-lang=\"zh\"] {\n            display: none;\n        }\n\n        \/* Meal builder styling *\/\n        #dev-meal-builder {\n            max-width: 1200px;\n            margin: 0 auto;\n            padding: 20px;\n            background-color: #f9f9f9;\n            border-radius: 5px;\n        }\n        \n        \/* Meal label styling *\/\n        .meal-label-field {\n            margin-bottom: 15px;\n            padding: 10px;\n            background-color: #f0f8ff;\n            border-radius: 5px;\n            border-left: 3px solid #4a90e2;\n        }\n        \n        .meal-label-field label {\n            display: block;\n            margin-bottom: 5px;\n            font-weight: 600;\n            color: #333;\n        }\n        \n        .meal-label-field input {\n            width: 100%;\n            padding: 8px 12px;\n            border: 1px solid #ddd;\n            border-radius: 4px;\n            font-size: 14px;\n        }\n        \n        .meal-label-field .description {\n            font-size: 12px;\n            color: #666;\n            margin-top: 5px;\n            font-style: italic;\n        }\n        \n        \/* Name Tag Container *\/\n        .name-tag-field-container {\n            margin: 20px 0;\n            padding: 18px;\n            background: linear-gradient(135deg, #f0f8ff 0%, #e6f2ff 100%);\n            border-radius: 10px;\n            border: 1px solid #c0d6e9;\n            box-shadow: 0 4px 10px rgba(0,0,0,0.05);\n            transition: all 0.3s ease;\n            position: relative;\n            overflow: hidden;\n        }\n        \n        .name-tag-field-container:before {\n            content: \"\";\n            position: absolute;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background: url(\"data:image\/svg+xml,%3Csvg width=\\\"100\\\" height=\\\"100\\\" viewBox=\\\"0 0 100 100\\\" xmlns=\\\"http:\/\/www.w3.org\/2000\/svg\\\"%3E%3Cpath d=\\\"M11 18c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm48 25c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm-43-7c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm63 31c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM34 90c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm56-76c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM12 86c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm28-65c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm23-11c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-6 60c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm29 22c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zM32 63c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm57-13c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-9-21c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM60 91c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM35 41c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM12 60c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2z\\\" fill=\\\"%234a90e2\\\" fill-opacity=\\\"0.05\\\" fill-rule=\\\"evenodd\\\"%2F%3E%3C%2Fsvg%3E\");\n            opacity: 0.5;\n            z-index: 0;\n        }\n        \n        .name-tag-field-container:hover {\n            transform: translateY(-2px);\n            box-shadow: 0 6px 15px rgba(0,0,0,0.1);\n        }\n        \n        \/* In Name Tag container, override the meal-label-field background to be transparent *\/\n        .name-tag-field-container .meal-label-field {\n            background-color: transparent;\n            border-left: none;\n            padding: 0;\n            margin: 0;\n            position: relative;\n            z-index: 1;\n        }\n        \n        .name-tag-field-container .meal-label-field label {\n            color: #2c3e50;\n            font-weight: 700;\n            font-size: 16px;\n            margin-bottom: 10px;\n            text-shadow: 0 1px 1px rgba(255,255,255,0.8);\n        }\n        \n        .name-tag-field-container .meal-label-field input {\n            border: 2px solid #a1c6ea;\n            background-color: rgba(255,255,255,0.8);\n            padding: 10px 15px;\n            border-radius: 6px;\n            font-size: 15px;\n            transition: all 0.3s ease;\n            box-shadow: inset 0 1px 3px rgba(0,0,0,0.1);\n        }\n        \n        .name-tag-field-container .meal-label-field input:focus {\n            border-color: #4a90e2;\n            background-color: #fff;\n            box-shadow: 0 0 0 3px rgba(74,144,226,0.2);\n            outline: none;\n        }\n        \n        \/* Add style for the Chinese text *\/\n        .name-tag-field-container .description {\n            background-color: rgba(255,255,255,0.7);\n            padding: 8px 12px;\n            border-radius: 6px;\n            margin-top: 10px;\n            font-size: 13px;\n            line-height: 1.5;\n            color: #34495e;\n            border-left: 3px solid #4a90e2;\n        }\n        \n        .name-tag-field-container .description span {\n            display: block;\n            margin-top: 5px;\n            color: #555;\n            font-size: 12px;\n        }\n        \n        \/* Voice Pitch Game Button Styles *\/\n        .game-entrance-container {\n            margin-top: 20px;\n            padding: 15px;\n            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n            border-radius: 10px;\n            text-align: center;\n            box-shadow: 0 4px 8px rgba(102, 126, 234, 0.3);\n        }\n        \n        .game-entrance-button {\n            width: 100%;\n            background: rgba(255, 255, 255, 0.95);\n            color: #667eea;\n            border: none;\n            padding: 15px 20px;\n            border-radius: 8px;\n            cursor: pointer;\n            font-size: 18px;\n            font-weight: bold;\n            transition: all 0.3s ease;\n            box-shadow: 0 3px 6px rgba(0, 0, 0, 0.2);\n        }\n        \n        .game-entrance-button:hover {\n            transform: translateY(-2px);\n            box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);\n            background: white;\n        }\n        \n        .game-button-text {\n            font-size: 16px;\n        }\n        \n        .game-entrance-description {\n            margin: 10px 0 0 0;\n            color: white;\n            font-size: 13px;\n            text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n        }\n        \n        \/* Game Modal Styles *\/\n        .game-modal-overlay {\n            display: none;\n            position: fixed;\n            top: 0;\n            left: 0;\n            right: 0;\n            bottom: 0;\n            background: rgba(0, 0, 0, 0.8);\n            z-index: 99999;\n            overflow: auto;\n            padding: 20px;\n        }\n        \n        .game-modal-overlay.active {\n            display: flex;\n            align-items: center;\n            justify-content: center;\n        }\n        \n        .game-modal-content {\n            max-width: 950px;\n            width: 100%;\n            background: white;\n            border-radius: 12px;\n            overflow: hidden;\n            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);\n            animation: modalSlideIn 0.3s ease-out;\n        }\n        \n        @keyframes modalSlideIn {\n            from {\n                opacity: 0;\n                transform: translateY(-50px);\n            }\n            to {\n                opacity: 1;\n                transform: translateY(0);\n            }\n        }\n        \n        \/* Special Unlocked Badge *\/\n        .special-unlocked-badge {\n            display: inline-block;\n            background: linear-gradient(135deg, #FFD700 0%, #FFA500 100%);\n            color: #333;\n            padding: 5px 15px;\n            border-radius: 20px;\n            font-size: 14px;\n            font-weight: bold;\n            margin-left: 10px;\n            animation: badgePulse 2s ease-in-out infinite;\n            box-shadow: 0 2px 8px rgba(255, 215, 0, 0.4);\n        }\n        \n        \/* Game Entrance Option in Dropdown *\/\n        .game-entrance-option {\n            background: linear-gradient(90deg, #667eea 0%, #764ba2 100%) !important;\n            color: white !important;\n            font-weight: bold !important;\n            padding: 8px !important;\n        }\n        \n        select option.game-entrance-option {\n            background: linear-gradient(90deg, #667eea 0%, #764ba2 100%);\n            color: white;\n            font-weight: bold;\n        }\n        \n        \/* Ingredient Toggle Button *\/\n        .ingredient-toggle-button {\n            display: none;\n            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n            color: white;\n            border: none;\n            padding: 8px 15px;\n            border-radius: 20px;\n            font-size: 13px;\n            font-weight: bold;\n            cursor: pointer;\n            margin-left: 10px;\n            transition: all 0.3s ease;\n            box-shadow: 0 2px 6px rgba(102, 126, 234, 0.4);\n        }\n        \n        .ingredient-toggle-button:hover {\n            transform: translateY(-2px);\n            box-shadow: 0 4px 10px rgba(102, 126, 234, 0.6);\n        }\n        \n        .ingredient-toggle-button.active {\n            display: inline-block;\n        }\n        \n        .ingredient-toggle-button .toggle-icon {\n            font-size: 14px;\n            margin-right: 5px;\n        }\n        \n        @keyframes badgePulse {\n            0%, 100% {\n                transform: scale(1);\n                box-shadow: 0 2px 8px rgba(255, 215, 0, 0.4);\n            }\n            50% {\n                transform: scale(1.05);\n                box-shadow: 0 4px 12px rgba(255, 215, 0, 0.6);\n            }\n        }\n        \n        @media (max-width: 768px) {\n            .game-entrance-button {\n                font-size: 16px;\n                padding: 12px 15px;\n            }\n            \n            .game-button-text {\n                font-size: 14px;\n            }\n            \n            .game-entrance-description {\n                font-size: 12px;\n            }\n            \n            .game-modal-overlay {\n                padding: 10px;\n            }\n            \n            .special-unlocked-badge {\n                display: block;\n                margin: 10px 0 0 0;\n                font-size: 12px;\n            }\n            \n            .ingredient-toggle-button {\n                display: none;\n                font-size: 12px;\n                padding: 6px 12px;\n                margin: 10px 0 0 0;\n            }\n            \n            .ingredient-toggle-button.active {\n                display: block;\n            }\n        }\n    <\/style><style>\n        .random-blind-trigger {\n            margin-left: 10px;\n            background: linear-gradient(135deg, #8a63d2 0%, #6f42c1 100%);\n            color: #fff;\n            border: none;\n            padding: 8px 12px;\n            border-radius: 20px;\n            cursor: pointer;\n            font-size: 14px;\n            display: inline-flex;\n            align-items: center;\n            gap: 6px;\n            box-shadow: 0 4px 10px rgba(0,0,0,0.1);\n            position: relative;\n            overflow: hidden;\n        }\n        .random-blind-trigger:hover { background: #59359b; }\n        .random-blind-trigger .btn-orb { width: 18px; height: 18px; border-radius: 50%; display: inline-block; background: radial-gradient(circle at 35% 35%, #e8e0ff, #8a63d2 60%, #6f42c1); box-shadow: 0 0 8px rgba(111,66,193,0.6), 0 0 14px rgba(111,66,193,0.35) inset; }\n        @keyframes clickBurst { from { box-shadow: 0 0 0 0 rgba(138,99,210,.55); } to { box-shadow: 0 0 0 16px rgba(138,99,210,0); } }\n        .random-blind-trigger.clicked::after { content:\"\"; position:absolute; left:50%; top:50%; width:10px; height:10px; border-radius:50%; background: rgba(138,99,210,.35); transform: translate(-50%,-50%); animation: clickBurst .6s ease-out; }\n        .random-modal {\n            display: none;\n            position: fixed;\n            z-index: 2000;\n            left: 0; top: 0; right: 0; bottom: 0;\n            background: rgba(0,0,0,0.4);\n        }\n        .random-modal .random-modal-content {\n            background: #ffffff;\n            margin: 8% auto;\n            padding: 22px;\n            border-radius: 14px;\n            width: 92%;\n            max-width: 520px;\n            box-shadow: 0 20px 50px rgba(0,0,0,0.2);\n            position: relative;\n            border: 1px solid rgba(111,66,193,0.15);\n            z-index: 2;\n        }\n        .random-modal .random-modal-close {\n            position: absolute;\n            right: 12px; top: 8px;\n            font-size: 24px;\n            cursor: pointer;\n            color: #888;\n        }\n        .random-modal h3 { margin: 0 0 8px 0; font-size: 20px; color: #2c3e50; }\n        .random-modal p { margin: 0 0 10px 0; color: #4f5b67; }\n        .random-modal .random-result { margin-top: 12px; }\n        .random-modal .random-loading { position:absolute; inset:0; display:flex; align-items:center; justify-content:center; background: rgba(255,255,255,0); z-index: 10000; border-radius: 12px; }\n        .random-modal .random-loading img { max-width: 280px; height:auto; border-radius: 12px; box-shadow: 0 8px 30px rgba(0,0,0,0.3); }\n        \n        \/* Mobile GIF sizing *\/\n        @media (max-width: 480px) {\n            .random-modal .random-loading img { max-width: 220px; border-radius: 10px; }\n        }\n        \/* Full-screen dramatic effects behind content *\/\n        .random-modal .random-effects { position: fixed; inset: 0; pointer-events: none; z-index: 9999; display:none; opacity:0; transition: opacity .3s ease; }\n\n        \/* Global effects overlay (above modal content, below GIF) *\/\n        #random-effects-overlay { position: fixed; inset: 0; pointer-events: none; z-index: 99998; display:none; opacity:0; transition: opacity .3s ease; }\n        #random-effects-overlay .starfield { position:absolute; inset:-15%; background:\n            radial-gradient(3px 3px at 12% 20%, rgba(255,215,0,1), rgba(255,215,0,0) 40%),\n            radial-gradient(2.5px 2.5px at 80% 35%, rgba(138,43,226,1), rgba(138,43,226,0) 40%),\n            radial-gradient(2.2px 2.2px at 45% 75%, rgba(255,20,147,0.95), rgba(255,20,147,0) 40%),\n            radial-gradient(2.8px 2.8px at 60% 15%, rgba(255,215,0,1), rgba(255,215,0,0) 40%),\n            radial-gradient(2.5px 2.5px at 30% 55%, rgba(138,43,226,1), rgba(138,43,226,0) 40%),\n            radial-gradient(2px 2px at 85% 75%, rgba(255,20,147,0.9), rgba(255,20,147,0) 40%),\n            radial-gradient(2.3px 2.3px at 25% 85%, rgba(138,43,226,0.95), rgba(138,43,226,0) 40%);\n            filter: saturate(1.4) brightness(1.2);\n            animation: starDrift 8.4s linear infinite alternate;\n        }\n        #random-effects-overlay .magic-rays { position:absolute; inset:-20%; opacity: 0.85; background: conic-gradient(from 0deg, rgba(138,43,226,0.0) 0deg, rgba(138,43,226,0.75) 14deg, rgba(138,43,226,0.0) 28deg) repeat; animation: spinRays 2.52s linear infinite; }\n        #random-effects-overlay .magic-flash { position:absolute; inset:0; background: radial-gradient(circle at 50% 50%, rgba(255,215,0,0.65), rgba(255,215,0,0) 65%); opacity: 0; animation: flashPulse 1.54s ease-in-out infinite; mix-blend-mode: screen; }\n        #random-effects-overlay .lightning { position:absolute; inset:0; }\n        #random-effects-overlay .lightning svg { position:absolute; inset:0; width:100%; height:100%; filter: drop-shadow(0 0 15px rgba(255,215,0,1)) drop-shadow(0 0 40px rgba(138,43,226,0.9)) drop-shadow(0 0 25px rgba(255,20,147,0.7)); }\n        #random-effects-overlay .lightning path { stroke:#FFD700; stroke-width:5; fill:none; stroke-dasharray: 220 320; animation: lightningZap 630ms ease-out forwards; }\n        \n        \/* Mobile enhancements for small screens *\/\n        @media (max-width: 480px) {\n            #random-effects-overlay .starfield { \n                background:\n                    radial-gradient(4px 4px at 12% 20%, rgba(255,215,0,1), rgba(255,215,0,0) 40%),\n                    radial-gradient(3.5px 3.5px at 80% 35%, rgba(138,43,226,1), rgba(138,43,226,0) 40%),\n                    radial-gradient(3px 3px at 45% 75%, rgba(255,20,147,1), rgba(255,20,147,0) 40%),\n                    radial-gradient(3.8px 3.8px at 60% 15%, rgba(255,215,0,1), rgba(255,215,0,0) 40%),\n                    radial-gradient(3.5px 3.5px at 30% 55%, rgba(138,43,226,1), rgba(138,43,226,0) 40%),\n                    radial-gradient(3px 3px at 85% 75%, rgba(255,20,147,1), rgba(255,20,147,0) 40%),\n                    radial-gradient(3.2px 3.2px at 25% 85%, rgba(138,43,226,1), rgba(138,43,226,0) 40%),\n                    radial-gradient(2.8px 2.8px at 70% 90%, rgba(255,215,0,0.95), rgba(255,215,0,0) 40%),\n                    radial-gradient(3.1px 3.1px at 15% 65%, rgba(138,43,226,0.98), rgba(138,43,226,0) 40%);\n                filter: saturate(1.6) brightness(1.3);\n                animation: starDrift 11.76s linear infinite alternate;\n            }\n            #random-effects-overlay .magic-rays { opacity: 0.9; animation: spinRays 2.1s linear infinite; }\n            #random-effects-overlay .magic-flash { background: radial-gradient(circle at 50% 50%, rgba(255,215,0,0.75), rgba(255,215,0,0) 70%); animation: flashPulse 2.156s ease-in-out infinite; }\n        }\n        .random-modal .random-effects .starfield { position:absolute; inset:0; background:\n            radial-gradient(2px 2px at 12% 20%, rgba(255,255,255,0.95), rgba(255,255,255,0) 40%),\n            radial-gradient(1.5px 1.5px at 80% 35%, rgba(255,255,255,0.8), rgba(255,255,255,0) 40%),\n            radial-gradient(1.2px 1.2px at 45% 75%, rgba(255,255,255,0.7), rgba(255,255,255,0) 40%),\n            radial-gradient(1.8px 1.8px at 60% 15%, rgba(255,255,255,0.9), rgba(255,255,255,0) 40%),\n            radial-gradient(1.4px 1.4px at 30% 55%, rgba(255,255,255,0.85), rgba(255,255,255,0) 40%);\n            animation: starDrift 8s linear infinite alternate;\n        }\n        @keyframes starDrift { 0% { transform: translate(0,0) scale(1); } 100% { transform: translate(-25px, -15px) scale(1.02); } }\n        .random-modal .random-effects .magic-rays { position:absolute; inset:-10%; opacity: 0.7; background: conic-gradient(from 0deg, rgba(111,66,193,0.0) 0deg, rgba(111,66,193,0.45) 18deg, rgba(111,66,193,0.0) 36deg) repeat; animation: spinRays 2.5s linear infinite; }\n        @keyframes spinRays { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }\n        .random-modal .random-effects .magic-flash { position:absolute; inset:0; background: radial-gradient(circle at 50% 50%, rgba(255,255,255,0.35), rgba(255,255,255,0) 60%); opacity: 0; animation: flashPulse 1.2s ease-in-out infinite; }\n        @keyframes flashPulse { 0% { opacity: 0; } 40% { opacity: 0.9; } 100% { opacity: 0; } }\n        \/* Particle bursts *\/\n        .random-modal .particle { position:absolute; left:50%; top:50%; width:6px; height:6px; margin:-3px 0 0 -3px; background:#fff; border-radius:50%; box-shadow:0 0 12px rgba(255,255,255,0.9), 0 0 24px rgba(111,66,193,0.6); opacity:0; transform: translate(0,0) scale(0.3); animation: particleFly 900ms ease-out forwards; }\n        @keyframes particleFly { 0% { opacity:.7; transform: translate(0,0) scale(0.3);} 80% { opacity:1; } 100% { opacity:0; transform: translate(var(--dx, 0px), var(--dy, 0px)) scale(1); } }\n        \/* Lightning arcs *\/\n        .random-modal .lightning { position:absolute; inset:0; pointer-events:none; }\n        .random-modal .lightning svg { position:absolute; inset:0; width:100%; height:100%; filter: drop-shadow(0 0 6px rgba(255,255,255,0.95)) drop-shadow(0 0 22px rgba(111,66,193,0.6)); }\n        .random-modal .lightning path { stroke:#ffffff; stroke-width:2; fill:none; stroke-dasharray: 120 240; animation: lightningZap 360ms ease-out forwards; }\n        @keyframes lightningZap { 0% { stroke-dashoffset: 240; opacity:0; } 60% { opacity:1; } 100% { stroke-dashoffset: 0; opacity:0; } }\n        .random-modal .random-card .preview { width: 100%; height: 160px; display: flex; align-items: center; justify-content: center; background: #ffffff; border: 1px dashed rgba(111,66,193,0.25); border-radius: 8px; overflow: hidden; }\n        .random-modal .random-card .preview img { max-width: 100%; max-height: 100%; object-fit: contain; display: block; }\n        .random-modal .filters { display: grid; grid-template-columns: 1fr; gap: 10px; margin: 12px 0; }\n        .random-modal .filter-row { display: flex; gap: 8px; align-items: center; }\n        .random-modal .filter-row select, .random-modal .filter-row button, .random-modal .filter-row .chip { font-size: 14px; }\n        .chip { background:#f1ecfc; color:#4b2ba5; padding:6px 10px; border-radius: 16px; display:inline-block; }\n        .filter-select { width: 100%; padding: 8px; border:1px solid #ddd; border-radius:6px; }\n        #random-blind-go {\n            background: linear-gradient(135deg, #8a63d2 0%, #6f42c1 100%);\n            color: #fff; border: none; padding: 10px 14px; border-radius: 6px; cursor: pointer;\n            box-shadow: 0 4px 10px rgba(0,0,0,0.1);\n        }\n        #random-blind-go:hover { background: #59359b; }\n        #random-add-to-cart { background:#2e7d32; color:#fff; border:none; padding:10px 14px; border-radius:6px; cursor:pointer; margin-top:8px; }\n        #random-add-to-cart:hover { background:#256628; }\n    <\/style><div class=\"meal-builder\"><form method=\"post\" action=\"\" data-trp-original-action=\"\"><div class=\"language-switcher\">\n        <div>\n            <button type=\"button\" class=\"language-toggle\" data-lang=\"en\">English<\/button>\n            <button type=\"button\" class=\"language-toggle\" data-lang=\"zh\">\u4e2d\u6587<\/button>\n            <button type=\"button\" class=\"random-blind-trigger\" title=\"\u96a8\u6a5f\u76f2\u76d2\u9910\" style=\"background: linear-gradient(135deg, #8a63d2 0%, #6f42c1 100%);\"> <span class=\"btn-orb\"><\/span><span> \u96a8\u6a5f<\/span><\/button>\n        <\/div>\n    <\/div><div class=\"nonce-field\"><input type=\"hidden\" id=\"development_nonce\" name=\"development_nonce\" value=\"bd8c131a27\" \/><input type=\"hidden\" name=\"_wp_http_referer\" value=\"\/en\/wp-json\/wp\/v2\/pages\/5307\" \/><\/div><div id=\"random-effects-overlay\"><div class=\"starfield\"><\/div><div class=\"magic-rays\"><\/div><div class=\"magic-flash\"><\/div><div class=\"lightning\"><\/div><\/div><div id=\"random-blind-modal\" class=\"random-modal\"><div class=\"random-modal-content\"><span class=\"random-modal-close\" aria-label=\"\u95dc\u9589\">&times;<\/span><h3 style=\"margin-top:0;\" class=\"magic-title\"><span class=\"magic-orb\"><\/span><span>\ud83d\udd2e \u96a8\u6a5f\u76f2\u76d2\u9910<\/span><\/h3><p>\u9078\u64c7\u4e00\u500b\u7be9\u9078\u689d\u4ef6\uff08\u53ef\u9078\uff09\uff0c\u7136\u5f8c\u9ede\u64ca\u6309\u9215\u62bd\u53d6\u96a8\u6a5f\u9910\u9ede\u3002<\/p><div id=\"random-loading\" class=\"random-loading\" style=\"display:none;\"><img decoding=\"async\" data-src=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/08\/source.gif\" alt=\"Loading\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 440px; --smush-placeholder-aspect-ratio: 440\/326;\" \/><\/div><div class=\"filters\">\n                <div class=\"filter-row\">\n                    <span class=\"chip\">\u7be9\u9078\u689d\u4ef6\uff08\u64c7\u4e00\uff09<\/span>\n                <\/div>\n                <div class=\"filter-row\">\n                    <select id=\"filter-type\" class=\"filter-select\">\n                        <option value=\"\">\u4e0d\u4f7f\u7528\u7be9\u9078<\/option>\n                        <option value=\"kcal\">\u71b1\u91cf (kcal)<\/option>\n                        <option value=\"carbs\">\u78b3\u6c34 (g)<\/option>\n                        <option value=\"protein\">\u86cb\u767d\u8cea (g)<\/option>\n                    <\/select>\n                <\/div>\n                <div class=\"filter-row\">\n                    <select id=\"filter-range\" class=\"filter-select\"><option value=\"\">\u8acb\u5148\u9078\u64c7\u7be9\u9078\u985e\u5225<\/option><\/select>\n                <\/div>\n            <\/div>\n            <button type=\"button\" id=\"random-blind-go\">\u62bd\u53d6\u96a8\u6a5f\u9910\u9ede<\/button>\n            <div id=\"random-blind-result\" class=\"random-result\" style=\"display:none;\"><\/div>\n        <\/div>\n    <\/div><div class=\"meal-section\">\n        <h3>Select Carbs<\/h3><select name=\"product_dropdown_carbs\" class=\"product-select\" data-family=\"carbs\"><option value=\"6692\"\n                data-price=\"8\"\n                data-kcal=\"138\"\n                data-carbs=\"29.5\"\n                data-protein=\"3.5\"\n                data-fat=\"1.4\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/04\/\u9ed1\u9999-150x150.png\"\n                data-english-name=\"Black Rice(g)\"   >\u9ed1\u9999\u7c73\ud83c\udf5a(\u514b)<\/option><option value=\"5302\"\n                data-price=\"6.5\"\n                data-kcal=\"121\"\n                data-carbs=\"25.2\"\n                data-protein=\"3.5\"\n                data-fat=\"0.4\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/02\/\u767d\u98ef-150x150.png\"\n                data-english-name=\"White Rice(g)\"   >\u767d\u98ef\ud83c\udf5a(\u514b)<\/option><option value=\"7251\"\n                data-price=\"8\"\n                data-kcal=\"112\"\n                data-carbs=\"23.22\"\n                data-protein=\"3.79\"\n                data-fat=\"0.16\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/05\/\u53e4\u65af\u7c73-150x150.png\"\n                data-english-name=\"couscous(g)\"   >\u53e4\u65af\u7c73\ud83c\udf5a(\u514b)<\/option><option value=\"7528\"\n                data-price=\"8\"\n                data-kcal=\"112\"\n                data-carbs=\"23.51\"\n                data-protein=\"2.32\"\n                data-fat=\"0.83\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/05\/brown-rice-150x150.png\"\n                data-english-name=\"brown rice(g)\"   >\u7cd9\u7c73\u98ef\ud83c\udf5a(\u514b)<\/option><option value=\"5559\"\n                data-price=\"15\"\n                data-kcal=\"170\"\n                data-carbs=\"27\"\n                data-protein=\"6.2\"\n                data-fat=\"4.6\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/03\/\u7464\u67f1-150x150.png\"\n                data-english-name=\"Fried Rice with Dried Scallop(g)\"   >\u7464\u67f1\u86cb\u767d\u7092\u98ef\ud83c\udf73(\u514b)<\/option><option value=\"6876\"\n                data-price=\"15\"\n                data-kcal=\"147.7\"\n                data-carbs=\"22.5\"\n                data-protein=\"5.3\"\n                data-fat=\"3.9\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/04\/\u5496\u54e9\u87f9\u8089-150x150.png\"\n                data-english-name=\"Curry Crab Meat Fried Rice (g)\"   >\u5496\u54e9\u87f9\u8089\u7092\u98ef\ud83e\udd80(\u514b)<\/option><option value=\"5535\"\n                data-price=\"15\"\n                data-kcal=\"154.8\"\n                data-carbs=\"22.5\"\n                data-protein=\"8.2\"\n                data-fat=\"3.4\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/06\/\u54b8\u9b5a\u96de\u7c92\u7092\u98ef-150x150.png\"\n                data-english-name=\"Fried Rice with Salted Fish and Chicken (g)\"   >\u9e79\u9b5a\u96de\u7c92\u7092\u98ef\ud83d\udc1f(\u514b)<\/option><option value=\"5558\"\n                data-price=\"15\"\n                data-kcal=\"129\"\n                data-carbs=\"20.4\"\n                data-protein=\"2.9\"\n                data-fat=\"2.1\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/03\/\u8591\u9ec3-150x150.png\"\n                data-english-name=\"Turmeric Pineapple Fried Rice (g)\"   >\u8591\u9ec3\u83e0\u863f\u7092\u98ef\ud83c\udf4d(\u514b)<\/option><option value=\"6605\"\n                data-price=\"13\"\n                data-kcal=\"127.2\"\n                data-carbs=\"19.9\"\n                data-protein=\"6.3\"\n                data-fat=\"2.2\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/04\/\u96de\u767d\u6e6f-150x150.png\"\n                data-english-name=\"Chicken Paitan Fried Rice (g)\"   >\u96de\u767d\u6e6f\u7092\u98ef\ud83c\udf57(\u514b)<\/option><option value=\"5557\"\n                data-price=\"12\"\n                data-kcal=\"170\"\n                data-carbs=\"27.19\"\n                data-protein=\"4.8\"\n                data-fat=\"1.1\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/04\/\u767d\u9152\u849c\u9999\u610f\u7c89-150x150.png\"\n                data-english-name=\"White Wine Garlic Spaghetti (g)\"   >\u767d\u9152\u849c\u9999\u610f\u7c89\ud83c\udf5d(\u514b)<\/option><option value=\"5590\"\n                data-price=\"12\"\n                data-kcal=\"168.5\"\n                data-carbs=\"28.98\"\n                data-protein=\"5.3\"\n                data-fat=\"1.5\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/03\/\u9ed1\u6912-150x150.png\"\n                data-english-name=\"Black Pepper Spaghetti (g)\"   >\u9ed1\u6912\u610f\u7c89\ud83c\udf5d(\u514b)<\/option><option value=\"5536\"\n                data-price=\"12\"\n                data-kcal=\"119.8\"\n                data-carbs=\"25.2\"\n                data-protein=\"3.6\"\n                data-fat=\"0.5\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/04\/\u8543\u8304\u610f\u7c89-150x150.png\"\n                data-english-name=\"Tomato Spaghetti (g)\"   >\u8543\u8304\u610f\u7c89\ud83c\udf5d(\u514b)<\/option><option value=\"6704\"\n                data-price=\"12\"\n                data-kcal=\"84.5\"\n                data-carbs=\"14.6\"\n                data-protein=\"2.6\"\n                data-fat=\"1.8\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/02\/\u6930\u83dc\u82b1\u98ef-150x150.png\"\n                data-english-name=\"Cauliflower Rice \ud83e\udd66 Fried with White Rice (g)\"   >\u6930\u83dc\u82b1\u98ef\ud83e\udd66\u7092\u767d\u98ef(\u514b)<\/option><option value=\"5794\"\n                data-price=\"15\"\n                data-kcal=\"201.5\"\n                data-carbs=\"22.4\"\n                data-protein=\"8.5\"\n                data-fat=\"5.8\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/04\/\u8fa3\u8089\u8178\u610f\u7c89-150x150.png\"\n                data-english-name=\"Spaghetti with Chorizo (g)\"   >\u897f\u73ed\u7259\u8fa3\u8089\u8178\u610f\u7c89\ud83c\udf2d\ud83c\udf5d(\u514b)<\/option><option value=\"5556\"\n                data-price=\"14\"\n                data-kcal=\"167\"\n                data-carbs=\"28.6\"\n                data-protein=\"3.8\"\n                data-fat=\"3.5\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/03\/pesto-\u85af\u6ce2-150x150.png\"\n                data-english-name=\"spinach pesto cream gnocchi (g)\"   >\u9999\u8349\u5fcc\u5ec9\u85af\u4ed4\u4e38\u5b50\u610f\u7c89(\u514b)<\/option><option value=\"5938\"\n                data-price=\"12\"\n                data-kcal=\"48\"\n                data-carbs=\"4\"\n                data-protein=\"1.7\"\n                data-fat=\"3.3\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/02\/\u6930\u83dc\u82b1\u98ef-150x150.png\"\n                data-english-name=\"Cauliflower Rice \ud83e\udd66 (g)\"   >\u6930\u83dc\u82b1\u98ef\ud83e\udd66(\u514b)<\/option><option value=\"6305\"\n                data-price=\"13\"\n                data-kcal=\"198.09\"\n                data-carbs=\"27.12\"\n                data-protein=\"5.75\"\n                data-fat=\"3.91\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/03\/tuna-150x150.png\"\n                data-english-name=\"Pesto Tuna Spaghetti (g)\"   >\u9752\u91ac\u541e\u62ff\u9b5a\u610f\u7c89(\u514b)<\/option><option value=\"5551\"\n                data-price=\"8\"\n                data-kcal=\"90\"\n                data-carbs=\"20.7\"\n                data-protein=\"2\"\n                data-fat=\"0.1\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/02\/\u8543\u85af-150x150.png\"\n                data-english-name=\"Sweet Potato (g)\"   >\u84b8\u8543\u85af\ud83c\udf60(\u514b)<\/option><option value=\"5550\"\n                data-price=\"8\"\n                data-kcal=\"87\"\n                data-carbs=\"20\"\n                data-protein=\"2\"\n                data-fat=\"0.1\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/03\/\u85af\u4ed4-150x150.png\"\n                data-english-name=\"Potato (g)\"   >\u84b8\u85af\u4ed4\ud83e\udd54(\u514b)<\/option><option value=\"5554\"\n                data-price=\"10\"\n                data-kcal=\"101\"\n                data-carbs=\"23\"\n                data-protein=\"2\"\n                data-fat=\"1\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/plugins\/development\/placeholder.png\"\n                data-english-name=\"Mashed Sweet Potato (g)\"   >\u8543\u85af\u84c9\ud83c\udf60(\u514b)<\/option><option value=\"7112\"\n                data-price=\"8\"\n                data-kcal=\"40\"\n                data-carbs=\"10.5\"\n                data-protein=\"0.9\"\n                data-fat=\"0.09\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/02\/\u5357-150x150.png\"\n                data-english-name=\"Butternut Squash (g)\"   >\u5357\u74dc\ud83c\udf83(\u514b)<\/option><option value=\"13911\"\n                data-price=\"10\"\n                data-kcal=\"118\"\n                data-carbs=\"27.2\"\n                data-protein=\"2\"\n                data-fat=\"0.1\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/08\/\u7d2b\u5c71\u85e5-150x150.png\"\n                data-english-name=\"steamed purple chinese yam(g)\"   >\u84b8\u7d2b\u5c71\u85e5\ud83d\udc9c(\u514b)<\/option><option value=\"5553\"\n                data-price=\"14\"\n                data-kcal=\"118.2\"\n                data-carbs=\"22.9\"\n                data-protein=\"2.4\"\n                data-fat=\"2.4\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/03\/\u9ed1\u85af-150x150.png\"\n                data-english-name=\"Air-Fried Herb and Garlic Black Potato (g)\"   >\u6c23\u70b8\u9999\u8349\u5927\u849c\u9ed1\u85af(\u514b)<\/option><option value=\"5552\"\n                data-price=\"15\"\n                data-kcal=\"135.9\"\n                data-carbs=\"19.6\"\n                data-protein=\"3.6\"\n                data-fat=\"3.8\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/04\/\u8fa3\u8089\u8178\u85af\u84c9-150x150.png\"\n                data-english-name=\"Chorizo Baked Mashed Potato (g)\"   >\u897f\u73ed\u7259\u8fa3\u8089\u8178\u70e4\u85af\u84c9(\u514b)<\/option><option value=\"5549\"\n                data-price=\"13\"\n                data-kcal=\"128\"\n                data-carbs=\"23.1\"\n                data-protein=\"2\"\n                data-fat=\"3\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/03\/\u85af\u89d2-150x150.png\"\n                data-english-name=\"BBQ Baked Potato Wedges (g)\"   >BBQ\u70e4\u85af\u89d2(\u514b)<\/option><option value=\"5793\"\n                data-price=\"15\"\n                data-kcal=\"112.8\"\n                data-carbs=\"19.1\"\n                data-protein=\"3.3\"\n                data-fat=\"2.9\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/04\/\u4e09\u6587\u9b5a\u85af\u84c9-150x150.png\"\n                data-english-name=\"Smoked Salmon Baked Mashed Potato (g)\"   >\u7159\u4e09\u6587\u9b5a\u7117\u85af\u84c9\ud83c\udf63\ud83e\udd54(\u514b)<\/option><option value=\"6306\"\n                data-price=\"13\"\n                data-kcal=\"128\"\n                data-carbs=\"23.1\"\n                data-protein=\"2\"\n                data-fat=\"3\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/03\/\u8543\u85af\u89d2-150x150.png\"\n                data-english-name=\"Roasted Sweet Potato Wedges (g)\"   >\u70e4\u8543\u85af\u89d2\ud83c\udf60\ud83c\udf5f(\u514b)<\/option><option value=\"5555\"\n                data-price=\"15\"\n                data-kcal=\"154\"\n                data-carbs=\"29.15\"\n                data-protein=\"4.55\"\n                data-fat=\"2.04\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/03\/xo-150x150.png\"\n                data-english-name=\"XO Sakura Shrimp Fried Rice Vermicelli (g)\"   >XO\u6afb\u82b1\u8766\u7092\u7c73\u7c89(\u514b)<\/option><\/select><div class=\"quantity-control slider-control\">\n        <div class=\"slider-container\">\n            <input type=\"range\" name=\"carbs_quantity_slider\" min=\"0\" max=\"400\" value=\"0\" step=\"10\" class=\"quantity-slider\" data-family=\"carbs\">\n            <div class=\"slider-value-display\">0g<\/div>\n        <\/div>\n        <input type=\"hidden\" name=\"carbs_quantity\" value=\"0\" class=\"quantity-input\" data-family=\"carbs\">\n    <\/div><\/div><div class=\"meal-section\">\n        <h3>Select Protein\n            <button type=\"button\" class=\"ingredient-toggle-button\" id=\"toggle-ingredient-type\">\n                <span class=\"toggle-icon\">\ud83d\udd04<\/span>\n                <span class=\"toggle-text\">\u5207\u63db\u56de\u5e38\u898f\u98df\u6750 Switch to Regular<\/span>\n            <\/button>\n        <\/h3><select name=\"product_dropdown_meat\" class=\"product-select\" data-family=\"meat\"><option value=\"25926\"\n                data-price=\"10\"\n                data-kcal=\"99.4\"\n                data-carbs=\"14.08\"\n                data-protein=\"6.03\"\n                data-fat=\"1.36\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/plugins\/development\/placeholder.png\"\n                data-english-name=\"Savoury Tofu &amp; Bean Loaf\"   >\u990a\u751f\u8c46\u8150\u7cd5\ud83e\uddf1<\/option><option value=\"5534\"\n                data-price=\"17\"\n                data-kcal=\"164\"\n                data-carbs=\"0\"\n                data-protein=\"30\"\n                data-fat=\"3.6\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/02\/\u96de\u80f8-150x150.png\"\n                data-english-name=\"Sous Vide Chicken Breast (g)\"   >\u6162\u716e\u96de\u80f8\ud83c\udf57(\u514b)<\/option><option value=\"5548\"\n                data-price=\"900\"\n                data-kcal=\"5000\"\n                data-carbs=\"246.7\"\n                data-protein=\"373.3\"\n                data-fat=\"273.3\"\n                data-unit-type=\"piece\"\n                data-unit-step=\"1\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/02\/\u71d2\u8ce3-150x150.png\"\n                data-english-name=\"Spicy Chicken Siomai (pc)\"   >\u9ebb\u8fa3\u96de\u8089\u71d2\u8ce3\ud83c\udf57(\u7c92)<\/option><option value=\"5546\"\n                data-price=\"18\"\n                data-kcal=\"145\"\n                data-carbs=\"1.6\"\n                data-protein=\"26.1\"\n                data-fat=\"3\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/02\/\u96de\u80f8\u8089\u9905-150x150.png\"\n                data-english-name=\"Chicken Breast Meat Loaf (g)\"   >\u96de\u80f8\u8089\u9905\ud83c\udf57(\u514b)<\/option><option value=\"5547\"\n                data-price=\"18\"\n                data-kcal=\"167.9\"\n                data-carbs=\"6.9\"\n                data-protein=\"20.9\"\n                data-fat=\"6.8\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/03\/\u6ce2\u6ce2\u7403-150x150.png\"\n                data-english-name=\"Asian Chicken Patty (g)\"   >\u96de\u8089\u6ce2\u6ce2\u7403\ud83c\udf57(\u514b)<\/option><option value=\"5544\"\n                data-price=\"12\"\n                data-kcal=\"209\"\n                data-carbs=\"0\"\n                data-protein=\"26\"\n                data-fat=\"11\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/03\/\u70b8\u96de\u817f\u8089-150x150.png\"\n                data-english-name=\"Roasted Chicken Thigh Meat (g)\"   >\u70e4\u96de\u817f\u8089\ud83c\udf57(\u514b)<\/option><option value=\"5937\"\n                data-price=\"18\"\n                data-kcal=\"101.7\"\n                data-carbs=\"5.9\"\n                data-protein=\"15.7\"\n                data-fat=\"1.4\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/04\/\u8706\u8089-150x150.png\"\n                data-english-name=\"Stir-Fried Clam with Radish and Chives (g)\"   >\u83dc\u812f\u97ed\u83dc\u7092\u8706\u8089\ud83e\uddaa(\u514b)<\/option><option value=\"5528\"\n                data-price=\"36\"\n                data-kcal=\"205\"\n                data-carbs=\"0\"\n                data-protein=\"34\"\n                data-fat=\"6.5\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/03\/\u725b\u5c55-150x150.png\"\n                data-english-name=\"Five-Spice Beef Shank (g)\"   >\u4e94\u9999\u725b\u5c55\ud83d\udc2e(\u514b)<\/option><option value=\"5542\"\n                data-price=\"42\"\n                data-kcal=\"178\"\n                data-carbs=\"0\"\n                data-protein=\"26.25\"\n                data-fat=\"7.5\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/02\/\u6162\u716e\u725b\u67f3-150x150.png\"\n                data-english-name=\"Sous Vide Beef Tenderloin (g)\"   >\u6162\u716e\u8349\u98fc\u725b\u67f3\ud83e\udd69(\u514b)<\/option><option value=\"5541\"\n                data-price=\"26\"\n                data-kcal=\"99\"\n                data-carbs=\"0\"\n                data-protein=\"24\"\n                data-fat=\"0.3\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/03\/\u8766\u4ec1-150x150.png\"\n                data-english-name=\"Shrimp (g)\"   >\u8766\u4ec1\ud83c\udf64(\u514b)<\/option><option value=\"5540\"\n                data-price=\"20\"\n                data-kcal=\"154\"\n                data-carbs=\"0\"\n                data-protein=\"22\"\n                data-fat=\"6\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/03\/\u9bdb\u9b5a\u67f3-150x150.png\"\n                data-english-name=\"Tilapia Fillet (g)\"   >\u70e4\u9bdb\u9b5a\u67f3\ud83d\udc1f(\u514b)<\/option><option value=\"13913\"\n                data-price=\"3850\"\n                data-kcal=\"9000\"\n                data-carbs=\"6\"\n                data-protein=\"1980\"\n                data-fat=\"100\"\n                data-unit-type=\"piece\"\n                data-unit-step=\"1\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/08\/\u9c48\u9b5a-150x150.png\"\n                data-english-name=\"roasted cod fillet (pc)\"   >\u70e4\u2744\ufe0f\u9c48\u9b5a\u67f3\ud83d\udc1f(\u7d0460\u514b\u4efd)<\/option><option value=\"20339\"\n                data-price=\"2400\"\n                data-kcal=\"11000\"\n                data-carbs=\"0\"\n                data-protein=\"2050\"\n                data-fat=\"700\"\n                data-unit-type=\"piece\"\n                data-unit-step=\"1\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/11\/\u789f-150x150.png\"\n                data-english-name=\"Flounder fillet (pc)\"   >\u9c08\u9b5a\u67f3\ud83d\udc1f(\u7d0460\u514b\u4efd)<\/option><option value=\"5539\"\n                data-price=\"4500\"\n                data-kcal=\"23000\"\n                data-carbs=\"100\"\n                data-protein=\"2410\"\n                data-fat=\"1390\"\n                data-unit-type=\"piece\"\n                data-unit-step=\"1\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/03\/\u4e09\u6587\u9b5a-150x150.png\"\n                data-english-name=\"Salmon Fillet (100g serving)\"   >\u4e09\u6587\u9b5a\u67f3\ud83c\udf63(100\u514b\u4efd)<\/option><option value=\"6878\"\n                data-price=\"46\"\n                data-kcal=\"164\"\n                data-carbs=\"4.4\"\n                data-protein=\"29.8\"\n                data-fat=\"2.1\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/04\/\u516b\u9b5a\u8173-150x150.png\"\n                data-english-name=\"Octopus Tentacle (g)\"   >\u516b\u722a\u9b5a\u8173\ud83d\udc19(\u514b)<\/option><option value=\"17829\"\n                data-price=\"2800\"\n                data-kcal=\"2430\"\n                data-carbs=\"180\"\n                data-protein=\"540\"\n                data-fat=\"0\"\n                data-unit-type=\"piece\"\n                data-unit-step=\"1\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/10\/\u9b91\u9b5a-150x150.png\"\n                data-english-name=\"Abalone with Bonito Sauce (3pc approx 45g)\"   >\u65e5\u5f0f\u9c39\u9b5a\u6c41\u9b91\u9b5a\ud83e\uddaa(3\u7c92\u4e00\u4efd\u7d0445g)<\/option><option value=\"27898\"\n                data-price=\"33\"\n                data-kcal=\"145.53\"\n                data-carbs=\"1.46\"\n                data-protein=\"21.31\"\n                data-fat=\"5.93\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2026\/03\/\u788e\u725b-150x150.png\"\n                data-english-name=\"Stir-Fried Lean Ground Beef with Green Chili (g)\"   >\u9752\u5c16\u6912\u7092\u7626\u725b\u788e(\u514b)<\/option><option value=\"game_entrance\" class=\"game-entrance-option\" data-game-trigger=\"true\" style=\"background: linear-gradient(90deg, #667eea 0%, #764ba2 100%); color: white; font-weight: bold;\">\n        \ud83e\udd85 \u6211\u771f\u4fc2\u597d\u60f3\u98df\u9d15\u9ce5 \ud83c\udfae\n    <\/option><\/select><div class=\"quantity-control slider-control\">\n        <div class=\"slider-container\">\n            <input type=\"range\" name=\"meat_quantity_slider\" min=\"0\" max=\"400\" value=\"0\" step=\"10\" class=\"quantity-slider\" data-family=\"meat\">\n            <div class=\"slider-value-display\">0g<\/div>\n        <\/div>\n        <input type=\"hidden\" name=\"meat_quantity\" value=\"0\" class=\"quantity-input\" data-family=\"meat\">\n    <\/div><\/div><div class=\"meal-section\">\n        <h3>Select Protein<\/h3><select name=\"product_dropdown_section_c\" class=\"product-select\" data-family=\"section_c\"><option value=\"25926\"\n                data-price=\"10\"\n                data-kcal=\"99.4\"\n                data-carbs=\"14.08\"\n                data-protein=\"6.03\"\n                data-fat=\"1.36\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/plugins\/development\/placeholder.png\"\n                data-english-name=\"Savoury Tofu &amp; Bean Loaf\"   >\u990a\u751f\u8c46\u8150\u7cd5\ud83e\uddf1<\/option><option value=\"5534\"\n                data-price=\"17\"\n                data-kcal=\"164\"\n                data-carbs=\"0\"\n                data-protein=\"30\"\n                data-fat=\"3.6\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/02\/\u96de\u80f8-150x150.png\"\n                data-english-name=\"Sous Vide Chicken Breast (g)\"   >\u6162\u716e\u96de\u80f8\ud83c\udf57(\u514b)<\/option><option value=\"5548\"\n                data-price=\"900\"\n                data-kcal=\"5000\"\n                data-carbs=\"246.7\"\n                data-protein=\"373.3\"\n                data-fat=\"273.3\"\n                data-unit-type=\"piece\"\n                data-unit-step=\"1\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/02\/\u71d2\u8ce3-150x150.png\"\n                data-english-name=\"Spicy Chicken Siomai (pc)\"   >\u9ebb\u8fa3\u96de\u8089\u71d2\u8ce3\ud83c\udf57(\u7c92)<\/option><option value=\"5546\"\n                data-price=\"18\"\n                data-kcal=\"145\"\n                data-carbs=\"1.6\"\n                data-protein=\"26.1\"\n                data-fat=\"3\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/02\/\u96de\u80f8\u8089\u9905-150x150.png\"\n                data-english-name=\"Chicken Breast Meat Loaf (g)\"   >\u96de\u80f8\u8089\u9905\ud83c\udf57(\u514b)<\/option><option value=\"5547\"\n                data-price=\"18\"\n                data-kcal=\"167.9\"\n                data-carbs=\"6.9\"\n                data-protein=\"20.9\"\n                data-fat=\"6.8\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/03\/\u6ce2\u6ce2\u7403-150x150.png\"\n                data-english-name=\"Asian Chicken Patty (g)\"   >\u96de\u8089\u6ce2\u6ce2\u7403\ud83c\udf57(\u514b)<\/option><option value=\"5544\"\n                data-price=\"12\"\n                data-kcal=\"209\"\n                data-carbs=\"0\"\n                data-protein=\"26\"\n                data-fat=\"11\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/03\/\u70b8\u96de\u817f\u8089-150x150.png\"\n                data-english-name=\"Roasted Chicken Thigh Meat (g)\"   >\u70e4\u96de\u817f\u8089\ud83c\udf57(\u514b)<\/option><option value=\"5937\"\n                data-price=\"18\"\n                data-kcal=\"101.7\"\n                data-carbs=\"5.9\"\n                data-protein=\"15.7\"\n                data-fat=\"1.4\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/04\/\u8706\u8089-150x150.png\"\n                data-english-name=\"Stir-Fried Clam with Radish and Chives (g)\"   >\u83dc\u812f\u97ed\u83dc\u7092\u8706\u8089\ud83e\uddaa(\u514b)<\/option><option value=\"5528\"\n                data-price=\"36\"\n                data-kcal=\"205\"\n                data-carbs=\"0\"\n                data-protein=\"34\"\n                data-fat=\"6.5\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/03\/\u725b\u5c55-150x150.png\"\n                data-english-name=\"Five-Spice Beef Shank (g)\"   >\u4e94\u9999\u725b\u5c55\ud83d\udc2e(\u514b)<\/option><option value=\"5542\"\n                data-price=\"42\"\n                data-kcal=\"178\"\n                data-carbs=\"0\"\n                data-protein=\"26.25\"\n                data-fat=\"7.5\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/02\/\u6162\u716e\u725b\u67f3-150x150.png\"\n                data-english-name=\"Sous Vide Beef Tenderloin (g)\"   >\u6162\u716e\u8349\u98fc\u725b\u67f3\ud83e\udd69(\u514b)<\/option><option value=\"5541\"\n                data-price=\"26\"\n                data-kcal=\"99\"\n                data-carbs=\"0\"\n                data-protein=\"24\"\n                data-fat=\"0.3\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/03\/\u8766\u4ec1-150x150.png\"\n                data-english-name=\"Shrimp (g)\"   >\u8766\u4ec1\ud83c\udf64(\u514b)<\/option><option value=\"5540\"\n                data-price=\"20\"\n                data-kcal=\"154\"\n                data-carbs=\"0\"\n                data-protein=\"22\"\n                data-fat=\"6\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/03\/\u9bdb\u9b5a\u67f3-150x150.png\"\n                data-english-name=\"Tilapia Fillet (g)\"   >\u70e4\u9bdb\u9b5a\u67f3\ud83d\udc1f(\u514b)<\/option><option value=\"13913\"\n                data-price=\"3850\"\n                data-kcal=\"9000\"\n                data-carbs=\"6\"\n                data-protein=\"1980\"\n                data-fat=\"100\"\n                data-unit-type=\"piece\"\n                data-unit-step=\"1\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/08\/\u9c48\u9b5a-150x150.png\"\n                data-english-name=\"roasted cod fillet (pc)\"   >\u70e4\u2744\ufe0f\u9c48\u9b5a\u67f3\ud83d\udc1f(\u7d0460\u514b\u4efd)<\/option><option value=\"20339\"\n                data-price=\"2400\"\n                data-kcal=\"11000\"\n                data-carbs=\"0\"\n                data-protein=\"2050\"\n                data-fat=\"700\"\n                data-unit-type=\"piece\"\n                data-unit-step=\"1\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/11\/\u789f-150x150.png\"\n                data-english-name=\"Flounder fillet (pc)\"   >\u9c08\u9b5a\u67f3\ud83d\udc1f(\u7d0460\u514b\u4efd)<\/option><option value=\"5539\"\n                data-price=\"4500\"\n                data-kcal=\"23000\"\n                data-carbs=\"100\"\n                data-protein=\"2410\"\n                data-fat=\"1390\"\n                data-unit-type=\"piece\"\n                data-unit-step=\"1\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/03\/\u4e09\u6587\u9b5a-150x150.png\"\n                data-english-name=\"Salmon Fillet (100g serving)\"   >\u4e09\u6587\u9b5a\u67f3\ud83c\udf63(100\u514b\u4efd)<\/option><option value=\"6878\"\n                data-price=\"46\"\n                data-kcal=\"164\"\n                data-carbs=\"4.4\"\n                data-protein=\"29.8\"\n                data-fat=\"2.1\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/04\/\u516b\u9b5a\u8173-150x150.png\"\n                data-english-name=\"Octopus Tentacle (g)\"   >\u516b\u722a\u9b5a\u8173\ud83d\udc19(\u514b)<\/option><option value=\"17829\"\n                data-price=\"2800\"\n                data-kcal=\"2430\"\n                data-carbs=\"180\"\n                data-protein=\"540\"\n                data-fat=\"0\"\n                data-unit-type=\"piece\"\n                data-unit-step=\"1\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/10\/\u9b91\u9b5a-150x150.png\"\n                data-english-name=\"Abalone with Bonito Sauce (3pc approx 45g)\"   >\u65e5\u5f0f\u9c39\u9b5a\u6c41\u9b91\u9b5a\ud83e\uddaa(3\u7c92\u4e00\u4efd\u7d0445g)<\/option><option value=\"27898\"\n                data-price=\"33\"\n                data-kcal=\"145.53\"\n                data-carbs=\"1.46\"\n                data-protein=\"21.31\"\n                data-fat=\"5.93\"\n                data-unit-type=\"weight\"\n                data-unit-step=\"10\"\n                data-image-url=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2026\/03\/\u788e\u725b-150x150.png\"\n                data-english-name=\"Stir-Fried Lean Ground Beef with Green Chili (g)\"   >\u9752\u5c16\u6912\u7092\u7626\u725b\u788e(\u514b)<\/option><\/select><div class=\"quantity-control slider-control\">\n        <div class=\"slider-container\">\n            <input type=\"range\" name=\"section_c_quantity_slider\" min=\"0\" max=\"400\" value=\"0\" step=\"10\" class=\"quantity-slider\" data-family=\"section_c\">\n            <div class=\"slider-value-display\">0g<\/div>\n        <\/div>\n        <input type=\"hidden\" name=\"section_c_quantity\" value=\"0\" class=\"quantity-input\" data-family=\"section_c\">\n    <\/div><\/div><div class=\"vegetable-selection\">\n        <label class=\"translatable-text\" data-text-key=\"\u8981\u83dc\u55ce\uff1f\">\ud83e\udd6c \u8981\u83dc\u55ce\uff1f<span class=\"required-mark\">*<\/span><\/label>\n        <div class=\"vegetable-options\">\n            <label class=\"vegetable-option\">\n                <input type=\"radio\" name=\"vegetable_choice\" value=\"yes\" required> <span class=\"translatable-text\" data-text-key=\"Yes\">Yes<\/span>\n            <\/label>\n            <label class=\"vegetable-option\">\n                <input type=\"radio\" name=\"vegetable_choice\" value=\"no\" required checked> <span class=\"translatable-text\" data-text-key=\"No\">No<\/span>\n            <\/label>\n        <\/div>\n        \n        <!-- Improved veggie quantity options section with horizontal layout -->\n        <div class=\"veggie-quantity-options\" style=\"display: none; margin-top: 15px; padding-left: 20px;\">\n            <div class=\"veggie-label translatable-text\" data-text-key=\"\u852c\u83dc\u4efd\u91cf\">\ud83e\udd57 \u852c\u83dc\u4efd\u91cf<\/div>\n            <div class=\"veggie-quantity-radio-group\">\n                <label class=\"veggie-quantity-option\">\n                    <input type=\"radio\" name=\"veggie_quantity\" value=\"100\" data-veggie-id=\"5497\" \n            data-veggie-price=\"8\"\n            data-veggie-kcal=\"37\"\n            data-veggie-carbs=\"8\"\n            data-veggie-protein=\"2.15\"\n            data-veggie-fat=\"0.4\"\n            data-veggie-image=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/02\/\u897f\u862d\u82b1-150x150.png\" data-quantity=\"100\" checked> 100g\n                <\/label>\n                <label class=\"veggie-quantity-option\">\n                    <input type=\"radio\" name=\"veggie_quantity\" value=\"150\" data-veggie-id=\"5497\" \n            data-veggie-price=\"8\"\n            data-veggie-kcal=\"37\"\n            data-veggie-carbs=\"8\"\n            data-veggie-protein=\"2.15\"\n            data-veggie-fat=\"0.4\"\n            data-veggie-image=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/02\/\u897f\u862d\u82b1-150x150.png\" data-quantity=\"150\"> 150g\n                <\/label>\n                <label class=\"veggie-quantity-option\">\n                    <input type=\"radio\" name=\"veggie_quantity\" value=\"200\" data-veggie-id=\"5497\" \n            data-veggie-price=\"8\"\n            data-veggie-kcal=\"37\"\n            data-veggie-carbs=\"8\"\n            data-veggie-protein=\"2.15\"\n            data-veggie-fat=\"0.4\"\n            data-veggie-image=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/02\/\u897f\u862d\u82b1-150x150.png\" data-quantity=\"200\"> 200g\n                <\/label>\n                <label class=\"veggie-quantity-option\">\n                    <input type=\"radio\" name=\"veggie_quantity\" value=\"250\" data-veggie-id=\"5497\" \n            data-veggie-price=\"8\"\n            data-veggie-kcal=\"37\"\n            data-veggie-carbs=\"8\"\n            data-veggie-protein=\"2.15\"\n            data-veggie-fat=\"0.4\"\n            data-veggie-image=\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2025\/02\/\u897f\u862d\u82b1-150x150.png\" data-quantity=\"250\"> 250g\n                <\/label>\n            <\/div>\n        <\/div>\n\n        <!-- New Veggie Type Options section with \u96dc\u83dc checked by default and additional options -->\n        <div class=\"veggie-type-options\" style=\"display: none; margin-top: 15px; padding-left: 20px;\">\n            <div class=\"veggie-type-label translatable-text\" data-text-key=\"\u852c\u83dc\u9078\u64c7\uff08\u90781-3\u7a2e\uff0c\u5982\u5eda\u623f\u7f3a\u8ca8\u5c07\u4ee5\u5176\u4ed6\u852c\u83dc\u4ee3\u66ff\uff09\">\ud83c\udf31 \u852c\u83dc\u9078\u64c7\uff08\u90781-3\u7a2e\uff0c\u5982\u5eda\u623f\u7f3a\u8ca8\u5c07\u4ee5\u5176\u4ed6\u852c\u83dc\u4ee3\u66ff\uff09<\/div>\n            <div class=\"veggie-type-checkbox-group\">\n                <label class=\"veggie-type-option\">\n                    <input type=\"checkbox\" name=\"veggie_type[]\" value=\"\u96dc\u83dc\" id=\"veggie_type_mixed\" checked> <span class=\"translatable-text\" data-text-key=\"\u96dc\u83dc\">\ud83e\udd57 \u96dc\u83dc<\/span>\n                <\/label>\n                <label class=\"veggie-type-option\">\n                    <input type=\"checkbox\" name=\"veggie_type[]\" value=\"\u897f\u862d\u82b1\" class=\"veggie_type_specific\"> <span class=\"translatable-text\" data-text-key=\"\u897f\u862d\u82b1\">\ud83e\udd66 \u897f\u862d\u82b1<\/span>\n                <\/label>\n                <label class=\"veggie-type-option\">\n                    <input type=\"checkbox\" name=\"veggie_type[]\" value=\"\u6930\u83dc\u82b1\" class=\"veggie_type_specific\"> <span class=\"translatable-text\" data-text-key=\"\u6930\u83dc\u82b1\">\ud83e\udd6c \u6930\u83dc\u82b1<\/span>\n                <\/label>\n                <label class=\"veggie-type-option\">\n                    <input type=\"checkbox\" name=\"veggie_type[]\" value=\"\u7fe0\u8089\u74dc\" class=\"veggie_type_specific\"> <span class=\"translatable-text\" data-text-key=\"\u7fe0\u8089\u74dc\">\ud83e\udd52 \u7fe0\u8089\u74dc<\/span>\n                <\/label>\n                <label class=\"veggie-type-option\">\n                    <input type=\"checkbox\" name=\"veggie_type[]\" value=\"\u5357\u74dc\" class=\"veggie_type_specific\"> <span class=\"translatable-text\" data-text-key=\"\u5357\u74dc\">\ud83c\udf83 \u5357\u74dc<\/span>\n                <\/label>\n                <!-- New vegetable options -->\n                <label class=\"veggie-type-option\">\n                    <input type=\"checkbox\" name=\"veggie_type[]\" value=\"\u71c8\u7c60\u6912\" class=\"veggie_type_specific\"> <span class=\"translatable-text\" data-text-key=\"\u71c8\u7c60\u6912\">\ud83c\udf36\ufe0f \u71c8\u7c60\u6912<\/span>\n                <\/label>\n                <label class=\"veggie-type-option\">\n                    <input type=\"checkbox\" name=\"veggie_type[]\" value=\"\u7518\u7b4d\" class=\"veggie_type_specific\"> <span class=\"translatable-text\" data-text-key=\"\u7518\u7b4d\">\ud83e\udd55 \u7518\u7b4d<\/span>\n                <\/label>\n                <label class=\"veggie-type-option\">\n                    <input type=\"checkbox\" name=\"veggie_type[]\" value=\"\u8eca\u5398\u8304\" class=\"veggie_type_specific\"> <span class=\"translatable-text\" data-text-key=\"\u8eca\u5398\u8304\">\ud83c\udf45 \u8eca\u5398\u8304<\/span>\n                <\/label>\n                <label class=\"veggie-type-option\">\n                    <input type=\"checkbox\" name=\"veggie_type[]\" value=\"\u674f\u9b91\u83c7\" class=\"veggie_type_specific\"> <span class=\"translatable-text\" data-text-key=\"\u674f\u9b91\u83c7\">\ud83c\udf44 \u674f\u9b91\u83c7<\/span>\n                <\/label>\n            <\/div>\n        <\/div>\n    <\/div><div class=\"favorite-selection\">\n        <label class=\"translatable-text\" data-text-key=\"\u5275\u9020\u81ea\u5df1\u7684\u6536\u85cf?\">\u2b50 \u5275\u9020\u81ea\u5df1\u7684\u6536\u85cf?<span class=\"required-mark\">*<\/span><\/label>\n        <div class=\"favorite-options\">\n            <label class=\"favorite-option\">\n                <input type=\"radio\" name=\"favorite_choice\" value=\"yes\" required> Yes\n            <\/label>\n            <label class=\"favorite-option\">\n                <input type=\"radio\" name=\"favorite_choice\" value=\"no\" required checked> No\n            <\/label>\n        <\/div>\n        <div class=\"favorite-name-input\" style=\"display: none;\">\n            <input type=\"text\" \n                   id=\"favorite_name\" \n                   name=\"favorite_name\" \n                   placeholder=\"Enter a name for your own selection\"\n                   maxlength=\"50\">\n            <p class=\"description\">\ud83d\udcdd Save this combination for quick selection next time<br><span style=\"font-size: 12px;\">\u4fdd\u5b58\u9019\u500b\u7d44\u5408\uff0c\u4ee5\u4fbf\u4e0b\u6b21\u5feb\u901f\u9078\u64c7<\/span><\/p>\n        <\/div>\n    <\/div><div class=\"name-tag-field-container\">\n        <!-- Name Tag field -->\n        <div class=\"meal-label-field\">\n            <label for=\"meal_label\">\ud83c\udff7\ufe0f Name Tag (optional)<\/label>\n            <input type=\"text\" \n                   id=\"meal_label\" \n                   name=\"meal_label\" \n                   placeholder=\"Enter name (e.g., John, Mary)\" \n                   maxlength=\"20\">\n            <p class=\"description\">\ud83d\udc65 Add a name tag (max 20 chars) to identify whose meal is whose in group orders<br><span style=\"font-size: 12px;\">\ud83d\udcdd \u5728\u5718\u9ad4\u8a02\u55ae\u4e2d\u6dfb\u52a0\u540d\u5b57\u6a19\u7c64\uff08\u6700\u591a20\u500b\u5b57\u7b26\uff09\u4ee5\u8b58\u5225\u9910\u98df\u6240\u5c6c<\/span><\/p>\n        <\/div>\n    <\/div><div class=\"meal-summary\">\n        <h3>Meal Summary<\/h3>\n        <p class=\"total-price\">Total Price: <span>$<span id=\"total-price\">0.00<\/span><\/span><\/p>\n        <div class=\"nutrition-facts\">\n            <h4>Estimated Nutrition Facts<\/h4>\n            <p>Total Calorie: <span><span id=\"total-kcal\">0<\/span> (kcal)<\/span><\/p>\n            <p>Total Carbs: <span><span id=\"total-carbs\">0<\/span>g<\/span><\/p>\n            <p>Total Protein: <span><span id=\"total-protein\">0<\/span>g<\/span><\/p>\n            <p>Total Fat: <span><span id=\"total-fat\">0<\/span>g<\/span><\/p>\n        <\/div>\n        <div id=\"ajax-response\" class=\"ajax-response\"><\/div>\n        <div id=\"price-warning\" style=\"display: none;\">\n            Minimum order amount is $40\n        <\/div>\n        \n        <button type=\"button\" id=\"ajax-add-to-cart\" class=\"add-to-cart-btn\">Add to Cart<\/button>\n    <\/div><input type=\"hidden\" name=\"trp-form-language\" value=\"en\"\/><\/form><div class=\"floating-price-banner\">\n        <div class=\"banner-info\">\n            <div class=\"banner-price\">Total: $<span id=\"banner-price\">0.00<\/span><\/div>\n            <div class=\"banner-nutrition\">\n                <span class=\"banner-item\"><span id=\"banner-kcal\">0<\/span> kcal<\/span> | \n                <span class=\"banner-item\">C: <span id=\"banner-carbs\">0<\/span>g<\/span> | \n                <span class=\"banner-item\">P: <span id=\"banner-protein\">0<\/span>g<\/span> | \n                <span class=\"banner-item\">F: <span id=\"banner-fat\">0<\/span>g<\/span>\n            <\/div>\n        <\/div>\n        <button type=\"button\" class=\"view-details\">View Details<\/button>\n    <\/div><\/div><script>\n    \/\/ Utility functions\n    function updateSliderValue(slider) {\n        const family = slider.dataset.family;\n        const select = document.querySelector(\".product-select[data-family=\" + \"\\'\" + family + \"\\'\" + \"]\");\n        const selectedOption = select.options[select.selectedIndex];\n        const unitType = selectedOption.dataset.unitType;\n        const valueDisplay = slider.nextElementSibling;\n        const hiddenInput = document.querySelector(\"input[name=\" + \"\\'\" + family + \"_quantity\\'\" + \"]\");\n        const value = parseInt(slider.value);\n        \n        \/\/ Update the hidden input value\n        hiddenInput.value = value;\n        \n        \/\/ Update the display text with appropriate unit\n        valueDisplay.textContent = value + (unitType === \"piece\" ? \" pcs\" : \"g\");\n        \n        \/\/ Update the calculations\n        updateCalculations();\n    }\n\n    function setSliderAttributes(slider, unitType) {\n        \/\/ Get the select element and selected option for this slider\n        const family = slider.dataset.family;\n        const select = document.querySelector(\".product-select[data-family=\" + \"\\'\" + family + \"\\'\" + \"]\");\n        const selectedOption = select.options[select.selectedIndex];\n        const unitStep = parseInt(selectedOption.dataset.unitStep) || (unitType === \"piece\" ? 1 : 10);\n        \n        \/\/ Set the slider max based on unit type\n        if (unitType === \"piece\") {\n            slider.max = 10;\n            slider.classList.add(\"piece-based\");\n        } else {\n            slider.max = 400;\n            slider.classList.remove(\"piece-based\");\n        }\n        \n        \/\/ Set the step value based on the product\\'s unit step setting\n        slider.step = unitStep;\n        \n        \/\/ Reset to zero when changing product type\n        slider.value = 0;\n        \n        \/\/ Update the display\n        updateSliderValue(slider);\n    }\n\n    function showAjaxResponse(message, type) {\n        const responseDiv = document.getElementById(\"ajax-response\");\n        responseDiv.textContent = message;\n        responseDiv.className = \"ajax-response \" + type;\n        responseDiv.style.display = \"block\";\n        \n        setTimeout(() => {\n            responseDiv.style.display = \"none\";\n        }, 3000);\n    }\n\n    function updateNutritionDisplay() {\n        \/\/ Get existing total price calculation code\n        const totalPriceElement = document.getElementById('total-price');\n        const totalPrice = parseFloat(totalPriceElement.getAttribute('data-total-price'));\n        \n        \/\/ Apply strikethrough style for prices over $100\n        if (totalPrice > 100) {\n            totalPriceElement.classList.add('price-strikethrough');\n        } else {\n            totalPriceElement.classList.remove('price-strikethrough');\n        }\n        \n        \/\/ If you have a preview section that also shows the price, apply the same logic there\n        const previewPriceElement = document.querySelector('.preview-price');\n        if (previewPriceElement) {\n            if (totalPrice > 100) {\n                previewPriceElement.classList.add('price-strikethrough');\n            } else {\n                previewPriceElement.classList.remove('price-strikethrough');\n            }\n        }\n    }\n\n    function updateCalculations() {\n        let totalPrice = 0;\n        let totalKcal = 0;\n        let totalCarbs = 0;\n        let totalProtein = 0;\n        let totalFat = 0;\n\n        document.querySelectorAll(\".product-select\").forEach(function(select) {\n            const family = select.dataset.family;\n            const quantity = parseInt(document.querySelector(\"input[name='\" + family + \"_quantity']\").value) || 0;\n            const option = select.options[select.selectedIndex];\n            \n            if (quantity > 0) {\n                const hundreds = quantity \/ 100;\n                totalPrice += parseFloat(option.dataset.price) * hundreds;\n                totalKcal += parseFloat(option.dataset.kcal) * hundreds;\n                totalCarbs += parseFloat(option.dataset.carbs) * hundreds;\n                totalProtein += parseFloat(option.dataset.protein) * hundreds;\n                totalFat += parseFloat(option.dataset.fat) * hundreds;\n            }\n        });\n\n        \/\/ Updated veggie calculation that checks both the yes\/no choice AND the quantity\n        const veggieChoice = document.querySelector(\"input[name='vegetable_choice']:checked\");\n        if (veggieChoice && veggieChoice.value === \"yes\") {\n            const veggieQuantity = document.querySelector(\"input[name='veggie_quantity']:checked\");\n            if (veggieQuantity) {\n                const quantityMultiplier = parseInt(veggieQuantity.value) \/ 100;\n                totalPrice += parseFloat(veggieQuantity.dataset.veggiePrice) * quantityMultiplier;\n                totalKcal += parseFloat(veggieQuantity.dataset.veggieKcal) * quantityMultiplier;\n                totalCarbs += parseFloat(veggieQuantity.dataset.veggieCarbs) * quantityMultiplier;\n                totalProtein += parseFloat(veggieQuantity.dataset.veggieProtein) * quantityMultiplier;\n                totalFat += parseFloat(veggieQuantity.dataset.veggieFat) * quantityMultiplier;\n            }\n        }\n\n        \/\/ Store the total price as a data attribute for easy access\n        const totalPriceElement = document.getElementById(\"total-price\");\n        totalPriceElement.setAttribute('data-total-price', totalPrice.toFixed(2));\n        totalPriceElement.textContent = totalPrice.toFixed(2);\n        \n        \/\/ Apply strikethrough style for prices over $100 and add discounted price\n        if (totalPrice > 100) {\n            totalPriceElement.classList.add('price-strikethrough');\n            \n            \/\/ Calculate the discounted price (90% of original)\n            const discountedPrice = totalPrice * 0.9;\n            \n            \/\/ If a discount price element already exists, update it. Otherwise, create one.\n            let discountedElement = document.getElementById('discounted-price');\n            if (!discountedElement) {\n                discountedElement = document.createElement('span');\n                discountedElement.id = 'discounted-price';\n                discountedElement.className = 'discounted-price';\n                totalPriceElement.parentNode.appendChild(document.createTextNode(' '));\n                totalPriceElement.parentNode.appendChild(discountedElement);\n            }\n            discountedElement.textContent = '$' + discountedPrice.toFixed(2);\n            discountedElement.style.display = 'inline';\n        } else {\n            totalPriceElement.classList.remove('price-strikethrough');\n            \n            \/\/ Hide the discounted price element if it exists\n            const discountedElement = document.getElementById('discounted-price');\n            if (discountedElement) {\n                discountedElement.style.display = 'none';\n            }\n        }\n\n        document.getElementById(\"total-kcal\").textContent = Math.round(totalKcal);\n        document.getElementById(\"total-carbs\").textContent = Math.round(totalCarbs);\n        document.getElementById(\"total-protein\").textContent = Math.round(totalProtein);\n        document.getElementById(\"total-fat\").textContent = Math.round(totalFat);\n\n        \/\/ Update add to cart button based on price\n        const addToCartBtn = document.getElementById(\"ajax-add-to-cart\");\n        if (totalPrice < 40) {\n            addToCartBtn.disabled = true;\n            addToCartBtn.classList.add(\"disabled\");\n            addToCartBtn.title = \"Minimum order amount is $40\";\n            document.getElementById(\"price-warning\").style.display = \"block\";\n        } else {\n            addToCartBtn.disabled = false;\n            addToCartBtn.classList.remove(\"disabled\");\n            addToCartBtn.title = \"\";\n            document.getElementById(\"price-warning\").style.display = \"none\";\n        }\n        \n        \/\/ Update floating banner if it exists\n        if (document.getElementById(\"banner-price\")) {\n            const bannerPriceElement = document.getElementById(\"banner-price\");\n            bannerPriceElement.textContent = totalPrice.toFixed(2);\n            \n            \/\/ Also apply the strikethrough to the banner price and add discounted price\n            if (totalPrice > 100) {\n                bannerPriceElement.classList.add('price-strikethrough');\n                \n                \/\/ Calculate discounted price for banner\n                const discountedPrice = totalPrice * 0.9;\n                \n                \/\/ Add or update discounted price in banner\n                let bannerDiscountedElement = document.getElementById('banner-discounted-price');\n                if (!bannerDiscountedElement) {\n                    bannerDiscountedElement = document.createElement('span');\n                    bannerDiscountedElement.id = 'banner-discounted-price';\n                    bannerDiscountedElement.className = 'discounted-price';\n                    bannerPriceElement.parentNode.appendChild(document.createTextNode(' '));\n                    bannerPriceElement.parentNode.appendChild(bannerDiscountedElement);\n                }\n                bannerDiscountedElement.textContent = '$' + discountedPrice.toFixed(2);\n                bannerDiscountedElement.style.display = 'inline';\n            } else {\n                bannerPriceElement.classList.remove('price-strikethrough');\n                \n                \/\/ Hide banner discounted price\n                const bannerDiscountedElement = document.getElementById('banner-discounted-price');\n                if (bannerDiscountedElement) {\n                    bannerDiscountedElement.style.display = 'none';\n                }\n            }\n            \n            document.getElementById(\"banner-kcal\").textContent = Math.round(totalKcal);\n            document.getElementById(\"banner-carbs\").textContent = Math.round(totalCarbs);\n            document.getElementById(\"banner-protein\").textContent = Math.round(totalProtein);\n            document.getElementById(\"banner-fat\").textContent = Math.round(totalFat);\n        }\n    }\n\n    \/\/ Event Listeners\n    document.addEventListener(\"DOMContentLoaded\", function() {\n        \/\/ Random Blind Meal UI handlers\n        const randomTrigger = document.querySelector('.random-blind-trigger');\n        const randomModal = document.getElementById('random-blind-modal');\n        const randomClose = randomModal ? randomModal.querySelector('.random-modal-close') : null;\n        const randomGoBtn = document.getElementById('random-blind-go');\n        const randomResult = document.getElementById('random-blind-result');\n\n        if (randomTrigger && randomModal) {\n            randomTrigger.addEventListener('click', function() {\n                if (!randomTrigger.classList.contains('no-anim')) {\n                    randomTrigger.classList.add('clicked');\n                    setTimeout(function(){ randomTrigger.classList.remove('clicked'); }, 650);\n                }\n                randomModal.style.display = 'block';\n                if (randomResult) {\n                    randomResult.style.display = 'none';\n                    randomResult.innerHTML = '';\n                }\n                var loading = document.getElementById('random-loading');\n                if (loading) { loading.style.display = 'none'; }\n            });\n        }\n        if (randomClose && randomModal) {\n            randomClose.addEventListener('click', function() {\n                randomModal.style.display = 'none';\n            });\n        }\n        window.addEventListener('click', function(e) {\n            if (e.target === randomModal) {\n                randomModal.style.display = 'none';\n            }\n        });\n\n        \/\/ Populate ranges when filter type changes\n        function buildOptions(stepStart, stepEnd, stepSize) {\n            const options = [];\n            for (let s = stepStart; s < stepEnd; s += stepSize) {\n                const e = s + stepSize;\n                options.push(`${s}-${e}`);\n            }\n            return options;\n        }\n        function populateRanges() {\n            const type = document.getElementById('filter-type').value;\n            const rangeEl = document.getElementById('filter-range');\n            rangeEl.innerHTML = '';\n            const add = (val, label) => {\n                const opt = document.createElement('option');\n                opt.value = val; opt.textContent = label; rangeEl.appendChild(opt);\n            };\n            if (!type) { add('', '\u8acb\u5148\u9078\u64c7\u7be9\u9078\u985e\u5225'); return; }\n            add('', '\u4e0d\u4f7f\u7528\u7bc4\u570d');\n            let options = [];\n            if (type === 'kcal') {\n                options = buildOptions(300, 800, 50); \/\/ 300-350 ... 750-800\n                options.forEach(r => add(r, `${r} kcal`));\n            } else if (type === 'carbs' || type === 'protein') {\n                options = buildOptions(20, 80, 5); \/\/ 20-25 ... 75-80\n                options.forEach(r => add(r, `${r} g`));\n            }\n        }\n        const filterTypeEl = document.getElementById('filter-type');\n        if (filterTypeEl) {\n            filterTypeEl.addEventListener('change', populateRanges);\n        }\n        \/\/ Initial populate if default is set\n        if (filterTypeEl && filterTypeEl.value) populateRanges();\n\n        if (randomGoBtn) {\n            randomGoBtn.addEventListener('click', function() {\n                randomGoBtn.disabled = true;\n                randomGoBtn.textContent = '\u62bd\u53d6\u4e2d...';\n                const filterType = document.getElementById('filter-type') ? document.getElementById('filter-type').value : '';\n                const filterRange = document.getElementById('filter-range') ? document.getElementById('filter-range').value : '';\n                const loading = document.getElementById('random-loading');\n                const effects = document.getElementById('random-effects-overlay');\n                if (loading) { loading.style.display = 'flex'; }\n                if (effects) { effects.style.display = 'block'; effects.style.opacity = '1'; }\n                const startedAt = Date.now();\n                jQuery.ajax({\n                    url: (typeof wc_add_to_cart_params !== 'undefined' ? wc_add_to_cart_params.ajax_url : ajaxurl),\n                    type: 'POST',\n                    data: { action: 'development_random_blind_meal', filter_type: filterType, range: filterRange },\n                    success: function(resp) {\n                        const finish = function(renderFn) {\n                            const elapsed = Date.now() - startedAt;\n                            const minShow = 1200; \/\/ ms\n                            const wait = Math.max(minShow - elapsed, 0);\n                            setTimeout(function(){\n                                if (loading) { loading.style.display = 'none'; }\n                                if (effects) { effects.style.opacity = '0'; setTimeout(function(){ effects.style.display = 'none'; }, 300); }\n                                \/\/ Spawn particle burst upon completion\n                                const modal = document.getElementById('random-effects-overlay');\n                                if (modal) {\n                                    \/\/ Double particle burst for mobile\n                                    const particleCount = window.innerWidth <= 480 ? 36 : 24;\n                                    for (let i = 0; i < particleCount; i++) {\n                                        const p = document.createElement('div');\n                                        p.className = 'particle';\n                                        const angle = (Math.PI * 2) * (i \/ particleCount);\n                                        const radius = 140 + Math.random()*120;\n                                        p.style.setProperty('--dx', Math.cos(angle) * radius + 'px');\n                                        p.style.setProperty('--dy', Math.sin(angle) * radius + 'px');\n                                        modal.appendChild(p);\n                                        setTimeout(()=>{ p.remove(); }, 1000);\n                                    }\n                                    \/\/ Multiple lightning arcs - more strikes for dramatic effect\n                                    const lightning = modal.querySelector('.lightning');\n                                    if (lightning) {\n                                        const lightningCount = window.innerWidth <= 480 ? 4 : 3;\n                                        for (let l = 0; l < lightningCount; l++) {\n                                            setTimeout(()=>{\n                                                const svg = document.createElementNS('http:\/\/www.w3.org\/2000\/svg','svg');\n                                                const path = document.createElementNS('http:\/\/www.w3.org\/2000\/svg','path');\n                                                \/\/ Enhanced zig-zag bolt path with more segments\n                                                const w = window.innerWidth, h = window.innerHeight;\n                                                const x0 = w*0.15 + Math.random()*w*0.7, y0 = h*0.1;\n                                                const x1 = x0 + (Math.random()*120-60), y1 = y0 + 120;\n                                                const x2 = x1 + (Math.random()*120-60), y2 = y1 + 120;\n                                                const x3 = x2 + (Math.random()*120-60), y3 = y2 + 120;\n                                                const x4 = x3 + (Math.random()*120-60), y4 = y3 + 120;\n                                                path.setAttribute('d', `M ${x0},${y0} L ${x1},${y1} L ${x2},${y2} L ${x3},${y3} L ${x4},${y4}`);\n                                                svg.appendChild(path);\n                                                lightning.appendChild(svg);\n                                                setTimeout(()=>{ svg.remove(); }, 630);\n                                            }, l * 120);\n                                        }\n                                    }\n                                }\n                                if (typeof renderFn === 'function') { renderFn(); }\n                            }, wait);\n                        };\n                        if (resp && resp.success && resp.data) {\n                            finish(function(){\n                                const p = resp.data;\n                                const img = p.image_url ? '<div class=\"preview\"><img decoding=\"async\" src=\"' + p.image_url + '\" alt=\"' + p.name + '\" \/><\/div>' : '';\n                                randomResult.innerHTML = '<div class=\"random-card\">' + img + '<div class=\"info\"><div class=\"name\">' + p.name + '<\/div>' +\n                                    '<div>\u50f9\u683c\uff1a$' + p.price + '<\/div><\/div>' +\n                                    '<button type=\"button\" id=\"random-add-to-cart\">\u52a0\u5165\u8cfc\u7269\u8eca<\/button>' +\n                                    '<\/div>';\n                                randomResult.style.display = 'block';\n\n                                const addBtn = document.getElementById('random-add-to-cart');\n                                if (addBtn) {\n                                    addBtn.addEventListener('click', function() {\n                                        addBtn.disabled = true; addBtn.textContent = '\u52a0\u5165\u4e2d...';\n                                        jQuery.ajax({\n                                            url: (typeof wc_add_to_cart_params !== 'undefined' ? wc_add_to_cart_params.ajax_url : ajaxurl),\n                                            type: 'POST',\n                                            data: { action: 'development_random_blind_add_to_cart', product_id: p.id },\n                                            success: function(res) {\n                                                try {\n                                                    if (res && res.fragments) {\n                                                        jQuery.each(res.fragments, function(key, value) { jQuery(key).replaceWith(value); });\n                                                        jQuery(document.body).trigger('added_to_cart', [res.fragments, res.cart_hash, addBtn]);\n                                                    } else {\n                                                        jQuery(document.body).trigger('wc_fragment_refresh');\n                                                    }\n                                                } catch(e) {}\n                                                addBtn.textContent = '\u5df2\u52a0\u5165\uff01';\n                                                setTimeout(function(){ addBtn.disabled = false; addBtn.textContent = '\u52a0\u5165\u8cfc\u7269\u8eca'; }, 1200);\n                                            },\n                                            error: function() {\n                                                addBtn.disabled = false; addBtn.textContent = '\u52a0\u5165\u8cfc\u7269\u8eca';\n                                                alert('\u52a0\u5165\u8cfc\u7269\u8eca\u5931\u6557\uff0c\u8acb\u7a0d\u5f8c\u518d\u8a66\u3002');\n                                            }\n                                        });\n                                    });\n                                }\n                            });\n                        } else {\n                            finish(function(){\n                                randomResult.innerHTML = '<div style=\"color:#c00;\">\u672a\u627e\u5230\u7b26\u5408\u689d\u4ef6\u7684\u9910\u9ede\u3002<\/div>';\n                                randomResult.style.display = 'block';\n                            });\n                        }\n                    },\n                    error: function() {\n                        const elapsed = Date.now() - startedAt;\n                        const minShow = 1200;\n                        const wait = Math.max(minShow - elapsed, 0);\n                        setTimeout(function(){\n                            if (loading) { loading.style.display = 'none'; }\n                            if (effects) { effects.style.opacity = '0'; setTimeout(function(){ effects.style.display = 'none'; }, 300); }\n                            randomResult.innerHTML = '<div style=\"color:#c00;\">\u8acb\u6c42\u5931\u6557\uff0c\u8acb\u7a0d\u5f8c\u518d\u8a66\u3002<\/div>';\n                            randomResult.style.display = 'block';\n                        }, wait);\n                    },\n                    complete: function() {\n                        randomGoBtn.disabled = false;\n                        randomGoBtn.textContent = '\u62bd\u53d6\u96a8\u6a5f\u9910\u9ede';\n                    }\n                });\n            });\n        }\n        \/\/ Initialize sliders\n        document.querySelectorAll(\".quantity-slider\").forEach(function(slider) {\n            const family = slider.dataset.family;\n            const select = document.querySelector(\".product-select[data-family='\" + family + \"']\");\n            const selectedOption = select.options[select.selectedIndex];\n            const unitType = selectedOption.dataset.unitType;\n            \n            \/\/ Set initial attributes based on unit type\n            setSliderAttributes(slider, unitType);\n            \n            \/\/ Add event listener for slider changes\n            slider.addEventListener(\"input\", function() {\n                updateSliderValue(this);\n            });\n        });\n\n        \/\/ Product selection changes\n        document.querySelectorAll(\".product-select\").forEach(function(select) {\n            select.addEventListener(\"change\", function() {\n                const family = this.dataset.family;\n                const slider = document.querySelector(\".quantity-slider[data-family='\" + family + \"']\");\n                const selectedOption = this.options[this.selectedIndex];\n                const unitType = selectedOption.dataset.unitType;\n                \n                \/\/ Update slider attributes when product changes\n                setSliderAttributes(slider, unitType);\n            });\n        });\n\n        \/\/ Vegetable selection\n        document.querySelectorAll(\"input[name='vegetable_choice']\").forEach(function(radio) {\n            radio.addEventListener(\"change\", updateCalculations);\n        });\n\n        \/\/ Add to cart button\n        document.getElementById(\"ajax-add-to-cart\").addEventListener(\"click\", function(e) {\n            e.preventDefault();\n            \n            const totalPrice = parseFloat(document.getElementById(\"total-price\").textContent);\n            if (totalPrice < 40) {\n                showAjaxResponse(\"Minimum order amount is $40\", \"error\");\n                return;\n            }\n\n            \/\/ Get all form data\n            const formData = new FormData();\n            const carbsSelect = document.querySelector(\"select[name='product_dropdown_carbs']\");\n            const meatSelect = document.querySelector(\"select[name='product_dropdown_meat']\");\n            const sectionCSelect = document.querySelector(\"select[name='product_dropdown_section_c']\");\n            const carbsQty = document.querySelector(\"input[name='carbs_quantity']\").value;\n            const meatQty = document.querySelector(\"input[name='meat_quantity']\").value;\n            const sectionCQty = document.querySelector(\"input[name='section_c_quantity']\").value;\n            const vegChoice = document.querySelector(\"input[name='vegetable_choice']:checked\");\n            \n            formData.append(\"action\", \"development_ajax_add_to_cart\");\n            formData.append(\"nonce\", document.querySelector(\"#development_nonce\").value);\n            formData.append(\"carbs_product_id\", carbsSelect.value);\n            formData.append(\"meat_product_id\", meatSelect.value);\n            formData.append(\"section_c_product_id\", sectionCSelect.value);\n            formData.append(\"carbs_quantity\", carbsQty);\n            formData.append(\"meat_quantity\", meatQty);\n            formData.append(\"section_c_quantity\", sectionCQty);\n            formData.append(\"vegetable_choice\", vegChoice ? vegChoice.value : \"no\");\n            \n            \/\/ Add language parameter - use the UI-selected language\n            \/\/ This is the language selected by the user in the UI, not the HTML lang attribute\n            const uiLang = window.currentUILanguage || \"zh\";\n            formData.append(\"language\", uiLang);\n            \n            \/\/ Add veggie quantity data if yes is selected\n            if (vegChoice && vegChoice.value === \"yes\") {\n                const vegQuantity = document.querySelector(\"input[name='veggie_quantity']:checked\");\n                formData.append(\"veggie_quantity\", vegQuantity ? vegQuantity.value : \"100\");\n                \n                \/\/ Add veggie types selection\n                const selectedVeggieTypes = [];\n                document.querySelectorAll(\"input[name='veggie_type[]']:checked\").forEach(function(checkbox) {\n                    selectedVeggieTypes.push(checkbox.value);\n                });\n                formData.append(\"veggie_types\", JSON.stringify(selectedVeggieTypes));\n            }\n            \n            \/\/ Add favorite choice handling\n            const favoriteChoice = document.querySelector(\"input[name='favorite_choice']:checked\");\n            if (favoriteChoice.value === \"yes\") {\n                const favoriteName = document.getElementById(\"favorite_name\").value.trim();\n                if (!favoriteName) {\n                    showAjaxResponse(\"Please enter a name for your selection\", \"error\");\n                    return;\n                }\n            }\n\n            formData.append(\"favorite_choice\", favoriteChoice.value);\n            if (favoriteChoice.value === \"yes\") {\n                formData.append(\"favorite_name\", document.getElementById(\"favorite_name\").value.trim());\n            }\n            \n            \/\/ Add meal label if provided\n            const mealLabel = document.getElementById(\"meal_label\").value.trim();\n            formData.append(\"meal_label\", mealLabel);\n\n            \/\/ Store current favorite selection state\n            const currentFavoriteChoice = favoriteChoice.value;\n            const currentFavoriteName = document.getElementById(\"favorite_name\").value.trim();\n\n            \/\/ Add loading state\n            const addToCartBtn = document.getElementById(\"ajax-add-to-cart\");\n            addToCartBtn.classList.add(\"loading\");\n\n            jQuery.ajax({\n                url: wc_add_to_cart_params.ajax_url,\n                type: \"POST\",\n                data: formData,\n                processData: false,\n                contentType: false,\n                success: function(response) {\n                    if (response.success) {\n                        showAjaxResponse(response.data.message, \"success\");\n                        \n                        \/\/ Update cart fragments\n                        if (response.data.fragments) {\n                            jQuery.each(response.data.fragments, function(key, value) {\n                                jQuery(key).replaceWith(value);\n                            });\n                        }\n                        \n                        \/\/ Reset quantities but keep favorite selection\n                        document.querySelectorAll(\".quantity-slider\").forEach(function(slider) {\n                            slider.value = 0;\n                            updateSliderValue(slider);\n                        });\n                        \n                        document.querySelectorAll(\"input[name='vegetable_choice']\")[1].checked = true; \/\/ Set to \"No\"\n                        \/\/ Reset veggie quantity to default 100g\n                        document.querySelectorAll(\"input[name='veggie_quantity']\")[0].checked = true; \/\/ Select first option (100g)\n                        \/\/ Reset veggie type checkboxes - check \u96dc\u83dc, uncheck others\n                        document.getElementById('veggie_type_mixed').checked = true;\n                        document.querySelectorAll('.veggie_type_specific').forEach(function(checkbox) {\n                            checkbox.checked = false;\n                        });\n                        \/\/ Hide the veggie options since \"No\" is selected\n                        document.querySelector(\".veggie-quantity-options\").style.display = \"none\";\n                        document.querySelector(\".veggie-type-options\").style.display = \"none\";\n                        \n                        \/\/ Keep favorite selection if it was \"yes\"\n                        if (currentFavoriteChoice === \"yes\") {\n                            document.querySelectorAll(\"input[name='favorite_choice']\")[0].checked = true;\n                            document.getElementById(\"favorite_name\").value = currentFavoriteName;\n                            document.querySelector(\".favorite-name-input\").style.display = \"block\";\n                        }\n                        \n                        \/\/ Clear the name tag field\n                        document.getElementById(\"meal_label\").value = \"\";\n                        \n                        updateCalculations();\n                    } else {\n                        showAjaxResponse(response.data, \"error\");\n                    }\n                },\n                error: function() {\n                    showAjaxResponse(\"Error adding product to cart\", \"error\");\n                },\n                complete: function() {\n                    addToCartBtn.classList.remove(\"loading\");\n                }\n            });\n        });\n\n        \/\/ Favorite choice handling\n        document.querySelectorAll(\"input[name='favorite_choice']\").forEach(function(radio) {\n            radio.addEventListener(\"change\", function() {\n                const nameInput = document.querySelector(\".favorite-name-input\");\n                const favoriteNameField = document.getElementById(\"favorite_name\");\n                \n                if (this.value === \"yes\") {\n                    nameInput.style.display = \"block\";\n                    favoriteNameField.required = true;\n                } else {\n                    nameInput.style.display = \"none\";\n                    favoriteNameField.required = false;\n                    favoriteNameField.value = \"\";\n                }\n            });\n        });\n\n        \/\/ Handle showing\/hiding veggie quantity options\n        const veggieRadios = document.querySelectorAll(\"input[name='vegetable_choice']\");\n        const veggieQuantityOptions = document.querySelector(\".veggie-quantity-options\");\n        const veggieTypeOptions = document.querySelector(\".veggie-type-options\");\n        \n        veggieRadios.forEach(radio => {\n            radio.addEventListener(\"change\", function() {\n                if (this.value === \"yes\") {\n                    veggieQuantityOptions.style.display = \"block\";\n                    veggieTypeOptions.style.display = \"block\";\n                } else {\n                    veggieQuantityOptions.style.display = \"none\";\n                    veggieTypeOptions.style.display = \"none\";\n                }\n                updateCalculations();\n            });\n        });\n        \n        \/\/ Update calculations when veggie quantity changes\n        const veggieQuantityRadios = document.querySelectorAll(\"input[name='veggie_quantity']\");\n        veggieQuantityRadios.forEach(radio => {\n            radio.addEventListener(\"change\", updateCalculations);\n        });\n\n        \/\/ Handle veggie type checkboxes interaction\n        const mixedVeggieCheckbox = document.getElementById('veggie_type_mixed');\n        const specificVeggieCheckboxes = document.querySelectorAll('.veggie_type_specific');\n\n        \/\/ When \u96dc\u83dc is checked, uncheck all others\n        mixedVeggieCheckbox.addEventListener('change', function() {\n            if (this.checked) {\n                specificVeggieCheckboxes.forEach(checkbox => {\n                    checkbox.checked = false;\n                });\n            } else {\n                \/\/ If \u96dc\u83dc is unchecked and no others are checked, check it again\n                \/\/ (ensures at least one option is always selected)\n                let anySpecificChecked = false;\n                specificVeggieCheckboxes.forEach(cb => {\n                    if (cb.checked) anySpecificChecked = true;\n                });\n                \n                if (!anySpecificChecked) {\n                    this.checked = true;\n                }\n            }\n            updateCalculations();\n        });\n\n        \/\/ When any specific veggie is checked, uncheck \u96dc\u83dc\n        specificVeggieCheckboxes.forEach(checkbox => {\n            checkbox.addEventListener('change', function() {\n                if (this.checked) {\n                    mixedVeggieCheckbox.checked = false;\n                }\n                \n                \/\/ If no specific veggies are checked, check \u96dc\u83dc by default\n                let anySpecificChecked = false;\n                specificVeggieCheckboxes.forEach(cb => {\n                    if (cb.checked) anySpecificChecked = true;\n                });\n                \n                if (!anySpecificChecked) {\n                    mixedVeggieCheckbox.checked = true;\n                }\n                \n                updateCalculations();\n            });\n        });\n\n        updateCalculations();\n    });\n<\/script><script>\n    var ajaxurl = \"https:\/\/nutrigo.hk\/wp-admin\/admin-ajax.php\";\n    \n    \/\/ Add nonce refresh function\n    function refreshNonce() {\n        jQuery.ajax({\n            url: ajaxurl,\n            type: \"POST\",\n            data: {\n                action: \"development_refresh_nonce\"\n            },\n            success: function(response) {\n                if (response.success) {\n                    \/\/ Update the nonce field with the new nonce\n                    document.querySelector(\"#development_nonce\").value = response.data.nonce;\n                    console.log(\"Nonce refreshed successfully\");\n                }\n            }\n        });\n    }\n    \n    \/\/ Refresh nonce every 12 hours (43200000 ms)\n    setInterval(refreshNonce, 43200000);\n    \n    \/\/ Also refresh when the page is focused after being inactive\n    document.addEventListener(\"visibilitychange\", function() {\n        if (document.visibilityState === \"visible\") {\n            refreshNonce();\n        }\n    });\n    \n    \/\/ ... rest of your existing JavaScript ...\n<\/script><script>\n    document.addEventListener(\"DOMContentLoaded\", function() {\n        const banner = document.querySelector(\".floating-price-banner\");\n        const viewDetailsBtn = document.querySelector(\".floating-price-banner .view-details\");\n        const mealSummary = document.querySelector(\".meal-summary\");\n        let isMealSummaryVisible = false;\n        \n        \/\/ Function to check if meal summary is visible in viewport\n        function checkMealSummaryVisibility() {\n            const summaryRect = mealSummary.getBoundingClientRect();\n            isMealSummaryVisible = (\n                summaryRect.top >= 0 &&\n                summaryRect.bottom <= window.innerHeight\n            );\n            \n            \/\/ Toggle banner visibility\n            if (isMealSummaryVisible) {\n                banner.classList.remove(\"visible\");\n            } else {\n                banner.classList.add(\"visible\");\n            }\n        }\n        \n        \/\/ Scroll to meal summary when view details is clicked\n        viewDetailsBtn.addEventListener(\"click\", function() {\n            mealSummary.scrollIntoView({ behavior: \"smooth\" });\n        });\n        \n        \/\/ Update floating banner when calculations are updated\n        const originalUpdateCalculations = updateCalculations;\n        updateCalculations = function() {\n            originalUpdateCalculations();\n            \n            \/\/ Update banner with the same values\n            document.getElementById(\"banner-price\").textContent = \n                document.getElementById(\"total-price\").textContent;\n            document.getElementById(\"banner-kcal\").textContent = \n                document.getElementById(\"total-kcal\").textContent;\n            document.getElementById(\"banner-carbs\").textContent = \n                document.getElementById(\"total-carbs\").textContent;\n            document.getElementById(\"banner-protein\").textContent = \n                document.getElementById(\"total-protein\").textContent;\n            document.getElementById(\"banner-fat\").textContent = \n                document.getElementById(\"total-fat\").textContent;\n            \n            \/\/ Check visibility after values are updated\n            checkMealSummaryVisibility();\n        };\n        \n        \/\/ Check visibility on scroll\n        window.addEventListener(\"scroll\", checkMealSummaryVisibility);\n        \n        \/\/ Initial check\n        checkMealSummaryVisibility();\n    });\n<\/script><script>\n    document.addEventListener(\"DOMContentLoaded\", function() {\n        \/\/ ... existing code ...\n        \n        \/\/ Add this new event listener for the veggie radio buttons\n        const veggieRadios = document.querySelectorAll(\"input[name='vegetable_choice']\");\n        veggieRadios.forEach(radio => {\n            radio.addEventListener(\"change\", function() {\n                updateCalculations();\n            });\n        });\n        \n        \/\/ ... rest of your existing code ...\n    });\n<\/script><script>\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n    \/\/ Get all product dropdowns\n    const productDropdowns = document.querySelectorAll('.product-select');\n    \n    \/\/ Add change event listener to each dropdown\n    productDropdowns.forEach(dropdown => {\n        dropdown.addEventListener('change', function() {\n            \/\/ Get the selected option\n            const selectedOption = this.options[this.selectedIndex];\n            const hasAllergens = selectedOption.getAttribute('data-has-allergens') === 'true';\n            \n            \/\/ Get the parent section for placing warnings\n            const sectionContainer = this.closest('.meal-section');\n            \n            \/\/ Remove any existing allergen warnings\n            const existingWarnings = sectionContainer.querySelectorAll('.allergen-dropdown-warning');\n            existingWarnings.forEach(warning => warning.remove());\n            \n            \/\/ If the selected product has allergens, show a warning\n            if (hasAllergens) {\n                const allergenNamesZh = selectedOption.getAttribute('title').replace('\u542b\u6709\u60a8\u60f3\u8981\u907f\u514d\u7684\u98df\u6750: ', '');\n                const allergenNamesEn = selectedOption.getAttribute('data-allergen-names-en') || allergenNamesZh;\n                const currentLang = document.documentElement.getAttribute('lang') || 'zh';\n\n                \/\/ Create warning element - compact format\n                const warningDiv = document.createElement('div');\n                warningDiv.className = 'allergen-dropdown-warning compact';\n                if (currentLang === 'en') {\n                    warningDiv.innerHTML = `<strong>\u26a0\ufe0f Warning:<\/strong> This product contains ingredients you want to avoid: ${allergenNamesEn}`;\n                } else {\n                    warningDiv.innerHTML = `<strong>\u26a0\ufe0f \u6ce8\u610f\uff1a<\/strong> \u6b64\u7522\u54c1\u542b\u6709\u60a8\u60f3\u8981\u907f\u514d\u7684\u98df\u6750\uff1a${allergenNamesZh}`;\n                }\n                \n                \/\/ Insert after the dropdown but before the quantity slider\n                const quantityControl = sectionContainer.querySelector('.quantity-control');\n                this.parentNode.insertBefore(warningDiv, quantityControl);\n            }\n        });\n        \n        \/\/ Trigger the change event on page load if an option is already selected\n        if (dropdown.value) {\n            const event = new Event('change');\n            dropdown.dispatchEvent(event);\n        }\n    });\n});\n<\/script><script>\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n    \/\/ Language switcher functionality\n    const htmlElement = document.documentElement;\n    const languageToggles = document.querySelectorAll('.language-toggle');\n    \n    \/\/ Set default language based on forced language, localStorage, or fallback to Chinese\n    const storedLang = localStorage.getItem('nutrigo_language');\n    const defaultLang = window.forcedLanguage || storedLang || 'zh';\n    htmlElement.setAttribute('lang', defaultLang);\n    window.currentUILanguage = defaultLang;\n    \n    \/\/ Language toggle click handlers\n    languageToggles.forEach(toggle => {\n        toggle.addEventListener('click', function() {\n            const lang = this.getAttribute('data-lang');\n            htmlElement.setAttribute('lang', lang);\n            \/\/ Update the current UI language when toggled\n            window.currentUILanguage = lang;\n            localStorage.setItem('nutrigo_language', lang);\n            updateProductNames(lang);\n        });\n    });\n    \n    \/\/ Function to update product display names based on language\n    function updateProductNames(lang) {\n        const selects = document.querySelectorAll('.product-select');\n        \n        selects.forEach(select => {\n            const options = select.querySelectorAll('option');\n            \n            options.forEach(option => {\n                if (option.value) {\n                    if (lang === 'en') {\n                        const englishName = option.getAttribute('data-english-name');\n                        \/\/ Only change the text if English name exists\n                        if (englishName && englishName.trim() !== '') {\n                            \/\/ Store original text if not already stored\n                            if (!option.hasAttribute('data-original-text')) {\n                                option.setAttribute('data-original-text', option.textContent);\n                            }\n                            const hasAllergenFlag = option.getAttribute('data-has-allergens') === 'true';\n                            option.textContent = englishName + (hasAllergenFlag ? ' \u26a0\ufe0f' : '');\n                        }\n                    } else {\n                        \/\/ Restore original text\n                        if (option.hasAttribute('data-original-text')) {\n                            option.textContent = option.getAttribute('data-original-text');\n                        }\n                    }\n                }\n            });\n        });\n        \n        \/\/ Update UI text elements\n        updateUILanguage(lang);\n    }\n    \n    \/\/ Function to update other UI text elements based on language\n    function updateUILanguage(lang) {\n        const translations = {\n            'Select Carbs': { en: 'Select Carbs', zh: '\u9078\u64c7\u78b3\u6c34\u5316\u5408\u7269' },\n            'Select Protein': { en: 'Select Protein', zh: '\u9078\u64c7\u86cb\u767d\u8cea' },\n            'Select Section C': { en: 'Select Section C', zh: '\u9078\u64c7\u914d\u6599' },\n            'Meal Summary': { en: 'Meal Summary', zh: 'Meal Summary' },\n            'Total Price': { en: 'Total Price', zh: '\u7e3d\u50f9' },\n            'Estimated Nutrition Facts': { en: 'Estimated Nutrition Facts', zh: '\u9810\u4f30\u71df\u990a\u6210\u5206' },\n            'Total Calorie': { en: 'Total Calorie', zh: '\u7e3d\u71b1\u91cf' },\n            'Total Carbs': { en: 'Total Carbs', zh: '\u7e3d\u78b3\u6c34\u5316\u5408\u7269' },\n            'Total Protein': { en: 'Total Protein', zh: '\u7e3d\u86cb\u767d\u8cea' },\n            'Total Fat': { en: 'Total Fat', zh: '\u7e3d\u8102\u80aa' },\n            'Add to Cart': { en: 'Add to Cart', zh: '\u52a0\u5165\u8cfc\u7269\u8eca' },\n            'Yes': { en: 'Yes', zh: '\u8981' },\n            'No': { en: 'No', zh: '\u4e0d\u8981' },\n            '\u5275\u9020\u81ea\u5df1\u7684\u6536\u85cf?': { en: 'Create your own favorite?', zh: '\u5275\u9020\u81ea\u5df1\u7684\u6536\u85cf?' },\n            '\u8981\u83dc\u55ce\uff1f': { en: 'Want vegetables?', zh: '\u8981\u83dc\u55ce\uff1f' },\n            '\u852c\u83dc\u4efd\u91cf': { en: 'Vegetable Quantity', zh: '\u852c\u83dc\u4efd\u91cf' },\n            '\u852c\u83dc\u9078\u64c7\uff08\u90781-3\u7a2e\uff0c\u5982\u5eda\u623f\u7f3a\u8ca8\u5c07\u4ee5\u5176\u4ed6\u852c\u83dc\u4ee3\u66ff\uff09': { en: '\ud83c\udf31 Vegetable Selection (Choose 1-3 types, substitutions may be made if unavailable)', zh: '\ud83c\udf31 \u852c\u83dc\u9078\u64c7\uff08\u90781-3\u7a2e\uff0c\u5982\u5eda\u623f\u7f3a\u8ca8\u5c07\u4ee5\u5176\u4ed6\u852c\u83dc\u4ee3\u66ff\uff09' },\n            '\u96dc\u83dc': { en: '\ud83e\udd57 Mixed Vegetables', zh: '\ud83e\udd57 \u96dc\u83dc' },\n            '\u897f\u862d\u82b1': { en: '\ud83e\udd66 Broccoli', zh: '\ud83e\udd66 \u897f\u862d\u82b1' },\n            '\u6930\u83dc\u82b1': { en: '\ud83e\udd6c Cauliflower', zh: '\ud83e\udd6c \u6930\u83dc\u82b1' },\n            '\u7fe0\u8089\u74dc': { en: '\ud83e\udd52 Zucchini', zh: '\ud83e\udd52 \u7fe0\u8089\u74dc' },\n            '\u5357\u74dc': { en: '\ud83c\udf83 Pumpkin', zh: '\ud83c\udf83 \u5357\u74dc' },\n            '\u71c8\u7c60\u6912': { en: '\ud83c\udf36\ufe0f Bell Pepper', zh: '\ud83c\udf36\ufe0f \u71c8\u7c60\u6912' },\n            '\u7518\u7b4d': { en: '\ud83e\udd55 Carrot', zh: '\ud83e\udd55 \u7518\u7b4d' },\n            '\u8eca\u5398\u8304': { en: '\ud83c\udf45 Cherry Tomato', zh: '\ud83c\udf45 \u8eca\u5398\u8304' },\n            '\u674f\u9b91\u83c7': { en: '\ud83c\udf44 King Oyster Mushroom', zh: '\ud83c\udf44 \u674f\u9b91\u83c7' },\n            \/\/ Add more translations as needed\n        };\n        \n        \/\/ Update section titles\n        document.querySelectorAll('.meal-section h3').forEach(heading => {\n            const originalText = heading.getAttribute('data-original-text') || heading.textContent;\n            \n            \/\/ Store original text if not already stored\n            if (!heading.hasAttribute('data-original-text')) {\n                heading.setAttribute('data-original-text', originalText);\n            }\n            \n            \/\/ Update text if translation exists\n            if (translations[originalText] && translations[originalText][lang]) {\n                heading.textContent = translations[originalText][lang];\n            }\n        });\n        \n        \/\/ Update meal summary section\n        const mealSummaryHeading = document.querySelector('.meal-summary h3');\n        if (mealSummaryHeading) {\n            const originalText = mealSummaryHeading.getAttribute('data-original-text') || mealSummaryHeading.textContent;\n            \n            if (!mealSummaryHeading.hasAttribute('data-original-text')) {\n                mealSummaryHeading.setAttribute('data-original-text', originalText);\n            }\n            \n            if (translations[originalText] && translations[originalText][lang]) {\n                mealSummaryHeading.textContent = translations[originalText][lang];\n            }\n        }\n        \n        \/\/ Update other elements (add more as needed)\n        \/\/ ...\n        \n        \/\/ Handle translatable text elements with data-text-key attribute\n        document.querySelectorAll('.translatable-text[data-text-key]').forEach(element => {\n            const textKey = element.getAttribute('data-text-key');\n            if (translations[textKey] && translations[textKey][lang]) {\n                \/\/ Keep the required mark if it exists\n                const requiredMark = element.querySelector('.required-mark');\n                element.textContent = translations[textKey][lang];\n                if (requiredMark) {\n                    element.appendChild(requiredMark);\n                }\n            }\n        });\n    }\n    \n    \/\/ Initialize language display\n    updateProductNames(defaultLang);\n});\n<\/script><div id=\"game-modal-overlay\" class=\"game-modal-overlay\">\n        <div class=\"game-modal-content\" id=\"game-modal-content\">\n            <!-- Game content will be loaded here -->\n        <\/div>\n    <\/div><script>\n    jQuery(document).ready(function($) {\n        \/\/ Detect when game entrance option is selected in the dropdown\n        $(\"select[name=\\\"product_dropdown_meat\\\"]\").on(\"change\", function() {\n            if ($(this).val() === \"game_entrance\") {\n                \/\/ User selected the game entrance!\n                openGameModal();\n                \n                \/\/ Reset dropdown back to first option (so they can select game again later)\n                setTimeout(function() {\n                    $(\"select[name=\\\"product_dropdown_meat\\\"]\").prop(\"selectedIndex\", 0);\n                }, 100);\n            }\n        });\n        \n        \/\/ Function to open game modal\n        function openGameModal() {\n            const modal = $(\"#game-modal-overlay\");\n            const modalContent = $(\"#game-modal-content\");\n            \n            \/\/ Show loading indicator\n            modalContent.html(\"<div style=\\\"text-align: center; padding: 60px;\\\"><h2>\ud83c\udfae Loading Game...<\/h2><p>Please wait...<\/p><\/div>\");\n            modal.addClass(\"active\");\n            \n            \/\/ Load game content via AJAX\n            $.ajax({\n                url: ajaxurl,\n                type: \"POST\",\n                data: {\n                    action: \"load_game_content\"\n                },\n                success: function(response) {\n                    if (response.success) {\n                        modalContent.html(response.data.content);\n                        \n                        \/\/ Load CSS if not already loaded\n                        if (!$(\"#development-game-css\").length) {\n                            $(\"<link>\", {\n                                id: \"development-game-css\",\n                                rel: \"stylesheet\",\n                                type: \"text\/css\",\n                                href: response.data.game_css_url\n                            }).appendTo(\"head\");\n                        }\n                        \n                        \/\/ Wait for scripts to load, then manually trigger game initialization\n                        setTimeout(function() {\n                            \/\/ Trigger the game initialization by dispatching a custom event\n                            if ($(\"#game-canvas\").length > 0) {\n                                console.log(\"Game content loaded, initializing game...\");\n                                \n                                \/\/ Load and execute the game script if not already loaded\n                                if (!window.developmentGameInitialized) {\n                                    var gameScript = document.createElement(\"script\");\n                                    gameScript.src = response.data.game_js_url;\n                                    gameScript.onload = function() {\n                                        console.log(\"Game script loaded\");\n                                        window.developmentGameInitialized = true;\n                                        \n                                        \/\/ Give it a moment to initialize\n                                        setTimeout(function() {\n                                            $(document).trigger(\"initializeGame\");\n                                        }, 200);\n                                    };\n                                    document.body.appendChild(gameScript);\n                                } else {\n                                    \/\/ Script already loaded, just trigger init\n                                    console.log(\"Game script already loaded, triggering init\");\n                                    $(document).trigger(\"initializeGame\");\n                                }\n                            }\n                        }, 300);\n                    } else {\n                        modalContent.html(\"<div style=\\\"text-align: center; padding: 60px;\\\"><h2>\u274c Error Loading Game<\/h2><p>\" + response.data.message + \"<\/p><\/div>\");\n                    }\n                },\n                error: function() {\n                    modalContent.html(\"<div style=\\\"text-align: center; padding: 60px;\\\"><h2>\u274c Error<\/h2><p>Failed to load game. Please try again.<\/p><\/div>\");\n                }\n            });\n        }\n        \n        \/\/ Close game modal when clicking outside\n        $(\"#game-modal-overlay\").on(\"click\", function(e) {\n            if (e.target === this) {\n                closeGameModal();\n            }\n        });\n        \n        \/\/ Close modal function\n        function closeGameModal() {\n            \/\/ Stop game if running\n            if (window.voicePitchGame) {\n                window.voicePitchGame.stopGame();\n                window.voicePitchGame = null;\n            }\n            \n            $(\"#game-modal-overlay\").removeClass(\"active\");\n            \n            \/\/ Clear content after animation\n            setTimeout(function() {\n                $(\"#game-modal-content\").html(\"\");\n            }, 300);\n        }\n        \n        \/\/ Handle game close button (delegated event since content is loaded dynamically)\n        $(document).on(\"click\", \"#game-close-btn\", function() {\n            closeGameModal();\n        });\n        \n        \/\/ Listen for custom close event triggered from game\n        $(document).on(\"closeGameModal\", function() {\n            closeGameModal();\n        });\n        \n        \/\/ Listen for game reward claimed event\n        $(document).on(\"gameRewardClaimed\", function() {\n            console.log(\"Game reward claimed! Switching Section B to special family...\");\n            \n            \/\/ Update Section B to show special family products\n            switchSectionBToSpecial();\n        });\n        \n        \/\/ Function to switch Section B dropdown to special family\n        function switchSectionBToSpecial() {\n            \/\/ Store in localStorage that reward was claimed\n            localStorage.setItem(\"development_special_unlocked\", \"true\");\n            \n            \/\/ Reload the meal builder section to show special products\n            $.ajax({\n                url: ajaxurl,\n                type: \"POST\",\n                data: {\n                    action: \"get_special_products\"\n                },\n                success: function(response) {\n                    if (response.success && response.data.products) {\n                        \/\/ Replace the meat dropdown with special products\n                        var meatSelect = $('select[name=\"product_dropdown_meat\"]');\n                        meatSelect.empty();\n                        \n                        \/\/ Add special products\n                        $.each(response.data.products, function(index, product) {\n                            var option = $('<option>', {\n                                value: product.id,\n                                text: product.name + \" \ud83c\udf81\",\n                                \"data-price\": product.price,\n                                \"data-kcal\": product.kcal,\n                                \"data-carbs\": product.carbs,\n                                \"data-protein\": product.protein,\n                                \"data-fat\": product.fat,\n                                \"data-unit-type\": product.unit_type,\n                                \"data-unit-step\": product.unit_step,\n                                \"data-image-url\": product.image_url,\n                                \"data-english-name\": product.english_name\n                            });\n                            meatSelect.append(option);\n                        });\n                        \n                        \/\/ Add game entrance option at the end\n                        var gameOption = $('<option>', {\n                            value: \"game_entrance\",\n                            \"class\": \"game-entrance-option\",\n                            \"data-game-trigger\": \"true\",\n                            text: \"\ud83e\udd85 \u6211\u771f\u4fc2\u597d\u60f3\u98df\u9d15\u9ce5 \ud83c\udfae\"\n                        });\n                        gameOption.css({\n                            \"background\": \"linear-gradient(90deg, #667eea 0%, #764ba2 100%)\",\n                            \"color\": \"white\",\n                            \"font-weight\": \"bold\"\n                        });\n                        meatSelect.append(gameOption);\n                        \n                        \/\/ Add visual indicator if not already present\n                        var sectionB = meatSelect.closest(\".meal-section\");\n                        if (!sectionB.find(\".special-unlocked-badge\").length) {\n                            sectionB.find(\"h3\").append(' <span class=\"special-unlocked-badge\">\ud83c\udf81 \u7279\u6b8a\u98df\u6750\u5df2\u89e3\u9396 Special Unlocked!<\/span>');\n                        }\n                        \n                        \/\/ Show the toggle button (one-way: only shows \"Switch to Regular\")\n                        $(\"#toggle-ingredient-type\").addClass(\"active\");\n                        \n                        console.log(\"\u2705 Special products loaded successfully!\");\n                        \n                        \/\/ Trigger event to notify that special products are loaded\n                        $(document).trigger(\"specialProductsLoaded\");\n                    } else {\n                        console.error(\"\u274c No special products in response\");\n                    }\n                },\n                error: function(xhr, status, error) {\n                    console.error(\"\u274c Failed to load special products:\", error);\n                    console.error(\"Status:\", status);\n                    console.error(\"Response:\", xhr.responseText);\n                }\n            });\n        }\n        \n        \/\/ Function to switch Section B back to regular products (ONE-WAY - no return!)\n        function switchSectionBToRegular() {\n            $.ajax({\n                url: ajaxurl,\n                type: \"POST\",\n                data: {\n                    action: \"get_normal_meat_products\"\n                },\n                success: function(response) {\n                    if (response.success && response.data.products) {\n                        \/\/ Replace the meat dropdown with regular products\n                        var meatSelect = $('select[name=\"product_dropdown_meat\"]');\n                        meatSelect.empty();\n                        \n                        \/\/ Add regular products\n                        $.each(response.data.products, function(index, product) {\n                            var option = $('<option>', {\n                                value: product.id,\n                                text: product.name,\n                                \"data-price\": product.price,\n                                \"data-kcal\": product.kcal,\n                                \"data-carbs\": product.carbs,\n                                \"data-protein\": product.protein,\n                                \"data-fat\": product.fat,\n                                \"data-unit-type\": product.unit_type,\n                                \"data-unit-step\": product.unit_step,\n                                \"data-image-url\": product.image_url,\n                                \"data-english-name\": product.english_name\n                            });\n                            \n                            \/\/ Add allergen attributes if present\n                            if (product.has_allergens) {\n                                option.addClass(\"contains-allergens\");\n                                option.attr(\"data-has-allergens\", \"true\");\n                                option.attr(\"title\", product.allergen_title);\n                                option.text(product.name + \" \u26a0\ufe0f\");\n                            }\n                            \n                            meatSelect.append(option);\n                        });\n                        \n                        \/\/ Add game entrance option at the end\n                        var gameOption = $('<option>', {\n                            value: \"game_entrance\",\n                            \"class\": \"game-entrance-option\",\n                            \"data-game-trigger\": \"true\",\n                            text: \"\ud83e\udd85 \u6211\u771f\u4fc2\u597d\u60f3\u98df\u9d15\u9ce5 \ud83c\udfae\"\n                        });\n                        gameOption.css({\n                            \"background\": \"linear-gradient(90deg, #667eea 0%, #764ba2 100%)\",\n                            \"color\": \"white\",\n                            \"font-weight\": \"bold\"\n                        });\n                        meatSelect.append(gameOption);\n                        \n                        \/\/ REMOVE special unlock from localStorage (one-way switch!)\n                        localStorage.removeItem(\"development_special_unlocked\");\n                        \n                        \/\/ HIDE the toggle button (no going back without winning again!)\n                        $(\"#toggle-ingredient-type\").removeClass(\"active\");\n                        \n                        \/\/ REMOVE the special badge\n                        $(\".special-unlocked-badge\").remove();\n                        \n                        console.log(\"Regular products restored! Special ingredients removed - win the game again to unlock!\");\n                    }\n                },\n                error: function() {\n                    console.error(\"Failed to load regular products\");\n                }\n            });\n        }\n        \n        \/\/ Handle toggle button click (ONE-WAY: only switches back to regular)\n        $(\"#toggle-ingredient-type\").on(\"click\", function() {\n            \/\/ Confirm before switching (since it's permanent until next win)\n            if (confirm(\"\u78ba\u5b9a\u8981\u5207\u63db\u56de\u5e38\u898f\u98df\u6750\u55ce\uff1f\u60a8\u9700\u8981\u518d\u6b21\u8d0f\u5f97\u904a\u6232\u624d\u80fd\u91cd\u65b0\u89e3\u9396\u7279\u6b8a\u98df\u6750\u3002\\n\\nSwitch back to regular ingredients? You'll need to win the game again to unlock special ingredients.\")) {\n                switchSectionBToRegular();\n            }\n        });\n        \n        \/\/ Check on page load if special was already unlocked\n        if (localStorage.getItem(\"development_special_unlocked\") === \"true\") {\n            $(document).ready(function() {\n                switchSectionBToSpecial();\n            });\n        }\n    });\n    <\/script>","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-5307","page","type-page","status-publish","hentry","desktop-align-center","tablet-align-center","mobile-align-center"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u81ea\u5236\u5065\u5eb7\u9910\u76d2\u9999\u6e2f | \u81ea\u8a02\u98df\u6750\u514b\u6578\u00b7\u5be6\u6642\u8a08\u7b97\u5361\u8def\u91cc | Nutrigo<\/title>\n<meta name=\"description\" content=\"\u9999\u6e2f\u552f\u4e00\u53ef\u81ea\u8a02\u6bcf\u7a2e\u98df\u6750\u514b\u6578\u7684\u5065\u5eb7\u9910\u76d2\uff01\u5be6\u6642\u8a08\u7b97\u5361\u8def\u91cc\u3001\u86cb\u767d\u8cea\u3001\u78b3\u6c34\uff0c\u65b0\u9bae\u716e\u719f\u9001\u4e0a\u9580\u3002\u589e\u808c\u6e1b\u8102\u9996\u9078\uff0c\u7528EATSMART\u4eab\u6eff$500\u6e1b$50\u3002\u7acb\u5373\u81ea\u5236\u4f60\u7684\u9910\u76d2\uff01\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/nutrigo.hk\/en\/custom-meal-prep\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u81ea\u5236\u5065\u5eb7\u9910\u76d2\u9999\u6e2f | \u81ea\u8a02\u98df\u6750\u514b\u6578\u00b7\u5be6\u6642\u8a08\u7b97\u5361\u8def\u91cc | Nutrigo\" \/>\n<meta property=\"og:description\" content=\"\u9999\u6e2f\u552f\u4e00\u53ef\u81ea\u8a02\u6bcf\u7a2e\u98df\u6750\u514b\u6578\u7684\u5065\u5eb7\u9910\u76d2\uff01\u5be6\u6642\u8a08\u7b97\u5361\u8def\u91cc\u3001\u86cb\u767d\u8cea\u3001\u78b3\u6c34\uff0c\u65b0\u9bae\u716e\u719f\u9001\u4e0a\u9580\u3002\u589e\u808c\u6e1b\u8102\u9996\u9078\uff0c\u7528EATSMART\u4eab\u6eff$500\u6e1b$50\u3002\u7acb\u5373\u81ea\u5236\u4f60\u7684\u9910\u76d2\uff01\" \/>\n<meta property=\"og:url\" content=\"https:\/\/nutrigo.hk\/en\/custom-meal-prep\/\" \/>\n<meta property=\"og:site_name\" content=\"nutrigo.hk\" \/>\n<meta property=\"article:modified_time\" content=\"2025-04-23T01:34:23+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/nutrigo.hk\/custom-meal-prep\/\",\"url\":\"https:\/\/nutrigo.hk\/custom-meal-prep\/\",\"name\":\"\u81ea\u5236\u5065\u5eb7\u9910\u76d2\u9999\u6e2f | \u81ea\u8a02\u98df\u6750\u514b\u6578\u00b7\u5be6\u6642\u8a08\u7b97\u5361\u8def\u91cc | Nutrigo\",\"isPartOf\":{\"@id\":\"https:\/\/nutrigo.hk\/#website\"},\"datePublished\":\"2024-10-30T09:55:51+00:00\",\"dateModified\":\"2025-04-23T01:34:23+00:00\",\"description\":\"\u9999\u6e2f\u552f\u4e00\u53ef\u81ea\u8a02\u6bcf\u7a2e\u98df\u6750\u514b\u6578\u7684\u5065\u5eb7\u9910\u76d2\uff01\u5be6\u6642\u8a08\u7b97\u5361\u8def\u91cc\u3001\u86cb\u767d\u8cea\u3001\u78b3\u6c34\uff0c\u65b0\u9bae\u716e\u719f\u9001\u4e0a\u9580\u3002\u589e\u808c\u6e1b\u8102\u9996\u9078\uff0c\u7528EATSMART\u4eab\u6eff$500\u6e1b$50\u3002\u7acb\u5373\u81ea\u5236\u4f60\u7684\u9910\u76d2\uff01\",\"breadcrumb\":{\"@id\":\"https:\/\/nutrigo.hk\/custom-meal-prep\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/nutrigo.hk\/custom-meal-prep\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/nutrigo.hk\/custom-meal-prep\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/nutrigo.hk\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u81ea\u5236\u9910\u76d2\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/nutrigo.hk\/#website\",\"url\":\"https:\/\/nutrigo.hk\/\",\"name\":\"nutrigo.hk\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/nutrigo.hk\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/nutrigo.hk\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/nutrigo.hk\/#organization\",\"name\":\"nutrigo.hk\",\"url\":\"https:\/\/nutrigo.hk\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/nutrigo.hk\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2024\/10\/cropped-nutrigo-e1730394453965.png\",\"contentUrl\":\"https:\/\/nutrigo.hk\/wp-content\/uploads\/2024\/10\/cropped-nutrigo-e1730394453965.png\",\"width\":1920,\"height\":570,\"caption\":\"nutrigo.hk\"},\"image\":{\"@id\":\"https:\/\/nutrigo.hk\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.instagram.com\/nutrigohk\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u81ea\u5236\u5065\u5eb7\u9910\u76d2\u9999\u6e2f | \u81ea\u8a02\u98df\u6750\u514b\u6578\u00b7\u5be6\u6642\u8a08\u7b97\u5361\u8def\u91cc | Nutrigo","description":"\u9999\u6e2f\u552f\u4e00\u53ef\u81ea\u8a02\u6bcf\u7a2e\u98df\u6750\u514b\u6578\u7684\u5065\u5eb7\u9910\u76d2\uff01\u5be6\u6642\u8a08\u7b97\u5361\u8def\u91cc\u3001\u86cb\u767d\u8cea\u3001\u78b3\u6c34\uff0c\u65b0\u9bae\u716e\u719f\u9001\u4e0a\u9580\u3002\u589e\u808c\u6e1b\u8102\u9996\u9078\uff0c\u7528EATSMART\u4eab\u6eff$500\u6e1b$50\u3002\u7acb\u5373\u81ea\u5236\u4f60\u7684\u9910\u76d2\uff01","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/nutrigo.hk\/en\/custom-meal-prep\/","og_locale":"en_US","og_type":"article","og_title":"\u81ea\u5236\u5065\u5eb7\u9910\u76d2\u9999\u6e2f | \u81ea\u8a02\u98df\u6750\u514b\u6578\u00b7\u5be6\u6642\u8a08\u7b97\u5361\u8def\u91cc | Nutrigo","og_description":"\u9999\u6e2f\u552f\u4e00\u53ef\u81ea\u8a02\u6bcf\u7a2e\u98df\u6750\u514b\u6578\u7684\u5065\u5eb7\u9910\u76d2\uff01\u5be6\u6642\u8a08\u7b97\u5361\u8def\u91cc\u3001\u86cb\u767d\u8cea\u3001\u78b3\u6c34\uff0c\u65b0\u9bae\u716e\u719f\u9001\u4e0a\u9580\u3002\u589e\u808c\u6e1b\u8102\u9996\u9078\uff0c\u7528EATSMART\u4eab\u6eff$500\u6e1b$50\u3002\u7acb\u5373\u81ea\u5236\u4f60\u7684\u9910\u76d2\uff01","og_url":"https:\/\/nutrigo.hk\/en\/custom-meal-prep\/","og_site_name":"nutrigo.hk","article_modified_time":"2025-04-23T01:34:23+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/nutrigo.hk\/custom-meal-prep\/","url":"https:\/\/nutrigo.hk\/custom-meal-prep\/","name":"\u81ea\u5236\u5065\u5eb7\u9910\u76d2\u9999\u6e2f | \u81ea\u8a02\u98df\u6750\u514b\u6578\u00b7\u5be6\u6642\u8a08\u7b97\u5361\u8def\u91cc | Nutrigo","isPartOf":{"@id":"https:\/\/nutrigo.hk\/#website"},"datePublished":"2024-10-30T09:55:51+00:00","dateModified":"2025-04-23T01:34:23+00:00","description":"\u9999\u6e2f\u552f\u4e00\u53ef\u81ea\u8a02\u6bcf\u7a2e\u98df\u6750\u514b\u6578\u7684\u5065\u5eb7\u9910\u76d2\uff01\u5be6\u6642\u8a08\u7b97\u5361\u8def\u91cc\u3001\u86cb\u767d\u8cea\u3001\u78b3\u6c34\uff0c\u65b0\u9bae\u716e\u719f\u9001\u4e0a\u9580\u3002\u589e\u808c\u6e1b\u8102\u9996\u9078\uff0c\u7528EATSMART\u4eab\u6eff$500\u6e1b$50\u3002\u7acb\u5373\u81ea\u5236\u4f60\u7684\u9910\u76d2\uff01","breadcrumb":{"@id":"https:\/\/nutrigo.hk\/custom-meal-prep\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/nutrigo.hk\/custom-meal-prep\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/nutrigo.hk\/custom-meal-prep\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/nutrigo.hk\/"},{"@type":"ListItem","position":2,"name":"\u81ea\u5236\u9910\u76d2"}]},{"@type":"WebSite","@id":"https:\/\/nutrigo.hk\/#website","url":"https:\/\/nutrigo.hk\/","name":"nutrigo.hk","description":"","publisher":{"@id":"https:\/\/nutrigo.hk\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/nutrigo.hk\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/nutrigo.hk\/#organization","name":"nutrigo.hk","url":"https:\/\/nutrigo.hk\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/nutrigo.hk\/#\/schema\/logo\/image\/","url":"https:\/\/nutrigo.hk\/wp-content\/uploads\/2024\/10\/cropped-nutrigo-e1730394453965.png","contentUrl":"https:\/\/nutrigo.hk\/wp-content\/uploads\/2024\/10\/cropped-nutrigo-e1730394453965.png","width":1920,"height":570,"caption":"nutrigo.hk"},"image":{"@id":"https:\/\/nutrigo.hk\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.instagram.com\/nutrigohk\/"]}]}},"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/nutrigo.hk\/en\/wp-json\/wp\/v2\/pages\/5307","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nutrigo.hk\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/nutrigo.hk\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/nutrigo.hk\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nutrigo.hk\/en\/wp-json\/wp\/v2\/comments?post=5307"}],"version-history":[{"count":1,"href":"https:\/\/nutrigo.hk\/en\/wp-json\/wp\/v2\/pages\/5307\/revisions"}],"predecessor-version":[{"id":6993,"href":"https:\/\/nutrigo.hk\/en\/wp-json\/wp\/v2\/pages\/5307\/revisions\/6993"}],"wp:attachment":[{"href":"https:\/\/nutrigo.hk\/en\/wp-json\/wp\/v2\/media?parent=5307"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}