PageSourceSearch

https://ambientetravel.base44.app/AdminPanel

html ambientetravel.base44.app collected 2026-10-03 03:11:12 UTC 12,757 bytes, 251 lines download raw bytes

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&amp;family=Montserrat:wght@300;400;500;600;700&amp;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.