{"id":1446,"date":"2021-06-16T15:52:40","date_gmt":"2021-06-16T15:52:40","guid":{"rendered":"https:\/\/demo.artureanec.com\/themes\/transx-new\/?page_id=30"},"modified":"2026-07-19T22:23:50","modified_gmt":"2026-07-19T22:23:50","slug":"get-guote","status":"publish","type":"page","link":"https:\/\/mouvexpress.com\/en\/get-guote\/","title":{"rendered":"GET A QUOTE"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1446\" class=\"elementor elementor-1446\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-5d05fb01 elementor-section-full_width elementor-section-stretched elementor-section-height-default elementor-section-height-default\" data-id=\"5d05fb01\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;stretch_section&quot;:&quot;section-stretched&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1fbf6d7\" data-id=\"1fbf6d7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6d55225 elementor-widget elementor-widget-image\" data-id=\"6d55225\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1000\" height=\"667\" src=\"https:\/\/mouvexpress.com\/wp-content\/uploads\/2024\/03\/afef11a64c.jpeg\" class=\"attachment-full size-full wp-image-1718\" alt=\"\" srcset=\"https:\/\/mouvexpress.com\/wp-content\/uploads\/2024\/03\/afef11a64c.jpeg 1000w, https:\/\/mouvexpress.com\/wp-content\/uploads\/2024\/03\/afef11a64c-300x200.jpeg 300w, https:\/\/mouvexpress.com\/wp-content\/uploads\/2024\/03\/afef11a64c-768x512.jpeg 768w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-9826fff e-con-full e-flex e-con e-parent\" data-id=\"9826fff\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-437a247 elementor-widget elementor-widget-html\" data-id=\"437a247\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!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>Book Your Move \u2013 MouvExpress<\/title>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=DM+Sans:wght@300;400;500;600&family=DM+Serif+Display&display=swap\" rel=\"stylesheet\">\n<link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/@tabler\/icons-webfont@latest\/tabler-icons.min.css\">\n<style>\n  :root {\n    --brand: #1A5EA8;\n    --brand-dark: #0D3F72;\n    --brand-light: #E8F1FB;\n    --green: #2E7D32;\n    --green-light: #E8F5E9;\n    --orange: #E65100;\n    --orange-light: #FFF3E0;\n    --text: #1A1A2E;\n    --text-2: #555570;\n    --text-3: #9090A8;\n    --border: #E2E2EE;\n    --border-2: #C8C8DC;\n    --bg: #F7F7FC;\n    --white: #FFFFFF;\n    --radius: 10px;\n    --radius-sm: 6px;\n    --shadow: 0 2px 12px rgba(26,94,168,0.08);\n    --shadow-lg: 0 8px 32px rgba(26,94,168,0.13);\n    --font: 'DM Sans', sans-serif;\n    --font-display: 'DM Serif Display', serif;\n  }\n  * { box-sizing: border-box; margin: 0; padding: 0; }\n  body { font-family: var(--font); background: var(--bg); color: var(--text); -webkit-font-smoothing: antialiased; }\n\n  .booking-wrap { max-width: 700px; margin: 0 auto; padding: 2.5rem 1.25rem 4rem; }\n\n  .booking-header { margin-bottom: 2rem; }\n  .booking-header h2 { font-family: var(--font-display); font-size: 28px; color: var(--text); margin-bottom: 6px; }\n  .booking-header p { font-size: 14px; color: var(--text-2); display: flex; align-items: center; gap: 6px; }\n  .gcal-pill { display: inline-flex; align-items: center; gap: 5px; background: var(--brand-light); color: var(--brand); border-radius: 20px; padding: 3px 10px; font-size: 12px; font-weight: 500; }\n\n  \/* Stepper *\/\n  .stepper { display: flex; margin-bottom: 2rem; position: relative; }\n  .stepper::before { content: ''; position: absolute; top: 15px; left: 0; right: 0; height: 1px; background: var(--border); z-index: 0; }\n  .step { flex: 1; display: flex; flex-direction: column; align-items: center; position: relative; z-index: 1; }\n  .step-dot { width: 30px; height: 30px; border-radius: 50%; border: 1.5px solid var(--border-2); background: var(--white); display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 600; color: var(--text-3); transition: all 0.25s; }\n  .step-dot.active { background: var(--brand); border-color: var(--brand); color: #fff; box-shadow: 0 0 0 4px var(--brand-light); }\n  .step-dot.done { background: var(--green); border-color: var(--green); color: #fff; }\n  .step-label { font-size: 11px; color: var(--text-3); margin-top: 6px; font-weight: 500; }\n  .step-label.active { color: var(--brand); }\n  .step-label.done { color: var(--green); }\n\n  \/* Card *\/\n  .card { background: var(--white); border: 1px solid var(--border); border-radius: var(--radius); padding: 1.5rem; margin-bottom: 1rem; box-shadow: var(--shadow); }\n  .card-title { font-size: 15px; font-weight: 600; margin-bottom: 1rem; display: flex; align-items: center; gap: 8px; color: var(--text); }\n  .card-title i { color: var(--brand); font-size: 18px; }\n\n  \/* Form *\/\n  .row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 12px; }\n  .row.full { grid-template-columns: 1fr; }\n  .row.three { grid-template-columns: 1fr 1fr 1fr; }\n  .row.last { margin-bottom: 0; }\n  label { font-size: 12px; font-weight: 500; color: var(--text-2); display: block; margin-bottom: 5px; text-transform: uppercase; letter-spacing: 0.04em; }\n  input, select, textarea {\n    width: 100%; font-family: var(--font); font-size: 14px; color: var(--text);\n    background: var(--bg); border: 1px solid var(--border); border-radius: var(--radius-sm);\n    padding: 9px 12px; outline: none; transition: border-color 0.15s, box-shadow 0.15s;\n  }\n  input:focus, select:focus, textarea:focus { border-color: var(--brand); box-shadow: 0 0 0 3px var(--brand-light); background: var(--white); }\n  textarea { height: 80px; resize: vertical; }\n  .field-error { border-color: #E53935 !important; }\n\n  \/* Move type *\/\n  .type-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 14px; }\n  .type-card { border: 1.5px solid var(--border); border-radius: var(--radius); padding: 14px; cursor: pointer; transition: all 0.15s; display: flex; align-items: center; gap: 12px; }\n  .type-card:hover { border-color: var(--brand); background: var(--brand-light); }\n  .type-card.selected { border-color: var(--brand); background: var(--brand-light); }\n  .type-icon { width: 40px; height: 40px; border-radius: 8px; background: var(--border); display: flex; align-items: center; justify-content: center; font-size: 20px; color: var(--text-3); flex-shrink: 0; transition: all 0.15s; }\n  .type-card.selected .type-icon { background: var(--brand); color: #fff; }\n  .type-label { font-size: 14px; font-weight: 600; }\n  .type-sub { font-size: 12px; color: var(--text-3); margin-top: 2px; }\n\n  \/* Address group *\/\n  .addr-group { border: 1px solid var(--border); border-radius: var(--radius); padding: 14px; margin-bottom: 10px; background: var(--bg); }\n  .addr-group:last-of-type { margin-bottom: 0; }\n  .addr-title { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.06em; color: var(--brand); margin-bottom: 12px; display: flex; align-items: center; gap: 6px; }\n\n  \/* Calendar *\/\n  .date-tabs { display: flex; gap: 8px; margin-bottom: 14px; }\n  .date-tab { flex: 1; text-align: center; padding: 9px; border: 1.5px solid var(--border); border-radius: var(--radius-sm); font-size: 13px; font-weight: 500; cursor: pointer; transition: all 0.15s; color: var(--text-2); }\n  .date-tab.active { background: var(--brand); color: #fff; border-color: var(--brand); }\n  .cal-nav { display: flex; justify-content: space-between; align-items: center; margin-bottom: 14px; }\n  .cal-nav span { font-size: 15px; font-weight: 600; }\n  .cal-nav button { background: none; border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 5px 10px; cursor: pointer; font-size: 14px; color: var(--text-2); transition: all 0.15s; }\n  .cal-nav button:hover { background: var(--brand-light); border-color: var(--brand); color: var(--brand); }\n  .cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; }\n  .cal-head { font-size: 11px; font-weight: 600; color: var(--text-3); text-align: center; padding: 4px 0; text-transform: uppercase; letter-spacing: 0.04em; }\n  .cal-day { aspect-ratio: 1; border-radius: var(--radius-sm); display: flex; align-items: center; justify-content: center; font-size: 13px; cursor: pointer; border: 1px solid transparent; transition: all 0.12s; font-weight: 500; }\n  .cal-day:hover:not(.empty):not(.past) { background: var(--brand-light); color: var(--brand); }\n  .cal-day.past { color: var(--text-3); cursor: default; font-weight: 400; }\n  .cal-day.empty { cursor: default; }\n  .cal-day.today { border-color: var(--brand); color: var(--brand); }\n  .cal-day.selected { background: var(--brand); color: #fff; border-color: var(--brand); }\n  .cal-day.end-date { background: var(--green); color: #fff; border-color: var(--green); }\n  .cal-day.in-range { background: var(--brand-light); color: var(--brand); border-color: transparent; }\n  .date-badge { display: inline-flex; align-items: center; gap: 6px; background: var(--brand-light); color: var(--brand); border-radius: 20px; padding: 5px 12px; font-size: 13px; font-weight: 500; margin-top: 10px; }\n\n  \/* Time slots *\/\n  .time-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; }\n  .time-slot { border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 9px 6px; text-align: center; font-size: 12px; font-weight: 500; cursor: pointer; transition: all 0.12s; color: var(--text-2); }\n  .time-slot:hover { border-color: var(--brand); color: var(--brand); background: var(--brand-light); }\n  .time-slot.selected { background: var(--brand); color: #fff; border-color: var(--brand); }\n\n  \/* Summary *\/\n  .summary-row { display: flex; justify-content: space-between; align-items: flex-start; padding: 9px 0; border-bottom: 1px solid var(--border); font-size: 14px; }\n  .summary-row:last-child { border-bottom: none; }\n  .summary-key { color: var(--text-3); font-size: 12px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.04em; flex-shrink: 0; margin-right: 12px; padding-top: 2px; }\n  .summary-val { text-align: right; font-weight: 500; }\n\n  \/* Distance *\/\n  .dist-grid { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 10px; margin-top: 12px; }\n  .dist-metric { background: var(--bg); border-radius: var(--radius-sm); padding: 12px; text-align: center; border: 1px solid var(--border); }\n  .dist-metric .val { font-size: 20px; font-weight: 600; color: var(--brand); }\n  .dist-metric .lbl { font-size: 11px; color: var(--text-3); margin-top: 3px; text-transform: uppercase; letter-spacing: 0.04em; }\n  .dist-route { display: flex; align-items: center; gap: 8px; margin-top: 12px; padding: 10px 14px; background: var(--bg); border-radius: var(--radius-sm); border: 1px solid var(--border); font-size: 13px; }\n  .dist-dot { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; }\n  .dist-line { flex: 1; height: 1px; background: var(--border-2); position: relative; }\n  .dist-line::after { content: attr(data-km); position: absolute; top: -10px; left: 50%; transform: translateX(-50%); font-size: 11px; color: var(--text-3); white-space: nowrap; background: var(--bg); padding: 0 6px; font-weight: 600; }\n\n  \/* Badges *\/\n  .info-badge { display: flex; align-items: flex-start; gap: 10px; padding: 12px 14px; border-radius: var(--radius-sm); margin-top: 10px; font-size: 13px; }\n  .info-badge.blue { background: var(--brand-light); color: var(--brand-dark); border: 1px solid #B8D4F0; }\n  .info-badge.orange { background: var(--orange-light); color: var(--orange); border: 1px solid #FFB74D; }\n  .info-badge i { font-size: 18px; flex-shrink: 0; margin-top: 1px; }\n  .info-badge .badge-title { font-weight: 600; margin-bottom: 2px; }\n  .info-badge .badge-sub { font-size: 12px; opacity: 0.8; }\n\n  \/* Status steps *\/\n  .status-steps { margin-top: 1.25rem; }\n  .status-step { display: flex; align-items: center; gap: 12px; padding: 10px 0; border-bottom: 1px solid var(--border); }\n  .status-step:last-child { border-bottom: none; }\n  .s-icon { width: 28px; height: 28px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 13px; flex-shrink: 0; }\n  .s-icon.pending { background: var(--bg); border: 1px solid var(--border); color: var(--text-3); }\n  .s-icon.loading { background: var(--brand-light); border: 1px solid var(--brand); }\n  .s-icon.done { background: var(--green-light); border: 1px solid var(--green); color: var(--green); }\n  .s-icon.error { background: #FFEBEE; border: 1px solid #EF9A9A; color: #C62828; }\n  .s-label { font-size: 13px; font-weight: 500; }\n  .s-sub { font-size: 12px; color: var(--text-3); }\n\n  \/* Success *\/\n  .success-box { background: linear-gradient(135deg, #E8F5E9 0%, #F1F8E9 100%); border: 1px solid #A5D6A7; border-radius: var(--radius); padding: 2rem; text-align: center; }\n  .success-icon { font-size: 44px; color: var(--green); margin-bottom: 10px; }\n  .success-title { font-family: var(--font-display); font-size: 22px; color: var(--green); margin-bottom: 4px; }\n  .success-sub { font-size: 14px; color: #388E3C; }\n\n  \/* Email preview *\/\n  .email-block { margin-bottom: 1.25rem; }\n  .email-from { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; font-size: 13px; font-weight: 600; }\n  .email-from i { color: var(--green); font-size: 18px; }\n  .email-body { background: var(--bg); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 1rem; font-size: 13px; line-height: 1.7; color: var(--text-2); }\n  .email-subject { font-size: 11px; text-transform: uppercase; letter-spacing: 0.05em; color: var(--text-3); margin-bottom: 8px; font-weight: 600; }\n\n  \/* Actions *\/\n  .actions { display: flex; gap: 10px; margin-top: 1.25rem; }\n  .btn { border-radius: var(--radius-sm); padding: 11px 22px; font-size: 14px; font-weight: 600; cursor: pointer; display: flex; align-items: center; gap: 7px; transition: all 0.15s; border: none; font-family: var(--font); justify-content: center; }\n  .btn-primary { background: var(--brand); color: #fff; flex: 1; }\n  .btn-primary:hover { background: var(--brand-dark); }\n  .btn-primary:disabled { background: var(--border-2); color: var(--text-3); cursor: default; }\n  .btn-secondary { background: none; border: 1.5px solid var(--border-2); color: var(--text); }\n  .btn-secondary:hover { background: var(--bg); border-color: var(--brand); color: var(--brand); }\n\n  .loading-dots { display: inline-flex; gap: 3px; align-items: center; }\n  .loading-dots span { width: 5px; height: 5px; border-radius: 50%; background: var(--brand); animation: ldot 1.2s infinite; }\n  .loading-dots span:nth-child(2) { animation-delay: 0.2s; }\n  .loading-dots span:nth-child(3) { animation-delay: 0.4s; }\n  @keyframes ldot { 0%,80%,100%{transform:scale(0.5);opacity:0.4}40%{transform:scale(1);opacity:1} }\n\n  .hint { font-size: 12px; color: var(--text-3); margin-bottom: 10px; }\n  .hidden { display: none !important; }\n<\/style>\n<\/head>\n<body>\n<div class=\"booking-wrap\">\n\n  <div class=\"booking-header\">\n    <h2>Book Your Move<\/h2>\n    <p>\n      Residential & commercial \u00b7 \n      <span class=\"gcal-pill\"><i class=\"ti ti-mail\"><\/i> Booking sent to info@mouvexpress.com<\/span>\n    <\/p>\n  <\/div>\n\n  <!-- Stepper -->\n  <div class=\"stepper\">\n    <div class=\"step\"><div class=\"step-dot active\" id=\"dot-1\">1<\/div><div class=\"step-label active\" id=\"lbl-1\">Details<\/div><\/div>\n    <div class=\"step\"><div class=\"step-dot\" id=\"dot-2\">2<\/div><div class=\"step-label\" id=\"lbl-2\">Schedule<\/div><\/div>\n    <div class=\"step\"><div class=\"step-dot\" id=\"dot-3\">3<\/div><div class=\"step-label\" id=\"lbl-3\">Review<\/div><\/div>\n    <div class=\"step\"><div class=\"step-dot\" id=\"dot-4\">4<\/div><div class=\"step-label\" id=\"lbl-4\">Confirm<\/div><\/div>\n  <\/div>\n\n  <!-- STEP 1 -->\n  <div id=\"step1\">\n    <div class=\"card\">\n      <div class=\"card-title\"><i class=\"ti ti-user\"><\/i> Your information<\/div>\n      <div class=\"row\">\n        <div><label>First name<\/label><input type=\"text\" id=\"fname\" placeholder=\"Marie\"><\/div>\n        <div><label>Last name<\/label><input type=\"text\" id=\"lname\" placeholder=\"Tremblay\"><\/div>\n      <\/div>\n      <div class=\"row last\">\n        <div><label>Email address<\/label><input type=\"email\" id=\"email\" placeholder=\"marie@email.com\"><\/div>\n        <div><label>Phone number<\/label><input type=\"tel\" id=\"phone\" placeholder=\"+1 514 555 0100\"><\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"card\">\n      <div class=\"card-title\"><i class=\"ti ti-truck\"><\/i> Move details<\/div>\n\n      <div class=\"type-grid\">\n        <div class=\"type-card\" onclick=\"selectType(this,'residential')\">\n          <div class=\"type-icon\"><i class=\"ti ti-building-community\"><\/i><\/div>\n          <div><div class=\"type-label\">Residential<\/div><div class=\"type-sub\">Home, condo, apartment<\/div><\/div>\n        <\/div>\n        <div class=\"type-card\" onclick=\"selectType(this,'commercial')\">\n          <div class=\"type-icon\"><i class=\"ti ti-briefcase\"><\/i><\/div>\n          <div><div class=\"type-label\">Commercial<\/div><div class=\"type-sub\">Office, retail, warehouse<\/div><\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"addr-group\">\n        <div class=\"addr-title\"><i class=\"ti ti-map-pin\" style=\"font-size:14px\"><\/i> Origin \u2014 Moving from<\/div>\n        <div class=\"row full\" style=\"margin-bottom:10px\"><div><label>Street address<\/label><input type=\"text\" id=\"origin\" placeholder=\"123 Rue Saint-Denis\"><\/div><\/div>\n        <div class=\"row three\" style=\"margin-bottom:10px\">\n          <div><label>City<\/label><input type=\"text\" id=\"origin-city\" placeholder=\"Montr\u00e9al\"><\/div>\n          <div><label>Province<\/label><select id=\"origin-prov\"><option>QC<\/option><option>ON<\/option><option>BC<\/option><option>AB<\/option><option>MB<\/option><option>SK<\/option><option>NS<\/option><option>NB<\/option><option>NL<\/option><option>PE<\/option><option>NT<\/option><option>YT<\/option><option>NU<\/option><\/select><\/div>\n          <div><label>Postal code<\/label><input type=\"text\" id=\"origin-postal\" placeholder=\"H2X 1Y4\" maxlength=\"7\"><\/div>\n        <\/div>\n        <div class=\"row\" style=\"margin-bottom:10px\">\n          <div><label>Floor level<\/label><select id=\"origin-floor\"><option value=\"\">Select...<\/option><option>Ground \/ basement<\/option><option>1st floor<\/option><option>2nd floor<\/option><option>3rd floor<\/option><option>4th floor<\/option><option>5th floor<\/option><option>6th\u201310th floor<\/option><option>11th floor+<\/option><\/select><\/div>\n          <div><label>Elevator?<\/label><select id=\"origin-elev\"><option>Yes<\/option><option>No<\/option><\/select><\/div>\n        <\/div>\n        <div class=\"row last\">\n          <div><label>Property size<\/label><select id=\"origin-size\"><option value=\"\">Select...<\/option><option>Studio (2\u00bd)<\/option><option>1 bedroom (3\u00bd)<\/option><option>2 bedrooms (4\u00bd)<\/option><option>3 bedrooms (5\u00bd)<\/option><option>4 bedrooms (6\u00bd)<\/option><option>Small office (1\u201310 desks)<\/option><option>Medium office (10\u201350 desks)<\/option><option>Large office \/ warehouse<\/option><\/select><\/div>\n          <div><label>Special items (optional)<\/label><input type=\"text\" id=\"notes\" placeholder=\"Piano, fragile items...\"><\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"addr-group\">\n        <div class=\"addr-title\"><i class=\"ti ti-flag\" style=\"font-size:14px\"><\/i> Destination \u2014 Moving to<\/div>\n        <div class=\"row full\" style=\"margin-bottom:10px\"><div><label>Street address<\/label><input type=\"text\" id=\"dest\" placeholder=\"456 Ave du Parc\"><\/div><\/div>\n        <div class=\"row three\" style=\"margin-bottom:10px\">\n          <div><label>City<\/label><input type=\"text\" id=\"dest-city\" placeholder=\"Montr\u00e9al\"><\/div>\n          <div><label>Province<\/label><select id=\"dest-prov\"><option>QC<\/option><option>ON<\/option><option>BC<\/option><option>AB<\/option><option>MB<\/option><option>SK<\/option><option>NS<\/option><option>NB<\/option><option>NL<\/option><option>PE<\/option><option>NT<\/option><option>YT<\/option><option>NU<\/option><\/select><\/div>\n          <div><label>Postal code<\/label><input type=\"text\" id=\"dest-postal\" placeholder=\"H2W 2E1\" maxlength=\"7\"><\/div>\n        <\/div>\n        <div class=\"row\" style=\"margin-bottom:10px\">\n          <div><label>Floor level<\/label><select id=\"dest-floor\"><option value=\"\">Select...<\/option><option>Ground \/ basement<\/option><option>1st floor<\/option><option>2nd floor<\/option><option>3rd floor<\/option><option>4th floor<\/option><option>5th floor<\/option><option>6th\u201310th floor<\/option><option>11th floor+<\/option><\/select><\/div>\n          <div><label>Elevator?<\/label><select id=\"dest-elev\"><option>Yes<\/option><option>No<\/option><\/select><\/div>\n        <\/div>\n        <div class=\"row last\">\n          <div><label>Property size<\/label><select id=\"dest-size\"><option value=\"\">Select...<\/option><option>Studio (2\u00bd)<\/option><option>1 bedroom (3\u00bd)<\/option><option>2 bedrooms (4\u00bd)<\/option><option>3 bedrooms (5\u00bd)<\/option><option>4 bedrooms (6\u00bd)<\/option><option>Small office (1\u201310 desks)<\/option><option>Medium office (10\u201350 desks)<\/option><option>Large office \/ warehouse<\/option><\/select><\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n    <div class=\"actions\">\n      <button class=\"btn btn-primary\" onclick=\"goStep2()\"><i class=\"ti ti-arrow-right\"><\/i> Continue to schedule<\/button>\n    <\/div>\n  <\/div>\n\n  <!-- STEP 2 -->\n  <div id=\"step2\" class=\"hidden\">\n    <div class=\"card\">\n      <div class=\"card-title\"><i class=\"ti ti-calendar\"><\/i> Move dates<\/div>\n      <div class=\"date-tabs\">\n        <div class=\"date-tab active\" id=\"tab-single\" onclick=\"setDateMode('single')\"><i class=\"ti ti-calendar-event\" style=\"font-size:13px;vertical-align:-1px;margin-right:4px\"><\/i>Single day<\/div>\n        <div class=\"date-tab\" id=\"tab-range\" onclick=\"setDateMode('range')\"><i class=\"ti ti-calendar-stats\" style=\"font-size:13px;vertical-align:-1px;margin-right:4px\"><\/i>Multiple days<\/div>\n      <\/div>\n      <div class=\"hint\" id=\"date-hint\">Click a date to select your moving day.<\/div>\n      <div class=\"cal-nav\">\n        <button onclick=\"prevMonth()\"><i class=\"ti ti-chevron-left\"><\/i><\/button>\n        <span id=\"cal-title\"><\/span>\n        <button onclick=\"nextMonth()\"><i class=\"ti ti-chevron-right\"><\/i><\/button>\n      <\/div>\n      <div class=\"cal-grid\" id=\"cal-head\"><\/div>\n      <div class=\"cal-grid\" id=\"cal-days\" style=\"margin-top:4px\"><\/div>\n      <div id=\"date-sel\"><\/div>\n    <\/div>\n    <div class=\"card\">\n      <div class=\"card-title\"><i class=\"ti ti-clock\"><\/i> Start time<\/div>\n      <div class=\"time-grid\" id=\"time-slots\"><\/div>\n    <\/div>\n    <div class=\"actions\">\n      <button class=\"btn btn-secondary\" onclick=\"goStep1()\">Back<\/button>\n      <button class=\"btn btn-primary\" id=\"btn-s2\" onclick=\"goStep3()\" disabled><i class=\"ti ti-arrow-right\"><\/i> Review booking<\/button>\n    <\/div>\n  <\/div>\n\n  <!-- STEP 3 -->\n  <div id=\"step3\" class=\"hidden\">\n    <div class=\"card\">\n      <div class=\"card-title\"><i class=\"ti ti-clipboard-check\"><\/i> Review your booking<\/div>\n      <div id=\"summary-content\"><\/div>\n    <\/div>\n    <div class=\"card\">\n      <div class=\"card-title\"><i class=\"ti ti-route\"><\/i> Distance estimate<\/div>\n      <div id=\"dist-content\"><div style=\"display:flex;align-items:center;gap:8px;font-size:13px;color:var(--text-3)\"><div class=\"loading-dots\"><span><\/span><span><\/span><span><\/span><\/div> Calculating\u2026<\/div><\/div>\n    <\/div>\n    <div class=\"card\">\n      <div class=\"card-title\"><i class=\"ti ti-send\"><\/i> On confirmation<\/div>\n      <div class=\"info-badge blue\"><i class=\"ti ti-mail\"><\/i><div><div class=\"badge-title\">Booking notification<\/div><div class=\"badge-sub\">Emailed to info@mouvexpress.com with all details<\/div><\/div><\/div>\n      <div class=\"info-badge orange\" style=\"margin-top:8px\"><i class=\"ti ti-mail-check\"><\/i><div><div class=\"badge-title\">Customer confirmation<\/div><div class=\"badge-sub\">Sent to your email with a summary of the move<\/div><\/div><\/div>\n    <\/div>\n    <div class=\"actions\">\n      <button class=\"btn btn-secondary\" onclick=\"goStep2()\">Back<\/button>\n      <button class=\"btn btn-primary\" id=\"btn-confirm\" onclick=\"confirmBooking()\"><i class=\"ti ti-checks\"><\/i> Confirm & book<\/button>\n    <\/div>\n  <\/div>\n\n  <!-- STEP 4 -->\n  <div id=\"step4\" class=\"hidden\">\n    <div class=\"card\">\n      <div class=\"success-box\">\n        <div class=\"success-icon\"><i class=\"ti ti-circle-check\"><\/i><\/div>\n        <div class=\"success-title\">Booking Confirmed!<\/div>\n        <div class=\"success-sub\" id=\"confirm-sub\"><\/div>\n      <\/div>\n      <div class=\"status-steps\" id=\"status-steps\"><\/div>\n      <div id=\"dist-summary\"><\/div>\n      <div id=\"email-log\" style=\"margin-top:1rem\"><\/div>\n    <\/div>\n    <div class=\"actions\">\n      <button class=\"btn btn-primary\" onclick=\"resetForm()\"><i class=\"ti ti-plus\"><\/i> Book another move<\/button>\n    <\/div>\n  <\/div>\n\n<\/div>\n\n<script>\n\/\/ WordPress admin-ajax.php endpoint that the mouvexpress-booking-mailer\n\/\/ mu-plugin listens on (action=mouvex_send_booking). Update the domain\n\/\/ if this widget is ever embedded somewhere other than mouvexpress.com.\nconst WP_AJAX_URL = \"https:\/\/mouvexpress.com\/wp-admin\/admin-ajax.php\";\n\nlet S = {\n  type:'',fname:'',lname:'',email:'',phone:'',\n  origin:'',originCity:'',originProv:'QC',originPostal:'',originFloor:'',originElev:'',originSize:'',\n  dest:'',destCity:'',destProv:'QC',destPostal:'',destFloor:'',destElev:'',destSize:'',\n  notes:'',startDate:null,endDate:null,time:'',\n  distKm:null,distMin:null\n};\nlet cY,cM,dMode='single',pStage='start';\nconst now=new Date();cY=now.getFullYear();cM=now.getMonth();\nconst MOS=['January','February','March','April','May','June','July','August','September','October','November','December'];\nconst DYS=['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];\nconst TMS=['7:00 AM','8:00 AM','9:00 AM','10:00 AM','11:00 AM','12:00 PM','1:00 PM','2:00 PM','3:00 PM','4:00 PM','5:00 PM','6:00 PM'];\n\nfunction selectType(el,v){document.querySelectorAll('.type-card').forEach(c=>c.classList.remove('selected'));el.classList.add('selected');S.type=v;}\nfunction setDateMode(m){\n  dMode=m;pStage='start';S.startDate=null;S.endDate=null;\n  ['single','range'].forEach(t=>document.getElementById('tab-'+t).className='date-tab'+(m===t?' active':''));\n  document.getElementById('date-hint').textContent=m==='single'?'Click a date to select your moving day.':'Click your start date, then click your end date.';\n  document.getElementById('btn-s2').disabled=true;\n  renderCal();document.getElementById('date-sel').innerHTML='';\n}\nfunction goStep1(){showStep(1);}\nfunction goStep2(){\n  const req=['fname','lname','email','phone','origin','origin-city','origin-postal','origin-floor','origin-size','dest','dest-city','dest-postal','dest-floor','dest-size'];\n  let ok=true;\n  req.forEach(id=>{const el=document.getElementById(id);if(!el||!el.value.trim()){if(el)el.classList.add('field-error');ok=false;}else el.classList.remove('field-error');});\n  if(!S.type)ok=false;if(!ok)return;\n  S.fname=document.getElementById('fname').value;\n  S.lname=document.getElementById('lname').value;\n  S.email=document.getElementById('email').value;\n  S.phone=document.getElementById('phone').value;\n  S.origin=document.getElementById('origin').value;\n  S.originCity=document.getElementById('origin-city').value;\n  S.originProv=document.getElementById('origin-prov').value;\n  S.originPostal=document.getElementById('origin-postal').value.toUpperCase();\n  S.originFloor=document.getElementById('origin-floor').value;\n  S.originElev=document.getElementById('origin-elev').value;\n  S.originSize=document.getElementById('origin-size').value;\n  S.dest=document.getElementById('dest').value;\n  S.destCity=document.getElementById('dest-city').value;\n  S.destProv=document.getElementById('dest-prov').value;\n  S.destPostal=document.getElementById('dest-postal').value.toUpperCase();\n  S.destFloor=document.getElementById('dest-floor').value;\n  S.destElev=document.getElementById('dest-elev').value;\n  S.destSize=document.getElementById('dest-size').value;\n  S.notes=document.getElementById('notes').value;\n  showStep(2);renderCal();renderTimes();\n}\nfunction goStep3(){\n  if(!S.startDate||!S.time)return;\n  showStep(3);renderSummary();calcDist();\n}\nfunction showStep(n){\n  [1,2,3,4].forEach(i=>{\n    document.getElementById('step'+i).classList.add('hidden');\n    const dot=document.getElementById('dot-'+i);\n    const lbl=document.getElementById('lbl-'+i);\n    if(i<n){dot.className='step-dot done';dot.innerHTML='<i class=\"ti ti-check\" style=\"font-size:12px\"><\/i>';lbl.className='step-label done';}\n    else if(i===n){dot.className='step-dot active';dot.innerHTML=i;lbl.className='step-label active';}\n    else{dot.className='step-dot';dot.innerHTML=i;lbl.className='step-label';}\n  });\n  document.getElementById('step'+n).classList.remove('hidden');\n  window.scrollTo({top:0,behavior:'smooth'});\n}\nfunction fd(d){return d?d.toLocaleDateString('en-CA',{weekday:'short',month:'short',day:'numeric',year:'numeric'}):''}\nfunction renderCal(){\n  document.getElementById('cal-title').textContent=MOS[cM]+' '+cY;\n  document.getElementById('cal-head').innerHTML=DYS.map(d=>`<div class=\"cal-head\">${d}<\/div>`).join('');\n  const first=new Date(cY,cM,1).getDay(),dim=new Date(cY,cM+1,0).getDate();\n  const today=new Date();today.setHours(0,0,0,0);\n  let h='';\n  for(let i=0;i<first;i++)h+=`<div class=\"cal-day empty\"><\/div>`;\n  for(let d=1;d<=dim;d++){\n    const dt=new Date(cY,cM,d);\n    const past=dt<today,sun=dt.getDay()===0,isToday=dt.toDateString()===today.toDateString();\n    const isSt=S.startDate&&dt.toDateString()===S.startDate.toDateString();\n    const isEn=S.endDate&&dt.toDateString()===S.endDate.toDateString();\n    const inR=S.startDate&&S.endDate&&dt>S.startDate&&dt<S.endDate;\n    let cls='cal-day';\n    if(past||sun)cls+=' past';\n    else if(isSt)cls+=' selected';\n    else if(isEn)cls+=' end-date';\n    else if(inR)cls+=' in-range';\n    else if(isToday)cls+=' today';\n    h+=`<div class=\"${cls}\"${(!past&&!sun)?` onclick=\"pickDay(${d})\"`:''} >${d}<\/div>`;\n  }\n  document.getElementById('cal-days').innerHTML=h;\n}\nfunction pickDay(d){\n  const c=new Date(cY,cM,d);\n  if(dMode==='single'){S.startDate=c;S.endDate=null;}\n  else{\n    if(pStage==='start'){S.startDate=c;S.endDate=null;pStage='end';document.getElementById('date-hint').textContent='Now click your end date.';}\n    else{if(c<=S.startDate){S.startDate=c;S.endDate=null;return;}S.endDate=c;pStage='start';document.getElementById('date-hint').textContent='Range selected.';}\n  }\n  renderCal();updDateSel();chkS2();\n}\nfunction updDateSel(){\n  const el=document.getElementById('date-sel');\n  if(!S.startDate){el.innerHTML='';return;}\n  if(dMode==='single')el.innerHTML=`<div class=\"date-badge\"><i class=\"ti ti-calendar-check\"><\/i> ${fd(S.startDate)}<\/div>`;\n  else el.innerHTML=`<div class=\"date-badge\"><i class=\"ti ti-calendar-check\"><\/i> ${fd(S.startDate)}${S.endDate?' \u2192 '+fd(S.endDate):' \u2192 pick end date'}<\/div>`;\n}\nfunction chkS2(){document.getElementById('btn-s2').disabled=!(S.startDate&&(dMode==='single'||S.endDate)&&S.time);}\nfunction renderTimes(){document.getElementById('time-slots').innerHTML=TMS.map(t=>`<div class=\"time-slot${S.time===t?' selected':''}\" onclick=\"pickTime(this,'${t}')\">${t}<\/div>`).join('');}\nfunction pickTime(el,t){document.querySelectorAll('.time-slot').forEach(s=>s.classList.remove('selected'));el.classList.add('selected');S.time=t;chkS2();}\nfunction prevMonth(){cM--;if(cM<0){cM=11;cY--;}renderCal();}\nfunction nextMonth(){cM++;if(cM>11){cM=0;cY++;}renderCal();}\nfunction renderSummary(){\n  const dl=S.endDate?`${fd(S.startDate)} \u2192 ${fd(S.endDate)}`:fd(S.startDate);\n  const rows=[\n    ['Customer',`${S.fname} ${S.lname}`],['Move type',S.type.charAt(0).toUpperCase()+S.type.slice(1)],\n    ['Date(s)',dl],['Start time',S.time],\n    ['From',`${S.origin}, ${S.originCity}, ${S.originProv} ${S.originPostal}`],\n    ['Origin floor',`${S.originFloor} \u00b7 Elevator: ${S.originElev}`],['Origin size',S.originSize],\n    ['To',`${S.dest}, ${S.destCity}, ${S.destProv} ${S.destPostal}`],\n    ['Dest. floor',`${S.destFloor} \u00b7 Elevator: ${S.destElev}`],['Dest. size',S.destSize],\n    S.notes?['Notes',S.notes]:null\n  ].filter(Boolean);\n  document.getElementById('summary-content').innerHTML=rows.map(([k,v])=>`<div class=\"summary-row\"><span class=\"summary-key\">${k}<\/span><span class=\"summary-val\">${v}<\/span><\/div>`).join('');\n}\nconst PC={'H2X':[45.5126,-73.5667],'H2W':[45.5150,-73.5710],'H3A':[45.5040,-73.5750],'H2L':[45.5264,-73.5580],'H2T':[45.5200,-73.5936],'H3B':[45.4990,-73.5690],'H3C':[45.4920,-73.5620],'H3G':[45.4970,-73.5790],'H3H':[45.4920,-73.5840],'H3J':[45.4780,-73.5860],'H3K':[45.4640,-73.5950],'H3L':[45.5080,-73.6550],'H3M':[45.5030,-73.6730],'H3N':[45.5100,-73.6300],'H3P':[45.4860,-73.6180],'H3R':[45.4780,-73.6390],'H3S':[45.4820,-73.6095],'H3T':[45.4950,-73.6270],'H3W':[45.4640,-73.6060],'H3X':[45.4570,-73.6120],'H3Y':[45.4570,-73.5980],'H3Z':[45.4660,-73.5820],'H4A':[45.4730,-73.6020],'H4B':[45.4570,-73.6470],'H4C':[45.4590,-73.5820],'H4E':[45.4540,-73.5920],'H4G':[45.4450,-73.6010],'H4H':[45.4490,-73.5650],'H4J':[45.5010,-73.6890],'H4K':[45.4950,-73.7130],'H4L':[45.5050,-73.6960],'H4M':[45.4900,-73.6710],'H4N':[45.4980,-73.7060],'H4P':[45.4820,-73.6580],'H4R':[45.5010,-73.7350],'H4S':[45.5040,-73.7480],'H4T':[45.4820,-73.6870],'H4V':[45.4640,-73.5990],'H4W':[45.4640,-73.6260],'H4X':[45.4590,-73.6540],'H5A':[45.5080,-73.5530],'H2E':[45.5620,-73.5830],'H2G':[45.5580,-73.5697],'H2H':[45.5440,-73.5745],'H2J':[45.5330,-73.5820],'H2K':[45.5290,-73.5440],'H2M':[45.5530,-73.6390],'H2N':[45.5480,-73.6510],'H2P':[45.5440,-73.6625],'H2R':[45.5280,-73.6360],'H2S':[45.5240,-73.6160],'H2V':[45.5150,-73.6100],'H7A':[45.6070,-73.7150],'H7B':[45.6180,-73.7350],'H7C':[45.6310,-73.7130],'H7E':[45.6410,-73.6970],'H7G':[45.6540,-73.7300],'H7H':[45.6490,-73.7550],'H7J':[45.6620,-73.7430],'H7K':[45.6740,-73.7290],'H7L':[45.6870,-73.7510],'H7M':[45.6980,-73.7320],'H7N':[45.7080,-73.7470],'H7P':[45.7140,-73.7700],'H7R':[45.6840,-73.7030],'H7S':[45.6610,-73.7730],'H7T':[45.6890,-73.7940],'H7V':[45.6590,-73.8040],'H7W':[45.6380,-73.7730],'H7X':[45.6180,-73.7900],'H7Y':[45.5980,-73.7510],'H8N':[45.4370,-73.5610],'H8P':[45.4280,-73.5770],'H8R':[45.4400,-73.5460],'H8S':[45.4440,-73.5210],'H8T':[45.4230,-73.5930],'H8Y':[45.4870,-73.7710],'H8Z':[45.4720,-73.7960],'H9A':[45.4530,-73.8250],'H9B':[45.4590,-73.8440],'H9C':[45.4460,-73.8500],'H9E':[45.4250,-73.8780],'H9G':[45.4390,-73.8950],'H9H':[45.4280,-73.9070],'H9J':[45.4410,-73.9260],'H9K':[45.4560,-73.9380],'H9P':[45.4740,-73.7620],'H9R':[45.4660,-73.7820],'H9S':[45.4780,-73.7860],'H9W':[45.4840,-73.8050],'H9X':[45.4630,-73.9480],'K1A':[45.4215,-75.6919],'K1P':[45.4212,-75.6972],'K2P':[45.4150,-75.7020],'K2A':[45.3700,-75.7600],'K2B':[45.3500,-75.7800],'M4K':[43.6810,-79.3560],'M5A':[43.6530,-79.3580],'M5G':[43.6570,-79.3890],'M5V':[43.6400,-79.3950],'M6G':[43.6660,-79.4220],'M6P':[43.6580,-79.4670],'V5K':[49.2820,-123.0350],'V5T':[49.2660,-123.1000],'V6A':[49.2820,-123.1010],'V6B':[49.2820,-123.1170],'V6C':[49.2870,-123.1220],'V6E':[49.2810,-123.1430],'V6G':[49.2980,-123.1440],'V6K':[49.2640,-123.1650],'T2P':[51.0450,-114.0720],'T2R':[51.0380,-114.0870],'T3A':[51.0500,-114.1900],'T3C':[51.0340,-114.1520]};\nfunction gc(p){return PC[p.replace(\/\\s\/,'').substring(0,3).toUpperCase()]||null;}\nfunction hav(a,b){const R=6371,dL=(b[0]-a[0])*Math.PI\/180,dN=(b[1]-a[1])*Math.PI\/180;const x=Math.sin(dL\/2)**2+Math.cos(a[0]*Math.PI\/180)*Math.cos(b[0]*Math.PI\/180)*Math.sin(dN\/2)**2;return R*2*Math.atan2(Math.sqrt(x),Math.sqrt(1-x));}\nfunction calcDist(){\n  const el=document.getElementById('dist-content');\n  const c1=gc(S.originPostal),c2=gc(S.destPostal);\n  if(!c1||!c2){el.innerHTML=`<div style=\"font-size:13px;color:var(--text-3)\">Distance unavailable for these postal codes.<\/div>`;S.distKm=null;return;}\n  const sl=hav(c1,c2),dr=Math.round(sl*1.35),dm=Math.round(dr\/40*60);\n  S.distKm=dr;S.distMin=dm;\n  const tag=dr<2?'Same neighbourhood':dr<10?'Local move':dr<50?'Short-distance':dr<200?'Regional move':'Long-distance';\n  const tl=dm<60?dm+' min':Math.floor(dm\/60)+'h '+(dm%60)+'m';\n  el.innerHTML=`<div style=\"font-size:12px;color:var(--text-3);margin-bottom:10px;font-weight:600;text-transform:uppercase;letter-spacing:0.04em\">${tag}<\/div><div class=\"dist-grid\"><div class=\"dist-metric\"><div class=\"val\">${dr} km<\/div><div class=\"lbl\">Driving dist.<\/div><\/div><div class=\"dist-metric\"><div class=\"val\">${tl}<\/div><div class=\"lbl\">Drive time<\/div><\/div><div class=\"dist-metric\"><div class=\"val\">${sl.toFixed(1)} km<\/div><div class=\"lbl\">Straight-line<\/div><\/div><\/div><div class=\"dist-route\"><div class=\"dist-dot\" style=\"background:var(--brand)\"><\/div><div style=\"font-size:13px;flex-shrink:0;max-width:34%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500\">${S.originPostal} ${S.originCity}<\/div><div class=\"dist-line\" data-km=\"${dr} km\" style=\"flex:1\"><\/div><div style=\"font-size:13px;flex-shrink:0;max-width:34%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right;font-weight:500\">${S.destPostal} ${S.destCity}<\/div><div class=\"dist-dot\" style=\"background:var(--green)\"><\/div><\/div><div style=\"font-size:11px;color:var(--text-3);margin-top:8px\"><i class=\"ti ti-info-circle\" style=\"vertical-align:-2px;margin-right:3px\"><\/i>Estimated from postal codes. Actual route may vary.<\/div>`;\n}\nfunction pTime(t){const[tm,p]=t.split(' ');let[h,m]=tm.split(':').map(Number);if(p==='PM'&&h!==12)h+=12;if(p==='AM'&&h===12)h=0;return{h,m};}\nfunction toISO(date,ts,off=0){const{h,m}=pTime(ts);const d=new Date(date.getFullYear(),date.getMonth(),date.getDate(),h+off,m,0);const p=n=>String(n).padStart(2,'0');return`${d.getFullYear()}-${p(d.getMonth()+1)}-${p(d.getDate())}T${p(d.getHours())}:${p(d.getMinutes())}:00`;}\nfunction setStatus(id,type,label){\n  const el=document.getElementById('ss-'+id);if(!el)return;\n  const ic=el.querySelector('.s-icon');ic.className='s-icon '+type;\n  if(type==='loading')ic.innerHTML='<div class=\"loading-dots\"><span><\/span><span><\/span><span><\/span><\/div>';\n  else if(type==='done')ic.innerHTML='<i class=\"ti ti-check\"><\/i>';\n  else if(type==='error')ic.innerHTML='<i class=\"ti ti-x\"><\/i>';\n  else ic.innerHTML='<i class=\"ti ti-clock\" style=\"font-size:11px\"><\/i>';\n  if(label)el.querySelector('.s-label').textContent=label;\n}\n\nasync function confirmBooking(){\n  document.getElementById('btn-confirm').disabled=true;\n  const dl=S.endDate?`${fd(S.startDate)} to ${fd(S.endDate)}`:fd(S.startDate);\n  const bId='MV-'+Math.floor(10000+Math.random()*90000);\n  const dist=S.distKm?`~${S.distKm} km (~${S.distMin} min)`:'not calculated';\n  showStep(4);\n  document.getElementById('confirm-sub').textContent=`Booking ${bId} \u00b7 ${dl} at ${S.time}`;\n  document.getElementById('status-steps').innerHTML=`\n    <div class=\"status-step\" id=\"ss-notify\"><div class=\"s-icon loading\"><div class=\"loading-dots\"><span><\/span><span><\/span><span><\/span><\/div><\/div><div><div class=\"s-label\">Sending booking to MouvExpress\u2026<\/div><div class=\"s-sub\">info@mouvexpress.com<\/div><\/div><\/div>\n    <div class=\"status-step\" id=\"ss-conf\"><div class=\"s-icon pending\"><i class=\"ti ti-clock\" style=\"font-size:11px\"><\/i><\/div><div><div class=\"s-label\">Confirmation email to customer\u2026<\/div><div class=\"s-sub\">${S.email}<\/div><\/div><\/div>`;\n\n  const payload=new FormData();\n  payload.append('action','mouvex_send_booking');\n  payload.append('booking_id',bId);\n  payload.append('first_name',S.fname);\n  payload.append('last_name',S.lname);\n  payload.append('email',S.email);\n  payload.append('phone',S.phone);\n  payload.append('move_type',S.type);\n  payload.append('date_range',dl);\n  payload.append('start_time',S.time);\n  payload.append('origin',`${S.origin}, ${S.originCity}, ${S.originProv} ${S.originPostal}`);\n  payload.append('origin_floor',S.originFloor);\n  payload.append('origin_elevator',S.originElev);\n  payload.append('origin_size',S.originSize);\n  payload.append('destination',`${S.dest}, ${S.destCity}, ${S.destProv} ${S.destPostal}`);\n  payload.append('dest_floor',S.destFloor);\n  payload.append('dest_elevator',S.destElev);\n  payload.append('dest_size',S.destSize);\n  payload.append('distance',dist);\n  payload.append('notes',S.notes||'None');\n  payload.append('website',''); \/\/ honeypot \u2014 must stay empty, bots tend to fill it\n\n  try{\n    const r=await fetch(WP_AJAX_URL,{method:'POST',body:payload});\n    const d=await r.json();\n    if(!d.success)throw new Error((d.data&&d.data.message)||'The site did not accept the booking.');\n    setStatus('notify','done','Booking sent to info@mouvexpress.com');\n    setStatus('conf','done','Confirmation email sent to '+S.email);\n    if(S.distKm){const tl=S.distMin<60?S.distMin+' min':Math.floor(S.distMin\/60)+'h '+(S.distMin%60)+'m';document.getElementById('dist-summary').innerHTML=`<div class=\"dist-grid\" style=\"margin-top:1rem;margin-bottom:0\"><div class=\"dist-metric\"><div class=\"val\">${S.distKm} km<\/div><div class=\"lbl\">Driving dist.<\/div><\/div><div class=\"dist-metric\"><div class=\"val\">${tl}<\/div><div class=\"lbl\">Drive time<\/div><\/div><\/div>`;}\n    document.getElementById('email-log').innerHTML=`<div class=\"info-badge blue\" style=\"margin-top:0\"><i class=\"ti ti-circle-check\"><\/i><div><div class=\"badge-title\">All set<\/div><div class=\"badge-sub\">The MouvExpress team has been notified and will confirm your move shortly.<\/div><\/div><\/div>`;\n  }catch(e){\n    setStatus('notify','error','Could not reach mouvexpress.com');\n    setStatus('conf','error','Not sent yet');\n    document.getElementById('email-log').innerHTML=`<div class=\"info-badge orange\" style=\"margin-top:0\"><i class=\"ti ti-alert-triangle\"><\/i><div><div class=\"badge-title\">Something went wrong<\/div><div class=\"badge-sub\">${e.message} \u2014 check that the mouvexpress-booking-mailer plugin is active and WP_AJAX_URL is correct.<\/div><\/div><\/div>`;\n  }\n}\nfunction resetForm(){\n  S={type:'',fname:'',lname:'',email:'',phone:'',origin:'',originCity:'',originProv:'QC',originPostal:'',originFloor:'',originElev:'',originSize:'',dest:'',destCity:'',destProv:'QC',destPostal:'',destFloor:'',destElev:'',destSize:'',notes:'',startDate:null,endDate:null,time:'',distKm:null,distMin:null};\n  dMode='single';pStage='start';cY=now.getFullYear();cM=now.getMonth();\n  document.querySelectorAll('input,select,textarea').forEach(el=>{el.value='';el.classList.remove('field-error');});\n  document.querySelectorAll('.type-card').forEach(c=>c.classList.remove('selected'));\n  document.getElementById('btn-confirm').disabled=false;\n  showStep(1);\n}\n<\/script>\n<\/body>\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Book Your Move \u2013 MouvExpress Book Your Move Residential &#038; commercial \u00b7 Booking sent to info@mouvexpress.com 1Details 2Schedule 3Review 4Confirm Your information First name Last name Email address Phone number Move details ResidentialHome, condo, apartment CommercialOffice, retail, warehouse Origin \u2014 Moving from Street address City ProvinceQCONBCABMBSKNSNBNLPENTYTNU Postal code Floor levelSelect&#8230;Ground \/ basement1st floor2nd floor3rd floor4th [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":433,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1446","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v22.4 (Yoast SEO v27.8) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>GET A QUOTE - MOUVEX<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/mouvexpress.com\/en\/get-guote\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GET A QUOTE\" \/>\n<meta property=\"og:description\" content=\"Book Your Move \u2013 MouvExpress Book Your Move Residential &#038; commercial \u00b7 Booking sent to info@mouvexpress.com 1Details 2Schedule 3Review 4Confirm Your information First name Last name Email address Phone number Move details ResidentialHome, condo, apartment CommercialOffice, retail, warehouse Origin \u2014 Moving from Street address City ProvinceQCONBCABMBSKNSNBNLPENTYTNU Postal code Floor levelSelect&#8230;Ground \/ basement1st floor2nd floor3rd floor4th [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/mouvexpress.com\/en\/get-guote\/\" \/>\n<meta property=\"og:site_name\" content=\"MOUVEX\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/mouvexpress\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-19T22:23:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/mouvexpress.com\/wp-content\/uploads\/2021\/06\/page_bg_7.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"657\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mouvexpress.com\\\/get-guote\\\/\",\"url\":\"https:\\\/\\\/mouvexpress.com\\\/get-guote\\\/\",\"name\":\"GET A QUOTE - MOUVEX\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mouvexpress.com\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/mouvexpress.com\\\/get-guote\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/mouvexpress.com\\\/get-guote\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/mouvexpress.com\\\/wp-content\\\/uploads\\\/2021\\\/06\\\/page_bg_7.jpg\",\"datePublished\":\"2021-06-16T15:52:40+00:00\",\"dateModified\":\"2026-07-19T22:23:50+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mouvexpress.com\\\/get-guote\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/mouvexpress.com\\\/get-guote\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/mouvexpress.com\\\/get-guote\\\/#primaryimage\",\"url\":\"https:\\\/\\\/mouvexpress.com\\\/wp-content\\\/uploads\\\/2021\\\/06\\\/page_bg_7.jpg\",\"contentUrl\":\"https:\\\/\\\/mouvexpress.com\\\/wp-content\\\/uploads\\\/2021\\\/06\\\/page_bg_7.jpg\",\"width\":1920,\"height\":657},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mouvexpress.com\\\/get-guote\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/mouvexpress.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"GET A QUOTE\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mouvexpress.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/mouvexpress.com\\\/en\\\/\",\"name\":\"MOUVEX\",\"description\":\"Where speed meets reliability\",\"publisher\":{\"@id\":\"https:\\\/\\\/mouvexpress.com\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/mouvexpress.com\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/mouvexpress.com\\\/en\\\/#organization\",\"name\":\"MOUVEX DEMENAGEMENT\",\"url\":\"https:\\\/\\\/mouvexpress.com\\\/en\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/mouvexpress.com\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/mouvexpress.com\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/mouvexx-copy.png\",\"contentUrl\":\"https:\\\/\\\/mouvexpress.com\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/mouvexx-copy.png\",\"width\":3568,\"height\":1049,\"caption\":\"MOUVEX DEMENAGEMENT\"},\"image\":{\"@id\":\"https:\\\/\\\/mouvexpress.com\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/mouvexpress\",\"https:\\\/\\\/www.instagram.com\\\/mouvexpress\",\"https:\\\/\\\/www.youtube.com\\\/@MouvexDemenagement\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/mouvexpress\"]}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"GET A QUOTE - MOUVEX","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/mouvexpress.com\/en\/get-guote\/","og_locale":"en_US","og_type":"article","og_title":"GET A QUOTE","og_description":"Book Your Move \u2013 MouvExpress Book Your Move Residential &#038; commercial \u00b7 Booking sent to info@mouvexpress.com 1Details 2Schedule 3Review 4Confirm Your information First name Last name Email address Phone number Move details ResidentialHome, condo, apartment CommercialOffice, retail, warehouse Origin \u2014 Moving from Street address City ProvinceQCONBCABMBSKNSNBNLPENTYTNU Postal code Floor levelSelect&#8230;Ground \/ basement1st floor2nd floor3rd floor4th [&hellip;]","og_url":"https:\/\/mouvexpress.com\/en\/get-guote\/","og_site_name":"MOUVEX","article_publisher":"https:\/\/www.facebook.com\/mouvexpress","article_modified_time":"2026-07-19T22:23:50+00:00","og_image":[{"width":1920,"height":657,"url":"https:\/\/mouvexpress.com\/wp-content\/uploads\/2021\/06\/page_bg_7.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/mouvexpress.com\/get-guote\/","url":"https:\/\/mouvexpress.com\/get-guote\/","name":"GET A QUOTE - MOUVEX","isPartOf":{"@id":"https:\/\/mouvexpress.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/mouvexpress.com\/get-guote\/#primaryimage"},"image":{"@id":"https:\/\/mouvexpress.com\/get-guote\/#primaryimage"},"thumbnailUrl":"https:\/\/mouvexpress.com\/wp-content\/uploads\/2021\/06\/page_bg_7.jpg","datePublished":"2021-06-16T15:52:40+00:00","dateModified":"2026-07-19T22:23:50+00:00","breadcrumb":{"@id":"https:\/\/mouvexpress.com\/get-guote\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/mouvexpress.com\/get-guote\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/mouvexpress.com\/get-guote\/#primaryimage","url":"https:\/\/mouvexpress.com\/wp-content\/uploads\/2021\/06\/page_bg_7.jpg","contentUrl":"https:\/\/mouvexpress.com\/wp-content\/uploads\/2021\/06\/page_bg_7.jpg","width":1920,"height":657},{"@type":"BreadcrumbList","@id":"https:\/\/mouvexpress.com\/get-guote\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/mouvexpress.com\/"},{"@type":"ListItem","position":2,"name":"GET A QUOTE"}]},{"@type":"WebSite","@id":"https:\/\/mouvexpress.com\/en\/#website","url":"https:\/\/mouvexpress.com\/en\/","name":"MOUVEX","description":"Where speed meets reliability","publisher":{"@id":"https:\/\/mouvexpress.com\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/mouvexpress.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/mouvexpress.com\/en\/#organization","name":"MOUVEX DEMENAGEMENT","url":"https:\/\/mouvexpress.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/mouvexpress.com\/en\/#\/schema\/logo\/image\/","url":"https:\/\/mouvexpress.com\/wp-content\/uploads\/2024\/04\/mouvexx-copy.png","contentUrl":"https:\/\/mouvexpress.com\/wp-content\/uploads\/2024\/04\/mouvexx-copy.png","width":3568,"height":1049,"caption":"MOUVEX DEMENAGEMENT"},"image":{"@id":"https:\/\/mouvexpress.com\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/mouvexpress","https:\/\/www.instagram.com\/mouvexpress","https:\/\/www.youtube.com\/@MouvexDemenagement","https:\/\/www.linkedin.com\/in\/mouvexpress"]}]}},"_links":{"self":[{"href":"https:\/\/mouvexpress.com\/en\/wp-json\/wp\/v2\/pages\/1446","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mouvexpress.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mouvexpress.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mouvexpress.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mouvexpress.com\/en\/wp-json\/wp\/v2\/comments?post=1446"}],"version-history":[{"count":20,"href":"https:\/\/mouvexpress.com\/en\/wp-json\/wp\/v2\/pages\/1446\/revisions"}],"predecessor-version":[{"id":2132,"href":"https:\/\/mouvexpress.com\/en\/wp-json\/wp\/v2\/pages\/1446\/revisions\/2132"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mouvexpress.com\/en\/wp-json\/wp\/v2\/media\/433"}],"wp:attachment":[{"href":"https:\/\/mouvexpress.com\/en\/wp-json\/wp\/v2\/media?parent=1446"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}