{"id":5484,"date":"2026-07-27T13:24:54","date_gmt":"2026-07-27T13:24:54","guid":{"rendered":"https:\/\/hairstylistinsarah.com\/termin-buchen\/"},"modified":"2026-07-27T13:24:54","modified_gmt":"2026-07-27T13:24:54","slug":"termin-buchen","status":"publish","type":"page","link":"https:\/\/hairstylistinsarah.com\/de\/termin-buchen\/","title":{"rendered":"Termin buchen"},"content":{"rendered":"        <style>.hsb{--ink:#22201e;--gold:#b18a53;--cream:#f7f2ea;--line:#ded4c7;max-width:1120px;margin:0 auto;padding:56px 22px 80px;color:var(--ink);font-family:inherit}.hsb *{box-sizing:border-box}.hsb header{text-align:center;max-width:720px;margin:0 auto 38px}.hsb-kicker{display:block;color:var(--gold);font-size:.78rem;font-weight:700;letter-spacing:.18em;text-transform:uppercase}.hsb h1{font-size:clamp(2.2rem,5vw,4rem);line-height:1.05;margin:.4rem 0 1rem}.hsb header p{font-size:1.08rem;color:#625d56}.hsb-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px}.hsb-card{background:#fff;border:1px solid var(--line);border-radius:18px;padding:26px;box-shadow:0 12px 35px rgba(46,37,28,.07)}.hsb-card h2{font-size:1.15rem;margin:0 0 18px}.hsb label{display:block;font-weight:600;margin:0 0 15px}.hsb select,.hsb input:not([type=checkbox]){width:100%;margin-top:7px;border:1px solid var(--line);border-radius:10px;padding:13px 14px;background:#fff;color:var(--ink);font:inherit}.hsb-price,.hsb-note{margin:13px 0 0;color:#70685f;font-size:.92rem}.hsb-choices,.hsb-slots{display:flex;flex-wrap:wrap;gap:10px;min-height:44px}.hsb-choices button,.hsb-slots button,.hsb form>button{border:1px solid var(--gold);border-radius:999px;padding:11px 18px;background:#fff;color:var(--ink);cursor:pointer;font:inherit;font-weight:700}.hsb-choices button.active,.hsb-slots button.active,.hsb form>button{background:var(--gold);color:#fff}.hsb form>button{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;margin-top:8px;border-radius:10px;padding:14px}.hsb form>button:disabled{opacity:.45;cursor:not-allowed}.hsb form>button.is-loading{opacity:.8}.hsb-consent{display:flex!important;gap:9px;align-items:flex-start;font-size:.9rem;font-weight:400!important}.hsb-consent input{margin-top:3px}.hsb-hp{position:absolute!important;left:-10000px!important;width:1px!important;height:1px!important}.hsb-message{margin-top:14px}.hsb #hsb-message.error{color:#a82828;margin-top:14px}.hsb-spinner{width:18px;height:18px;border:2px solid rgba(255,255,255,.45);border-top-color:#fff;border-radius:50%;animation:hsb-spin .7s linear infinite}.hsb-modal[hidden]{display:none}.hsb-modal{position:fixed;inset:0;z-index:999999;display:grid;place-items:center;padding:20px;background:rgba(34,32,30,.62);backdrop-filter:blur(5px);opacity:0;transition:opacity .22s ease}.hsb-modal.is-visible{opacity:1}.hsb-modal__panel{position:relative;width:min(100%,500px);padding:48px 38px 36px;border:1px solid rgba(177,138,83,.35);border-radius:26px;background:linear-gradient(160deg,#fff 0%,#fff 68%,#f7f2ea 100%);color:#22201e;text-align:center;box-shadow:0 28px 80px rgba(24,18,13,.28);transform:translateY(18px) scale(.96);transition:transform .3s cubic-bezier(.2,.8,.2,1)}.hsb-modal.is-visible .hsb-modal__panel{transform:translateY(0) scale(1)}.hsb-modal__close{position:absolute;top:14px;right:16px;width:42px;height:42px;border:0;border-radius:50%;background:transparent;color:#625d56;font-size:30px;line-height:1;cursor:pointer}.hsb-modal__close:hover,.hsb-modal__close:focus-visible{background:#f7f2ea;color:#22201e;outline:2px solid #b18a53;outline-offset:2px}.hsb-modal__check{display:grid;place-items:center;width:84px;height:84px;margin:0 auto 22px;border-radius:50%;background:#b18a53;box-shadow:0 10px 28px rgba(177,138,83,.32);animation:hsb-pop .55s cubic-bezier(.2,.9,.3,1.35)}.hsb-modal__check span{width:34px;height:19px;border-left:5px solid #fff;border-bottom:5px solid #fff;transform:translateY(-4px) rotate(-45deg);animation:hsb-check .45s .18s both}.hsb-modal__eyebrow{margin:0 0 9px;color:#b18a53;font-size:.75rem;font-weight:800;letter-spacing:.16em;text-transform:uppercase}.hsb-modal__panel h2{margin:0 0 14px;font-size:clamp(1.65rem,5vw,2.25rem);line-height:1.15}.hsb-modal__message{max-width:390px;margin:0 auto;color:#625d56;font-size:1rem;line-height:1.65}.hsb-modal__stylist{display:flex;align-items:center;justify-content:space-between;gap:18px;margin:24px 0;padding:15px 18px;border:1px solid #ded4c7;border-radius:13px;background:#fff;text-align:left}.hsb-modal__stylist span{color:#70685f}.hsb-modal__stylist strong{color:#22201e;font-size:1.08rem}.hsb-modal__done{width:100%;border:1px solid #b18a53;border-radius:12px;padding:14px 20px;background:#b18a53;color:#fff;font:inherit;font-weight:800;cursor:pointer}.hsb-modal__done:hover,.hsb-modal__done:focus-visible{background:#98703d;outline:3px solid rgba(177,138,83,.28);outline-offset:3px}.hsb-modal-open{overflow:hidden}@keyframes hsb-spin{to{transform:rotate(360deg)}}@keyframes hsb-pop{0%{transform:scale(.6);opacity:0}100%{transform:scale(1);opacity:1}}@keyframes hsb-check{0%{width:0;height:0;opacity:0}100%{width:34px;height:19px;opacity:1}}@media(max-width:760px){.hsb{padding:38px 15px 55px}.hsb-grid{grid-template-columns:1fr}.hsb-card{padding:20px}.hsb h1{font-size:2.35rem}.hsb-modal{padding:14px}.hsb-modal__panel{padding:42px 22px 26px;border-radius:21px}.hsb-modal__check{width:72px;height:72px}.hsb-modal__stylist{align-items:flex-start;flex-direction:column;gap:4px}}@media(prefers-reduced-motion:reduce){.hsb-spinner,.hsb-modal__check,.hsb-modal__check span{animation:none}.hsb-modal,.hsb-modal__panel{transition:none}}\n<\/style>\r\n        <script>window.HSB={\"root\":\"https:\\\/\\\/hairstylistinsarah.com\\\/de\\\/wp-json\\\/hsb\\\/v1\\\/\",\"nonce\":\"ee83cd5871\",\"services\":[{\"id\":\"big-rastas\",\"en\":\"Big Rastas (without extensions)\",\"de\":\"Gro\\u00dfe Rastas (ohne Extensions)\",\"minutes\":360,\"family\":\"rasta\",\"full_day\":false},{\"id\":\"single-rasta\",\"en\":\"Single Rasta (Short\\\/Long)\",\"de\":\"Einzelne Rasta (kurz\\\/lang)\",\"minutes\":20,\"family\":\"rasta\",\"full_day\":false},{\"id\":\"braids-ear\",\"en\":\"Full Head Braids (Ear Length)\",\"de\":\"Braids ganzer Kopf (Ohrl\\u00e4nge)\",\"minutes\":420,\"family\":\"braids\",\"full_day\":false},{\"id\":\"braids-chin\",\"en\":\"Full Head Braids (Chin Length)\",\"de\":\"Braids ganzer Kopf (Kinnl\\u00e4nge)\",\"minutes\":480,\"family\":\"braids\",\"full_day\":true},{\"id\":\"braids-shoulder\",\"en\":\"Full Head Braids (Shoulder Length)\",\"de\":\"Braids ganzer Kopf (Schulterl\\u00e4nge)\",\"minutes\":540,\"family\":\"braids\",\"full_day\":true},{\"id\":\"braids-mid-back\",\"en\":\"Full Head Braids (Mid Back)\",\"de\":\"Braids ganzer Kopf (mittlerer R\\u00fccken)\",\"minutes\":600,\"family\":\"braids\",\"full_day\":true},{\"id\":\"braids-lower-back\",\"en\":\"Full Head Braids (Lower Back)\",\"de\":\"Braids ganzer Kopf (unterer R\\u00fccken)\",\"minutes\":600,\"family\":\"braids\",\"full_day\":true},{\"id\":\"big-braids-short\",\"en\":\"Big Braids Full Head (Short)\",\"de\":\"Gro\\u00dfe Braids ganzer Kopf (kurz)\",\"minutes\":300,\"family\":\"braids\",\"full_day\":false},{\"id\":\"big-braids-shoulder\",\"en\":\"Big Braids (Shoulder Length)\",\"de\":\"Gro\\u00dfe Braids (Schulterl\\u00e4nge)\",\"minutes\":360,\"family\":\"braids\",\"full_day\":false},{\"id\":\"big-braids-mid-back\",\"en\":\"Big Braids (Mid Back)\",\"de\":\"Gro\\u00dfe Braids (mittlerer R\\u00fccken)\",\"minutes\":420,\"family\":\"braids\",\"full_day\":false},{\"id\":\"big-braids-lower-back\",\"en\":\"Big Braids (Lower Back)\",\"de\":\"Gro\\u00dfe Braids (unterer R\\u00fccken)\",\"minutes\":480,\"family\":\"braids\",\"full_day\":true},{\"id\":\"small-braids-shoulder\",\"en\":\"Small Braids (Shoulder Length)\",\"de\":\"Kleine Braids (Schulterl\\u00e4nge)\",\"minutes\":600,\"family\":\"braids\",\"full_day\":true},{\"id\":\"small-braids-mid-back\",\"en\":\"Small Braids (Mid Back)\",\"de\":\"Kleine Braids (mittlerer R\\u00fccken)\",\"minutes\":720,\"family\":\"braids\",\"full_day\":true},{\"id\":\"small-braids-lower-back\",\"en\":\"Small Braids (Lower Back)\",\"de\":\"Kleine Braids (unterer R\\u00fccken)\",\"minutes\":720,\"family\":\"braids\",\"full_day\":true},{\"id\":\"full-cornrows\",\"en\":\"Full Head Cornrows\",\"de\":\"Cornrows ganzer Kopf\",\"minutes\":300,\"family\":\"cornrows\",\"full_day\":false},{\"id\":\"single-cornrow\",\"en\":\"Single Small\\\/Medium\\\/Big Cornrow\",\"de\":\"Einzelne kleine\\\/mittlere\\\/gro\\u00dfe Cornrow\",\"minutes\":30,\"family\":\"cornrows\",\"full_day\":false},{\"id\":\"big-cornrows\",\"en\":\"Big Cornrows Full Head\",\"de\":\"Gro\\u00dfe Cornrows ganzer Kopf\",\"minutes\":120,\"family\":\"cornrows\",\"full_day\":false},{\"id\":\"crochet-braids\",\"en\":\"Crochet Braids Full Head\",\"de\":\"Crochet Braids ganzer Kopf\",\"minutes\":240,\"family\":\"crochet\",\"full_day\":false},{\"id\":\"crochet-curls\",\"en\":\"Crochet Curls Full Head\",\"de\":\"Crochet Curls ganzer Kopf\",\"minutes\":360,\"family\":\"crochet\",\"full_day\":false},{\"id\":\"single-dread\",\"en\":\"Single Dread\",\"de\":\"Einzelner Dread\",\"minutes\":40,\"family\":\"dreads\",\"full_day\":false},{\"id\":\"dreadlocks-short\",\"en\":\"Full Head Dreadlocks (Short)\",\"de\":\"Dreadlocks ganzer Kopf (kurz)\",\"minutes\":360,\"family\":\"dreads\",\"full_day\":false},{\"id\":\"dreadlocks-long\",\"en\":\"Full Head Dreadlocks (Long)\",\"de\":\"Dreadlocks ganzer Kopf (lang)\",\"minutes\":480,\"family\":\"dreads\",\"full_day\":true},{\"id\":\"sisterlocks\",\"en\":\"Sisterlocks\",\"de\":\"Sisterlocks\",\"minutes\":720,\"family\":\"dreads\",\"full_day\":true},{\"id\":\"full-weave\",\"en\":\"Full Weave\",\"de\":\"Komplettes Weave\",\"minutes\":240,\"family\":\"weaves\",\"full_day\":false},{\"id\":\"extensions-row\",\"en\":\"Extensions Per Row\",\"de\":\"Extensions pro Reihe\",\"minutes\":60,\"family\":\"extensions\",\"full_day\":false},{\"id\":\"men-braids\",\"en\":\"Men Braids\",\"de\":\"Herren-Braids\",\"minutes\":180,\"family\":\"braids\",\"full_day\":false}],\"stylists\":{\"hamidah\":{\"name\":\"Hamidah\",\"families\":[\"rasta\",\"braids\",\"cornrows\",\"crochet\",\"dreads\",\"weaves\",\"extensions\"]},\"paulina\":{\"name\":\"Paulina\",\"families\":[\"rasta\",\"braids\",\"cornrows\",\"crochet\"]},\"sarah\":{\"name\":\"Sarah\",\"families\":[\"rasta\",\"braids\",\"cornrows\",\"crochet\",\"dreads\",\"weaves\",\"extensions\"]}}};<\/script>\r\n        <section class=\"hsb\" data-lang=\"de\">\r\n          <header><span class=\"hsb-kicker\">Hair Stylistin\u2019 Sarah<\/span><h1>Termin buchen<\/h1><p>W\u00e4hlen Sie Service, Stylistin und einen verf\u00fcgbaren Termin.<\/p><\/header>\r\n          <div class=\"hsb-grid\">\r\n            <div class=\"hsb-card\"><h2>1. Service w\u00e4hlen<\/h2><select id=\"hsb-service\"><option value=\"\">Bitte ausw\u00e4hlen<\/option><\/select><p class=\"hsb-price\">F\u00fcr den richtigen Preis ruft Sie unser Salonteam an.<\/p><\/div>\r\n            <div class=\"hsb-card\"><h2>2. Stylistin w\u00e4hlen<\/h2><div id=\"hsb-stylists\" class=\"hsb-choices\" aria-live=\"polite\"><\/div><\/div>\r\n            <div class=\"hsb-card hsb-time-card\"><h2>3. Termin w\u00e4hlen<\/h2><label>Datum<input id=\"hsb-date\" type=\"date\"><\/label><p id=\"hsb-full-day\" class=\"hsb-note\" hidden>Ganzt\u00e4giger Termin \u2013 die genaue Uhrzeit wird telefonisch best\u00e4tigt.<\/p><div id=\"hsb-slots\" class=\"hsb-slots\" aria-live=\"polite\"><\/div><\/div>\r\n            <form id=\"hsb-form\" class=\"hsb-card\"><h2>4. Ihre Angaben<\/h2>\r\n              <label>Name<input name=\"name\" autocomplete=\"name\" required maxlength=\"100\"><\/label>\r\n              <label>E-Mail<input name=\"email\" type=\"email\" autocomplete=\"email\" required maxlength=\"190\"><\/label>\r\n              <label>Telefon<input name=\"phone\" type=\"tel\" autocomplete=\"tel\" required maxlength=\"40\"><\/label>\r\n              <label class=\"hsb-consent\"><input name=\"privacy\" type=\"checkbox\" required> <span>Ich stimme der Verarbeitung meiner Daten zur Terminbuchung gem\u00e4\u00df der Datenschutzerkl\u00e4rung zu.<\/span><\/label>\r\n              <input name=\"website\" class=\"hsb-hp\" tabindex=\"-1\" autocomplete=\"off\"><button type=\"submit\" disabled>Termin buchen<\/button><div id=\"hsb-message\" role=\"status\" aria-live=\"polite\"><\/div>\r\n            <\/form>\r\n          <\/div>\r\n        <\/section><script>(() => {\n  const root = document.querySelector('.hsb');\n  if (!root || root.dataset.hsbInitialized === 'true') return;\n  root.dataset.hsbInitialized = 'true';\n\n  const lang = root.dataset.lang;\n  const de = lang === 'de';\n  const serviceEl = root.querySelector('#hsb-service');\n  const stylistBox = root.querySelector('#hsb-stylists');\n  const dateEl = root.querySelector('#hsb-date');\n  const slots = root.querySelector('#hsb-slots');\n  const form = root.querySelector('#hsb-form');\n  const submit = form.querySelector('button[type=submit]');\n  const submitLabel = submit.textContent;\n  const msg = root.querySelector('#hsb-message');\n  const fullNote = root.querySelector('#hsb-full-day');\n  let stylist = '';\n  let start = '';\n  let focusBeforeModal = null;\n\n  const text = {\n    choose: de ? 'Bitte zuerst Service und Stylistin w\u00e4hlen.' : 'Choose a service and stylist first.',\n    none: de ? 'Keine Termine an diesem Datum verf\u00fcgbar.' : 'No appointments are available on this date.',\n    loading: de ? 'Termine werden geladen \u2026' : 'Loading appointments\u2026',\n    error: de ? 'Die Termine konnten nicht geladen werden. Bitte versuchen Sie es erneut oder rufen Sie den Salon an.' : 'Appointments could not be loaded. Please try again or call the salon.',\n    any: de ? 'Beliebige Stylistin' : 'Any stylist',\n    booking: de ? 'Wird gebucht\u2026' : 'Booking\u2026',\n    confirmed: de ? 'Termin best\u00e4tigt!' : 'Appointment confirmed!',\n    success: de ? 'Ihr Termin wurde erfolgreich gebucht. Eine Best\u00e4tigung wurde per E-Mail gesendet.' : 'Your appointment was booked successfully. A confirmation was sent by email.',\n    yourStylist: de ? 'Ihre Stylistin' : 'Your stylist',\n    done: de ? 'Fertig' : 'Done',\n    close: de ? 'Best\u00e4tigung schlie\u00dfen' : 'Close confirmation'\n  };\n\n  const modal = document.createElement('div');\n  modal.className = 'hsb-modal';\n  modal.hidden = true;\n  modal.innerHTML = `\n    <div class=\"hsb-modal__panel\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"hsb-confirmation-title\" aria-describedby=\"hsb-confirmation-message\">\n      <button type=\"button\" class=\"hsb-modal__close\" aria-label=\"${text.close}\">&times;<\/button>\n      <div class=\"hsb-modal__check\" aria-hidden=\"true\"><span><\/span><\/div>\n      <p class=\"hsb-modal__eyebrow\">Hair Stylistin\u2019 Sarah<\/p>\n      <h2 id=\"hsb-confirmation-title\">${text.confirmed}<\/h2>\n      <p id=\"hsb-confirmation-message\" class=\"hsb-modal__message\">${text.success}<\/p>\n      <p class=\"hsb-modal__stylist\"><span>${text.yourStylist}<\/span><strong><\/strong><\/p>\n      <button type=\"button\" class=\"hsb-modal__done\">${text.done}<\/button>\n    <\/div>`;\n  document.body.appendChild(modal);\n\n  const modalPanel = modal.querySelector('.hsb-modal__panel');\n  const modalClose = modal.querySelector('.hsb-modal__close');\n  const modalDone = modal.querySelector('.hsb-modal__done');\n  const modalStylist = modal.querySelector('.hsb-modal__stylist strong');\n\n  function closeModal() {\n    modal.classList.remove('is-visible');\n    modal.hidden = true;\n    document.body.classList.remove('hsb-modal-open');\n    if (focusBeforeModal && document.contains(focusBeforeModal)) focusBeforeModal.focus();\n  }\n\n  function openModal(assignedStylist) {\n    focusBeforeModal = serviceEl;\n    modalStylist.textContent = assignedStylist || '';\n    modal.hidden = false;\n    document.body.classList.add('hsb-modal-open');\n    requestAnimationFrame(() => {\n      modal.classList.add('is-visible');\n      modalClose.focus();\n    });\n  }\n\n  modalClose.addEventListener('click', closeModal);\n  modalDone.addEventListener('click', closeModal);\n  modal.addEventListener('click', event => event.stopPropagation());\n  document.addEventListener('keydown', event => {\n    if (modal.hidden) return;\n    if (event.key === 'Escape') {\n      event.preventDefault();\n      closeModal();\n      return;\n    }\n    if (event.key !== 'Tab') return;\n    const focusable = [...modalPanel.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])')];\n    if (!focusable.length) return;\n    const first = focusable[0];\n    const last = focusable[focusable.length - 1];\n    if (event.shiftKey && document.activeElement === first) {\n      event.preventDefault();\n      last.focus();\n    } else if (!event.shiftKey && document.activeElement === last) {\n      event.preventDefault();\n      first.focus();\n    }\n  });\n\n  const duration = minutes => minutes >= 60\n    ? `${Math.floor(minutes \/ 60)} ${de ? 'Std.' : 'hr'}${minutes % 60 ? ` ${minutes % 60} min` : ''}`\n    : `${minutes} min`;\n\n  HSB.services.forEach(service => {\n    const option = document.createElement('option');\n    option.value = service.id;\n    option.textContent = `${service[lang]} \u2014 ${duration(service.minutes)}`;\n    serviceEl.appendChild(option);\n  });\n\n  const today = new Date();\n  today.setDate(today.getDate() + 1);\n  dateEl.min = today.toISOString().slice(0, 10);\n  const max = new Date();\n  max.setDate(max.getDate() + 90);\n  dateEl.max = max.toISOString().slice(0, 10);\n\n  function current() {\n    return HSB.services.find(service => service.id === serviceEl.value);\n  }\n\n  function stylistButton(id, label) {\n    const button = document.createElement('button');\n    button.type = 'button';\n    button.textContent = label;\n    button.dataset.id = id;\n    button.addEventListener('click', () => {\n      stylist = id;\n      start = '';\n      [...stylistBox.children].forEach(item => item.classList.toggle('active', item === button));\n      load();\n    });\n    stylistBox.appendChild(button);\n  }\n\n  function renderStylists() {\n    stylist = '';\n    start = '';\n    stylistBox.innerHTML = '';\n    slots.innerHTML = '';\n    submit.disabled = true;\n    const service = current();\n    if (!service) return;\n    stylistButton('any', text.any);\n    Object.entries(HSB.stylists).forEach(([id, item]) => {\n      if (item.families.includes(service.family)) stylistButton(id, item.name);\n    });\n    fullNote.hidden = !service.full_day;\n  }\n\n  async function load() {\n    start = '';\n    submit.disabled = true;\n    slots.innerHTML = '';\n    if (!stylist || !dateEl.value) {\n      slots.textContent = text.choose;\n      return;\n    }\n    slots.textContent = text.loading;\n    try {\n      const query = new URLSearchParams({service: serviceEl.value, stylist, date: dateEl.value});\n      const response = await fetch(HSB.root + 'availability?' + query);\n      const data = await response.json();\n      if (!response.ok) throw new Error(data.message);\n      slots.innerHTML = '';\n      if (!data.slots?.length) {\n        slots.textContent = text.none;\n        return;\n      }\n      data.slots.forEach(slot => {\n        const button = document.createElement('button');\n        button.type = 'button';\n        button.textContent = data.full_day ? (de ? 'Diesen Tag w\u00e4hlen' : 'Choose this day') : slot.label;\n        button.dataset.stylist = slot.stylist || stylist;\n        button.addEventListener('click', () => {\n          start = slot.value;\n          [...slots.children].forEach(item => item.classList.toggle('active', item === button));\n          submit.disabled = false;\n        });\n        slots.appendChild(button);\n      });\n    } catch (error) {\n      slots.textContent = error.message || text.error;\n    }\n  }\n\n  function setSubmitting(isSubmitting) {\n    submit.classList.toggle('is-loading', isSubmitting);\n    submit.disabled = isSubmitting;\n    submit.innerHTML = isSubmitting\n      ? `<span class=\"hsb-spinner\" aria-hidden=\"true\"><\/span><span>${text.booking}<\/span>`\n      : submitLabel;\n  }\n\n  serviceEl.addEventListener('change', renderStylists);\n  dateEl.addEventListener('change', load);\n  form.addEventListener('submit', async event => {\n    event.preventDefault();\n    if (!start) return;\n    setSubmitting(true);\n    msg.className = '';\n    msg.textContent = text.booking;\n    const fields = new FormData(form);\n    const body = {\n      service: serviceEl.value,\n      stylist,\n      start,\n      lang,\n      name: fields.get('name'),\n      email: fields.get('email'),\n      phone: fields.get('phone'),\n      privacy: fields.get('privacy') ? 1 : 0,\n      website: fields.get('website')\n    };\n    try {\n      const response = await fetch(HSB.root + 'book', {\n        method: 'POST',\n        headers: {'Content-Type': 'application\/json', 'X-WP-Nonce': HSB.nonce},\n        body: JSON.stringify(body)\n      });\n      const data = await response.json();\n      if (!response.ok) throw new Error(data.message);\n      msg.textContent = '';\n      form.reset();\n      start = '';\n      slots.innerHTML = '';\n      serviceEl.value = '';\n      setSubmitting(false);\n      renderStylists();\n      openModal(data.stylist);\n    } catch (error) {\n      msg.className = 'error';\n      msg.textContent = error.message || text.error;\n      setSubmitting(false);\n      submit.disabled = false;\n    }\n  });\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-5484","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/hairstylistinsarah.com\/de\/wp-json\/wp\/v2\/pages\/5484","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hairstylistinsarah.com\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/hairstylistinsarah.com\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/hairstylistinsarah.com\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hairstylistinsarah.com\/de\/wp-json\/wp\/v2\/comments?post=5484"}],"version-history":[{"count":0,"href":"https:\/\/hairstylistinsarah.com\/de\/wp-json\/wp\/v2\/pages\/5484\/revisions"}],"wp:attachment":[{"href":"https:\/\/hairstylistinsarah.com\/de\/wp-json\/wp\/v2\/media?parent=5484"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}