<!-- Click Inventories Certificate Booking Widget v2.0 -->

<!-- Copy and paste this entire block into WPCode, Custom HTML block, or similar -->

<div id="ci-booking-widget">

  <style>
    /* ========================================
       SCOPED STYLES - All prefixed with #ci-booking-widget
    ======================================== */
    #ci-booking-widget {
      --ci-brand-primary: #1a365d;
      --ci-brand-secondary: #2c5282;
      --ci-brand-accent: #ed8936;
      --ci-brand-accent-hover: #dd6b20;
      --ci-ink: #1a202c;
      --ci-ink-soft: #4a5568;
      --ci-ink-muted: #718096;
      --ci-surface: #ffffff;
      --ci-surface-raised: #f7fafc;
      --ci-surface-sunken: #edf2f7;
      --ci-border: #e2e8f0;
      --ci-border-focus: #cbd5e0;
      --ci-success: #38a169;
      --ci-success-soft: #c6f6d5;
      --ci-warning: #d69e2e;
      --ci-warning-soft: #fefcbf;
      --ci-error: #e53e3e;
      --ci-shadow-sm: 0 1px 2px rgba(0,0,0,0.05);
      --ci-shadow-md: 0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -1px rgba(0,0,0,0.06);
      --ci-shadow-lg: 0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -2px rgba(0,0,0,0.05);
      --ci-radius-sm: 6px;
      --ci-radius-md: 10px;
      --ci-radius-lg: 16px;
      --ci-radius-xl: 24px;
      
      max-width: 1280px;
      margin: 0 auto;
      padding: 40px 24px 60px;
      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
      color: var(--ci-ink);
      line-height: 1.5;
      box-sizing: border-box;
    }
    
    #ci-booking-widget , #ci-booking-widget ::before, #ci-booking-widget *::after {
      box-sizing: border-box;
      margin: 0;
      padding: 0;
    }
    /* Header */
    #ci-booking-widget .ci-header { text-align: center; margin-bottom: 32px; }
    #ci-booking-widget .ci-header h1 { font-size: clamp(1.75rem, 5vw, 2.5rem); font-weight: 700; color: var(--ci-brand-primary); letter-spacing: -0.02em; margin-bottom: 8px; }
    #ci-booking-widget .ci-header > p { font-size: 1.125rem; color: var(--ci-ink-soft); font-weight: 500; margin-bottom: 16px; }
    #ci-booking-widget .ci-trust-line { background: linear-gradient(135deg, #f0fdf4 0%, #dcfce7 100%); border: 1px solid #86efac; border-radius: var(--ci-radius-lg); padding: 14px 20px; font-size: 0.9375rem; color: #166534; font-weight: 600; margin-bottom: 20px; display: flex; align-items: center; justify-content: center; gap: 10px; flex-wrap: wrap; text-align: center; }
    #ci-booking-widget .ci-trust-line svg { width: 20px; height: 20px; color: var(--ci-success); flex-shrink: 0; }
    #ci-booking-widget .ci-badges { display: flex; flex-wrap: wrap; justify-content: center; gap: 12px; margin-top: 16px; }
    #ci-booking-widget .ci-badge { display: inline-flex; align-items: center; gap: 6px; background: var(--ci-surface); border: 1px solid var(--ci-border); padding: 8px 14px; border-radius: 999px; font-size: 0.8125rem; font-weight: 600; color: var(--ci-ink-soft); box-shadow: var(--ci-shadow-sm); }
    #ci-booking-widget .ci-badge svg { width: 16px; height: 16px; color: var(--ci-success); }
    /* Notice Banners */
    #ci-booking-widget .ci-notice { background: linear-gradient(135deg, #fffbeb 0%, #fef3c7 100%); border: 1px solid #fcd34d; border-radius: var(--ci-radius-lg); padding: 16px 20px; margin-bottom: 20px; display: flex; align-items: flex-start; gap: 12px; }
    #ci-booking-widget .ci-notice svg { width: 24px; height: 24px; color: #d97706; flex-shrink: 0; margin-top: 2px; }
    #ci-booking-widget .ci-notice h3 { font-weight: 700; color: #92400e; font-size: 0.9375rem; margin-bottom: 2px; }
    #ci-booking-widget .ci-notice p { color: #a16207; font-size: 0.875rem; font-weight: 500; margin: 0; }
    #ci-booking-widget .ci-info-box { background: var(--ci-surface-sunken); border: 1px solid var(--ci-border); border-radius: var(--ci-radius-md); padding: 12px 16px; margin-bottom: 20px; font-size: 0.8125rem; color: var(--ci-ink-soft); line-height: 1.6; }
    #ci-booking-widget .ci-info-box strong { color: var(--ci-ink); }
    /* Grid - WIDER CALENDAR COLUMN */
    #ci-booking-widget .ci-grid {
      display: grid;
      grid-template-columns: minmax(340px, 1.3fr) 1fr minmax(300px, 400px);
      gap: 24px;
      align-items: start;
    }
    @media (max-width: 1100px) {
      #ci-booking-widget .ci-grid { grid-template-columns: 1fr 1fr; }
      #ci-booking-widget .ci-grid > div:last-child { grid-column: span 2; }
    }
    @media (max-width: 768px) {
      #ci-booking-widget .ci-grid { grid-template-columns: 1fr; }
      #ci-booking-widget .ci-grid > div:last-child { grid-column: span 1; }
    }
    /* Card */
    #ci-booking-widget .ci-card { background: var(--ci-surface); border-radius: var(--ci-radius-xl); box-shadow: var(--ci-shadow-lg); overflow: hidden; border: 1px solid rgba(0,0,0,0.04); }
    #ci-booking-widget .ci-card-header { padding: 20px 24px 0; }
    #ci-booking-widget .ci-card-header h2 { font-size: 1.25rem; font-weight: 700; color: var(--ci-ink); margin-bottom: 4px; }
    #ci-booking-widget .ci-card-header p { font-size: 0.875rem; color: var(--ci-ink-muted); font-weight: 500; margin: 0; }
    #ci-booking-widget .ci-card-body { padding: 20px 24px 24px; }
    /* Calendar */
    #ci-booking-widget .ci-cal-nav { display: flex; align-items: center; justify-content: space-between; background: var(--ci-brand-primary); border-radius: var(--ci-radius-lg); padding: 14px 18px; margin-bottom: 16px; box-shadow: 0 4px 12px rgba(26, 54, 93, 0.25); }
    #ci-booking-widget .ci-cal-month { font-size: 1.25rem; font-weight: 700; color: white; letter-spacing: -0.01em; }
    #ci-booking-widget .ci-cal-btns { display: flex; gap: 8px; }
    #ci-booking-widget .ci-cal-btn { width: 40px; height: 40px; border: none; border-radius: var(--ci-radius-md); background: rgba(255,255,255,0.2); color: white; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all 0.2s ease; font-weight: bold; }
    #ci-booking-widget .ci-cal-btn:hover { background: rgba(255,255,255,0.35); transform: scale(1.05); }
    #ci-booking-widget .ci-cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px; }
    #ci-booking-widget .ci-cal-dow { font-size: 0.6875rem; font-weight: 700; color: var(--ci-ink-muted); text-transform: uppercase; letter-spacing: 0.05em; text-align: center; padding: 8px 0; }
    #ci-booking-widget .ci-cal-day { aspect-ratio: 1; display: flex; align-items: center; justify-content: center; font-size: 0.875rem; font-weight: 600; border-radius: var(--ci-radius-md); cursor: pointer; transition: all 0.2s ease; background: var(--ci-surface-sunken); color: var(--ci-ink); border: 2px solid transparent; position: relative; }
    #ci-booking-widget .ci-cal-day:not(.ci-disabled):hover { background: #dbeafe; border-color: var(--ci-brand-secondary); transform: translateY(-2px); box-shadow: var(--ci-shadow-md); }
    #ci-booking-widget .ci-cal-day.ci-disabled { opacity: 0.3; cursor: not-allowed; background: transparent; }
    #ci-booking-widget .ci-cal-day.ci-empty { background: transparent; cursor: default; }
    #ci-booking-widget .ci-cal-day.ci-selected { background: var(--ci-brand-accent) !important; border-color: var(--ci-brand-accent) !important; color: white !important; transform: scale(1.05); box-shadow: 0 4px 12px rgba(237, 137, 54, 0.4); }
    #ci-booking-widget .ci-cal-day.ci-today::after { content: ''; position: absolute; bottom: 4px; width: 4px; height: 4px; border-radius: 50%; background: var(--ci-brand-accent); }
    #ci-booking-widget .ci-cal-day.ci-selected.ci-today::after { background: white; }
    #ci-booking-widget .ci-cal-hint { margin-top: 12px; font-size: 0.8125rem; color: var(--ci-ink-muted); display: flex; align-items: center; gap: 6px; }
    #ci-booking-widget .ci-cal-hint svg { width: 14px; height: 14px; }
    #ci-booking-widget .ci-selected-date-label { margin-top: 14px; padding: 10px 14px; background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%); border: 1px solid #93c5fd; border-radius: var(--ci-radius-md); font-size: 0.875rem; font-weight: 600; color: #1e40af; text-align: center; display: none; }
    #ci-booking-widget .ci-selected-date-label.ci-active { display: block; }
    /* Tabs */
    #ci-booking-widget .ci-tabs { display: flex; gap: 6px; padding: 0 24px; margin-bottom: -1px; position: relative; z-index: 1; flex-wrap: wrap; }
    #ci-booking-widget .ci-tab { padding: 12px 14px; font-size: 0.75rem; font-weight: 700; color: var(--ci-ink-muted); background: var(--ci-surface-sunken); border: 1px solid var(--ci-border); border-bottom: none; border-radius: var(--ci-radius-md) var(--ci-radius-md) 0 0; cursor: pointer; transition: all 0.2s ease; text-transform: uppercase; letter-spacing: 0.02em; }
    #ci-booking-widget .ci-tab:hover:not(.ci-active) { color: var(--ci-ink); background: var(--ci-surface-raised); }
    #ci-booking-widget .ci-tab.ci-active { background: var(--ci-surface); color: var(--ci-brand-primary); position: relative; }
    #ci-booking-widget .ci-tab.ci-active::after { content: ''; position: absolute; bottom: -1px; left: 0; right: 0; height: 2px; background: var(--ci-surface); }
    #ci-booking-widget .ci-panel { display: none; background: var(--ci-surface); border-top: 1px solid var(--ci-border); padding: 20px 24px 24px; animation: ciFadeIn 0.3s ease; }
    #ci-booking-widget .ci-panel.ci-active { display: block; }
    @keyframes ciFadeIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }
    /* Offers */
    #ci-booking-widget .ci-offers { display: flex; flex-direction: column; gap: 10px; }
    #ci-booking-widget .ci-offer { display: flex; align-items: flex-start; gap: 14px; padding: 14px 16px; border: 2px solid var(--ci-border); border-radius: var(--ci-radius-lg); cursor: pointer; transition: all 0.2s ease; background: var(--ci-surface); }
    #ci-booking-widget .ci-offer:hover { border-color: var(--ci-border-focus); box-shadow: var(--ci-shadow-md); transform: translateY(-1px); }
    #ci-booking-widget .ci-offer.ci-selected { border-color: var(--ci-brand-accent); background: linear-gradient(135deg, #fffaf0 0%, #fff5eb 100%); box-shadow: 0 4px 12px rgba(237, 137, 54, 0.15); }
    #ci-booking-widget .ci-offer-radio { width: 20px; height: 20px; border: 2px solid var(--ci-border-focus); border-radius: 50%; flex-shrink: 0; margin-top: 2px; display: flex; align-items: center; justify-content: center; transition: all 0.2s ease; }
    #ci-booking-widget .ci-offer.ci-selected .ci-offer-radio { border-color: var(--ci-brand-accent); background: var(--ci-brand-accent); }
    #ci-booking-widget .ci-offer.ci-selected .ci-offer-radio::after { content: ''; width: 8px; height: 8px; background: white; border-radius: 50%; }
    #ci-booking-widget .ci-offer-content { flex: 1; min-width: 0; }
    #ci-booking-widget .ci-offer-title { font-weight: 700; font-size: 0.9375rem; color: var(--ci-ink); margin-bottom: 2px; }
    #ci-booking-widget .ci-offer-desc { font-size: 0.8125rem; color: var(--ci-ink-muted); font-weight: 500; }
    #ci-booking-widget .ci-offer-meta { text-align: right; flex-shrink: 0; }
    #ci-booking-widget .ci-offer-price { font-size: 1.25rem; font-weight: 700; color: var(--ci-ink); }
    #ci-booking-widget .ci-offer-save { display: inline-block; margin-top: 4px; padding: 3px 8px; background: var(--ci-success-soft); color: #166534; font-size: 0.6875rem; font-weight: 700; border-radius: 999px; text-transform: uppercase; }
    #ci-booking-widget .ci-offers-hint { margin-top: 14px; padding: 12px 14px; background: #fff7ed; border: 1px solid #fed7aa; border-radius: var(--ci-radius-md); font-size: 0.8125rem; color: #9a3412; font-weight: 600; }
    #ci-booking-widget .ci-offers-hint a { color: inherit; font-weight: 700; }
    #ci-booking-widget .ci-section-divider { margin: 16px 0 12px; padding-bottom: 8px; border-bottom: 1px solid var(--ci-border); font-size: 0.75rem; font-weight: 700; color: var(--ci-ink-muted); text-transform: uppercase; letter-spacing: 0.05em; }
    /* Basket */
    #ci-booking-widget .ci-sticky { position: sticky; top: 24px; }
    @media (max-width: 768px) { #ci-booking-widget .ci-sticky { position: static; } }
    #ci-booking-widget .ci-basket-date { background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%); border: 1px solid #93c5fd; border-radius: var(--ci-radius-lg); padding: 14px 16px; text-align: center; margin-bottom: 16px; }
    #ci-booking-widget .ci-basket-date-label { font-size: 0.75rem; font-weight: 700; color: #1e40af; text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 2px; }
    #ci-booking-widget .ci-basket-date-value { font-size: 1.125rem; font-weight: 600; color: #1e3a8a; }
    #ci-booking-widget .ci-basket-date.ci-empty .ci-basket-date-value { color: #3b82f6; font-size: 0.9375rem; }
    #ci-booking-widget .ci-basket-summary { background: var(--ci-surface-sunken); border: 1px solid var(--ci-border); border-radius: var(--ci-radius-lg); padding: 16px; }
    #ci-booking-widget .ci-basket-empty { text-align: center; padding: 20px 0; color: var(--ci-ink-muted); font-weight: 600; }
    #ci-booking-widget .ci-basket-items { display: flex; flex-direction: column; gap: 10px; }
    #ci-booking-widget .ci-basket-item { background: var(--ci-surface); border: 1px solid var(--ci-border); border-radius: var(--ci-radius-md); padding: 12px 14px; display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; }
    #ci-booking-widget .ci-basket-item-name { font-weight: 700; font-size: 0.9375rem; color: var(--ci-ink); margin-bottom: 4px; }
    #ci-booking-widget .ci-basket-item-includes { font-size: 0.8125rem; color: var(--ci-ink-muted); font-weight: 500; }
    #ci-booking-widget .ci-basket-item-price { font-size: 1rem; font-weight: 700; color: var(--ci-ink); white-space: nowrap; }
    #ci-booking-widget .ci-basket-fee { background: #fef3c7; border: 1px solid #fcd34d; }
    #ci-booking-widget .ci-basket-fee .ci-basket-item-name { color: #92400e; }
    #ci-booking-widget .ci-basket-fee .ci-basket-item-price { color: #92400e; }
    #ci-booking-widget .ci-basket-total { display: flex; justify-content: space-between; align-items: center; margin-top: 14px; padding-top: 14px; border-top: 2px dashed var(--ci-border); }
    #ci-booking-widget .ci-basket-total-label { font-weight: 700; color: var(--ci-ink); }
    #ci-booking-widget .ci-basket-total-value { font-size: 1.5rem; font-weight: 700; color: var(--ci-brand-primary); }
    /* Form */
    #ci-booking-widget .ci-form { margin-top: 20px; padding-top: 20px; border-top: 1px solid var(--ci-border); display: none; }
    #ci-booking-widget .ci-form.ci-active { display: block; animation: ciSlideUp 0.4s ease; }
    @keyframes ciSlideUp { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: translateY(0); } }
    #ci-booking-widget .ci-form-header { margin-bottom: 16px; }
    #ci-booking-widget .ci-form-header h3 { font-size: 1.125rem; font-weight: 700; color: var(--ci-ink); margin-bottom: 4px; }
    #ci-booking-widget .ci-form-header p { font-size: 0.8125rem; color: var(--ci-ink-muted); font-weight: 500; margin: 0; }
    #ci-booking-widget .ci-form-grid { display: grid; gap: 14px; }
    #ci-booking-widget .ci-form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
    @media (max-width: 480px) { #ci-booking-widget .ci-form-row { grid-template-columns: 1fr; } }
    #ci-booking-widget .ci-field { display: flex; flex-direction: column; }
    #ci-booking-widget .ci-field label { font-size: 0.8125rem; font-weight: 700; color: var(--ci-ink); margin-bottom: 6px; }
    #ci-booking-widget .ci-field label.ci-required::after { content: ' *'; color: var(--ci-error); }
    #ci-booking-widget .ci-field input, #ci-booking-widget .ci-field select, #ci-booking-widget .ci-field textarea { padding: 12px 14px; border: 2px solid var(--ci-border); border-radius: var(--ci-radius-md); font-family: inherit; font-size: 0.9375rem; font-weight: 500; color: var(--ci-ink); background: var(--ci-surface); transition: all 0.2s ease; width: 100%; }
    #ci-booking-widget .ci-field input:focus, #ci-booking-widget .ci-field select:focus, #ci-booking-widget .ci-field textarea:focus { outline: none; border-color: var(--ci-brand-secondary); box-shadow: 0 0 0 3px rgba(44, 82, 130, 0.1); }
    #ci-booking-widget .ci-field textarea { min-height: 70px; resize: vertical; }
    #ci-booking-widget .ci-field select { cursor: pointer; appearance: none; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23718096' stroke-width='2'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 12px center; padding-right: 40px; }
    #ci-booking-widget .ci-field-hint { margin-top: 4px; font-size: 0.75rem; color: var(--ci-ink-muted); }
    #ci-booking-widget .ci-postcode-status { margin-top: 6px; padding: 8px 12px; border-radius: var(--ci-radius-sm); font-size: 0.8125rem; font-weight: 600; display: none; }
    #ci-booking-widget .ci-postcode-status.ci-in-area { display: block; background: var(--ci-success-soft); color: #166534; border: 1px solid #86efac; }
    #ci-booking-widget .ci-postcode-status.ci-out-area { display: block; background: #fef3c7; color: #92400e; border: 1px solid #fcd34d; }
    #ci-booking-widget .ci-form-actions { display: flex; gap: 12px; margin-top: 20px; flex-wrap: wrap; }
    #ci-booking-widget .ci-btn { padding: 14px 24px; border: none; border-radius: var(--ci-radius-md); font-family: inherit; font-size: 0.9375rem; font-weight: 700; cursor: pointer; transition: all 0.2s ease; display: inline-flex; align-items: center; justify-content: center; gap: 8px; }
    #ci-booking-widget .ci-btn:disabled { opacity: 0.5; cursor: not-allowed; }
    #ci-booking-widget .ci-btn-secondary { background: var(--ci-surface-sunken); color: var(--ci-ink); }
    #ci-booking-widget .ci-btn-secondary:hover:not(:disabled) { background: var(--ci-border); }
    #ci-booking-widget .ci-btn-primary { background: var(--ci-brand-accent); color: white; flex: 1; }
    #ci-booking-widget .ci-btn-primary:hover:not(:disabled) { background: var(--ci-brand-accent-hover); transform: translateY(-2px); box-shadow: 0 6px 16px rgba(237, 137, 54, 0.35); }
    #ci-booking-widget .ci-btn-dark { background: var(--ci-brand-primary); color: white; flex: 1; }
    #ci-booking-widget .ci-btn-dark:hover:not(:disabled) { background: var(--ci-brand-secondary); transform: translateY(-2px); box-shadow: 0 6px 16px rgba(26, 54, 93, 0.35); }
    #ci-booking-widget .ci-form-disclaimer { margin-top: 14px; font-size: 0.75rem; color: var(--ci-ink-muted); line-height: 1.6; padding: 12px; background: var(--ci-surface-sunken); border-radius: var(--ci-radius-md); }
    /* Success */
    #ci-booking-widget .ci-success { display: none; margin-top: 20px; padding: 18px 20px; background: linear-gradient(135deg, #ecfdf5 0%, #d1fae5 100%); border: 1px solid #86efac; border-radius: var(--ci-radius-lg); }
    #ci-booking-widget .ci-success.ci-active { display: block; animation: ciScaleIn 0.4s ease; }
    @keyframes ciScaleIn { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } }
    #ci-booking-widget .ci-success-icon { width: 48px; height: 48px; background: var(--ci-success); border-radius: 50%; display: flex; align-items: center; justify-content: center; margin-bottom: 12px; }
    #ci-booking-widget .ci-success-icon svg { width: 24px; height: 24px; color: white; }
    #ci-booking-widget .ci-success h4 { font-size: 1.125rem; font-weight: 700; color: #065f46; margin-bottom: 4px; }
    #ci-booking-widget .ci-success p { font-size: 0.875rem; color: #047857; font-weight: 500; margin: 0; }
  </style>

  <!-- Header -->
  <header class="ci-header">
    <h1>Book Certificate Services</h1>
    <p>EPC, EICR and Gas Safety Certificate appointments</p>
    
    <!-- Trust Line -->
    <div class="ci-trust-line">
      <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
      <span><strong>Qualified, Certified Engineers</strong> — Our Gas Safe engineers, accredited EPC assessors, and qualified electricians are fully certified and insured.</span>
    </div>
    
    <div class="ci-badges">
      <span class="ci-badge">
        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><polyline points="22 4 12 14.01 9 11.01"/></svg>
        Gas Safe Registered
      </span>
      <span class="ci-badge">
        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><polyline points="22 4 12 14.01 9 11.01"/></svg>
        Accredited EPC Assessors
      </span>
      <span class="ci-badge">
        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><polyline points="22 4 12 14.01 9 11.01"/></svg>
        Qualified Electricians
      </span>
    </div>
  </header>
  <!-- Notice -->
  <div class="ci-notice">
    <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><line x1="12" y1="8" x2="12" y2="12"/><line x1="12" y1="16" x2="12.01" y2="16"/></svg>
    <div>
      <h3>Appointment confirmation required</h3>
      <p>Request a date and pay now if you wish. We'll contact you within 24 hours to confirm the appointment time and assign the right operative.</p>
    </div>
  </div>

  <!-- Out of Area Info -->
  <div class="ci-info-box">
    <strong>Out of area fee (automatically applied):</strong> If your postcode is outside our London coverage areas (EC, WC, E, N, NW, SE, SW, W including districts such as E1W and W1K), a £35 travel fee will be added automatically.
  </div>

  <!-- Main Grid -->
  <div class="ci-grid">
    <!-- Calendar -->
    <div class="ci-card">
      <div class="ci-card-header">
        <h2>Select a date</h2>
        <p>Choose your preferred appointment day</p>
      </div>
      <div class="ci-card-body">
        <div class="ci-cal-nav">
          <span class="ci-cal-month" id="ciCalMonth"></span>
          <div class="ci-cal-btns">
            <button class="ci-cal-btn" id="ciPrevMonth" type="button" aria-label="Previous month">
              <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="15 18 9 12 15 6"/></svg>
            </button>
            <button class="ci-cal-btn" id="ciNextMonth" type="button" aria-label="Next month">
              <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="9 18 15 12 9 6"/></svg>
            </button>
          </div>
        </div>
        <div class="ci-cal-grid" id="ciCalGrid">
          <div class="ci-cal-dow">Mon</div>
          <div class="ci-cal-dow">Tue</div>
          <div class="ci-cal-dow">Wed</div>
          <div class="ci-cal-dow">Thu</div>
          <div class="ci-cal-dow">Fri</div>
          <div class="ci-cal-dow">Sat</div>
          <div class="ci-cal-dow">Sun</div>
        </div>
        <p class="ci-cal-hint">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><line x1="12" y1="16" x2="12" y2="12"/><line x1="12" y1="8" x2="12.01" y2="8"/></svg>
          Sundays and past dates unavailable
        </p>
        <div class="ci-selected-date-label" id="ciSelectedDateLabel">
          <strong>Selected date:</strong> <span id="ciSelectedDateText"></span>
        </div>
      </div>
    </div>
    <!-- Services -->
    <div class="ci-card" style="overflow: visible;">
      <div class="ci-card-header">
        <h2>Choose a service</h2>
        <p>Select one option below</p>
      </div>
      <div class="ci-tabs">
        <button class="ci-tab ci-active" data-tab="singles" type="button">Single</button>
        <button class="ci-tab" data-tab="combos" type="button">Combos</button>
        <button class="ci-tab" data-tab="packages" type="button">Landlord</button>
      </div>
      
      <!-- Singles Panel -->
      <div class="ci-panel ci-active" data-panel="singles" id="ciPanelSingles">
        <div class="ci-offers" id="ciOffersSingles"></div>
        <div class="ci-offers-hint">Need multiple certificates? Switch to <strong>Combos</strong> to save.</div>
      </div>
      
      <!-- Combos Panel -->
      <div class="ci-panel" data-panel="combos" id="ciPanelCombos">
        <div class="ci-offers" id="ciOffersCombos"></div>
      </div>
      
      <!-- Packages Panel -->
      <div class="ci-panel" data-panel="packages" id="ciPanelPackages">
        <div class="ci-section-divider">1-2 Bedroom Properties</div>
        <div class="ci-offers" id="ciOffersPackages1to2"></div>
        
        <div class="ci-section-divider">3-4 Bedroom Properties</div>
        <div class="ci-offers" id="ciOffersPackages3to4"></div>
        
        <div class="ci-offers-hint" style="margin-top: 20px;">
          <strong>Prices shown apply to studios to 4 bedroom properties.</strong> For 5+ bedroom properties, an additional fee applies. We will confirm and agree this with you before the appointment is confirmed.<br><br>
          Got a 5+ bedroom property? Call us on <a href="tel:02034888072">020 3488 8072</a>.
        </div>
      </div>
    </div>
    <!-- Basket -->
    <div class="ci-sticky">
      <div class="ci-card">
        <div class="ci-card-header">
          <h2>Your Booking</h2>
        </div>
        <div class="ci-card-body">
          <div class="ci-basket-date ci-empty" id="ciBasketDate">
            <div class="ci-basket-date-label">Selected Date</div>
            <div class="ci-basket-date-value" id="ciBasketDateValue">Select a date on the calendar</div>
          </div>
          <div class="ci-basket-summary">
            <div class="ci-basket-empty" id="ciBasketEmpty">No service selected</div>
            <div id="ciBasketContent" style="display: none;">
              <div class="ci-basket-items" id="ciBasketItems"></div>
              <div class="ci-basket-total">
                <span class="ci-basket-total-label">Total</span>
                <span class="ci-basket-total-value" id="ciBasketTotal"></span>
              </div>
            </div>
          </div>
          <!-- Form -->
          <form class="ci-form" id="ciForm">
            <div class="ci-form-header">
              <h3>Your Details</h3>
              <p>We'll confirm your appointment within 24 hours</p>
            </div>
            <div class="ci-form-grid">
              <div class="ci-field">
                <label class="ci-required" for="ciName">Full name</label>
                <input type="text" id="ciName" name="name" required autocomplete="name">
              </div>
              <div class="ci-form-row">
                <div class="ci-field">
                  <label class="ci-required" for="ciEmail">Email</label>
                  <input type="email" id="ciEmail" name="email" required autocomplete="email">
                </div>
                <div class="ci-field">
                  <label class="ci-required" for="ciPhone">Phone</label>
                  <input type="tel" id="ciPhone" name="phone" required autocomplete="tel">
                </div>
              </div>
              <div class="ci-field">
                <label class="ci-required" for="ciPostcode">Postcode</label>
                <input type="text" id="ciPostcode" name="postcode" required autocomplete="postal-code" placeholder="e.g. SW1A 1AA" style="text-transform: uppercase;">
                <div class="ci-postcode-status" id="ciPostcodeStatus"></div>
              </div>
              <div class="ci-field">
                <label class="ci-required" for="ciAddress">Property address (excluding postcode)</label>
                <textarea id="ciAddress" name="address" required rows="2" placeholder="Street address, flat number, etc."></textarea>
              </div>
              <div class="ci-form-row">
                <div class="ci-field">
                  <label class="ci-required" for="ciType">Property type</label>
                  <select id="ciType" name="type" required>
                    <option value="">Select...</option>
                    <option value="residential">Residential</option>
                    <option value="hmo">HMO</option>
                    <option value="commercial">Commercial</option>
                  </select>
                </div>
                <div class="ci-field">
                  <label for="ciBeds">Bedrooms</label>
                  <select id="ciBeds" name="bedrooms">
                    <option value="">Select...</option>
                    <option value="studio">Studio</option>
                    <option value="1">1 Bedroom</option>
                    <option value="2">2 Bedrooms</option>
                    <option value="3">3 Bedrooms</option>
                    <option value="4">4 Bedrooms</option>
                    <option value="5+">5+ Bedrooms</option>
                  </select>
                </div>
              </div>
              <div class="ci-field">
                <label for="ciNotes">Access instructions or notes</label>
                <textarea id="ciNotes" name="notes" rows="2" placeholder="Access codes, parking info, tenant contact, etc."></textarea>
              </div>
            </div>
            <div class="ci-form-actions">
              <button class="ci-btn ci-btn-secondary" type="button" id="ciCancelBtn">Cancel</button>
              <button class="ci-btn ci-btn-primary" type="submit" id="ciRequestBtn">Request Booking</button>
              <button class="ci-btn ci-btn-dark" type="button" id="ciPayBtn" disabled>Pay Now</button>
            </div>
            <p class="ci-form-disclaimer">
              <strong>Payment does not confirm the appointment time.</strong> We will contact you within 24 hours to confirm availability and assign a qualified, certified operative. Paying now helps remove delays in certificate provision once the visit is completed.
            </p>
          </form>
          <!-- Success -->
          <div class="ci-success" id="ciSuccess">
            <div class="ci-success-icon">
              <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="20 6 9 17 4 12"/></svg>
            </div>
            <h4>Request Received!</h4>
            <p>Thank you. We'll be in touch within 24 hours to confirm availability and assign your operative.</p>
          </div>
        </div>
      </div>
    </div>
  </div>


