1<!doctype html> 2<html lang="en"> 3 <head> 4 <meta charset="UTF-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 <link rel="icon" href="/favicon.png" type="image/png" /> 7 <title>Katlego Luxury Tours | Johannesburg Chauffeur & Transfers</title> 8 <meta name="description" content="Luxury airport transfers, executive chauffeur services, corporate travel and guided safaris across Johannesburg, Midrand, Pretoria and greater Gauteng." /> 9 <meta name="author" content="Katlego Luxury Tours & Safaris" /> 10 <meta name="keywords" content="airport transfers Johannesburg, luxury chauffeur Johannesburg, executive transport Gauteng, OR Tambo airport transfer, corporate transport Johannesburg, Midrand shuttle, safari tours South Africa" /> 11 <meta name="robots" content="index, follow" /> 12 <link rel="preconnect" href="https://fonts.googleapis.com" /> 13 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> 14 <link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@500;600;700&family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet" /> 15 16 17 18 <meta property="og:type" content="website" /> 19 <meta property="og:site_name" content="Katlego Luxury Tours & Safaris" /> 20 <meta property="og:locale" content="en_ZA" /> 21 <meta property="og:url" content="https://katlegoluxpreview.lovable.app/" /> 22 <meta property="og:image" content="https://storage.googleapis.com/gpt-engineer-file-uploads/8aMXgWSQfxUfQXzIEadczy3NsfA2/social-images/social-1779696987279-Gemini_Generated_Image__(1).webp"> 23 24 <meta name="twitter:card" content="summary_large_image" /> 25 <meta name="twitter:site" content="@Lovable" /> 26 <meta name="twitter:image" content="https://storage.googleapis.com/gpt-engineer-file-uploads/8aMXgWSQfxUfQXzIEadczy3NsfA2/social-images/social-1779696987279-Gemini_Generated_Image__(1).webp"> 27 <meta property="og:title" content="Katlego Luxury Tours | Johannesburg Chauffeur & Transfers" /> 28 <meta name="twitter:title" content="Katlego Luxury Tours | Johannesburg Chauffeur & Transfers" /> 29 <meta property="og:description" content="Luxury airport transfers, executive chauffeur services, corporate travel and guided safaris across Johannesburg and greater Gauteng." /> 30 <meta name="twitter:description" content="Luxury airport transfers, executive chauffeur services, corporate travel and guided safaris across Johannesburg and greater Gauteng." /> 31 32
32<script type="application/ld+json"> 33 { 34 "@context": "https://schema.org", 35 "@type": "LocalBusiness", 36 "@id": "https://katlegoluxpreview.lovable.app/#business", 37 "name": "Katlego Luxury Tours & Safaris", 38 "image": "https://katlegoluxpreview.lovable.app/favicon.png", 39 "url": "https://katlegoluxpreview.lovable.app/", 40 "telephone": "+27675928492", 41 "email": "[email protected]", 42 "priceRange": "$$", 43 "address": { 44 "@type": "PostalAddress", 45 "streetAddress": "Unit 2, Acacia Park, Capital Hill Business Park, Halfway House", 46 "addressLocality": "Midrand", 47 "addressRegion": "Gauteng", 48 "postalCode": "1685", 49 "addressCountry": "ZA" 50 }, 51 "areaServed": [ 52 { "@type": "City", "name": "Johannesburg" }, 53 { "@type": "City", "name": "Midrand" }, 54 { "@type": "City", "name": "Pretoria" }, 55 { "@type": "AdministrativeArea", "name": "Gauteng" } 56 ], 57 "openingHoursSpecification": { 58 "@type": "OpeningHoursSpecification", 59 "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"], 60 "opens": "00:00", 61 "closes": "23:59" 62 }, 63 "aggregateRating": { 64 "@type": "AggregateRating", 65 "ratingValue": "4.8", 66 "reviewCount": "13" 67 } 68 } 69 </script>
69 70
70<script type="application/ld+json"> 71 { 72 "@context": "https://schema.org", 73 "@type": "TaxiService", 74 "name": "Katlego Luxury Chauffeur & Airport Transfers", 75 "provider": { "@id": "https://katlegoluxpreview.lovable.app/#business" }, 76 "serviceType": ["Airport Transfer","Executive Chauffeur","Corporate Transport","Group & Event Transport","Guided Safari Tours"], 77 "areaServed": [ 78 { "@type": "City", "name": "Johannesburg" }, 79 { "@type": "Place", "name": "OR Tambo International Airport" }, 80 { "@type": "Place", "name": "Lanseria International Airport" }, 81 { "@type": "AdministrativeArea", "name": "Gauteng" } 82 ], 83 "url": "https://katlegoluxpreview.lovable.app/" 84 } 85 </script>
85 86
86<script type="application/ld+json"> 87 { 88 "@context": "https://schema.org", 89 "@type": "FAQPage", 90 "mainEntity": [ 91 { 92 "@type": "Question", 93 "name": "Do you offer airport transfers to and from OR Tambo and Lanseria?", 94 "acceptedAnswer": { "@type": "Answer", "text": "Yes. We provide luxury airport transfers to OR Tambo, Lanseria and Durban airports with professional chauffeurs and meet-and-greet service." } 95 }, 96 { 97 "@type": "Question", 98 "name": "What areas in Johannesburg and Gauteng do you serve?", 99 "acceptedAnswer": { "@type": "Answer", "text": "We serve all of Johannesburg, Midrand, Sandton, Pretoria and the wider Gauteng region, with long-distance trips across South Africa on request." } 100 }, 101 { 102 "@type": "Question", 103 "name": "How far in advance should I book?", 104 "acceptedAnswer": { "@type": "Answer", "text": "Bookings should be made at least 2 hours before your pickup time. We take bookings 24/7." } 105 }, 106 { 107 "@type": "Question", 108 "name": "Do you handle corporate and group transport?", 109 "acceptedAnswer": { "@type": "Answer", "text": "Yes. We offer corporate transport, conference shuttles, weddings, social clubs and event transport with sedans, executive vehicles and luxury vans." } 110 }, 111 { 112 "@type": "Question", 113 "name": "How is pricing calculated?", 114 "acceptedAnswer": { "@type": "Answer", "text": "Pricing is based on the exact route distance calculated via Google Maps, the vehicle class selected, and the trip type. The final price is shown before you confirm the booking." } 115 } 116 ] 117 } 118 </script>
118 119
119<script type="module" crossorigin src="/assets/index-CErWxwka.js"></script>
119 120 <link rel="stylesheet" crossorigin href="/assets/index-Dq2_jONi.css"> 121 122<style> 123 #lovable-badge { 124 --badge-bg: #1b1b1b; 125 --badge-text: #c5c1b9; 126 --badge-text-hover: #dcdad5; 127 --badge-radius: 6px; 128 --badge-padding: 8px; 129 --badge-gap: 6px; 130 --badge-shadow: 131 0 0 0 1px rgba(0, 0, 0, 0.88), 132 0 1px 0 0 rgba(0, 0, 0, 0.04), 133 0 2px 2px -1px rgba(0, 0, 0, 0.08), 134 0 4px 4px -2px rgba(0, 0, 0, 0.08), 135 0 8px 8px -4px rgba(0, 0, 0, 0.08), 136 0 16px 16px -8px rgba(0, 0, 0, 0.08); 137 --badge-transition-duration: 0.2s; 138 --badge-transition-easing: cubic-bezier(0.16, 1, 0.32, 1); 139 --focus-color: #575ECF; 140 --focus-offset: 2px; 141 --focus-width: 2px; 142 143 position: fixed; 144 bottom: 12px; 145 right: 12px; 146 height: 24px; 147 display: flex; 148 align-items: center; 149 z-index: 1000000; 150 background-color: var(--badge-bg) !important; 151 color: var(--badge-text) !important; 152 border-radius: var(--badge-radius); 153 box-shadow: var(--badge-shadow) !important; 154 font-size: 12px; 155 font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; 156 font-weight: 400 !important; 157 text-transform: none !important; 158 font-feature-settings: normal !important; 159 transform: translateZ(0); 160 will-change: transform, opacity; 161 transition: opacity var(--badge-transition-duration) var(--badge-transition-easing); 162 } 163 164 #lovable-badge.closing { 165 opacity: 0; 166 pointer-events: none; 167 } 168 169 #lovable-badge-cta { 170 display: flex; 171 align-items: baseline; 172 gap: var(--badge-gap); 173 box-sizing: border-box; 174 padding: 4px var(--badge-padding) 0; 175 height: 100%; 176 color: inherit; 177 text-decoration: none; 178 white-space: nowrap; 179 border-radius: var(--badge-radius) 0 0 var(--badge-radius); 180 transition: 181 background-color var(--badge-transition-duration) ease, 182 color var(--badge-transition-duration) ease, 183 transform 0.1s ease; 184 } 185 186 #lovable-badge-cta:hover { 187 background: rgba(255, 255, 255, 0.04); 188 color: var(--badge-text-hover); 189 } 190 191 #lovable-badge-cta:active { 192 transform: scale(0.98); 193 } 194 195 #lovable-badge-cta:focus { 196 outline: none; 197 } 198 199 #lovable-badge-cta:focus-visible { 200 outline: var(--focus-width) solid var(--focus-color); 201 outline-offset: var(--focus-offset); 202 z-index: 1; 203 } 204 205 #lovable-badge-text { 206 line-height: 1; 207 } 208 209 /* The wordmark baseline sits at y=12 of the 16px logo; an empty 12px box 210 makes that the flex baseline so the text aligns to it on any system font. */ 211 #lovable-badge-logo { 212 position: relative; 213 display: block; 214 width: 52px; 215 height: 12px; 216 } 217 218 #lovable-badge-logo svg { 219 position: absolute; 220 top: 0; 221 left: 0; 222 } 223 224 #lovable-badge-divider { 225 width: 1px; 226 height: 24px; 227 background-color: rgba(255, 255, 255, 0.04); 228 flex-shrink: 0; 229 } 230 231 #lovable-badge-close { 232 width: 24px; 233 height: 24px; 234 min-width: 24px; 235 min-height: 24px; 236 cursor: pointer; 237 background: none; 238 border: none; 239 padding: 0; 240 display: flex; 241 align-items: center; 242 justify-content: center; 243 border-radius: 0 var(--badge-radius) var(--badge-radius) 0; 244 flex-shrink: 0; 245 transition: 246 background-color var(--badge-transition-duration) ease, 247 transform 0.1s ease; 248 } 249 250 #lovable-badge-close:hover { 251 background: rgba(255, 255, 255, 0.04); 252 } 253 254 #lovable-badge-close:active { 255 transform: scale(0.92); 256 } 257 258 #lovable-badge-close:focus { 259 outline: none; 260 } 261 262 #lovable-badge-close:focus-visible { 263 outline: var(--focus-width) solid var(--focus-color); 264 outline-offset: calc(var(--focus-offset) * -1); 265 z-index: 1; 266 } 267 268 #lovable-badge-close svg path { 269 fill: var(--badge-text); 270 transition: fill var(--badge-transition-duration) ease; 271 } 272 273 #lovable-badge-close:hover svg path { 274 fill: var(--badge-text-hover); 275 } 276 277 @media (prefers-reduced-motion: reduce) { 278 #lovable-badge, 279 #lovable-badge-cta, 280 #lovable-badge-close, 281 #lovable-badge-close svg path { 282 transition: none; 283 } 284 285 #lovable-badge-cta:active, 286 #lovable-badge-close:active { 287 transform: none; 288 } 289 } 290 291 @media (prefers-contrast: high) { 292 #lovable-badge { 293 --badge-bg: #000; 294 --badge-text: #fff; 295 --badge-text-hover: #fff; 296 border: 2px solid currentColor; 297 } 298 299 #lovable-badge-cta:focus-visible, 300 #lovable-badge-close:focus-visible { 301 outline-width: 3px; 302 } 303 } 304</style>
305<script defer src="/~flock.js" data-proxy-url="/~api/analytics"></script>
305</head> 306 307 <body> 308 <div id="root"></div> 309 310<aside 311 id="lovable-badge" 312 role="complementary" 313 dir="ltr" 314 lang="en" 315 aria-label="Edit with Lovable"> 316 <a 317 id="lovable-badge-cta" 318 target="_blank" 319 href="https://lovable.dev/projects/lovp_00v0jkz95k8mtbcaxqr4swe8se?utm_source=lovable-badge" 320 rel="noopener nofollow" 321 aria-label="Edit with Lovable"> 322 <span id="lovable-badge-text">Edit with</span> 323 <span id="lovable-badge-logo"><svg xmlns="http://www.w3.org/2000/svg" width="52" height="16" fill="none" viewBox="0 0 52 16"> 324 <path fill="#FCFBF8" fill-rule="evenodd" d="M20.318 5.25c.643 0 1.206.14 1.69.418a2.81 2.81 0 0 1 1.118 1.191c.266.513.4 1.115.4 1.807s-.134 1.296-.4 1.812a2.81 2.81 0 0 1-1.118 1.193c-.484.278-1.047.418-1.69.418s-1.208-.14-1.695-.418a2.85 2.85 0 0 1-1.125-1.193c-.262-.516-.393-1.12-.393-1.812s.131-1.294.393-1.807a2.848 2.848 0 0 1 1.125-1.191c.487-.279 1.052-.418 1.695-.418Zm0 1.425c-.27 0-.504.076-.7.228-.193.147-.34.37-.443.67-.102.295-.153.66-.153 1.093 0 .435.05.801.153 1.1.102.3.25.524.443.676.196.147.43.22.7.22.27 0 .502-.073.694-.22.193-.152.341-.375.443-.67.103-.299.153-.667.153-1.106 0-.65-.112-1.145-.337-1.481a1.08 1.08 0 0 0-.953-.51ZM32.7 5.25c.61 0 1.127.1 1.549.3.422.197.74.48.953.849.217.368.325.809.325 1.32v2.704c0 .29.02.562.062.812.044.245.108.4.19.466V12h-1.935a5.895 5.895 0 0 1-.105-.684 7.745 7.745 0 0 1-.02-.228 2.293 2.293 0 0 1-.151.203c-.205.242-.47.437-.793.584-.32.143-.685.215-1.094.215-.406 0-.77-.08-1.094-.24a1.845 1.845 0 0 1-.756-.682 1.984 1.984 0 0 1-.27-1.045c0-.606.178-1.069.535-1.388.356-.324.87-.534 1.542-.633l1.125-.16c.225-.032.403-.074.534-.123a.622.622 0 0 0 .288-.196.549.549 0 0 0 .093-.327.65.65 0 0 0-.11-.367.702.702 0 0 0-.32-.27c-.14-.07-.31-.105-.51-.105-.32 0-.576.083-.768.251-.193.164-.298.39-.314.676h-1.923c.016-.434.147-.82.393-1.155.25-.34.596-.604 1.039-.792.442-.189.954-.283 1.535-.283Zm.99 3.498a.98.98 0 0 1-.215.14 2.49 2.49 0 0 1-.584.178l-.473.092c-.315.061-.553.156-.713.283-.155.127-.233.305-.233.534 0 .23.084.412.252.547.168.135.383.203.645.203s.494-.058.694-.173c.201-.118.355-.282.461-.49.11-.21.166-.448.166-.714v-.6Zm4.526-2.375c.065-.125.138-.243.221-.349.197-.25.437-.44.719-.571.282-.135.6-.203.952-.203.528 0 .988.138 1.377.412.389.275.688.67.896 1.186.21.512.314 1.12.314 1.824 0 .7-.107 1.309-.32 1.825-.213.512-.518.906-.915 1.18-.393.275-.854.412-1.383.412-.352 0-.667-.062-.946-.184a1.832 1.832 0 0 1-.7-.554 2.2 2.2 0 0 1-.234-.383V12h-1.843V3h1.862v3.373Zm1.284.296c-.274 0-.51.085-.707.253-.192.163-.338.397-.436.7a3.376 3.376 0 0 0-.148 1.05c0 .406.05.759.148 1.058.098.299.243.53.436.694.197.164.433.246.707.246.279 0 .512-.082.7-.246.193-.164.336-.395.43-.694.099-.3.148-.652.148-1.058 0-.405-.05-.757-.147-1.056-.095-.299-.238-.53-.43-.694a1.015 1.015 0 0 0-.7-.253Zm9.416-1.419c.602 0 1.136.131 1.604.393.466.262.829.643 1.086 1.143.263.5.394 1.097.394 1.794 0 .25-.002.449-.006.596H47.51c.018.288.071.538.164.75a1.3 1.3 0 0 0 .491.596c.214.13.465.196.757.196.319 0 .583-.082.792-.246.209-.167.34-.403.393-.706h1.862a2.48 2.48 0 0 1-.485 1.235 2.54 2.54 0 0 1-1.051.805c-.439.188-.949.283-1.53.283-.655 0-1.225-.125-1.708-.375a2.672 2.672 0 0 1-1.13-1.143c-.267-.508-.4-1.137-.4-1.887 0-.712.14-1.327.418-1.843a2.86 2.86 0 0 1 1.155-1.186c.491-.27 1.051-.405 1.678-.405Zm-.044 1.345c-.274 0-.516.068-.725.203a1.29 1.29 0 0 0-.479.59 2.045 2.045 0 0 0-.132.498h2.562a1.873 1.873 0 0 0-.138-.602 1.061 1.061 0 0 0-.418-.516 1.243 1.243 0 0 0-.67-.173Z" clip-rule="evenodd"/> 325 <path fill="#FCFBF8" d="m26.605 9.995 1.342-4.566h1.924L27.628 12h-2.07l-2.33-6.57h1.98l1.397 4.565Zm-13.013.143h2.256c1.632 0 1.421 1.837 1.418 1.861h-5.603V3h1.93v7.138Zm31.516 1.861h-1.862V3h1.862v8.999Z"/> 326 <path fill="url(#a)" fill-rule="evenodd" d="M2.7 3c1.492 0 2.7 1.192 2.7 2.663v1.012h.9c1.49 0 2.7 1.192 2.7 2.662S7.791 12 6.3 12H0V5.663C0 4.193 1.209 3 2.7 3Z" clip-rule="evenodd"/> 327 <defs> 328 <radialGradient id="a" cx="0" cy="0" r="1" gradientTransform="matrix(-1.54236 7.07838 -10.231 -2.15602 4.627 5.022)" gradientUnits="userSpaceOnUse"> 329 <stop offset=".106" stop-color="#FE7B02"/> 330 <stop offset=".394" stop-color="#FE3F21"/> 331 <stop offset=".608" stop-color="#F858BC"/> 332 <stop offset=".929" stop-color="#575ECF"/> 333 </radialGradient> 334 </defs> 335</svg> 336 337</span> 338 </a> 339 340 <span id="lovable-badge-divider" aria-hidden="true"></span> 341 342 <button 343 id="lovable-badge-close" 344 aria-label="Dismiss" 345 title="Dismiss"
346 type="button"> 347 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16" aria-hidden="true"> 348 <path d="M10.646 4.646a.5.5 0 1 1 .707.708L8.707 8l2.646 2.646a.5.5 0 1 1-.707.707L8 8.707l-2.646 2.646a.5.5 0 1 1-.708-.707L7.293 8 4.646 5.354a.5.5 0 1 1 .708-.708L8 7.293l2.646-2.647Z"/> 349 </svg> 350 </button> 351</aside>
352<script> 353 (() => { 354 if (window.self !== window.top || navigator.userAgent.includes('puppeteer')) { 355 const badge = document.querySelector('#lovable-badge'); 356 if (badge) { 357 badge.style.display = 'none'; 358 } 359 return; 360 } 361 362 const closeButton = document.querySelector('#lovable-badge-close'); 363 if (closeButton) { 364 closeButton.addEventListener('click', function(event) { 365 event.preventDefault(); 366 event.stopPropagation(); 367 const badge = document.querySelector('#lovable-badge'); 368 if (badge) { 369 badge.classList.add('closing'); 370 setTimeout(function() { 371 if (badge) { 372 badge.style.display = 'none'; 373 } 374 }, 240); 375 } 376 }); 377 } 378 })(); 379</script>
379 380</body> 381</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.