1<!DOCTYPE html> 2<html lang="en"> 3 <head> 4 <meta charset="utf-8"/> 5 <link href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Crect width='64' height='64' rx='16' fill='%230F2E4D'/%3E%3Cpath d='M14 44 C20 44 24 28 30 24 C36 20 42 26 50 22' stroke='%23B49A6C' stroke-width='4' fill='none' stroke-linecap='round'/%3E%3Cpath d='M14 44 C20 44 24 28 30 24 C36 20 42 26 50 22' stroke='%23E8E2D6' stroke-width='1.5' fill='none' stroke-linecap='round' opacity='0.6'/%3E%3C/svg%3E" rel="icon" type="image/svg+xml"/> 6 <meta content="width=device-width, initial-scale=1.0" name="viewport"/> 7 <meta content="Internal administration for Ambiente Travel." name="description"/> 8 <link href="/manifest.json" rel="manifest"/> 9 <link href="https://fonts.googleapis.com" rel="preconnect"/> 10 <link crossorigin="" href="https://fonts.gstatic.com" rel="preconnect"/> 11 <link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500&family=Montserrat:wght@300;400;500;600;700&display=swap" rel="stylesheet"/> 12 <title> 13 Admin Panel | Ambiente Travel 14 </title> 15
15<script crossorigin="" src="/assets/index-CeNjq5wF.js" type="module"> 16 </script>
16 17 <link crossorigin="" href="/assets/index-Db-rPzsM.css" rel="stylesheet"/> 18
18<script type="module"> 19 if (window.self === window.top) { 20 let lastPath = ""; 21 function getPageNameFromPath(path) { 22 const segments = path.split("/").filter(Boolean); 23 return segments[0] || null; 24 } 25 function trackPageView() { 26 const path = window.location.pathname; 27 if (path === lastPath) return; 28 lastPath = path; 29 const pageName = getPageNameFromPath(path) || "home"; 30 const appId = "69a62d9872bf72a85738b6f8"; 31 if (!appId) return; 32 fetch(`/api/app-logs/${appId}/log-user-in-app/${pageName}`, { 33 method: "POST", 34 }).catch(() => {}); 35 } 36 const originalPushState = history.pushState.bind(history); 37 history.pushState = function (...args) { 38 originalPushState(...args); 39 trackPageView(); 40 }; 41 const originalReplaceState = history.replaceState.bind(history); 42 history.replaceState = function (...args) { 43 originalReplaceState(...args); 44 trackPageView(); 45 }; 46 window.addEventListener("popstate", trackPageView); 47 trackPageView(); 48} 49 </script>
49 50 <meta content="Admin Panel | Ambiente Travel" property="og:title"/> 51 <meta content="Internal administration for Ambiente Travel." property="og:description"/> 52 <meta content="https://media.base44.com/images/public/69a62d9872bf72a85738b6f8/6724e1a27_logo.jpg/v1/fill/w_1200,h_630/6724e1a27_logo.jpg" property="og:image"/> 53 <meta content="https://ambientetravel.base44.app/AdminPanel" property="og:url"/> 54 <meta content="website" property="og:type"/> 55 <meta content="Ambiente Travel" property="og:site_name"/> 56 <meta content="Admin Panel | Ambiente Travel" name="twitter:title"/> 57 <meta content="Internal administration for Ambiente Travel." name="twitter:description"/> 58 <meta content="https://media.base44.com/images/public/69a62d9872bf72a85738b6f8/6724e1a27_logo.jpg/v1/fill/w_1200,h_630/6724e1a27_logo.jpg" name="twitter:image"/> 59 <meta content="summary_large_image" name="twitter:card"/> 60 <meta content="https://ambientetravel.base44.app/AdminPanel" name="twitter:url"/> 61
61<script> 62 (function () { 63 var titles = {"/": "Ambiente Travel", "/about": "About | Ambiente Travel", "/admin-panel": "Admin Panel | Ambiente Travel", "/adminpanel": "Admin Panel | Ambiente Travel", "/ambimedi": "AmbiMEDI \u2014 Italy & the Mediterranean | Ambiente Travel", "/ambi-medi": "AmbiMEDI \u2014 Italy & the Mediterranean | Ambiente Travel", "/ambi-medi-products": "AmbiMEDI Products | Ambiente Travel", "/ambimediproducts": "AmbiMEDI Products | Ambiente Travel", "/ambiturk": "AmbiMENAT \u2014 T\u00fcrkiye & MENAT | Ambiente Travel", "/ambi-turk": "AmbiMENAT \u2014 T\u00fcrkiye & MENAT | Ambiente Travel", "/contact": "Contact | Ambiente Travel", "/destinations": "Destinations | Ambiente Travel", "/plan-journey": "Plan Your Journey | Ambiente Travel", "/planjourney": "Plan Your Journey | Ambiente Travel", "/profile": "Profile | Ambiente Travel", "/shareditinerary": "Shared Itinerary | Ambiente Travel", "/shared-itinerary": "Shared Itinerary | Ambiente Travel", "/tripdetail": "Trip Detail | Ambiente Travel", "/trip-detail": "Trip Detail | Ambiente Travel", "/trips": "Trips | Ambiente Travel", "/dmc": "Destination Management (DMC) | Ambiente Travel", "/mice": "Meetings & Events (MICE) | Ambiente Travel", "/ambimare": "AmbiMARE \u2014 Ocean & River Cruises | Ambiente Travel", "/holiday-finder": "AmbiDACH \u2014 Pauschalreisen & Urlaub | Ambiente Travel", "/holidayfinder": "AmbiDACH \u2014 Pauschalreisen & Urlaub | Ambiente Travel", "/home": "Ambiente Travel"}; 64 // PascalCase boundaries -> "-", mirroring _PASCAL_BOUNDARY_RE without lookbehind 65 // (old Safari fails to PARSE a lookbehind, taking the whole script down). 66 var dashed = function (s) { 67 return s.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/([A-Z])([A-Z][a-z])/g, "$1-$2"); 68 }; 69 var decode = function (s) { 70 // A %2F inside ONE segment must not become a structural separator: /blog/foo%2Fbar is a 71 // dynamic slug, and letting it split would match a static /blog/foo/bar and write ITS title. 72 try { var d = decodeURIComponent(s); return d.indexOf("/") < 0 ? d : s; } catch (e) { return s; } 73 }; 74 var segments = function (path) { return path.split("/").filter(Boolean).map(decode); }; 75 var norm = function (path) { 76 var parts = segments(path).map(function (s) { return dashed(s).toLowerCase(); }); 77 return parts.length ? "/" + parts.join("/") : "/"; 78 }; 79 var lastPath = location.pathname, written = document.title, on = true; 80 var sync = function () { 81 // Path only: a hash/query change is the same page, and the SDK strips its own auth 82 // params with replaceState -- neither must clobber a server-rendered title in place. 83 if (!on || location.pathname === lastPath) return; 84 lastPath = location.pathname; 85 if (document.title !== written) { on = false; return; } 86 // Write ONLY a title the map proves. An unmapped path is a dynamic route (/blog/:slug) the 87 // map cannot carry, and writing a placeholder there is destructive, not merely vague: the 88 // prerender worker runs no setUserAgent, so its capture browser reads as human and executes 89 // this script, and coordinator.js's settle wait explicitly tolerates a full navigation -- 90 // a redirect landing on an unmapped path would bake the placeholder into the stored 91 // snapshot. Leaving the title alone degrades to today's behavior instead. 92 // Exact lookup only. A dash-stripped retry here would let a genuinely different /set-up 93 // claim /setup: the map carries a dash-free key only where a PascalCase boundary put the 94 // dashes there, and the client cannot tell the two apart. The map emits every reachable 95 // shape per segment instead (_client_url_variants). 96 var title = titles[norm(location.pathname)]; 97 if (title === undefined) return; 98 document.title = title; 99 // Re-read: the setter stores verbatim but the getter strips and collapses whitespace, so 100 // keeping the assigned string would make the next sync() read our own write as the app's. 101 written = document.title; 102 }; 103 var wrap = function (fn) { 104 // The history entry is already pushed by the time sync() runs, so a throw here would 105 // surface inside the host app's router and break navigation. This is injected into apps 106 // we cannot test, so it swallows rather than trusting the trace. 107 return function () { 108 var r = fn.apply(this, arguments);
109 try { sync(); } catch (e) {} 110 return r; 111 }; 112 }; 113 history.pushState = wrap(history.pushState); 114 history.replaceState = wrap(history.replaceState); 115 window.addEventListener("popstate", sync); 116})(); 117 </script>
117 118 <meta content="yes" name="mobile-web-app-capable"/> 119 <meta content="black" name="apple-mobile-web-app-status-bar-style"/> 120 <meta content="Ambiente Travel" name="apple-mobile-web-app-title"/> 121 <link href="https://ambientetravel.base44.app/AdminPanel" rel="canonical"/> 122
122<script data-seo-source="builder" type="application/ld+json"> 123 {"name": "Ambiente Travel", "@context": "https://schema.org", "@type": "WebSite", "url": "https://ambientetravel.com"} 124 </script>
124 125
125<script data-seo-source="builder" type="application/ld+json"> 126 {"name": "Ambiente Travel", "logo": "https://qtrypzzcjebvfcihiynt.supabase.co/storage/v1/object/public/base44-prod/public/69a62d9872bf72a85738b6f8/9715f5b85_logo.png", "@context": "https://schema.org", "@type": "Organization", "url": "https://ambientetravel.com"} 127 </script>
127 128
128<script data-seo-source="builder" type="application/ld+json"> 129 {"@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://ambientetravel.base44.app/"}, {"@type": "ListItem", "position": 2, "name": "Admin Panel | Ambiente Travel", "item": "https://ambientetravel.base44.app/AdminPanel"}]} 130 </script>
130 131 <meta content="noindex, follow" name="robots"/> 132 </head> 133 <body> 134 <div id="root"> 135 <div data-seo-source="builder" id="seo-snapshot" style="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;"> 136 <main> 137 <header> 138 <h1> 139 Admin Panel | Ambiente Travel 140 </h1> 141 <p> 142 Internal administration for Ambiente Travel. 143 </p> 144 </header> 145 <nav aria-label="Pages"> 146 <h2> 147 Pages 148 </h2> 149 <ul> 150 <li> 151 <a href="/"> 152 Home 153 </a> 154 </li> 155 <li> 156 <a href="/About"> 157 About 158 </a> 159 â Ambiente Tours GmbH in Rennerod, Ambiente Turizm in KuÅadası and the Rome office â the story behind Ambiente Travelâs four houses. 160 </li> 161 <li> 162 <a href="/AmbiMedi"> 163 Ambi Medi 164 </a> 165 â The Mediterranean port by port: Italy with Carrani since 1925, and the Türkiye Aegean coast from our own İstanbul and KuÅadası offices. 166 </li> 167 <li> 168 <a href="/AmbiMediProducts"> 169 Ambi Medi Products 170 </a> 171 â Mediterranean programmes, shore excursions and day tours from AmbiMEDI. 172 </li> 173 <li> 174 <a href="/AmbiTurk"> 175 Ambi Turk 176 </a> 177 â Türkiye, the Caucasus, North Africa and the Arabian Peninsula â our own ground across 13 countries, with Türkiye as the anchor. 178 </li> 179 <li> 180 <a href="/Contact"> 181 Contact 182 </a> 183 â Talk to Ambiente Travel â trade desk, MICE desk and traveller enquiries. 184 </li> 185 <li> 186 <a href="/Destinations"> 187 Destinations 188 </a> 189 â Where Ambiente Travel operates: guides across Türkiye, the Caucasus, North Africa, the Arabian Peninsula and the Mediterranean. 190 </li> 191 <li> 192 <a href="/PlanJourney"> 193 Plan Journey 194 </a> 195 â Tell us how you like to travel and we will shape the journey around it. 196 </li> 197 <li> 198 <a href="/Profile"> 199 Profile 200 </a> 201 â Your Ambiente Travel profile and saved journeys. 202 </li> 203 <li> 204 <a href="/SharedItinerary"> 205 Shared Itinerary 206 </a> 207 â A journey itinerary shared with you by Ambiente Travel. 208 </li> 209 <li> 210 <a href="/TripDetail"> 211 Trip Detail 212 </a> 213 â Trip details, inclusions and departures from Ambiente Travel. 214 </li> 215 <li> 216 <a href="/Trips"> 217 Trips 218 </a> 219 â Curated journeys from Ambiente Travelâs four houses â AmbiMENAT, AmbiMEDI, AmbiMARE and AmbiDACH. 220 </li> 221 <li> 222 <a href="/dmc"> 223 Dmc 224 </a> 225 â Net rates, ground handling, venue sourcing and delegate services across 13 destinations. Trade-only DMC coverage from Ambiente Travel. 226 </li> 227 <li> 228 <a href="/mice"> 229 Mice 230 </a> 231 â Congresses, incentives and galas staged by our own regional teams across 13 destinations. Trade-only MICE productions from Ambiente Travel. 232 </li> 233 <li> 234 <a href="/ambimare"> 235 Ambi Mare 236 </a> 237 â The sea, ocean and river: cruise programmes plus 11 European rivers and 59 ports, from Ambiente Travel. 238 </li> 239 <li> 240 <a href="/HolidayFinder"> 241 Holiday Finder 242 </a> 243 â Package holidays from 35 D-A-CH airports, powered by Ambiente Tours GmbH in Rennerod. 244 </li> 245 </ul> 246 </nav> 247 </main> 248 </div> 249 </div> 250 </body> 251</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.