<script>
(function() {
  'use strict';
  
  // ========================================
  // PRICING CONFIGURATION
  // ========================================
  
  const PRICE_FLOORS = { EPC: 75, GAS: 80, EICR: 120 };
  const OUT_OF_AREA_FEE = 35;
  const IN_AREA_PREFIXES = ['EC', 'WC', 'E', 'N', 'NW', 'SE', 'SW', 'W'];
  const PACKAGE_UPLIFT = 20;
  
  // ========================================
  // OFFERS DATA
  // ========================================
  
  const SINGLES = [
    { id: 'epc', title: 'EPC (Energy Performance Certificate)', desc: 'Accredited assessment and certificate', includes: ['EPC'], price: 85 },
    { id: 'gas', title: 'Gas Safety Certificate (CP12)', desc: 'Gas Safe engineer inspection and certificate', includes: ['Gas Safety'], price: 85 },
    { id: 'eicr', title: 'EICR (Electrical Installation Condition Report)', desc: 'Qualified electrician safety testing and report', includes: ['EICR'], price: 170 }
  ];
  
  const COMBOS = [
    { id: 'cert-bundle', title: 'Cert Bundle', desc: 'EPC + Gas Safety', includes: ['EPC', 'Gas Safety'], price: 160, savings: 10 },
    { id: 'safety-duo', title: 'Safety Duo', desc: 'Gas Safety + EICR', includes: ['Gas Safety', 'EICR'], price: 230, savings: 25 },
    { id: 'full-compliance', title: 'Full Compliance', desc: 'EPC + Gas Safety + EICR', includes: ['EPC', 'Gas Safety', 'EICR'], price: 299, savings: 41 }
  ];
  
  const PACKAGES_1TO2 = [
    { id: 'landlord-essentials-1-2', title: 'Landlord Essentials (1-2 bed)', desc: 'EPC + Gas Safety + Check-In Inventory', includes: ['EPC', 'Gas Safety', 'Check-In Inventory'], price: 315, savings: 30 },
    { id: 'landlord-essentials-no-epc-1-2', title: 'Landlord Essentials \u2013 No EPC (1-2 bed)', desc: 'Gas Safety + Check-In Inventory', includes: ['Gas Safety', 'Check-In Inventory'], price: 240, savings: 20 },
    { id: 'landlord-standard-1-2', title: 'Landlord Standard (1-2 bed)', desc: 'EPC + Gas Safety + EICR + Check-In Inventory', includes: ['EPC', 'Gas Safety', 'EICR', 'Check-In Inventory'], price: 470, savings: 65 },
    { id: 'landlord-standard-no-epc-1-2', title: 'Landlord Standard \u2013 No EPC (1-2 bed)', desc: 'Gas Safety + EICR + Check-In Inventory', includes: ['Gas Safety', 'EICR', 'Check-In Inventory'], price: 395, savings: 50 },
    { id: 'landlord-premium-1-2', title: 'Landlord Premium (1-2 bed)', desc: 'EPC + Gas Safety + EICR + Check-In + Check-Out', includes: ['EPC', 'Gas Safety', 'EICR', 'Check-In', 'Check-Out'], price: 550, savings: 90 },
    { id: 'landlord-premium-no-epc-1-2', title: 'Landlord Premium \u2013 No EPC (1-2 bed)', desc: 'Gas Safety + EICR + Check-In + Check-Out', includes: ['Gas Safety', 'EICR', 'Check-In', 'Check-Out'], price: 475, savings: 75 }
  ];
  
  const PACKAGES_3TO4 = [
    { id: 'landlord-essentials-3-4', title: 'Landlord Essentials (3-4 bed)', desc: 'EPC + Gas Safety + Check-In Inventory', includes: ['EPC', 'Gas Safety', 'Check-In Inventory'], price: 365, savings: 35 },
    { id: 'landlord-essentials-no-epc-3-4', title: 'Landlord Essentials \u2013 No EPC (3-4 bed)', desc: 'Gas Safety + Check-In Inventory', includes: ['Gas Safety', 'Check-In Inventory'], price: 290, savings: 25 },
    { id: 'landlord-standard-3-4', title: 'Landlord Standard (3-4 bed)', desc: 'EPC + Gas Safety + EICR + Check-In Inventory', includes: ['EPC', 'Gas Safety', 'EICR', 'Check-In Inventory'], price: 540, savings: 75 },
    { id: 'landlord-standard-no-epc-3-4', title: 'Landlord Standard \u2013 No EPC (3-4 bed)', desc: 'Gas Safety + EICR + Check-In Inventory', includes: ['Gas Safety', 'EICR', 'Check-In Inventory'], price: 455, savings: 60 }
  ];
  
  const MONTHS = ['January','February','March','April','May','June','July','August','September','October','November','December'];
  
  // ========================================
  // STATE
  // ========================================
  let currentMonth = new Date();
  let selectedDate = null;
  let selectedOffer = null;
  let isOutOfArea = false;
  let postcodeChecked = false;
  
  // ========================================
  // DOM HELPERS
  // ========================================
  const widget = document.getElementById('ci-booking-widget');
  const $ = (sel) => widget.querySelector(sel);
  const $$ = (sel) => widget.querySelectorAll(sel);
  
  // ========================================
  // UTILITIES
  // ========================================
  const formatMoney = (n) => '\u00A3' + n;
  
  const formatDate = (d) => {
    const day = d.getDate();
    const s = ['th','st','nd','rd'][day % 10 > 3 ? 0 : (day % 100 - day % 10 !== 10) * day % 10];
    return MONTHS[d.getMonth()] + ' ' + day + s + ', ' + d.getFullYear();
  };
  
  const sameDay = (a, b) => a && b && a.getDate() === b.getDate() && a.getMonth() === b.getMonth() && a.getFullYear() === b.getFullYear();
  
  const validateEmail = (email) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
  
  // ========================================
  // POSTCODE VALIDATION
  // ========================================
  function checkPostcode(postcode) {
    if (!postcode) return { valid: false, inArea: false };
    var clean = postcode.replace(/\s+/g, '').toUpperCase();
    var ukPostcodeRegex = /^[A-Z]{1,2}[0-9][0-9A-Z]?[0-9][A-Z]{2}$/;
    if (!ukPostcodeRegex.test(clean)) return { valid: false, inArea: false };
    var outwardMatch = clean.match(/^([A-Z]{1,2})([0-9]+[A-Z]?)/);
    if (!outwardMatch) return { valid: true, inArea: false };
    var areaLetters = outwardMatch[1];
    var inArea = IN_AREA_PREFIXES.some(function(prefix) {
      if (prefix.length === 2) return areaLetters === prefix;
      return areaLetters === prefix;
    });
    return { valid: true, inArea: inArea };
  }
  
  function handlePostcodeChange() {
    var postcodeInput = $('#ciPostcode');
    var statusEl = $('#ciPostcodeStatus');
    var postcode = postcodeInput.value.trim();
    if (!postcode) {
      statusEl.className = 'ci-postcode-status';
      statusEl.textContent = '';
      isOutOfArea = false;
      postcodeChecked = false;
      updateBasket();
      return;
    }
    var result = checkPostcode(postcode);
    if (!result.valid) {
      statusEl.className = 'ci-postcode-status';
      statusEl.textContent = '';
      isOutOfArea = false;
      postcodeChecked = false;
    } else if (result.inArea) {
      statusEl.className = 'ci-postcode-status ci-in-area';
      statusEl.textContent = '\u2713 Within London coverage area \u2013 no travel fee';
      isOutOfArea = false;
      postcodeChecked = true;
    } else {
      statusEl.className = 'ci-postcode-status ci-out-area';
      statusEl.textContent = '\u26A0 Outside London coverage \u2013 \u00A335 travel fee applies';
      isOutOfArea = true;
      postcodeChecked = true;
    }
    updateBasket();
  }
  
  // ========================================
  // CALENDAR
  // ========================================
  function renderCalendar() {
    var year = currentMonth.getFullYear();
    var month = currentMonth.getMonth();
    $('#ciCalMonth').textContent = MONTHS[month] + ' ' + year;
    var grid = $('#ciCalGrid');
    grid.querySelectorAll('.ci-cal-day').forEach(function(el) { el.remove(); });
    var first = new Date(year, month, 1);
    var last = new Date(year, month + 1, 0);
    var today = new Date(); today.setHours(0,0,0,0);
    var offset = first.getDay() === 0 ? 6 : first.getDay() - 1;
    selectedDate = null;
    updateSelectedDateLabel();
    for (var i = 0; i < offset; i++) {
      var c = document.createElement('div');
      c.className = 'ci-cal-day ci-empty ci-disabled';
      grid.appendChild(c);
    }
    for (var d = 1; d <= last.getDate(); d++) {
      var date = new Date(year, month, d);
      var c = document.createElement('div');
      c.className = 'ci-cal-day';
      c.textContent = d;
      var isPast = date < today;
      var isSunday = date.getDay() === 0;
      if (isPast || isSunday) {
        c.classList.add('ci-disabled');
      } else {
        (function(dt) {
          c.addEventListener('click', function() {
            selectedDate = dt;
            renderCalendarDays();
            updateSelectedDateLabel();
            updateBasket();
          });
        })(date);
      }
      if (sameDay(date, today)) c.classList.add('ci-today');
      if (sameDay(date, selectedDate)) c.classList.add('ci-selected');
      grid.appendChild(c);
    }
  }
  
  function renderCalendarDays() {
    var grid = $('#ciCalGrid');
    var days = grid.querySelectorAll('.ci-cal-day');
    var year = currentMonth.getFullYear();
    var month = currentMonth.getMonth();
    var today = new Date(); today.setHours(0,0,0,0);
    var dayNum = 1;
    var first = new Date(year, month, 1);
    var last = new Date(year, month + 1, 0);
    var offset = first.getDay() === 0 ? 6 : first.getDay() - 1;
    days.forEach(function(c, i) {
      if (i < offset || dayNum > last.getDate()) return;
      var date = new Date(year, month, dayNum);
      c.classList.toggle('ci-selected', sameDay(date, selectedDate));
      dayNum++;
    });
  }
  
  function updateSelectedDateLabel() {
    var label = $('#ciSelectedDateLabel');
    var text = $('#ciSelectedDateText');
    if (selectedDate) {
      text.textContent = formatDate(selectedDate);
      label.classList.add('ci-active');
    } else {
      label.classList.remove('ci-active');
    }
  }
  
  // ========================================
  // TABS
  // ========================================
  function setTab(name) {
    $$('.ci-tab').forEach(function(t) { t.classList.toggle('ci-active', t.dataset.tab === name); });
    $$('.ci-panel').forEach(function(p) { p.classList.toggle('ci-active', p.dataset.panel === name); });
  }
  
  // ========================================
  // OFFERS RENDERING
  // ========================================
  function createOfferElement(offer) {
    var div = document.createElement('div');
    div.className = 'ci-offer';
    div.dataset.id = offer.id;
    div.innerHTML = '<div class="ci-offer-radio"></div>' +
      '<div class="ci-offer-content">' +
      '<div class="ci-offer-title">' + offer.title + '</div>' +
      '<div class="ci-offer-desc">' + offer.desc + '</div>' +
      '</div>' +
      '<div class="ci-offer-meta">' +
      '<div class="ci-offer-price">' + formatMoney(offer.price) + '</div>' +
      (offer.savings ? '<div class="ci-offer-save">Save \u00A3' + offer.savings + '</div>' : '') +
      '</div>';
    div.addEventListener('click', function() { selectOffer(offer, div); });
    return div;
  }
  
  function renderOffers() {
    var singlesContainer = $('#ciOffersSingles');
    singlesContainer.innerHTML = '';
    SINGLES.forEach(function(o) { singlesContainer.appendChild(createOfferElement(o)); });
    var combosContainer = $('#ciOffersCombos');
    combosContainer.innerHTML = '';
    COMBOS.forEach(function(o) { combosContainer.appendChild(createOfferElement(o)); });
    var packages1to2Container = $('#ciOffersPackages1to2');
    packages1to2Container.innerHTML = '';
    PACKAGES_1TO2.forEach(function(o) { packages1to2Container.appendChild(createOfferElement(o)); });
    var packages3to4Container = $('#ciOffersPackages3to4');
    packages3to4Container.innerHTML = '';
    PACKAGES_3TO4.forEach(function(o) { packages3to4Container.appendChild(createOfferElement(o)); });
  }
  
  function selectOffer(offer, element) {
    $$('.ci-offer.ci-selected').forEach(function(el) { el.classList.remove('ci-selected'); });
    element.classList.add('ci-selected');
    selectedOffer = offer;
    updateBasket();
  }
  
  // ========================================
  // BASKET
  // ========================================
  function updateBasket() {
    var bd = $('#ciBasketDate');
    var bdv = $('#ciBasketDateValue');
    if (selectedDate) { bd.classList.remove('ci-empty'); bdv.textContent = formatDate(selectedDate); }
    else { bd.classList.add('ci-empty'); bdv.textContent = 'Select a date on the calendar'; }
    var basketEmpty = $('#ciBasketEmpty');
    var basketContent = $('#ciBasketContent');
    var basketItems = $('#ciBasketItems');
    var basketTotal = $('#ciBasketTotal');
    if (selectedOffer) {
      basketEmpty.style.display = 'none';
      basketContent.style.display = 'block';
      var total = selectedOffer.price;
      var itemsHTML = '<div class="ci-basket-item"><div>' +
        '<div class="ci-basket-item-name">' + selectedOffer.title + '</div>' +
        '<div class="ci-basket-item-includes">' + selectedOffer.includes.join(' \u2022 ') + '</div>' +
        '</div><div class="ci-basket-item-price">' + formatMoney(selectedOffer.price) + '</div></div>';
      if (isOutOfArea && postcodeChecked) {
        total += OUT_OF_AREA_FEE;
        itemsHTML += '<div class="ci-basket-item ci-basket-fee"><div>' +
          '<div class="ci-basket-item-name">Out of Area Travel Fee</div>' +
          '<div class="ci-basket-item-includes">Outside London coverage area</div>' +
          '</div><div class="ci-basket-item-price">' + formatMoney(OUT_OF_AREA_FEE) + '</div></div>';
      }
      basketItems.innerHTML = itemsHTML;
      basketTotal.textContent = formatMoney(total);
    } else {
      basketEmpty.style.display = 'block';
      basketContent.style.display = 'none';
    }
    var ready = selectedDate && selectedOffer;
    $('#ciForm').classList.toggle('ci-active', ready);
    $('#ciPayBtn').disabled = !ready;
  }
  
  // ========================================
  // FORM HANDLING (with email connection)
  // ========================================
  function handleSubmit(e) {
    e.preventDefault();
    if (!selectedDate || !selectedOffer) { alert('Please select a date and service.'); return; }
    var fd = new FormData($('#ciForm'));
    var data = Object.fromEntries(fd.entries());
    if (!data.name || !data.email || !data.phone || !data.postcode || !data.address || !data.type) {
      alert('Please complete all required fields.');
      return;
    }
    if (!validateEmail(data.email)) { alert('Please enter a valid email.'); return; }
    var postcodeResult = checkPostcode(data.postcode);
    if (!postcodeResult.valid) { alert('Please enter a valid UK postcode.'); return; }
    var finalTotal = selectedOffer.price;
    if (isOutOfArea) { finalTotal += OUT_OF_AREA_FEE; }
    var submitBtn = $('#ciRequestBtn');
    submitBtn.disabled = true;
    submitBtn.textContent = 'Sending...';
    var cfg = window.ciBookingConfig || {};
    var ajaxUrl = cfg.ajaxUrl || '/wp-admin/admin-ajax.php';
    var nonce = cfg.nonce || '';
    var formBody = new URLSearchParams();
    formBody.append('action', 'ci_booking_request');
    formBody.append('ci_nonce', nonce);
    formBody.append('name', data.name);
    formBody.append('email', data.email);
    formBody.append('phone', data.phone);
    formBody.append('postcode', data.postcode || '');
    formBody.append('address', data.address);
    formBody.append('type', data.type);
    formBody.append('bedrooms', data.bedrooms || '');
    formBody.append('notes', data.notes || '');
    formBody.append('service', selectedOffer.title);
    formBody.append('price', formatMoney(selectedOffer.price));
    formBody.append('date', formatDate(selectedDate));
    formBody.append('includes', selectedOffer.includes.join(', '));
    formBody.append('outOfArea', isOutOfArea ? 'yes' : 'no');
    formBody.append('travelFee', isOutOfArea ? OUT_OF_AREA_FEE : 0);
    formBody.append('total', formatMoney(finalTotal));
    fetch(ajaxUrl, {
      method: 'POST',
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
      body: formBody.toString()
    })
    .then(function(r) { return r.json(); })
    .then(function(result) {
      submitBtn.disabled = false;
      submitBtn.textContent = 'Request Booking';
      if (result.success) {
        $('#ciForm').classList.remove('ci-active');
        $('#ciSuccess').classList.add('ci-active');
        $('#ciSuccess').scrollIntoView({ behavior: 'smooth', block: 'center' });
      } else {
        alert('Issue sending request: ' + (result.data || 'Unknown error'));
      }
    })
    .catch(function(err) {
      submitBtn.disabled = false;
      submitBtn.textContent = 'Request Booking';
      console.log('Connection issue:', err);
      alert('Connection issue. Please try again or call us.');
    });
  }
  
  function handleCancel() {
    selectedDate = null;
    selectedOffer = null;
    isOutOfArea = false;
    postcodeChecked = false;
    $$('.ci-offer.ci-selected').forEach(function(el) { el.classList.remove('ci-selected'); });
    renderCalendar();
    updateSelectedDateLabel();
    updateBasket();
    $('#ciForm').reset();
    $('#ciPostcodeStatus').className = 'ci-postcode-status';
    $('#ciSuccess').classList.remove('ci-active');
  }
  
  /**
   * Pay Now hook for Braintree integration
   */
  function handlePay() {
    if (!selectedDate || !selectedOffer) { alert('Select a date and service first.'); return; }
    var amount = selectedOffer.price;
    if (isOutOfArea) { amount += OUT_OF_AREA_FEE; }
    console.log('Payment:', { amount: amount, offer: selectedOffer, date: selectedDate, outOfArea: isOutOfArea, travelFee: isOutOfArea ? OUT_OF_AREA_FEE : 0 });
    alert('Braintree hook \u2013 connect your payment flow here. Amount: \u00A3' + amount);
  }
  
  // ========================================
  // INITIALIZATION
  // ========================================
  function init() {
    renderCalendar();
    renderOffers();
    updateBasket();
    $('#ciPrevMonth').addEventListener('click', function() {
      currentMonth.setMonth(currentMonth.getMonth() - 1);
      renderCalendar();
      updateBasket();
    });
    $('#ciNextMonth').addEventListener('click', function() {
      currentMonth.setMonth(currentMonth.getMonth() + 1);
      renderCalendar();
      updateBasket();
    });
    $$('.ci-tab').forEach(function(t) { t.addEventListener('click', function() { setTab(t.dataset.tab); }); });
    $('#ciForm').addEventListener('submit', handleSubmit);
    $('#ciCancelBtn').addEventListener('click', handleCancel);
    $('#ciPayBtn').addEventListener('click', handlePay);
    var postcodeInput = $('#ciPostcode');
    if (postcodeInput) {
      postcodeInput.addEventListener('blur', handlePostcodeChange);
      postcodeInput.addEventListener('input', function() {
        clearTimeout(this.checkTimeout);
        this.checkTimeout = setTimeout(handlePostcodeChange, 500);
      });
    }
  }
  
  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init);
  else init();

})();
</script>

</div>

<!-- End Click Inventories Certificate Booking Widget v2.0 -->