{"id":1199,"date":"2023-07-04T19:16:06","date_gmt":"2023-07-04T19:16:06","guid":{"rendered":"https:\/\/365solutionsjo.com\/?page_id=1199"},"modified":"2026-01-17T11:23:50","modified_gmt":"2026-01-17T08:23:50","slug":"ipad-service","status":"publish","type":"page","link":"https:\/\/365solutionsjo.com\/ar\/ipad-service\/","title":{"rendered":"iPad-Service"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1199\" class=\"elementor elementor-1199\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-72f039e elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"72f039e\" data-element_type=\"section\" data-e-type=\"section\">\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-b9f2f76\" data-id=\"b9f2f76\" 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-054dc99 elementor-widget elementor-widget-text-editor\" data-id=\"054dc99\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4><strong>iPad Service and Support<\/strong><\/h4><pre><strong>Do you have any problems with your iPad<br \/><\/strong>Screen Problem, Power Problems, Sound Problems Liquid damage<\/pre>\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\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c2cae96 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c2cae96\" data-element_type=\"section\" data-e-type=\"section\">\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-8a0295f\" data-id=\"8a0295f\" 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<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-3eb5f54 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"3eb5f54\" data-element_type=\"section\" data-e-type=\"section\">\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-50 elementor-inner-column elementor-element elementor-element-d0fb83f\" data-id=\"d0fb83f\" 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-70d00c3 elementor-widget elementor-widget-html\" data-id=\"70d00c3\" 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\" \/>\n  <title>iPad Models Table + Step 2 Modal<\/title>\n\n  <style>\n    :root{\n      --border:#d9d9d9;\n      --shadow:0 0 0 1px rgba(0,0,0,.03), 0 2px 6px rgba(0,0,0,.08);\n      --radius:12px;\n      --primary:#0095a8;\n    }\n    *{box-sizing:border-box}\n    body{margin:0;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Arial,sans-serif;background:#fff;color:#111}\n\n    \/* ===== Table Section ===== *\/\n    .models-table-section{padding:18px 0}\n    .models-table-wrap{max-width:1200px;margin:0 auto;padding:0 12px}\n    .models-table{\n      width:100%;\n      border-collapse:collapse;\n      table-layout:fixed;\n      border:2px solid #6b6b6b;\n      background:#fff;\n    }\n    .models-table thead th{\n      font-size:20px;font-weight:800;text-align:center;\n      padding:10px 6px;border-bottom:2px solid #6b6b6b;\n    }\n    .models-table td{\n      border:2px solid #6b6b6b;\n      padding:0;\n      vertical-align:middle;\n      word-wrap:break-word;\n    }\n    .models-table .model-cell-btn{\n      all:unset;\n      box-sizing:border-box;\n      display:block;\n      width:100%;\n      padding:10px 10px;\n      font-size:14px;\n      font-weight:600;\n      line-height:1.35;\n      color:#000;\n      cursor:pointer;\n    }\n    .models-table td:hover{background:#f6f8ff}\n    .models-table .model-cell-btn:focus-visible{\n      outline:3px solid #0a84ff;\n      outline-offset:-3px;\n      border-radius:6px;\n    }\n    @media (max-width:800px){\n      .models-table{table-layout:auto}\n      .models-table thead th{font-size:18px}\n      .models-table .model-cell-btn{font-size:16px}\n    }\n\n    \/* ===== Modal base ===== *\/\n    .modal-backdrop{\n      position:fixed; inset:0;\n      background:rgba(0,0,0,.35);\n      display:none;\n      align-items:center;\n      justify-content:center;\n      padding:24px;\n      z-index:999999;\n    }\n    .modal-backdrop.open{display:flex}\n    .modal{\n      background:#fff;\n      width:min(1050px,95vw);\n      max-height:86vh;\n      border-radius:14px;\n      box-shadow:var(--shadow);\n      overflow:hidden;\n      display:flex;\n      flex-direction:column;\n    }\n    .modal__header{\n      display:flex; align-items:center; gap:8px;\n      padding:14px 16px;\n      border-bottom:1px solid #eee;\n    }\n    .modal__title{margin-left:4px;font-weight:800}\n    .spacer{flex:1}\n    .icon-btn{\n      width:36px;height:36px;\n      border-radius:8px;\n      border:1px solid #e5e5e5;\n      background:#fff;\n      display:grid;\n      place-items:center;\n      cursor:pointer;\n    }\n    .close-btn{font-size:20px;line-height:1}\n    .modal__body{padding:18px 16px 22px;overflow:auto}\n    .step2{max-width:840px;margin:0 auto}\n    .h1-like{font-weight:800;text-align:center;margin:12px 0 6px;font-size:20px}\n    .field-label{margin:16px 0 8px;font-size:14px;font-weight:700;color:#333}\n    .text-input{\n      width:100%;height:42px;border:1px solid var(--border);\n      border-radius:8px;padding:0 10px;font-size:15px;\n    }\n\n    \/* Multi-select *\/\n    .multi{position:relative}\n    .multi-input{\n      display:flex; align-items:center; flex-wrap:wrap; gap:6px;\n      min-height:42px; border:1px solid var(--border); border-radius:8px;\n      padding:6px 36px 6px 8px; cursor:text; background:#fff;\n    }\n    .multi-input:focus-within{box-shadow:0 0 0 2px rgba(0,149,168,.12); border-color:#bfe7ee}\n    .multi-caret{\n      position:absolute; right:6px; top:6px; height:30px; width:30px;\n      border:0; background:transparent; font-size:16px; cursor:pointer; color:#666;\n    }\n    .multi-filter{flex:1; min-width:140px; border:0; outline:0; font-size:15px; padding:6px 4px}\n    .chips{display:flex; align-items:center; flex-wrap:wrap; gap:6px}\n    .chip{\n      display:inline-flex; align-items:center; gap:6px; padding:4px 10px;\n      background:#e0f7fa; color:#00606c;\n      border:1px solid #b2ebf2; border-radius:999px;\n      font-size:12px; font-weight:800;\n    }\n    .chip .x{cursor:pointer;font-weight:900;opacity:.7}\n    .chip .x:hover{opacity:1}\n\n    .multi-list{\n      position:absolute; z-index:999999; left:0; right:0; top:calc(100% + 6px);\n      max-height:260px; overflow:auto;\n      background:#fff; border:1px solid #e5e5e5;\n      border-radius:10px; box-shadow:0 10px 30px rgba(0,0,0,.12);\n      padding:6px; display:none;\n    }\n    .multi-list.open{display:block}\n    .multi-list li{list-style:none;margin:0;padding:6px 8px;border-radius:8px}\n    .multi-list li:hover{background:#f6f8ff}\n    .multi-list label{display:flex; align-items:center; gap:10px; cursor:pointer}\n    .multi-list input{width:16px;height:16px}\n\n    .desc-row{margin-top:12px}\n\n    \/* Location cards *\/\n    .options{\n      display:grid; grid-template-columns:repeat(3,1fr);\n      gap:16px; margin:14px 0 8px;\n    }\n    @media (max-width:860px){.options{grid-template-columns:1fr}}\n    .option{\n      border:1px solid #ddd; border-radius:12px;\n      padding:14px; text-align:center; cursor:pointer;\n      background:#fff; display:grid; gap:10px; place-items:center;\n      transition:border-color .12s ease, box-shadow .12s ease;\n    }\n    .option:hover{border-color:#cfcfcf}\n    .option.active{border-color:var(--primary); box-shadow:0 0 0 2px rgba(0,149,168,.12)}\n    .serviceImage{width:120px;height:120px;display:grid;place-items:center}\n    .serviceImage img{max-width:100%;max-height:100%;object-fit:contain}\n    .option .title{font-weight:800;font-size:13px}\n\n    .location-info{font-size:14px;color:#333;line-height:1.5}\n    .location-info a{color:#0095a8;text-decoration:none}\n    .location-info a:hover{text-decoration:underline}\n\n    .actions{display:grid;place-items:center;margin:16px 0 18px}\n    .btn-primary{\n      appearance:none;border:0;border-radius:10px;\n      background:linear-gradient(90deg,#0095a8,#00b8d9);\n      color:#fff;padding:12px 28px;\n      font-weight:900;letter-spacing:.4px;\n      cursor:pointer;\n    }\n\n    \/* small helper *\/\n    .field-group{max-width:420px}\n    .summary-box{\n      border:1px solid rgba(0,0,0,0.06);\n      border-radius:12px;\n      padding:14px 16px;\n      background:#f7fbff;\n      margin-bottom:16px;\n    }\n    \n    \/* ===== OTP card styling ===== *\/\n    .otp-card{\n      padding:16px 18px;\n      border:1px solid rgba(0,0,0,.08);\n      border-radius:14px;\n      background:#fff;\n      box-shadow:0 0 0 1px rgba(0,0,0,.02),0 8px 26px rgba(0,0,0,.06);\n    }\n    .otp-title{font-weight:900;font-size:18px;margin-bottom:4px}\n    .otp-subtitle{color:#555;font-size:13px;margin-bottom:14px}\n    .otp-subtitle span{font-weight:800;color:#111}\n\n    .otp-inputs{\n      display:flex; gap:10px; justify-content:center;\n      margin:10px 0 14px;\n    }\n    .otp-box{\n      width:46px;height:54px;\n      text-align:center;\n      font-size:22px;\n      font-weight:900;\n      border-radius:12px;\n      border:1px solid rgba(0,0,0,.14);\n      outline:none;\n      transition:box-shadow .12s ease,border-color .12s ease,transform .08s ease;\n      background:#fff;\n    }\n    .otp-box:focus{\n      border-color:#0095a8;\n      box-shadow:0 0 0 3px rgba(0,149,168,.18);\n      transform:translateY(-1px);\n    }\n    .otp-box.filled{border-color:rgba(0,149,168,.45); background:#f2fbfd;}\n    .otp-box.error{border-color:#b00020; box-shadow:0 0 0 3px rgba(176,0,32,.12); background:#fff5f7;}\n    .otp-box.success{border-color:#0a7a3d; box-shadow:0 0 0 3px rgba(10,122,61,.14); background:#f3fff7;}\n\n    .otp-actions{display:flex; gap:10px; justify-content:center; margin-top:6px;}\n    .otp-btn{\n      border:0;border-radius:12px;padding:12px 16px;\n      font-weight:900;cursor:pointer;color:#fff;\n      background:linear-gradient(90deg,#0095a8,#00b8d9);\n      min-width:140px;\n    }\n    .otp-btn:disabled{opacity:.5; cursor:not-allowed}\n    .otp-btn-ghost{\n      background:#fff;color:#0095a8;\n      border:1px solid rgba(0,149,168,.28);\n      min-width:120px;\n    }\n\n    .otp-links{display:flex; justify-content:space-between; align-items:center; margin-top:12px;}\n    .otp-link{border:0;background:transparent;color:#0095a8;font-weight:900;cursor:pointer;padding:0;}\n    .otp-link:disabled{opacity:.45;cursor:not-allowed}\n    .otp-timer{color:#666;font-size:13px;font-weight:700}\n\n    .otp-error{margin-top:10px;color:#b00020;font-weight:800;font-size:13px}\n    .otp-success{margin-top:10px;color:#0a7a3d;font-weight:900;font-size:13px}\n  <\/style>\n<\/head>\n\n<body>\n\n<!-- ===== iPad Models Table ===== -->\n<section class=\"models-table-section\">\n  <div class=\"models-table-wrap\">\n    <table class=\"models-table\" aria-label=\"iPad Repair Models\">\n      <thead><tr><th colspan=\"2\">iPad Repair Models<\/th><\/tr><\/thead>\n      <tbody>\n        <tr>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad (5th generation) Repair\">iPad (5th generation) Repair<\/button><\/td>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad (6th generation) Repair\">iPad (6th generation) Repair<\/button><\/td>\n        <\/tr>\n        <tr>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad (7th generation) Repair\">iPad (7th generation) Repair<\/button><\/td>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad (8th generation) Repair\">iPad (8th generation) Repair<\/button><\/td>\n        <\/tr>\n        <tr>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad (9th generation) Repair\">iPad (9th generation) Repair<\/button><\/td>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad Air (3rd generation) (Wi-Fi) Repair\">iPad Air (3rd generation) (Wi-Fi) Repair<\/button><\/td>\n        <\/tr>\n        <tr>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad Air (3rd generation) (Wi-Fi+Celluar) Repair\">iPad Air (3rd generation) (Wi-Fi+Celluar) Repair<\/button><\/td>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad Air (4th generation) (Wi-Fi) Repair\">iPad Air (4th generation) (Wi-Fi) Repair<\/button><\/td>\n        <\/tr>\n        <tr>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad Air (4th generation) (Wi-Fi+Celluar) Repair\">iPad Air (4th generation) (Wi-Fi+Celluar) Repair<\/button><\/td>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad Air 2 (Wi-Fi+Celluar) Repair\">iPad Air 2 (Wi-Fi+Celluar) Repair<\/button><\/td>\n        <\/tr>\n        <tr>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad Air 2 (Wi-Fi) Repair\">iPad Air 2 (Wi-Fi) Repair<\/button><\/td>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad mini (5th generation) (Wi-Fi) Repair\">iPad mini (5th generation) (Wi-Fi) Repair<\/button><\/td>\n        <\/tr>\n        <tr>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad mini (5th generation) (Wi-Fi+Celluar) Repair\">iPad mini (5th generation) (Wi-Fi+Celluar) Repair<\/button><\/td>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad mini (6th generation) (Wi-Fi) Repair\">iPad mini (6th generation) (Wi-Fi) Repair<\/button><\/td>\n        <\/tr>\n        <tr>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad mini (6th generation) (Wi-Fi+Celluar) Repair\">iPad mini (6th generation) (Wi-Fi+Celluar) Repair<\/button><\/td>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad mini 4 (Wifi) Repair\">iPad mini 4 (Wifi) Repair<\/button><\/td>\n        <\/tr>\n        <tr>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad mini 4 (Wifi+Celluar) Repair\">iPad mini 4 (Wifi+Celluar) Repair<\/button><\/td>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad Pro (12.9-inch) (2nd generation) Repair\">iPad Pro (12.9-inch) (2nd generation) Repair<\/button><\/td>\n        <\/tr>\n        <tr>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad Pro (12.9-inch) Repair\">iPad Pro (12.9-inch) Repair<\/button><\/td>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad Pro (9.7-inch) Repair\">iPad Pro (9.7-inch) Repair<\/button><\/td>\n        <\/tr>\n        <tr>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad Pro 11-inch (1st generation) Repair\">iPad Pro 11-inch (1st generation) Repair<\/button><\/td>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad Pro 11-inch (2nd generation) Repair\">iPad Pro 11-inch (2nd generation) Repair<\/button><\/td>\n        <\/tr>\n        <tr>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad Pro 12.9-inch (3rd generation) Repair\">iPad Pro 12.9-inch (3rd generation) Repair<\/button><\/td>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad Pro 12.9-inch (4th generation) Repair\">iPad Pro 12.9-inch (4th generation) Repair<\/button><\/td>\n        <\/tr>\n        <tr>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad Pro, 11-inch (3rd generation) Repair\">iPad Pro, 11-inch (3rd generation) Repair<\/button><\/td>\n          <td><button class=\"model-cell-btn\" data-model=\"iPad Pro, 12.9-inch (5th generation) Repair\">iPad Pro, 12.9-inch (5th generation) Repair<\/button><\/td>\n        <\/tr>\n      <\/tbody>\n    <\/table>\n  <\/div>\n<\/section>\n\n<!-- =========================================================\n     MODAL 1: Step 1\/2 modal (ONLY this belongs inside it)\n========================================================= -->\n<div class=\"modal-backdrop\" id=\"modalBackdrop\" aria-hidden=\"true\">\n  <div class=\"modal\" role=\"dialog\" aria-modal=\"true\">\n\n    <div class=\"modal__header\">\n      <button class=\"icon-btn\" id=\"backBtn\" title=\"Back\" aria-label=\"Back\" style=\"display:none;background:#fff\">\u2190<\/button>\n      <div class=\"modal__title\" id=\"modalTitle\">Choose your model<\/div>\n      <div class=\"spacer\"><\/div>\n      <button class=\"icon-btn close-btn\" id=\"closeBtn\" aria-label=\"Close\" style=\"background:#fff\">\u00d7<\/button>\n    <\/div>\n\n    <!-- Step 1 (kept for compatibility) -->\n    <div class=\"modal__search\" id=\"step1Search\" style=\"display:none\">\n      <div class=\"searchbox\">\n        <div class=\"magnify\">\ud83d\udd0d<\/div>\n        <input id=\"searchInput\" type=\"text\" placeholder=\"Search For Your Device\" autocomplete=\"off\" \/>\n      <\/div>\n    <\/div>\n    <div class=\"modal__body\" id=\"step1Body\" style=\"display:none\">\n      <div class=\"list\" id=\"deviceList\"><\/div>\n      <p class=\"muted\" id=\"emptyMsg\" style=\"display:none\">No results.<\/p>\n    <\/div>\n\n    <!-- Step 2 -->\n    <div class=\"modal__body step2\" id=\"step2\" style=\"display:none\">\n      <div class=\"h1-like\" id=\"step2Title\">Model title here<\/div>\n\n      <label class=\"field-label\">Please select the service you need<\/label>\n\n      <div id=\"serviceMulti\" class=\"multi\">\n        <div class=\"multi-input\" role=\"combobox\" aria-expanded=\"false\" aria-haspopup=\"listbox\" tabindex=\"0\">\n          <div class=\"chips\" id=\"serviceChips\"><\/div>\n          <input id=\"serviceFilter\" class=\"multi-filter\" type=\"text\" placeholder=\"\" autocomplete=\"off\" \/>\n          <button class=\"multi-caret\" style=\"background:white\" type=\"button\" aria-label=\"Open\">\u25be<\/button>\n        <\/div>\n\n        <ul class=\"multi-list\" id=\"serviceList\" role=\"listbox\" aria-multiselectable=\"true\">\n          <li data-value=\"Body Repair\"><label><input type=\"checkbox\" \/> Body Repair<\/label><\/li>\n          <li data-value=\"Camera Repair\"><label><input type=\"checkbox\" \/> Camera Repair<\/label><\/li>\n          <li data-value=\"Screen Repair\"><label><input type=\"checkbox\" \/> Screen Repair<\/label><\/li>\n          <li data-value=\"Battery Repair\"><label><input type=\"checkbox\" \/> Battery Repair<\/label><\/li>\n          <li data-value=\"Sound Repair\"><label><input type=\"checkbox\" \/> Sound Repair<\/label><\/li>\n          <li data-value=\"Liquid Damage\"><label><input type=\"checkbox\" \/> Liquid Damage<\/label><\/li>\n          <li data-value=\"Power Repair\"><label><input type=\"checkbox\" \/> Power Repair<\/label><\/li>\n          <li data-value=\"Others\"><label><input type=\"checkbox\" \/> Others<\/label><\/li>\n        <\/ul>\n\n        <div id=\"serviceDescRow\" class=\"desc-row\" style=\"display:none;\">\n          <label class=\"field-label\" for=\"serviceDesc\">Please provide the description of the service<\/label>\n          <input id=\"serviceDesc\" class=\"text-input\" type=\"text\" placeholder=\"\" \/>\n        <\/div>\n      <\/div>\n\n      <div class=\"field-label\" style=\"margin-top:18px\">I would like to get this service at :<\/div>\n\n      <div class=\"options\" id=\"serviceOptions\">\n        <div class=\"option\" data-id=\"amman\">\n          <div class=\"serviceImage\">\n            <img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2025\/10\/pngtree-an-image-of-a-store-front-or-bakery-store-coloring-pages-vector-png-image_6981000.png?ssl=1\" alt=\"Service Center\"\/>\n          <\/div>\n          <div class=\"title\">365 Solutions in Amman<\/div>\n        <\/div>\n\n        <div class=\"option\" data-id=\"irbid\">\n          <div class=\"serviceImage\">\n            <img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2025\/10\/pngtree-cartoon-illustration-of-a-shophouse-coloring-page-outline-sketch-drawing-vector-png-image_6980999.png?ssl=1\" alt=\"Service Center\"\/>\n          <\/div>\n          <div class=\"title\">365 Solutions in Irbid<\/div>\n        <\/div>\n\n        <div class=\"option\" data-id=\"homeOffice\">\n          <div class=\"serviceImage\">\n            <img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2025\/10\/delivery-drawing.jpg?ssl=1\" alt=\"delivery\"\/>\n          <\/div>\n          <div class=\"title\">Collect it from my Home\/Office<\/div>\n        <\/div>\n      <\/div>\n\n      <div id=\"locationInfoAmman\" class=\"location-info\" style=\"display:none; text-align:center; margin-top:18px;\">\n        <div class=\"info-text\">\n          <strong>Amman<\/strong><br>\n          221 Mecca Street Amman<br>\n          <a href=\"mailto:Help@365solutionsjo.com\">Help@365solutionsjo.com<\/a><br>\n          <a href=\"tel:+962796818189\">+962 796 818189<\/a><br><br>\n          <strong>Opening hours:<\/strong><br>\n          Sun \u2013 Thu | 9:00 AM to 9:00 PM<br>\n          Sat | 10:00 AM to 9:00 PM<br>\n          Fri | closed\n        <\/div>\n      <\/div>\n\n      <div id=\"locationInfoIrbid\" class=\"location-info\" style=\"display:none; text-align:center; margin-top:18px;\">\n        <div class=\"info-text\">\n          <strong>Irbid<\/strong><br>\n          Wasfi AlTal Street<br>\n          <a href=\"mailto:Irbid@365solutionsjo.com\">Irbid@365solutionsjo.com<\/a><br>\n          <a href=\"tel:+962796688831\">+962 79 668 88 31<\/a><br><br>\n          <strong>Opening hours:<\/strong><br>\n          Sat \u2013 Thu | 10:00 AM to 9:00 PM<br>\n          Fri | closed\n        <\/div>\n      <\/div>\n\n      <div id=\"locationInfoHomeOffice\" class=\"location-info\" style=\"display:none; text-align:left; margin-top:18px;\">\n        <strong>Terms & Conditions<\/strong>\n        <ul>\n         <li>\n           Pick-up & Delivery Service is chargeable at 5.0JD as a logistic fee.<\/li>\n        <li>If the customer chooses to continue the repair the logistic fee will be waived OFF.<\/li>\n        <li>Technician will diagnose the device and share a detailed report for customers approval to proceed with repair.<\/li>\n        <li>Repair or replaced parts will be charged additionally with up to 90 days of warranty.<\/li>\n        <li>This offer is valid only for limited time and can be discontinued without any prior notice.<\/li>\n        <li>This service is currently available only in Amman and its suburbs.<\/li>\n      <\/ul>\n      <\/div>\n\n      <div class=\"actions\">\n        <button class=\"btn-primary\" id=\"nextBtn\" type=\"button\">NEXT<\/button>\n      <\/div>\n    <\/div>\n\n  <\/div>\n<\/div>\n\n<!-- =========================================================\n     MODAL 2: Appointment (SIBLING under body - NOT nested)\n========================================================= -->\n<div class=\"modal-backdrop\" id=\"modalCustomer\" aria-hidden=\"true\">\n  <div class=\"modal\" role=\"dialog\" aria-modal=\"true\">\n    <div class=\"modal__header\">\n      <div class=\"modal__title\">\ud83d\udcc5 Book Your Appointment<\/div>\n      <div class=\"spacer\"><\/div>\n      <button class=\"icon-btn close-btn\" style=\"background: transparent\" id=\"closeCustomer\" aria-label=\"Close\">\u00d7<\/button>\n    <\/div>\n\n    <div class=\"modal__body step2\" style=\"padding: 24px 30px;\">\n      <div id=\"summaryDetails\" class=\"summary-box\"><\/div>\n\n      <label class=\"field-label\" for=\"custName\">Full Name<\/label>\n      <input id=\"custName\" class=\"text-input\" type=\"text\" \/>\n\n      <label class=\"field-label\" for=\"custEmail\" style=\"margin-top:12px;\">Email<\/label>\n      <input id=\"custEmail\" class=\"text-input\" type=\"email\" \/>\n\n      <label class=\"field-label\" for=\"custPhone\" style=\"margin-top:12px;\">Phone Number<\/label>\n      <input id=\"custPhone\" class=\"text-input\" type=\"tel\" \/>\n\n      <div class=\"field-group\" style=\"margin-top:16px;\">\n        <label class=\"field-label\" for=\"apptDate\">Choose Appointment Date<\/label>\n        <input id=\"apptDate\" class=\"text-input\" type=\"date\" \/>\n      <\/div>\n\n      <div class=\"field-group\" style=\"margin-top:12px;\">\n        <label class=\"field-label\" for=\"apptTime\">Choose Appointment Time<\/label>\n        <select id=\"apptTime\" class=\"text-input\">\n          <option value=\"\">Select a time<\/option>\n        <\/select>\n        <div id=\"closedMsg\" style=\"display:none; margin-top:6px; font-size:13px; color:#b00020;\">\n          Selected day is closed for this location.\n        <\/div>\n      <\/div>\n\n      <div class=\"actions\" style=\"margin-top:24px;\">\n        <button class=\"btn-primary\" id=\"submitAppointment\" type=\"button\">SUBMIT<\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- =========================================================\n     MODAL 3: Home\/Office (SIBLING under body - NOT nested)\n========================================================= -->\n<div class=\"modal-backdrop\" id=\"modalHomePickup\" aria-hidden=\"true\">\n  <div class=\"modal\" role=\"dialog\" aria-modal=\"true\">\n    <div class=\"modal__header\">\n      <div class=\"modal__title\">\ud83d\ude9a Home\/Office Pickup \u2013 Create Ticket<\/div>\n      <div class=\"spacer\"><\/div>\n      <button class=\"icon-btn close-btn\" style=\"background: transparent\" id=\"closeHomePickup\" aria-label=\"Close\">\u00d7<\/button>\n    <\/div>\n\n    <div class=\"modal__body\" style=\"padding: 24px 30px;\">\n      <div id=\"homePickupSummary\" class=\"summary-box\" style=\"margin-bottom: 20px;\"><\/div>\n\n      <label class=\"field-label\" for=\"hpName\">Full Name<\/label>\n      <input id=\"hpName\" class=\"text-input\" type=\"text\" \/>\n\n      <label class=\"field-label\" for=\"hpEmail\" style=\"margin-top:12px;\">Email<\/label>\n      <input id=\"hpEmail\" class=\"text-input\" type=\"email\" \/>\n\n      <label class=\"field-label\" for=\"hpPhone\" style=\"margin-top:12px;\">Phone Number<\/label>\n      <input id=\"hpPhone\" class=\"text-input\" type=\"tel\" \/>\n\n      <label class=\"field-label\" for=\"hpSerial\" style=\"margin-top:16px;\">Serial number or IMEI<\/label>\n      <input id=\"hpSerial\" class=\"text-input\" type=\"text\" \/>\n\n      <label class=\"field-label\" for=\"hpProblem\" style=\"margin-top:12px;\">Problem details<\/label>\n      <textarea id=\"hpProblem\" class=\"text-input\" rows=\"4\" style=\"height:auto; padding:10px;\"><\/textarea>\n\n      <label class=\"field-label\" for=\"hpCompany\" style=\"margin-top:12px;\">Company name (optional)<\/label>\n      <input id=\"hpCompany\" class=\"text-input\" type=\"text\" \/>\n\n      <label class=\"field-label\" for=\"hpAddress\" style=\"margin-top:12px;\">Customer address<\/label>\n      <textarea id=\"hpAddress\" class=\"text-input\" rows=\"3\" style=\"height:auto; padding:10px;\"><\/textarea>\n\n      <div class=\"actions\" style=\"margin-top:22px;\">\n        <button class=\"btn-primary\" id=\"submitHomePickup\" type=\"button\">SUBMIT<\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- ===================== SERVICE AGREEMENT MODAL ===================== -->\n<div class=\"modal-backdrop\" id=\"modalAgreement\" aria-hidden=\"true\">\n  <div class=\"modal\" role=\"dialog\" aria-modal=\"true\">\n    <div class=\"modal__header\">\n      <div class=\"modal__title\">\ud83d\udcdd Service Agreement<\/div>\n      <div class=\"spacer\"><\/div>\n      <button class=\"icon-btn close-btn\" style=\"background: transparent\" id=\"closeAgreement\" aria-label=\"Close\">\u00d7<\/button>\n    <\/div>\n\n    <div class=\"modal__body\" style=\"padding: 24px 30px;\">\n      <!-- Summary -->\n      <div id=\"agreementSummary\" class=\"summary-box\" style=\"margin-bottom: 16px;\"><\/div>\n\n      <!-- Terms viewer (PDF) -->\n      <div style=\"margin-bottom: 12px;\">\n        <label class=\"field-label\">Terms & Conditions<\/label>\n        <!-- Replace the src with your WordPress media URL of the PDF -->\n        <iframe id=\"termsPdfFrame\" src=\"\" style=\"width:100%; height:600px; border:1px solid #e5e5e5; border-radius:10px;\"><\/iframe>\n      <\/div>\n\n      <!-- Name + optional ID -->\n      <div class=\"grid-2\" style=\"display:grid; grid-template-columns:1fr 1fr; gap:12px;\">\n        <div>\n          <label class=\"field-label\" for=\"agreeName\">Customer Name<\/label>\n          <input id=\"agreeName\" class=\"text-input\" type=\"text\" placeholder=\"Your full name\">\n        <\/div>\n        <div>\n          <label class=\"field-label\" for=\"agreePID\">Personal ID (optional)<\/label>\n          <input id=\"agreePID\" class=\"text-input\" type=\"text\" placeholder=\"ID \/ National No.\">\n        <\/div>\n      <\/div>\n\n      <!-- Signature -->\n      <div style=\"margin-top:14px;\">\n        <label class=\"field-label\">Signature<\/label>\n        <div style=\"border:1px solid #d2e3f0; border-radius:8px; background:#fff; padding:10px;\">\n          <canvas id=\"sigPad\" style=\"width:50%; height:100px;\"><\/canvas>\n        <\/div>\n        <div style=\"margin-top:8px; display:flex; gap:8px;\">\n          <button id=\"clearSig\" type=\"button\" class=\"icon-btn\" style=\"background: transparent\" title=\"Clear\" aria-label=\"Clear\">Clear<\/button>\n        <\/div>\n      <\/div>\n\n      <div style=\"margin-top:16px;\">\n        <label class=\"field-label\"><input id=\"agreeCheck\" type=\"checkbox\"> I have read and agree to the Terms & Conditions.<\/label>\n      <\/div>\n\n      <div class=\"actions\" style=\"margin-top:18px;\">\n        <button class=\"btn-primary\" id=\"agreeAndCreate\">AGREE & CREATE TICKET<\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- ===================== OTP MODAL ===================== -->\n    <div class=\"modal-backdrop\" id=\"otpModal\" aria-hidden=\"true\">\n      <div\n        class=\"modal\"\n        role=\"dialog\"\n        aria-modal=\"true\"\n        style=\"width: min(560px, 95vw)\"\n      >\n        <div class=\"modal__header\">\n          <div class=\"modal__title\">\u2705 Email Verification<\/div>\n          <div class=\"spacer\"><\/div>\n          <button\n            class=\"icon-btn close-btn\"\n            style=\"background: white\"\n            id=\"otpCloseBtn\"\n            aria-label=\"Close\"\n          >\n            \u00d7\n          <\/button>\n        <\/div>\n\n        <div class=\"modal__body\" style=\"padding: 18px 20px 22px\">\n          <div class=\"otp-card\" id=\"otpCard\">\n            <div class=\"otp-title\">Enter verification code<\/div>\n            <div class=\"otp-subtitle\">\n              We sent a 6-digit code to <span id=\"otpEmailLabel\"><\/span>\n            <\/div>\n\n            <div\n              class=\"otp-inputs\"\n              id=\"otpInputs\"\n              aria-label=\"Verification code\"\n            >\n              <input\n                class=\"otp-box\"\n                inputmode=\"numeric\"\n                autocomplete=\"one-time-code\"\n                maxlength=\"1\"\n              \/>\n              <input class=\"otp-box\" inputmode=\"numeric\" maxlength=\"1\" \/>\n              <input class=\"otp-box\" inputmode=\"numeric\" maxlength=\"1\" \/>\n              <input class=\"otp-box\" inputmode=\"numeric\" maxlength=\"1\" \/>\n              <input class=\"otp-box\" inputmode=\"numeric\" maxlength=\"1\" \/>\n              <input class=\"otp-box\" inputmode=\"numeric\" maxlength=\"1\" \/>\n            <\/div>\n\n            <div class=\"otp-actions\">\n              <button type=\"button\" class=\"otp-btn\" id=\"otpVerifyBtn\" disabled>\n                Verify\n              <\/button>\n              <button\n              style=\"background: transparent\"\n                type=\"button\"\n                class=\"otp-btn otp-btn-ghost\"\n                id=\"otpClearBtn\"\n              >\n                Clear\n              <\/button>\n            <\/div>\n\n            <div class=\"otp-links\">\n              <button style=\"padding: 8px; background: transparent\" type=\"button\" class=\"otp-link\" id=\"otpResendBtn\">\n                Resend code\n              <\/button>\n              <span class=\"otp-timer\" id=\"otpTimer\"><\/span>\n            <\/div>\n\n            <div class=\"otp-error\" id=\"otpError\" style=\"display: none\"><\/div>\n            <div class=\"otp-success\" id=\"otpSuccess\" style=\"display: none\">\n              \u2705 Verified successfully\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n<!-- Signature pad + PDF stamping libs -->\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/signature_pad@4.1.5\/dist\/signature_pad.umd.min.js\"><\/script>\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/pdf-lib@1.17.1\/dist\/pdf-lib.min.js\"><\/script>\n\n<!-- Add Firebase SDKs if not already included -->\n<script type=\"module\">\n  import { initializeApp } from \"https:\/\/www.gstatic.com\/firebasejs\/10.13.1\/firebase-app.js\";\n  import { getFirestore, collection, addDoc, serverTimestamp } from \"https:\/\/www.gstatic.com\/firebasejs\/10.13.1\/firebase-firestore.js\";\n  import { getStorage, ref, uploadBytes, getDownloadURL } from \"https:\/\/www.gstatic.com\/firebasejs\/10.13.1\/firebase-storage.js\";\n  import {\n        getFunctions,\n        httpsCallable,\n      } from \"https:\/\/www.gstatic.com\/firebasejs\/10.13.1\/firebase-functions.js\";\n  \n  \/\/ \ud83d\udd39 Replace with your actual Firebase config\n  const firebaseConfig = {\n    apiKey: \"AIzaSyCWSayCLeyr_6aBSNjb4nCY--Lw-DB_4S4\",\n    authDomain: \"solutionssystemmain.firebaseapp.com\",\n    projectId: \"solutionssystemmain\",\n    storageBucket: \"solutionssystemmain.appspot.com\",\n    messagingSenderId: \"961697855820\",\n    appId: \"1:961697855820:web:a83ed62b1fdacee11f77e9\"\n  };\n\n  \/\/ \ud83d\udd39 Initialize Firebase\n  const app = initializeApp(firebaseConfig);\n  const db = getFirestore(app);\n  const functions = getFunctions(app);\n\n      \/\/ expose\n      window.app = app;\n\n      \/\/ make db globally accessible\n      window.db = db;\n      \n      \/\/ callables\n  const sendVerificationCode = httpsCallable(functions, \"sendVerificationCode\");\n  const verifyEmailCode = httpsCallable(functions, \"verifyEmailCode\");\n\n  window.sendEmailVerification = async (email, contextData = {}) => {\n    const res = await sendVerificationCode({\n      email,\n      purpose: \"onlineTickets\",\n      device: contextData.device || \"\",\n      location: contextData.location || \"\",\n    });\n    return res.data;\n  };\n\n  window.verifyEmailOTP = async (email, code) => {\n    const res = await verifyEmailCode({ email, code });\n    return res.data;\n  };\n\n  \/\/ connect OTP modal callbacks to firebase functions\n  function getActiveEmail(){\n    return (\n      document.getElementById('custEmail')?.value.trim() ||\n      document.getElementById('hpEmail')?.value.trim() ||\n      window._lastOtpEmail ||\n      ''\n    );\n  }\n\n  window.onOtpVerify = async (code) => {\n    const email = getActiveEmail();\n    if(!email) return false;\n    try{\n      const res = await window.verifyEmailOTP(email, code);\n      return !!res?.ok && !!res?.verified;\n    }catch(e){\n      const msg = e?.message || e?.details || 'Verification failed.';\n      window._otpUI?.markError(msg);\n      return false;\n    }\n  };\n\n  window.onOtpResend = async () => {\n    const email = getActiveEmail();\n    if(!email) throw new Error('Please enter your email first.');\n    await window.sendEmailVerification(email, {\n      device: window._homePickupData?.model || document.getElementById('step2Title')?.textContent?.trim() || '',\n      location: window._homePickupData?.locationName || window._currentBranchForBooking || ''\n    });\n  };\n<\/script>\n\n<script>\n  const $ = s => document.querySelector(s);\n  const $$ = s => Array.from(document.querySelectorAll(s));\n\n  \/* ===============================\n      MODAL 1 OPEN\/CLOSE + STEP\n  =============================== *\/\n  function openModalSafe(){\n    const b = document.getElementById('modalBackdrop');\n    if(!b) return;\n    b.classList.add('open');\n    b.setAttribute('aria-hidden','false');\n    document.documentElement.style.overflow='hidden';\n  }\n\n  function closeModalSafe(){\n    const b = document.getElementById('modalBackdrop');\n    if(!b) return;\n\n    \/\/ \u2705 FIX aria-hidden warning: blur focus BEFORE hiding\n    const active = document.activeElement;\n    if(active && b.contains(active)) active.blur();\n\n    b.classList.remove('open');\n    b.setAttribute('aria-hidden','true');\n    document.documentElement.style.overflow='';\n  }\n\n  function showStep(n){\n    const step1Search = document.getElementById('step1Search');\n    const step1Body   = document.getElementById('step1Body');\n    const step2       = document.getElementById('step2');\n    const backBtn     = document.getElementById('backBtn');\n    const modalTitle  = document.getElementById('modalTitle');\n\n    if(n===1){\n      if(step1Search) step1Search.style.display='';\n      if(step1Body)   step1Body.style.display='';\n      if(step2)       step2.style.display='none';\n      if(backBtn)     backBtn.style.display='none';\n      if(modalTitle)  modalTitle.textContent = 'Choose your model';\n    }else{\n      if(step1Search) step1Search.style.display='none';\n      if(step1Body)   step1Body.style.display='none';\n      if(step2)       step2.style.display='';\n      if(backBtn)     backBtn.style.display='none';\n    }\n  }\n\n  document.getElementById('closeBtn')?.addEventListener('click', closeModalSafe);\n  document.getElementById('modalBackdrop')?.addEventListener('click', (e)=>{\n    if(e.target.id === 'modalBackdrop') closeModalSafe();\n  });\n\n  \/* ===============================\n      MULTI-SELECT SERVICES\n  =============================== *\/\n  const multi = document.getElementById('serviceMulti');\n  const chipsWrap = document.getElementById('serviceChips');\n  const filterInp = document.getElementById('serviceFilter');\n  const listEl = document.getElementById('serviceList');\n  const caretBtn = multi.querySelector('.multi-caret');\n  const combo = multi.querySelector('.multi-input');\n\n  let selectedServices = [];\n\n  function openList(open=true){\n    listEl.classList.toggle('open', open);\n    combo.setAttribute('aria-expanded', open ? 'true' : 'false');\n  }\n  function renderChips(){\n    chipsWrap.innerHTML = '';\n    selectedServices.forEach(val=>{\n      const chip = document.createElement('span');\n      chip.className = 'chip';\n      chip.innerHTML = `<span>${val}<\/span><span class=\"x\" data-val=\"${val}\">\u00d7<\/span>`;\n      chipsWrap.appendChild(chip);\n    });\n  }\n  function setCheckedStates(){\n    listEl.querySelectorAll('li').forEach(li=>{\n      li.querySelector('input').checked = selectedServices.includes(li.dataset.value);\n    });\n  }\n  function updateDescVisibility(){\n    const descRow = document.getElementById('serviceDescRow');\n    descRow.style.display = selectedServices.length ? '' : 'none';\n  }\n  function toggleValue(val){\n    const idx = selectedServices.indexOf(val);\n    if(idx === -1) selectedServices.push(val);\n    else selectedServices.splice(idx, 1);\n    renderChips();\n    setCheckedStates();\n    updateDescVisibility();\n  }\n\n  listEl.addEventListener('change', (e)=>{\n    const li = e.target.closest('li'); if(!li) return;\n    toggleValue(li.dataset.value);\n    filterInp.focus();\n  });\n  chipsWrap.addEventListener('click', (e)=>{\n    const x = e.target.closest('.x'); if(!x) return;\n    toggleValue(x.dataset.val);\n  });\n  caretBtn.addEventListener('click', (e)=>{\n    e.stopPropagation();\n    openList(!listEl.classList.contains('open'));\n    filterInp.focus();\n  });\n  combo.addEventListener('click', ()=>{\n    openList(true);\n    filterInp.focus();\n  });\n  document.addEventListener('click', (e)=>{\n    if(!multi.contains(e.target)) openList(false);\n  });\n\n  \/* ===============================\n      LOCATION SELECTION\n  =============================== *\/\n  const optionsWrap = document.getElementById('serviceOptions');\n  const locationInfoAmman = document.getElementById('locationInfoAmman');\n  const locationInfoIrbid = document.getElementById('locationInfoIrbid');\n  const locationInfoHomeOffice = document.getElementById('locationInfoHomeOffice');\n\n  function hideAllLocations(){\n    locationInfoAmman.style.display='none';\n    locationInfoIrbid.style.display='none';\n    locationInfoHomeOffice.style.display='none';\n  }\n\n  optionsWrap.addEventListener('click', (e)=>{\n    const opt = e.target.closest('.option');\n    if(!opt) return;\n\n    $$('#serviceOptions .option').forEach(o=>o.classList.remove('active'));\n    opt.classList.add('active');\n\n    hideAllLocations();\n    if(opt.dataset.id === 'amman') locationInfoAmman.style.display='block';\n    if(opt.dataset.id === 'irbid') locationInfoIrbid.style.display='block';\n    if(opt.dataset.id === 'homeOffice') locationInfoHomeOffice.style.display='block';\n  });\n\n  \/* ===============================\n      TABLE CLICK -> OPEN STEP2\n  =============================== *\/\n  document.addEventListener('click', (e)=>{\n    const btn = e.target.closest('.model-cell-btn');\n    if(!btn) return;\n\n    e.preventDefault();\n    const model = btn.dataset.model || btn.textContent.trim();\n\n    openModalSafe();\n    showStep(2);\n\n    document.getElementById('step2Title').textContent = model;\n    document.getElementById('modalTitle').textContent = model;\n\n    \/\/ reset selections\n    selectedServices = [];\n    renderChips();\n    setCheckedStates();\n    document.getElementById('serviceDesc').value = '';\n    updateDescVisibility();\n    $$('#serviceOptions .option').forEach(o=>o.classList.remove('active'));\n    hideAllLocations();\n\n    setTimeout(()=>document.getElementById('serviceFilter')?.focus(), 80);\n  });\n\n  \/* ===============================\n      MODAL 2: Appointment\n  =============================== *\/\n  const modalCustomer  = document.getElementById('modalCustomer');\n  const closeCustomer  = document.getElementById('closeCustomer');\n  const summaryDetails = document.getElementById('summaryDetails');\n  const apptDate  = document.getElementById('apptDate');\n  const apptTime  = document.getElementById('apptTime');\n  const closedMsg = document.getElementById('closedMsg');\n\n  const SCHEDULES = {\n    amman: { 0:[9,21],1:[9,21],2:[9,21],3:[9,21],4:[9,21],5:null,6:[10,21] },\n    irbid: { 0:[10,21],1:[10,21],2:[10,21],3:[10,21],4:[10,21],5:null,6:[10,21] }\n  };\n\n  function fmt12h(h,m=0){\n    const ampm=h>=12?'PM':'AM';\n    let hh=h%12; if(hh===0) hh=12;\n    return `${hh}:${String(m).padStart(2,'0')} ${ampm}`;\n  }\n  function buildSlots(startHour,endHour,date){\n    const slots=[];\n    const now=new Date();\n    const isToday=date.toDateString()===now.toDateString();\n    for(let h=startHour;h<endHour;h++){\n      for(let m=0;m<60;m+=30){\n        const slot=new Date(date);\n        slot.setHours(h,m,0,0);\n        if(isToday && slot<=now) continue;\n        slots.push({ val: slot.toISOString(), label: fmt12h(h,m) });\n      }\n    }\n    return slots;\n  }\n  \n  \n\/\/   function nextOpenDate(branch){\n\/\/     const schedule=SCHEDULES[branch];\n\/\/     const d=new Date();\n\/\/     for(let i=0;i<14;i++){\n\/\/       const t=new Date(d);\n\/\/       t.setDate(d.getDate()+i);\n\/\/       if(schedule[t.getDay()]) return t;\n\/\/     }\n\/\/     return d;\n\/\/   }\n\/\/   function populateTimes(branch){\n\/\/     apptTime.innerHTML = '<option value=\"\">Select a time<\/option>';\n\/\/     closedMsg.style.display = 'none';\n\n\/\/     if(!apptDate.value){\n\/\/       apptDate.valueAsDate = nextOpenDate(branch);\n\/\/     }\n\n\/\/     const chosen = new Date(apptDate.value + 'T00:00:00');\n\/\/     const hours = SCHEDULES[branch]?.[chosen.getDay()] || null;\n\n\/\/     if(!hours){\n\/\/       closedMsg.style.display = '';\n\/\/       return;\n\/\/     }\n\n\/\/     const [start,end] = hours;\n\/\/     const slots = buildSlots(start,end,chosen);\n\n\/\/     if(!slots.length){\n\/\/       apptDate.valueAsDate = nextOpenDate(branch);\n\/\/       return populateTimes(branch);\n\/\/     }\n\n\/\/     slots.forEach(s=>{\n\/\/       const opt=document.createElement('option');\n\/\/       opt.value=s.val;\n\/\/       opt.textContent=s.label;\n\/\/       apptTime.appendChild(opt);\n\/\/     });\n\/\/   }\n\nfunction nextOpenDateWithSlots(branch){\n  const schedule = SCHEDULES[branch];\n  if(!schedule) return null;\n\n  const now = new Date();\n\n  for(let i=0;i<30;i++){\n    const d = new Date();\n    d.setHours(0,0,0,0);\n    d.setDate(d.getDate() + i);\n\n    const hours = schedule[d.getDay()];\n    if(!hours) continue;\n\n    const [start,end] = hours;\n    const slots = buildSlots(start,end,d);\n\n    \/\/ If it's today and we're already past closing, slots will be empty \u2192 skip\n    if(slots.length) return d;\n  }\n\n  return null;\n}\n\nfunction populateTimes(branch){\n  apptTime.innerHTML = '<option value=\"\">Select a time<\/option>';\n  closedMsg.style.display = 'none';\n\n  \/\/ \u2705 guard against wrong branch keys\n  if(!SCHEDULES[branch]){\n    closedMsg.style.display = '';\n    closedMsg.textContent = 'No schedule for this location.';\n    return;\n  }\n\n  \/\/ pick a date that actually has slots\n  let dateObj;\n  if(apptDate.value){\n    dateObj = new Date(apptDate.value + 'T00:00:00');\n  }else{\n    dateObj = nextOpenDateWithSlots(branch);\n    if(!dateObj){\n      closedMsg.style.display = '';\n      closedMsg.textContent = 'No available appointments in the next 30 days.';\n      return;\n    }\n    apptDate.valueAsDate = dateObj;\n  }\n\n  const hours = SCHEDULES[branch][dateObj.getDay()];\n  if(!hours){\n    closedMsg.style.display = '';\n    closedMsg.textContent = 'Selected day is closed for this location.';\n    return;\n  }\n\n  const [start,end] = hours;\n  const slots = buildSlots(start,end,dateObj);\n\n  if(!slots.length){\n    \/\/ instead of recursion, jump once to the next date with slots\n    const nd = nextOpenDateWithSlots(branch);\n    if(!nd){\n      closedMsg.style.display = '';\n      closedMsg.textContent = 'No available appointments in the next 30 days.';\n      return;\n    }\n    apptDate.valueAsDate = nd;\n\n    const h2 = SCHEDULES[branch][nd.getDay()];\n    const slots2 = buildSlots(h2[0], h2[1], nd);\n\n    slots2.forEach(s=>{\n      const opt=document.createElement('option');\n      opt.value=s.val;\n      opt.textContent=s.label;\n      apptTime.appendChild(opt);\n    });\n    return;\n  }\n\n  slots.forEach(s=>{\n    const opt=document.createElement('option');\n    opt.value=s.val;\n    opt.textContent=s.label;\n    apptTime.appendChild(opt);\n  });\n}\n\n  apptDate.addEventListener('change', ()=>{\n    const branch = window._currentBranchForBooking;\n    if(branch) populateTimes(branch);\n  });\n\n  function openCustomerModal(data){\n    summaryDetails.innerHTML = `\n      <div><strong>Device:<\/strong> ${data.model}<\/div>\n      <div><strong>Service(s):<\/strong> ${data.services.join(', ')}<\/div>\n      <div><strong>Description:<\/strong> ${data.description || '(none)'}<\/div>\n      <div><strong>Location:<\/strong> ${data.locationName}<\/div>\n    `;\n\n    window._currentBranchForBooking = data.location;\n\n    const today = new Date();\n    apptDate.min = today.toISOString().slice(0,10);\n    apptDate.value = '';\n    populateTimes(data.location);\n\n    modalCustomer.classList.add('open');\n    modalCustomer.setAttribute('aria-hidden','false');\n    document.documentElement.style.overflow = 'hidden';\n  }\n\n  closeCustomer.addEventListener('click', ()=>{\n    modalCustomer.classList.remove('open');\n    modalCustomer.setAttribute('aria-hidden','true');\n    document.documentElement.style.overflow = '';\n  });\n\n  window.openCustomerModal = openCustomerModal;\n\n  \/* ===============================\n      MODAL 3: Home\/Office\n  =============================== *\/\n  const modalHomePickup   = document.getElementById('modalHomePickup');\n  const closeHomePickup   = document.getElementById('closeHomePickup');\n  const homePickupSummary = document.getElementById('homePickupSummary');\n\n  function openHomePickupModal(data){\n    window._homePickupData = data;\n\n    homePickupSummary.innerHTML = `\n      <div><strong>Device:<\/strong> ${data.model}<\/div>\n      <div><strong>Service(s):<\/strong> ${data.services.join(', ')}<\/div>\n      <div><strong>Description:<\/strong> ${data.description || '(none)'}<\/div>\n      <hr>\n      <div><strong>Location:<\/strong> ${data.locationName}<\/div>\n    `;\n\n    modalHomePickup.classList.add('open');\n    modalHomePickup.setAttribute('aria-hidden','false');\n    document.documentElement.style.overflow = 'hidden';\n  }\n\n  closeHomePickup.addEventListener('click', ()=>{\n    modalHomePickup.classList.remove('open');\n    modalHomePickup.setAttribute('aria-hidden','true');\n    document.documentElement.style.overflow = '';\n  });\n\n  window.openHomePickupModal = openHomePickupModal;\n\n  \/* ===============================\n      NEXT -> same workflow\n  =============================== *\/\n  document.getElementById('nextBtn').addEventListener('click', ()=>{\n    const chosenModel = document.getElementById('step2Title').textContent.trim();\n    const chosenPlaceEl = document.querySelector('#serviceOptions .option.active');\n    const chosenPlace = chosenPlaceEl?.dataset.id || '';\n    const chosenPlaceName = chosenPlaceEl?.querySelector('.title')?.textContent?.trim() || '';\n    const serviceDesc = document.getElementById('serviceDesc')?.value.trim() || '';\n\n    if(!selectedServices.length){\n      alert('Please choose at least one service.');\n      return;\n    }\n    if(!chosenPlace){\n      alert('Please choose a service location.');\n      return;\n    }\n\n    const data = {\n      model: chosenModel,\n      services: selectedServices.slice(),\n      description: serviceDesc,\n      location: chosenPlace,\n      locationName: chosenPlaceName\n    };\n\n    closeModalSafe();\n\n    if(chosenPlace === 'homeOffice'){\n      window.openHomePickupModal(data);\n    }else{\n      window.openCustomerModal(data);\n    }\n  });\n<\/script>\n\n<script type=\"module\">\n   import { collection, addDoc, serverTimestamp } from \"https:\/\/www.gstatic.com\/firebasejs\/10.13.1\/firebase-firestore.js\";\n\n\n  submitAppointment.addEventListener(\"click\", async () => {\n    const name = document.getElementById(\"custName\").value.trim();\n    const email = document.getElementById(\"custEmail\").value.trim();\n    const phone = document.getElementById(\"custPhone\").value.trim();\n    const dateVal = document.getElementById(\"apptDate\").value;\n    const timeVal = document.getElementById(\"apptTime\").value;\n\n    if (!name || !email || !phone || !dateVal || !timeVal) {\n      alert(\"\u26a0\ufe0f Please fill in all required fields.\");\n      return;\n    }\n\n    \/\/ Gather all data from the booking flow\n    const data = {\n      device: step2Title.textContent.trim(),\n      services: selectedServices,\n      description: document.getElementById(\"serviceDesc\")?.value.trim() || \"\",\n      location: window._currentBranchForBooking || \"\",\n      customer: {\n        name,\n        email,\n        phone,\n      },\n      appointment: {\n        date: dateVal,\n        time: timeVal,\n      },\n      createdAt: serverTimestamp(),\n    };\n\n    try {\n      \/\/ \u2705 Save appointment to Firestore\n      const docRef = await addDoc(collection(window.db, \"appointments\"), data);\n      alert(`\u2705 Appointment saved successfully!\\nOur team will contact you very soon.\\nThank you...`);\n\n      \/\/ Close modal and reset\n      modalCustomer.classList.remove(\"open\");\n      document.documentElement.style.overflow = \"\";\n      document.getElementById(\"custName\").value = \"\";\n      document.getElementById(\"custEmail\").value = \"\";\n      document.getElementById(\"custPhone\").value = \"\";\n      document.getElementById(\"apptDate\").value = \"\";\n      document.getElementById(\"apptTime\").value = \"\";\n    } catch (error) {\n      console.error(\"Error adding document:\", error);\n      alert(\"\u274c Error saving appointment. Check console for details.\");\n    }\n  });\n  \n  \n<\/script>\n\n<script type=\"module\">\n  import { collection, addDoc, serverTimestamp } from \"https:\/\/www.gstatic.com\/firebasejs\/10.13.1\/firebase-firestore.js\";\n  import { getStorage, ref, uploadBytes, getDownloadURL } from \"https:\/\/www.gstatic.com\/firebasejs\/10.13.1\/firebase-storage.js\";\n\n  \/\/ Use the default app you already initialized earlier\n  const storage = getStorage();\n\n  \/\/ ===== AGREEMENT ELEMENTS =====\n  const agreementModal   = document.getElementById('modalAgreement');\n  const closeAgreement   = document.getElementById('closeAgreement');\n  const agreementSummary = document.getElementById('agreementSummary');\n  const agreeName        = document.getElementById('agreeName');\n  const agreePID         = document.getElementById('agreePID');\n  const agreeCheck       = document.getElementById('agreeCheck');\n  const agreeAndCreate   = document.getElementById('agreeAndCreate');\n  const termsPdfFrame    = document.getElementById('termsPdfFrame');\n\n  const homePickupModal  = document.getElementById('modalHomePickup');\n\n  \/\/ Your Terms PDF\n\/\/   const TERMS_PDF_URL = 'https:\/\/365solutionsjo.com\/wp-content\/uploads\/2024\/06\/Amman_new_contract.pdf';\n\n  const TERMS_PDF_URL =  'https:\/\/365solutionsjo.com\/wp-content\/uploads\/2025\/11\/Terms-and-conditions.pdf';\n  \n  \/\/ ----- Signature Pad -----\n  let signaturePad;\n  function initSignaturePad(){\n    const canvas = document.getElementById('sigPad');\n    const rect = canvas.getBoundingClientRect();\n    canvas.width  = rect.width * window.devicePixelRatio;\n    canvas.height = rect.height * window.devicePixelRatio;\n    const ctx = canvas.getContext('2d');\n    ctx.scale(window.devicePixelRatio, window.devicePixelRatio);\n    signaturePad = new window.SignaturePad(canvas, { backgroundColor: 'rgba(255,255,255,0)' });\n    const clearBtn = document.getElementById('clearSig');\n    if (clearBtn) clearBtn.onclick = ()=> signaturePad.clear();\n  }\n  window.addEventListener('resize', ()=> {\n    if (agreementModal.classList.contains('open')) initSignaturePad();\n  });\n\n  \/\/ ----- Define & EXPOSE openAgreementModal -----\n  function openAgreementModal(summary, prefillName){\n    agreementSummary.innerHTML = `\n      <div class=\"summary-title\"><div class=\"summary-icon\">\ud83e\uddfe<\/div> Service Agreement \u2013 Summary<\/div>\n      <p><strong>Device:<\/strong> ${summary.device}<\/p>\n      <p><strong>Service(s):<\/strong> ${summary.services.join(', ')}<\/p>\n      <p><strong>Description:<\/strong> ${summary.description || '(none)'}<\/p>\n      <hr>\n      <p><strong>Location:<\/strong> ${summary.locationName}<\/p>\n    `;\n    termsPdfFrame.src = TERMS_PDF_URL + '#toolbar=0&navpanes=0&scrollbar=0';\n    agreeName.value = prefillName || '';\n    agreePID.value = '';\n    agreeCheck.checked = false;\n\n    agreementModal.classList.add('open');\n    agreementModal.setAttribute('aria-hidden','false');\n    document.documentElement.style.overflow = 'hidden';\n    setTimeout(initSignaturePad, 50);\n  }\n  \/\/ \ud83d\udc47 expose globally so other scripts\/handlers can call it\n  window.openAgreementModal = openAgreementModal;\n\n  closeAgreement.addEventListener('click', ()=>{\n    agreementModal.classList.remove('open');\n    agreementModal.setAttribute('aria-hidden','true');\n    document.documentElement.style.overflow = '';\n  });\n\n  \/\/ ----- Rebind Home\/Office SUBMIT so it calls openAgreementModal -----\n  {\n    const oldBtn = document.getElementById('submitHomePickup');\n    const newBtn = oldBtn.cloneNode(true);           \/\/ strip old listeners\n    oldBtn.replaceWith(newBtn);\n    const btn = document.getElementById('submitHomePickup');\n\n    btn.addEventListener('click', (e)=>{\n      e.preventDefault();\nconsole.log(\"Openning agreement\");\n      const name    = document.getElementById('hpName').value.trim();\n      const email   = document.getElementById('hpEmail').value.trim();\n      const phone   = document.getElementById('hpPhone').value.trim();\n      const serial  = document.getElementById('hpSerial').value.trim();\n      const problem = document.getElementById('hpProblem').value.trim();\n      const company = document.getElementById('hpCompany').value.trim();\n      const address = document.getElementById('hpAddress').value.trim();\n\n      if(!name || !email || !phone || !serial || !problem || !address){\n        alert('Please fill in name, email, phone, serial\/IMEI, problem details, and address.');\n        return;\n      }\n\n      const sel = window._homePickupData;\n      if(!sel){\n        alert('Missing selection context. Please choose model\/services again.');\n        return;\n      }\n\n      \/\/ keep values for final ticket save\n      window._homePickupFormInputs = { name, email, phone, serial, problem, company, address };\n\n      \/\/ \u2705 call the now-global function\n      window.openAgreementModal({\n        device: sel.model,\n        services: sel.services,\n        description: sel.description,\n        locationName: sel.locationName\n      }, name);\n    });\n  }\n\n  \/\/ ----- Helpers for stamping & uploading -----\n  async function fetchArrayBuffer(url){\n    const res = await fetch(url);\n    if(!res.ok) throw new Error('Failed to fetch Terms PDF');\n    return await res.arrayBuffer();\n  }\n\n  async function createStampedAgreementPDF({customerName, personalId, signatureDataUrl, selection}) {\n    const { PDFDocument, rgb, StandardFonts } = window.PDFLib;\n    const pdfBytes = await fetchArrayBuffer(TERMS_PDF_URL);\n    const pdfDoc = await PDFDocument.load(pdfBytes);\n    const page = pdfDoc.getPages()[0];\n    const { width, height } = page.getSize();\n    const font = await pdfDoc.embedFont(StandardFonts.Helvetica);\n\n    \/\/ Signature\n    const sigPngBytes = await (await fetch(signatureDataUrl)).arrayBuffer();\n    const sigImage = await pdfDoc.embedPng(sigPngBytes);\n    const sigW = 60, sigH = 20;\n    const sigX = 225,  sigY = 55;\n\n    \/\/ Text positions (tweak as needed)\n    const nameX = 40,  nameY = sigY + 10;\n    const idX   = 350, idY   = nameY;\n    \n    \n    \n\n    page.drawText(`${customerName}`, { x: nameX, y: nameY, size: 5, font, color: rgb(0,0,0) });\n    \/\/ if (personalId) {\n    \/\/   page.drawText(`Personal ID: ${personalId}`, { x: idX, y: idY, size: 12, font, color: rgb(0,0,0) });\n    \/\/ }\n    \n    page.drawImage(sigImage, { x: sigX, y: sigY, width: sigW, height: sigH });\n    \n    \n    const sigX2 = 300,  sigY2 = 45;\n    \n    const nameX2 = 475,  nameY2 = sigY2 + 5;\n   \n    \n    page.drawText(`${customerName}`, { x: nameX2, y: nameY2, size: 5, font, color: rgb(0,0,0) });\n    \/\/ if (personalId) {\n    \/\/   page.drawText(`Personal ID: ${personalId}`, { x: idX, y: idY, size: 12, font, color: rgb(0,0,0) });\n    \/\/ }\n   \n   page.drawImage(sigImage, { x: sigX2, y: sigY2, width: sigW, height: sigH });\n    \n\n   \n    return await pdfDoc.save();\n  }\n\n  async function uploadAgreementToStorage(bytes){\n    const filename = `agreements\/${Date.now()}_agreement.pdf`;\n    const fileRef = ref(storage, filename);\n    await uploadBytes(fileRef, new Blob([bytes], { type: 'application\/pdf' }));\n    return await getDownloadURL(fileRef);\n  }\n\n  \/\/ ----- Final AGREE & CREATE (writes to onlineTickets) -----\n  const db = window.db; \/\/ from your earlier Firebase init module\n   \/\/ AGREE & CREATE -> send OTP -> open OTP modal -> verify -> save ticket\n  agreeAndCreate?.addEventListener('click', async ()=>{\n    try{\n      const name = agreeName.value.trim();\n      const pid  = agreePID.value.trim();\n\n      if(!name){ alert('Please enter your name.'); return; }\n      if(!agreeCheck.checked){ alert('Please accept the Terms & Conditions.'); return; }\n      if(!signaturePad || signaturePad.isEmpty()){ alert('Please provide your signature.'); return; }\n\n      const selection = window._homePickupData;\n      const form      = window._homePickupFormInputs;\n      if(!selection || !form){ alert('Missing context. Please fill the form again.'); return; }\n\n      const email = String(form.email || \"\").trim();\n      if(!email || !email.includes(\"@\")){\n        alert(\"Please enter a valid email.\");\n        return;\n      }\n\n      \/\/ 1) Send OTP\n      agreeAndCreate.disabled = true;\n      agreeAndCreate.textContent = \"Sending code...\";\n      await window.sendEmailVerification(email, { device: selection.model, location: selection.locationName });\n      window._lastOtpEmail = email;\n\n      \/\/ 2) Open OTP modal and wait\n      agreeAndCreate.textContent = \"Waiting for verification...\";\n      const verified = await window.showOtpModal(email);\n      if(!verified){\n        agreeAndCreate.disabled = false;\n        agreeAndCreate.textContent = \"AGREE & CREATE TICKET\";\n        return;\n      }\n\n      \/\/ 3) Continue (stamp PDF + upload + save)\n      agreeAndCreate.textContent = \"Creating ticket...\";\n      const sigDataUrl = signaturePad.toDataURL('image\/png');\n      const stampedBytes = await createStampedAgreementPDF({ customerName: name, signatureDataUrl: sigDataUrl });\n      const agreementUrl = await uploadAgreementToStorage(stampedBytes);\n\n      const payload = {\n        device: selection.model,\n        services: selection.services,\n        selectionDescription: selection.description || '',\n        location: selection.location,\n        locationName: selection.locationName,\n        agreement: {\n          customerName: name,\n          personalId: pid || null,\n          signedAt: new Date().toISOString(),\n          url: agreementUrl\n        },\n        customer: {\n          name: form.name,\n          email: form.email,\n          phone: form.phone,\n          company: form.company || null,\n          address: form.address\n        },\n        deviceInfo: {\n          serialOrImei: form.serial,\n          problemDetails: form.problem\n        },\n        appointment: null,\n        createdAt: serverTimestamp(),\n        emailVerification: { verified: true, verifiedAt: new Date().toISOString() }\n      };\n\n      await addDoc(collection(db, 'onlineTickets'), payload);\n\n      alert('\u2705 Ticket created. Thank you!');\n      agreementModal.classList.remove('open');\n      homePickupModal.classList.remove('open');\n      document.documentElement.style.overflow = '';\n\n    }catch(err){\n      console.error(err);\n      const msg = err?.message || err?.details || \"\u274c Could not create ticket. Please try again.\";\n      alert(msg);\n    }finally{\n      agreeAndCreate.disabled = false;\n      agreeAndCreate.textContent = \"AGREE & CREATE TICKET\";\n    }\n  });\n<\/script>\n<!-- ===== OTP modal logic (non-module) ===== -->\n    <script>\n      (function () {\n        const otpModal = document.getElementById(\"otpModal\");\n        const closeBtn = document.getElementById(\"otpCloseBtn\");\n        const emailLabel = document.getElementById(\"otpEmailLabel\");\n        const inputsWrap = document.getElementById(\"otpInputs\");\n        const boxes = inputsWrap\n          ? Array.from(inputsWrap.querySelectorAll(\".otp-box\"))\n          : [];\n        const verifyBtn = document.getElementById(\"otpVerifyBtn\");\n        const clearBtn = document.getElementById(\"otpClearBtn\");\n        const resendBtn = document.getElementById(\"otpResendBtn\");\n        const timerEl = document.getElementById(\"otpTimer\");\n        const errEl = document.getElementById(\"otpError\");\n        const okEl = document.getElementById(\"otpSuccess\");\n\n        let resendCooldownSec = 0;\n        let timerInterval = null;\n        let _resolveWait = null;\n\n        function openOtpModal() {\n          otpModal.classList.add(\"open\");\n          otpModal.setAttribute(\"aria-hidden\", \"false\");\n          document.documentElement.style.overflow = \"hidden\";\n        }\n        function closeOtpModal(result = false) {\n          const active = document.activeElement;\n          if (active && otpModal.contains(active)) active.blur();\n\n          otpModal.classList.remove(\"open\");\n          otpModal.setAttribute(\"aria-hidden\", \"true\");\n          document.documentElement.style.overflow = \"\";\n\n          if (_resolveWait) {\n            _resolveWait(result);\n            _resolveWait = null;\n          }\n        }\n\n        closeBtn?.addEventListener(\"click\", () => closeOtpModal(false));\n        otpModal?.addEventListener(\"click\", (e) => {\n          if (e.target === otpModal) closeOtpModal(false);\n        });\n\n        function setStatus({ error = \"\", success = \"\" }) {\n          if (errEl) {\n            errEl.style.display = error ? \"\" : \"none\";\n            errEl.textContent = error || \"\";\n          }\n          if (okEl) {\n            okEl.style.display = success ? \"\" : \"none\";\n            okEl.textContent = success || \"\";\n          }\n        }\n        function readCode() {\n          return boxes.map((b) => (b.value || \"\").trim()).join(\"\");\n        }\n        function updateUI() {\n          const code = readCode();\n          boxes.forEach((b) => {\n            b.classList.toggle(\"filled\", !!b.value);\n            b.classList.remove(\"error\", \"success\");\n          });\n          const ready = \/^\\d{6}$\/.test(code);\n          if (verifyBtn) verifyBtn.disabled = !ready;\n          return code;\n        }\n        function focusIndex(i) {\n          const idx = Math.max(0, Math.min(boxes.length - 1, i));\n          boxes[idx]?.focus();\n          boxes[idx]?.select?.();\n        }\n        function clearAll() {\n          boxes.forEach((b) => (b.value = \"\"));\n          updateUI();\n          setStatus({ error: \"\", success: \"\" });\n          focusIndex(0);\n        }\n        function markError(msg) {\n          boxes.forEach((b) => b.classList.add(\"error\"));\n          setStatus({\n            error: msg || \"Invalid or expired code. Please try again.\",\n          });\n        }\n        function markSuccess() {\n          boxes.forEach((b) => b.classList.add(\"success\"));\n          setStatus({ success: \"\u2705 Verified successfully\" });\n        }\n        function startResendCooldown(seconds) {\n          resendCooldownSec = seconds;\n          if (timerInterval) clearInterval(timerInterval);\n          function tick() {\n            if (resendBtn) resendBtn.disabled = resendCooldownSec > 0;\n            if (timerEl)\n              timerEl.textContent =\n                resendCooldownSec > 0 ? `Resend in ${resendCooldownSec}s` : \"\";\n            if (resendCooldownSec > 0) resendCooldownSec--;\n          }\n          tick();\n          timerInterval = setInterval(tick, 1000);\n        }\n\n        boxes.forEach((box, i) => {\n          box.addEventListener(\"input\", () => {\n            const v = (box.value || \"\").replace(\/\\D\/g, \"\");\n            box.value = v.slice(-1);\n            updateUI();\n            setStatus({ error: \"\", success: \"\" });\n            if (box.value && i < boxes.length - 1) focusIndex(i + 1);\n          });\n\n          box.addEventListener(\"keydown\", (e) => {\n            if (e.key === \"Backspace\") {\n              if (box.value) {\n                box.value = \"\";\n                updateUI();\n                return;\n              }\n              if (i > 0) {\n                focusIndex(i - 1);\n                boxes[i - 1].value = \"\";\n                updateUI();\n              }\n            }\n            if (e.key === \"ArrowLeft\" && i > 0) focusIndex(i - 1);\n            if (e.key === \"ArrowRight\" && i < boxes.length - 1)\n              focusIndex(i + 1);\n          });\n\n          box.addEventListener(\"paste\", (e) => {\n            const text =\n              (e.clipboardData || window.clipboardData).getData(\"text\") || \"\";\n            const digits = text.replace(\/\\D\/g, \"\").slice(0, 6);\n            if (digits.length) {\n              e.preventDefault();\n              digits.split(\"\").forEach((d, idx) => {\n                if (boxes[idx]) boxes[idx].value = d;\n              });\n              updateUI();\n              verifyBtn?.focus();\n            }\n          });\n        });\n\n        clearBtn?.addEventListener(\"click\", clearAll);\n\n        \/\/ callbacks to be set by firebase module script\n        window.onOtpVerify = async function () {\n          return false;\n        };\n        window.onOtpResend = async function () {};\n\n        window.showOtpModal = function (email) {\n          emailLabel.textContent = email || \"\";\n          clearAll();\n          startResendCooldown(30);\n          openOtpModal();\n          return new Promise((resolve) => {\n            _resolveWait = resolve;\n          });\n        };\n\n        window._otpUI = { markError, markSuccess, clearAll, closeOtpModal };\n\n        verifyBtn?.addEventListener(\"click\", async () => {\n          try {\n            verifyBtn.disabled = true;\n            setStatus({ error: \"\", success: \"\" });\n            const ok = await window.onOtpVerify(readCode());\n            if (ok) {\n              markSuccess();\n              setTimeout(() => closeOtpModal(true), 450);\n            } else {\n              markError();\n            }\n          } catch (err) {\n            console.error(err);\n            markError(err?.message || \"Verification failed.\");\n          } finally {\n            verifyBtn.disabled = !\/^\\d{6}$\/.test(readCode());\n          }\n        });\n\n        resendBtn?.addEventListener(\"click\", async () => {\n          try {\n            setStatus({ error: \"\", success: \"\" });\n            resendBtn.disabled = true;\n            await window.onOtpResend();\n            startResendCooldown(30);\n            setStatus({ success: \"\u2705 New code sent. Check your email.\" });\n          } catch (err) {\n            console.error(err);\n            setStatus({ error: \"Could not resend code. Please try again.\" });\n            resendBtn.disabled = false;\n          }\n        });\n      })();\n    <\/script>\n\n<\/body>\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d99eb7d elementor-widget elementor-widget-heading\" data-id=\"d99eb7d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">Cost<\/h6>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a174da4 elementor-widget elementor-widget-text-editor\" data-id=\"a174da4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Prices may vary depending on the model and type of repair, but the service that we provide will always worth it, when you bring your iPad to the service center, we can give you an estimation.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-76cf371 elementor-widget elementor-widget-heading\" data-id=\"76cf371\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span style=\"font-size: 24px;text-transform: none\">Time<\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4b6b333 elementor-widget elementor-widget-text-editor\" data-id=\"4b6b333\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"color: rgb(0, 0, 0); font-family: Tahoma, sans-serif;\">Most of the repairs can take 3-5 working days depending on the type of repair, but this might change if parts are needed in the repair.<\/span><br><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7e58c8c elementor-widget elementor-widget-heading\" data-id=\"7e58c8c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span style=\"font-size: 24px;text-transform: none\">How to start a repair<\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c927c65 elementor-widget elementor-widget-text-editor\" data-id=\"c927c65\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"color: #000000; font-family: Tahoma, sans-serif;\">You can bring your iPad to our service center and we will estimate the time and cost, and you will receive an SMS and email during the repair procedure, more over you can always track your repair from\u00a0<\/span><a style=\"background-color: #f5f5f5; font-size: 1rem;\" href=\"https:\/\/365solutionsjo.com\/customer_repair_tracking.html\" target=\"_blank\" rel=\"noopener\">here.<\/a><\/p>\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<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-409baec\" data-id=\"409baec\" 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-9fe5251 elementor-widget elementor-widget-image\" data-id=\"9fe5251\" 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=\"491\" height=\"401\" src=\"https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2023\/07\/iPad.png?fit=491%2C401&amp;ssl=1\" class=\"attachment-large size-large wp-image-1207\" alt=\"\" srcset=\"https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2023\/07\/iPad.png?w=491&amp;ssl=1 491w, https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2023\/07\/iPad.png?resize=300%2C245&amp;ssl=1 300w\" sizes=\"(max-width: 491px) 100vw, 491px\" \/>\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\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-d8f77c5 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"d8f77c5\" data-element_type=\"section\" data-e-type=\"section\">\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-bc2a8a9\" data-id=\"bc2a8a9\" 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<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-f3e5ad7 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f3e5ad7\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-wide\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-16 elementor-inner-column elementor-element elementor-element-183a9c4\" data-id=\"183a9c4\" 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-8007ded e-transform elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"8007ded\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_transform_scale_effect_hover&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:1.1999999999999999555910790149937383830547332763671875,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_hover_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_hover_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/365solutionsjo.com\/iPhone-service\" tabindex=\"-1\"><img decoding=\"async\" width=\"472\" height=\"527\" src=\"https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2024\/03\/iPhone_15_Pro_iPhone_15_Family_Screen__GBEN.png?fit=472%2C527&amp;ssl=1\" class=\"attachment-full size-full wp-image-1437\" alt=\"\" srcset=\"https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2024\/03\/iPhone_15_Pro_iPhone_15_Family_Screen__GBEN.png?w=472&amp;ssl=1 472w, https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2024\/03\/iPhone_15_Pro_iPhone_15_Family_Screen__GBEN.png?resize=269%2C300&amp;ssl=1 269w\" sizes=\"(max-width: 472px) 100vw, 472px\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><div class=\"elementor-image-box-title\"><a href=\"https:\/\/365solutionsjo.com\/iPhone-service\">iPhone<\/a><\/div><\/div><\/div>\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<div class=\"elementor-column elementor-col-16 elementor-inner-column elementor-element elementor-element-a2fcd07\" data-id=\"a2fcd07\" 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-55c1bce e-transform elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"55c1bce\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_transform_scale_effect_hover&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:1.1999999999999999555910790149937383830547332763671875,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_hover_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_hover_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/365solutionsjo.com\/iPad-service\" tabindex=\"-1\"><img decoding=\"async\" width=\"283\" height=\"283\" src=\"https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2023\/07\/iPad-Service-Small.png?fit=283%2C283&amp;ssl=1\" class=\"attachment-medium size-medium wp-image-1279\" alt=\"\" srcset=\"https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2023\/07\/iPad-Service-Small.png?w=283&amp;ssl=1 283w, https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2023\/07\/iPad-Service-Small.png?resize=150%2C150&amp;ssl=1 150w\" sizes=\"(max-width: 283px) 100vw, 283px\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><div class=\"elementor-image-box-title\"><a href=\"https:\/\/365solutionsjo.com\/iPad-service\">iPad<\/a><\/div><\/div><\/div>\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<div class=\"elementor-column elementor-col-16 elementor-inner-column elementor-element elementor-element-5469d94\" data-id=\"5469d94\" 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-b852297 e-transform elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"b852297\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_transform_scale_effect_hover&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:1.1999999999999999555910790149937383830547332763671875,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_hover_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_hover_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/365solutionsjo.com\/mac-service\/\" mac=\"\" tabindex=\"-1\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"300\" src=\"https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2024\/03\/MacBook_Pro_16_in_M3_Pro_Max_Space_Black_PDP_Image_Position-1__en-ME.png?fit=300%2C300&amp;ssl=1\" class=\"attachment-medium size-medium wp-image-1445\" alt=\"\" srcset=\"https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2024\/03\/MacBook_Pro_16_in_M3_Pro_Max_Space_Black_PDP_Image_Position-1__en-ME.png?w=472&amp;ssl=1 472w, https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2024\/03\/MacBook_Pro_16_in_M3_Pro_Max_Space_Black_PDP_Image_Position-1__en-ME.png?resize=300%2C300&amp;ssl=1 300w, https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2024\/03\/MacBook_Pro_16_in_M3_Pro_Max_Space_Black_PDP_Image_Position-1__en-ME.png?resize=150%2C150&amp;ssl=1 150w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><div class=\"elementor-image-box-title\"><a href=\"https:\/\/365solutionsjo.com\/mac-service\/\" mac=\"\">Mac<\/a><\/div><\/div><\/div>\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<div class=\"elementor-column elementor-col-16 elementor-inner-column elementor-element elementor-element-8f4200c\" data-id=\"8f4200c\" 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-80e7ff6 e-transform elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"80e7ff6\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_transform_scale_effect_hover&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:1.1999999999999999555910790149937383830547332763671875,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_hover_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_hover_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/365solutionsjo.com\/AppleWatch-Service\" tabindex=\"-1\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"300\" src=\"https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2024\/03\/Apple_Watch_Series_9_45mm_Cellular_Apple_Watch_Ultra_2_49mm_Cellular_Apple_Watch_SE_44mm_Cellular_3-up_Family_Screen__AEEN-1.png?fit=300%2C300&amp;ssl=1\" class=\"attachment-medium size-medium wp-image-1444\" alt=\"\" srcset=\"https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2024\/03\/Apple_Watch_Series_9_45mm_Cellular_Apple_Watch_Ultra_2_49mm_Cellular_Apple_Watch_SE_44mm_Cellular_3-up_Family_Screen__AEEN-1.png?w=472&amp;ssl=1 472w, https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2024\/03\/Apple_Watch_Series_9_45mm_Cellular_Apple_Watch_Ultra_2_49mm_Cellular_Apple_Watch_SE_44mm_Cellular_3-up_Family_Screen__AEEN-1.png?resize=300%2C300&amp;ssl=1 300w, https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2024\/03\/Apple_Watch_Series_9_45mm_Cellular_Apple_Watch_Ultra_2_49mm_Cellular_Apple_Watch_SE_44mm_Cellular_3-up_Family_Screen__AEEN-1.png?resize=150%2C150&amp;ssl=1 150w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><div class=\"elementor-image-box-title\"><a href=\"https:\/\/365solutionsjo.com\/AppleWatch-Service\">AppleWatch<\/a><\/div><\/div><\/div>\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<div class=\"elementor-column elementor-col-16 elementor-inner-column elementor-element elementor-element-77331af\" data-id=\"77331af\" 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-a9b988b e-transform elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"a9b988b\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_transform_scale_effect_hover&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:1.1999999999999999555910790149937383830547332763671875,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_hover_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_hover_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/365solutionsjo.com\/AirPods-Service\" tabindex=\"-1\"><img loading=\"lazy\" decoding=\"async\" width=\"283\" height=\"283\" src=\"https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2023\/07\/AirPods-Service-Small.png?fit=283%2C283&amp;ssl=1\" class=\"attachment-medium size-medium wp-image-1282\" alt=\"\" srcset=\"https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2023\/07\/AirPods-Service-Small.png?w=283&amp;ssl=1 283w, https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2023\/07\/AirPods-Service-Small.png?resize=150%2C150&amp;ssl=1 150w\" sizes=\"(max-width: 283px) 100vw, 283px\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><div class=\"elementor-image-box-title\"><a href=\"https:\/\/365solutionsjo.com\/AirPods-Service\">AirPods<\/a><\/div><\/div><\/div>\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<div class=\"elementor-column elementor-col-16 elementor-inner-column elementor-element elementor-element-a76030f\" data-id=\"a76030f\" 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-47b3a09 e-transform elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"47b3a09\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_transform_scale_effect_hover&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:1.1999999999999999555910790149937383830547332763671875,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_hover_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_hover_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/365solutionsjo.com\/AppleTV-Service\" tabindex=\"-1\"><img loading=\"lazy\" decoding=\"async\" width=\"283\" height=\"283\" src=\"https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2023\/07\/AppleTV-Service-Small.png?fit=283%2C283&amp;ssl=1\" class=\"attachment-medium size-medium wp-image-1283\" alt=\"\" srcset=\"https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2023\/07\/AppleTV-Service-Small.png?w=283&amp;ssl=1 283w, https:\/\/i0.wp.com\/365solutionsjo.com\/wp-content\/uploads\/2023\/07\/AppleTV-Service-Small.png?resize=150%2C150&amp;ssl=1 150w\" sizes=\"(max-width: 283px) 100vw, 283px\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><div class=\"elementor-image-box-title\"><a href=\"https:\/\/365solutionsjo.com\/AppleTV-Service\">AppleTV<\/a><\/div><\/div><\/div>\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\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>iPad Service and Support Do you have any problems with your iPadScreen Problem, Power Problems, Sound Problems Liquid damage iPad Models Table + Step 2 Modal iPad Repair Models iPad (5th generation) Repair iPad (6th generation) Repair iPad (7th generation) Repair iPad (8th generation) Repair iPad (9th generation) Repair iPad Air (3rd generation) (Wi-Fi) Repair [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"nf_dc_page":"","om_disable_all_campaigns":false,"_uag_custom_page_level_css":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"site-sidebar-layout":"no-sidebar","site-content-layout":"page-builder","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-1199","page","type-page","status-publish","hentry"],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>iPad-Service -<\/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:\/\/365solutionsjo.com\/ar\/ipad-service\/\" \/>\n<meta property=\"og:locale\" content=\"ar_AR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"iPad-Service -\" \/>\n<meta property=\"og:description\" content=\"iPad Service and Support Do you have any problems with your iPadScreen Problem, Power Problems, Sound Problems Liquid damage iPad Models Table + Step 2 Modal iPad Repair Models iPad (5th generation) Repair iPad (6th generation) Repair iPad (7th generation) Repair iPad (8th generation) Repair iPad (9th generation) Repair iPad Air (3rd generation) (Wi-Fi) Repair [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/365solutionsjo.com\/ar\/ipad-service\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-17T08:23:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/365solutionsjo.com\/wp-content\/uploads\/2025\/10\/pngtree-an-image-of-a-store-front-or-bakery-store-coloring-pages-vector-png-image_6981000.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u0648\u0642\u062a \u0627\u0644\u0642\u0631\u0627\u0621\u0629 \u0627\u0644\u0645\u064f\u0642\u062f\u0651\u0631\" \/>\n\t<meta name=\"twitter:data1\" content=\"5 \u062f\u0642\u0627\u0626\u0642\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/365solutionsjo.com\\\/ipad-service\\\/\",\"url\":\"https:\\\/\\\/365solutionsjo.com\\\/ipad-service\\\/\",\"name\":\"iPad-Service -\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/dso.azu.mybluehost.me\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/365solutionsjo.com\\\/ipad-service\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/365solutionsjo.com\\\/ipad-service\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/365solutionsjo.com\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/pngtree-an-image-of-a-store-front-or-bakery-store-coloring-pages-vector-png-image_6981000.png\",\"datePublished\":\"2023-07-04T19:16:06+00:00\",\"dateModified\":\"2026-01-17T08:23:50+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/365solutionsjo.com\\\/ipad-service\\\/#breadcrumb\"},\"inLanguage\":\"ar\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/365solutionsjo.com\\\/ipad-service\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ar\",\"@id\":\"https:\\\/\\\/365solutionsjo.com\\\/ipad-service\\\/#primaryimage\",\"url\":\"https:\\\/\\\/365solutionsjo.com\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/pngtree-an-image-of-a-store-front-or-bakery-store-coloring-pages-vector-png-image_6981000.png\",\"contentUrl\":\"https:\\\/\\\/365solutionsjo.com\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/pngtree-an-image-of-a-store-front-or-bakery-store-coloring-pages-vector-png-image_6981000.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/365solutionsjo.com\\\/ipad-service\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/365solutionsjo.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"iPad-Service\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/dso.azu.mybluehost.me\\\/#website\",\"url\":\"https:\\\/\\\/dso.azu.mybluehost.me\\\/\",\"name\":\"\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/dso.azu.mybluehost.me\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ar\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"iPad-Service -","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:\/\/365solutionsjo.com\/ar\/ipad-service\/","og_locale":"ar_AR","og_type":"article","og_title":"iPad-Service -","og_description":"iPad Service and Support Do you have any problems with your iPadScreen Problem, Power Problems, Sound Problems Liquid damage iPad Models Table + Step 2 Modal iPad Repair Models iPad (5th generation) Repair iPad (6th generation) Repair iPad (7th generation) Repair iPad (8th generation) Repair iPad (9th generation) Repair iPad Air (3rd generation) (Wi-Fi) Repair [&hellip;]","og_url":"https:\/\/365solutionsjo.com\/ar\/ipad-service\/","article_modified_time":"2026-01-17T08:23:50+00:00","og_image":[{"url":"https:\/\/365solutionsjo.com\/wp-content\/uploads\/2025\/10\/pngtree-an-image-of-a-store-front-or-bakery-store-coloring-pages-vector-png-image_6981000.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"\u0648\u0642\u062a \u0627\u0644\u0642\u0631\u0627\u0621\u0629 \u0627\u0644\u0645\u064f\u0642\u062f\u0651\u0631":"5 \u062f\u0642\u0627\u0626\u0642"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/365solutionsjo.com\/ipad-service\/","url":"https:\/\/365solutionsjo.com\/ipad-service\/","name":"iPad-Service -","isPartOf":{"@id":"https:\/\/dso.azu.mybluehost.me\/#website"},"primaryImageOfPage":{"@id":"https:\/\/365solutionsjo.com\/ipad-service\/#primaryimage"},"image":{"@id":"https:\/\/365solutionsjo.com\/ipad-service\/#primaryimage"},"thumbnailUrl":"https:\/\/365solutionsjo.com\/wp-content\/uploads\/2025\/10\/pngtree-an-image-of-a-store-front-or-bakery-store-coloring-pages-vector-png-image_6981000.png","datePublished":"2023-07-04T19:16:06+00:00","dateModified":"2026-01-17T08:23:50+00:00","breadcrumb":{"@id":"https:\/\/365solutionsjo.com\/ipad-service\/#breadcrumb"},"inLanguage":"ar","potentialAction":[{"@type":"ReadAction","target":["https:\/\/365solutionsjo.com\/ipad-service\/"]}]},{"@type":"ImageObject","inLanguage":"ar","@id":"https:\/\/365solutionsjo.com\/ipad-service\/#primaryimage","url":"https:\/\/365solutionsjo.com\/wp-content\/uploads\/2025\/10\/pngtree-an-image-of-a-store-front-or-bakery-store-coloring-pages-vector-png-image_6981000.png","contentUrl":"https:\/\/365solutionsjo.com\/wp-content\/uploads\/2025\/10\/pngtree-an-image-of-a-store-front-or-bakery-store-coloring-pages-vector-png-image_6981000.png"},{"@type":"BreadcrumbList","@id":"https:\/\/365solutionsjo.com\/ipad-service\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/365solutionsjo.com\/"},{"@type":"ListItem","position":2,"name":"iPad-Service"}]},{"@type":"WebSite","@id":"https:\/\/dso.azu.mybluehost.me\/#website","url":"https:\/\/dso.azu.mybluehost.me\/","name":"","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/dso.azu.mybluehost.me\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ar"}]}},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"trp-custom-language-flag":false},"uagb_author_info":{"display_name":"admin","author_link":"https:\/\/365solutionsjo.com\/ar\/author\/admin\/"},"uagb_comment_info":0,"uagb_excerpt":"iPad Service and Support Do you have any problems with your iPadScreen Problem, Power Problems, Sound Problems Liquid damage iPad Models Table + Step 2 Modal iPad Repair Models iPad (5th generation) Repair iPad (6th generation) Repair iPad (7th generation) Repair iPad (8th generation) Repair iPad (9th generation) Repair iPad Air (3rd generation) (Wi-Fi) Repair&hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/365solutionsjo.com\/ar\/wp-json\/wp\/v2\/pages\/1199","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/365solutionsjo.com\/ar\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/365solutionsjo.com\/ar\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/365solutionsjo.com\/ar\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/365solutionsjo.com\/ar\/wp-json\/wp\/v2\/comments?post=1199"}],"version-history":[{"count":52,"href":"https:\/\/365solutionsjo.com\/ar\/wp-json\/wp\/v2\/pages\/1199\/revisions"}],"predecessor-version":[{"id":2818,"href":"https:\/\/365solutionsjo.com\/ar\/wp-json\/wp\/v2\/pages\/1199\/revisions\/2818"}],"wp:attachment":[{"href":"https:\/\/365solutionsjo.com\/ar\/wp-json\/wp\/v2\/media?parent=1199"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}