{"id":2,"date":"2026-05-07T16:06:11","date_gmt":"2026-05-07T16:06:11","guid":{"rendered":"https:\/\/eventhing-studio.shop\/?page_id=2"},"modified":"2026-06-05T21:13:46","modified_gmt":"2026-06-05T21:13:46","slug":"party-backdrop-and-balloon-decoration-singapore","status":"publish","type":"page","link":"https:\/\/eventhing-studio.shop\/?page_id=2","title":{"rendered":"Booking Request Form"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=yes\">\n<title> Eventhing SG Backdrop and Balloon Decoration |  Booking Form<\/title>\n<style>\n  * {\n    margin: 0;\n    padding: 0;\n    box-sizing: border-box;\n  }\n\n  body {\n    font-family: 'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n    background: linear-gradient(135deg, #fff7f5 0%, #ffffff 50%, #fff3e8 100%);\n    color: #2c241f;\n  }\n\n  \/* FULL WIDTH CONTAINER \u2013 responsive padding *\/\n  .container {\n    width: 100%;\n    margin: 0;\n    padding: 20px 24px 40px;\n  }\n\n  @media (max-width: 640px) {\n    .container {\n      padding: 16px 16px 32px;\n    }\n  }\n\n  @media (min-width: 1600px) {\n    .container {\n      padding: 24px 48px 48px;\n    }\n  }\n\n  \/* Cards *\/\n  .card {\n    background: rgba(255, 255, 255, 0.98);\n    border-radius: 28px;\n    padding: 1.5rem 1.8rem;\n    margin-bottom: 1.6rem;\n    box-shadow: 0 12px 28px rgba(0, 0, 0, 0.05), 0 2px 6px rgba(0, 0, 0, 0.02);\n    border: 1px solid #ffe0d4;\n  }\n\n  h1 {\n    font-size: clamp(1.8rem, 6vw, 2.4rem);\n    font-weight: 800;\n    background: linear-gradient(125deg, #c2410c, #e11d48);\n    background-clip: text;\n    -webkit-background-clip: text;\n    color: transparent;\n    text-align: center;\n  }\n\n  .subtitle {\n    text-align: center;\n    font-size: 0.9rem;\n    color: #b45f3b;\n    margin-top: -5px;\n    margin-bottom: 1rem;\n  }\n\n  h3 {\n    font-size: 1.4rem;\n    font-weight: 600;\n    margin-bottom: 1rem;\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    color: #2d2a2e;\n    flex-wrap: wrap;\n  }\n  h3:before {\n    content: \"\u2728\";\n  }\n\n  label {\n    font-size: 0.75rem;\n    font-weight: 700;\n    text-transform: uppercase;\n    letter-spacing: 0.5px;\n    color: #b45f3b;\n    margin-top: 14px;\n    display: block;\n  }\n\n  input, select, textarea {\n    width: 100%;\n    padding: 12px 14px;\n    margin-top: 6px;\n    border-radius: 28px;\n    border: 1.5px solid #f1cfc2;\n    font-size: 0.9rem;\n    background: #fffcf9;\n    font-family: inherit;\n    transition: 0.2s;\n  }\n  input:focus, select:focus, textarea:focus {\n    outline: none;\n    border-color: #fb8b67;\n    box-shadow: 0 0 0 3px rgba(251, 139, 103, 0.2);\n  }\n\n  \/* Packages row \u2013 even, stretch *\/\n  .packages-row {\n    display: flex;\n    flex-direction: column;\n    gap: 1.8rem;\n    margin: 0.5rem 0;\n  }\n  @media (min-width: 780px) {\n    .packages-row {\n      flex-direction: row;\n      align-items: stretch;\n    }\n    .package-card {\n      flex: 1;\n      display: flex;\n      flex-direction: column;\n    }\n    .btn-select-pkg {\n      margin-top: auto;\n      align-self: flex-start;\n    }\n  }\n  .package-card {\n    background: white;\n    border-radius: 28px;\n    padding: 1.5rem;\n    border: 2px solid #ffe0d4;\n    transition: all 0.2s;\n  }\n  .package-card.package-active {\n    border: 2px solid #fb8b67;\n    background: #fffaf5;\n    box-shadow: 0 10px 22px rgba(251, 139, 103, 0.12);\n  }\n  .promo-badge {\n    background: linear-gradient(95deg, #e11d48, #f97316);\n    color: white;\n    display: inline-block;\n    padding: 5px 14px;\n    border-radius: 60px;\n    font-size: 0.7rem;\n    font-weight: 800;\n    margin-bottom: 12px;\n  }\n  .most-popular-badge {\n    background: #fbbf24;\n    color: #7c2d12;\n    display: inline-block;\n    padding: 5px 14px;\n    border-radius: 60px;\n    font-size: 0.7rem;\n    font-weight: 800;\n    margin-left: 10px;\n  }\n  .package-title {\n    font-size: 1.5rem;\n    font-weight: 800;\n    display: flex;\n    align-items: center;\n    flex-wrap: wrap;\n    gap: 8px;\n  }\n  .price-tag {\n    font-size: 1.7rem;\n    font-weight: 800;\n    color: #c2410c;\n    margin: 8px 0 12px;\n  }\n  .old-price {\n    font-size: 0.9rem;\n    color: #9b7b6b;\n    text-decoration: line-through;\n    margin-left: 10px;\n    font-weight: normal;\n  }\n  .package-features {\n    font-size: 0.8rem;\n    line-height: 1.55;\n    margin: 12px 0 18px;\n    padding-left: 1rem;\n    list-style-type: circle;\n  }\n  .btn-select-pkg {\n    background: #fff1ea;\n    border: 1.5px solid #fb8b67;\n    color: #b45a3a;\n    font-weight: 700;\n    padding: 10px 24px;\n    border-radius: 40px;\n    font-size: 0.85rem;\n    cursor: pointer;\n    width: fit-content;\n  }\n  .btn-select-pkg:hover {\n    background: #fb8b67;\n    color: white;\n  }\n\n  \/* Addons grid *\/\n  .addons-grid {\n    display: flex;\n    flex-direction: column;\n    gap: 16px;\n  }\n  .addon-item {\n    background: #fef7f2;\n    border-radius: 28px;\n    padding: 12px 18px;\n    border: 1px solid #ffddd0;\n  }\n  .addon-header {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    flex-wrap: wrap;\n    margin-bottom: 10px;\n  }\n  .addon-header input {\n    width: 20px;\n    margin: 0;\n    accent-color: #fb8b67;\n  }\n  .addon-header label {\n    margin: 0;\n    font-size: 0.9rem;\n    font-weight: 600;\n    text-transform: none;\n    color: #2c241f;\n  }\n  .addon-options {\n    margin-left: 32px;\n    display: flex;\n    flex-wrap: wrap;\n    gap: 12px;\n    align-items: center;\n  }\n  .simple-addon {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    background: #fef7f2;\n    padding: 10px 16px;\n    border-radius: 60px;\n    border: 1px solid #ffddd0;\n    flex-wrap: wrap;\n  }\n  .simple-addon input {\n    width: 20px;\n    margin: 0;\n  }\n  .conditional-fields {\n    margin-left: 32px;\n    margin-top: 12px;\n    padding: 12px;\n    background: #fff8f0;\n    border-radius: 20px;\n    border-left: 3px solid #fb8b67;\n  }\n  .teardown-option-box {\n    background: #fef0e8;\n    border-radius: 24px;\n    padding: 16px 20px;\n    margin-top: 18px;\n    border-left: 5px solid #fb8b67;\n  }\n  .radio-group {\n    display: flex;\n    flex-direction: column;\n    gap: 12px;\n  }\n  .radio-option {\n    display: flex;\n    align-items: flex-start;\n    gap: 12px;\n    background: white;\n    padding: 12px 16px;\n    border-radius: 20px;\n    border: 1px solid #ffd9cc;\n    cursor: pointer;\n  }\n  @media (min-width: 780px) {\n    .radio-group {\n      flex-direction: row;\n    }\n    .radio-option {\n      flex: 1;\n    }\n  }\n\n  .total-summary {\n    background: linear-gradient(115deg, #fff1ea, #fffaf5);\n    border-radius: 36px;\n    padding: 1rem 1.8rem;\n    margin-bottom: 1.2rem;\n    display: flex;\n    justify-content: space-between;\n    align-items: baseline;\n    flex-wrap: wrap;\n    gap: 12px;\n    border-left: 6px solid #fb8b67;\n  }\n  .total-price {\n    font-size: 2rem;\n    font-weight: 800;\n    background: linear-gradient(125deg, #be185d, #f97316);\n    background-clip: text;\n    -webkit-background-clip: text;\n    color: transparent;\n  }\n  .btn-wa {\n    width: 100%;\n    padding: 18px;\n    border: none;\n    border-radius: 60px;\n    background: linear-gradient(95deg, #e11d48, #f97316);\n    color: white;\n    font-size: 1.2rem;\n    font-weight: 800;\n    cursor: pointer;\n    transition: 0.2s;\n    box-shadow: 0 8px 18px rgba(225, 29, 72, 0.3);\n    margin-top: 5px;\n  }\n  .btn-wa:hover {\n    transform: scale(0.98);\n  }\n  .availability-notice {\n    background: #fff0e0;\n    border-radius: 28px;\n    padding: 14px 18px;\n    margin: 1rem 0 0.8rem;\n    text-align: center;\n    font-size: 0.85rem;\n    color: #b45a3a;\n    border-left: 4px solid #fb8b67;\n    font-weight: 500;\n  }\n  .hidden {\n    display: none;\n  }\n  .backdrop-note, .venue-hint, .line-hint {\n    font-size: 11px;\n    margin-top: 6px;\n    color: #b45f3b;\n  }\n  .cutout-field {\n    margin-top: 16px;\n  }\n  .cutout-field textarea {\n    resize: vertical;\n    min-height: 80px;\n  }\n  .inline-checkbox {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    font-size: 0.8rem;\n    background: white;\n    padding: 6px 12px;\n    border-radius: 40px;\n    border: 1px solid #fb8b67;\n  }\n  .error-border {\n    border-color: #e11d48 !important;\n  }\n  input[type=\"number\"] {\n    width: auto;\n    max-width: 140px;\n  }\n<\/style>\n<\/head>\n<body>\n<div class=\"container\">\n  <h1>\u2728 Backdrop and Balloon Decoration \u2728<\/h1>\n  <div class=\"subtitle\">Elegant \u2022 Whimsical \u2022 Happy Celebrations<\/div>\n\n  <!-- CUSTOMER DETAILS -->\n  <div class=\"card\">\n    <h3>Your Details<\/h3>\n    <input id=\"fullName\" placeholder=\"Full Name *\">\n    <input id=\"phone\" placeholder=\"Contact Number *\">\n    <input id=\"email\" placeholder=\"Email Address *\">\n    <input id=\"socialHandle\" placeholder=\"Instagram \/ Facebook (optional)\">\n  <\/div>\n\n  <!-- EVENT DETAILS -->\n  <div class=\"card\">\n    <h3>Event Details<\/h3>\n    <label>Event Type *<\/label>\n    <select id=\"eventType\"><option value=\"\">&#8212; Select &#8212;<\/option><option>Birthday<\/option><option>Wedding<\/option><option>ROM<\/option><option>Baby Shower<\/option><option>Corporate<\/option><\/select>\n    <label>Theme \/ Vision<\/label>\n    <input id=\"theme\" placeholder=\"e.g., Vintage, Tropical\">\n    <div style=\"display: flex; gap: 14px; flex-wrap: wrap;\">\n      <div style=\"flex:1\"><label>Event Date *<\/label><input type=\"date\" id=\"eventDate\"><\/div>\n      <div style=\"flex:1\"><label>Event Time *<\/label><input type=\"time\" id=\"eventTime\"><\/div>\n    <\/div>\n    <label>Venue Address *<\/label>\n    <input id=\"venue\" placeholder=\"Full venue address\">\n    <label>Venue Type *<\/label>\n    <select id=\"locationType\">\n      <option value=\"Indoor (Most recommended)\">Indoor (Most recommended)<\/option>\n      <option value=\"Outdoor (Must be sheltered)\">Outdoor (Must be sheltered)<\/option>\n    <\/select>\n    <div class=\"venue-hint\">\ud83d\udccd Indoor highly recommended. Outdoor requires sheltered area.<\/div>\n  <\/div>\n\n  <!-- PACKAGES -->\n  <div class=\"card\">\n    <h3>\ud83c\udf81 Select Your Package<\/h3>\n    <div class=\"packages-row\" id=\"packagesRow\">\n      <div class=\"package-card\" data-pkg-name=\"Elegant Bliss\" data-pkg-price=\"260\">\n        <div class=\"promo-badge\">\ud83d\udd25 PROMO DEAL \ud83d\udd25<\/div>\n        <div class=\"package-title\">Elegant Bliss<\/div>\n        <div class=\"price-tag\">$260 <span class=\"old-price\">U.P $280<\/span><\/div>\n        <ul class=\"package-features\"><li>\u2728 2m x 1m fabric backdrop + arch frame<\/li><li>\ud83c\udf88 Half balloon garland<\/li><li>\ud83d\udca1 Neon sign or custom name cardstock<\/li><li>\ud83c\udf70 Cake pedestal included<\/li><li>\ud83d\ude9a Free Setup &#038; Teardown<\/li><\/ul>\n        <button class=\"btn-select-pkg\">Select Elegant Bliss<\/button>\n      <\/div>\n      <div class=\"package-card\" data-pkg-name=\"Grand Celebration\" data-pkg-price=\"310\">\n        <div class=\"package-title\">Grand Celebration <span class=\"most-popular-badge\">\u2b50 MOST POPULAR<\/span><\/div>\n        <div class=\"price-tag\">$310<\/div>\n        <ul class=\"package-features\"><li>\ud83c\udfdb\ufe0f Full custom arch foam board (2x1m)<\/li><li>\ud83c\udf88 Half balloon garland + floor clusters<\/li><li>\ud83c\udf70 Cake pedestal (with teardown)<\/li><li>\ud83d\ude9a Free Setup &#038; Teardown<\/li><\/ul>\n        <button class=\"btn-select-pkg\">Select Grand Celebration<\/button>\n      <\/div>\n    <\/div>\n    <div style=\"margin-top: 16px; background:#f9ede6; border-radius: 40px; padding: 8px 14px;\">\ud83d\udccc <strong>Selected package:<\/strong> <span id=\"selectedPackageDisplay\">None<\/span><\/div>\n  <\/div>\n\n  <!-- BACKDROP + CUTOUT (Elegant Bliss only) -->\n  <div id=\"backdropCard\" class=\"card hidden\">\n    <h3>\ud83c\udfa8 Choose Backdrop Colour<\/h3>\n    <select id=\"backdropColor\"><option>Ivory<\/option><option>Cream<\/option><option>Brown<\/option><option>White<\/option><option>Light Blue<\/option><option>Light Pink<\/option><option>Light Purple<\/option><option>Black<\/option><\/select>\n    <div class=\"backdrop-note\">\u2728 Fabric backdrop colour for Elegant Bliss.<\/div>\n    <div class=\"cutout-field\">\n      <label>\u270f\ufe0f Cutout Wordings \/ Name (max 3 lines)<\/label>\n      <textarea id=\"cutoutWording\" rows=\"2\" placeholder=\"e.g.,&#10;ADAM turns 6&#10;Happy Birthday!\"><\/textarea>\n      <div class=\"line-hint\">\u26a0\ufe0f Not more than 3 lines.<\/div>\n    <\/div>\n  <\/div>\n\n  <!-- TEARDOWN OPTIONS (Grand Celebration only) -->\n  <div id=\"teardownCard\" class=\"card hidden\">\n    <h3>\ud83d\udd04 Teardown Service<\/h3>\n    <div class=\"teardown-option-box\">\n      <div class=\"radio-group\">\n        <label class=\"radio-option\"><input type=\"radio\" name=\"teardownOption\" value=\"with_teardown\" checked> <span><strong>\u2705 With Teardown (Standard)<\/strong><br><small>Free setup &#038; teardown, cake pedestal included<\/small><\/span><\/label>\n        <label class=\"radio-option\"><input type=\"radio\" name=\"teardownOption\" value=\"no_teardown\"> <span><strong>\u23f3 No Teardown (Extended)<\/strong><br><small>No cake stand, disposable pipe stand, indoor only<\/small><\/span><\/label>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- ADD-ONS -->\n  <div class=\"card\">\n    <h3>\u2728 Add-Ons &#038; Upgrades<\/h3>\n    <div class=\"addons-grid\">\n      <!-- Free KT boards -->\n      <div class=\"simple-addon\"><input type=\"checkbox\" value=\"Our Selected Safari Animal KT Boards (3 pcs) - FREE (Safari theme)\" data-price=\"0\"> \ud83e\udd92 Safari Animal KT Boards (3pcs) \u2013 FREE <span style=\"font-size:11px;\">(Safari theme)<\/span><\/div>\n      <div class=\"simple-addon\"><input type=\"checkbox\" value=\"Our Selected Tigger KT Board (1 pc) - FREE (Winnie the Pooh theme)\" data-price=\"0\"> \ud83d\udc3b Tigger KT Board (1pc) \u2013 FREE <span style=\"font-size:11px;\">(Winnie the Pooh theme)<\/span><\/div>\n      \n      <!-- Paid simple add-ons -->\n      <div class=\"simple-addon\"><input type=\"checkbox\" value=\"Mirror Welcome A2 +$70\" data-price=\"70\"> Mirror Welcome A2 +$70<\/div>\n      <div class=\"simple-addon\"><input type=\"checkbox\" value=\"Balloon Arch +$90\" data-price=\"90\"> Balloon Arch +$90<\/div>\n      <div class=\"simple-addon\"><input type=\"checkbox\" value=\"Waffle Live Station (1.5h) $165\" data-price=\"165\"> Waffle Live Station &#8211; $165 \/ 1.5 hr<\/div>\n      <div class=\"simple-addon\"><input type=\"checkbox\" value=\"Cake Pedestal extra +$15\" data-price=\"15\"> Additional Cake Pedestal +$15<\/div>\n      <div class=\"simple-addon\"><input type=\"checkbox\" value=\"Transport (Changi\/Chalet\/Far) +$30\" data-price=\"30\"> Transport surcharge +$30<\/div>\n      <div class=\"simple-addon\"><input type=\"checkbox\" value=\"Extra arch frame cover +$20\" data-price=\"20\"> Extra Arch Frame with cover +$20<\/div>\n\n      <!-- DIY Mini Mirror Decoden Workshop -->\n      <div class=\"addon-item\" id=\"workshopAddon\">\n        <div class=\"addon-header\">\n          <input type=\"checkbox\" id=\"workshopCheckbox\">\n          <label for=\"workshopCheckbox\">\ud83c\udfa8 DIY Mini Mirror Decoden Workshop &#8211; $180 \/ 8 pax<\/label>\n        <\/div>\n        <div class=\"conditional-fields hidden\" id=\"workshopFields\">\n          <div style=\"background:#f9e5d8; padding:12px; border-radius:16px; margin-bottom:12px;\">\n            <p style=\"font-size:0.8rem; margin-bottom:6px;\"><strong>\u2728 Included:<\/strong> 1.5h session, materials for 8 pax, mini mirror, plastic packaging.<\/p>\n            <p style=\"font-size:0.8rem; color:#b45f3b;\"><strong>\u26a0\ufe0f Note:<\/strong> Tables &#038; chairs not included (customer to provide).<\/p>\n          <\/div>\n          <label>Additional Pax (above 8) \u2013 $20 each<\/label>\n          <input type=\"number\" id=\"workshopExtraPax\" min=\"0\" value=\"0\" step=\"1\">\n          <div style=\"font-size:11px; margin-top:4px;\">Extra cost: $<span id=\"workshopExtraCost\">0<\/span><\/div>\n        <\/div>\n      <\/div>\n\n      <!-- Themed Party Goodie Bag -->\n      <div class=\"addon-item\" id=\"goodieAddon\">\n        <div class=\"addon-header\">\n          <input type=\"checkbox\" id=\"goodieCheckbox\">\n          <label for=\"goodieCheckbox\">\ud83c\udf81 Themed Party Goodie Bag &#8211; $60 \/ 10 pax<\/label>\n        <\/div>\n        <div class=\"conditional-fields hidden\" id=\"goodieFields\">\n          <p style=\"font-size:0.8rem; margin-bottom:8px;\">Random assorted gifts (5\u20117 pieces) with name tags.<\/p>\n          <label>Name Tag Text (e.g., &#8220;Adam is 6&#8221;)<\/label>\n          <input type=\"text\" id=\"goodieNameTag\" placeholder=\"Happy Birthday Sara!\">\n          <label>Theme (subject to our availability)<\/label>\n          <input type=\"text\" id=\"goodieTheme\" placeholder=\"Princess, Dinosaur, Unicorn...\">\n        <\/div>\n      <\/div>\n\n      <!-- Custom Standee -->\n      <div class=\"addon-item\">\n        <div class=\"addon-header\">\n          <input type=\"checkbox\" id=\"standeeCheckbox\">\n          <label for=\"standeeCheckbox\">\ud83d\udccc Custom Standee Printing<\/label>\n        <\/div>\n        <div class=\"addon-options\">\n          <select id=\"standeeSize\" disabled>\n            <option value=\"70cm +$45\" data-price=\"45\">70cm &#8211; $45<\/option>\n            <option value=\"80cm +$55\" data-price=\"55\">80cm &#8211; $55<\/option>\n            <option value=\"90cm +$65\" data-price=\"65\">90cm &#8211; $65<\/option>\n            <option value=\"1m +$75\" data-price=\"75\">1 meter &#8211; $75<\/option>\n          <\/select>\n        <\/div>\n      <\/div>\n\n      <!-- Extra Foam Board (Grand only) -->\n      <div class=\"addon-item\" id=\"foamBoardAddon\">\n        <div class=\"addon-header\">\n          <input type=\"checkbox\" id=\"foamBoardCheckbox\">\n          <label for=\"foamBoardCheckbox\">\ud83d\uddbc\ufe0f Extra Printed Foam Board <span style=\"font-size:10px; color:#b45f3b;\">(Only for Grand Celebration)<\/span><\/label>\n        <\/div>\n        <div class=\"addon-options\" style=\"flex-direction: column; align-items: flex-start; gap: 10px;\">\n          <select id=\"foamBoardSize\" disabled>\n            <option value=\"1.5m +$55\" data-price=\"55\">1.5 meter &#8211; $55<\/option>\n            <option value=\"1.8m +$65\" data-price=\"65\">1.8 meter &#8211; $65<\/option>\n          <\/select>\n          <label class=\"inline-checkbox\"><input type=\"checkbox\" id=\"customCutout\" disabled> \u2702\ufe0f Custom cutout (+$5)<\/label>\n        <\/div>\n      <\/div>\n    <\/div>\n    <p style=\"font-size: 11px; margin-top: 12px;\">*Workshop extra pax $20 each. Goodie bag includes name tags &#038; theme (subject to availability). Foam board only with Grand Celebration.<\/p>\n  <\/div>\n\n  <!-- UPLOAD & NOTES -->\n  <div class=\"card\"><h3>Inspiration Gallery<\/h3><input type=\"file\" id=\"inspirationFiles\" multiple><\/div>\n  <div class=\"card\"><h3>Special Notes<\/h3><textarea id=\"notes\" rows=\"3\"><\/textarea><\/div>\n\n  <!-- TOTAL ESTIMATE -->\n  <div class=\"total-summary\"><span>\ud83d\udcb0 Estimated Total (SGD)<\/span><span class=\"total-price\" id=\"totalPriceSpan\">$0<\/span><\/div>\n\n  <div class=\"availability-notice\">\u26a0\ufe0f <strong>Booking submission is subject to our availability.<\/strong> We will contact you via WhatsApp to confirm.<\/div>\n  <button class=\"btn-wa\" id=\"submitWhatsAppBtn\">\ud83d\udcf2 Submit Booking via WhatsApp<\/button>\n<\/div>\n\n<script>\n  \/\/ DOM elements\n  const fullName = document.getElementById('fullName');\n  const phone = document.getElementById('phone');\n  const email = document.getElementById('email');\n  const eventType = document.getElementById('eventType');\n  const eventDate = document.getElementById('eventDate');\n  const eventTime = document.getElementById('eventTime');\n  const venue = document.getElementById('venue');\n  const themeInput = document.getElementById('theme');\n  const locationType = document.getElementById('locationType');\n  const backdropColor = document.getElementById('backdropColor');\n  const cutoutWording = document.getElementById('cutoutWording');\n  const backdropCard = document.getElementById('backdropCard');\n  const teardownCard = document.getElementById('teardownCard');\n  const notes = document.getElementById('notes');\n  const socialHandle = document.getElementById('socialHandle');\n  const fileInput = document.getElementById('inspirationFiles');\n  const selectedPackageSpan = document.getElementById('selectedPackageDisplay');\n  const totalSpan = document.getElementById('totalPriceSpan');\n  const teardownRadios = document.querySelectorAll('input[name=\"teardownOption\"]');\n  let selectedPackageName = \"\", selectedPackagePrice = 0;\n  let teardownChoice = \"with_teardown\";\n\n  \/\/ New addons\n  const workshopCheck = document.getElementById('workshopCheckbox');\n  const workshopFields = document.getElementById('workshopFields');\n  const workshopExtraPax = document.getElementById('workshopExtraPax');\n  const workshopExtraCostSpan = document.getElementById('workshopExtraCost');\n  const goodieCheck = document.getElementById('goodieCheckbox');\n  const goodieFields = document.getElementById('goodieFields');\n  const goodieNameTag = document.getElementById('goodieNameTag');\n  const goodieTheme = document.getElementById('goodieTheme');\n  const standeeCheck = document.getElementById('standeeCheckbox');\n  const standeeSize = document.getElementById('standeeSize');\n  const foamCheck = document.getElementById('foamBoardCheckbox');\n  const foamSize = document.getElementById('foamBoardSize');\n  const customCutout = document.getElementById('customCutout');\n  const foamBoardAddonDiv = document.getElementById('foamBoardAddon');\n\n  function getSelectPrice(selectEl) {\n    const opt = selectEl.options[selectEl.selectedIndex];\n    return opt ? parseInt(opt.getAttribute('data-price') || 0, 10) : 0;\n  }\n\n  function calculateWorkshopExtra() {\n    let extra = parseInt(workshopExtraPax.value) || 0;\n    let cost = extra * 20;\n    workshopExtraCostSpan.innerText = cost;\n    return cost;\n  }\n\n  function calculateTotal() {\n    let total = selectedPackagePrice;\n    document.querySelectorAll('.simple-addon input:checked').forEach(cb => {\n      total += parseInt(cb.getAttribute('data-price') || 0, 10);\n    });\n    if (standeeCheck.checked) total += getSelectPrice(standeeSize);\n    if (foamCheck.checked) {\n      total += getSelectPrice(foamSize);\n      if (customCutout.checked) total += 5;\n    }\n    if (workshopCheck.checked) {\n      total += 180;\n      total += calculateWorkshopExtra();\n    }\n    if (goodieCheck.checked) total += 60;\n    totalSpan.innerText = `$${total}`;\n    return total;\n  }\n\n  function toggleConditionalFields() {\n    workshopFields.classList.toggle('hidden', !workshopCheck.checked);\n    if (!workshopCheck.checked) workshopExtraPax.value = \"0\";\n    goodieFields.classList.toggle('hidden', !goodieCheck.checked);\n    if (!goodieCheck.checked) {\n      goodieNameTag.value = \"\";\n      goodieTheme.value = \"\";\n    }\n    calculateTotal();\n  }\n\n  function toggleAddonControls() {\n    standeeSize.disabled = !standeeCheck.checked;\n    const isGrand = (selectedPackageName === \"Grand Celebration\");\n    const foamEnabled = foamCheck.checked && isGrand;\n    foamSize.disabled = !foamEnabled;\n    customCutout.disabled = !foamEnabled;\n    if (!foamEnabled && foamCheck.checked && !isGrand) foamCheck.checked = false;\n    if (!foamEnabled) customCutout.checked = false;\n    calculateTotal();\n  }\n\n  function updateFoamBoardAvailability() {\n    const isGrand = (selectedPackageName === \"Grand Celebration\");\n    if (!isGrand) {\n      if (foamCheck.checked) foamCheck.checked = false;\n      foamCheck.disabled = true;\n      foamSize.disabled = true;\n      customCutout.disabled = true;\n      foamBoardAddonDiv.style.opacity = \"0.6\";\n      foamBoardAddonDiv.style.pointerEvents = \"none\";\n    } else {\n      foamCheck.disabled = false;\n      foamBoardAddonDiv.style.opacity = \"1\";\n      foamBoardAddonDiv.style.pointerEvents = \"auto\";\n      if (foamCheck.checked) {\n        foamSize.disabled = false;\n        customCutout.disabled = false;\n      } else {\n        foamSize.disabled = true;\n        customCutout.disabled = true;\n      }\n    }\n  }\n\n  function selectPackage(pkgName, pkgPrice, element) {\n    selectedPackageName = pkgName;\n    selectedPackagePrice = pkgPrice;\n    selectedPackageSpan.innerHTML = `${pkgName} ($${pkgPrice})`;\n    document.querySelectorAll('.package-card').forEach(c => c.classList.remove('package-active'));\n    if (element) element.classList.add('package-active');\n    if (pkgName === \"Grand Celebration\") {\n      teardownChoice = \"with_teardown\";\n      document.querySelector('input[name=\"teardownOption\"][value=\"with_teardown\"]').checked = true;\n    }\n    updateConditionalUI();\n    updateFoamBoardAvailability();\n    toggleAddonControls();\n    calculateTotal();\n  }\n\n  function updateConditionalUI() {\n    if (selectedPackageName === \"Elegant Bliss\") {\n      backdropCard.classList.remove('hidden');\n      teardownCard.classList.add('hidden');\n    } else if (selectedPackageName === \"Grand Celebration\") {\n      backdropCard.classList.add('hidden');\n      teardownCard.classList.remove('hidden');\n      teardownRadios.forEach(r => { if (r.checked) teardownChoice = r.value; });\n    } else {\n      backdropCard.classList.add('hidden');\n      teardownCard.classList.add('hidden');\n    }\n  }\n\n  function initPackages() {\n    document.querySelectorAll('.package-card').forEach(pkg => {\n      const btn = pkg.querySelector('.btn-select-pkg');\n      const name = pkg.getAttribute('data-pkg-name');\n      const price = parseInt(pkg.getAttribute('data-pkg-price'), 10);\n      btn.addEventListener('click', (e) => { e.stopPropagation(); selectPackage(name, price, pkg); });\n    });\n  }\n\n  function bindEvents() {\n    standeeCheck.addEventListener('change', toggleAddonControls);\n    standeeSize.addEventListener('change', calculateTotal);\n    foamCheck.addEventListener('change', () => { toggleAddonControls(); calculateTotal(); });\n    foamSize.addEventListener('change', calculateTotal);\n    customCutout.addEventListener('change', calculateTotal);\n    document.querySelectorAll('.simple-addon input').forEach(cb => cb.addEventListener('change', calculateTotal));\n    teardownRadios.forEach(r => r.addEventListener('change', (e) => {\n      if (selectedPackageName === \"Grand Celebration\") teardownChoice = e.target.value;\n    }));\n    workshopCheck.addEventListener('change', () => { toggleConditionalFields(); calculateTotal(); });\n    workshopExtraPax.addEventListener('input', () => { calculateWorkshopExtra(); calculateTotal(); });\n    goodieCheck.addEventListener('change', toggleConditionalFields);\n  }\n\n  function validateForm() {\n    const required = [\n      { el: fullName, name: \"Full Name\" }, { el: phone, name: \"Contact Number\" }, { el: email, name: \"Email\" },\n      { el: eventType, name: \"Event Type\" }, { el: eventDate, name: \"Event Date\" }, { el: eventTime, name: \"Event Time\" }, { el: venue, name: \"Venue\" }\n    ];\n    required.forEach(f => f.el.classList.remove('error-border'));\n    for (let f of required) {\n      let val = f.el.value.trim();\n      if ((f.el.tagName === 'SELECT' && (!val || val === \"-- Select --\")) || (f.el.tagName !== 'SELECT' && !val)) {\n        f.el.classList.add('error-border');\n        alert(`\u274c ${f.name} is required.`);\n        f.el.focus();\n        return false;\n      }\n    }\n    if (!\/^\\S+@\\S+\\.\\S+$\/.test(email.value.trim())) { email.classList.add('error-border'); alert(\"Invalid email.\"); return false; }\n    if (!\/^[\\+\\d\\s\\(\\)\\-]{8,20}$\/.test(phone.value.trim())) { phone.classList.add('error-border'); alert(\"Invalid phone number.\"); return false; }\n    if (!selectedPackageName) { alert(\"Please select a package.\"); return false; }\n    if (new Date(eventDate.value) < new Date().setHours(0,0,0,0)) { eventDate.classList.add('error-border'); alert(\"Date cannot be in the past.\"); return false; }\n    if (selectedPackageName === \"Elegant Bliss\") {\n      const lines = cutoutWording.value.split(\/\\r?\\n\/).filter(l => l.trim().length > 0);\n      if (lines.length > 3) { alert(\"Cutout wording max 3 lines.\"); cutoutWording.classList.add('error-border'); return false; }\n    }\n    return true;\n  }\n\n  function buildWhatsAppMsg() {\n    let addons = [];\n    document.querySelectorAll('.simple-addon input:checked').forEach(cb => addons.push(cb.value));\n    if (standeeCheck.checked) addons.push(`Custom Standee (${standeeSize.value})`);\n    if (foamCheck.checked) {\n      let foamText = `Extra Foam Board (${foamSize.value})`;\n      if (customCutout.checked) foamText += ` + Custom Cutout (+$5)`;\n      addons.push(foamText);\n    }\n    if (workshopCheck.checked) {\n      let extra = parseInt(workshopExtraPax.value) || 0;\n      let extraCost = extra * 20;\n      let txt = `DIY Mini Mirror Decoden Workshop (Base $180 for 8 pax)`;\n      if (extra > 0) txt += ` + ${extra} extra pax (+$${extraCost})`;\n      addons.push(txt);\n    }\n    if (goodieCheck.checked) {\n      let txt = `Themed Party Goodie Bag ($60 for 10 pax)`;\n      if (goodieNameTag.value.trim()) txt += `\\n   - Name tag: \"${goodieNameTag.value.trim()}\"`;\n      if (goodieTheme.value.trim()) txt += `\\n   - Theme: ${goodieTheme.value.trim()} (subject to availability)`;\n      addons.push(txt);\n    }\n    let backdropInfo = \"\", cutoutInfo = \"\";\n    if (selectedPackageName === \"Elegant Bliss\") {\n      backdropInfo = `\\n\ud83c\udfa8 Backdrop Colour: ${backdropColor.value}`;\n      const wording = cutoutWording.value.trim();\n      cutoutInfo = wording ? `\\n\u270f\ufe0f Cutout Wordings:\\n${wording}` : `\\n\u270f\ufe0f Cutout: (default name cardstock)`;\n    }\n    let teardownInfo = \"\";\n    if (selectedPackageName === \"Grand Celebration\") {\n      teardownInfo = teardownChoice === \"no_teardown\" ? \"\\n\u23f3 No Teardown (client handles, no cake stand)\" : \"\\n\u2705 With Teardown (standard)\";\n    }\n    const fileCount = fileInput.files.length;\n    const msg = `\ud83c\udf80 *NEW DECOR BOOKING - EVENTURE* \ud83c\udf80\n\n\ud83d\udc64 *CUSTOMER*\nName: ${fullName.value.trim()}\nPhone: ${phone.value.trim()}\nEmail: ${email.value.trim()}\nSocial: ${socialHandle.value.trim() || \"\u2014\"}\n\n\ud83c\udf89 *EVENT INFO*\nType: ${eventType.value}\nTheme: ${themeInput.value.trim() || \"\u2014\"}\nDate: ${eventDate.value}\nTime: ${eventTime.value}\nVenue: ${venue.value.trim()}\nVenue Type: ${locationType.value}${backdropInfo}${cutoutInfo}\n\n\ud83c\udf81 *PACKAGE*\n${selectedPackageName} \u2014 $${selectedPackagePrice}${teardownInfo}\n\n\u2728 *ADD-ONS*\n${addons.length ? addons.join(\"\\n\") : \"\u2014 None \u2014\"}\n\n\ud83d\udcb0 *ESTIMATED TOTAL*: ${totalSpan.innerText}\n\n\ud83d\udcce *INSPIRATION*: ${fileCount} file(s) attached\n\ud83d\udcdd *NOTES*: ${notes.value.trim() || \"\u2014\"}\n\n\u2705 *Booking subject to availability. We'll confirm via WhatsApp.`;\n    return msg;\n  }\n\n  function sendWhatsApp() {\n    if (!validateForm()) return;\n    const waLink = `https:\/\/wa.me\/6588068231?text=${encodeURIComponent(buildWhatsAppMsg())}`;\n    if (confirm(\"Send booking request? We'll confirm availability.\")) window.open(waLink, \"_blank\");\n  }\n\n  document.addEventListener('DOMContentLoaded', () => {\n    initPackages();\n    bindEvents();\n    document.getElementById('submitWhatsAppBtn').addEventListener('click', sendWhatsApp);\n    eventDate.setAttribute('min', new Date().toISOString().split('T')[0]);\n    updateFoamBoardAvailability();\n    toggleAddonControls();\n    toggleConditionalFields();\n    updateConditionalUI();\n    calculateTotal();\n  });\n<\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Eventhing SG Backdrop and Balloon Decoration | Booking Form \u2728 Backdrop and Balloon Decoration \u2728 Elegant \u2022 Whimsical \u2022 Happy Celebrations Your Details Event Details Event Type * &#8212; Select &#8212;BirthdayWeddingROMBaby ShowerCorporate Theme \/ Vision Event Date * Event Time * Venue Address * Venue Type * Indoor (Most recommended)Outdoor (Must be sheltered) \ud83d\udccd Indoor [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-homepage.php","meta":{"footnotes":""},"class_list":["post-2","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/eventhing-studio.shop\/index.php?rest_route=\/wp\/v2\/pages\/2","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eventhing-studio.shop\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/eventhing-studio.shop\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/eventhing-studio.shop\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eventhing-studio.shop\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2"}],"version-history":[{"count":5,"href":"https:\/\/eventhing-studio.shop\/index.php?rest_route=\/wp\/v2\/pages\/2\/revisions"}],"predecessor-version":[{"id":69,"href":"https:\/\/eventhing-studio.shop\/index.php?rest_route=\/wp\/v2\/pages\/2\/revisions\/69"}],"wp:attachment":[{"href":"https:\/\/eventhing-studio.shop\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}