
{"id":11527,"date":"2026-10-26T18:58:21","date_gmt":"2026-10-26T18:58:21","guid":{"rendered":"https:\/\/cargoflux.com\/?page_id=11527"},"modified":"2026-10-26T18:58:21","modified_gmt":"2026-10-26T18:58:21","slug":"sendung-verfolgen","status":"publish","type":"page","link":"https:\/\/cargoflux.com\/de\/sendung-verfolgen\/","title":{"rendered":"Sendung verfolgen"},"content":{"rendered":"\n<!--\n  Cargoflux public tracking page: self-contained block (CAR-476, endpoint CAR-2615)\n  Paste into a WordPress \"Custom HTML\" block on the Danish, English and German pages (WPML).\n  The language is taken from <html lang=\"...\">, so the same block works on all three.\n  The font comes from the site theme (font-family: inherit). The page title comes from the\n  theme's own page heading, so this block does not repeat it on the search screen.\n\n  CONFIG (top of the script):\n    endpoint          - public tracking endpoint (CAR-2615)\n    turnstileSiteKey  - bot-check site key. Empty = no bot check on the page.\n-->\n<div id=\"cfx-tracking\" class=\"cfx-track\">\n<style>\n#cfx-tracking{--cfx-accent:#33e6ce;--cfx-on-accent:#172537;--cfx-card:#1E3147;--cfx-line:#2F475F;--cfx-muted:#AEBBCB;--cfx-input-bg:#142131;--cfx-input-border:#7690AA;--cfx-future:#6E849B;--cfx-future-line:#3A5570;--cfx-amber:#FFC857;color:#fff;font-family:inherit;line-height:1.5;padding:48px 0}\n#cfx-tracking *{box-sizing:border-box}\n#cfx-tracking .cfx-wrap{max-width:760px;margin:0;display:flex;flex-direction:column;gap:32px}\n#cfx-tracking [hidden]{display:none!important}\n#cfx-tracking .cfx-title{margin:0;font-size:clamp(30px,5vw,42px);line-height:1.15;font-weight:700;letter-spacing:-0.02em;color:#fff}\n#cfx-tracking .cfx-intro{margin:0;font-size:18px;line-height:1.55;color:var(--cfx-muted);max-width:640px}\n#cfx-tracking .cfx-privacy{margin:0;font-size:14px;line-height:1.5;color:var(--cfx-muted);max-width:640px}\n#cfx-tracking .cfx-card{background:var(--cfx-card);border:1px solid var(--cfx-line);border-radius:14px;padding:32px;display:flex;flex-direction:column;gap:24px}\n#cfx-tracking .cfx-form{max-width:640px}\n#cfx-tracking .cfx-field{display:flex;flex-direction:column;gap:8px}\n#cfx-tracking .cfx-label{font-size:15px;font-weight:500;color:#fff}\n#cfx-tracking .cfx-input{height:52px;width:100%;padding:0 16px;font-size:17px;font-family:inherit;color:#fff;background:var(--cfx-input-bg);border:1.5px solid var(--cfx-input-border);border-radius:6px;box-shadow:none;margin:0}\n#cfx-tracking .cfx-input::placeholder{color:#8DA0B4;opacity:1}\n#cfx-tracking .cfx-btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:52px;padding:0 24px;border:0;border-radius:6px;background:var(--cfx-accent);color:var(--cfx-on-accent);font-family:inherit;font-size:17px;font-weight:700;text-decoration:none;cursor:pointer;box-shadow:none}\n#cfx-tracking .cfx-btn[disabled]{opacity:.6;cursor:progress}\n#cfx-tracking .cfx-btn--ghost{background:transparent;color:#fff;border:1.5px solid var(--cfx-input-border);font-weight:500;min-height:48px;font-size:16px}\n#cfx-tracking .cfx-btn--link{min-height:48px;font-size:16px}\n#cfx-tracking .cfx-input:focus-visible,#cfx-tracking .cfx-btn:focus-visible,#cfx-tracking .cfx-title:focus-visible{outline:3px solid var(--cfx-accent);outline-offset:2px}\n#cfx-tracking .cfx-alert{max-width:640px;display:flex;align-items:flex-start;gap:14px;padding:18px 20px;border-radius:10px;background:#4A1D26;border:1px solid #C75C6C;color:#FFE3E7}\n#cfx-tracking .cfx-alert p{margin:0;font-size:16px;line-height:1.5}\n#cfx-tracking .cfx-alert svg{flex:none;margin-top:2px}\n#cfx-tracking .cfx-result{display:flex;flex-direction:column;gap:32px}\n#cfx-tracking .cfx-result .cfx-card{gap:32px;padding:36px}\n#cfx-tracking .cfx-head{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}\n#cfx-tracking .cfx-muted{font-size:14px;color:var(--cfx-muted);display:block}\n#cfx-tracking .cfx-strong{font-size:20px;font-weight:700;display:block;word-break:break-word}\n#cfx-tracking .cfx-pill{padding:8px 16px;border-radius:999px;background:#123F4A;color:var(--cfx-accent);font-size:16px;font-weight:700}\n#cfx-tracking .cfx-pill--delayed{background:#4A3410;color:var(--cfx-amber)}\n#cfx-tracking .cfx-steps{list-style:none;margin:0;padding:0;display:flex;align-items:flex-start}\n#cfx-tracking .cfx-step{flex:1;display:flex;flex-direction:column;align-items:center;gap:10px;margin:0;padding:0}\n#cfx-tracking .cfx-track-row{width:100%;display:flex;align-items:center}\n#cfx-tracking .cfx-line{flex:1;height:3px;background:transparent}\n#cfx-tracking .cfx-line--on{background:var(--cfx-accent)}\n#cfx-tracking .cfx-line--off{background:var(--cfx-future-line)}\n#cfx-tracking .cfx-node{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex:none}\n#cfx-tracking .cfx-node--done{background:var(--cfx-accent)}\n#cfx-tracking .cfx-node--current{background:var(--cfx-card);border:4px solid var(--cfx-accent)}\n#cfx-tracking .cfx-node--current i{width:10px;height:10px;border-radius:50%;background:var(--cfx-accent);display:block}\n#cfx-tracking .cfx-node--delayed{background:var(--cfx-card);border:4px solid var(--cfx-amber)}\n#cfx-tracking .cfx-node--future{border:3px solid var(--cfx-future)}\n#cfx-tracking .cfx-step-label{font-size:15px;font-weight:500;text-align:center}\n#cfx-tracking .cfx-step--current .cfx-step-label{font-weight:700}\n#cfx-tracking .cfx-step--future .cfx-step-label{color:var(--cfx-muted)}\n#cfx-tracking .cfx-step--delayed .cfx-step-label{font-weight:700;color:var(--cfx-amber)}\n#cfx-tracking .cfx-note{display:flex;align-items:flex-start;gap:14px;padding:18px 20px;border-radius:10px;background:#3A2A12;border:1px solid #B9852D;color:#FFE9BF}\n#cfx-tracking .cfx-note p{margin:0;font-size:16px;line-height:1.5}\n#cfx-tracking .cfx-note svg{flex:none;margin-top:2px}\n#cfx-tracking .cfx-divider{height:1px;background:var(--cfx-line);border:0;margin:0}\n#cfx-tracking .cfx-route{display:flex;align-items:center;gap:24px}\n#cfx-tracking .cfx-place{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}\n#cfx-tracking .cfx-city{font-size:26px;font-weight:700;line-height:1.2;word-break:break-word}\n#cfx-tracking .cfx-country{font-size:16px;color:var(--cfx-muted)}\n#cfx-tracking .cfx-arrow{flex:none}\n#cfx-tracking .cfx-dates{display:flex;gap:24px}\n#cfx-tracking .cfx-date{flex:1;display:flex;flex-direction:column;gap:4px}\n#cfx-tracking .cfx-date strong{font-size:18px;font-weight:500}\n#cfx-tracking .cfx-actions{display:flex;align-items:center;gap:16px;flex-wrap:wrap}\n@media (max-width:600px){\n  #cfx-tracking{padding:32px 0}\n  #cfx-tracking .cfx-card,#cfx-tracking .cfx-result .cfx-card{padding:22px}\n  #cfx-tracking .cfx-route{flex-direction:column;align-items:flex-start;gap:16px}\n  #cfx-tracking .cfx-arrow{transform:rotate(90deg)}\n  #cfx-tracking .cfx-dates{flex-direction:column;gap:16px}\n  #cfx-tracking .cfx-step-label{font-size:13px}\n  #cfx-tracking .cfx-btn,#cfx-tracking .cfx-btn--link,#cfx-tracking .cfx-btn--ghost{width:100%}\n}\n<\/style>\n\n<div class=\"cfx-wrap\">\n  <section class=\"cfx-search\">\n    <div>\n      <p class=\"cfx-intro\" data-i18n=\"intro\"><\/p>\n    <\/div>\n    <div class=\"cfx-alert\" role=\"alert\" id=\"cfx-alert\" hidden style=\"margin-top:32px\">\n      <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#FFD3D9\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"9.5\"\/><path d=\"M12 7.5V13M12 16.5h.01\"\/><\/svg>\n      <p id=\"cfx-alert-text\"><\/p>\n    <\/div>\n    <form class=\"cfx-card cfx-form\" id=\"cfx-form\" style=\"margin-top:32px\">\n      <div class=\"cfx-field\">\n        <label class=\"cfx-label\" for=\"cfx-ref\" data-i18n=\"fieldRef\"><\/label>\n        <input class=\"cfx-input\" id=\"cfx-ref\" name=\"reference\" type=\"text\" required maxlength=\"40\" autocomplete=\"off\" autocapitalize=\"characters\" spellcheck=\"false\" data-i18n-placeholder=\"phRef\">\n      <\/div>\n      <div class=\"cfx-field\">\n        <label class=\"cfx-label\" for=\"cfx-zip\" data-i18n=\"fieldZip\"><\/label>\n        <input class=\"cfx-input\" id=\"cfx-zip\" name=\"postcode\" type=\"text\" required maxlength=\"12\" autocomplete=\"off\" autocapitalize=\"characters\" spellcheck=\"false\" data-i18n-placeholder=\"phZip\">\n      <\/div>\n      <div id=\"cfx-turnstile\"><\/div>\n      <button class=\"cfx-btn\" id=\"cfx-submit\" type=\"submit\" data-i18n=\"button\"><\/button>\n    <\/form>\n    <p class=\"cfx-privacy\" data-i18n=\"privacy\" style=\"margin-top:32px\"><\/p>\n  <\/section>\n\n  <section class=\"cfx-result\" id=\"cfx-result\" aria-live=\"polite\" hidden><\/section>\n<\/div>\n\n<script>\n(function () {\n  'use strict';\n\n  \/* ===== CONFIG: set these before launch ===== *\/\n  var CONFIG = {\n    endpoint: 'https:\/\/api.cargoflux.com\/api\/v1\/public\/tracking', \/\/ TO BE CONFIRMED with the endpoint from CAR-2615\n    turnstileSiteKey: '',                                         \/\/ Cloudflare Turnstile site key (required before launch)\n    timeoutMs: 10000\n  };\n\n  \/* ===== TEXTS (Danish, English, German) ===== *\/\n  var I18N = {\n    da: {\n      locale: 'da-DK',\n      title: 'Track din forsendelse',\n      intro: 'Indtast dit Cargoflux ID eller transport\u00f8rens AWB-nummer sammen med modtagerens postnummer.',\n      fieldRef: 'Cargoflux ID eller AWB',\n      fieldZip: 'Modtagers postnummer',\n      phRef: 'fx 3-1-1163',\n      phZip: 'fx 2300',\n      button: 'Track forsendelse',\n      privacy: 'Af hensyn til privatlivet viser vi kun afsenders og modtagers by og land.',\n      resultTitle: 'Din forsendelse',\n      carrierLabel: 'Transport\u00f8r og AWB',\n      confirmed: 'Bekr\u00e6ftet', booked: 'Booket', in_transit: 'Undervejs', delivered: 'Leveret', delayed: 'Forsinket',\n      from: 'Fra', to: 'Til', shipped: 'Afsendt', eta: 'Forventet levering',\n      trackLive: 'F\u00f8lg live hos {carrier}',\n      another: 'Track en anden forsendelse',\n      delayedNote: 'Der er en forsinkelse eller et problem med denne forsendelse. Kontakt afsenderen eller transport\u00f8ren for at f\u00e5 flere oplysninger.',\n      notFound: 'Vi kunne ikke finde en forsendelse, der matcher disse oplysninger. Tjek nummeret og postnummeret, og pr\u00f8v igen.',\n      rateLimit: 'For mange fors\u00f8g. Vent et \u00f8jeblik, og pr\u00f8v igen.',\n      error: 'Noget gik galt. Pr\u00f8v igen senere.'\n    },\n    en: {\n      locale: 'en-GB',\n      title: 'Track your shipment',\n      intro: 'Enter your Cargoflux ID or the carrier\u2019s AWB number, together with the recipient\u2019s postcode.',\n      fieldRef: 'Cargoflux ID or AWB',\n      fieldZip: 'Recipient postcode',\n      phRef: 'e.g. 3-1-1163',\n      phZip: 'e.g. 2300',\n      button: 'Track shipment',\n      privacy: 'For privacy, we only show the sender\u2019s and recipient\u2019s city and country.',\n      resultTitle: 'Your shipment',\n      carrierLabel: 'Carrier and AWB',\n      confirmed: 'Confirmed', booked: 'Booked', in_transit: 'In transit', delivered: 'Delivered', delayed: 'Delayed',\n      from: 'From', to: 'To', shipped: 'Shipped', eta: 'Estimated arrival',\n      trackLive: 'Track live with {carrier}',\n      another: 'Track another shipment',\n      delayedNote: 'There is a delay or issue with this shipment. Please contact the sender or the carrier for details.',\n      notFound: 'We couldn\u2019t find a shipment matching these details. Please check the number and the postcode and try again.',\n      rateLimit: 'Too many attempts. Please wait a moment and try again.',\n      error: 'Something went wrong. Please try again later.'\n    },\n    de: {\n      locale: 'de-DE',\n      title: 'Sendung verfolgen',\n      intro: 'Geben Sie Ihre Cargoflux-ID oder die AWB-Nummer des Carriers zusammen mit der Postleitzahl des Empf\u00e4ngers ein.',\n      fieldRef: 'Cargoflux-ID oder AWB',\n      fieldZip: 'Postleitzahl des Empf\u00e4ngers',\n      phRef: 'z. B. 3-1-1163',\n      phZip: 'z. B. 2300',\n      button: 'Sendung verfolgen',\n      privacy: 'Aus Datenschutzgr\u00fcnden zeigen wir nur Stadt und Land von Absender und Empf\u00e4nger.',\n      resultTitle: 'Ihre Sendung',\n      carrierLabel: 'Carrier und AWB',\n      confirmed: 'Best\u00e4tigt', booked: 'Gebucht', in_transit: 'Unterwegs', delivered: 'Zugestellt', delayed: 'Verz\u00f6gert',\n      from: 'Von', to: 'Nach', shipped: 'Versendet', eta: 'Voraussichtliche Zustellung',\n      trackLive: 'Live bei {carrier} verfolgen',\n      another: 'Weitere Sendung verfolgen',\n      delayedNote: 'Bei dieser Sendung gibt es eine Verz\u00f6gerung oder ein Problem. Bitte wenden Sie sich f\u00fcr Details an den Absender oder den Carrier.',\n      notFound: 'Wir konnten keine Sendung zu diesen Angaben finden. Bitte pr\u00fcfen Sie Nummer und Postleitzahl und versuchen Sie es erneut.',\n      rateLimit: 'Zu viele Versuche. Bitte warten Sie einen Moment und versuchen Sie es erneut.',\n      error: 'Etwas ist schiefgelaufen. Bitte versuchen Sie es sp\u00e4ter erneut.'\n    }\n  };\n\n  var root = document.getElementById('cfx-tracking');\n  var langCode = (document.documentElement.lang || 'en').slice(0, 2).toLowerCase();\n  var T = I18N[langCode] || I18N.en;\n  var STATUSES = ['confirmed', 'booked', 'in_transit', 'delivered', 'delayed'];\n  var STEP_ORDER = ['confirmed', 'booked', 'in_transit', 'delivered'];\n\n  var form = document.getElementById('cfx-form');\n  var refInput = document.getElementById('cfx-ref');\n  var zipInput = document.getElementById('cfx-zip');\n  var submitBtn = document.getElementById('cfx-submit');\n  var alertBox = document.getElementById('cfx-alert');\n  var alertText = document.getElementById('cfx-alert-text');\n  var searchSection = root.querySelector('.cfx-search');\n  var resultSection = document.getElementById('cfx-result');\n  var turnstileToken = '';\n  var turnstileWidgetId = null;\n\n  \/* ===== static texts ===== *\/\n  searchSection.setAttribute('aria-label', T.title);\n  root.querySelectorAll('[data-i18n]').forEach(function (n) { n.textContent = T[n.getAttribute('data-i18n')]; });\n  root.querySelectorAll('[data-i18n-placeholder]').forEach(function (n) { n.setAttribute('placeholder', T[n.getAttribute('data-i18n-placeholder')]); });\n\n  \/* ===== helpers (all data is written with textContent, never innerHTML) ===== *\/\n  function el(tag, cls, text) {\n    var n = document.createElement(tag);\n    if (cls) n.className = cls;\n    if (text != null) n.textContent = text;\n    return n;\n  }\n  function svg(markup, w, h, cls) {\n    var wrap = document.createElement('span');\n    wrap.innerHTML = '<svg width=\"' + w + '\" height=\"' + h + '\" viewBox=\"0 0 24 24\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"' + (cls ? ' class=\"' + cls + '\"' : '') + '>' + markup + '<\/svg>';\n    return wrap.firstChild;\n  }\n  function countryName(code) {\n    if (!code) return '';\n    try { return new Intl.DisplayNames([T.locale], { type: 'region' }).of(String(code).toUpperCase()) || String(code); }\n    catch (e) { return String(code); }\n  }\n  function formatDate(iso) {\n    var m = \/^(\\d{4})-(\\d{2})-(\\d{2})\/.exec(iso || '');\n    if (!m) return '';\n    var d = new Date(Number(m[1]), Number(m[2]) - 1, Number(m[3]));\n    return d.toLocaleDateString(T.locale, { day: 'numeric', month: 'long', year: 'numeric' });\n  }\n  function safeUrl(u) {\n    try { var x = new URL(u); return x.protocol === 'https:' ? x.href : null; } catch (e) { return null; }\n  }\n  function showAlert(msg) { alertText.textContent = msg; alertBox.hidden = false; }\n  function hideAlert() { alertBox.hidden = true; alertText.textContent = ''; }\n\n  \/* ===== Turnstile (bot check) ===== *\/\n  function initTurnstile() {\n    if (!CONFIG.turnstileSiteKey) return;\n    var s = document.createElement('script');\n    s.src = 'https:\/\/challenges.cloudflare.com\/turnstile\/v0\/api.js?render=explicit';\n    s.async = true; s.defer = true;\n    s.onload = function () {\n      if (!window.turnstile) return;\n      turnstileWidgetId = window.turnstile.render('#cfx-turnstile', {\n        sitekey: CONFIG.turnstileSiteKey,\n        theme: 'dark',\n        language: langCode,\n        callback: function (t) { turnstileToken = t; },\n        'expired-callback': function () { turnstileToken = ''; },\n        'error-callback': function () { turnstileToken = ''; }\n      });\n    };\n    document.head.appendChild(s);\n  }\n  function resetTurnstile() {\n    turnstileToken = '';\n    if (window.turnstile && turnstileWidgetId !== null) { try { window.turnstile.reset(turnstileWidgetId); } catch (e) {} }\n  }\n\n  \/* ===== request to the public tracking endpoint ===== *\/\n  function lookup(reference, postcode) {\n    var ctrl = typeof AbortController !== 'undefined' ? new AbortController() : null;\n    var timer = ctrl ? setTimeout(function () { ctrl.abort(); }, CONFIG.timeoutMs) : null;\n    return fetch(CONFIG.endpoint, {\n      method: 'POST',\n      mode: 'cors',\n      credentials: 'omit',\n      headers: { 'Content-Type': 'application\/json', 'Accept': 'application\/json' },\n      body: JSON.stringify({ reference: reference, postcode: postcode, bot_check_token: turnstileToken }),\n      signal: ctrl ? ctrl.signal : undefined\n    }).then(function (res) {\n      if (timer) clearTimeout(timer);\n      if (res.status === 200) return res.json().then(function (b) { return { status: 200, body: b }; });\n      return { status: res.status, body: null };\n    });\n  }\n\n  \/* ===== rendering ===== *\/\n  var CHECK = '<path d=\"M5 12.5l4.5 4.5L19 7.5\" stroke=\"#172537\" stroke-width=\"3\"\/>';\n  var BANG = '<path d=\"M12 6v7M12 18h.01\" stroke=\"#FFC857\" stroke-width=\"3\"\/>';\n\n  function buildStep(i, idx, status) {\n    var key = STEP_ORDER[i];\n    var delayed = status === 'delayed' && i === idx;\n    var done = i < idx || (status === 'delivered' && i === idx);\n    var current = i === idx && !done && !delayed;\n    var kind = delayed ? 'delayed' : done ? 'done' : current ? 'current' : 'future';\n    var li = el('li', 'cfx-step cfx-step--' + kind);\n    if (i === idx) li.setAttribute('aria-current', 'step');\n    var row = el('div', 'cfx-track-row');\n    var left = el('div', 'cfx-line ' + (i === 0 ? '' : (i <= idx ? 'cfx-line--on' : 'cfx-line--off')));\n    var right = el('div', 'cfx-line ' + (i === STEP_ORDER.length - 1 ? '' : (i < idx ? 'cfx-line--on' : 'cfx-line--off')));\n    var node = el('div', 'cfx-node cfx-node--' + kind);\n    if (kind === 'done') node.appendChild(svg(CHECK, 18, 18));\n    else if (kind === 'current') node.appendChild(el('i'));\n    else if (kind === 'delayed') node.appendChild(svg(BANG, 16, 16));\n    row.appendChild(left); row.appendChild(node); row.appendChild(right);\n    li.appendChild(row);\n    li.appendChild(el('span', 'cfx-step-label', delayed ? T.delayed : T[key]));\n    return li;\n  }\n\n  function renderResult(d) {\n    var status = d.status;\n    var idx = status === 'delayed' ? 2 : STEP_ORDER.indexOf(status);\n    resultSection.replaceChildren();\n\n    var title = el('h2', 'cfx-title', T.resultTitle);\n    title.tabIndex = -1;\n    resultSection.appendChild(title);\n\n    var card = el('div', 'cfx-card');\n\n    var head = el('div', 'cfx-head');\n    var hl = el('div');\n    hl.appendChild(el('span', 'cfx-muted', T.carrierLabel));\n    hl.appendChild(el('span', 'cfx-strong', (d.carrier || '') + ' \u00b7 ' + (d.awb || '')));\n    head.appendChild(hl);\n    head.appendChild(el('span', 'cfx-pill' + (status === 'delayed' ? ' cfx-pill--delayed' : ''), status === 'delayed' ? T.delayed : T[status]));\n    card.appendChild(head);\n\n    var steps = el('ol', 'cfx-steps');\n    for (var i = 0; i < STEP_ORDER.length; i++) steps.appendChild(buildStep(i, idx, status));\n    card.appendChild(steps);\n\n    if (status === 'delayed') {\n      var note = el('div', 'cfx-note');\n      note.setAttribute('role', 'status');\n      note.appendChild(svg('<circle cx=\"12\" cy=\"12\" r=\"9.5\" stroke=\"#FFC857\" stroke-width=\"2.2\"\/><path d=\"M12 7.5V13M12 16.5h.01\" stroke=\"#FFC857\" stroke-width=\"2.2\"\/>', 22, 22));\n      note.appendChild(el('p', null, T.delayedNote));\n      card.appendChild(note);\n    }\n\n    card.appendChild(el('hr', 'cfx-divider'));\n\n    var route = el('div', 'cfx-route');\n    function place(label, p) {\n      var box = el('div', 'cfx-place');\n      box.appendChild(el('span', 'cfx-muted', label));\n      box.appendChild(el('span', 'cfx-city', (p && p.city) || ''));\n      box.appendChild(el('span', 'cfx-country', countryName(p && p.country_code)));\n      return box;\n    }\n    route.appendChild(place(T.from, d.sender));\n    route.appendChild(svg('<path d=\"M2 12h20M16 5l7 7-7 7\" stroke=\"#7690AA\" stroke-width=\"2\"\/>', 40, 24, 'cfx-arrow'));\n    route.appendChild(place(T.to, d.recipient));\n    card.appendChild(route);\n\n    var dates = el('div', 'cfx-dates');\n    function dateBox(label, iso) {\n      var b = el('div', 'cfx-date');\n      b.appendChild(el('span', 'cfx-muted', label));\n      b.appendChild(el('strong', null, formatDate(iso)));\n      return b;\n    }\n    if (formatDate(d.shipping_date)) dates.appendChild(dateBox(T.shipped, d.shipping_date));\n    if (formatDate(d.estimated_arrival_date)) dates.appendChild(dateBox(T.eta, d.estimated_arrival_date));\n    if (dates.children.length) card.appendChild(dates);\n\n    var actions = el('div', 'cfx-actions');\n    var url = safeUrl(d.carrier_tracking_url);\n    if (url) {\n      var a = el('a', 'cfx-btn cfx-btn--link', T.trackLive.replace('{carrier}', d.carrier || ''));\n      a.href = url; a.target = '_blank'; a.rel = 'noopener noreferrer';\n      a.appendChild(svg('<path d=\"M7 17L17 7M9 7h8v8\" stroke=\"#172537\" stroke-width=\"2.5\"\/>', 16, 16));\n      actions.appendChild(a);\n    }\n    var again = el('button', 'cfx-btn cfx-btn--ghost', T.another);\n    again.type = 'button';\n    again.addEventListener('click', resetToSearch);\n    actions.appendChild(again);\n    card.appendChild(actions);\n\n    resultSection.appendChild(card);\n    searchSection.hidden = true;\n    resultSection.hidden = false;\n    title.focus();\n  }\n\n  function resetToSearch() {\n    resultSection.hidden = true;\n    resultSection.replaceChildren();\n    searchSection.hidden = false;\n    hideAlert();\n    form.reset();\n    resetTurnstile();\n    refInput.focus();\n  }\n\n  \/* ===== submit ===== *\/\n  form.addEventListener('submit', function (ev) {\n    ev.preventDefault();\n    hideAlert();\n    var reference = refInput.value.trim();\n    var postcode = zipInput.value.trim();\n    if (!reference || !postcode) return;\n    if (CONFIG.turnstileSiteKey && !turnstileToken) { showAlert(T.error); return; }\n    submitBtn.disabled = true;\n    lookup(reference, postcode).then(function (r) {\n      if (r.status === 200 && r.body && STATUSES.indexOf(r.body.status) !== -1) { renderResult(r.body); }\n      else if (r.status === 404) { showAlert(T.notFound); }\n      else if (r.status === 429) { showAlert(T.rateLimit); }\n      else { showAlert(T.error); }\n    }).catch(function () {\n      showAlert(T.error);\n    }).then(function () {\n      submitBtn.disabled = false;\n      resetTurnstile();\n    });\n  });\n\n  initTurnstile();\n})();\n<\/script>\n<\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","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":"","ast-breadcrumbs-content":"","ast-featured-img":"","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":"var(--ast-global-color-4)","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-11527","page","type-page","status-publish","hentry"],"acf":[],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Jannick Sloth","author_link":"https:\/\/cargoflux.com\/de\/author\/jannick\/"},"uagb_comment_info":0,"uagb_excerpt":null,"_links":{"self":[{"href":"https:\/\/cargoflux.com\/de\/wp-json\/wp\/v2\/pages\/11527","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cargoflux.com\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/cargoflux.com\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/cargoflux.com\/de\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/cargoflux.com\/de\/wp-json\/wp\/v2\/comments?post=11527"}],"version-history":[{"count":3,"href":"https:\/\/cargoflux.com\/de\/wp-json\/wp\/v2\/pages\/11527\/revisions"}],"predecessor-version":[{"id":11549,"href":"https:\/\/cargoflux.com\/de\/wp-json\/wp\/v2\/pages\/11527\/revisions\/11549"}],"wp:attachment":[{"href":"https:\/\/cargoflux.com\/de\/wp-json\/wp\/v2\/media?parent=11527"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}