{"id":79,"date":"2026-04-22T11:08:57","date_gmt":"2026-04-22T11:08:57","guid":{"rendered":"https:\/\/emyardwork.work\/?page_id=79"},"modified":"2026-04-22T11:16:20","modified_gmt":"2026-04-22T11:16:20","slug":"booking","status":"publish","type":"page","link":"https:\/\/emyardwork.work\/?page_id=79","title":{"rendered":"Booking"},"content":{"rendered":"\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\">\n  <title>E&#038;M Yardwork | Book<\/title>\n  <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n  <link href=\"https:\/\/fonts.googleapis.com\/css2?family=DM+Serif+Display&#038;family=Outfit:wght@300;400;500;600;700&#038;display=swap\" rel=\"stylesheet\">\n  <style>\n    *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }\n\n    :root {\n      --forest: #1b3a20;\n      --green-dark: #2d5a34;\n      --green-mid: #4a7c3a;\n      --green-light: #7ab648;\n      --sage: #a8c5a0;\n      --cream: #f5f1eb;\n      --warm-white: #faf9f7;\n      --text: #3a3a38;\n      --text-light: #6b6b68;\n      --shadow-sm: 0 2px 8px rgba(27, 58, 32, 0.08);\n      --shadow-md: 0 8px 30px rgba(27, 58, 32, 0.12);\n      --radius: 14px;\n      --red-soft: #e74c3c;\n    }\n\n    body {\n      font-family: 'Outfit', sans-serif;\n      color: var(--text);\n      background: var(--warm-white);\n      line-height: 1.7;\n      overflow-x: hidden;\n    }\n\n    .section-label {\n      display: inline-block;\n      font-size: 0.75rem;\n      font-weight: 600;\n      letter-spacing: 3px;\n      text-transform: uppercase;\n      color: var(--green-mid);\n      margin-bottom: 0.75rem;\n    }\n    .section-title {\n      font-family: 'DM Serif Display', serif;\n      font-size: clamp(2rem, 4vw, 2.75rem);\n      color: var(--forest);\n      line-height: 1.2;\n      margin-bottom: 1.25rem;\n    }\n\n    \/* ===== SCROLL ANIMATIONS ===== *\/\n    .reveal {\n      opacity: 0;\n      transform: translateY(40px);\n      transition: opacity 0.8s cubic-bezier(0.16, 1, 0.3, 1),\n                  transform 0.8s cubic-bezier(0.16, 1, 0.3, 1);\n    }\n    .reveal.visible { opacity: 1; transform: translateY(0); }\n    .reveal-scale {\n      opacity: 0;\n      transform: scale(0.92);\n      transition: opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1),\n                  transform 0.7s cubic-bezier(0.16, 1, 0.3, 1);\n    }\n    .reveal-scale.visible { opacity: 1; transform: scale(1); }\n    .stagger-1 { transition-delay: 0.05s; }\n    .stagger-2 { transition-delay: 0.12s; }\n\n    \/* ===== HEADER ===== *\/\n    .page-header {\n      padding: 4rem 2rem 2rem;\n      text-align: center;\n      background:\n        radial-gradient(ellipse at 30% 80%, rgba(122, 182, 72, 0.07) 0%, transparent 50%),\n        var(--warm-white);\n    }\n    .page-header p {\n      color: var(--text-light);\n      max-width: 480px;\n      margin: 0 auto;\n      font-size: 1.05rem;\n    }\n\n    \/* ===== BOOKING LAYOUT ===== *\/\n    .booking-section {\n      padding: 2rem 2rem 5rem;\n      max-width: 1100px;\n      margin: 0 auto;\n    }\n    .booking-grid {\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 2rem;\n      align-items: start;\n    }\n\n    \/* ===== CALENDAR ===== *\/\n    .calendar-wrap {\n      background: white;\n      border-radius: var(--radius);\n      padding: 1.75rem;\n      box-shadow: var(--shadow-sm);\n      border: 1px solid rgba(0,0,0,0.04);\n    }\n\n    .cal-header {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      margin-bottom: 1.5rem;\n    }\n    .cal-title {\n      font-family: 'DM Serif Display', serif;\n      font-size: 1.35rem;\n      color: var(--forest);\n    }\n    .cal-nav {\n      display: flex;\n      gap: 0.5rem;\n    }\n    .cal-nav button {\n      width: 36px;\n      height: 36px;\n      border-radius: 8px;\n      border: 1.5px solid rgba(0,0,0,0.1);\n      background: white;\n      cursor: pointer;\n      font-size: 1rem;\n      color: var(--text);\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      transition: all 0.2s ease;\n    }\n    .cal-nav button:hover {\n      border-color: var(--green-mid);\n      color: var(--green-mid);\n      background: rgba(74, 124, 58, 0.04);\n    }\n\n    .cal-weekdays {\n      display: grid;\n      grid-template-columns: repeat(7, 1fr);\n      gap: 4px;\n      margin-bottom: 4px;\n    }\n    .cal-weekday {\n      text-align: center;\n      font-size: 0.72rem;\n      font-weight: 700;\n      text-transform: uppercase;\n      letter-spacing: 1px;\n      color: var(--text-light);\n      padding: 0.5rem 0;\n    }\n\n    .cal-days {\n      display: grid;\n      grid-template-columns: repeat(7, 1fr);\n      gap: 4px;\n    }\n    .cal-day {\n      aspect-ratio: 1;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      border-radius: 10px;\n      font-size: 0.88rem;\n      font-weight: 500;\n      cursor: default;\n      transition: all 0.2s ease;\n      position: relative;\n    }\n    .cal-day.empty { pointer-events: none; }\n    .cal-day.past {\n      color: #ccc;\n      pointer-events: none;\n    }\n    .cal-day.weekday {\n      color: var(--text-light);\n      pointer-events: none;\n    }\n    .cal-day.weekday::after {\n      content: '';\n      position: absolute;\n      inset: 4px;\n      border-radius: 8px;\n      background: repeating-linear-gradient(\n        45deg,\n        transparent,\n        transparent 3px,\n        rgba(0,0,0,0.02) 3px,\n        rgba(0,0,0,0.02) 6px\n      );\n    }\n    .cal-day.available {\n      color: var(--green-dark);\n      background: rgba(74, 124, 58, 0.08);\n      cursor: pointer;\n      font-weight: 600;\n    }\n    .cal-day.available:hover {\n      background: rgba(74, 124, 58, 0.18);\n      transform: scale(1.08);\n    }\n    .cal-day.selected {\n      background: var(--green-mid) !important;\n      color: white !important;\n      box-shadow: 0 3px 10px rgba(74, 124, 58, 0.3);\n      transform: scale(1.08);\n    }\n    .cal-day.today {\n      border: 2px solid var(--green-mid);\n    }\n\n    .cal-legend {\n      display: flex;\n      gap: 1.25rem;\n      margin-top: 1.25rem;\n      padding-top: 1rem;\n      border-top: 1px solid rgba(0,0,0,0.06);\n      flex-wrap: wrap;\n    }\n    .legend-item {\n      display: flex;\n      align-items: center;\n      gap: 0.4rem;\n      font-size: 0.78rem;\n      color: var(--text-light);\n    }\n    .legend-dot {\n      width: 12px;\n      height: 12px;\n      border-radius: 4px;\n    }\n    .legend-dot.available { background: rgba(74, 124, 58, 0.15); }\n    .legend-dot.unavailable { background: rgba(0,0,0,0.04); }\n    .legend-dot.selected-dot { background: var(--green-mid); }\n\n    \/* ===== FORM ===== *\/\n    .booking-form-wrap {\n      background: white;\n      border-radius: var(--radius);\n      padding: 1.75rem;\n      box-shadow: var(--shadow-sm);\n      border: 1px solid rgba(0,0,0,0.04);\n    }\n    .form-title {\n      font-family: 'DM Serif Display', serif;\n      font-size: 1.35rem;\n      color: var(--forest);\n      margin-bottom: 0.35rem;\n    }\n    .form-subtitle {\n      font-size: 0.88rem;\n      color: var(--text-light);\n      margin-bottom: 1.5rem;\n    }\n\n    .form-group { margin-bottom: 1.1rem; }\n    .form-group label {\n      display: block;\n      font-size: 0.8rem;\n      font-weight: 600;\n      color: var(--text);\n      margin-bottom: 0.3rem;\n      text-transform: uppercase;\n      letter-spacing: 0.5px;\n    }\n    .form-group input,\n    .form-group textarea,\n    .form-group select {\n      width: 100%;\n      padding: 0.7rem 0.9rem;\n      border: 1.5px solid rgba(0,0,0,0.1);\n      border-radius: 8px;\n      font-family: 'Outfit', sans-serif;\n      font-size: 0.92rem;\n      color: var(--text);\n      background: var(--warm-white);\n      transition: border-color 0.2s, box-shadow 0.2s;\n    }\n    .form-group input:focus,\n    .form-group textarea:focus,\n    .form-group select:focus {\n      outline: none;\n      border-color: var(--green-mid);\n      box-shadow: 0 0 0 3px rgba(74, 124, 58, 0.08);\n    }\n    .form-group textarea { resize: vertical; min-height: 90px; }\n    .form-group input.error,\n    .form-group select.error {\n      border-color: var(--red-soft);\n      box-shadow: 0 0 0 3px rgba(231, 76, 60, 0.08);\n    }\n\n    .form-row {\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 0.85rem;\n    }\n\n    .selected-date-display {\n      background: rgba(74, 124, 58, 0.07);\n      border: 1.5px solid rgba(74, 124, 58, 0.2);\n      border-radius: 8px;\n      padding: 0.65rem 0.9rem;\n      font-size: 0.92rem;\n      color: var(--green-dark);\n      font-weight: 500;\n      display: flex;\n      align-items: center;\n      gap: 0.5rem;\n      min-height: 42px;\n    }\n    .selected-date-display.empty {\n      background: var(--warm-white);\n      border-color: rgba(0,0,0,0.1);\n      color: var(--text-light);\n      font-weight: 400;\n    }\n    .selected-date-display.error {\n      border-color: var(--red-soft);\n      background: rgba(231, 76, 60, 0.04);\n    }\n\n    .btn-primary {\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      gap: 0.5rem;\n      background: var(--green-mid);\n      color: white;\n      padding: 0.9rem 1.75rem;\n      border-radius: 10px;\n      text-decoration: none;\n      font-weight: 600;\n      font-size: 0.95rem;\n      font-family: 'Outfit', sans-serif;\n      border: none;\n      cursor: pointer;\n      transition: all 0.25s ease;\n      box-shadow: 0 4px 14px rgba(74, 124, 58, 0.3);\n      width: 100%;\n      margin-top: 0.5rem;\n    }\n    .btn-primary:hover {\n      background: var(--green-dark);\n      transform: translateY(-2px);\n      box-shadow: 0 6px 20px rgba(74, 124, 58, 0.35);\n    }\n    .btn-primary:disabled {\n      opacity: 0.5;\n      cursor: not-allowed;\n      transform: none;\n      box-shadow: none;\n    }\n    .btn-primary.sending {\n      pointer-events: none;\n      opacity: 0.8;\n    }\n\n    \/* ===== SUCCESS \/ ERROR TOAST ===== *\/\n    .toast {\n      position: fixed;\n      bottom: 2rem;\n      left: 50%;\n      transform: translateX(-50%) translateY(100px);\n      padding: 1rem 1.75rem;\n      border-radius: 12px;\n      font-weight: 600;\n      font-size: 0.92rem;\n      z-index: 9999;\n      opacity: 0;\n      transition: all 0.5s cubic-bezier(0.16, 1, 0.3, 1);\n      box-shadow: 0 10px 40px rgba(0,0,0,0.15);\n      max-width: 90vw;\n      text-align: center;\n    }\n    .toast.show {\n      opacity: 1;\n      transform: translateX(-50%) translateY(0);\n    }\n    .toast.success {\n      background: var(--green-mid);\n      color: white;\n    }\n    .toast.fail {\n      background: var(--red-soft);\n      color: white;\n    }\n\n    \/* ===== INFO SECTION ===== *\/\n    .info-bar {\n      padding: 3rem 2rem;\n      background: var(--cream);\n    }\n    .info-inner {\n      max-width: 800px;\n      margin: 0 auto;\n      display: grid;\n      grid-template-columns: repeat(3, 1fr);\n      gap: 2rem;\n      text-align: center;\n    }\n    .info-item {}\n    .info-icon {\n      font-size: 1.75rem;\n      margin-bottom: 0.5rem;\n      display: inline-block;\n      transition: transform 0.3s ease;\n    }\n    .info-item:hover .info-icon { transform: scale(1.15) rotate(-5deg); }\n    .info-item h3 {\n      font-family: 'DM Serif Display', serif;\n      font-size: 1.05rem;\n      color: var(--forest);\n      margin-bottom: 0.25rem;\n    }\n    .info-item p {\n      font-size: 0.85rem;\n      color: var(--text-light);\n      line-height: 1.6;\n    }\n\n    \/* ===== RESPONSIVE ===== *\/\n    @media (max-width: 850px) {\n      .booking-grid { grid-template-columns: 1fr; }\n      .info-inner { grid-template-columns: 1fr; gap: 1.5rem; }\n    }\n    @media (max-width: 500px) {\n      .form-row { grid-template-columns: 1fr; }\n      .page-header { padding: 3rem 1.5rem 1.5rem; }\n      .booking-section { padding: 1.5rem 1.25rem 4rem; }\n    }\n  <\/style>\n<\/head>\n<body>\n\n  <!-- HEADER -->\n  <section class=\"page-header\">\n    <span class=\"section-label reveal\">Book Us<\/span>\n    <h1 class=\"section-title reveal\">Pick a weekend and we&#8217;ll be there.<\/h1>\n    <p class=\"reveal\">We work on Saturdays and Sundays. Choose a date, tell us what you need, and we&#8217;ll get back to you to confirm.<\/p>\n  <\/section>\n\n  <!-- BOOKING -->\n  <section class=\"booking-section\">\n    <div class=\"booking-grid\">\n\n      <!-- CALENDAR -->\n      <div class=\"calendar-wrap reveal-scale stagger-1\">\n        <div class=\"cal-header\">\n          <div class=\"cal-title\" id=\"calTitle\"><\/div>\n          <div class=\"cal-nav\">\n            <button id=\"prevMonth\" aria-label=\"Previous month\">\u2039<\/button>\n            <button id=\"nextMonth\" aria-label=\"Next month\">\u203a<\/button>\n          <\/div>\n        <\/div>\n        <div class=\"cal-weekdays\">\n          <div class=\"cal-weekday\">Sun<\/div>\n          <div class=\"cal-weekday\">Mon<\/div>\n          <div class=\"cal-weekday\">Tue<\/div>\n          <div class=\"cal-weekday\">Wed<\/div>\n          <div class=\"cal-weekday\">Thu<\/div>\n          <div class=\"cal-weekday\">Fri<\/div>\n          <div class=\"cal-weekday\">Sat<\/div>\n        <\/div>\n        <div class=\"cal-days\" id=\"calDays\"><\/div>\n        <div class=\"cal-legend\">\n          <div class=\"legend-item\"><div class=\"legend-dot available\"><\/div> Available<\/div>\n          <div class=\"legend-item\"><div class=\"legend-dot unavailable\"><\/div> Unavailable<\/div>\n          <div class=\"legend-item\"><div class=\"legend-dot selected-dot\"><\/div> Selected<\/div>\n        <\/div>\n      <\/div>\n\n      <!-- FORM -->\n      <div class=\"booking-form-wrap reveal-scale stagger-2\">\n        <div class=\"form-title\">Request a Booking<\/div>\n        <div class=\"form-subtitle\">Fill this out and we&#8217;ll text or email you to confirm.<\/div>\n\n        <!--\n          ============================================================\n          HOW TO SET UP EMAIL NOTIFICATIONS (it's free & easy):\n          \n          1. Go to https:\/\/formspree.io and create a free account\n          2. Create a new form \u2014 it gives you an endpoint URL like:\n             https:\/\/formspree.io\/f\/xABcdEfG\n          3. Replace YOUR_FORM_ID below with that ID (e.g. xABcdEfG)\n          4. Now when someone books, you'll get an email!\n          \n          Free plan = 50 submissions\/month (plenty to start)\n          ============================================================\n        -->\n        <form id=\"bookingForm\" action=\"https:\/\/formspree.io\/f\/YOUR_FORM_ID\" method=\"POST\">\n\n          <div class=\"form-group\">\n            <label for=\"selectedDate\">Date<\/label>\n            <div class=\"selected-date-display empty\" id=\"dateDisplay\">\n              \u2190 Pick a weekend date on the calendar\n            <\/div>\n            <input type=\"hidden\" name=\"date\" id=\"dateInput\">\n          <\/div>\n\n          <div class=\"form-row\">\n            <div class=\"form-group\">\n              <label for=\"fname\">Your Name<\/label>\n              <input type=\"text\" id=\"fname\" name=\"name\" placeholder=\"Your name\" required>\n            <\/div>\n            <div class=\"form-group\">\n              <label for=\"phone\">Phone Number<\/label>\n              <input type=\"tel\" id=\"phone\" name=\"phone\" placeholder=\"(555) 555-5555\" required>\n            <\/div>\n          <\/div>\n\n          <div class=\"form-group\">\n            <label for=\"email\">Email<\/label>\n            <input type=\"email\" id=\"email\" name=\"email\" placeholder=\"you@email.com\" required>\n          <\/div>\n\n          <div class=\"form-group\">\n            <label for=\"service\">What Do You Need?<\/label>\n            <select id=\"service\" name=\"service\" required>\n              <option value=\"\" disabled selected>Pick a service&#8230;<\/option>\n              <option value=\"Lawn Mowing\">Lawn Mowing<\/option>\n              <option value=\"Bramble &#038; Brush Clearing\">Bramble &#038; Brush Clearing<\/option>\n              <option value=\"Stick &#038; Debris Cleanup\">Stick &#038; Debris Cleanup<\/option>\n              <option value=\"Leaf Removal\">Leaf Removal<\/option>\n              <option value=\"Edging &#038; Trimming\">Edging &#038; Trimming<\/option>\n              <option value=\"Custom Job\">Custom Job<\/option>\n            <\/select>\n          <\/div>\n\n          <div class=\"form-group\">\n            <label for=\"address\">Your Address<\/label>\n            <input type=\"text\" id=\"address\" name=\"address\" placeholder=\"Where's the yard?\" required>\n          <\/div>\n\n          <div class=\"form-group\">\n            <label for=\"details\">Anything Else?<\/label>\n            <textarea id=\"details\" name=\"details\" placeholder=\"Yard size, gate codes, specific requests...\"><\/textarea>\n          <\/div>\n\n          <button type=\"submit\" class=\"btn-primary\" id=\"submitBtn\">\n            Send Booking Request \u2192\n          <\/button>\n        <\/form>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <!-- INFO BAR -->\n  <section class=\"info-bar\">\n    <div class=\"info-inner\">\n      <div class=\"info-item reveal stagger-1\">\n        <div class=\"info-icon\">\ud83d\udcc5<\/div>\n        <h3>Weekends Only<\/h3>\n        <p>We&#8217;re in school during the week, so we work Saturdays and Sundays.<\/p>\n      <\/div>\n      <div class=\"info-item reveal stagger-2\">\n        <div class=\"info-icon\">\u23f0<\/div>\n        <h3>We&#8217;ll Confirm<\/h3>\n        <p>This is a request, not a final booking. We&#8217;ll reach out to confirm the time.<\/p>\n      <\/div>\n      <div class=\"info-item reveal\">\n        <div class=\"info-icon\">\ud83c\udd93<\/div>\n        <h3>Free Estimates<\/h3>\n        <p>Not sure about pricing? We&#8217;ll come look at your yard for free first.<\/p>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <!-- TOAST -->\n  <div class=\"toast\" id=\"toast\"><\/div>\n\n  <script>\n    \/\/ ===== CALENDAR =====\n    const today = new Date();\n    today.setHours(0, 0, 0, 0);\n    let currentMonth = today.getMonth();\n    let currentYear = today.getFullYear();\n    let selectedDate = null;\n\n    const monthNames = [\n      'January', 'February', 'March', 'April', 'May', 'June',\n      'July', 'August', 'September', 'October', 'November', 'December'\n    ];\n\n    function isWeekend(date) {\n      const day = date.getDay();\n      return day === 0 || day === 6;\n    }\n\n    function isPast(date) {\n      return date < today;\n    }\n\n    function formatDate(date) {\n      return date.toLocaleDateString('en-US', {\n        weekday: 'long',\n        month: 'long',\n        day: 'numeric',\n        year: 'numeric'\n      });\n    }\n\n    function renderCalendar() {\n      const calTitle = document.getElementById('calTitle');\n      const calDays = document.getElementById('calDays');\n\n      calTitle.textContent = `${monthNames[currentMonth]} ${currentYear}`;\n\n      const firstDay = new Date(currentYear, currentMonth, 1).getDay();\n      const daysInMonth = new Date(currentYear, currentMonth + 1, 0).getDate();\n\n      let html = '';\n\n      \/\/ Empty cells before first day\n      for (let i = 0; i < firstDay; i++) {\n        html += '<div class=\"cal-day empty\"><\/div>';\n      }\n\n      \/\/ Day cells\n      for (let d = 1; d <= daysInMonth; d++) {\n        const date = new Date(currentYear, currentMonth, d);\n        const weekend = isWeekend(date);\n        const past = isPast(date);\n        const isToday = date.getTime() === today.getTime();\n        const isSelected = selectedDate &#038;&#038; date.getTime() === selectedDate.getTime();\n\n        let cls = 'cal-day';\n        if (past) {\n          cls += ' past';\n        } else if (weekend) {\n          cls += ' available';\n        } else {\n          cls += ' weekday';\n        }\n        if (isToday) cls += ' today';\n        if (isSelected) cls += ' selected';\n\n        const dataAttr = (!past &#038;&#038; weekend) ? `data-date=\"${date.toISOString()}\"` : '';\n        html += `<div class=\"${cls}\" ${dataAttr}>${d}<\/div>`;\n      }\n\n      calDays.innerHTML = html;\n\n      \/\/ Click handlers for available days\n      calDays.querySelectorAll('.available').forEach(el => {\n        el.addEventListener('click', () => {\n          selectedDate = new Date(el.dataset.date);\n          renderCalendar();\n          updateDateDisplay();\n        });\n      });\n\n      \/\/ Disable prev button if at current month\n      const prevBtn = document.getElementById('prevMonth');\n      if (currentYear === today.getFullYear() && currentMonth === today.getMonth()) {\n        prevBtn.disabled = true;\n        prevBtn.style.opacity = '0.3';\n        prevBtn.style.pointerEvents = 'none';\n      } else {\n        prevBtn.disabled = false;\n        prevBtn.style.opacity = '1';\n        prevBtn.style.pointerEvents = 'auto';\n      }\n    }\n\n    function updateDateDisplay() {\n      const display = document.getElementById('dateDisplay');\n      const input = document.getElementById('dateInput');\n\n      if (selectedDate) {\n        display.textContent = '\ud83d\udcc5 ' + formatDate(selectedDate);\n        display.classList.remove('empty', 'error');\n        input.value = formatDate(selectedDate);\n      } else {\n        display.textContent = '\u2190 Pick a weekend date on the calendar';\n        display.classList.add('empty');\n        input.value = '';\n      }\n    }\n\n    document.getElementById('prevMonth').addEventListener('click', () => {\n      currentMonth--;\n      if (currentMonth < 0) { currentMonth = 11; currentYear--; }\n      renderCalendar();\n    });\n\n    document.getElementById('nextMonth').addEventListener('click', () => {\n      currentMonth++;\n      if (currentMonth > 11) { currentMonth = 0; currentYear++; }\n      renderCalendar();\n    });\n\n    renderCalendar();\n\n    \/\/ ===== FORM SUBMISSION =====\n    const form = document.getElementById('bookingForm');\n    const submitBtn = document.getElementById('submitBtn');\n    const toast = document.getElementById('toast');\n\n    function showToast(message, type) {\n      toast.textContent = message;\n      toast.className = 'toast ' + type;\n      requestAnimationFrame(() => toast.classList.add('show'));\n      setTimeout(() => toast.classList.remove('show'), 4500);\n    }\n\n    form.addEventListener('submit', async (e) => {\n      e.preventDefault();\n\n      \/\/ Validate date selected\n      if (!selectedDate) {\n        const display = document.getElementById('dateDisplay');\n        display.classList.add('error');\n        display.textContent = '\u26a0\ufe0f Please pick a date first!';\n        setTimeout(() => {\n          if (!selectedDate) {\n            display.classList.remove('error');\n            display.classList.add('empty');\n            display.textContent = '\u2190 Pick a weekend date on the calendar';\n          }\n        }, 3000);\n        return;\n      }\n\n      submitBtn.classList.add('sending');\n      submitBtn.textContent = 'Sending...';\n\n      try {\n        const formData = new FormData(form);\n        const response = await fetch(form.action, {\n          method: 'POST',\n          body: formData,\n          headers: { 'Accept': 'application\/json' }\n        });\n\n        if (response.ok) {\n          showToast('\ud83c\udf89 Booking request sent! We\\'ll get back to you soon.', 'success');\n          form.reset();\n          selectedDate = null;\n          updateDateDisplay();\n          renderCalendar();\n        } else {\n          throw new Error('Form submission failed');\n        }\n      } catch (err) {\n        showToast('Something went wrong. Try texting or emailing us instead!', 'fail');\n      }\n\n      submitBtn.classList.remove('sending');\n      submitBtn.textContent = 'Send Booking Request \u2192';\n    });\n\n    \/\/ ===== SCROLL REVEAL =====\n    const revealObserver = new IntersectionObserver((entries) => {\n      entries.forEach(entry => {\n        if (entry.isIntersecting) {\n          entry.target.classList.add('visible');\n          revealObserver.unobserve(entry.target);\n        }\n      });\n    }, {\n      threshold: 0.12,\n      rootMargin: '0px 0px -40px 0px'\n    });\n\n    document.querySelectorAll('.reveal, .reveal-scale').forEach(el => {\n      revealObserver.observe(el);\n    });\n  <\/script>\n<\/body>\n<\/html>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>E&#038;M Yardwork | Book Book Us Pick a weekend and we&#8217;ll be there. We work on Saturdays and Sundays. Choose a date, tell us what you need, and we&#8217;ll get back to you to confirm. \u2039 \u203a Sun Mon Tue Wed Thu Fri Sat Available Unavailable Selected Request a Booking Fill this out and we&#8217;ll [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-79","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/emyardwork.work\/index.php?rest_route=\/wp\/v2\/pages\/79","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/emyardwork.work\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/emyardwork.work\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/emyardwork.work\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/emyardwork.work\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=79"}],"version-history":[{"count":2,"href":"https:\/\/emyardwork.work\/index.php?rest_route=\/wp\/v2\/pages\/79\/revisions"}],"predecessor-version":[{"id":84,"href":"https:\/\/emyardwork.work\/index.php?rest_route=\/wp\/v2\/pages\/79\/revisions\/84"}],"wp:attachment":[{"href":"https:\/\/emyardwork.work\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=79"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}