{"id":153227,"date":"2026-10-19T10:41:27","date_gmt":"2026-10-19T08:41:27","guid":{"rendered":"https:\/\/builders24.net\/?page_id=153227"},"modified":"2026-10-20T08:37:45","modified_gmt":"2026-10-20T08:37:45","slug":"international-shipping","status":"publish","type":"page","link":"https:\/\/builders24.net\/zw\/international-shipping\/","title":{"rendered":"International Shipping"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"153227\" class=\"elementor elementor-153227\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6ee5eff e-con e-atomic-element e-flexbox-base e-default-div e-cb0ceb1 \" data-id=\"6ee5eff\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"6ee5eff\">\n    \t\t<div class=\"elementor-element elementor-element-806ea47 elementor-widget elementor-widget-html\" data-id=\"806ea47\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"en-ZW\">\r\n<head>\r\n<meta charset=\"UTF-8\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n<title>International Shipping to Zimbabwe | Sea Freight, FCL Containers &amp; Door Delivery | Builders24 Zimbabwe<\/title>\r\n<meta name=\"description\" content=\"Builders24 Zimbabwe provides international shipping to Zimbabwe: FCL sea freight in 20ft, 40ft and 40ft high cube containers into Beira, Maputo and Durban, plus last-mile road delivery to your door in Zimbabwe. One quote, one booking, port to door.\">\r\n<meta name=\"robots\" content=\"index, follow\">\r\n<meta property=\"og:type\" content=\"website\">\r\n<meta property=\"og:locale\" content=\"en_ZA\">\r\n<meta property=\"og:title\" content=\"International Shipping to Zimbabwe | Builders24 Zimbabwe\">\r\n<meta property=\"og:description\" content=\"Builders24 Zimbabwe provides international shipping to Zimbabwe: FCL sea freight in 20ft, 40ft and 40ft high cube containers into Beira, Maputo and Durban, plus last-mile road delivery to your door in Zimbabwe. One quote, one booking, port to door.\">\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Archivo+Narrow:wght@400;500;600;700;800&display=swap\" rel=\"stylesheet\">\r\n<style>\r\n\/* Scoped to #b24is so nothing here can restyle the WordPress site around it. *\/\r\n#b24is{ --navy:#0B2545; --orange:#F5821F; --orange-dark:#d96f16; --blue:#1C3F94; --body:#64748b; --line:#e2e8f0; --line-soft:#cbd5e1; --band-bg:#EAF1FB; --band-bg2:#F3F6FA; }\r\n#b24is, #b24is *{box-sizing:border-box;margin:0;padding:0;}\r\n#b24is{ font-family:'Archivo Narrow', Helvetica, Arial, sans-serif; background:#fff; color:var(--navy); overflow-x:hidden; }\r\n#b24is a{ color:var(--orange); text-decoration:none; }\r\n#b24is a:hover{ color:var(--orange-dark); }\r\n#b24is button{ font-family:inherit; border:none; cursor:pointer; }\r\n#b24is input::placeholder{ color:#94a3b8; }\r\n#b24is img{ max-width:100%; display:block; }\r\n#b24is .eyebrow{ display:flex; align-items:center; gap:10px; margin-bottom:14px; }\r\n#b24is .eyebrow-bar{ width:28px; height:3px; background:var(--orange); flex-shrink:0; }\r\n#b24is .eyebrow-text{ color:var(--orange); font-size:12.5px; font-weight:700; letter-spacing:1.2px; }\r\n#b24is .af-hero{ position:relative; min-height:600px; display:flex; align-items:center; overflow:hidden; }\r\n#b24is .af-hero-bg{ position:absolute; inset:0; z-index:0; }\r\n#b24is .af-hero-bg img{ width:100%; height:100%; object-fit:cover; }\r\n#b24is .af-hero-overlay{ position:absolute; inset:0; background:linear-gradient(100deg, rgba(6,20,38,0.88) 0%, rgba(6,20,38,0.55) 42%, rgba(6,20,38,0.15) 65%, rgba(6,20,38,0.35) 100%); }\r\n#b24is .af-hero-inner{ position:relative; z-index:1; display:flex; justify-content:space-between; align-items:flex-start; gap:32px; width:100%; padding:56px 48px; flex-wrap:wrap; }\r\n#b24is .af-hero-copy{ max-width:520px; min-width:280px; flex:1; }\r\n#b24is .af-hero-copy .eyebrow-text{ font-size:13px; }\r\n#b24is .af-hero-title{ margin:0 0 20px; font-size:46px; line-height:1.12; font-weight:800; color:#fff; }\r\n#b24is .af-hero-title span{ color:var(--orange); }\r\n#b24is .af-hero-sub{ margin:0 0 28px; font-size:16px; line-height:1.6; color:#dbe4ee; max-width:460px; }\r\n#b24is .af-hero-features{ display:flex; gap:24px; flex-wrap:wrap; max-width:460px; }\r\n#b24is .af-hero-feature{ display:flex; flex-direction:column; align-items:center; gap:10px; width:80px; text-align:center; }\r\n#b24is .af-hero-feature-ico{ width:44px; height:44px; border-radius:10px; background:rgba(245,130,31,0.18); display:flex; align-items:center; justify-content:center; font-size:20px; }\r\n#b24is .af-hero-feature-label{ font-size:12.5px; font-weight:600; color:#fff; line-height:1.3; }\r\n#b24is .qc-card{ background:#fff; border-radius:14px; box-shadow:0 20px 50px rgba(0,0,0,0.35); padding:28px; width:360px; flex-shrink:0; }\r\n#b24is .qc-title{ margin:0 0 6px; font-size:19px; font-weight:700; color:var(--navy); }\r\n#b24is .qc-sub{ margin:0 0 18px; font-size:13px; line-height:1.5; color:var(--body); }\r\n#b24is .qc-mode-row{ display:flex; gap:8px; margin-bottom:16px; }\r\n#b24is .qc-mode-btn{ flex:1; display:flex; align-items:center; justify-content:center; gap:6px; border-radius:8px; padding:10px 8px; font-size:13px; font-weight:600; border:1px solid var(--line-soft); background:#fff; color:#334155; }\r\n#b24is .qc-mode-btn.active{ background:var(--blue); color:#fff; border-color:var(--blue); }\r\n#b24is .qc-grid2{ display:grid; grid-template-columns:1fr 1fr; gap:10px; margin-bottom:12px; }\r\n#b24is .qc-grid3{ display:grid; grid-template-columns:1fr 1fr 1fr; gap:8px; margin-bottom:12px; }\r\n#b24is .qc-field-label{ font-size:11.5px; font-weight:600; color:#475569; margin-bottom:5px; }\r\n#b24is .qc-input-wrap{ display:flex; align-items:center; gap:6px; border:1px solid var(--line-soft); border-radius:7px; padding:9px 10px; }\r\n#b24is .qc-input-wrap input{ border:none; outline:none; font-size:13px; width:100%; color:#334155; background:none; font-family:inherit; }\r\n#b24is .qc-input-wrap.small{ padding:9px 8px; gap:5px; }\r\n#b24is .qc-input-wrap.small span{ font-size:11px; font-weight:700; color:#94a3b8; }\r\n#b24is .qc-input-wrap.small input{ font-size:12.5px; }\r\n#b24is .qc-submit{ width:100%; background:var(--orange); color:#fff; border-radius:8px; padding:13px; font-size:15px; font-weight:700; display:flex; align-items:center; justify-content:center; gap:8px; }\r\n#b24is .qc-submit:hover{ background:var(--orange-dark); }\r\n#b24is .qc-secure{ display:flex; align-items:center; justify-content:center; gap:5px; margin-top:10px; font-size:11px; color:#94a3b8; }\r\n#b24is .qc-error{ font-size:12px; color:#dc2626; margin-bottom:10px; }\r\n#b24is .search-wrap{ position:relative; }\r\n#b24is .search-list{ position:fixed; background:#fff; border:1px solid var(--line-soft); border-radius:8px; box-shadow:0 6px 18px rgba(0,0,0,0.14); max-height:200px; overflow-y:auto; z-index:9999; }\r\n#b24is .search-suggestion{ padding:9px 11px; font-size:12.5px; cursor:pointer; border-bottom:1px solid #f1f5f9; color:#334155; }\r\n#b24is .search-suggestion:hover{ background:var(--band-bg); }\r\n#b24is .search-suggestion:last-child{ border-bottom:none; }\r\n#b24is .search-empty{ padding:9px 11px; font-size:12px; color:#94a3b8; }\r\n#b24is .qc-rate-box{ background:var(--band-bg); border-radius:8px; padding:12px 14px; margin:2px 0 14px; font-size:13px; color:var(--navy); }\r\n#b24is .qc-rate-box b{ font-size:15px; }\r\n#b24is .af-why{ padding:72px 48px; display:flex; gap:48px; flex-wrap:wrap; }\r\n#b24is .af-why-copy{ flex:1; min-width:280px; max-width:420px; }\r\n#b24is .af-why-title{ margin:0 0 18px; font-size:32px; font-weight:800; color:var(--navy); line-height:1.2; }\r\n#b24is .af-why-sub{ margin:0 0 26px; font-size:15px; line-height:1.7; color:var(--body); }\r\n#b24is .btn-outline-navy{ background:#fff; border:1.5px solid var(--navy); color:var(--navy); border-radius:8px; padding:12px 22px; font-size:14px; font-weight:600; display:inline-flex; align-items:center; gap:8px; }\r\n#b24is .af-why-grid{ flex:2; min-width:320px; display:grid; grid-template-columns:1fr 1fr; gap:20px; }\r\n#b24is .af-why-card{ border:1px solid var(--line); border-radius:12px; padding:22px; display:flex; gap:16px; align-items:flex-start; }\r\n#b24is .af-why-card-ico{ width:38px; height:38px; flex-shrink:0; display:flex; align-items:center; justify-content:center; font-size:20px; }\r\n#b24is .af-why-card-title{ font-size:15.5px; font-weight:700; color:var(--navy); margin-bottom:6px; }\r\n#b24is .af-why-card-desc{ font-size:13.5px; line-height:1.55; color:var(--body); }\r\n@media(max-width:700px){#b24is .af-why-grid{ grid-template-columns:1fr; }\r\n }\r\n#b24is .af-routes{ background:var(--band-bg); padding:64px 48px; }\r\n#b24is .af-routes-inner{ display:flex; gap:48px; flex-wrap:wrap; align-items:flex-start; }\r\n#b24is .af-routes-copy{ flex:1; min-width:260px; max-width:360px; }\r\n#b24is .af-routes-title{ margin:0 0 16px; font-size:30px; font-weight:800; color:var(--navy); line-height:1.2; }\r\n#b24is .af-routes-sub{ margin:0 0 24px; font-size:15px; line-height:1.7; color:var(--body); }\r\n#b24is .af-routes-grid{ flex:3; min-width:320px; display:grid; grid-template-columns:repeat(4,1fr); gap:16px; }\r\n@media(max-width:900px){#b24is .af-routes-grid{ grid-template-columns:repeat(2,1fr); }\r\n }\r\n#b24is .af-route-card{ background:#fff; border-radius:12px; padding:18px; }\r\n#b24is .af-route-plane{ font-size:16px; margin-bottom:14px; }\r\n#b24is .af-route-flags{ display:flex; align-items:center; gap:8px; margin-bottom:10px; font-size:16px; }\r\n#b24is .af-route-arrow{ color:#94a3b8; }\r\n#b24is .af-route-pair{ font-size:13.5px; font-weight:600; color:#334155; margin-bottom:8px; }\r\n#b24is .af-route-days{ font-size:12.5px; color:var(--body); margin-bottom:2px; }\r\n#b24is .af-route-price{ font-size:12.5px; font-weight:600; color:var(--blue); }\r\n#b24is .af-routes-empty{ grid-column:1\/-1; font-size:13px; color:var(--body); padding:20px; text-align:center; background:#fff; border-radius:12px; }\r\n#b24is .af-steps{ padding:64px 48px 48px; }\r\n#b24is .af-steps-title{ margin:0 0 32px; font-size:30px; font-weight:800; color:var(--navy); }\r\n#b24is .af-steps-row{ display:flex; align-items:flex-start; gap:12px; flex-wrap:wrap; }\r\n#b24is .af-step{ flex:1; min-width:150px; position:relative; }\r\n#b24is .af-step-icowrap{ position:relative; width:60px; height:60px; margin-bottom:16px; }\r\n#b24is .af-step-ico{ width:60px; height:60px; border-radius:50%; background:var(--band-bg); display:flex; align-items:center; justify-content:center; font-size:22px; }\r\n#b24is .af-step-num{ position:absolute; bottom:-4px; right:-4px; width:22px; height:22px; border-radius:50%; background:var(--orange); color:#fff; font-size:11px; font-weight:700; display:flex; align-items:center; justify-content:center; }\r\n#b24is .af-step-title{ font-size:16px; font-weight:700; color:var(--navy); margin-bottom:6px; }\r\n#b24is .af-step-desc{ font-size:13.5px; line-height:1.55; color:var(--body); max-width:220px; }\r\n#b24is .af-step-arrow{ height:60px; display:flex; align-items:center; font-size:20px; color:#cbd5e1; flex:none; }\r\n@media(max-width:760px){#b24is .af-steps-row{ display:grid; grid-template-columns:repeat(2,1fr); gap:20px 14px; }\r\n#b24is .af-step{ min-width:0; }\r\n#b24is .af-step-arrow{ display:none; }\r\n }\r\n@media(max-width:700px){#b24is .af-hero-inner{ padding:40px 20px; }\r\n#b24is .af-hero-title{ font-size:32px; }\r\n#b24is .qc-card{ width:100%; }\r\n#b24is .af-why,#b24is .af-routes,#b24is .af-steps{ padding-left:20px; padding-right:20px; }\r\n\r\n  }\r\n\r\n\r\n<\/style>\r\n<\/head>\r\n<body>\r\n<div id=\"b24is\">\r\n\r\n<div class=\"af-hero\">\r\n  <div class=\"af-hero-bg\"><img decoding=\"async\" src=\"https:\/\/app.builders24.net\/assets\/Builders24-Cargo.png\" alt=\"\"><\/div>\r\n  <div class=\"af-hero-overlay\"><\/div>\r\n  <div class=\"af-hero-inner\">\r\n    <div class=\"af-hero-copy\">\r\n      <div class=\"eyebrow\"><div class=\"eyebrow-bar\"><\/div><span class=\"eyebrow-text\">INTERNATIONAL SHIPPING<\/span><\/div>\r\n      <h1 class=\"af-hero-title\">One Quote. <span>Port to Door.<\/span><\/h1>\r\n      <p class=\"af-hero-sub\">Builders24 International Shipping moves your cargo to Zimbabwe by sea freight and delivers it to your door in Zimbabwe. Ship FCL in 20ft, 40ft or 40ft high cube containers from your origin port to Beira, Maputo or Durban, with last-mile road delivery to your final city. We ship from popular export hubs such as China, Japan, India and Europe. Zimbabwean businesses, manufacturers and importers get one quote and one booking, port to door.<\/p>\r\n      <div class=\"af-hero-features\" id=\"heroFeatures\"><\/div>\r\n    <\/div>\r\n\r\n    <div class=\"qc-card\">\r\n      <h2 class=\"qc-title\">Get an Instant End-to-End Quote<\/h2>\r\n      <p class=\"qc-sub\">Tell us where it's coming from and where it needs to end up \u2014 we'll combine the sea leg and the last-mile delivery into one quote.<\/p>\r\n\r\n      <div class=\"qc-mode-row\">\r\n        <button type=\"button\" class=\"qc-mode-btn active\" id=\"modeSingleBtn\" onclick=\"setShipmentMode('single')\">\ud83d\udce6 Single Shipment<\/button>\r\n        <button type=\"button\" class=\"qc-mode-btn\" id=\"modeMultiBtn\" onclick=\"setShipmentMode('multiple')\">\ud83d\udce6\ud83d\udce6 Multiple Shipments<\/button>\r\n      <\/div>\r\n\r\n      <div class=\"qc-grid2\">\r\n        <div>\r\n          <div class=\"qc-field-label\">From (Origin Port)<\/div>\r\n          <div class=\"qc-input-wrap search-wrap\"><span>\ud83d\udccd<\/span><input type=\"text\" id=\"qcFrom\" placeholder=\"Search origin port\u2026\" autocomplete=\"off\" oninput=\"handleRouteSearch('origin', this.value)\" onfocus=\"handleRouteSearch('origin', this.value)\"><\/div>\r\n          <div class=\"search-list\" id=\"qcFromList\" style=\"display:none;\"><\/div>\r\n        <\/div>\r\n        <div>\r\n          <div class=\"qc-field-label\">To (Final Delivery City)<\/div>\r\n          <div class=\"qc-input-wrap search-wrap\"><span>\ud83d\udccd<\/span><input type=\"text\" id=\"qcTo\" placeholder=\"Search Zimbabwean destination city\u2026\" autocomplete=\"off\" oninput=\"handleRouteSearch('destination', this.value)\" onfocus=\"handleRouteSearch('destination', this.value)\"><\/div>\r\n          <div class=\"search-list\" id=\"qcToList\" style=\"display:none;\"><\/div>\r\n        <\/div>\r\n      <\/div>\r\n      <div id=\"qcRateEstimate\" style=\"display:none;\"><\/div>\r\n\r\n      <div class=\"qc-grid2\">\r\n        <div>\r\n          <div class=\"qc-field-label\">Sea Freight Service<\/div>\r\n          <select class=\"qc-input-wrap\" id=\"qcType\" style=\"appearance:none;font-size:13px;color:#334155;\" onchange=\"checkRouteMatch()\">\r\n            <option value=\"fcl_20ft\">FCL \u2014 20ft Container<\/option>\r\n            <option value=\"fcl_40ft\">FCL \u2014 40ft Container<\/option>\r\n            <option value=\"fcl_40ft_hc\">FCL \u2014 40ft High Cube<\/option>\r\n          <\/select>\r\n        <\/div>\r\n        <div>\r\n          <div class=\"qc-field-label\">Number of Containers<\/div>\r\n          <div class=\"qc-input-wrap\"><span>\ud83d\udce6<\/span><input type=\"number\" id=\"qcWeight\" placeholder=\"Enter quantity\" oninput=\"checkRouteMatch()\"><\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"qc-field-label\">Cargo Description<\/div>\r\n      <div class=\"qc-input-wrap\" style=\"margin-bottom:12px;\"><span>\ud83d\udcdd<\/span><input type=\"text\" id=\"qcDesc\" placeholder=\"e.g. electronics, machinery, vehicles\"><\/div>\r\n\r\n      <div class=\"qc-error\" id=\"qcError\"><\/div>\r\n      <button type=\"button\" class=\"qc-submit\" id=\"qcSubmitBtn\" onclick=\"submitQuoteCalc()\">Book &amp; Pay \u2192<\/button>\r\n      <div class=\"qc-secure\"><span>\ud83d\udd12 Your information is secure and confidential.<\/span><\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<div class=\"af-why\">\r\n  <div class=\"af-why-copy\">\r\n    <div class=\"eyebrow\"><div class=\"eyebrow-bar\"><\/div><span class=\"eyebrow-text\">WHY CHOOSE BUILDERS24 INTERNATIONAL SHIPPING<\/span><\/div>\r\n    <h2 class=\"af-why-title\">Port to Door. One Partner.<\/h2>\r\n    <p class=\"af-why-sub\">We work with trusted ocean carriers to give you competitive FCL, LCL and RoRo rates, flexible options and complete visibility from port to port.<\/p>\r\n    <a class=\"btn-outline-navy\" href=\"https:\/\/app.builders24.net\/shipping\/index.html\">View Our Services \u2192<\/a>\r\n  <\/div>\r\n  <div class=\"af-why-grid\" id=\"whyGrid\"><\/div>\r\n<\/div>\r\n\r\n<div class=\"af-routes\">\r\n  <div class=\"af-routes-inner\">\r\n    <div class=\"af-routes-copy\">\r\n      <div class=\"eyebrow\"><div class=\"eyebrow-bar\"><\/div><span class=\"eyebrow-text\">POPULAR END-TO-END CORRIDORS<\/span><\/div>\r\n      <h2 class=\"af-routes-title\">Key Corridors<\/h2>\r\n      <p class=\"af-routes-sub\">Combined sea freight + last-mile delivery pricing for popular port-to-city corridors.<\/p>\r\n    <\/div>\r\n    <div class=\"af-routes-grid\" id=\"routesGrid\">\r\n      <div class=\"af-routes-empty\">Loading routes\u2026<\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<div class=\"af-steps\">\r\n  <div class=\"eyebrow\"><div class=\"eyebrow-bar\"><\/div><span class=\"eyebrow-text\">SIMPLE PROCESS<\/span><\/div>\r\n  <h2 class=\"af-steps-title\">How It Works<\/h2>\r\n  <div class=\"af-steps-row\" id=\"stepsRow\"><\/div>\r\n<\/div>\r\n<\/div><!-- \/#b24is -->\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/@supabase\/supabase-js@2\"><\/script>\r\n<script src=\"https:\/\/app.builders24.net\/guest-cart.js\"><\/script>\r\n<script src=\"https:\/\/app.builders24.net\/b24app.js\"><\/script>\r\n<script>\r\n\/* Zimbabwe localisation: all prices are shown in US dollars (USD). *\/\r\nwindow.getCustomerCurrency = async function(){ return 'USD'; };\r\nwindow.setCustomerCurrency = async function(){};\r\nwindow.b24Zar = function(amount, cur){\r\n  try { if (typeof fmtConverted === 'function') return fmtConverted(Number(amount), cur || 'USD', 'USD'); } catch(e){}\r\n  return (cur || 'USD') + ' ' + amount;\r\n};\r\ntry { if (typeof loadExchangeRates === 'function') loadExchangeRates(); } catch(e){}\r\n<\/script>\r\n<script>\r\n(function(){\r\n  'use strict';\r\n\r\n  const HERO_FEATURES = [\r\n    { icon:'\ud83d\udea2', label:'Sea + Road Network' },\r\n    { icon:'\ud83d\udee1\ufe0f', label:'Secure Handling' },\r\n    { icon:'\ud83d\udce6', label:'One Combined Quote' },\r\n    { icon:'\ud83d\udccd', label:'Real-Time Tracking' },\r\n  ];\r\n  const WHY_FEATURES = [\r\n    { icon:'\ud83c\udf10', title:'End-to-End Coverage', desc:'Sea freight to the nearest port, plus last-mile road delivery to your door \u2014 one booking.' },\r\n    { icon:'\ud83d\udccd', title:'Real-Time Tracking', desc:'Know where your cargo is, from the ship to the final delivery truck.' },\r\n    { icon:'\ud83d\udcb1', title:'Combined Competitive Rates', desc:'One quote covers both the ocean leg and the inland leg.' },\r\n    { icon:'\ud83d\udec3', title:'Customs & Border Support', desc:'Our team helps with port clearance and cross-border documentation.' },\r\n  ];\r\n  const STEPS = [\r\n    { n:1, icon:'\ud83d\udcc4', title:'Get a Quote', desc:'Enter origin port and final delivery city for one combined quote.', hasArrow:true },\r\n    { n:2, icon:'\ud83d\udcb3', title:'Book & Pay', desc:'Confirm your booking and make payment securely.', hasArrow:true },\r\n    { n:3, icon:'\ud83d\udea2', title:'We Ship', desc:'Your cargo sails to port, clears customs, then moves by road.', hasArrow:true },\r\n    { n:4, icon:'\ud83d\udccd', title:'Track & Receive', desc:'Monitor your shipment until it reaches your door.', hasArrow:false },\r\n  ];\r\n\r\n  function esc(s){ return (s||'').toString().replace(\/[&<>\"']\/g, c => ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[c])); }\r\n\r\n  const SERVICE_LABELS = { fcl_20ft: 'FCL 20ft', fcl_40ft: 'FCL 40ft', fcl_40ft_hc: 'FCL 40ft HC' };\r\n\r\n  document.getElementById('heroFeatures').innerHTML = HERO_FEATURES.map(f => `\r\n    <div class=\"af-hero-feature\">\r\n      <div class=\"af-hero-feature-ico\">${f.icon}<\/div>\r\n      <span class=\"af-hero-feature-label\">${esc(f.label)}<\/span>\r\n    <\/div>`).join('');\r\n\r\n  document.getElementById('whyGrid').innerHTML = WHY_FEATURES.map(w => `\r\n    <div class=\"af-why-card\">\r\n      <div class=\"af-why-card-ico\">${w.icon}<\/div>\r\n      <div><div class=\"af-why-card-title\">${esc(w.title)}<\/div><div class=\"af-why-card-desc\">${esc(w.desc)}<\/div><\/div>\r\n    <\/div>`).join('');\r\n\r\n  document.getElementById('stepsRow').innerHTML = STEPS.map(s => `\r\n    <div class=\"af-step\">\r\n      <div class=\"af-step-icowrap\"><div class=\"af-step-ico\">${s.icon}<\/div><div class=\"af-step-num\">${s.n}<\/div><\/div>\r\n      <div class=\"af-step-title\">${esc(s.title)}<\/div>\r\n      <div class=\"af-step-desc\">${esc(s.desc)}<\/div>\r\n    <\/div>\r\n    ${s.hasArrow ? '<div class=\"af-step-arrow\">\u2192<\/div>' : ''}`).join('');\r\n\r\n  window.setShipmentMode = function(mode){\r\n    document.getElementById('modeSingleBtn').classList.toggle('active', mode === 'single');\r\n    document.getElementById('modeMultiBtn').classList.toggle('active', mode === 'multiple');\r\n  };\r\n\r\n  \/* ------------------------------------------------------------\r\n     From = origin PORT, searched against sea_freight_rates (same\r\n     dual-column origin_port\/origin_country pattern as sea-freight.html).\r\n     To = final delivery CITY, searched against\r\n     inland_freight_rates.destination_city \u2014 the true end point, not a\r\n     port, since this page quotes all the way to the door.\r\n     ------------------------------------------------------------ *\/\r\n  let _routeSearchDebounce = {};\r\n  let _selectedOrigin = null;     \/\/ { label, port, country } \u2014 sea side\r\n  let _selectedDestCity = null;   \/\/ plain city string \u2014 inland side\r\n\r\n  function positionSearchList(inputId, listEl){\r\n    const inputEl = document.getElementById(inputId);\r\n    const r = inputEl.getBoundingClientRect();\r\n    listEl.style.left = r.left + 'px';\r\n    listEl.style.width = r.width + 'px';\r\n    listEl.style.top = (r.bottom + 4) + 'px';\r\n  }\r\n\r\n  window.handleRouteSearch = function(field, query){\r\n    if (field === 'origin') _selectedOrigin = null; else _selectedDestCity = null;\r\n    document.getElementById('qcRateEstimate').style.display = 'none';\r\n    clearTimeout(_routeSearchDebounce[field]);\r\n    const inputId = field === 'origin' ? 'qcFrom' : 'qcTo';\r\n    const listEl = document.getElementById(field === 'origin' ? 'qcFromList' : 'qcToList');\r\n    if (!query || query.trim().length < 2) { listEl.style.display = 'none'; listEl.innerHTML = ''; return; }\r\n    _routeSearchDebounce[field] = setTimeout(async () => {\r\n      if (field === 'origin') {\r\n        const { data } = await sb.from('sea_freight_rates')\r\n          .select('origin_port,origin_country')\r\n          .or(`origin_port.ilike.%${query}%,origin_country.ilike.%${query}%`)\r\n          .limit(20);\r\n        const seen = new Set(); const results = [];\r\n        (data || []).forEach(r => {\r\n          const label = r.origin_port || r.origin_country;\r\n          if (seen.has(label)) return; seen.add(label);\r\n          results.push({ label, port: r.origin_port, country: r.origin_country });\r\n        });\r\n        positionSearchList(inputId, listEl);\r\n        if (!results.length) { listEl.innerHTML = '<div class=\"search-empty\">No matching ports found.<\/div>'; listEl.style.display = 'block'; return; }\r\n        window._originResults = results;\r\n        listEl.innerHTML = results.map((r,i) => `<div class=\"search-suggestion\" onclick=\"selectOriginPort(${i})\">${esc(r.label)}<\/div>`).join('');\r\n        listEl.style.display = 'block';\r\n      } else {\r\n        const { data } = await sb.from('inland_freight_rates').select('destination_city').ilike('destination_city', `%${query}%`).limit(20);\r\n        const unique = Array.from(new Set((data || []).map(r => r.destination_city)));\r\n        positionSearchList(inputId, listEl);\r\n        if (!unique.length) { listEl.innerHTML = '<div class=\"search-empty\">No matching delivery cities found.<\/div>'; listEl.style.display = 'block'; return; }\r\n        listEl.innerHTML = unique.map(name => `<div class=\"search-suggestion\" onclick=\"selectDestCity(${JSON.stringify(name).replace(\/\"\/g, '&quot;')})\">${esc(name)}<\/div>`).join('');\r\n        listEl.style.display = 'block';\r\n      }\r\n    }, 280);\r\n  };\r\n\r\n  window.selectOriginPort = function(i){\r\n    const r = window._originResults[i];\r\n    document.getElementById('qcFrom').value = r.label;\r\n    document.getElementById('qcFromList').style.display = 'none';\r\n    _selectedOrigin = r;\r\n    checkRouteMatch();\r\n  };\r\n  window.selectDestCity = function(name){\r\n    document.getElementById('qcTo').value = name;\r\n    document.getElementById('qcToList').style.display = 'none';\r\n    _selectedDestCity = name;\r\n    checkRouteMatch();\r\n  };\r\n\r\n  window.addEventListener('scroll', function(){\r\n    document.getElementById('qcFromList').style.display = 'none';\r\n    document.getElementById('qcToList').style.display = 'none';\r\n  }, true);\r\n  document.addEventListener('click', function(e){\r\n    if (!e.target.closest('.search-wrap') && !e.target.closest('.search-list')) {\r\n      document.getElementById('qcFromList').style.display = 'none';\r\n      document.getElementById('qcToList').style.display = 'none';\r\n    }\r\n  });\r\n\r\n  \/* ------------------------------------------------------------\r\n     Combined rate lookup \u2014 real join done client-side, since the two\r\n     tables share no foreign key. Step 1: find the cheapest inland leg\r\n     that delivers to the selected final city (its origin_city is the\r\n     \"gateway port-city\"). Step 2: find a sea leg from the selected\r\n     origin port to that gateway (destination_port matched via ILIKE\r\n     substring against the gateway city name, e.g. sea's \"Durban\r\n     (ZADUR)\" matching inland's plain \"Durban\"). Total = sea rate_min +\r\n     inland rate_min, on the stated assumption that 1 FCL container \u2248\r\n     1 last-mile truck.\r\n     ------------------------------------------------------------ *\/\r\n  let _matchedTotal = null;\r\n  async function checkRouteMatch(){\r\n    const box = document.getElementById('qcRateEstimate');\r\n    if (!_selectedOrigin || !_selectedDestCity) { box.style.display = 'none'; _matchedTotal = null; return; }\r\n    const serviceType = document.getElementById('qcType').value;\r\n\r\n    const { data: inlandLegs } = await sb.from('inland_freight_rates')\r\n      .select('origin_city,rate_min,currency,transit_days_min,transit_days_max')\r\n      .eq('destination_city', _selectedDestCity)\r\n      .not('rate_min', 'is', null)\r\n      .order('rate_min', { ascending: true })\r\n      .limit(1);\r\n    const inlandLeg = inlandLegs && inlandLegs[0];\r\n\r\n    if (!inlandLeg) {\r\n      box.className = 'qc-rate-box';\r\n      box.innerHTML = 'No last-mile route on file to that city yet \u2014 you can still submit a request and our team will quote it.';\r\n      box.style.display = 'block';\r\n      _matchedTotal = null;\r\n      return;\r\n    }\r\n\r\n    let seaQ = sb.from('sea_freight_rates').select('rate_min,currency,transit_days_min,transit_days_max')\r\n      .eq('service_type', serviceType)\r\n      .ilike('destination_port', `%${inlandLeg.origin_city}%`)\r\n      .not('rate_min', 'is', null);\r\n    seaQ = _selectedOrigin.port ? seaQ.eq('origin_port', _selectedOrigin.port) : seaQ.is('origin_port', null).eq('origin_country', _selectedOrigin.country);\r\n    const { data: seaLegs } = await seaQ.limit(1);\r\n    const seaLeg = seaLegs && seaLegs[0];\r\n\r\n    if (!seaLeg) {\r\n      box.className = 'qc-rate-box';\r\n      box.innerHTML = `No sea leg on file from this origin to ${esc(inlandLeg.origin_city)} (the gateway port for ${esc(_selectedDestCity)}) yet \u2014 you can still submit a request and our team will quote it.`;\r\n      box.style.display = 'block';\r\n      _matchedTotal = null;\r\n      return;\r\n    }\r\n\r\n    const qty = Number(document.getElementById('qcWeight').value) || 0;\r\n    const total = seaLeg.rate_min + inlandLeg.rate_min;\r\n    _matchedTotal = { seaLeg, inlandLeg, total, currency: seaLeg.currency, gateway: inlandLeg.origin_city };\r\n    box.className = 'qc-rate-box';\r\n    box.innerHTML = `Sea freight to ${esc(inlandLeg.origin_city)}: <b>${esc(b24Zar(seaLeg.rate_min, seaLeg.currency))}<\/b> &middot; `\r\n      + `Last-mile to ${esc(_selectedDestCity)}: <b>${esc(b24Zar(inlandLeg.rate_min, inlandLeg.currency))}<\/b><br>`\r\n      + `Total (per container): <b>${esc(b24Zar(total, seaLeg.currency))}<\/b>`\r\n      + (qty ? ` &middot; Estimated grand total: <b>${esc(b24Zar(total * qty, seaLeg.currency))}<\/b> for ${qty}` : '')\r\n      + `<br><span style=\"font-size:10.5px;color:#94a3b8;\">Assumes 1 container \u2248 1 last-mile truck load.<\/span>`;\r\n    box.style.display = 'block';\r\n  }\r\n\r\n  window.submitQuoteCalc = function(){\r\n    const errEl = document.getElementById('qcError');\r\n    const from = document.getElementById('qcFrom').value.trim();\r\n    const to = document.getElementById('qcTo').value.trim();\r\n    const qty = document.getElementById('qcWeight').value;\r\n    const serviceType = document.getElementById('qcType').value;\r\n    if (!from || !to) { errEl.textContent = 'Please enter both origin port and final delivery city.'; return; }\r\n    if (!qty) { errEl.textContent = 'Please enter a quantity.'; return; }\r\n    errEl.textContent = '';\r\n    const params = new URLSearchParams({\r\n      booking_type: 'international_shipping',\r\n      origin: from, destination: to, service_type: serviceType,\r\n      cargo: document.getElementById('qcDesc').value.trim(),\r\n      quantity: qty,\r\n    });\r\n    if (_matchedTotal) {\r\n      params.set('sea_rate', _matchedTotal.seaLeg.rate_min);\r\n      params.set('inland_rate', _matchedTotal.inlandLeg.rate_min);\r\n      params.set('total_rate', _matchedTotal.total);\r\n      params.set('currency', _matchedTotal.currency);\r\n      params.set('gateway_port', _matchedTotal.gateway);\r\n    }\r\n    \/\/ Goes to the future \/shipping\/book-and-pay.html booking flow (not\r\n    \/\/ built yet \u2014 this link will 404 until that page exists).\r\n    location.href = 'https:\/\/app.builders24.net\/shipping\/book-and-pay.html?' + params.toString();\r\n  };\r\n\r\n  \/* ------------------------------------------------------------\r\n     Key Corridors \u2014 real combined sea+inland examples, joined\r\n     client-side the same way as checkRouteMatch(): take the cheapest\r\n     inland legs, find a matching FCL 20ft sea leg for each via the\r\n     same gateway-city substring match, keep the ones that resolve,\r\n     show the 4 cheapest combined totals.\r\n     ------------------------------------------------------------ *\/\r\n  async function loadRoutes(){\r\n    const grid = document.getElementById('routesGrid');\r\n    try {\r\n      const { data: inlandLegs, error: inlandErr } = await sb.from('inland_freight_rates')\r\n        .select('origin_city,destination_city,rate_min,currency')\r\n        .not('rate_min', 'is', null)\r\n        .order('rate_min', { ascending: true })\r\n        .limit(15);\r\n      if (inlandErr) throw inlandErr;\r\n\r\n      const { data: seaLegs, error: seaErr } = await sb.from('sea_freight_rates')\r\n        .select('origin_port,origin_country,destination_port,rate_min,currency')\r\n        .eq('service_type', 'fcl_20ft')\r\n        .not('rate_min', 'is', null);\r\n      if (seaErr) throw seaErr;\r\n\r\n      const combos = [];\r\n      (inlandLegs || []).forEach(inland => {\r\n        const match = (seaLegs || []).find(s => s.destination_port && s.destination_port.toLowerCase().includes(inland.origin_city.toLowerCase()));\r\n        if (match) {\r\n          combos.push({\r\n            origin: match.origin_port || match.origin_country,\r\n            gateway: inland.origin_city,\r\n            destination: inland.destination_city,\r\n            total: match.rate_min + inland.rate_min,\r\n            currency: match.currency,\r\n          });\r\n        }\r\n      });\r\n      combos.sort((a,b) => a.total - b.total);\r\n      const top = combos.slice(0, 4);\r\n\r\n      if (!top.length) {\r\n        grid.innerHTML = '<div class=\"af-routes-empty\">No combined end-to-end routes available yet.<\/div>';\r\n        return;\r\n      }\r\n      grid.innerHTML = top.map(c => `\r\n        <div class=\"af-route-card\">\r\n          <div class=\"af-route-plane\">\ud83d\udea2\ud83d\ude9a<\/div>\r\n          <div class=\"af-route-pair\">${esc(c.origin)} \u2192 ${esc(c.destination)}<\/div>\r\n          <div class=\"af-route-days\">via ${esc(c.gateway)}<\/div>\r\n          <div class=\"af-route-price\">From ${esc(b24Zar(c.total, c.currency))}<\/div>\r\n        <\/div>`).join('');\r\n    } catch (e) {\r\n      console.warn('combined route query failed:', e.message);\r\n      grid.innerHTML = '<div class=\"af-routes-empty\">Route pricing isn\\u2019t available right now \u2014 check back soon.<\/div>';\r\n    }\r\n  }\r\n  loadRoutes();\r\n\r\n  if (typeof updateCartBadge === 'function') updateCartBadge();\r\n})();\r\n<\/script>\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\n<\/div>\n\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>International Shipping to Zimbabwe | Sea Freight, FCL Containers &amp; Door Delivery | Builders24 Zimbabwe INTERNATIONAL SHIPPING One Quote. Port to Door. Builders24 International Shipping moves your cargo to Zimbabwe by sea freight and delivers it to your door in Zimbabwe. Ship FCL in 20ft, 40ft or 40ft high cube containers from your origin port to Beira, Maputo or Durban, with last-mile road delivery to your final city. We ship from popular export hubs such as China, Japan, India and Europe. Zimbabwean businesses, manufacturers and importers get one quote and one booking, port to door. Get an Instant End-to-End Quote Tell us where it&#8217;s coming from and where it needs to end up \u2014 we&#8217;ll combine the sea leg and the last-mile delivery into one quote. \ud83d\udce6 Single Shipment \ud83d\udce6\ud83d\udce6 Multiple Shipments From (Origin Port) \ud83d\udccd To (Final Delivery City) \ud83d\udccd Sea Freight Service FCL \u2014 20ft ContainerFCL \u2014 40ft ContainerFCL \u2014 40ft High Cube Number of Containers \ud83d\udce6 Cargo Description \ud83d\udcdd Book &amp; Pay \u2192 \ud83d\udd12 Your information is secure and confidential. WHY CHOOSE BUILDERS24 INTERNATIONAL SHIPPING Port to Door. One Partner. We work with trusted ocean carriers to give you competitive FCL, LCL and RoRo rates, flexible options and complete visibility from port to port. View Our Services \u2192 POPULAR END-TO-END CORRIDORS Key Corridors Combined sea freight + last-mile delivery pricing for popular port-to-city corridors. Loading routes\u2026 SIMPLE PROCESS How It Works<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-153227","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/builders24.net\/zw\/wp-json\/wp\/v2\/pages\/153227","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/builders24.net\/zw\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/builders24.net\/zw\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/builders24.net\/zw\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/builders24.net\/zw\/wp-json\/wp\/v2\/comments?post=153227"}],"version-history":[{"count":6,"href":"https:\/\/builders24.net\/zw\/wp-json\/wp\/v2\/pages\/153227\/revisions"}],"predecessor-version":[{"id":153480,"href":"https:\/\/builders24.net\/zw\/wp-json\/wp\/v2\/pages\/153227\/revisions\/153480"}],"wp:attachment":[{"href":"https:\/\/builders24.net\/zw\/wp-json\/wp\/v2\/media?parent=153227"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}