{"id":170,"date":"2026-10-01T23:21:15","date_gmt":"2026-10-01T23:21:15","guid":{"rendered":"https:\/\/waggletrack.com\/?page_id=170"},"modified":"2026-10-02T00:19:40","modified_gmt":"2026-10-02T00:19:40","slug":"register","status":"publish","type":"page","link":"https:\/\/waggletrack.com\/index.php\/register\/","title":{"rendered":"Register"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"170\" class=\"elementor elementor-170\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c5aa481 e-flex e-con-boxed e-con e-parent\" data-id=\"c5aa481\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-11d4f40 elementor-widget elementor-widget-heading\" data-id=\"11d4f40\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<span class=\"elementor-heading-title elementor-size-default\">Be Proactive. Not Reactive.\n\n<\/span>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-35b9b34 elementor-widget elementor-widget-heading\" data-id=\"35b9b34\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Register Your Pet\n<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-15123f2 elementor-widget elementor-widget-text-editor\" data-id=\"15123f2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Don&#8217;t wait until your pet is lost. <strong>Be ready before it happens.<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1af54ec rg-heros e-flex e-con-boxed e-con e-parent\" data-id=\"1af54ec\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-35fe820 e-con-full e-flex e-con e-child\" data-id=\"35fe820\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;sticky&quot;:&quot;top&quot;,&quot;sticky_on&quot;:[&quot;desktop&quot;],&quot;sticky_offset&quot;:210,&quot;sticky_parent&quot;:&quot;yes&quot;,&quot;sticky_effects_offset&quot;:0,&quot;sticky_anchor_link_offset&quot;:0}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-be4bf27 elementor-widget elementor-widget-heading\" data-id=\"be4bf27\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Register before <\/br>you <span class=\"color-change\">need us<\/span>.\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-85db564 elementor-widget elementor-widget-text-editor\" data-id=\"85db564\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\tYou don&#8217;t register your pet because you expect them to go missing. You register because if they ever do, you&#8217;ll already be prepared.\n\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-79db1e9 framestart elementor-widget elementor-widget-image\" data-id=\"79db1e9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1856\" height=\"2304\" src=\"https:\/\/waggletrack.com\/wp-content\/uploads\/2026\/10\/Waggle-track-image-1.jpg.webp\" class=\"attachment-full size-full wp-image-226\" alt=\"\" srcset=\"https:\/\/waggletrack.com\/wp-content\/uploads\/2026\/10\/Waggle-track-image-1.jpg.webp 1856w, https:\/\/waggletrack.com\/wp-content\/uploads\/2026\/10\/Waggle-track-image-1.jpg-242x300.webp 242w, https:\/\/waggletrack.com\/wp-content\/uploads\/2026\/10\/Waggle-track-image-1.jpg-825x1024.webp 825w, https:\/\/waggletrack.com\/wp-content\/uploads\/2026\/10\/Waggle-track-image-1.jpg-768x953.webp 768w, https:\/\/waggletrack.com\/wp-content\/uploads\/2026\/10\/Waggle-track-image-1.jpg-1237x1536.webp 1237w, https:\/\/waggletrack.com\/wp-content\/uploads\/2026\/10\/Waggle-track-image-1.jpg-1650x2048.webp 1650w\" sizes=\"(max-width: 1856px) 100vw, 1856px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d32130b elementor-view-stacked elementor-shape-circle elementor-widget elementor-widget-icon\" data-id=\"d32130b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon elementor-animation-shrink\">\n\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-far-heart\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M458.4 64.3C400.6 15.7 311.3 23 256 79.3 200.7 23 111.4 15.6 53.6 64.3-21.6 127.6-10.6 230.8 43 285.5l175.4 178.7c10 10.2 23.4 15.9 37.6 15.9 14.3 0 27.6-5.6 37.6-15.8L469 285.6c53.5-54.7 64.7-157.9-10.6-221.3zm-23.6 187.5L259.4 430.5c-2.4 2.4-4.4 2.4-6.8 0L77.2 251.8c-36.5-37.2-43.9-107.6 7.3-150.7 38.9-32.7 98.9-27.8 136.5 10.5l35 35.7 35-35.7c37.8-38.5 97.8-43.2 136.5-10.6 51.1 43.1 43.5 113.9 7.3 150.8z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c5401ec e-con-full e-flex e-con e-child\" data-id=\"c5401ec\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8d10381 elementor-widget elementor-widget-html\" data-id=\"8d10381\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- ======================================================================\r\n     WaggleTrack pet registration form\r\n     Paste into a Custom HTML block or an Elementor HTML widget.\r\n     All classes are prefixed \"wtf-\" so nothing clashes with the theme.\r\n     ====================================================================== -->\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Jost:wght@400;500;600;700;800&family=Kaushan+Script&display=swap\" rel=\"stylesheet\">\r\n<style>\r\n.wtf{\r\n  --o:#FD8204; --o-deep:#E57400; --o-text:#B85C00;\r\n  --slate:#4D565D; --slate-deep:#3E454B; --yellow:#FFCC42;\r\n  --aqua:#00ACC6; --aqua-deep:#008CA2;\r\n  --fog:#F5F5F3; --mist:#FFF2E2; --ink:#4D565D; --ink-soft:#6E777E;\r\n  --line:rgba(77,86,93,.14); --line-2:rgba(77,86,93,.24);\r\n  --bad:#C8442A; --bad-text:#B03A22;\r\n  font-family:\"Jost\",system-ui,sans-serif; font-size:17px; line-height:1.6; color:var(--ink);\r\n  -webkit-font-smoothing:antialiased; max-width:760px; margin:0 auto;\r\n}\r\n.wtf *,.wtf *::before,.wtf *::after{box-sizing:border-box}\r\n.wtf [hidden]{display:none!important}\r\n.wtf-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}\r\n.wtf :focus-visible{outline:3px solid var(--aqua);outline-offset:3px}\r\n\r\n\/* ---- Card ---- *\/\r\n.wtf-card{position:relative;background:#fff;border-radius:3px;border-top:5px solid var(--o);padding:46px 40px 36px;box-shadow:0 30px 70px -36px rgba(62,69,75,.5)}\r\n.wtf-badge{position:absolute;top:-19px;left:40px;background:var(--yellow);color:var(--slate);font-weight:700;font-size:.8rem;letter-spacing:.06em;text-transform:uppercase;padding:8px 14px;border-radius:2px}\r\n.wtf-display{font-family:\"Jost\",system-ui,sans-serif;font-weight:700;line-height:1.12;letter-spacing:.01em;text-transform:uppercase;margin:0;color:var(--slate)}\r\n.wtf-script{font-family:\"Kaushan Script\",cursive;font-weight:400;text-transform:none;letter-spacing:0;color:var(--o)}\r\n.wtf-title{font-size:1.7rem;margin-bottom:4px}\r\n.wtf-lead{color:var(--ink-soft);margin:0 0 24px}\r\n\r\n\/* ---- Stepper ---- *\/\r\n.wtf-steps{list-style:none;margin:0 0 16px;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;counter-reset:s}\r\n.wtf-steps li{display:flex;flex-direction:column;gap:8px;font-weight:600;font-size:.86rem;color:var(--ink-soft);counter-increment:s;line-height:1.3}\r\n.wtf-steps li::before{content:counter(s);width:30px;height:30px;border-radius:50%;display:grid;place-items:center;border:1.5px solid var(--line-2);font-weight:700;font-size:.88rem;background:#fff;color:var(--ink-soft);transition:.2s}\r\n.wtf-steps li.on{color:var(--slate)}\r\n.wtf-steps li.on::before{background:var(--o);border-color:var(--o);color:#fff}\r\n.wtf-steps li.done::before{content:\"\";background:var(--o-text) url(\"data:image\/svg+xml;utf8,<svg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><path d='M20 6 9 17l-5-5'\/><\/svg>\") center\/15px no-repeat;border-color:var(--o-text)}\r\n.wtf-bar{height:6px;border-radius:6px;background:var(--line);overflow:hidden;margin-bottom:30px}\r\n.wtf-bar i{display:block;height:100%;width:33.33%;background:var(--o);border-radius:6px;transition:width .35s}\r\n\r\n\/* ---- Steps ---- *\/\r\n.wtf-step{border:0;margin:0;padding:0;min-width:0}\r\n.wtf-step-h{font-size:1.45rem;margin-bottom:6px}\r\n.wtf-sub{color:var(--ink-soft);margin:0 0 22px;font-size:1rem}\r\n.wtf-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px 16px}\r\n.wtf-full{grid-column:1\/-1}\r\n.wtf-group{grid-column:1\/-1;margin:10px 0 -2px;padding-top:20px;border-top:1px solid var(--line);font-weight:700;font-size:.82rem;letter-spacing:.08em;text-transform:uppercase;color:var(--o-text)}\r\n\r\n\/* ---- Fields ---- *\/\r\n.wtf-field{display:flex;flex-direction:column;gap:7px;min-width:0}\r\n.wtf-field label,.wtf-lbl{font-weight:600;font-size:.9rem;color:var(--slate);margin:0}\r\n.wtf-req{color:var(--o)}\r\n.wtf-opt{font-weight:500;color:var(--ink-soft)}\r\n.wtf-field input[type=text],.wtf-field input[type=email],.wtf-field input[type=tel],.wtf-field input[type=password],\r\n.wtf-field input[type=number],.wtf-field input[type=date],.wtf-field textarea{\r\n  width:100%;font-family:inherit;font-size:1rem;line-height:1.4;padding:13px 14px;border-radius:3px;border:1.5px solid var(--line-2);\r\n  background:#fff;color:var(--ink);transition:border-color .15s,box-shadow .15s;margin:0;-webkit-appearance:none;appearance:none}\r\n.wtf-field textarea{min-height:110px;resize:vertical}\r\n.wtf-field input::placeholder,.wtf-field textarea::placeholder{color:#A3AAAF}\r\n.wtf-field input:focus,.wtf-field textarea:focus{border-color:var(--o);box-shadow:0 0 0 4px rgba(253,130,4,.16);outline:none}\r\n.wtf-field.is-err input,.wtf-field.is-err textarea{border-color:var(--bad);box-shadow:0 0 0 4px rgba(200,68,42,.12)}\r\n.wtf-hint{font-size:.82rem;color:var(--ink-soft);margin:0}\r\n.wtf-err{display:none;color:var(--bad-text);font-size:.84rem;font-weight:600;margin:0}\r\n.wtf-field.is-err > .wtf-err{display:block}\r\n\r\n\/* chips (radio groups) *\/\r\n.wtf-chips{display:flex;flex-wrap:wrap;gap:9px}\r\n.wtf-chips label{cursor:pointer;font-weight:600;font-size:.9rem}\r\n.wtf-chips input{position:absolute;opacity:0;pointer-events:none}\r\n.wtf-chips span{display:inline-flex;align-items:center;padding:10px 18px;border-radius:100px;border:1.5px solid var(--line-2);background:#fff;color:var(--ink);transition:all .15s}\r\n.wtf-chips label:hover span{border-color:var(--o)}\r\n.wtf-chips input:checked + span{background:var(--o);border-color:var(--o);color:#fff}\r\n.wtf-chips input:focus-visible + span{outline:3px solid var(--aqua);outline-offset:2px}\r\n.wtf-field.is-err .wtf-chips span{border-color:var(--bad)}\r\n\r\n\/* weight + unit *\/\r\n.wtf-inline{display:flex;gap:10px;align-items:stretch}\r\n.wtf-inline input{flex:1;min-width:0}\r\n.wtf-unit{display:flex;border:1.5px solid var(--line-2);border-radius:3px;overflow:hidden;flex:none}\r\n.wtf-unit label{cursor:pointer;margin:0}\r\n.wtf-unit input{position:absolute;opacity:0;pointer-events:none}\r\n.wtf-unit span{display:grid;place-items:center;height:100%;padding:0 16px;font-weight:600;font-size:.92rem;color:var(--ink-soft);transition:.15s}\r\n.wtf-unit input:checked + span{background:var(--slate);color:#fff}\r\n.wtf-unit input:focus-visible + span{outline:3px solid var(--aqua);outline-offset:-3px}\r\n\r\n\/* licence reveal *\/\r\n.wtf-reveal{grid-column:1\/-1;display:grid;grid-template-columns:1fr 1fr;gap:16px;padding:20px;background:var(--fog);border-left:4px solid var(--yellow);border-radius:2px}\r\n\r\n\/* password *\/\r\n.wtf-pw{position:relative}\r\n.wtf-pw input{padding-right:64px!important}\r\n.wtf-pw button{position:absolute;right:6px;top:50%;transform:translateY(-50%);background:none;border:0;padding:8px 10px;font:inherit;font-size:.82rem;font-weight:700;color:var(--o-text);cursor:pointer;text-transform:lowercase}\r\n\r\n\/* ---- Photos ---- *\/\r\n.wtf-drop{position:relative;display:grid;place-items:center;gap:4px;text-align:center;padding:30px 20px;border:2px dashed var(--line-2);border-radius:4px;background:#fff;cursor:pointer;transition:border-color .15s,background .15s}\r\n.wtf-drop:hover,.wtf-drop:focus-within,.wtf-drop.over{border-color:var(--o);background:var(--mist)}\r\n.wtf-drop svg{width:34px;height:34px;color:var(--o);margin-bottom:6px}\r\n.wtf-drop strong{font-weight:700;color:var(--slate)}\r\n.wtf-drop small{color:var(--ink-soft);font-size:.84rem}\r\n.wtf-drop input{position:absolute;width:1px;height:1px;opacity:0}\r\n.wtf-field.is-err .wtf-drop{border-color:var(--bad)}\r\n.wtf-photos{list-style:none;margin:16px 0 0;padding:0;display:grid;gap:12px}\r\n.wtf-photo{display:grid;grid-template-columns:104px 1fr auto;gap:16px;align-items:start;padding:14px;background:var(--fog);border:1.5px solid transparent;border-radius:3px}\r\n.wtf-photo.is-err{border-color:var(--bad);background:#fff}\r\n.wtf-photo img{width:104px;height:104px;object-fit:cover;border-radius:2px;display:block;background:#fff}\r\n.wtf-photo-meta{display:flex;flex-direction:column;gap:7px;min-width:0}\r\n.wtf-photo-name{margin:0;font-size:.82rem;color:var(--ink-soft);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\r\n.wtf-photo-name b{color:var(--slate);text-transform:uppercase;letter-spacing:.04em;font-size:.78rem}\r\n.wtf-photo textarea{min-height:72px!important}\r\n.wtf-photo .wtf-err{display:none}\r\n.wtf-photo.is-err textarea{border-color:var(--bad)}\r\n#wtfPhotoField.is-err .wtf-photo:not(.is-err) textarea{border-color:var(--line-2);box-shadow:none}\r\n.wtf-photo.is-err .wtf-err{display:block}\r\n.wtf-x{width:34px;height:34px;border-radius:50%;border:0;background:#fff;color:var(--slate);display:grid;place-items:center;cursor:pointer;transition:.15s}\r\n.wtf-x:hover{background:var(--bad);color:#fff}\r\n.wtf-x svg{width:15px;height:15px}\r\n.wtf-count{margin:10px 0 0;font-size:.84rem;color:var(--ink-soft)}\r\n\r\n\/* ---- Notices ---- *\/\r\n.wtf-notice{display:flex;gap:12px;align-items:flex-start;padding:14px 16px;border-radius:3px;margin:0 0 22px;font-size:.95rem;font-weight:500}\r\n.wtf-notice svg{flex:none;width:20px;height:20px;margin-top:2px}\r\n.wtf-notice.bad{background:#FCEBE7;color:#8F2E19;border-left:4px solid var(--bad)}\r\n.wtf-notice.info{background:var(--mist);color:var(--o-text);border-left:4px solid var(--o)}\r\n\r\n\/* ---- Nav + buttons (squared, lowercase, chevron) ---- *\/\r\n.wtf-nav{display:flex;justify-content:space-between;align-items:center;gap:14px;margin-top:30px;padding-top:24px;border-top:1px solid var(--line);flex-wrap:wrap}\r\n.wtf-btn{display:inline-flex;align-items:center;gap:.55em;font-family:\"Jost\",system-ui,sans-serif;font-weight:600;font-size:1.02rem;padding:15px 24px;border-radius:2px;border:2px solid transparent;cursor:pointer;line-height:1;text-transform:lowercase;letter-spacing:.01em;background:var(--aqua);color:#fff;margin-left:auto;transition:background .18s,transform .18s}\r\n.wtf-btn::after{content:\"\";width:.42em;height:.42em;border-top:2px solid currentColor;border-right:2px solid currentColor;transform:rotate(45deg);flex:none}\r\n.wtf-btn:hover{background:var(--aqua-deep);transform:translateY(-1px)}\r\n.wtf-btn[disabled]{opacity:.7;cursor:wait;transform:none}\r\n.wtf-btn.busy::after{display:none}\r\n.wtf-spin{display:none;width:16px;height:16px;border-radius:50%;border:2.5px solid rgba(255,255,255,.45);border-top-color:#fff;animation:wtfspin .7s linear infinite}\r\n.wtf-btn.busy .wtf-spin{display:block}\r\n@keyframes wtfspin{to{transform:rotate(360deg)}}\r\n.wtf-back{background:none;border:0;padding:8px 2px;font:inherit;font-weight:700;color:var(--o-text);cursor:pointer;display:inline-flex;align-items:center;gap:6px;text-transform:lowercase}\r\n.wtf-back::before{content:\"\";width:.42em;height:.42em;border-bottom:2px solid currentColor;border-left:2px solid currentColor;transform:rotate(45deg)}\r\n.wtf-back:hover{text-decoration:underline}\r\n\r\n\/* ---- Done ---- *\/\r\n.wtf-done{text-align:center;padding:12px 0 4px}\r\n.wtf-tick{width:84px;height:84px;margin:0 auto 22px;border-radius:50%;background:var(--o);color:#fff;display:grid;place-items:center;box-shadow:0 0 0 10px var(--mist)}\r\n.wtf-tick svg{width:40px;height:40px}\r\n.wtf-done h2{font-size:clamp(1.6rem,3vw,2.1rem);margin-bottom:10px}\r\n.wtf-done p{color:var(--ink-soft);margin:0 auto;max-width:44ch}\r\n\r\n@media (max-width:640px){\r\n  .wtf-card{padding:40px 20px 28px}\r\n  .wtf-badge{left:20px}\r\n  .wtf-title{font-size:1.4rem}\r\n  .wtf-grid,.wtf-reveal{grid-template-columns:1fr}\r\n  .wtf-steps li{font-size:.76rem}\r\n  .wtf-photo{grid-template-columns:80px 1fr}\r\n  .wtf-photo img{width:80px;height:80px}\r\n  .wtf-photo .wtf-x{grid-column:2;grid-row:1;justify-self:end}\r\n  .wtf-photo .wtf-photo-meta{grid-column:1\/-1}\r\n  .wtf-btn{width:100%;justify-content:center}\r\n}\r\n<\/style>\r\n\r\n<div class=\"wtf\" id=\"wtf\">\r\n  <div class=\"wtf-card\">\r\n    <span class=\"wtf-badge\">Free registration<\/span>\r\n    <h2 class=\"wtf-display wtf-title\">Register your <span class=\"wtf-script\">pet<\/span><\/h2>\r\n    <p class=\"wtf-lead\">Three short steps. If they ever go missing, the search can start before you make the first call.<\/p>\r\n\r\n    <ol class=\"wtf-steps\" id=\"wtfSteps\" aria-label=\"Form steps\">\r\n      <li class=\"on\">Pet details<\/li>\r\n      <li>Photos<\/li>\r\n      <li>Your account<\/li>\r\n    <\/ol>\r\n    <div class=\"wtf-bar\" aria-hidden=\"true\"><i id=\"wtfBar\"><\/i><\/div>\r\n\r\n    <div class=\"wtf-notice bad\" id=\"wtfBanner\" role=\"alert\" hidden>\r\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 9v4M12 17h.01\"\/><path d=\"M10.3 3.9 2.4 18a2 2 0 0 0 1.7 3h15.8a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0Z\"\/><\/svg>\r\n      <div id=\"wtfBannerText\"><\/div>\r\n    <\/div>\r\n    <div class=\"wtf-notice info\" id=\"wtfSaved\" hidden>\r\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg>\r\n      <div id=\"wtfSavedText\"><\/div>\r\n    <\/div>\r\n\r\n    <form id=\"wtfForm\" novalidate>\r\n\r\n      <!-- ================= STEP 1: PET DETAILS ================= -->\r\n      <fieldset class=\"wtf-step\" data-step=\"0\">\r\n        <legend class=\"wtf-sr\">Pet details<\/legend>\r\n        <h3 class=\"wtf-display wtf-step-h\">Pet details<\/h3>\r\n        <p class=\"wtf-sub\">Step 1 of 3. Fields marked <b class=\"wtf-req\">*<\/b> are required.<\/p>\r\n\r\n        <div class=\"wtf-grid\">\r\n          <div class=\"wtf-field wtf-full\" data-radio=\"animal_type_pick\">\r\n            <span class=\"wtf-lbl\" id=\"wtfSpeciesL\">What kind of pet? <b class=\"wtf-req\">*<\/b><\/span>\r\n            <div class=\"wtf-chips\" role=\"radiogroup\" aria-labelledby=\"wtfSpeciesL\">\r\n              <label><input type=\"radio\" name=\"animal_type_pick\" value=\"Dog\" required><span>Dog<\/span><\/label>\r\n              <label><input type=\"radio\" name=\"animal_type_pick\" value=\"Cat\"><span>Cat<\/span><\/label>\r\n              <label><input type=\"radio\" name=\"animal_type_pick\" value=\"Rabbit\"><span>Rabbit<\/span><\/label>\r\n              <label><input type=\"radio\" name=\"animal_type_pick\" value=\"Bird\"><span>Bird<\/span><\/label>\r\n              <label><input type=\"radio\" name=\"animal_type_pick\" value=\"Other\"><span>Other<\/span><\/label>\r\n            <\/div>\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n          <div class=\"wtf-field wtf-full\" id=\"wtfSpeciesOther\" hidden>\r\n            <label for=\"wtf_animal_other\">Which animal? <b class=\"wtf-req\">*<\/b><\/label>\r\n            <input type=\"text\" id=\"wtf_animal_other\" name=\"animal_type_other\" required maxlength=\"60\" placeholder=\"e.g. Ferret\">\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n\r\n          <div class=\"wtf-field\">\r\n            <label for=\"wtf_pet_name\">Pet's name <b class=\"wtf-req\">*<\/b><\/label>\r\n            <input type=\"text\" id=\"wtf_pet_name\" name=\"pet_name\" required maxlength=\"100\" autocomplete=\"off\" placeholder=\"Milo\">\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n          <div class=\"wtf-field\">\r\n            <label for=\"wtf_breed\">Breed <b class=\"wtf-req\">*<\/b><\/label>\r\n            <input type=\"text\" id=\"wtf_breed\" name=\"breed\" required maxlength=\"100\" placeholder=\"e.g. Golden Retriever or Mixed\">\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n\r\n          <div class=\"wtf-field\">\r\n            <label for=\"wtf_dob\">Date of birth <b class=\"wtf-req\">*<\/b><\/label>\r\n            <input type=\"date\" id=\"wtf_dob\" name=\"dob\" required>\r\n            <p class=\"wtf-hint\">Approximate is fine.<\/p>\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n          <div class=\"wtf-field\">\r\n            <label for=\"wtf_weight\">Weight <b class=\"wtf-req\">*<\/b><\/label>\r\n            <div class=\"wtf-inline\">\r\n              <input type=\"number\" id=\"wtf_weight\" name=\"weight\" required min=\"0.1\" max=\"400\" step=\"0.1\" inputmode=\"decimal\" placeholder=\"32.5\">\r\n              <div class=\"wtf-unit\" role=\"radiogroup\" aria-label=\"Weight unit\">\r\n                <label><input type=\"radio\" name=\"weight_unit\" value=\"lb\" checked><span>lb<\/span><\/label>\r\n                <label><input type=\"radio\" name=\"weight_unit\" value=\"kg\"><span>kg<\/span><\/label>\r\n              <\/div>\r\n            <\/div>\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n\r\n          <div class=\"wtf-field\" data-radio=\"gender\">\r\n            <span class=\"wtf-lbl\" id=\"wtfSexL\">Sex <b class=\"wtf-req\">*<\/b><\/span>\r\n            <div class=\"wtf-chips\" role=\"radiogroup\" aria-labelledby=\"wtfSexL\">\r\n              <label><input type=\"radio\" name=\"gender\" value=\"Male\" required><span>Male<\/span><\/label>\r\n              <label><input type=\"radio\" name=\"gender\" value=\"Female\"><span>Female<\/span><\/label>\r\n            <\/div>\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n          <div class=\"wtf-field\" data-radio=\"spayed\">\r\n            <span class=\"wtf-lbl\" id=\"wtfSpayL\">Spayed or neutered <b class=\"wtf-req\">*<\/b><\/span>\r\n            <div class=\"wtf-chips\" role=\"radiogroup\" aria-labelledby=\"wtfSpayL\">\r\n              <label><input type=\"radio\" name=\"spayed\" value=\"Yes\" required><span>Yes<\/span><\/label>\r\n              <label><input type=\"radio\" name=\"spayed\" value=\"No\"><span>No<\/span><\/label>\r\n            <\/div>\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n\r\n          <div class=\"wtf-field\">\r\n            <label for=\"wtf_p_color\">Primary colour(s) <b class=\"wtf-req\">*<\/b><\/label>\r\n            <input type=\"text\" id=\"wtf_p_color\" name=\"p_color\" required maxlength=\"100\" placeholder=\"Golden, white chest\">\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n          <div class=\"wtf-field\">\r\n            <label for=\"wtf_coat_type\">Coat type <b class=\"wtf-req\">*<\/b><\/label>\r\n            <input type=\"text\" id=\"wtf_coat_type\" name=\"coat_type\" required maxlength=\"100\" placeholder=\"Short, long, curly, wire\">\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n\r\n          <p class=\"wtf-group\">Identification<\/p>\r\n\r\n          <div class=\"wtf-field wtf-full\">\r\n            <label for=\"wtf_microchip\">Microchip number <span class=\"wtf-opt\">(optional)<\/span><\/label>\r\n            <input type=\"text\" id=\"wtf_microchip\" name=\"microchip\" maxlength=\"20\" inputmode=\"numeric\" autocomplete=\"off\" placeholder=\"985141000123456\">\r\n            <p class=\"wtf-hint\">Printed on the chip certificate or vet records.<\/p>\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n          <div class=\"wtf-field wtf-full\" data-radio=\"pet_licence\">\r\n            <span class=\"wtf-lbl\" id=\"wtfLicL\">Is a pet licence or registration required where you live? <span class=\"wtf-opt\">(optional)<\/span><\/span>\r\n            <div class=\"wtf-chips\" role=\"radiogroup\" aria-labelledby=\"wtfLicL\">\r\n              <label><input type=\"radio\" name=\"pet_licence\" value=\"Yes\"><span>Yes<\/span><\/label>\r\n              <label><input type=\"radio\" name=\"pet_licence\" value=\"No\"><span>No<\/span><\/label>\r\n            <\/div>\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n          <div class=\"wtf-reveal\" id=\"wtfLicence\" hidden>\r\n            <div class=\"wtf-field\">\r\n              <label for=\"wtf_licence_authority\">Licensing authority <span class=\"wtf-opt\">(optional)<\/span><\/label>\r\n              <input type=\"text\" id=\"wtf_licence_authority\" name=\"licence_authority\" maxlength=\"150\" placeholder=\"City Animal Control\">\r\n              <p class=\"wtf-err\"><\/p>\r\n            <\/div>\r\n            <div class=\"wtf-field\">\r\n              <label for=\"wtf_licence_registration_number\">Licence number <span class=\"wtf-opt\">(optional)<\/span><\/label>\r\n              <input type=\"text\" id=\"wtf_licence_registration_number\" name=\"licence_registration_number\" maxlength=\"60\" placeholder=\"LIC-2026-001245\">\r\n              <p class=\"wtf-err\"><\/p>\r\n            <\/div>\r\n            <div class=\"wtf-field\">\r\n              <label for=\"wtf_licence_expiry\">Expiry date <span class=\"wtf-opt\">(optional)<\/span><\/label>\r\n              <input type=\"date\" id=\"wtf_licence_expiry\" name=\"licence_expiry\">\r\n              <p class=\"wtf-err\"><\/p>\r\n            <\/div>\r\n          <\/div>\r\n\r\n          <p class=\"wtf-group\">About them<\/p>\r\n\r\n          <div class=\"wtf-field wtf-full\">\r\n            <label for=\"wtf_description\">Describe your pet <b class=\"wtf-req\">*<\/b><\/label>\r\n            <textarea id=\"wtf_description\" name=\"description\" required maxlength=\"2000\" placeholder=\"Friendly and energetic family pet. Answers to 'Milo' or 'buddy'.\"><\/textarea>\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n          <div class=\"wtf-field wtf-full\">\r\n            <label for=\"wtf_behaviour\">Behaviour and distinguishing features <b class=\"wtf-req\">*<\/b><\/label>\r\n            <textarea id=\"wtf_behaviour\" name=\"behaviour\" required maxlength=\"2000\" placeholder=\"Scars, a short or long tail, habits, how they react to strangers or other animals.\"><\/textarea>\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n          <div class=\"wtf-field wtf-full\">\r\n            <label for=\"wtf_health\">Health and sensitivities <b class=\"wtf-req\">*<\/b><\/label>\r\n            <textarea id=\"wtf_health\" name=\"health\" required maxlength=\"2000\" placeholder=\"Medical or behavioural issues, and any sensitivity to food, environment or medication. Write None if there are none.\"><\/textarea>\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n        <\/div>\r\n      <\/fieldset>\r\n\r\n      <!-- ================= STEP 2: PHOTOS ================= -->\r\n      <fieldset class=\"wtf-step\" data-step=\"1\" hidden>\r\n        <legend class=\"wtf-sr\">Photos<\/legend>\r\n        <h3 class=\"wtf-display wtf-step-h\">Photos<\/h3>\r\n        <p class=\"wtf-sub\">Step 2 of 3. Add at least one clear photo, with a short description for each.<\/p>\r\n\r\n        <div class=\"wtf-field\" id=\"wtfPhotoField\">\r\n          <label class=\"wtf-drop\" id=\"wtfDrop\">\r\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 8h3l2-3h6l2 3h3a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1Z\"\/><circle cx=\"12\" cy=\"13.5\" r=\"3.5\"\/><\/svg>\r\n            <strong>Choose photos or drag them here<\/strong>\r\n            <small id=\"wtfDropHint\">JPG, PNG, WEBP or HEIC<\/small>\r\n            <input type=\"file\" id=\"wtfFiles\" accept=\"image\/jpeg,image\/png,image\/webp,image\/heic,image\/heif\" multiple>\r\n          <\/label>\r\n          <p class=\"wtf-err\"><\/p>\r\n          <ul class=\"wtf-photos\" id=\"wtfPhotos\"><\/ul>\r\n          <p class=\"wtf-count\" id=\"wtfCount\"><\/p>\r\n        <\/div>\r\n      <\/fieldset>\r\n\r\n      <!-- ================= STEP 3: ACCOUNT ================= -->\r\n      <fieldset class=\"wtf-step\" data-step=\"2\" hidden>\r\n        <legend class=\"wtf-sr\">Your account<\/legend>\r\n        <h3 class=\"wtf-display wtf-step-h\">Create your account<\/h3>\r\n        <p class=\"wtf-sub\">Step 3 of 3. This is how we reach you the moment your pet is found.<\/p>\r\n\r\n        <div class=\"wtf-grid\">\r\n          <div class=\"wtf-field\">\r\n            <label for=\"wtf_first_name\">First name <b class=\"wtf-req\">*<\/b><\/label>\r\n            <input type=\"text\" id=\"wtf_first_name\" name=\"first_name\" required maxlength=\"60\" autocomplete=\"given-name\">\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n          <div class=\"wtf-field\">\r\n            <label for=\"wtf_last_name\">Last name <b class=\"wtf-req\">*<\/b><\/label>\r\n            <input type=\"text\" id=\"wtf_last_name\" name=\"last_name\" required maxlength=\"60\" autocomplete=\"family-name\">\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n          <div class=\"wtf-field wtf-full\">\r\n            <label for=\"wtf_email\">Email <b class=\"wtf-req\">*<\/b><\/label>\r\n            <input type=\"email\" id=\"wtf_email\" name=\"email\" required maxlength=\"150\" autocomplete=\"email\">\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n          <div class=\"wtf-field\">\r\n            <label for=\"wtf_phone\">Mobile number <b class=\"wtf-req\">*<\/b><\/label>\r\n            <input type=\"tel\" id=\"wtf_phone\" name=\"phone_number\" required maxlength=\"25\" autocomplete=\"tel\">\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n          <div class=\"wtf-field\">\r\n            <label for=\"wtf_landline\">Landline <span class=\"wtf-opt\">(optional)<\/span><\/label>\r\n            <input type=\"tel\" id=\"wtf_landline\" name=\"phone_number_landline\" maxlength=\"25\" autocomplete=\"tel-national\">\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n          <div class=\"wtf-field\">\r\n            <label for=\"wtf_password\">Password <b class=\"wtf-req\">*<\/b><\/label>\r\n            <div class=\"wtf-pw\">\r\n              <input type=\"password\" id=\"wtf_password\" name=\"password\" required minlength=\"8\" autocomplete=\"new-password\">\r\n              <button type=\"button\" data-pw=\"wtf_password\">Show<\/button>\r\n            <\/div>\r\n            <p class=\"wtf-hint\">At least 8 characters.<\/p>\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n          <div class=\"wtf-field\">\r\n            <label for=\"wtf_confirm_password\">Confirm password <b class=\"wtf-req\">*<\/b><\/label>\r\n            <div class=\"wtf-pw\">\r\n              <input type=\"password\" id=\"wtf_confirm_password\" name=\"confirm_password\" required autocomplete=\"new-password\">\r\n              <button type=\"button\" data-pw=\"wtf_confirm_password\">Show<\/button>\r\n            <\/div>\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n\r\n          <p class=\"wtf-group\">Address<\/p>\r\n\r\n          <div class=\"wtf-field wtf-full\">\r\n            <label for=\"wtf_address\">Street address <b class=\"wtf-req\">*<\/b><\/label>\r\n            <input type=\"text\" id=\"wtf_address\" name=\"address\" required maxlength=\"200\" autocomplete=\"street-address\">\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n          <div class=\"wtf-field\">\r\n            <label for=\"wtf_city\">City <b class=\"wtf-req\">*<\/b><\/label>\r\n            <input type=\"text\" id=\"wtf_city\" name=\"city\" required maxlength=\"100\" autocomplete=\"address-level2\">\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n          <div class=\"wtf-field\">\r\n            <label for=\"wtf_state\">State or province <b class=\"wtf-req\">*<\/b><\/label>\r\n            <input type=\"text\" id=\"wtf_state\" name=\"state\" required maxlength=\"100\" autocomplete=\"address-level1\">\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n          <div class=\"wtf-field\">\r\n            <label for=\"wtf_post_code\">Postal or ZIP code <b class=\"wtf-req\">*<\/b><\/label>\r\n            <input type=\"text\" id=\"wtf_post_code\" name=\"post_code\" required maxlength=\"12\" autocomplete=\"postal-code\">\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n          <div class=\"wtf-field\">\r\n            <label for=\"wtf_country\">Country <b class=\"wtf-req\">*<\/b><\/label>\r\n            <input type=\"text\" id=\"wtf_country\" name=\"country\" required maxlength=\"100\" autocomplete=\"country-name\" list=\"wtfCountries\">\r\n            <datalist id=\"wtfCountries\"><option value=\"United States\"><option value=\"Canada\"><\/datalist>\r\n            <p class=\"wtf-err\"><\/p>\r\n          <\/div>\r\n        <\/div>\r\n      <\/fieldset>\r\n\r\n      <div class=\"wtf-nav\">\r\n        <button type=\"button\" class=\"wtf-back\" id=\"wtfBack\" hidden>Back<\/button>\r\n        <button type=\"submit\" class=\"wtf-btn\" id=\"wtfNext\"><i class=\"wtf-spin\" aria-hidden=\"true\"><\/i><span id=\"wtfNextLabel\">Continue<\/span><\/button>\r\n      <\/div>\r\n    <\/form>\r\n\r\n    <!-- ================= DONE ================= -->\r\n    <section class=\"wtf-done\" id=\"wtfDone\" hidden tabindex=\"-1\">\r\n      <div class=\"wtf-tick\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/div>\r\n      <h2 class=\"wtf-display\" id=\"wtfDoneTitle\">You're on the network.<\/h2>\r\n      <p>Your pet's profile is live and your account is set up. Check your email for your login details.<\/p>\r\n    <\/section>\r\n    <p class=\"wtf-sr\" aria-live=\"polite\" id=\"wtfLive\"><\/p>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n(function(){\r\n  'use strict';\r\n\r\n  \/* ===================== CONFIG ===================== *\/\r\n  var CONFIG = {\r\n    endpoints: {\r\n      pet:    'https:\/\/icetag.io\/api\/wt\/register\/pet',\r\n      images: 'https:\/\/icetag.io\/api\/wt\/pet\/images',\r\n      user:   'https:\/\/icetag.io\/api\/wt\/pet\/user'\r\n    },\r\n    \/\/ Local testing only. Leave empty on waggletrack.com, where requests are\r\n    \/\/ verified by domain. Never publish the real key in front-end code.\r\n    apiKey: '',\r\n    maxImages: 6,\r\n    maxImageMB: 10\r\n  };\r\n\r\n  \/* ===================== ELEMENTS + STATE ===================== *\/\r\n  var $ = function(id){ return document.getElementById(id); };\r\n  var root = $('wtf'), form = $('wtfForm');\r\n  var steps = form.querySelectorAll('.wtf-step'), rail = $('wtfSteps').children;\r\n  var back = $('wtfBack'), next = $('wtfNext'), nextLabel = $('wtfNextLabel');\r\n  var banner = $('wtfBanner'), saved = $('wtfSaved');\r\n  var state = { step: 0, petId: null, imagesDone: false, photos: [], uid: 0 };\r\n\r\n  $('wtf_dob').max = new Date().toISOString().slice(0, 10);\r\n  $('wtfDropHint').textContent = 'JPG, PNG, WEBP or HEIC. Up to ' + CONFIG.maxImageMB + 'MB each, ' + CONFIG.maxImages + ' photos max.';\r\n\r\n  \/* ===================== STEPS ===================== *\/\r\n  function go(i){\r\n    state.step = i;\r\n    steps.forEach(function(s, n){ s.hidden = n !== i; });\r\n    for (var n = 0; n < rail.length; n++){\r\n      rail[n].classList.toggle('on', n === i);\r\n      rail[n].classList.toggle('done', n < i);\r\n    }\r\n    $('wtfBar').style.width = ((i + 1) \/ 3 * 100) + '%';\r\n    back.hidden = i === 0;\r\n    nextLabel.textContent = i === 2 ? 'Create account' : 'Continue';\r\n    lockSaved();\r\n    hideBanner();\r\n    var h = steps[i].querySelector('h3');\r\n    if (h){ h.setAttribute('tabindex', '-1'); h.focus({ preventScroll: true }); }\r\n    root.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n  }\r\n\r\n  \/\/ Once a record exists on the server, edits here would not update it.\r\n  function lockSaved(){\r\n    steps[0].disabled = !!state.petId;\r\n    steps[1].disabled = state.imagesDone;\r\n    var msg = '';\r\n    if (state.step === 0 && state.petId) msg = 'Your pet\\'s details are already saved, so they can\\'t be changed here.';\r\n    if (state.step === 1 && state.imagesDone) msg = 'Your photos are already saved, so they can\\'t be changed here.';\r\n    saved.hidden = !msg; $('wtfSavedText').textContent = msg;\r\n  }\r\n\r\n  back.addEventListener('click', function(){ if (state.step > 0) go(state.step - 1); });\r\n\r\n  form.addEventListener('submit', function(e){\r\n    e.preventDefault();\r\n    if (next.disabled || !validate(state.step)) return;\r\n    if (state.step < 2) go(state.step + 1); else submitAll();\r\n  });\r\n\r\n  \/* ===================== VALIDATION ===================== *\/\r\n  function fieldOf(el){ return el.closest('.wtf-field'); }\r\n\r\n  function setErr(el, msg){\r\n    var f = el.classList && el.classList.contains('wtf-field') ? el : fieldOf(el);\r\n    if (!f) return;\r\n    f.classList.toggle('is-err', !!msg);\r\n    var p = f.querySelector(':scope > .wtf-err'); if (p) p.textContent = msg || '';\r\n  }\r\n\r\n  function validate(i){\r\n    var scope = steps[i];\r\n    if (scope.disabled) return true;\r\n    scope.querySelectorAll('.is-err').forEach(function(f){ f.classList.remove('is-err'); });\r\n    if (i === 1) return validatePhotos();\r\n    var first = null;\r\n    function fail(el, msg){ setErr(el, msg); if (!first) first = el; }\r\n\r\n    scope.querySelectorAll('input, textarea').forEach(function(el){\r\n      if (el.type === 'radio' || el.closest('[hidden]')) return;\r\n      var v = (el.value || '').trim();\r\n      var lab = fieldOf(el) && fieldOf(el).querySelector('label');\r\n      var name = lab ? lab.firstChild.textContent.trim() : 'This field';\r\n      if (el.required && !v) return fail(el, name + ' is required.');\r\n      if (!v) return;\r\n      if (el.type === 'email' && !\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$\/.test(v)) return fail(el, 'Enter a valid email address.');\r\n      if (el.type === 'number' && (isNaN(+v) || +v < +el.min || +v > +el.max)) return fail(el, 'Enter a weight between ' + el.min + ' and ' + el.max + '.');\r\n      if (el.name === 'dob' && v > el.max) return fail(el, 'Date of birth can\\'t be in the future.');\r\n      if (el.name === 'microchip' && !\/^[A-Za-z0-9]{9,15}$\/.test(v.replace(\/[\\s-]\/g, ''))) return fail(el, 'Microchip numbers are 9 to 15 letters or digits.');\r\n      if (\/^phone_number\/.test(el.name) && v.replace(\/\\D\/g, '').length < 7) return fail(el, 'Enter a valid phone number.');\r\n      if (el.name === 'password' && v.length < 8) return fail(el, 'Use at least 8 characters.');\r\n      if (el.name === 'confirm_password' && v !== form.elements.password.value) return fail(el, 'Passwords don\\'t match.');\r\n    });\r\n\r\n    scope.querySelectorAll('[data-radio]').forEach(function(f){\r\n      var n = f.getAttribute('data-radio');\r\n      if (f.querySelector('input[required]') && !form.querySelector('input[name=\"' + n + '\"]:checked')) fail(f, 'Choose an option.');\r\n    });\r\n\r\n    if (first){\r\n      var el = first.matches && first.matches('input,textarea') ? first : first.querySelector('input');\r\n      if (el) el.focus();\r\n      announce('Please fix the highlighted fields.');\r\n      return false;\r\n    }\r\n    return true;\r\n  }\r\n\r\n  form.addEventListener('input', function(e){\r\n    var f = fieldOf(e.target);\r\n    if (f && f.classList.contains('is-err') && f.id !== 'wtfPhotoField') setErr(f, '');\r\n  });\r\n  form.addEventListener('change', function(e){\r\n    if (e.target.type === 'radio'){ var f = fieldOf(e.target); if (f) setErr(f, ''); }\r\n    if (e.target.name === 'animal_type_pick') $('wtfSpeciesOther').hidden = e.target.value !== 'Other';\r\n    if (e.target.name === 'pet_licence') $('wtfLicence').hidden = e.target.value !== 'Yes';\r\n  });\r\n\r\n  \/* ===================== PHOTOS ===================== *\/\r\n  var drop = $('wtfDrop'), files = $('wtfFiles'), list = $('wtfPhotos');\r\n  var OK_TYPE = \/^image\\\/(jpeg|png|webp|heic|heif)$\/i, OK_EXT = \/\\.(jpe?g|png|webp|heic|heif)$\/i;\r\n\r\n  files.addEventListener('change', function(){ addFiles(files.files); files.value = ''; });\r\n  ['dragenter', 'dragover'].forEach(function(t){ drop.addEventListener(t, function(e){ e.preventDefault(); drop.classList.add('over'); }); });\r\n  ['dragleave', 'drop'].forEach(function(t){ drop.addEventListener(t, function(e){ e.preventDefault(); drop.classList.remove('over'); }); });\r\n  drop.addEventListener('drop', function(e){ if (!steps[1].disabled) addFiles(e.dataTransfer.files); });\r\n\r\n  function addFiles(fl){\r\n    var skipped = [];\r\n    Array.prototype.forEach.call(fl, function(file){\r\n      if (state.photos.length >= CONFIG.maxImages){ skipped.push(file.name + ' (limit of ' + CONFIG.maxImages + ')'); return; }\r\n      if (!OK_TYPE.test(file.type) && !OK_EXT.test(file.name)){ skipped.push(file.name + ' (not a supported image)'); return; }\r\n      if (file.size > CONFIG.maxImageMB * 1048576){ skipped.push(file.name + ' (over ' + CONFIG.maxImageMB + 'MB)'); return; }\r\n      state.photos.push({ id: ++state.uid, file: file, desc: '', url: URL.createObjectURL(file) });\r\n    });\r\n    renderPhotos();\r\n    setErr($('wtfPhotoField'), skipped.length ? 'Not added: ' + skipped.join(', ') + '.' : '');\r\n  }\r\n\r\n  function renderPhotos(){\r\n    list.innerHTML = '';\r\n    state.photos.forEach(function(p, i){\r\n      var li = document.createElement('li');\r\n      li.className = 'wtf-photo'; li.dataset.id = p.id;\r\n      li.innerHTML =\r\n        '<img alt=\"\">' +\r\n        '<div class=\"wtf-photo-meta\">' +\r\n          '<p class=\"wtf-photo-name\"><b>Photo ' + (i + 1) + '<\/b> &middot; <span><\/span><\/p>' +\r\n          '<div class=\"wtf-field\"><label class=\"wtf-sr\" for=\"wtf_desc_' + p.id + '\">Description for photo ' + (i + 1) + '<\/label>' +\r\n          '<textarea id=\"wtf_desc_' + p.id + '\" maxlength=\"300\" placeholder=\"e.g. Left side, showing the white patch on the chest\"><\/textarea><\/div>' +\r\n          '<p class=\"wtf-err\">Add a short description for this photo.<\/p>' +\r\n        '<\/div>' +\r\n        '<button type=\"button\" class=\"wtf-x\" aria-label=\"Remove photo ' + (i + 1) + '\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\"><path d=\"M6 6l12 12M18 6L6 18\"\/><\/svg><\/button>';\r\n      li.querySelector('img').src = p.url;\r\n      li.querySelector('.wtf-photo-name span').textContent = p.file.name + ' (' + size(p.file.size) + ')';\r\n      var ta = li.querySelector('textarea');\r\n      ta.value = p.desc;\r\n      ta.addEventListener('input', function(){ p.desc = ta.value; if (ta.value.trim()) li.classList.remove('is-err'); });\r\n      li.querySelector('.wtf-x').addEventListener('click', function(){\r\n        URL.revokeObjectURL(p.url);\r\n        state.photos = state.photos.filter(function(x){ return x.id !== p.id; });\r\n        renderPhotos();\r\n      });\r\n      list.appendChild(li);\r\n    });\r\n    var n = state.photos.length;\r\n    $('wtfCount').textContent = n ? n + ' of ' + CONFIG.maxImages + ' photos added' : '';\r\n    drop.hidden = n >= CONFIG.maxImages;\r\n  }\r\n\r\n  function validatePhotos(){\r\n    var pf = $('wtfPhotoField'), first = null;\r\n    setErr(pf, '');\r\n    if (!state.photos.length){ setErr(pf, 'Add at least one photo of your pet.'); files.focus(); return false; }\r\n    state.photos.forEach(function(p){\r\n      var li = list.querySelector('[data-id=\"' + p.id + '\"]'), empty = !p.desc.trim();\r\n      li.classList.toggle('is-err', empty);\r\n      if (empty && !first) first = li.querySelector('textarea');\r\n    });\r\n    if (first){ first.focus(); announce('Add a description for each photo.'); return false; }\r\n    return true;\r\n  }\r\n\r\n  function size(b){ return b > 1048576 ? (b \/ 1048576).toFixed(1) + 'MB' : Math.round(b \/ 1024) + 'KB'; }\r\n\r\n  \/* ===================== PASSWORD TOGGLE ===================== *\/\r\n  root.querySelectorAll('[data-pw]').forEach(function(btn){\r\n    btn.addEventListener('click', function(){\r\n      var input = $(btn.getAttribute('data-pw')), show = input.type === 'password';\r\n      input.type = show ? 'text' : 'password';\r\n      btn.textContent = show ? 'Hide' : 'Show';\r\n    });\r\n  });\r\n\r\n  \/* ===================== SUBMISSION =====================\r\n     The three calls run in order when the user clicks Create account.\r\n     Each finished call is remembered, so a retry picks up where it failed\r\n     and never creates a duplicate pet or re-uploads photos. *\/\r\n  function val(name){ var el = form.elements[name]; return el ? String(el.value || '').trim() : ''; }\r\n\r\n  function petPayload(){\r\n    var fd = new FormData();\r\n    ['pet_name', 'breed', 'gender', 'weight', 'weight_unit', 'dob', 'spayed', 'p_color', 'coat_type', 'description', 'behaviour', 'health']\r\n      .forEach(function(k){ fd.append(k, val(k)); });\r\n    fd.append('animal_type', val('animal_type_pick') === 'Other' ? val('animal_type_other') : val('animal_type_pick'));\r\n    if (val('microchip')) fd.append('microchip', val('microchip').replace(\/[\\s-]\/g, ''));\r\n    if (val('pet_licence')){\r\n      fd.append('pet_licence', val('pet_licence'));\r\n      if (val('pet_licence') === 'Yes'){\r\n        ['licence_authority', 'licence_expiry', 'licence_registration_number'].forEach(function(k){ if (val(k)) fd.append(k, val(k)); });\r\n      }\r\n    }\r\n    return fd;\r\n  }\r\n\r\n  function imagesPayload(){\r\n    var fd = new FormData();\r\n    fd.append('pet_id', state.petId);\r\n    state.photos.forEach(function(p, i){\r\n      fd.append('images[' + i + '][image]', p.file, p.file.name);\r\n      fd.append('images[' + i + '][desc]', p.desc.trim());\r\n    });\r\n    return fd;\r\n  }\r\n\r\n  function userPayload(){\r\n    var fd = new FormData();\r\n    fd.append('pet_id', state.petId);\r\n    ['first_name', 'last_name', 'email', 'phone_number', 'country', 'state', 'city', 'address', 'post_code']\r\n      .forEach(function(k){ fd.append(k, val(k)); });\r\n    if (val('phone_number_landline')) fd.append('phone_number_landline', val('phone_number_landline'));\r\n    fd.append('password', form.elements.password.value);\r\n    fd.append('confirm_password', form.elements.confirm_password.value);\r\n    return fd;\r\n  }\r\n\r\n  \/\/ FormData with no custom headers keeps these as simple cross-origin\r\n  \/\/ requests, so the browser skips the CORS preflight.\r\n  function post(url, body){\r\n    var headers = { 'Accept': 'application\/json' };\r\n    if (CONFIG.apiKey) headers['x-api-key'] = CONFIG.apiKey;\r\n    return fetch(url, { method: 'POST', headers: headers, body: body })\r\n      .catch(function(){ throw { network: true }; })\r\n      .then(function(res){\r\n        return res.text().then(function(txt){\r\n          var json = {}; try { json = txt ? JSON.parse(txt) : {}; } catch (e) {}\r\n          if (!res.ok || json.success === false) throw { status: res.status, message: json.message, errors: json.errors || (json.data && json.data.errors) };\r\n          return json;\r\n        });\r\n      });\r\n  }\r\n\r\n  \/\/ register\/pet returns { success, message, data: [ { id, ... } ] }\r\n  function extractId(r){\r\n    var d = r && r.data;\r\n    if (Array.isArray(d)) d = d[0];\r\n    var c = [d && d.id, d && d.pet_id, r && r.id, r && r.pet_id];\r\n    for (var i = 0; i < c.length; i++) if (c[i] !== undefined && c[i] !== null && c[i] !== '') return c[i];\r\n    return null;\r\n  }\r\n\r\n  function submitAll(){\r\n    busy(true, 'Saving your pet');\r\n    hideBanner();\r\n    var chain = Promise.resolve();\r\n    if (!state.petId){\r\n      chain = chain.then(function(){ return post(CONFIG.endpoints.pet, petPayload()); })\r\n        .then(function(r){\r\n          state.petId = extractId(r);\r\n          if (!state.petId) throw { message: 'Your pet was saved, but we didn\\'t get a record number back, so the photos can\\'t be attached. Please contact us.' };\r\n        });\r\n    }\r\n    if (!state.imagesDone){\r\n      chain = chain.then(function(){ busy(true, 'Uploading photos'); return post(CONFIG.endpoints.images, imagesPayload()); })\r\n        .then(function(){ state.imagesDone = true; });\r\n    }\r\n    chain.then(function(){ busy(true, 'Creating your account'); return post(CONFIG.endpoints.user, userPayload()); })\r\n      .then(done)\r\n      .catch(fail);\r\n  }\r\n\r\n  function done(){\r\n    busy(false);\r\n    form.hidden = true; saved.hidden = true; hideBanner();\r\n    for (var n = 0; n < rail.length; n++){ rail[n].classList.remove('on'); rail[n].classList.add('done'); }\r\n    $('wtfBar').style.width = '100%';\r\n    $('wtfDoneTitle').textContent = val('pet_name') + ' is on the network.';\r\n    $('wtfDone').hidden = false; $('wtfDone').focus();\r\n    state.photos.forEach(function(p){ URL.revokeObjectURL(p.url); });\r\n  }\r\n\r\n  function fail(err){\r\n    busy(false);\r\n    err = err || {};\r\n    if (err.network){ showBanner('We couldn\\'t reach the registration service. Check your connection and try again.'); return; }\r\n\r\n    var target = -1;\r\n    if (err.errors && typeof err.errors === 'object'){\r\n      Object.keys(err.errors).forEach(function(key){\r\n        var msg = [].concat(err.errors[key])[0];\r\n        var m = key.match(\/^images\\.(\\d+)\\.\/);\r\n        if (m){\r\n          var p = state.photos[+m[1]], li = p && list.querySelector('[data-id=\"' + p.id + '\"]');\r\n          if (li){ li.classList.add('is-err'); li.querySelector('.wtf-photo-meta > .wtf-err').textContent = msg; }\r\n          if (target < 0 || target > 1) target = 1; return;\r\n        }\r\n        if (\/^images\/.test(key)){ setErr($('wtfPhotoField'), msg); if (target < 0 || target > 1) target = 1; return; }\r\n        var el = form.querySelector('[name=\"' + (key === 'animal_type' ? 'animal_type_pick' : key) + '\"]');\r\n        if (!el) return;\r\n        setErr(el, msg);\r\n        var s = +el.closest('.wtf-step').getAttribute('data-step');\r\n        if (target < 0 || s < target) target = s;\r\n      });\r\n    }\r\n\r\n    var text = err.message || (err.status >= 500 ? 'Something went wrong on our side. Please try again in a moment.' : 'We couldn\\'t complete your registration. Please check your details and try again.');\r\n    var locked = (target === 0 && state.petId) || (target === 1 && state.imagesDone);\r\n    if (target >= 0 && target !== state.step && !locked) go(target);\r\n    showBanner(text);\r\n  }\r\n\r\n  function busy(on, label){\r\n    next.disabled = on; back.disabled = on;\r\n    next.classList.toggle('busy', on);\r\n    nextLabel.textContent = on ? label + '\u2026' : (state.step === 2 ? 'Create account' : 'Continue');\r\n    if (on) announce(label);\r\n  }\r\n  function showBanner(t){ $('wtfBannerText').textContent = t; banner.hidden = false; banner.scrollIntoView({ behavior: 'smooth', block: 'center' }); }\r\n  function hideBanner(){ banner.hidden = true; }\r\n  function announce(t){ $('wtfLive').textContent = t; }\r\n})();\r\n<\/script>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5483831 e-flex e-con-boxed e-con e-parent\" data-id=\"5483831\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-1870f1d e-con-full e-flex e-con e-child\" data-id=\"1870f1d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-f5a1bb8 e-grid e-con-boxed e-con e-child\" data-id=\"f5a1bb8\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-a2b540a e-con-full act e-flex e-con e-child\" data-id=\"a2b540a\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-a6cacc3 e-con-full e-flex e-con e-child\" data-id=\"a6cacc3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ad4841d elementor-view-stacked elementor-shape-circle elementor-widget elementor-widget-icon\" data-id=\"ad4841d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fab-searchengin\" viewBox=\"0 0 460 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M220.6 130.3l-67.2 28.2V43.2L98.7 233.5l54.7-24.2v130.3l67.2-209.3zm-83.2-96.7l-1.3 4.7-15.2 52.9C80.6 106.7 52 145.8 52 191.5c0 52.3 34.3 95.9 83.4 105.5v53.6C57.5 340.1 0 272.4 0 191.6c0-80.5 59.8-147.2 137.4-158zm311.4 447.2c-11.2 11.2-23.1 12.3-28.6 10.5-5.4-1.8-27.1-19.9-60.4-44.4-33.3-24.6-33.6-35.7-43-56.7-9.4-20.9-30.4-42.6-57.5-52.4l-9.7-14.7c-24.7 16.9-53 26.9-81.3 28.7l2.1-6.6 15.9-49.5c46.5-11.9 80.9-54 80.9-104.2 0-54.5-38.4-102.1-96-107.1V32.3C254.4 37.4 320 106.8 320 191.6c0 33.6-11.2 64.7-29 90.4l14.6 9.6c9.8 27.1 31.5 48 52.4 57.4s32.2 9.7 56.8 43c24.6 33.2 42.7 54.9 44.5 60.3s.7 17.3-10.5 28.5zm-9.9-17.9c0-4.4-3.6-8-8-8s-8 3.6-8 8 3.6 8 8 8 8-3.6 8-8z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c63de03 elementor-view-stacked elementor-shape-circle elementor-widget elementor-widget-icon\" data-id=\"c63de03\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-long-arrow-alt-right\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ec70e78 elementor-widget elementor-widget-heading\" data-id=\"ec70e78\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Found a <\/br>pet?<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-72c1026 e-con-full act e-flex e-con e-child\" data-id=\"72c1026\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-e845831 e-con-full e-flex e-con e-child\" data-id=\"e845831\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ceddeb2 elementor-view-stacked elementor-shape-circle elementor-widget elementor-widget-icon\" data-id=\"ceddeb2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-map-marker-alt\" viewBox=\"0 0 384 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-52ba316 elementor-view-stacked elementor-shape-circle elementor-widget elementor-widget-icon\" data-id=\"52ba316\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-long-arrow-alt-right\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dc4cc30 elementor-widget elementor-widget-heading\" data-id=\"dc4cc30\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Lost a <\/br>pet?<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Be Proactive. Not Reactive. Register Your Pet Don&#8217;t wait until your pet is lost. Be ready before it happens. Register before you need us. You don&#8217;t register your pet because you expect them to go missing. You register because if they ever do, you&#8217;ll already be prepared. Free registration Register your pet Three short steps. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-170","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/waggletrack.com\/index.php\/wp-json\/wp\/v2\/pages\/170","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/waggletrack.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/waggletrack.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/waggletrack.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/waggletrack.com\/index.php\/wp-json\/wp\/v2\/comments?post=170"}],"version-history":[{"count":13,"href":"https:\/\/waggletrack.com\/index.php\/wp-json\/wp\/v2\/pages\/170\/revisions"}],"predecessor-version":[{"id":235,"href":"https:\/\/waggletrack.com\/index.php\/wp-json\/wp\/v2\/pages\/170\/revisions\/235"}],"wp:attachment":[{"href":"https:\/\/waggletrack.com\/index.php\/wp-json\/wp\/v2\/media?parent=170"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}