PageSourceSearch

https://londoncitytours.com/assets/index-mWaEsDqe.js

js londoncitytours.com collected 2026-10-10 02:08:46 UTC 357,527 bytes, 3,580 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-CQA0WRlX.js","assets/react-vendor-C1Oz1_hK.js","assets/preload-DNrUkv91.js","assets/router-vendor-PcWO1qI7.js","assets/vendor-DdG2zq_S.js","assets/ServiceTypeList-DPgN1Spq.js","assets/i18n-vendor-Dtk714EP.js","assets/tour-order-CGyTFwvF.js","assets/motion-vendor-rfAeYhba.js","assets/query-vendor-BdPpZYoH.js","assets/slug-BPAIVvR1.js","assets/TourDifficulty-BYMsUsbS.js","assets/popular-tours-BS8Iu-KO.js","assets/index-Cyh2OYGV.js","assets/slug-K1YeNGoV.js","assets/index-D3MHJ75M.js","assets/booking-vendor-_F13ttmW.js","assets/booking-vendor-BhUgVOze.css","assets/confirmation-DfxJg1ii.js","assets/about-BI5_vIQf.js","assets/faq-CsJZZ5dy.js","assets/contact-CvTkTJ56.js","assets/terms-Cx1AfFbG.js","assets/private-walking-tours-uCAXTNpu.js","assets/ServiceLandingPage-DFeKhZ4T.js","assets/driver-guided-tours-5kocVefa.js","assets/chauffeur-driven-tours-DIXPeYmG.js","assets/booking-flow-proposal-Dr86UdMu.js","assets/index-CEf4Ab6t.js","assets/book-siY6i8Tu.js","assets/confirmation-6vS1HniW.js","assets/offer-Ua2lAj81.js","assets/_404-CR656lpy.js","assets/index-D_Ouvygf.js","assets/auth-vendor-Bdz6knaU.js","assets/button-DpvK8XW2.js","assets/radix-vendor-DUo3ysHA.js","assets/AgencyAvailability-DQU4IZaJ.js","assets/CookieBanner-cVqWjgY7.js"])))=>i.map(i=>d[i]);
2var _a, _b, _c, _d, _e, _f, _g, _h, _i;
3import { _ as __vitePreload } from "./preload-DNrUkv91.js";
4import { r as reactExports, j as jsxRuntimeExports, e as ReactDOM, R as React2 } from "./react-vendor-C1Oz1_hK.js";
5import { Q as QueryClient, a as QueryClientProvider } from "./query-vendor-BdPpZYoH.js";
6import { ah as ExternalLink, ai as Mail, aj as Phone, ak as ChevronDown, al as MapPin, am as Globe, an as X, ao as Menu, ap as twMerge, aq as clsx, ar as Helmet, as as Search, at as Star, au as ArrowRight, av as objectType, aw as stringType, ax as arrayType, ay as Shield, az as Car, aA as CircleCheckBig, aB as ChevronRight, aC as HelmetProvider } from "./vendor-DdG2zq_S.js";
7import { i as instance, B as Browser, a as initReactI18next, u as useTranslation } from "./i18n-vendor-Dtk714EP.js";
8import { L as Link, u as useLocation, a as useParams, S as ScrollRestoration, N as Navigate, b as useNavigate, c as createBrowserRouter, R as RouterProvider$1, O as Outlet } from "./router-vendor-PcWO1qI7.js";
9import { A as AnimatePresence, m as motion } from "./motion-vendor-rfAeYhba.js";
10const supportedLanguages = [{
11  code: "en",
12  name: "English",
13  dir: "ltr"
14}, {
15  code: "pt",
16  name: "Português",
17  dir: "ltr"
18}, {
19  code: "es",
20  name: "Español",
21  dir: "ltr"
22}];
23const defaultLanguage = "en";
24const languageCodes = supportedLanguages.map((lang) => lang.code);
25function isLanguageSupported(code) {
26  return languageCodes.includes(code);
27}
28function getLanguage(code) {
29  return supportedLanguages.find((lang) => lang.code === code);
30}
31const nav$2 = { "destinations": "Destinations", "tours": "All Tours", "about": "About Us", "faq": "FAQ", "contact": "Contact", "bookNow": "Explore Destinations" };
32const footer$2 = { "destinations": "Destinations", "information": "Information", "contact": "Contact", "paymentsAccepted": "Payments Accepted", "copyright": "© {{year}} London City Tours. All rights reserved.", "tagline": "Richard Cerquera is an Institute of Tourist Guiding Registered 'Blue Badge' Tourist Guide.", "credentials": "Transport for London Private Hire Operator\nThe Driver Guides Association · Licence #2114", "whatsapp": "WhatsApp Us", "languages": "English · Português · Español", "stripeNote": "Stripe 3D Secure 2 · SSL Encrypted", "links": { "about": "About Richard", "faq": "FAQ", "contact": "Contact Us", "terms": "Terms & Conditions", "showTickets": "Show Tickets" }, "services": { "heading": "Our Services", "walking": "Walking Tours", "driverGuided": "Driver-Guided Tours", "chauffeur": "Chauffeur-Driven Tours", "allTours": "All Tours" } };
33const home$3 = { "badge": "Institute of Tourist Guiding Member", "heroTitle": "Tours of", "heroTitleHighlight": "London & Beyond", "heroTypes": { "heading": "Private & Public Tours", "walking": "Walking Tours", "driver": "Driver-Guided Tours", "chauffeur": "Chauffeur-Driven Tours" }, "heroSubtitle": "Experience the destination, not just the sights", "heroBody": "Fully private, bespoke door-to-door tours for individuals, couples, families and groups. Availability always up to date — book instantly online.", "browseAllTours": "Explore Destinations", "whatsappUs": "WhatsApp Us", "search": { "placeholder": "Search for adventures", "ariaLabel": "Search tours", "noResults": 'No tours found for "{{query}}"', "from": "from", "privateTour": "Private Tour" }, "trust": { "tripadvisor": "5-star TripAdvisor rated", "liveAvailability": "Live Availability", "instantConfirmation": "Instant Confirmation", "privateTours": "Private Tours", "publicTours": "Public Tours", "blueBadge": "Accredited Blue Badge Tourist Guides", "vehicle": "Executive vehicle available" }, "destinations": { "sectionLabel": "Private Tours", "title": "Choose Your Destination", "viewAll": "View all tours →", "viewTours": "View tours", "viewAllTours": "View All Tours", "mostPopularTours": "Most Popular Tours", "from": "From", "perGroup": "per group", "priceDepends": "Final price depends on your selected options.", "upToPasse
33ngers": "Ideal for up to 6 guests", "tripadvisor": "5.0 TripAdvisor rated", "category": { "cityTour": "City Tour", "dayTrip": "Day Trip" } }, "howItWorks": { "sectionLabel": "Simple & Secure", "title": "How It Works", "steps": [{ "title": "Choose Your Destination", "body": "Browse our tours — London city tours or day trips to Stonehenge, Windsor Castle, the Cotswolds, Oxford, Bath, and more." }, { "title": "Select Date & Group Size", "body": "Pick your preferred date. All tours are private — just your group, no strangers. Availability is always live and up to date." }, { "title": "Pay Securely & Confirm", "body": "Book and pay online via Stripe. Your confirmation arrives instantly. No calls, no emails, no waiting." }] }, "about": { "sectionLabel": "Your Guide", "title": "Meet Richard Cerquera", "body1": "Richard Cerquera is an Institute of Tourist Guiding Registered <strong>'Blue Badge' Tourist Guide</strong> — the highest qualification for professional tour guiding in the UK, often regarded as the gold standard of tourist guiding. On Driver-Guided Tours and Chauffeur-Driven Tours with a Private Guide, Richard Cerquera is also an <strong>IAM RoadSmart Advanced Driver</strong>, helping ensure a smooth and safe journey throughout the day.", "body2": "Tours are available in <strong>English, Portuguese, and Spanish</strong>. All tours are private, fully tailored to your group, and completely flexible.", "readMore": "Read more about Richard", "blueBadge": "Registered", "blueBadgeTitle": "Blue Badge Tourist Guide", "professionalMemberships": "Professional Memberships", "itgRegisterLink": "View on the Institute of Tourist Guiding Register", "credentials": { "blueBadge": { "title": "Blue Badge Tourist Guide", "body": "The highest qualification for professional tour guiding in the UK — the gold standard." }, "iam": { "title": "IAM RoadSmart Advanced Driver", "body": "IAM RoadSmart Advanced Driver training improves driving standards and enhances road safety, using the British police's system of car control. All Driver-Guided Tours and Chauffeur-Driven Tours with a Private Guide are conducted in a premium private vehicle." }, "languages": { "title": "English · Português · Español", "body": "Tours available in three languages. We speak your language." } } }, "reviews": { "sectionLabel": "TripAdvisor Reviews", "title": "What Our Guests Say", "viewAll": "View all reviews on TripAdvisor", "ratedExcellent": "Rated Excellent on TripAdvisor" }, "cta": { "sectionLabel": "Ready to Explore?", "title": "Book Your Private Tour Today", "body": "All tours are fully private — just your group. Availability is always live. Book online in minutes and receive instant confirmation." } };
34const tours$3 = { "bestSeller": "Most Popular", "distanceLabel": "Approx. {{distance}} covered", "pageTitle": "All Tours", "metaDescription": "Browse all private guided tours — London city tours and day trips to Stonehenge, Windsor Castle, the Cotswolds, Oxford, Bath, and Hampton Court Palace.", "heroLabel": "Private Guided Tours", "heroTitle": "Choose Your Tour", "heroBody": "All tours are fully private — just your group, no strangers. Led by Richard Cerquera, registered Blue Badge Tourist Guide.", "cityToursLabel": "City Tours", "cityToursTitle": "London", "dayTripsLabel": "Day Trips from London", "dayTripsTitle": "Beyond London", "from": "From", "perGroup": "per group", "priceDepends": "Final price depends on your selected options.", "upToPassengers": "Ideal for up to 6 guests", "tripadvisor": "5.0 TripAdvisor rated", "rating": "5.0", "viewBook": "View Tour & Book →", "bespoke": { "title": "Need a Bespoke Tour?", "body": "All tours are fully customisable. Have a specific itinerary in mind? A corporate group? A special occasion? Get in touch and Richard will design the perfect experience for you.", "enquire": "Request a bespoke quote", "whatsapp": "WhatsApp Us" } };
35const tourDetail$2 = { "allTours": "All Tours", "aboutTour": "About This Tour", "tourOptions": "Tour Options", "highlights": "Highlights", "included": "What's Included", "notIncluded": "Not Included", "privateTour": "Private Tour", "perGroup": "per group", "priceDepends": "Final price depends on your selected options.", "upToPasse
35ngers": "Ideal for up to 6 guests", "bookTour": "Book Now", "bookingIncludes": "Booking Includes", "bookThisTour": "Check availability", "viewDetails": "View tour details", "youMightAlsoLike": "You Might Also Like", "vehicleNote": "Combination and long-distance tours are particularly well suited to Driver-Guided Tours or Chauffeur-Driven Tours with a Private Guide — ideal for private groups of up to 6 guests.", "vehicleNoteLarge": "For larger groups, separate transport arrangements will be required.", "meta": { "private": "Fully private — your group only", "doorToDoor": "Door-to-door service", "languages": "English · Portuguese · Spanish", "vehicle": "Executive vehicle included", "vehicleChauffeur": "Executive vehicle with dedicated chauffeur", "confirmation": "Instant booking confirmation" }, "londonInspiration": { "sectionLabel": "Places to Explore", "heading": "Where shall we go?", "intro": "A few ideas for your day in London — every itinerary is shaped around your interests. These are possible places to explore, not guaranteed inclusions.", "manyMore": "+ many more", "disclaimer": "Your guide will tailor the itinerary to your group. Not every location below can be covered in a single tour, and some attractions require separate admission.", "showMore": "Explore more possibilities", "showLess": "Show less" } };
36const booking$2 = { "pageTitle": "Book Your Tour", "subtitle": "Private Guided Tour", "backTo": "Back to {{tour}}", "stepOf": "Step {{step}} of 4", "step1": { "title": "Choose your tour", "subtitle": "Select a destination to get started", "num": "1" }, "step2": { "title": "Choose your experience", "subtitle": "How would you like to explore?", "num": "2", "date": "Preferred Date", "guests": "Number of Guests", "guest": "guest", "guests_plural": "guests", "walking": "Blue Badge Tourist Guide — Walking Tour", "walkingTagline": "Guided on foot with a Blue Badge Tourist Guide", "walkingDesc": "Your Blue Badge Tourist Guide leads the tour entirely on foot. No vehicle — just expert, personal guiding through the city.", "walkingMax": "Ideal for up to 57 guests", "walkingAway": "Blue Badge Tourist Guide — On Foot at Destination", "walkingAwayTagline": "Guided on foot once you arrive", "walkingAwayDesc": "Your Blue Badge Tourist Guide meets you at the destination and leads the tour entirely on foot. Transport to the destination is arranged separately.", "walkingAwayNote": "Transport to the destination must be arranged separately (car, train or coach) and comply with private hire regulations.", "driverGuided": "Driver-Guided Tours", "driverGuidedTagline": "Executive vehicle included — Richard drives and guides", "driverGuidedDesc": "Richard acts as both your driver and Blue Badge Tourist Guide — seamless, personal, and efficient. Executive vehicle included, door-to-door.", "driverGuidedMax": "Ideal for up to 6 guests", "chauffeurGuide": "Chauffeur-Driven Tours with a Private Guide", "chauffeurGuideTagline": "Executive vehicle with dedicated chauffeur included", "chauffeurGuideDesc": "A dedicated chauffeur handles the driving while your Blue Badge Tourist Guide focuses entirely on you. Executive vehicle with dedicated chauffeur, door-to-door.", "chauffeurGuideMax": "Ideal for up to 6 guests", "groupSize": "Group size", "driverGuidedDisabledHeading": "Driver-Guided availability is currently limited for tours outside London.", "driverGuidedDisabledBody": "Chauffeur-Driven Tours with a Private Guide remain fully available — offering the same expert guiding experience with a dedicated chauffeur and executive vehicle.", "driverGuidedDisabledRecommendLabel": "Recommended alternative", "driverGuidedDisabledRecommendValue": "Private Chauffeur + Official London Tourist Guide", "driverGuidedDisabledCta": "View Chauffeur-Driven Tours", "driverGuidedDisabledPill": "Limited Availability" }, "step3": { "title": "Customise your tour", "subtitle": "Choose your duration, language, and group size", "num": "3", "firstName": "First Name", "lastName": "Last Name", "email": "Email Address", "phone": "Phone Number", "pickup": "Pickup Address", "pickupPlaceholder": "Hotel name or full address in London", "specialRequests": "Special Requests", "specialRequestsOptional": "(optional)", "specialRequestsPlaceholder": "Any specific places you'd like to visit, accessibility requirements, etc.", "duration": "Duration", "vehicle": "Your Vehicle", "language": "Language", "groupSize": "Group size", "adults": "Adults", "adultsNote": "", "children": "Children", "childrenNote": "", "infants": "Infants", "infantsNote": "", "groupSizeNote": "Adults + children + infants count towards the maximum group capacity.", "totalGuests": "Total guests", "totalPassengers": "Total passengers", "maxGuests": "(max {{n}} guests)", "maxPassengers": "(max {{n}} guests)", "guests": "guests", "passengers": "guests", "upToPasse
36ngers": "Up to {{n}} guests", "enquiry": "enquiry", "estimatedTotal": "Estimated total", "maxPassengersWarning": "This experience is ideal for up to {{n}} guests. For larger groups, please request a bespoke quote.", "largeGroupWarning": "Groups over 57 require a custom quote. Continue to request a bespoke price.", "requestQuote": "Request a bespoke quote →", "reviewPricing": "Check Availability →", "bilingualNote": "For bilingual or trilingual tours, please contact me.", "bilingualUpgrade": { "label": "Language upgrade", "sectionTitle": "Add a language upgrade", "description": "Have your tour delivered in two or three languages simultaneously. Ideal for mixed-language groups.", "options": { "en-pt": "English + Portuguese", "en-es": "English + Spanish", "trilingual": "Trilingual tour: English + Portuguese + Spanish" }, "noUpgrade": "No language upgrade" } }, "step4": { "title": "Your price", "subtitle": "Fixed price — no hidden fees", "breakdown": "Price breakdown", "privateTour": "{{label}} private tour", "weekendSupplement": "Weekend supplement", "weekendNote": "Saturday / Sunday (+{{pct}}%)", "totalForGroup": "Total for your group", "noHiddenFees": "No hidden fees. Secure payment via Stripe.", "continue": "Select date & time →", "back": "← Back to options", "largeGroup": "Large group detected", "customDuration": "Custom duration selected", "largeGroupBody": "Groups of {{n}} require a bespoke quote. Richard will prepare a personalised price for your group.", "customDurationBody": "You selected a custom duration. Richard will work with you to create the perfect itinerary and price.", "indicative": "indicative", "chargedInGBP": "You will be charged in GBP." }, "step5": { "title": "Choose date & time", "subtitle": "Select your preferred start date and time", "date": "Date", "startTime": "Start time", "continue": "Continue to your details →", "back": "← Back to customise your tour", "slotsError": "Could not load available times. Please try again.", "noSlots": "No available times for this date. Please choose another date.", "weekendNotice": "Weekend booking — a +{{pct}}% supplement applies.", "weekdayRate": "weekday rate applies", "morning": "Morning", "afternoon": "Afternoon", "evening": "Evening", "enquireStrip": "Enquire", "closedTitle": "Not available on this day", "closedBodyAttraction": "{name} is closed on this day of the week.", "closedBodyGeneric": "An attraction on this tour is closed on this day of the week.", "closedBodySuffix": "Please choose a different date, or", "closedContact": "contact us", "closedSuffix2": "if you have questions.", "enquireTitle": "No online availability for this date.", "enquireBody": "Please", "enquireLink": "contact us to enquire", "enquireBody2": "about availability for this tour.", "legendAm": "AM = Morning", "legendPm": "PM = Afternoon", "legendEve": "EVE = Evening", "legendFullDay": "Full day = Full-day tour", "blockAm": "AM", "blockPm": "PM", "blockEve": "EVE", "blockFullDay": "Full day" }, "step6": { "title": "Your details", "subtitle": "You'll be redirected to Stripe's secure checkout.", "summaryTitle": "Booking summary", "tour": "Tour", "experience": "Experience", "duration": "Duration", "vehicle": "Vehicle", "language": "Language", "guests": "Guests", "date": "Date", "time": "Time", "walking": "Walking Tours", "driverGuided": "Driver-Guided Tours", "chauffeurGuide": "Chauffeur-Driven Tours with a Private Guide", "contactSectionTitle": "Contact Details", "pickupSectionTitle": "Pickup & Accommodation", "pickupSectionSubtitle": "Your pickup details help ensure a smooth and personalised experience.", "firstName": "First Name", "lastName": "Last Name", "email": "Email Address", "phone": "Mobile / WhatsApp Number", "phoneHint": "Include your full international dialling code, e.g. +44 7700 000000", "pickupAddress": "Pickup Address", "pickupAddressHint": "Hotel, residence, Airbnb, or apartment address in London", "postcode": "Postcode / ZIP Code", "postcodeHint": "Required for accurate pickup location", "accommodationName": "Accommodation Name", "accommodationNameHint": "Hotel, Airbnb, or apartment name (optional but helpful)", "notes": "Additional Notes", "notesHint": "Flight details, accessibility requirements, children, luggage, special requests…", "notesOptional": "(optional)", "gdprNotice": "Your personal data is collected solely to fulfil your booking and provide your tour. It is stored securely and never shared with third parties except as required to process your payment (Stripe). You may request deleti
36on of your data at any time by contacting us.", "phoneRequired": "Mobile / WhatsApp number is required", "phoneInvalid": "Please include your full international dialling code (e.g. +44…)", "postcodeRequired": "Postcode is required for door-to-door tours" }, "priceSummary": { "title": "Your selection", "noTour": "No tour selected yet", "experience": "Experience", "duration": "Duration", "vehicle": "Vehicle", "language": "Language", "group": "Group", "date": "Date", "time": "Time", "total": "Total", "indicative": "indicative", "weekendSupplement": "Includes weekend supplement (+{{pct}}%)", "customQuote": "Custom quote", "largeGroup": "Large group — bespoke pricing", "customDuration": "Custom duration — contact us", "loading": "Loading pricing…", "selectOptions": "Select options to see price", "baseTour": "Tour price", "bilingualUpgrade": "Language upgrade", "walking": "Walking Tours", "driverGuided": "Driver-Guided Tours", "chauffeurGuide": "Chauffeur-Driven Tours with a Private Guide", "trust": { "confirmation": "Instant booking confirmation", "stripe": "Secure payment via Stripe" } }, "proceedToPayment": "Proceed to payment — £{{price}}", "redirecting": "Redirecting to payment...", "stripeNote": "You'll be redirected to Stripe's secure checkout. SSL encrypted. No card details stored on this site.", "total": "Total", "allTaxes": "Per group · All taxes included", "bookingIncludes": "Booking Includes", "languages": { "en": "English", "pt": "Portuguese", "es": "Spanish" } };
37const confirmation$2 = { "title": "Booking Confirmed!", "body1": "Thank you for booking with London City Tours. A confirmation email has been sent to your inbox with all the details of your tour.", "body2": "Richard will be in touch ahead of your tour to confirm pickup arrangements and answer any questions.", "getInTouch": "Need to get in touch?", "backHome": "Back to Home", "moreTours": "Browse More Tours", "bookAnother": { "eyebrow": "Planning more than one experience?", "title": "Book Another Tour", "body": "You can book a second tour for a different date or destination. Your contact details will be pre-filled to save you time.", "cta": "Book Another Tour", "browse": "Browse All Tours" } };
38const about$3 = { "heroLabel": "Your Guide", "heroTitle": "About Us", "heroBody": `Welcome to London City Tours. Richard Cerquera is an <a href="https://www.itg.org.uk/register-of-guides/richard-cerquera" target="_blank" rel="noopener noreferrer" class="itg-link">Institute of Tourist Guiding</a> Registered 'Blue Badge' Tourist Guide.`, "guideLabel": "Meet Your Guide", "guideName": "Richard Cerquera", "body1": `Richard Cerquera is an <a href="https://www.itg.org.uk/register-of-guides/richard-cerquera" target="_blank" rel="noopener noreferrer" class="itg-link">Institute of Tourist Guiding</a> Registered <strong>'Blue Badge' Tourist Guide</strong> — the highest qualification for professional tour guiding in the UK. The Blue Badge is often regarded as the gold standard of tourist guiding.`, "body2": "All Driver-Guided Tours and <strong>Chauffeur-Driven Tours with a Private Guide</strong> are conducted in a <strong>premium private vehicle</strong>, providing a comfortable and exclusive experience. On Driver-Guided Tours, Richard Cerquera is also an <strong>IAM RoadSmart Advanced Driver</strong>, helping ensure a smooth and safe journey throughout the day.", "body3": "Tours are available in <strong>English, Portuguese, and Spanish</strong>. Whether you're visiting London for the first time or returning to explore beyond the tourist trail, Richard will create a completely bespoke experience tailored to your interests.", "body4": "All tours are <strong>fully private</strong> — just your group, no strangers. Door-to-door service from your hotel or accommodation. Availability is always live and up to date, so you can book online instantly with no calls or emails required.", "browseTours": "Browse Tours", "whatsapp": "WhatsApp Richard", "stats": { "tripadvisor": "TripAdvisor Rating", "private": "Private Tours", "languages": "Languages", "emissions": "Emissions (EV)" }, "credentialsLabel": "Professional Qualifications", "credentialsTitle": "Credentials & Accreditations", "credentials": [{ "title": '<a href="https://www.itg.org.uk/register-of-guides/richard-cerquera" target="_blank" rel="noopener noreferrer" class="itg-link">Institute of Tourist Guiding</a> — Blue Badge', "body": 'The Blue Badge is the highest qualification for professional tourist guiding in the United Kingdom, awarded by the <a href="https://www.itg.org.uk/register-of-guides/richard-cerquera" target="_blank" rel="noopener noreferrer" class="itg-link">Institute of Tourist Guiding</a>. Holders undergo rigorous examination in history, art, architecture, and culture. Often regarded as the gold standard of tourist guiding worldwide.' }, { "title": "Guide London", "body": "Richard is a registered member of Guide London — the professional association for Blue Badge Tourist Guides working in London, formerly known as the Guild of Guide Lecturers." }, { "title": "British Guild of Tourist Guides", "body": "Member of the British Guild of Tourist Guides — the national association representing the highest-qualified tourist guides across England, Scotland, Wales, and Northern Ireland." }, { "title": "IAM RoadSmart Advanced Driver", "body": "Richard Cerquera is an IAM RoadSmart Advanced Driver — training that improves driving standards and enhances road safety using the British police's system of car control. Applied on all Driver-Guided Tours and Chauffeur-Driven Tours with a Private Guide." }, { "title": "Transport for London Licensed", "body": "London City Tours holds a Transport for London Private Hire Operator licence (Licence #2114), ensuring full compliance with London's private hire regulations." }], "reviewsLabel": "TripAdvisor", "reviewsTitle": "What Our Guests Say", "viewAllReviews": "View all reviews on TripAdvisor" };
39const faq$2 = { "heroLabel": "Help Centre", "heroTitle": "Frequently Asked Questions", "heroBody": "Everything you need to know about booking and taking a private tour with London City Tours.", "stillHaveQuestions": "Still Have Questions?", "stillBody": "Get in touch and Richard will be happy to help.", "contact": "Contact Us", "whatsapp": "WhatsApp Us", "tableNoticePeriod": "Notice period", "tableCharge": "Charge", "categories": [{ "category": "Booking & Payment", "items": [{ "q": "How do I book a tour?", "a": "Simply browse our tours, select your destination, choose your preferred tour option, pick a date, and complete the booking form. You'll be redirected to our secure Stripe checkout to pay. Confirmation is instant — no calls or emails required." }, { "q": "What payment methods do you accept?", "a": "We accept all major credit and debit cards (Visa, Mastercard, American Express), as well as Apple Pay. All payments are processed securely via Stripe with 3D Secure 2 (SCA) authentication." }, { "q": "Are prices per person or per group?", "a": "All prices are per group (per vehicle), not per person. This makes our tours exceptional value for families, couples, and small groups. The price you see is the total price regardless of how many guests are in y
39our group (up to the vehicle capacity)." }, { "q": "What is your cancellation policy?", "a": "Cancellation charges apply as follows: 50% of the fee for cancellations made 10 to 5 days before the tour; 100% of the fee for cancellations made 4 days (96 hours) or less before the tour. Any refund due is processed within 5–10 business days to the original payment method. If you need to reschedule, please contact us at least 5 days in advance." }, { "q": "Can I reschedule my booking?", "a": "Yes — please contact us via email or WhatsApp at least 5 days before your tour and we'll do our best to accommodate a new date, subject to availability. Rescheduling requests made within 4 days (96 hours) of the tour start time may be treated as a cancellation and the applicable charge will apply." }] }, { "category": "The Tours", "items": [{ "q": "Are the tours really private?", "a": "Yes, absolutely. All our tours are 100% private — just your group and Richard. You will never be grouped with strangers. This is what makes our tours so personal and flexible." }, { "q": "Can I customise the itinerary?", "a": "Yes — all tour themes are fully customisable. When you book, you can specify any particular places, landmarks, or experiences you'd like to include. Richard will tailor the tour to your interests and pace." }, { "q": "What languages are tours available in?", "a": "Tours are available in English, Portuguese, and Spanish. Please indicate your preferred language when booking." }, { "q": "What vehicle will we travel in?", "a": "All Driver-Guided Tours and Chauffeur-Driven Tours with a Private Guide are conducted in a premium private vehicle — comfortable, spacious, and well-appointed. Richard Cerquera is an IAM RoadSmart Advanced Driver, helping ensure a smooth and safe journey throughout the day." }, { "q": "Is door-to-door pickup included?", "a": "Yes. All tours include door-to-door service. Richard will collect you from your hotel or accommodation and return you at the end of the tour. Please provide your full pickup address when booking." }, { "q": "Are entrance fees included in the price?", "a": "Entrance fees to attractions (e.g., Windsor Castle, Stonehenge, Hampton Court) are not included in the tour price. Richard will advise you on current admission prices and can help you purchase tickets on the day." }] }, { "category": "Day Trips", "items": [{ "q": "How far in advance should I book a day trip?", "a": "We recommend booking as early as possible, especially during peak season (April–October). However, last-minute bookings are sometimes possible — check availability online or contact us via WhatsApp." }, { "q": "Can I combine two destinations in one day?", "a": "Yes — we offer combination tours such as Stonehenge & Bath, and Windsor Castle & Hampton Court Palace. Other combinations may be possible depending on distance and timing. Contact us to discuss a bespoke itinerary." }, { "q": "What time do day trips typically start and finish?", "a": "Start times vary by destination. Most day trips depart between 8:00am and 9:00am and return by early evening. Exact times will be confirmed in your booking confirmation." }] }] };
40const contact$3 = { "heroLabel": "Get in Touch", "heroTitle": "Contact Us", "heroBody": "Have a question or want to discuss a bespoke tour? Richard will get back to you promptly.", "detailsTitle": "Contact Details", "emailLabel": "Email", "phoneLabel": "Phone", "whatsappLabel": "WhatsApp", "whatsappSub": "Fastest response", "whatsappMessage": "Message us on WhatsApp", "notAffiliatedLine1": "Independent Official London Tourist Guide.", "notAffiliatedLine2": "Not affiliated with any hop-on hop-off or sightseeing bus company.", "responseTimes": "Response Times", "responseBody": "WhatsApp messages are typically answered within a few hours. Email enquiries are responded to within 24 hours. For urgent bookings, WhatsApp is recommended.", "languagesLabel": "Languages", "form": { "title": "Send a Message", "name": "Your Name", "email": "Email Address", "phone": "Phone Number", "phoneOptional": "(optional)", "subject": "Subject", "subjectPlaceholder": "Select a subject...", "subjects": { "booking": "Tour Booking Enquiry", "bespoke": "Bespoke / Private Tour", "corporate": "Corporate Group", "general": "General Question", "other": "Other" }, "message": "Message", "messagePlaceholder": "Tell us about your group, preferred dates, destinations you'd like to visit, or any questions you have...", "send": "Send Message", "sending": "Sending...", "successTitle": "Message Sent!", "successBody": "Thank you for getting in touch. Richard will respond to your enquiry within 24 hours." } };
41const terms$2 = { "heroLabel": "Legal", "heroTitle": "Terms & Conditions", "lastUpdated": "Last updated: January 2026", "contactNote": "For any questions about these terms, please", "contactLink": "contact us", "tableNoticePeriod": "Notice period", "tableCharge": "Charge", "sections": [{ "key": "1", "title": "1. Bookings & Confirmation", "body": "All bookings are confirmed upon receipt of full payment via our secure online booking system. A confirmation email will be sent to the email address provided at the time of booking. London City Tours reserves the right to decline any booking at its discretion." }, { "key": "2", "title": "2. Pricing", "body": "All prices are quoted in British Poun
41ds Sterling (GBP) and are per group (per vehicle), not per person. Prices include VAT where applicable. Entrance fees to attractions are not included unless explicitly stated." }, { "key": "3", "title": "3. Cancellation Charges", "rows": [{ "label": "10 days to 5 days prior to commencement of engagement", "value": "50% of fee" }, { "label": "4 days (96 hours) or less prior to commencement of engagement", "value": "100% of fee" }], "notes": ["Cancellation charges are calculated as a percentage of the total agreed fee for the engagement.", "Refunds of any amount due are processed within 5–10 business days to the original payment method."] }, { "key": "3a", "title": "3a. Faulty Equipment — Coach Tours", "body": "For coach tours: if there is no working microphone or PA system provided, the operator will be informed as soon as possible by the guide. If the tour continues without a working microphone, the guide is entitled to be paid an increment of 100% of the original fee until the omission is rectified." }, { "key": "4", "title": "4. Changes & Amendments", "body": "Requests to change the date or details of a booking must be made at least 5 days before the tour start time and are subject to availability. London City Tours will make every effort to accommodate changes but cannot guarantee availability. Changes requested within 4 days (96 hours) of the tour start time may be treated as a cancellation and the applicable cancellation charge will apply." }, { "key": "5", "title": "5. Conduct", "body": "London City Tours reserves the right to terminate a tour without refund if any guest behaves in a manner that is deemed unsafe, abusive, or disruptive to the guide or other parties." }, { "key": "6", "title": "6. Liability", "body": "London City Tours carries full public liability insurance. However, we cannot accept responsibility for loss, damage, or injury arising from circumstances beyond our control, including but not limited to traffic delays, weather conditions, or the closure of attractions." }, { "key": "7", "title": "7. Entrance Fees", "body": "Entrance fees to attractions, museums, palaces, and other sites are not included in the tour price unless explicitly stated. Guests are responsible for purchasing their own admission tickets." }, { "key": "8", "title": "8. Privacy", "body": "Personal data collected during the booking process is used solely for the purpose of fulfilling your booking and communicating with you about your tour. We do not share your data with third parties except as required to process your payment (Stripe)." }, { "key": "9", "title": "9. Governing Law", "body": "These terms and conditions are governed by the laws of England and Wales. Any disputes shall be subject to the exclusive jurisdiction of the courts of England and Wales." }] };
42const common$2 = { "notFound": "Tour Not Found", "notFoundBody": "We couldn't find that tour. Browse all our available tours below.", "browseAllTours": "Browse All Tours", "required": "Required", "invalidEmail": "Invalid email", "pleaseMoreDetail": "Please provide a bit more detail" };
43const popularTours$2 = { "metaTitle": "Most Popular Tours — London City Tours", "metaDescription": "Our most popular private guided tours — Half Day London, Grand Tour of London, Windsor Castle, Windsor Castle & Stonehenge, and Windsor Castle, Stonehenge & Bath. Handpicked for first-time visitors.", "heroLabel": "Handpicked for first-time visitors", "heroTitle": "Most Popular Tours", "heroBody": "Five of our most-booked private tours — from a half day in London to a grand sweep through Windsor Castle, Stonehenge, and Bath. All fully private, all with a Blue Badge Tourist Guide.", "browseByDestination": "Browse by destination", "viewAllTours": "View all tours", "bespoke": { "label": "Something different in mind?", "title": "Every tour is fully bespoke", "body": "Don't see exactly what you're looking for? Richard can tailor any tour to your interests, pace, and group. Get in touch to discuss a custom itinerary.", "cta": "Enquire about a bespoke tour" } };
44const destinations$3 = { "allDestinations": "All Destinations", "privateGuidedTours": "Private Guided Tours", "tours": "Tours", "lookingForSomethingElse": "Looking for something else?", "browseAllBody": "Browse all 14 private tours or explore other destinations.", "allTours": "All tours", "page": { "heroLabel": "Private Guided Tours", "heroTitle": "Destinations", "heroBody": "Choose a destination to explore all available private tours — from London city tours to day trips across England.", "tourCount_one": "{{count}} tour", "tourCount_other": "{{count}} tours", "from": "from", "perGroup": "per group", "priceDepends": "Final price depends on your selected options.", "privateTour": "Private Tour", "explore": "Explore", "browseAllTitle": "Browse all tours", "browseAllBody": "View the complete list of all 14 private tours in one place.", "viewAllTours": "View all tours →", "metaTitle": "Destinations — London City Tours", "metaDescription": "Explore private guided tours by destination — London, Windsor, Stonehenge, Hampton Court, Oxford, Bath, and the Cotswolds. Blue Badge Tourist Guide." }, "london": { "name": "London", "tagline": "The capital, explored privately", "description": "From royal palaces and world-class museums to hidden backstreets and iconic landmarks — London is endlessly rewarding with a private Blue Badge Tourist Guide." }, "windsor": { "name": "Windsor Castle", "tagline": "Royal residences & regal history", "description": "Home to the oldest occupied castle in the world, Windsor is one of England's most visited royal destinations — just 25 miles from London.", "distance": "25 miles from London" }, "stonehenge": { "name": "Stonehenge", "tagline": "4,500 years of prehistoric mystery", "description": "One of the most iconic prehistoric monuments on earth. Standing on Salisbury Plain for over four millennia, Stonehenge is a truly unmissable experience.", "distance": "90 miles from London" }, "hampton-court": { "name": "Hampton Court Palace", "tagline": "Henry VIII's magnificent Tudor palace", "description": "Hampton Court Palace is one of England's finest royal residences — a masterpiece of Tudor and Baroque architecture set in stunning riverside gardens, just 15 miles from London.", "distance": "15 miles from London" }, "oxford": { "name": "Oxford", "tagline": "The City of Dreaming Spires", "description": "One of the world's oldest and most prestigious university cities. Ancient colleges, the Bodleian Library, and centuries of academic history await.", "distance": "60 miles from London" }, "bath": { "name": "Bath", "tagline": "UNESCO World Heritage Georgian elegance", "description": "England's most elegant Georgian city — home to the Roman Baths, the Royal Crescent, and some of the finest Regency architecture in the world.", "distance": "115 miles from London" }, "cotswolds": { "name": "The Cotswolds", "tagline": "Quintessential English countryside", "description": "An Area of Outstanding Natural Beauty — honey-stone villages, rolling hills, and timeless English charm. One of the most beautiful regions in the country.", "distance": "80 miles from London" } };
45const catalogue$3 = /* @__PURE__ */ JSON.parse(`{"category":{"cityTour":"City Tour","dayTrip":"Day Trip"},"services":{"label":"Available Services","walking":"Walking Tours","driverGuided":"Driver-Guided Tours","chauffeurGuide":"Chauffeur-Driven Tours with a Private Guide"},"serviceType":{"tourist-guide":{"label":"Walking Tours","capacity":"Ideal for up to 57 guests","description":"Blue Badge Tourist Guide on foot once at the destination.","descriptionCity":"Blue Badge Tourist Guide walking tour of London."},"driver-guided":{"label":"Driver-Guided Tours","capacity":"Ideal for up to 6 guests","description":"Richard acts as both your driver and Blue Badge Tourist Guide. Executive vehicle included.","descriptionCity":"Richard acts as both your driver and Blue Badge Tourist Guide — seamless, personal, and efficie
45nt. Executive vehicle included."},"chauffeur-guide":{"label":"Chauffeur-Driven Tours with a Private Guide","capacity":"Ideal for up to 6 guests","description":"A dedicated chauffeur handles the driving while your Blue Badge Tourist Guide focuses entirely on the experience. Executive vehicle included.","descriptionCity":"A dedicated chauffeur handles the driving while your Blue Badge Tourist Guide focuses entirely on the experience. Executive vehicle included."}},"duration":{"4h":"Up to 4 hours","5h":"Up to 5 hours","6h":"Up to 6 hours","8h":"Up to 8 hours","9h":"Up to 9 hours","10h":"Up to 10 hours","12h":"Up to 12 hours"},"badge":{"bestSellingLondon":"Best-selling London tour"},"tours":{"westminster-abbey":{"title":"The Nº1 Westminster Abbey Tour","subtitle":"Westminster Abbey • Big Ben • Buckingham Palace","duration":"Up to 4 hours","description":"Discover Westminster Abbey from the inside, then experience the historic heart of Westminster and Royal London with a London Blue Badge Tourist Guide.","longDescription":"Discover Westminster Abbey from the inside, then experience the historic heart of Westminster and Royal London with a London Blue Badge Tourist Guide.","highlights":{"0":"Westminster Abbey (admission included)","1":"Big Ben & Houses of Parliament","2":"Buckingham Palace","3":"Parliament Square"},"included":{"0":"Westminster Abbey admission"}},"london":{"title":"Half Day Tour of London","subtitle":"Private Guided Tour of London","duration":"Up to 4 hours","description":"Experience London like never before on a fully private, bespoke tour led by Richard — a Blue Badge Tourist Guide with unrivalled knowledge of the city.","longDescription":"Tour themes are fully customisable. Choose your desired tour length and from there we can cover any destination in London — from royal palaces and world-class museums to hidden backstreets and iconic landmarks. Every tour is tailored to your interests, pace, and group.","highlights":{"0":"Buckingham Palace & Changing of the Guard","1":"Tower of London & Crown Jewels","2":"Westminster Abbey & Houses of Parliament","3":"Tower Bridge","4":"St Paul's Cathedral","5":"Hyde Park & Kensington Palace"},"notIncluded":{"0":"Entrance fees to attractions"}},"london-grand":{"title":"Grand Tour of London","subtitle":"Private Full-Day Guided Tour of London","duration":"Up to 8 hours","description":"The definitive London experience — a full day exploring the city's greatest landmarks, hidden gems, and royal history with your own Blue Badge Tourist Guide.","longDescription":"Tour themes are fully customisable. A full day gives you the freedom to explore London in depth — royal palaces, world-class museums, hidden backstreets, and iconic landmarks. Every tour is tailored to your interests, pace, and group."},"windsor-castle":{"title":"Windsor Castle","subtitle":"Private Day Trip from London","duration":"Up to 5 hours","description":"Visit the world's oldest and largest occupied castle — home to the British Royal Family for over 1,000 years.","longDescription":"Windsor Castle has been the home of British monarchs for nearly 1,000 years. Explore the State Apartments, St George's Chapel, and the beautiful Long Walk with your private Blue Badge Tourist Guide. A perfect excursion from London.","highlights":{"0":"Windsor Castle State Apartments","1":"St George's Chapel","2":"The Long Walk","3":"Changing of the Guard (seasonal)"},"notIncluded":{"0":"Windsor Castle entrance fee"}},"windsor-hampton-court":{"title":"Windsor Castle & Hampton Court Palace","subtitle":"Private Combo Day Trip from London","duration":"Up to 8 hours","description":"Two of England's most magnificent royal palaces in one unforgettable day — Windsor Castle and Hampton Court Palace.","longDescription":"Begin at Windsor Castle, the oldest occupied castle in the world and home of the Royal Family, before travelling to Hampton Court Palace — Henry VIII's magnificent Tudor masterpiece. Your private Blue Badge Tourist Guide brings both palaces to life with expert commentary throughout.","highlights":{"0":"Windsor Castle State Apartments & St George's Chapel","1":"Hampton Court Palace Great Hall","2":"The famous Hampton Court Maze","3":"Two royal palaces in one day","4":"Expert Blue Badge Tourist Guide commentary throughout"}},"windsor-stonehenge":{"title":"Windsor Castle & Stonehenge","subtitle":"Private Combo Day Trip from London","duration":"Up to 10 hours","description":"Combine royal grandeur with prehistoric mystery — Windsor Castle and the iconic standing stones of Stonehenge.","longDescription":"Start your day at Windsor Castle, the world's oldest occupied castle and official residence of the British Royal Family. Then journey west to Stonehenge, the iconic prehistoric monument standing on Salisbury Plain for over 4,500 years. Your private Blue Badge Tourist Guide connects the stories of both sites throughout the day."},"windsor-stonehenge-bath":{"title":"Windsor Castle, Stonehenge & Bath","subtitle":"Private Grand Combo Day Trip from London","duration":"Up to 12 hours","description":"The ultimate grand day out — three of England's most iconic destinations in one extraordinary private tour.","longDescription":"This grand combo tour takes you from the royal splendour of Windsor Castle to the prehistoric mystery of Stonehenge, finishing in the UNESCO World Heritage city of Bath. A full day of England's most celebrated history, architecture, and landscapes, guided throughout by your private Blue Badge Tourist Guide.","highlights":{"4":"Three UNESCO/heritage sites in one day"}},"stonehenge":{"title":"Stonehenge","subtitle":"Private Day Trip from London","duration":"Up to 6 hours","description":"Stand before one of the world's greatest prehistoric monuments — a UNESCO World Heritage Site that has captivated visitors for millennia.","longDescription":"Standing for over 4,500 years on Salisbury Plain, Stonehenge is one of the most mysterious and awe-inspiring sites in the world. Your private tour includes expert commentary from your Blue Badge Tourist Guide throughout the journey.","highlights":{"0":"Stonehenge prehistoric monument","1":"Salisbury Plain landscape","2":"Expert historical commentary","3":"Photo stops at the best viewpoints"},"notIncluded":{"0":"Stonehenge entrance fee"}},"stonehenge-bath":{"title":"Stonehenge & Bath","subtitle":"Private Combo Day Trip from London","duration":"Up to 12 hours","description":"Prehistoric wonder meets Georgian elegance — Stonehenge and the beautiful Roman city of Bath in one private day trip.","longDescription":"Visit the ancient mystery of Stonehenge on Salisbury Plain before continuing to Bath, England's most elegant Georgian city. Explore the Roman Baths, the Royal Crescent, and Pulteney Bridge with your private Blue Badge Tourist Guide. A perfect pairing of England's ancient and Georgian heritage."},"hampton-court":{"title":"Hampton Court Palace","subtitle":"Private Day Trip from London","duration":"Up to 5 hours","description":"Explore the magnificent Tudor palace of Henry VIII — one of England's most spectacular royal residences.","longDescription":"Hampton Court Palace is a masterpiece of Tudor and Baroque architecture set in stunning riverside gardens. Explore the Great Hall, the Chapel Royal, the famous Maze, and the beautiful formal gardens with your private Blue Badge Tourist Guide.","highlights":{"0":"Henry VIII's Great Hall","1":"The Chapel Royal","2":"The famous Hampton Court Maze","3":"Baroque formal gardens","4":"Riverside setting on the Thames"},"notIncluded":{"0":"Hampton Court entrance fee"}},"oxford":{"title":"Oxford","subtitle":"Private Day Trip from London","duration":"Up to 9 hours","description":"Discover the City of Dreaming Spires — centuries of academic tradition, stunning architecture, and hidden courtyards.","longDescription":"Oxford has been a centre of learning since the 11th century. Walk through ancient college quadrangles, visit the Bodleian Library, and explore the city's stunning architecture with your private Blue Badge Tourist Guide. A truly unforgettable day trip from London.","highlights":{"0":"Christ Church College","1":"Bodleian Library","2":"Radcliffe Camera","3":"Covered Market","4":"Magdalen College & deer park"}},"oxford-cotswolds":{"title":"Oxford & The Cotswolds","subtitle":"Private Combo Day Trip from London","duration":"Up to 10 hours","description":"The best of English heritage — Oxford's dreaming spires and the honey-stone villages of the Cotswolds.","longDescription":"Begin in Oxford, one of the world's greatest university cities, exploring ancient colleges and the Bodleian Library. Then journey into the Cotswolds, an Area of Outstanding Natural Beauty, visiting picture-perfect villages like Bourton-on-the-Water and Burford. Your private Blue Badge Tourist Guide brings both destinations to life.","highlights":{"0":"Oxford's ancient university colleges","1":"Bodleian Library & Radcliffe Camera"}},"oxford-stratford":{"title":"Oxford & Stratford-Upon-Avon","subtitle":"Private Combo Day Trip from London","duration":"Up to 10 hours","description":"Two of England's most celebrated towns — Oxford's university city and Shakespeare's birthplace in Stratford-upon-Avon.","longDescription":"Explore Oxford's magnificent colleges and ancient streets before travelling to Stratford-upon-Avon, the birthplace of William Shakespeare. Visit Shakespeare's Birthplace, Anne Hathaway's Cottage, and the beautiful market town with your private Blue Badge Tourist Guide.","highlights":{"2":"Shakespeare's Birthplace","3":"Anne Hathaway's Cottage","4":"Stratford-upon-Avon town centre"},"notIncluded":{"0":"Shakespeare's Birthplace entrance fee"}},"cotswolds":{"title":"The Cotswolds","subtitle":"Private Day Trip from London","duration":"Up to 10 hours","description":"Rolling hills, honey-stone villages, and quintessential English countryside — the Cotswolds at its most beautiful.","longDescription":"The Cotswolds is one of England's most beautiful regions, designated an Area of Outstanding Natural Beauty. Visit picture-perfect villages like Bourton-on-the-Water, Burford, and Bibury, with expert commentary from your private Blue Badge Tourist Guide throughout the day.","highlights":{"0":"Bourton-on-the-Water","1":"Burford & the High Street","2":"Bibury & Arlington Row","3":"Broadway village","4":"Rolling Cotswolds countryside"}},"bath":{"title":"Bath","subtitle":"Private Day Trip from London","duration":"Up to 8 hours","description":"Explore the only city in England with natural hot springs — a UNESCO World Heritage Site of Roman baths and Georgian grandeur.","longDescription":"Bath is a UNESCO World Heritage city of extraordinary beauty. Explore the Roman Baths, the Royal Crescent, Pulteney Bridge, and the Abbey with your private Blue Badge Tourist Guide. One of the most rewarding day trips from London.","highlights":{"0":"The Roman Baths","1":"Royal Crescent & The Circus","2":"Pulteney Bridge","3":"Bath Abbey","4":"Georgian architecture & streets"},"notIncluded":{"0":"Roman Baths entrance fee"}}},"shared":{"highlights":{"expertCommentaryBothSites":"Expert commentary at both sites"},"included":{"guide":"Private Blue Badge Tourist Guide","doorToDoor":"Door-to-door service","instantConfirmation":"Instant booking confirmation","flexibleItinerary":"Flexible itinerary tailored to you","flexibleVillageSelection":"Flexible village selection"},"notIncluded":{"entranceFees":"Entrance fees to attractions","meals":"Meals and refreshments","gratuities":"Gratuities (discretionary)","collegeEntranceFees":"College entrance fees (where applicable)","anyEntranceFees":"Any attraction entrance fees"}}}`);
46const serviceLanding$2 = { "walking": { "heroLabel": "Walking Tours London", "heroTitle": "Walking Tours of London & Beyond", "heroBody": "Explore London and the UK's greatest destinations on foot, led by Richard Cerquera — an Institute of Tourist Guiding Registered Blue Badge Tourist Guide.", "metaTitle": "Walking Tours London — Blue Badge Tourist Guide", "metaDescription": "Book a walking tour of London with a Blue Badge Tourist Guide. Expert guided walks of London, Windsor, Stonehenge, Oxford, Bath & the Cotswolds. Fully private, tailored to your group.", "sectionLabel": "Walking Tours", "ctaLabel": "Book This Walking Tour", "experienceTag": "Walking Tour", "capacityNote": "Ideal for up to 57 guests", "introCopy": "Whether you're looking for a private walking tour of London, a guided walk around Windsor Castle, or a Blue Badge guide for Stonehenge, every tour is fully private and tailored to your group.", "limitedLabel": "Limited Availability", "limitedTitle": "Currently Unavailable for These Tours" }, "driverGuided": { "heroLabel": "Driver-Guided Tours London", "heroTitle": "Driver-Guided Private Tours of London", "heroBody": "Richard Cerquera acts as both your driver and Blue Badge Tourist Guide — seamless, personal, and efficie
46nt. Executive vehicle included, door-to-door.", "metaTitle": "Driver-Guided Tours London — Private Car Tours with Blue Badge Guide", "metaDescription": "Private driver-guided tours of London. Richard Cerquera is your driver and Blue Badge Tourist Guide — executive vehicle included, door-to-door. London car tours for up to 6 guests.", "sectionLabel": "Driver-Guided Tours", "ctaLabel": "Book This Driver-Guided Tour", "experienceTag": "Driver-Guided Tour", "capacityNote": "Ideal for up to 6 guests", "unavailableTitle": "Driver-Guided Tours Temporarily Unavailable", "unavailableBody": "Driver-Guided Tours are currently unavailable for selected tours. For a seamless private touring experience, please consider a Chauffeur-Driven Tour with a Private Guide.", "unavailableCta": "View Chauffeur-Driven Tours", "introCopy": "Looking for a private driver guide in London? Richard combines expert Blue Badge guiding with professional driving — ideal for London city tours and select day trips. Up to 6 guests.", "limitedLabel": "Limited Availability", "limitedTitle": "Currently Unavailable for These Tours" }, "chauffeur": { "heroLabel": "Chauffeur-Driven Tours London", "heroTitle": "Chauffeur-Driven Tours with a Private Guide", "heroBody": "A dedicated chauffeur handles the driving while your Blue Badge Tourist Guide focuses entirely on you. Executive vehicle with dedicated chauffeur, door-to-door.", "metaTitle": "Chauffeur-Driven Tours London — Private Chauffeur with Blue Badge Guide", "metaDescription": "Private chauffeur-driven tours of London and beyond. A dedicated chauffeur and Blue Badge Tourist Guide — the premium way to explore London, Windsor, Stonehenge, Oxford, Bath & the Cotswolds.", "sectionLabel": "Chauffeur-Driven Tours", "ctaLabel": "Book This Chauffeur Tour", "experienceTag": "Chauffeur-Driven Tour", "capacityNote": "Ideal for up to 6 guests", "introCopy": "The ultimate private London tour experience. A professional chauffeur drives while Richard Cerquera, your Blue Badge Tourist Guide, delivers expert commentary throughout. Available for London and all day trip destinations." }, "common": { "cityTours": "London City Tours", "dayTrips": "Day Trips from London", "from": "from", "perGroup": "per group", "priceDepends": "Final price depends on your selected options.", "privateTour": "Private tour", "viewAll": "View All Tours", "bespokeTitle": "Looking for Something Bespoke?", "bespokeBody": "Every tour is fully tailored to your interests, pace, and group. Contact us to discuss a custom itinerary.", "bespokeEnquire": "Enquire About a Bespoke Tour", "bespokeWhatsapp": "WhatsApp Us" } };
47const en = {
48  nav: nav$2,
49  footer: footer$2,
50  home: home$3,
51  tours: tours$3,
52  tourDetail: tourDetail$2,
53  booking: booking$2,
54  confirmation: confirmation$2,
55  about: about$3,
56  faq: faq$2,
57  contact: contact$3,
58  terms: terms$2,
59  common: common$2,
60  popularTours: popularTours$2,
61  destinations: destinations$3,
62  catalogue: catalogue$3,
63  serviceLanding: serviceLanding$2
64};
65const nav$1 = { "destinations": "Destinos", "tours": "Todas as Visitas", "about": "Sobre Nós", "faq": "FAQ", "contact": "Contacto", "bookNow": "Reservar" };
66const footer$1 = { "destinations": "Destinos", "information": "Informações", "contact": "Contacto", "paymentsAccepted": "Pagamentos Aceites", "copyright": "© {{year}} London City Tours. Todos os direitos reservados.", "tagline": "Visitas guiadas privadas em Londres e arredores, lideradas por Richard Cerquera — Guia Turístico com Crachá Azul.", "credentials": "Operador de Aluguer Privado de Transportes de Londres\nAssociação de Guias Motoristas · Licença #2114", "whatsapp": "WhatsApp", "languages": "English · Português · Español", "stripeNote": "Stripe 3D Secure 2 · SSL Encriptado", "links": { "about": "Sobre Richard", "faq": "FAQ", "contact": "Contacte-nos", "terms": "Termos e Condições", "showTickets": "Bilhetes de Espetáculos" }, "services": { "heading": "Os Nossos Serviços", "walking": "Tours a Pé", "driverGuided": "Tours com Motorista-Guia", "chauffeur": "Tours com Motorista e Guia", "allTours": "Todos os Tours" } };
67const home$2 = { "badge": "Membro do Instituto de Guias Turísticos", "heroTitle": "Visitas Privadas em", "heroTitleHighlight": "Londres e Arredores", "heroTypes": { "heading": "Serviços Dis
67poníveis", "walking": "Visitas a Pé", "driver": "Visitas com Motorista-Guia", "chauffeur": "Visitas com Chaufeur e Guia Privado" }, "heroSubtitle": "Viva o destino, não apenas os pontos turísticos", "heroBody": "Visitas privadas e personalizadas de porta a porta para indivíduos, casais, famílias e grupos. A pé, com motorista ou chaufeur+guia. Disponibilidade sempre atualizada — reserve instantaneamente online.", "browseAllTours": "Ver Todas as Visitas", "whatsappUs": "WhatsApp", "search": { "placeholder": "Pesquise por aventuras", "ariaLabel": "Pesquisar visitas", "noResults": 'Nenhuma visita encontrada para "{{query}}"', "from": "a partir de", "privateTour": "Visita Privada" }, "trust": { "tripadvisor": "Classificação 5 estrelas no TripAdvisor", "confirmation": "Confirmação instantânea", "private": "Visitas totalmente privadas", "vehicle": "Veículo executivo disponível", "electric": "Veículo Mercedes elétrico" }, "destinations": { "sectionLabel": "Visitas Privadas", "title": "Escolha o Seu Destino", "viewAll": "Ver todos", "viewTours": "Ver visitas", "viewAllTours": "Ver Todas as Visitas", "mostPopularTours": "Visitas Mais Populares", "from": "A partir de", "perGroup": "por grupo", "priceDepends": "O preço final depende das opções selecionadas.", "upToPassengers": "até 6 passageiros", "tripadvisor": "Classificação 5.0 no TripAdvisor", "category": { "cityTour": "Visita à Cidade", "dayTrip": "Excursão de Dia" } }, "howItWorks": { "sectionLabel": "Simples e Seguro", "title": "Como Funciona", "steps": [{ "title": "Escolha o Seu Destino", "body": "Explore as nossas visitas — visitas à cidade de Londres ou excursões de dia a Stonehenge, Windsor Castle, Cotswolds, Oxford, Bath e mais." }, { "title": "Selecione Data e Grupo", "body": "Escolha a data preferida. Todas as visitas são privadas — apenas o seu grupo, sem estranhos. A disponibilidade está sempre atualizada." }, { "title": "Pague com Segurança e Confirme", "body": "Reserve e pague online via Stripe. A confirmação chega instantaneamente. Sem chamadas, sem e-mails, sem espera." }] }, "about": { "sectionLabel": "O Seu Guia", "title": "Conheça Richard Cerquera", "body1": "Richard é um <strong>Guia Turístico com Crachá Azul</strong> registado — a mais alta qualificação para guias turísticos profissionais no Reino Unido, frequentemente considerada o padrão de excelência. É também um <strong>Condutor Avançado IAM</strong>, garantindo a sua segurança e conforto em cada viagem.", "body2": "As visitas estão disponíveis em <strong>inglês, português e espanhol</strong>. Todas as visitas são realizadas num veículo Mercedes Benz totalmente elétrico — de porta a porta, privado e completamente personalizado para si.", "readMore": "Saiba mais sobre Richard", "blueBadge": "Registado", "blueBadgeTitle": "Guia Turístico com Crachá Azul", "professionalMemberships": "Membros Profissionais", "itgRegisterLink": "Ver no Registo do Instituto de Guias Turísticos", "credentials": { "blueBadge": { "title": "Guia Turístico com Crachá Azul", "body": "A mais alta qualificação para guias turísticos profissionais no Reino Unido — o padrão de excelência." }, "iam": { "title": "Condutor Avançado IAM", "body": "Formação pelo Instituto de Motoristas Avançados. A sua segurança é a nossa prioridade." }, "languages": { "title": "English · Português · Español", "body": "Visitas disponíveis em três idiomas. Falamos a sua língua." } } }, "reviews": { "sectionLabel": "Avaliações TripAdvisor", "title": "O Que Dizem os Nossos Clientes", "viewAll": "Ver todas as avaliações no TripAdvisor", "ratedExcellent": "Classificado como Excelente no TripAdvisor" }, "cta": { "sectionLabel": "Pronto para Explorar?", "title": "Reserve a Sua Visita Privada Hoje", "body": "Todas as visitas são totalmente privadas — apenas o seu grupo. A disponibilidade está sempre atualizada. Reserve online em minutos e receba confirmação instantânea." } };
68const tours$2 = { "bestSeller": "Mais popular", "distanceLabel": "Aprox. {{distance}} percorridos", "pageTitle": "Todas as Visitas", "metaDescription": "Explore todas as visitas guiadas privadas — visitas à cidade de Londres e excursões de dia a Stonehenge, Castelo de Windsor, os Cotswolds, Oxford, Bath e o Palácio de Hampton Court.", "heroLabel": "Visitas Guiadas Privadas", "heroTitle": "Escolha a Sua Visita", "heroBody": "Todas as visitas são totalmente privadas — apenas o seu grupo, sem estranhos. Lideradas por Richard Cerquera, Guia Turístico com Crachá Azul.", "cityToursLabel": "Visitas à Cidade", "cityToursTitle": "Londres", "dayTripsLabel": "Excursões de Dia a partir de Londres", "dayTripsTitle": "Além de Londres", "from": "A partir de", "perGroup": "por grupo", "priceDepends": "O preço final depende das opções selecionadas.", "upToPasse
68ngers": "até 6 passageiros", "tripadvisor": "Classificação 5.0 no TripAdvisor", "rating": "5.0", "viewBook": "Ver visita →", "bespoke": { "title": "Precisa de uma Visita Personalizada?", "body": "Todas as visitas são totalmente personalizáveis. Tem um itinerário específico em mente? Um grupo empresarial? Uma ocasião especial? Entre em contacto e Richard criará a experiência perfeita para si.", "enquire": "Solicitar Informações", "whatsapp": "WhatsApp" } };
69const tourDetail$1 = { "allTours": "Todas as Visitas", "aboutTour": "Sobre Esta Visita", "tourOptions": "Opções de Visita", "highlights": "Destaques", "included": "O Que Está Incluído", "notIncluded": "Não Incluído", "privateTour": "Visita Privada", "perGroup": "por grupo", "priceDepends": "O preço final depende das opções selecionadas.", "upToPassengers": "até 6 passageiros", "bookTour": "Reservar Agora", "bookingIncludes": "A Reserva Inclui", "bookThisTour": "Verificar disponibilidade", "viewDetails": "Ver detalhes da visita", "youMightAlsoLike": "Também Pode Gostar", "vehicleNote": "As visitas de longa distância são especialmente adequadas para Visitas com Motorista-Guia ou Visitas com Chaufeur e Guia Privado — ideais para grupos privados de até 6 pessoas.", "vehicleNoteLarge": "Para grupos maiores, será necessário organizar transporte separado.", "meta": { "private": "Totalmente privado — apenas o seu grupo", "doorToDoor": "Serviço de porta a porta", "languages": "Inglês · Português · Espanhol", "vehicle": "Veículo executivo incluído", "vehicleChauffeur": "Veículo executivo com chaufeur dedicado", "electric": "Veículo Mercedes elétrico", "confirmation": "Confirmação instantânea de reserva" }, "londonInspiration": { "sectionLabel": "Locais a Explorar", "heading": "Para onde vamos?", "intro": "Algumas ideias para o seu dia em Londres — cada itinerário é moldado em torno dos seus interesses. Estes são locais possíveis a explorar, não inclusões garantidas.", "manyMore": "+ muito mais", "disclaimer": "O seu guia irá adaptar o itinerário ao seu grupo. Nem todos os locais abaixo podem ser cobertos numa única visita, e algumas atrações requerem entrada separada.", "showMore": "Explorar mais possibilidades", "showLess": "Mostrar menos" } };
70const booking$1 = { "pageTitle": "Reserve a Sua Visita", "subtitle": "Visita Guiada Privada", "backTo": "Voltar a {{tour}}", "stepOf": "Passo {{step}} de 4", "step1": { "title": "Escolha a sua visita", "subtitle": "Selecione um destino para começar", "num": "1" }, "step2": { "title": "Escolha a sua experiência", "subtitle": "Como gostaria de explorar?", "num": "2", "date": "Data Preferida", "guests": "Número de Participantes", "guest": "participante", "guests_plural": "participantes", "walking": "Visita a Pé", "walkingTagline": "A pé com um Guia com Crachá Azul", "walkingDesc": "Explore as ruas, praças e passagens escondidas de Londres a pé. Ideal para até 57 participantes.", "walkingMax": "Até 57 participantes", "walkingAway": "Guia com Crachá Azul — A Pé no Destino", "walkingAwayTagline": "Guiado a pé após a chegada", "walkingAwayDesc": "O seu Guia com Crachá Azul encontra-o no destino e conduz a visita inteiramente a pé. O transporte até ao destino é organizado separadamente.", "walkingAwayNote": "O transporte até ao destino deve ser organizado separadamente (carro, comboio ou autocarro) e cumprir as regulamentações de transporte privado.", "driverGuided": "Visitas com Motorista-Guia", "driverGuidedTagline": "Richard conduz e guia", "driverGuidedDesc": "Richard atua como motorista e Guia com Crachá Azul — perfeito, pessoal e eficiente.", "driverGuidedMax": "Até 6 passageiros", "chauffeurGuide": "Visitas com Chaufeur e Guia Privado", "chauffeurGuideTagline": "Motorista e guia dedicados", "chauffeurGuideDesc": "Um motorista dedicado trata da condução enquanto o seu Guia com Crachá Azul se concentra inteiramente em si.", "chauffeurGuideMax": "Até 6 passageiros", "groupSize": "Tamanho do grupo", "driverGuidedDisabledHeading": "A disponibilidade dos Tours com Motorista-Guia está actualmente limitada para tours fora de Londres.", "driverGuidedDisabledBody": "Os Tours com Motorista e Guia Privado continuam totalmente disponíveis — oferecendo a mesma experiência de guia especializado com um motorista dedicado e veículo executivo.", "driverGuidedDisabledRecommendLabel": "Alternativa recomendada", "driverGuidedDisabledRecommendValue": "Motorista Privado + Guia Turístico Oficial de Londres", "driverGuidedDisabledCta": "Ver Tours com Motorista e Guia", "driverGuidedDisabledPill": "Disponibilidade Limitada" }, "step3": { "title": "Personalize a sua visita", "subtitle": "Escolha a duração, idioma e tamanho do grupo", "num": "3", "firstName": "Nome", "lastName": "Apelido", "email": "Endereço de E-mail", "phone": "Número de Telefone", "pickup": "Endereço de Recolha", "pickupPlaceholder": "Nome do hotel ou endereço completo em Londres", "specialRequests": "Pedidos Especiais", "specialRequestsOptional": "(opcional)", "specialRequestsPlaceholder": "Locais específicos que gostaria de visitar, requisitos de acessibilidade, etc.", "duration": "Duração", "vehicle": "Veículo", "language": "Idioma", "groupSize": "Tamanho do grupo", "adults": "Adultos", "adultsNote": "", "children": "Crianças", "childrenNote": "", "infants": "Bebés", "infantsNote": "", "groupSizeNote": "Adultos + crianças + bebés contam para a capacidade máxima do grupo.", "totalGuests": "Total de participantes", "totalPassengers": "Total de passageiros", "maxGuests": "(máx. {{n}} participantes)", "maxPassengers": "(máx. {{n}} passageiros)", "guests": "participantes", "passengers": "passageiros", "upToPasse
70ngers": "Até {{n}} passageiros", "enquiry": "consulta", "estimatedTotal": "Total estimado", "maxPassengersWarning": "Máximo de {{n}} passageiros para este tipo de veículo.", "largeGroupWarning": "Grupos com mais de 57 pessoas requerem um orçamento personalizado. Continue para solicitar um preço à medida.", "requestQuote": "Solicitar orçamento personalizado →", "reviewPricing": "Verificar Disponibilidade →", "bilingualNote": "Para tours bilingues ou trilíngues, por favor contacte-me.", "bilingualUpgrade": { "label": "Melhoria de idioma", "sectionTitle": "Adicionar uma melhoria de idioma", "description": "O tour será realizado em dois ou três idiomas simultaneamente. Ideal para grupos com idiomas mistos.", "options": { "pt-en": "Português + Inglês", "pt-es": "Português + Espanhol", "trilingual": "Tour trilíngue: Português + Inglês + Espanhol" }, "noUpgrade": "Sem melhoria de idioma" } }, "step4": { "title": "O seu preço", "subtitle": "Preço fixo — sem taxas ocultas", "breakdown": "Detalhes do preço", "privateTour": "Visita privada {{label}}", "weekendSupplement": "Suplemento de fim de semana", "weekendNote": "Sábado / Domingo (+{{pct}}%)", "totalForGroup": "Total para o seu grupo", "noHiddenFees": "Sem taxas ocultas. Pagamento seguro via Stripe.", "continue": "Escolher data e hora →", "back": "← Ajustar opções", "largeGroup": "Grupo grande detetado", "customDuration": "Duração personalizada selecionada", "largeGroupBody": "Grupos de {{n}} pessoas requerem um orçamento à medida. Richard preparará um preço personalizado para o seu grupo.", "customDurationBody": "Selecionou uma duração personalizada. Richard trabalhará consigo para criar o itinerário e preço perfeitos.", "indicative": "indicativo", "chargedInGBP": "Será cobrado em GBP." }, "step5": { "title": "Escolher data e hora", "subtitle": "Selecione a sua data e hora de início preferidas", "date": "Data", "startTime": "Hora de início", "continue": "Continuar para os seus dados →", "back": "← Voltar a personalizar o tour", "slotsError": "Não foi possível carregar os horários disponíveis. Por favor, tente novamente.", "noSlots": "Sem horários disponíveis para esta data. Por favor, escolha outra data.", "weekendNotice": "Reserva de fim de semana — aplica-se um suplemento de +{{pct}}%.", "weekdayRate": "tarifa de dia útil aplicada", "morning": "Manhã", "afternoon": "Tarde", "evening": "Noite", "enquireStrip": "Consultar", "closedTitle": "Não disponível neste dia", "closedBodyAttraction": "{name} está fechado neste dia da semana.", "closedBodyGeneric": "Uma atração deste tour está fechada neste dia da semana.", "closedBodySuffix": "Por favor escolha outra data ou", "closedContact": "contacte-nos", "closedSuffix2": "se tiver dúvidas.", "enquireTitle": "Sem disponibilidade online para esta data.", "enquireBody": "Por favor", "enquireLink": "contacte-nos para consultar", "enquireBody2": "a disponibilidade para este tour.", "legendAm": "AM = Manhã", "legendPm": "PM = Tarde", "legendEve": "EVE = Noite", "legendFullDay": "Dia completo = Tour de dia completo", "blockAm": "AM", "blockPm": "PM", "blockEve": "EVE", "blockFullDay": "Dia completo" }, "step6": { "title": "Os seus dados", "subtitle": "Será redirecionado para o checkout seguro da Stripe.", "summaryTitle": "Resumo da reserva", "tour": "Visita", "experience": "Experiência", "duration": "Duração", "vehicle": "Veículo", "language": "Idioma", "guests": "Participantes", "date": "Data", "time": "Hora", "walking": "Visitas a Pé", "driverGuided": "Visitas com Motorista-Guia", "chauffeurGuide": "Visitas com Chaufeur e Guia Privado", "contactSectionTitle": "Dados de Contacto", "pickupSectionTitle": "Pickup e Alojamento", "pickupSectionSubtitle": "Os seus dados de pickup ajudam a garantir uma experiência tranquila e personalizada.", "firstName": "Nome Próprio", "lastName": "Apelido", "email": "Endereço de Email", "phone": "Telemóvel / WhatsApp", "phoneHint": "Inclua o indicativo internacional completo, ex. +351 912 000 000", "pickupAddress": "Morada de Pickup", "pickupAddressHint": "Hotel, residência, Airbnb ou apartamento em Londres", "postcode": "Código Postal", "postcodeHint": "Necessário para localização precisa do pickup", "accommodationName": "Nome do Alojamento", "accommodationNameHint": "Nome do hotel, Airbnb ou apartamento (opcional mas útil)", "notes": "Notas Adicionais", "notesHint": "Detalhes de voo, requisitos de acessibilidade, crianças, bagagem, pedidos especiais…", "notesOptional": "(opcional)", "gdprNotice": "Os seus dados pessoais são recolhidos exclusivamente para cumprir a sua reserva e prestar o serviço de visita. São armazenados de forma segura e nunca partilhados com terceiros, exceto quando necessário para processar o pagamento (Stripe). Pode solicitar a eliminação dos seus dados a qualquer momento através do nosso contacto.", "phoneRequired": "O número de telemóvel / WhatsApp é obrigatório", "phoneInvalid": "Inclua o indicativo internacional completo (ex. +351…)", "postcodeRequired": "O código postal é obrigatório para visitas porta-a-porta" }, "priceSummary": { "title": "A sua seleção", "noTour": "Nenhuma visita selecionada ainda", "experience": "Experiência", "duration": "Duração", "vehicle": "Veículo", "language": "Idioma", "group": "Grupo", "date": "Data", "time": "Hora", "total": "Total", "bilingualUpgrade": "Melhoria de idioma", "indicative": "indicativo", "weekendSupplement": "Inclui suplemento de fim de semana (+{{pct}}%)", "customQuote": "Orçamento personalizado", "largeGroup": "Grupo grande — preço à medida", "customDuration": "Duração personalizada — contacte-nos", "loading": "A carregar preços…", "selectOptions": "Selecione opções para ver o pre
70ço", "baseTour": "Preço da visita", "walking": "Visitas a Pé", "driverGuided": "Visitas com Motorista-Guia", "chauffeurGuide": "Visitas com Chaufeur e Guia Privado", "trust": { "confirmation": "Confirmação instantânea de reserva", "stripe": "Pagamento seguro via Stripe" } }, "proceedToPayment": "Prosseguir para pagamento — £{{price}}", "redirecting": "A redirecionar para pagamento...", "stripeNote": "Será redirecionado para o checkout seguro da Stripe. SSL encriptado. Nenhum dado de cartão é armazenado neste site.", "total": "Total", "allTaxes": "Por grupo · Todos os impostos incluídos", "bookingIncludes": "A Reserva Inclui", "languages": { "en": "Inglês", "pt": "Português", "es": "Espanhol" } };
71const confirmation$1 = { "title": "Reserva Confirmada!", "body1": "Obrigado por reservar com a London City Tours. Um e-mail de confirmação foi enviado para a sua caixa de entrada com todos os detalhes da sua visita.", "body2": "Richard entrará em contacto antes da sua visita para confirmar os detalhes de recolha e responder a quaisquer questões.", "getInTouch": "Precisa de entrar em contacto?", "backHome": "Voltar ao Início", "moreTours": "Ver Mais Visitas", "bookAnother": { "eyebrow": "A planear mais do que uma experiência?", "title": "Reservar Outra Visita", "body": "Pode reservar uma segunda visita para uma data ou destino diferente. Os seus dados de contacto serão pré-preenchidos para poupar tempo.", "cta": "Reservar Outra Visita", "browse": "Ver Todas as Visitas" } };
72const about$2 = { "heroLabel": "O Seu Guia", "heroTitle": "Sobre Nós", "heroBody": "Bem-vindo à London City Tours — criada por Richard Cerquera, Guia Turístico com Crachá Azul registado.", "guideLabel": "Conheça o Seu Guia", "guideName": "Richard Cerquera", "body1": "Richard é um <strong>Guia Turístico com Crachá Azul</strong> registado — a mais alta qualificação para guias turísticos profissionais no Reino Unido, registado no Instituto de Guias Turísticos. O Crachá Azul é frequentemente considerado o padrão de excelência do guia turístico.", "body2": "Todas as visitas são realizadas num <strong>veículo Mercedes Benz totalmente elétrico</strong>, proporcionando uma experiência premium, confortável e ambientalmente responsável. Richard é também um <strong>Condutor Avançado IAM</strong>, garantindo a sua segurança em cada viagem.", "body3": "As visitas estão disponíveis em <strong>inglês, português e espanhol</strong>. Quer esteja a visitar Londres pela primeira vez ou a regressar para explorar além dos circuitos turísticos, Richard criará uma experiência completamente personalizada para os seus interesses.", "body4": "Todas as visitas são <strong>totalmente privadas</strong> — apenas o seu grupo, sem estranhos. Serviço de porta a porta a partir do seu hotel ou alojamento. A disponibilidade está sempre atualizada, pelo que pode reservar online instantaneamente sem chamadas ou e-mails.", "browseTours": "Ver Visitas", "whatsapp": "WhatsApp Richard", "stats": { "tripadvisor": "Classificação TripAdvisor", "private": "Visitas Privadas", "languages": "Idiomas", "emissions": "Emissões (EV)" }, "credentialsLabel": "Qualificações Profissionais", "credentialsTitle": "Credenciais e Acreditações", "credentials": [{ "title": "Guia Turístico com Crachá Azul", "body": 'O "Crachá Azul" é o padrão oficialmente reconhecido para guias turísticos no Reino Unido. Os Guias com Crachá Azul são divertidos, conhecedores e entusiastas, tendo passado por formação rigorosa para obter todas as suas acreditações. Frequentemente considerado o padrão de excelência do guia turístico.' }, { "title": "Condutor Avançado IAM", "body": "A formação do Instituto de Motoristas Avançados (IAM) melhora os padrões de condução e aumenta a segurança rodoviária, utilizando o sistema de controlo de veículos da polícia britânica. Isto garante a sua segurança e conforto em todos os momentos durante a visita." }, { "title": "Licenciado pelos Transportes de Londres", "body": "A London City Tours detém uma licença de Operador de Aluguer Privado dos Transportes de Londres (Licença #2114), garantindo total conformidade com os regulamentos de aluguer privado de Londres." }, { "title": "Associação de Guias Motoristas", "body": "Richard é membro da Associação de Guias Motoristas — o organismo profissional que representa os guias motoristas em todo o Reino Unido." }, { "title": "Licenciado pelos Transportes de Londres", "body": "A London City Tours detém uma licença de Operador de Aluguer Privado dos Transportes de Londres (Licença #2114), garantindo total conformidade com os regulamentos de aluguer privado de Londres." }], "reviewsLabel": "TripAdvisor", "reviewsTitle": "O Que Dizem os Nossos Clientes", "viewAllReviews": "Ver todas as avaliações no TripAdvisor" };
73const faq$1 = { "heroLabel": "Centro de Ajuda", "heroTitle": "Perguntas Frequentes", "heroBody": "Tudo o que precisa de saber sobre a reserva e realização de uma visita privada com a London City Tours.", "stillHaveQuestions": "Ainda Tem Dúvidas?", "stillBody": "Entre em contacto e Richard terá todo o prazer em ajudar.", "contact": "Contacte-nos", "whatsapp": "WhatsApp", "tableNoticePeriod": "Prazo de aviso", "tableCharge": "Encargo", "categories": [{ "category": "Reservas e Pagamento", "items": [{ "q": "Como faço uma reserva?", "a": "Basta navegar pelos nossos tours, selecionar o destino, escolher a opção preferida, escolher uma data e preencher o formulário de reserva. Será redirecionado para o nosso checkout seguro via Stripe. A confirmação é instantânea — sem necessidade de telefonemas ou e-mails." }, { "q": "Que métodos de pagamento aceitam?", "a": "Aceitamos todos os principais cartões de crédito e débito (Visa, Mastercard, American Express), bem como Apple Pay. Todos os pagamentos são processados de forma segura via Stripe com autenticação 3D Secure 2 (SCA)." }, { "q": "Os preços são por pessoa ou por grupo?", "a": "Todos os preços são por grupo (por veículo), não por pessoa. Isto torna os nossos tours um valor excecional para famílias, casais e pequenos grupos. O preço apresentado é o preço total, independentemente do número de pessoas no grupo (até à capacidade do veículo)." }, { "q": "Qual é a vossa política de cancelamento?", "a": "Os encargos de cancelamento aplicam-se da seguinte forma: 50% da taxa para cancelamentos efetuados entre 10 e 5 dias antes do tour; 100% da taxa para cancelamentos efetuados com 4 dias (96 horas) ou menos de antecedência. Qualquer reembolso devido será processado no prazo de 5 a 10 dias úteis para o método de pagamento original. Se precisar de reagendar, contacte-nos com pelo menos 5 dias de antecedência." }, { "q": "Posso reagendar a minha reserva?", "a": "Sim — contacte-nos por e-mail ou WhatsApp com pelo menos 5 dias de antecedência e faremos o possível para acomodar uma nova data, sujeito à disponibilidade. Pedidos de reagendamento efetuados com menos de 4 dias (96 horas) de antecedência podem ser tratados como cancelamento e o encargo aplicável será cobrado." }] }, { "category": "Os Tours", "items": [{ "q": "Os tours são mesmo privados?", "a": "Sim, absolutamente. Todos os nossos tours são 100% privados — apenas o seu grupo e o Richard. Nunca será agrupado com desconhecidos. É isso que torna os nossos tours tão pessoais e flexíveis." }, { "q": "Posso personalizar o itinerário?", "a": "Sim — todos os temas dos tours são totalmente personalizáveis. Ao reservar, pode indicar lugares, monumentos ou experiências específicas que gostaria de incluir. O Richard adaptará o tour aos seus interesses e ritmo." }, { "q": "Em que idiomas estão disponíveis os tours?", "a": "Os tours estão disponíveis em inglês, português e espanhol. Por favor, indique o idioma preferido ao reservar." }, { "q": "Em que veículo viajaremos?", "a": "Todos os Tours com Motorista-Guia e Tours com Motorista Privado e Guia são realizados num veículo privado premium — confortável, espaçoso e bem equipado. Richard Cerquera é um Condutor Avançado certificado pelo IAM RoadSmart, garantindo uma viagem tranquila e segura." }, { "q": "O serviço inclui transporte porta a porta?", "a": "Sim. Todos os tours incluem serviço porta a porta. O Richard irá buscá-lo ao seu hotel ou alojamento e trazê-lo de volta 
73no final do tour. Por favor, indique o endereço completo de recolha ao reservar." }, { "q": "As entradas estão incluídas no preço?", "a": "As entradas para atrações (ex.: Castelo de Windsor, Stonehenge, Hampton Court) não estão incluídas no preço do tour. O Richard aconselhá-lo-á sobre os preços de admissão atuais e pode ajudá-lo a comprar os bilhetes no dia." }] }, { "category": "Excursões de Um Dia", "items": [{ "q": "Com quanto tempo de antecedência devo reservar uma excursão?", "a": "Recomendamos reservar o mais cedo possível, especialmente durante a época alta (abril–outubro). No entanto, reservas de última hora são por vezes possíveis — verifique a disponibilidade online ou contacte-nos via WhatsApp." }, { "q": "Posso combinar dois destinos num só dia?", "a": "Sim — oferecemos tours combinados como Stonehenge & Bath, e Castelo de Windsor & Palácio de Hampton Court. Outras combinações podem ser possíveis consoante a distância e o tempo disponível. Contacte-nos para discutir um itinerário à medida." }, { "q": "A que horas começam e terminam as excursões?", "a": "Os horários variam consoante o destino. A maioria das excursões parte entre as 8h00 e as 9h00 e regressa ao início da noite. Os horários exatos serão confirmados na confirmação da reserva." }] }] };
74const contact$2 = { "heroLabel": "Entre em Contacto", "heroTitle": "Contacto", "heroBody": "Tem alguma questão ou quer discutir uma visita personalizada? Richard responderá prontamente.", "detailsTitle": "Dados de Contacto", "emailLabel": "E-mail", "phoneLabel": "Telefone", "whatsappLabel": "WhatsApp", "whatsappSub": "Resposta mais rápida", "whatsappMessage": "Envie-nos uma mensagem no WhatsApp", "notAffiliatedLine1": "Guia Oficial Independente de Londres.", "notAffiliatedLine2": "Não afiliado a nenhuma empresa de autocarros turísticos hop-on hop-off.", "responseTimes": "Tempos de Resposta", "responseBody": "As mensagens de WhatsApp são normalmente respondidas em poucas horas. As consultas por e-mail são respondidas em 24 horas. Para reservas urgentes, recomendamos o WhatsApp.", "languagesLabel": "Idiomas", "form": { "title": "Enviar Mensagem", "name": "O Seu Nome", "email": "Endereço de E-mail", "phone": "Número de Telefone", "phoneOptional": "(opcional)", "subject": "Assunto", "subjectPlaceholder": "Selecione um assunto...", "subjects": { "booking": "Consulta de Reserva de Visita", "bespoke": "Visita Privada / Personalizada", "corporate": "Grupo Empresarial", "general": "Questão Geral", "other": "Outro" }, "message": "Mensagem", "messagePlaceholder": "Conte-nos sobre o seu grupo, datas preferidas, destinos que gostaria de visitar ou quaisquer questões que tenha...", "send": "Enviar Mensagem", "sending": "A enviar...", "successTitle": "Mensagem Enviada!", "successBody": "Obrigado por entrar em contacto. Richard responderá à sua consulta em 24 horas." } };
75const terms$1 = { "heroLabel": "Legal", "heroTitle": "Termos e Condições", "lastUpdated": "Última atualização: Janeiro de 2026", "contactNote": "Para quaisquer questões sobre estes termos, por favor", "contactLink": "contacte-nos", "tableNoticePeriod": "Prazo de aviso", "tableCharge": "Encargo", "sections": [{ "key": "1", "title": "1. Reservas e Confirmação", "body": "Todas as reservas são confirmadas após recebimento do pagamento integral através do nosso sistema de reservas online seguro. Um e-mail de confirmação será enviado para o endereço de e-mail fornecido no momento da reserva. A London City Tours reserva-se o direito de recusar qualquer reserva a seu critério." }, { "key": "2", "title": "2. Preços", "body": "Todos os preços são indicados em Libras Esterlinas Britânicas (GBP) e são por grupo (por veículo), não por pessoa. Os preços incluem IVA quando aplicável. As entradas para atrações não estão incluídas, salvo indicação explícita." }, { "key": "3", "title": "3. Encargos de Cancelamento", "rows": [{ "label": "De 10 a 5 dias antes do início do serviço", "value": "50% da taxa" }, { "label": "4 dias (96 horas) ou menos antes do início do serviço", "value": "100% da taxa" }], "notes": ["Os encargos de cancelamento são calculados como percentagem da taxa total acordad
75a para o serviço.", "Os reembolsos devidos são processados no prazo de 5 a 10 dias úteis para o método de pagamento original."] }, { "key": "3a", "title": "3a. Equipamento Defeituoso — Tours de Autocarro", "body": "Para tours de autocarro: se não for disponibilizado um microfone ou sistema de som a funcionar, o operador será informado o mais rapidamente possível pelo guia. Se o tour continuar sem microfone a funcionar, o guia tem direito a receber um acréscimo de 100% da taxa original até que a situação seja corrigida." }, { "key": "4", "title": "4. Alterações e Emendas", "body": "Os pedidos de alteração de data ou detalhes de uma reserva devem ser efetuados com pelo menos 5 dias de antecedência e estão sujeitos à disponibilidade. A London City Tours fará todos os esforços para acomodar as alterações, mas não pode garantir disponibilidade. Alterações solicitadas com menos de 4 dias (96 horas) de antecedência podem ser tratadas como cancelamento e o encargo aplicável será cobrado." }, { "key": "5", "title": "5. Conduta", "body": "A London City Tours reserva-se o direito de encerrar um tour sem reembolso se algum hóspede se comportar de forma considerada insegura, abusiva ou perturbadora para o guia ou outras partes." }, { "key": "6", "title": "6. Responsabilidade", "body": "A London City Tours possui seguro de responsabilidade 
75civil completo. No entanto, não podemos aceitar responsabilidade por perdas, danos ou lesões decorrentes de circunstâncias fora do nosso controlo, incluindo, entre outros, atrasos de trânsito, condições meteorológicas ou encerramento de atrações." }, { "key": "7", "title": "7. Entradas", "body": "As entradas para atrações, museus, palácios e outros locais não estão incluídas no preço do tour, salvo indicação explícita. Os hóspedes são responsáveis pela compra dos seus próprios bilhetes de admissão." }, { "key": "8", "title": "8. Privacidade", "body": "Os dados pessoais recolhidos durante o processo de reserva são utilizados exclusivamente para cumprir a sua reserva e comunicar consigo sobre o seu tour. Não partilhamos os seus dados com terceiros, exceto quando necessário para processar o seu pagamento (Stripe)." }, { "key": "9", "title": "9. Lei Aplicável", "body": "Estes termos e condições são regidos pelas leis de Inglaterra e do País de Gales. Quaisquer disputas estarão sujeitas à jurisdição exclusiva dos tribunais de Inglaterra e do País de Gales." }] };
76const common$1 = { "notFound": "Visita Não Encontrada", "notFoundBody": "Não encontrámos essa visita. Explore todas as nossas visitas disponíveis abaixo.", "browseAllTours": "Ver Todas as Visitas", "required": "Obrigatório", "invalidEmail": "E-mail inválido", "pleaseMoreDetail": "Por favor, forneça mais detalhes" };
77const popularTours$1 = { "metaTitle": "Visitas Mais Populares — London City Tours", "metaDescription": "As nossas visitas guiadas privadas mais populares — Meio Dia em Londres, Grande Visita a Londres, Castelo de Windsor, Castelo de Windsor e Stonehenge, e Castelo de Windsor, Stonehenge e Bath. Selecionadas para visitantes pela primeira vez.", "heroLabel": "Selecionados para visitantes pela primeira vez", "heroTitle": "Visitas Mais Populares", "heroBody": "Cinco das nossas visitas privadas mais reservadas — des
77de meio dia em Londres até uma grande excursão pelo Castelo de Windsor, Stonehenge e Bath. Todas totalmente privadas, todas com um Guia Turístico com Crachá Azul.", "browseByDestination": "Explorar por destino", "viewAllTours": "Ver todas as visitas", "bespoke": { "label": "Tem algo diferente em mente?", "title": "Cada visita é totalmente personalizada", "body": "Não encontra exatamente o que procura? Richard pode adaptar qualquer visita aos seus interesses, ritmo e grupo. Entre em contacto para discutir um itinerário personalizado.", "cta": "Solicitar uma visita personalizada" } };
78const destinations$2 = { "allDestinations": "Todos os Destinos", "privateGuidedTours": "Visitas Guiadas Privadas", "tours": "Visitas", "lookingForSomethingElse": "Procura algo diferente?", "browseAllBody": "Explore todas as 14 visitas privadas ou descubra outros destinos.", "allTours": "Todas as visitas", "page": { "heroLabel": "Visitas Guiadas Privadas", "heroTitle": "Destinos", "heroBody": "Escolha um destino para explorar todas as visitas privadas disponíveis — desde visitas à cidade de Londres a excursões de dia por Inglaterra.", "tourCount_one": "{{count}} visita", "tourCount_other": "{{count}} visitas", "from": "a partir de", "perGroup": "por grupo", "priceDepends": "O preço final depende das opções selecionadas.", "privateTour": "Visita Privada", "explore": "Explorar", "browseAllTitle": "Ver todas as visitas", "browseAllBody": "Veja a lista completa de todas as 14 visitas privadas num só lugar.", "viewAllTours": "Ver todas as visitas →", "metaTitle": "Destinos — London City Tours", "metaDescription": "Explore visitas guiadas privadas por destino — Londres, Windsor, Stonehenge, Hampton Court, Oxford, Bath e os Cotswolds. Guia Turístico com Crachá Azul." }, "london": { "name": "Londres", "tagline": "A capital, explorada de forma privada", "description": "Desde palácios reais e museus de classe mundial a ruelas escondidas e monumentos icónicos — Londres é inesgotavelmente recompensadora com um Guia Turístico com Crachá Azul privado." }, "windsor": { "name": "Castelo de Windsor", "tagline": "Residências reais e história regal", "description": "Lar do castelo habitado mais antigo do mundo, Windsor é um dos destinos reais mais visitados de Inglaterra — a apenas 40 km de Londres.", "distance": "40 km de Londres" }, "stonehenge": { "name": "Stonehenge", "tagline": "4.500 anos de mistério pré-histórico", "description": "Um dos monumentos pré-históricos mais icónicos do mundo. Erguido na Planície de Salisbury há mais de quatro milénios, Stonehenge é uma experiência verdadeiramente imperdível.", "distance": "145 km de Londres" }, "hampton-court": { "name": "Palácio de Hampton Court", "tagline": "O magnífico palácio Tudor de Henrique VIII", "description": "O Palácio de Hampton Court é uma das mais belas residências reais de Inglaterra — uma obra-prima de arquitetura Tudor e Barroca em jardins ribeirinhos deslumbrantes, a apenas 24 km de Londres.", "distance": "24 km de Londres" }, "oxford": { "name": "Oxford", "tagline": "A Cidade das Torres Sonhadoras", "description": "Uma das cidades universitárias mais antigas e prestigiadas do mundo. Colégios históricos, a Biblioteca Bodleiana e séculos de história académica aguardam-no.", "distance": "97 km de Londres" }, "bath": { "name": "Bath", "tagline": "Elegância georgiana Património Mundial da UNESCO", "description": "A cidade georgiana mais elegante de Inglaterra — lar dos Banhos Romanos, do Royal Crescent e de algumas das mais belas arquiteturas Regency do mundo.", "distance": "185 km de Londres" }, "cotswolds": { "name": "Os Cotswolds", "tagline": "Campo inglês por excelência", "description": "Uma Área de Beleza Natural Excecional — aldeias de pedra dourada, colinas ondulantes e encanto inglês atemporal. Uma das regiões mais belas do país.", "distance": "129 km de Londres" } };
79const catalogue$2 = /* @__PURE__ */ JSON.parse('{"category":{"cityTour":"Visita à Cidade","dayTrip":"Excursão de Dia"}
79,"services":{"label":"Serviços Disponíveis","walking":"Visitas a Pé","driverGuided":"Visitas com Motorista-Guia","chauffeurGuide":"Visitas com Chaufeur e Guia Privado"},"serviceType":{"tourist-guide":{"label":"Visitas a Pé","capacity":"Ideal para até 57 hóspedes","description":"Guia Turístico com Crachá Azul a pé no destino.","descriptionCity":"Visita a pé por Londres com Guia Turístico com Crachá Azul."},"driver-guided":{"label":"Visitas com Motorista-Guia","capacity":"Ideal para até 6 hóspedes","description":"Richard atua como seu motorista e Guia Turístico com Crachá Azul. Veículo executivo incluído.","descriptionCity":"Richard atua como seu motorista e Guia Turístico com Crachá Azul — fluido, pessoal e eficiente. Veículo executivo incluído."},"chauffeur-guide":{"label":"Visitas com Chaufeur e Guia Privado","capacity":"Ideal para até 6 hóspedes","description":"Um chaufeur dedicado trata da condução enquanto o seu Guia Turístico com Crachá Azul se concentra inteiramente na experiência. Veículo executivo incluído.","descriptionCity":"Um chaufeur dedicado trata da condução enquanto o seu Guia Turístico com Crachá Azul se concentra inteiramente na experiência. Veículo executivo incluído."}},"duration":{"4h":"Até 4 horas","5h":"Até 5 horas","6h":"Até 6 horas","8h":"Até 8 horas","9h":"Até 9 horas","10h":"Até 10 horas","12h":"Até 12 horas"},"badge":{"bestSellingLondon":"Visita mais vendida em Londres"},"tours":{"westminster-abbey":{"title":"O Tour Nº1 da Abadia de Westminster","subtitle":"Abadia de Westminster • Big Ben • Palácio de Buckingham","duration":"Até 4 horas","description":"Descubra a Abadia de Westminster por dentro e depois experiencie o coração histórico de Westminster e o Londres Real com um Guia Turístico Blue Badge.","longDescription":"Descubra a Abadia de Westminster por dentro e depois experiencie o coração histórico de Westminster e o Londres Real com um Guia Turístico Blue Badge.","highlights":{"0":"Abadia de Westminster (entrada incluída)","1":"Big Ben e Casas do Parlamento","2":"Palácio de Buckingham","3":"Parliament Square"},"included":{"0":"Entrada na Abadia de Westminster"}},"london":{"title":"Visita de Meio Dia a Londres","subtitle":"Visita Guiada Privada a Londres","duration":"Até 4 horas","description":"Experiencie Londres como nunca antes numa visita totalmente privada e personalizada, liderada por Richard — um Guia Turístico com Crachá Azul com um conhecimento inigualável da cidade.","longDescription":"Os temas da visita são totalmente personalizáveis. Escolha a duração desejada e a partir daí podemos cobrir qualquer destino em Londres — desde palácios reais e museus de classe mundial a ruelas escondidas e monumentos icónicos. Cada visita é adaptada aos seus interesses, ritmo e grupo.","highlights":{"0":"Palácio de Buckingham e Guarda a Cavalo","1":"Torre de Londres e Joias da Coroa","2":"Abadia de Westminster e Parlamento","3":"Tower Bridge","4":"Catedral de São Paulo","5":"Hyde Park e Palácio de Kensington"},"notIncluded":{"0":"Entradas para atrações"}},"london-grand":{"title":"Grande Visita a Londres","subtitle":"Visita Guiada Privada de Dia Inteiro a Londres","duration":"Até 8 horas","description":"A experiência definitiva de Londres — um dia inteiro a explorar os maiores monumentos, joias escondidas e história real da cidade com o seu próprio Guia Turístico com Crachá Azul.","longDescription":"Os temas da visita são totalmente personalizáveis. Um dia inteiro dá-lhe a liberdade de explorar Londres em profundidade — palácios reais, museus de classe mundial, ruelas escondidas e monumentos icónicos. Cada visita é adaptada aos seus interesses, ritmo e grupo."},"windsor-castle":{"title":"Castelo de Windsor","subtitle":"Excursão Privada de Dia a partir de Londres","duration":"Até 5 horas","description":"Visite o castelo habitado mais antigo e maior do mundo — lar da Família Real Britânica há mais de 1.000 anos.","longDescription":"O Castelo de Windsor tem sido a residência dos monarcas britânicos há quase 1.000 anos. E
79xplore os Aposentos de Estado, a Capela de São Jorge e o belo Long Walk com o seu Guia Turístico com Crachá Azul privado. Uma excursão perfeita a partir de Londres.","highlights":{"0":"Aposentos de Estado do Castelo de Windsor","1":"Capela de São Jorge","2":"O Long Walk","3":"Guarda a Cavalo (sazonal)"},"notIncluded":{"0":"Entrada para o Castelo de Windsor"}},"windsor-hampton-court":{"title":"Castelo de Windsor e Palácio de Hampton Court","subtitle":"Excursão Privada Combinada de Dia a partir de Londres","duration":"Até 8 horas","description":"Dois dos mais magníficos palácios reais de Inglaterra num dia inesquecível — Castelo de Windsor e Palácio de Hampton Court.","longDescription":"Comece no Castelo de Windsor, o castelo habitado mais antigo do mundo e lar da Família Real, antes de viajar para o Palácio de Hampton Court — a magnífica obra-prima Tudor de Henrique VIII. O seu Guia Turístico com Crachá Azul privado dá vida a ambos os palácios com comentários especializados.","highlights":{"0":"Aposentos de Estado do Castelo de Windsor e Capela de São Jorge","1":"Grande Salão do Palácio de Hampton Court","2":"O famoso Labirinto de Hampton Court","3":"Dois palácios reais num só dia","4":"Comentários especializados do Guia Turístico com Crachá Azul"}},"windsor-stonehenge":{"title":"Castelo de Windsor e Stonehenge","subtitle":"Excursão Privada Combinada de Dia a partir de Londres","duration":"Até 10 horas","description":"Combine grandiosidade real com mistério pré-histórico — Castelo de Windsor e as icónicas pedras de Stonehenge.","longDescription":"Comece o seu dia no Castelo de Windsor, o castelo habitado mais antigo do mundo e residência oficial da Família Real Britânica. Depois viaje para oeste até Stonehenge, o icónico monumento pré-histórico que se ergue na Planície de Salisbury há mais de 4.500 anos. O seu Guia Turístico com Crachá Azul privado liga as histórias de ambos os locais ao longo do dia."},"windsor-stonehenge-bath":{"title":"Castelo de Windsor, Stonehenge e Bath","subtitle":"Grande Excursão Privada Combinada de Dia a partir de Londres","duration":"Até 12 horas","description":"O melhor dia de excursão — três dos destinos mais icónicos de Inglaterra numa extraordinária visita privada.","longDescription":"Esta grande excursão combinada leva-o do esplendor real do Castelo de Windsor ao mistério pré-histórico de Stonehenge, terminando na cidade Património Mundial da UNESCO de Bath. Um dia inteiro da história, arquitetura e paisagens mais celebradas de Inglaterra, guiado pelo seu Guia Turístico com Crachá Azul privado.","highlights":{"4":"Três locais UNESCO/património num só dia"}},"stonehenge":{"title":"Stonehenge","subtitle":"Excursão Privada de Dia a partir de Londres","duration":"Até 6 horas","description":"Fique diante de um dos maiores monumentos pré-históricos do mundo — um Património Mundial da UNESCO que tem cativado visitantes há milénios.","longDescription":"Erguido há mais de 4.500 anos na Planície de Salisbury, Stonehenge é um dos locais mais misteriosos e impressionantes do mundo. A sua visita privada inclui comentários especializados do seu Guia Turístico com Crachá Azul ao longo de toda a viagem.","highlights":{"0":"Monumento pré-histórico de Stonehenge","1":"Paisagem da Planície de Salisbury","2":"Comentários históricos especializados","3":"Paragens para fotografias nos melhores pontos de vista"},"notIncluded":{"0":"Entrada para Stonehenge"}},"stonehenge-bath":{"title":"Stonehenge e Bath","subtitle":"Excursão Privada Combinada de Dia a partir de Londres","duration":"Até 12 horas","description":"Maravilha pré-histórica encontra elegância georgiana — Stonehenge e a bela cidade romana de Bath numa excursão privada de dia.","longDescription":"Visite o antigo mistério de Stonehenge na Planície de Salisbury antes de continuar para Bath, a cidade georgiana mais elegante de Inglaterra. Explore os Banhos Romanos, o Royal Crescent e a Ponte Pulteney com o seu Guia Turístico com Crachá Azul privado. Uma combinação perfeita do património antigo e georgiano de Inglaterra."},"hampton-court":{"title":"Palácio de Hampton Court","subtitle":"Excursão Privada de Dia a partir de Londres","duration":"Até 5 horas","description":"Explore o magnífico palácio Tudor de Henrique VIII — uma das mais espetaculares residências reais de Inglaterra.","longDescription":"O Palácio de Hampton Court é uma obra-prima da arquitetura Tudor e Barroca situada em deslumbrantes jardins à beira do rio. Explore o Grande Salão, a Capela Real, o famoso Labirinto e os belos jardins formais com o seu Guia Turístico com Crachá Azul privado.","highlights":{"0":"Grande Salão de Henrique VIII","1":"A Capela Real","2":"O famoso Labirinto de Hampton Court","3":"Jardins formais barrocos","4":"Localização à beira do Tamisa"},"notIncluded":{"0":"Entrada para Hampton Court"}},"oxford":{"title":"Oxford","subtitle":"Excursão Privada de Dia a partir de Londres","duration":"Até 9 horas","description":"Descubra a Cidade das Torres Sonhadoras — séculos de tradição académica, arquitetura deslumbrante e pátios escondidos.","longDescription":"Oxford tem sido um centro de aprendizagem desde o século XI. Passeie pelos antigos pátios dos colégios, visite a Biblioteca Bodleiana e explore a deslumbrante arquitetura da cidade com o seu Guia Turístico com Crachá Azul privado. Uma excursão verdadeiramente inesquecível a partir de Londres.","highlights":{"0":"Colégio Christ Church","1":"Biblioteca Bodleiana","2":"Câmara Radcliffe","3":"Mercado Coberto","4":"Colégio Magdalen e parque de veados"}},"oxford-cotswolds":{"title":"Oxford e os Cotswolds","subtitle":"Excursão Privada Combinada de Dia a partir de Londres","duration":"Até 
7910 horas","description":"O melhor do património inglês — as torres sonhadoras de Oxford e as aldeias de pedra dourada dos Cotswolds.","longDescription":"Comece em Oxford, uma das maiores cidades universitárias do mundo, explorando antigos colégios e a Biblioteca Bodleiana. Depois viaje para os Cotswolds, uma Área de Beleza Natural Excecional, visitando aldeias pitorescas como Bourton-on-the-Water e Burford. O seu Guia Turístico com Crachá Azul privado dá vida a ambos os destinos.","highlights":{"0":"Antigos colégios universitários de Oxford","1":"Biblioteca Bodleiana e Câmara Radcliffe"}},"oxford-stratford":{"title":"Oxford e Stratford-Upon-Avon","subtitle":"Excursão Privada Combinada de Dia a partir de Londres","duration":"Até 10 horas","description":"Duas das cidades mais célebres de Inglaterra — a cidade universitária de Oxford e o local de nascimento de Shakespeare em Stratford-upon-Avon.","longDescription":"Explore os magníficos colégios e as ruas antigas de Oxford antes de viajar para Stratford-upon-Avon, o local de nascimento de William Shakespeare. Visite a Casa Natal de Shakespeare, o Chalé de Anne Hathaway e a bela cidade mercado com o seu Guia Turístico com Crachá Azul privado.","highlights":{"2":"Casa Natal de Shakespeare","3":"Chalé de Anne Hathaway","4":"Centro da cidade de Stratford-upon-Avon"},"notIncluded":{"0":"Entrada para a Casa Natal de Shakespeare"}},"cotswolds":{"title":"Os Cotswolds","subtitle":"Excursão Privada de Dia a partir de Londres","duration":"Até 10 horas","description":"Colinas ondulantes, aldeias de pedra dourada e campo inglês por excelência — os Cotswolds na sua máxima beleza.","longDescription":"Os Cotswolds são uma das regiões mais belas de Inglaterra, designada Área de Beleza Natural Excecional. Visite aldeias pitorescas como Bourton-on-the-Water, Burford e Bibury, com comentários especializados do seu Guia Turístico com Crachá Azul privado ao longo do dia.","highlights":{"0":"Bourton-on-the-Water","1":"Burford e a Rua Principal","2":"Bibury e Arlington Row","3":"Aldeia de Broadway","4":"Campo ondulante dos Cotswolds"}},"bath":{"title":"Bath","subtitle":"Excursão Privada de Dia a partir de Londres","duration":"Até 8 horas","description":"Explore a única cidade de Inglaterra com fontes termais naturais — um Património Mundial da UNESCO de banhos romanos e grandiosidade georgiana.","longDescription":"Bath é uma cidade Património Mundial da UNESCO de extraordinária beleza. Explore os Banhos Romanos, o Royal Crescent, a Ponte Pulteney e a Abadia com o seu Guia Turístico com Crachá Azul privado. Uma das excursões mais gratificantes a partir de Londres.","highlights":{"0":"Os Banhos Romanos","1":"Royal Crescent e The Circus","2":"Ponte Pulteney","3":"Abadia de Bath","4":"Arquitetura e ruas georgianas"},"notIncluded":{"0":"Entrada para os Banhos Romanos"}}},"shared":{"highlights":{"expertCommentaryBothSites":"Comentários especializados em ambos os locais"},"included":{"guide":"Guia Turístico com Crachá Azul privado","doorToDoor":"Serviço porta a porta","instantConfirmation":"Confirmação instantânea da reserva","flexibleItinerary":"Itinerário flexível adaptado a si","flexibleVillageSelection":"Seleção flexível de aldeias"},"notIncluded":{"entranceFees":"Entradas para atrações","meals":"Refeições e bebidas","gratuities":"Gorjetas (discricionárias)","collegeEntranceFees":"Entradas para colégios (quando aplicável)","anyEntranceFees":"Quaisquer entradas para atrações"}}}');
80const serviceLanding$1 = { "walking": { "heroLabel": "Tours a Pé em Londres", "heroTitle": "Tours a Pé em Londres e Além", "heroBody": "Explore Londres e os maiores destinos do Reino Unido a pé, guiado por Richard Cerquera — Guia Turístico Blue Badge registado pelo Instituto de Guias Turísticos.", "metaTitle": "Tours a Pé em Londres — Guia Blue Badge", "metaDescription": "Reserve um tour a pé em Londres com um Guia Turístico Blue Badge. Passeios guiados em Londres, Windsor, Stonehenge, Oxford, Bath e Cotswolds. Totalmente privado.", "sectionLabel": "Tours a Pé", "ctaLabel": "Reservar Este Tour a Pé", "experienceTag": "Tour a Pé", "capacityNote": "Ideal para até 57 participantes", "introCopy": "Tours a pé privados em Londres, Windsor, Stonehenge, Oxford, Bath e Cotswolds. Totalmente privados e adaptados ao seu grupo.", "limitedLabel": "Disponibilidade Limitada", "limitedTitle": "Actualmente Indisponível para Estes Tours" }, "driverGuided": { "heroLabel": "Tours com Motorista-Guia em Londres", "heroTitle": "Tours Privados com Motorista-Guia em Londres", "heroBody": "Richard Cerquera é simultaneamente o seu motorista e Guia Turístico Blue Badge — eficiente, pessoal e sem complicações. Veículo executivo incluído, porta a porta.", "metaTitle": "Tours com Motorista-Guia em Londres — Tours de Carro Privados", "metaDescription": "Tours privados com motorista-guia em Londres. Richard Cerquera é o seu motorista e Guia Blue Badge — veículo executivo incluído, porta a porta. Até 6 pessoas.", "sectionLabel": "Tours com Motorista-Guia", "ctaLabel": "Reservar Este Tour com Motorista-Guia", "experienceTag": "Tour com Motorista-Guia", "capacityNote": "Ideal para até 6 pessoas", "unavailableTitle": "Tours com Motorista-Guia Temporariamente Indisponíveis", "unavailableBody": "Os Tours com Motorista-Guia estão temporariamente indisponíveis. Para uma experiência privada perfeita, considere um Tour com Motorista e Guia Privado.", "unavailableCta": "Ver Tours com Motorista e Guia", "introCopy": "Procura um guia-motorista privado em Londres? Richard combina guia Blue Badge com condução profissional — ideal para tours na cidade e algumas excursões de dia. Até 6 pessoas.", "limitedLabel": "Disponibilidade Limitada", "limitedTitle": "Actualmente Indisponível para Estes Tours" }, "chauffeur": { "heroLabel": "Tours com Motorista e Guia em Londres", "heroTitle": "Tours com Motorista e Guia Privado", "heroBody": "Um motorista dedicado trata da condução enquanto o seu Guia Turístico Blue Badge se concentra inteiramente em si. Veículo executivo com motorista dedicado, porta a porta.", "metaTitle": "Tours com Motorista e Guia em Londres — Chauffeured Tours Privados", "metaDescription": "Tours privados com motorista e guia em Londres e além. Um motorista dedicado e Guia Turístico Blue Badge — a forma premium de explorar Londres, Windsor, Stonehenge, Oxford, Bath e Cotswolds.", "sectionLabel": "Tours com Motorista e Guia", "ctaLabel": "Reservar Este Tour com Motorista", "experienceTag": "Tour com Motorista e Guia", "capacityNote": "Ideal para até 6 pessoas", "introCopy": "A experiência máxima de tour privado em Londres. Um motorista profissional conduz enquanto Richard Cerquera, Guia Blue Badge, presta comentários especializados. Disponível para Londres e todas as excursões de dia." }, "common": { "cityTours": "Tours em Londres", "dayTrips": "Excursões de Dia a partir de Londres", "from": "a partir de", "perGroup": "por grupo", "priceDepends": "O preço final depende das opções selecionadas.", "privateTour": "Tour privado", "viewAll": "Ver Todos os Tours", "bespokeTitle": "Procura Algo à Medida?", "bespokeBody": "Cada tour é totalmente adaptado aos seus interesses, ritmo e grupo. Contacte-nos para discutir um itinerário personalizado.", "bespokeEnquire": "Solicitar um Tour à Medida", "bespokeWhatsapp": "WhatsApp" } };
81const pt = {
82  nav: nav$1,
83  footer: footer$1,
84  home: home$2,
85  tours: tours$2,
86  tourDetail: tourDetail$1,
87  booking: booking$1,
88  confirmation: confirmation$1,
89  about: about$2,
90  faq: faq$1,
91  contact: contact$2,
92  terms: terms$1,
93  common: common$1,
94  popularTours: popularTours$1,
95  destinations: destinations$2,
96  catalogue: catalogue$2,
97  serviceLanding: serviceLanding$1
98};
99const nav = { "destinations": "Destinos", "tours": "Todos los Tours", "about": "Sobre Nosotros", "faq": "FAQ", "contact": "Contacto", "bookNow": "Reservar" };
100const footer = { "destinations": "Destinos", "information": "Información", "contact": "Contacto", "paymentsAccepted": "Pagos Aceptados", "copyright": "© {{year}} London City Tours. Todos los derechos reservados.", "tagline": "Tours privados guiados por Londres y más allá, dirigidos por Richard Cerquera — Guía Turístico con Insignia Azul.", "credentials": "Operador de Alquiler Privado de Transportes de Londres\nAsociación de Guías Conductores · Licencia #2114", "whatsapp": "WhatsApp", "languages": "English · Português · Español", "stripeNote": "Stripe 3D Secure 2 · SSL Encriptado", "links": { "about": "Sobre Richard", "faq": "FAQ", "contact": "Contáctenos", "terms": "Términos y Condiciones", "showTickets": "Entradas de Espectáculos" }, "services": { "heading": "Nuestros Servicios", "walking": "Tours a Pie", "driverGuided": "Tours con Conductor-Guía", "chauffeur": "Tours con Chófer y Guía", "allTours": "Todos los Tours" } };
101const home$1 = { "badge": "Miembro del Instituto de Guías Turísticos", "heroTitle": "Tours Privados por", "heroTitleHighlight": "Londres y Más Allá", "heroTypes": { "heading": "Servicios Disponibles", "walking": "Tours a Pie", "driver": "Tours con Conductor-Guía", "chauffeur": "Tours con Chófer y Guía Privado" }, "heroSubtitle": "Vive el destino, no solo los monumentos", "heroBody": "Tours privados y a medida de puerta a puerta para individuos, parejas, familias y grupos. A pie, con conductor o chófer+guía. Disponibilidad siempre actualizada — reserva al instante en línea.", "browseAllTours": "Ver Todos los Tours", "whatsappUs": "WhatsApp", "search": { "placeholder": "Busca aventuras", "ariaLabel": "Buscar tours", "noResults": 'No se encontraron tours para "{{query}}"', "from": "desde", "privateTour": "Tour Privado" }, "trust": { "tripadvisor": "Valoración de 5 estrellas en TripAdvisor", "confirmation": "Confirmación instantánea", "private": "Tours totalmente privados", "vehicle": "Vehículo ejecutivo disponible", "electric": "Vehículo Mercedes eléctrico" }, "destinations": { "sectionLabel": "Tours Privados", "title": "Elige Tu Destino", "viewAll": "Ver todos", "viewTours": "Ver tours", "viewAllTours": "Ver Todos los Tours", "mostPopularTours": "Tours Más Populares", "from": "Desde", "perGroup": "por grupo", "priceDepends": "El precio final depende de las opciones seleccionadas.", "upToPassengers": "hasta 6 pasajeros", "tripadvisor": "Valoración 5.0 en TripAdvisor", "category": { "cityTour": "Tour por la Ciudad", "dayTrip": "Excursión de un Día" } }, "howItWorks": { "sectionLabel": "Simple y Seguro", "title": "Cómo Funciona", "steps": [{ "title": "Elige Tu Destino", "body": "Explora nuestros tours — tours por la ciudad de Londres o excursiones de un día a Stonehenge, Windsor Castle, los Cotswolds, Oxford, Bath y más." }, { "title": "Selecciona Fecha y Grupo", "body": "Elige tu fecha preferida. Todos los tours son privados — solo tu grupo, sin extraños. La disponibilidad siempre está actualizada." }, { "title": "Paga de Forma Segura y Confirma", "body": "Reserva y paga en línea a través de Stripe. La confirmación llega al instante. Sin llamadas, sin correos, sin esperas." }] }, "about": { "sectionLabel": "Tu Guía", "title": "Conoce a Richard Cerquera", "body1": "Richard es un <strong>Guía Turístico con Insignia Azul</strong> registrado — la más alta cualificación para guías turísticos profesionales en el Reino Unido, frecuentemente considerada el estándar de oro. También es un <strong>Conductor Avanzado IAM</strong>, garantizando tu seguridad y comodidad en cada viaje.", "body2": "Los tours están disponibles en <strong>inglés, portugués y español</strong>. Todos los tours se realizan en un vehículo Mercedes Benz totalmente eléctrico — de puerta a puerta, privado y completamente adaptado a ti.", "readMore": "Leer más sobre Richard", "blueBadge": "Registrado", "blueBadgeTitle": "Guía Turístico con Insignia Azul", "professionalMemberships": "Membresías Profesionales", "itgRegisterLink": "Ver en el Registro del Instituto de Guías Turísticos", "credentials": { "blueBadge": { "title": "Guía Turístico con Insignia Azul", "body": "La más alta cualificación para guías turísticos profesionales en el Reino Unido — el estándar de oro." }, "iam": { "title": "Conductor Avanzado IAM", "body": "Formación del Instituto de Motoristas Avanzados. Tu seguridad es nuestra prioridad en todo momento." }, "languages": { "title": "English · Português · Español", "body": "Tours disponibles en tres idiomas. Hablamos tu idioma." } } }, "reviews": { "sectionLabel": "Reseñas de TripAdvisor", "title": "Lo Que Dicen Nuestros Clientes", "viewAll": "Ver todas las reseñas en Tr
101ipAdvisor", "ratedExcellent": "Valorado como Excelente en TripAdvisor" }, "cta": { "sectionLabel": "¿Listo para Explorar?", "title": "Reserva Tu Tour Privado Hoy", "body": "Todos los tours son totalmente privados — solo tu grupo. La disponibilidad siempre está actualizada. Reserva en línea en minutos y recibe confirmación instantánea." } };
102const tours$1 = { "bestSeller": "Más popular", "distanceLabel": "Aprox. {{distance}} recorridos", "pageTitle": "Todos los Tours", "metaDescription": "Explora todos los tours guiados privados — tours por la ciudad de Londres y excursiones de un día a Stonehenge, el Castillo de Windsor, los Cotswolds, Oxford, Bath y el Palacio de Hampton Court.", "heroLabel": "Tours Guiados Privados", "heroTitle": "Elige Tu Tour", "heroBody": "Todos los tours son totalmente privados — solo tu grupo, sin extraños. Dirigidos por Richard Cerquera, Guía Turístico con Insignia Azul.", "cityToursLabel": "Tours por la Ciudad", "cityToursTitle": "Londres", "dayTripsLabel": "Excursiones de un Día desde Londres", "dayTripsTitle": "Más Allá de Londres", "from": "Desde", "perGroup": "por grupo", "priceDepends": "El precio final depende de las opciones seleccionadas.", "upToPassengers": "hasta 6 pasajeros", "tripadvisor": "Valoración 5.0 en TripAdvisor", "rating": "5.0", "viewBook": "Ver tour →", "bespoke": { "title": "¿Necesitas un Tour a Medida?", "body": "Todos los tours son totalmente personalizables. ¿Tienes un itinerario específico en mente? ¿Un grupo corporativo? ¿Una ocasión especial? Contáctanos y Richard diseñará la experiencia perfecta para ti.", "enquire": "Solicitar Información", "whatsapp": "WhatsApp" } };
103const tourDetail = { "allTours": "Todos los Tours", "aboutTour": "Sobre Este Tour", "tourOptions": "Opciones de Tour", "highlights": "Destacados", "included": "Qué Está Incluido", "notIncluded": "No Incluido", "privateTour": "Tour Privado", "perGroup": "por grupo", "priceDepends": "El precio final depende de las opciones seleccionadas.", "upToPassengers": "hasta 6 pasajeros", "bookTour": "Reservar Ahora", "bookingIncludes": "La Reserva Incluye", "bookThisTour": "Comprobar disponibilidad", "viewDetails": "Ver detalles del tour", "youMightAlsoLike": "También Te Puede Gustar", "vehicleNote": "Los tours de larga distancia son especialmente adecuados para Tours con Conductor-Guía o Tours con Chófer y Guía Privado — ideales para grupos privados de hasta 6 personas.", "vehicleNoteLarge": "Para grupos más grandes, será necesario organizar transporte por separado.", "meta": { "private": "Totalmente privado — solo tu grupo", "doorToDoor": "Servicio de puerta a puerta", "languages": "Inglés · Portugués · Español", "vehicle": "Vehículo ejecutivo incluido", "vehicleChauffeur": "Vehículo ejecutivo con chófer dedicado", "electric": "Vehículo Mercedes eléctrico", "confirmation": "Confirmación instantánea de reserva" }, "londonInspiration": { "sectionLabel": "Lugares para Explorar", "heading": "¿A dónde vamos?", "intro": "Algunas ideas para tu día en Londres — cada itinerario se adapta a tus intereses. Estos son posibles lugares a explorar, no inclusiones garantizadas.", "manyMore": "+ muchos más", "disclaimer": "Tu guía adaptará el itinerario a tu grupo. No todos los lugares de abajo pueden cubrirse en un solo tour, y algunas atracciones requieren entrada por separado.", "showMore": "Explorar más posibilidades", "showLess": "Mostrar menos" } };
104const booking = { "pageTitle": "Reserva Tu Tour", "subtitle": "Tour Guiado Privado", "backTo": "Volver a {{tour}}", "stepOf": "Paso {{step}} de 4", "step1": { "title": "Elige tu tour", "subtitle": "Selecciona un destino para empezar", "num": "1" }, "step2": { "title": "Elige tu experiencia", "subtitle": "¿Cómo te gustaría explorar?", "num": "2", "date": "Fecha Preferida", "guests": "Número de Participantes", "guest": "participante", "guests_plural": "participantes", "walking": "Tour a Pie", "walkingTagline": "A pie con un Guía con Insignia Azul", "walkingDesc": "Explora las calles, plazas y pasajes escondidos de Londres a pie. Ideal para hasta 57 participantes.", "walkingMax": "Hasta 57 participantes", "walkingAway": "Guía con Insignia Azul — A Pie en el Destino", "walkingAwayTagline": "Guiado a pie al llegar", "walkingAwayDesc": "Tu Guía con Insignia Azul te recibe en el destino y conduce la visita completamente a pie. El transporte al destino se organiza por separado.", "walkingAwayNote": "El transporte al destino debe organizarse por separado (coche, tren o autobús) y cumplir con la normativa de transporte privado.", "driverGuided": "Tours con Conductor-Guía", "driverGuidedTagline": "Richard conduce y guía", "driverGuidedDesc": "Richard actúa como conductor y Guía con Insignia Azul — perfecto, personal y eficiente.", "driverGuidedMax": "Hasta 6 pasajeros", "chauffeurGuide": "Tours con Chófer y Guía Privado", "chauffeurGuideTagline": "Conductor y guía dedicados", "chauffeurGuideDe
104sc": "Un conductor dedicado se encarga de la conducción mientras tu Guía con Insignia Azul se centra completamente en ti.", "chauffeurGuideMax": "Hasta 6 pasajeros", "groupSize": "Tamaño del grupo", "driverGuidedDisabledHeading": "La disponibilidad de los Tours con Conductor-Guía está actualmente limitada para tours fuera de Londres.", "driverGuidedDisabledBody": "Los Tours con Chófer y Guía Privado siguen completamente disponibles — ofreciendo la misma experiencia de guía experto con un chófer dedicado y vehículo ejecutivo.", "driverGuidedDisabledRecommendLabel": "Alternativa recomendada", "driverGuidedDisabledRecommendValue": "Chófer Privado + Guía Turístico Oficial de Londres", "driverGuidedDisabledCta": "Ver Tours con Chófer y Guía", "driverGuidedDisabledPill": "Disponibilidad Limitada" }, "step3": { "title": "Personaliza tu tour", "subtitle": "Elige la duración, idioma y tamaño del grupo", "num": "3", "firstName": "Nombre", "lastName": "Apellido", "email": "Dirección de Correo Electrónico", "phone": "Número de Teléfono", "pickup": "Dirección de Recogida", "pickupPlaceholder": "Nombre del hotel o dirección completa en Londres", "specialRequests": "Solicitudes Especiales", "specialRequestsOptional": "(opcional)", "specialRequestsPlaceholder": "Lugares específicos que te gustaría visitar, requisitos de accesibilidad, etc.", "duration": "Duración", "vehicle": "Vehículo", "language": "Idioma", "groupSize": "Tamaño del grupo", "adults": "Adultos", "adultsNote": "", "children": "Niños", "childrenNote": "", "infants": "Bebés", "infantsNote": "", "groupSizeNote": "Adultos + niños + bebés cuentan para la capacidad máxima del grupo.", "totalGuests": "Total de participantes", "totalPassengers": "Total de pasajeros", "maxGuests": "(máx. {{n}} participantes)", "maxPassengers": "(máx. {{n}} pasajeros)", "guests": "participantes", "passengers": "pasajeros", "upToPassengers": "Hasta {{n}} pasajeros", "enquiry": "consulta", "estimatedTotal": "Total estimado", "maxPassengersWarning": "Máximo de {{n}} pasajeros para este tipo de vehículo.", "largeGroupWarning": "Los grupos de más de 57 personas requieren un presupuesto personalizado. Continúa para solicitar un precio a medida.", "requestQuote": "Solicitar presupuesto personalizado →", "reviewPricing": "Comprobar Disponibilidad →", "bilingualNote": "Para visitas bilingües o trilingües, por favor contácteme.", "bilingualUpgrade": { "label": "Mejora de idioma", "sectionTitle": "Añadir una mejora de idioma", "description": "El tour se realizará en dos o tres idiomas simultáneamente. Ideal para grupos con idiomas mixtos.", "options": { "es-en": "Español + Inglés", "es-pt": "Español + Portugués", "trilingual": "Tour trilingüe: Español + Inglés + Portugués" }, "noUpgrade": "Sin mejora de idioma" } }, "step4": { "title": "Tu precio", "subtitle": "Precio fijo — sin cargos ocultos", "breakdown": "Desglose del precio", "privateTour": "Tour privado {{label}}", "weekendSupplement": "Suplemento de fin de semana", "weekendNote": "Sábado / Domingo (+{{pct}}%)", "totalForGroup": "Total para tu grupo", "noHiddenFees": "Sin cargos ocultos. Pago seguro a través de Stripe.", "continue": "Elegir fecha y hora →", "back": "← Ajustar opciones", "largeGroup": "Grupo grande detectado", "customDuration": "Duración personalizada seleccionada", "largeGroupBody": "Los grupos de {{n}} personas requieren un presupuesto a medida. Richard preparará un precio personalizado para tu grupo.", "customDurationBody": "Seleccionaste una duración personalizada. Richard trabajará contigo para crear el itinerario y precio perfectos.", "indicative": "indicativo", "chargedInGBP": "Se te cobrará en GBP." }, "step5": { "title": "Elegir fecha y hora", "subtitle": "Selecciona tu fecha y hora de inicio preferidas", "date": "Fecha", "startTime": "Hora de inicio", "continue": "Continuar con sus datos →", "back": "← Volver a personalizar el tour", "slotsError": "No se pudieron cargar los horarios disponibles. Por favor, inténtalo de nuevo.", "noSlots": "No hay horarios disponibles para esta fecha. Por favor, elige otra fecha.", "weekendNotice": "Reserva de fin de semana — se aplica un suplemento de +{{pct}}%.", "weekdayRate": "tarifa de día laborable aplicada", "morning": "Mañana", "afternoon": "Tarde", "evening": "Noche", "enquireStrip": "Consultar", "closedTitle": "No disponible en este día", "closedBodyAttraction": "{name} está cerrado este día de la semana.", "closedBodyGeneric": "Una atracción de este tour está cerrada este día de la semana.", "closedBodySuffix": "Por favor elija otra fecha o", "closedContact": "contáctenos", "closedSuffix2": "si tiene alguna pregunta.", "enquireTitle": "Sin disponibilidad en línea para esta fecha.", "enquireBody": "Por favor", "enquireLink": "contáctenos para consultar", "enquireBody2": "la disponibilidad para este tour.", "legendAm": "AM = Mañana", "legendPm": "PM = Tarde", "legendEve": "EVE = Noche", "legendFullDay": "Día completo = Tour de día completo", "blockAm": "AM", "blockPm": "PM", "blockEve": "EVE", "blockFullDay": "Día completo" }, "step6": { "title": "Tus datos", "subtitle": "Serás redirigido al checkout seguro de Stripe.", "summaryTitle": "Resumen de la reserva", "tour": "Tour", "experience": "Experiencia", "duration": "Duración", "vehicle": "Vehículo", "language": "Idioma", "guests": "Participantes", "date": "Fecha", "time": "Hora", "walking": "Tours a P
104ie", "driverGuided": "Tours con Conductor-Guía", "chauffeurGuide": "Tours con Chófer y Guía Privado", "contactSectionTitle": "Datos de Contacto", "pickupSectionTitle": "Recogida y Alojamiento", "pickupSectionSubtitle": "Sus datos de recogida nos ayudan a garantizar una experiencia fluida y personalizada.", "firstName": "Nombre", "lastName": "Apellidos", "email": "Correo Electrónico", "phone": "Móvil / WhatsApp", "phoneHint": "Incluya el prefijo internacional completo, ej. +34 612 000 000", "pickupAddress": "Dirección de Recogida", "pickupAddressHint": "Hotel, residencia, Airbnb o apartamento en Londres", "postcode": "Código Postal", "postcodeHint": "Necesario para la localización exacta de recogida", "accommodationName": "Nombre del Alojamiento", "accommodationNameHint": "Nombre del hotel, Airbnb o apartamento (opcional pero útil)", "notes": "Notas Adicionales", "notesHint": "Detalles de vuelo, requisitos de accesibilidad, niños, equipaje, solicitudes especiales…", "notesOptional": "(opcional)", "gdprNotice": "Sus datos personales se recopilan únicamente para gestionar su reserva y prestar el servicio del tour. Se almacenan de forma segura y nunca se comparten con terceros, salvo cuando sea necesario para procesar el pago (Stripe). Puede solicitar la eliminación de sus datos en cualquier momento poniéndose en contacto con nosotros.", "phoneRequired": "El número de móvil / WhatsApp es obligatorio", "phoneInvalid": "Incluya el prefijo internacional completo (ej. +34…)", "postcodeRequired": "El código postal es obligatorio para los tours puerta a puerta" }, "priceSummary": { "title": "Tu selección", "noTour": "Ningún tour seleccionado aún", "experience": "Experiencia", "duration": "Duración", "vehicle": "Vehículo", "language": "Idioma", "group": "Grupo", "date": "Fecha", "time": "Hora", "total": "Total", "bilingualUpgrade": "Mejora de idioma", "indicative": "indicativo", "weekendSupplement": "Incluye suplemento de fin de semana (+{{pct}}%)", "customQuote": "Presupuesto personalizado", "largeGroup": "Grupo grande — precio a medida", "customDuration": "Duración personalizada — contáctenos", "loading": "Cargando precios…", "selectOptions": "Selecciona opciones para ver el precio", "baseTour": "Precio del tour", "walking": "Tours a Pie", "driverGuided": "Tours con Conductor-Guía", "chauffeurGuide": "Tours con Chófer y Guía Privado", "trust": { "confirmation": "Confirmación instantánea de reserva", "stripe": "Pago seguro a través de Stripe" } }, "proceedToPayment": "Proceder al pago — £{{price}}", "redirecting": "Redirigiendo al pago...", "stripeNote": "Serás redirigido al checkout seguro de Stripe. SSL encriptado. No se almacenan datos de tarjeta en este sitio.", "total": "Total", "allTaxes": "Por grupo · Todos los impuestos incluidos", "bookingIncludes": "La Reserva Incluye", "languages": { "en": "Inglés", "pt": "Portugués", "es": "Español" } };
105const confirmation = { "title": "¡Reserva Confirmada!", "body1": "Gracias por reservar con London City Tours. Se ha enviado un correo electrónico de confirmación a tu bandeja de entrada con todos los detalles de tu tour.", "body2": "Richard se pondrá en contacto antes de tu tour para confirmar los detalles de recogida y responder cualquier pregunta.", "getInTouch": "¿Necesitas ponerte en contacto?", "backHome": "Volver al Inicio", "moreTours": "Ver Más Tours", "bookAnother": { "eyebrow": "¿Planeas más de una experiencia?", "title": "Reservar Otro Tour", "body": "Puedes reservar un segundo tour para una fecha o destino diferente. Tus datos de contacto se rellenarán automáticamente para ahorrarte tiempo.", "cta": "Reservar Otro Tour", "browse": "Ver Todos los Tours" } };
106const about$1 = { "heroLabel": "Tu Guía", "heroTitle": "Sobre Nosotros", "heroBody": "Bienvenido a London City Tours — creado por Richard Cerquera, Guía Turístico con Insignia Azul registrado.", "guideLabel": "Conoce a Tu Guía", "guideName": "Richard Cerquera", "body1": "Richard es un <strong>Guía Turístico con Insignia Azul</strong> registrado — la más alta cualificación para guías turísticos profesionales en el Reino Unido, registrado en el Instituto de Guías Turísticos. La Insignia Azul es frecuentemente considerada el estándar de oro del guía turístico.", "body2": "Todos los tours se realizan en un <strong>vehículo Mercedes Benz totalmente eléctrico</strong>, proporcionando una experiencia premium, cómoda y ambientalmente responsable. Richard también es un <strong>Conductor Avanzado IAM</strong>, garantizando tu seguridad en cada viaje.", "body3": "Los tours están disponibles en <strong>inglés, portugués y español</strong>. Ya sea que estés visitando Londres por primera vez o regresando para explorar más allá de los circuitos turísticos, Richard creará una experiencia completamente personalizada para tus intereses.", "body4": "Todos los tours son <strong>totalmente privados</strong> — solo tu grupo, sin extraños. Servicio de puerta a puerta desde tu hotel o alojamiento. La disponibilidad siempre está actualizada, por lo que puedes reservar en línea al instante sin llamadas ni correos.", "browseTours": "Ver Tours", "whatsapp": "WhatsApp Richard", "stats": { "tripadvisor": "Valoración TripAdvisor", "private": "Tours Privados", "languages": "Idiomas", "emissions": "Emisiones (EV)" }, "credentialsLabel": "Cualificaciones Profesionales", "credentialsTitle": "Credenciales y Acreditaciones", "credentials": [{ "title": "Guía Turístico con Insignia Azul", "body": 'La "Insignia Azul" es el estándar oficialmente reconocido para guías turísticos en el Reino Unido. Los Guías con Insignia Azul son divertidos, conocedores y entretenidos, y han superado una formación rigurosa para obtener todas sus acreditaciones. Frecuentemente considerado el estándar de oro del guía turístico.' }, { "title": "Conductor Avanzado IAM", "body": "La formación del Instituto de Motoristas Avanzados (IAM) mejora los estándares de conducción y aumenta la seguridad vial, utilizando el sistema de control de vehículos de la policía británica. Esto garantiza tu seguridad y comodidad en todo momento durante el tour." }, { "title": "Licenciado por Transportes de Londres", "body": "London City Tours posee una licencia de Operador de Alquiler Privado de Transportes de Londres (Licencia #2114), garantizando el pleno cumplimiento de las regulaciones de alquiler privado de Londres." }, { "title": "Asociación de Guías Conductores", "body": "Richard es miembro de la Asociación de Guías Conductores — el organismo profesional que representa a los guías conductores en todo el Reino Unido." }, { "title": "Licenciado por Transportes de Londres", "body": "London City Tours posee una licencia de Operador de Alquiler Privado de Transportes de Londres (Licencia #2114), garantizando el pleno cumplimiento de las regulaciones de alquiler privado de Londres." }], "reviewsLabel": "TripAdvisor", "reviewsTitle": "Lo Que Dicen Nuestros Clientes", "viewAllReviews": "Ver todas las reseñas en Tr
106ipAdvisor" };
107const faq = { "heroLabel": "Centro de Ayuda", "heroTitle": "Preguntas Frecuentes", "heroBody": "Todo lo que necesitas saber sobre la reserva y realización de un tour privado con London City Tours.", "stillHaveQuestions": "¿Aún Tienes Preguntas?", "stillBody": "Contáctanos y Richard estará encantado de ayudarte.", "contact": "Contáctenos", "whatsapp": "WhatsApp", "tableNoticePeriod": "Plazo de aviso", "tableCharge": "Cargo", "categories": [{ "category": "Reservas y Pago", "items": [{ "q": "¿Cómo reservo un tour?", "a": "Simplemente explore nuestros tours, seleccione su destino, elija la opción de tour preferida, escoja una fecha y complete el formulario de reserva. Será redirigido a nuestro pago seguro a través de Stripe. La confirmación es instantánea — sin necesidad de llamadas ni correos electrónicos." }, { "q": "¿Qué métodos de pago aceptan?", "a": "Aceptamos todas las principales tarjetas de crédito y débito (Visa, Mastercard, American Express), así como Apple Pay. Todos los pagos se procesan de forma segura a través de Stripe con autenticación 3D Secure 2 (SCA)." }, { "q": "¿Los precios son por persona o por grupo?", "a": "Todos los precios son por grupo (por vehículo), no por persona. Esto hace que nuestros tours sean un valor excepcional para familias, parejas y grupos pequeños. El precio que ve es el precio total independientemente del número de personas en su grupo (hasta la capacidad del vehículo)." }, { "q": "¿Cuál es su política de cancelación?", "a": "Los cargos por cancelación se aplican de la siguiente manera: 50% de la tarifa para cancelaciones realizadas entre 10 y 5 días antes del tour; 100% de la tarifa para cancelaciones realizadas con 4 días (96 horas) o menos de antelación. Cualquier reembolso pendiente se procesará en un plazo de 5 a 10 días hábiles al método de pago original. Si necesita reprogramar, contáctenos con al menos 5 días de antelación." }, { "q": "¿Puedo reprogramar mi reserva?", "a": "Sí — contáctenos por correo electrónico o WhatsApp con al menos 5 días de antelación y haremos todo lo posible para acomodar una nueva fecha, sujeto a disponibilidad. Las solicitudes de reprogramación realizadas con menos de 4 días (96 horas) de antelación pueden tratarse como una cancelación y se aplicará el cargo correspondiente." }] }, { "category": "Los Tours", "items": [{ "q": "¿Los tours son realmente privados?", "a": "Sí, absolutamente. Todos nuestros tours son 100% privados — solo su grupo y Richard. Nunca será agrupado con extraños. Esto es lo que hace que nuestros tours sean tan personales y flexibles." }, { "q": "¿Puedo personalizar el itinerario?", "a": "Sí — todos los temas de los tours son totalmente personalizables. Al reservar, puede especificar lugares, monumentos o experiencias particulares que le gustaría incluir. Richard adaptará el tour a sus intereses y ritmo." }, { "q": "¿En qué idiomas están disponibles los tours?", "a": "Los tours están disponibles en inglés, portugués y español. Por favor, indique su idioma preferido al reservar." }, { "q": "¿En qué vehículo viajaremos?", "a": "Todos los Tours con Conductor-Guía y Tours con Conductor Privado y Guía se realizan en un vehículo privado premium — cómodo, espacioso y bien equipado. Richard Cerquera es un Conductor Avanzado certificado por IAM RoadSmart, lo que garantiza un viaje tranquilo y seguro." }, { "q": "¿Se incluye el servicio puerta a puerta?", "a": "Sí. Todos los tours incluyen servicio puerta a puerta. Richard le recogerá en su hotel o alojamiento y le devolverá al final del tour. Por favor, proporcione su dirección completa de recogida al reservar." }, { "q": "¿Están incluidas las entradas en el precio?", "a": "Las entradas a atracciones (p. ej., Castillo de Windsor, Stonehenge, Hampton Court) no están incluidas en el precio del tour. Richard le asesorará sobre los precios de admisión actuales y puede ayudarle a comprar las entradas el día del tour." }] }, { "category": "Excursiones de Un Día", "items": [{ "q": "¿Con cuánta antelación debo reservar una excursión?", "a": "Recomendamos reservar lo antes posible, especialmente durante la temporada alta (abril–octubre). Sin embargo, las reservas de última hora a veces son posibles — compruebe la disponibilidad en línea o contáctenos por WhatsApp." }
107, { "q": "¿Puedo combinar dos destinos en un día?", "a": "Sí — ofrecemos tours combinados como Stonehenge & Bath, y Castillo de Windsor & Palacio de Hampton Court. Otras combinaciones pueden ser posibles según la distancia y el tiempo disponible. Contáctenos para hablar sobre un itinerario a medida." }, { "q": "¿A qué hora comienzan y terminan las excursiones?", "a": "Los horarios varían según el destino. La mayoría de las excursiones parten entre las 8:00 y las 9:00 y regresan a primera hora de la tarde. Los horarios exactos se confirmarán en la confirmación de su reserva." }] }] };
108const contact$1 = { "heroLabel": "Ponte en Contacto", "heroTitle": "Contacto", "heroBody": "¿Tienes alguna pregunta o quieres hablar sobre un tour a medida? Richard te responderá con prontitud.", "detailsTitle": "Datos de Contacto", "emailLabel": "Correo Electrónico", "phoneLabel": "Teléfono", "whatsappLabel": "WhatsApp", "whatsappSub": "Respuesta más rápida", "whatsappMessage": "Envíanos un mensaje por WhatsApp", "notAffiliatedLine1": "Guía Oficial Independiente de Londres.", "notAffiliatedLine2": "No afiliado a ninguna empresa de autobuses turísticos hop-on hop-off.", "responseTimes": "Tiempos de Respuesta", "responseBody": "Los mensajes de WhatsApp se responden normalmente en pocas horas. Las consultas por correo electrónico se responden en 24 horas. Para reservas urgentes, se recomienda WhatsApp.", "languagesLabel": "Idiomas", "form": { "title": "Enviar un Mensaje", "name": "Tu Nombre", "email": "Dirección de Correo Electrónico", "phone": "Número de Teléfono", "phoneOptional": "(opcional)", "subject": "Asunto", "subjectPlaceholder": "Selecciona un asunto...", "subjects": { "booking": "Consulta de Reserva de Tour", "bespoke": "Tour Privado / A Medida", "corporate": "Grupo Corporativo", "general": "Pregunta General", "other": "Otro" }, "message": "Mensaje", "messagePlaceholder": "Cuéntanos sobre tu grupo, fechas preferidas, destinos que te gustaría visitar o cualquier pregunta que tengas...", "send": "Enviar Mensaje", "sending": "Enviando...", "successTitle": "¡Mensaje Enviado!", "successBody": "Gracias por ponerte en contacto. Richard responderá a tu consulta en 24 horas." } };
109const terms = { "heroLabel": "Legal", "heroTitle": "Términos y Condiciones", "lastUpdated": "Última actualización: Enero de 2026", "contactNote": "Para cualquier pregunta sobre estos términos, por favor", "contactLink": "contáctenos", "tableNoticePeriod": "Plazo de aviso", "tableCharge": "Cargo", "sections": [{ "key": "1", "title": "1. Reservas y Confirmación", "body": "Todas las reservas se confirman tras la recepción del pago completo a través de nuestro sistema de reservas en línea seguro. Se enviará un correo electrónico de confirmación a la dirección proporcionada en el momento de la reserva. London City Tours se reserva el derecho de rechazar cualquier reserva a su discreción." }, { "key": "2", "title": "2. Precios", "body": "Todos los precios se indican en Libras Esterlinas Británicas (GBP) y son por grupo (por vehículo), no por persona. Los precios incluyen IVA cuando corresponda. Las entradas a atracciones no están incluidas salvo que se indique expresamente." }, { "key": "3", "title": "3. Cargos por Cancelación", "rows": [{ "label": "De 10 a 5 días antes del inicio del servicio", "value": "50% de la tarifa" }, { "label": "4 días (96 horas) o menos antes del inicio del servicio", "value": "100% de la tarifa" }], "notes": ["Los cargos por cancelación se calculan como porcentaje de la tarifa total acordad
109a para el servicio.", "Los reembolsos pendientes se procesan en un plazo de 5 a 10 días hábiles al método de pago original."] }, { "key": "3a", "title": "3a. Equipo Defectuoso — Tours en Autocar", "body": "Para tours en autocar: si no se proporciona un micrófono o sistema de sonido en funcionamiento, el operador será informado lo antes posible por el guía. Si el tour continúa sin micrófono en funcionamiento, el guía tiene derecho a recibir un incremento del 100% de la tarifa original hasta que la situación sea corregida." }, { "key": "4", "title": "4. Cambios y Modificaciones", "body": "Las solicitudes de cambio de fecha o detalles de una reserva deben realizarse con al menos 5 días de antelación y están sujetas a disponibilidad. London City Tours hará todo lo posible para acomodar los cambios, pero no puede garantizar disponibilidad. Los cambios solicitados con menos de 4 días (96 horas) de antelación pueden tratarse como una cancelación y se aplicará el cargo correspondiente." }, { "key": "5", "title": "5. Conducta", "body": "London City Tours se reserva el derecho de finalizar un tour sin reembolso si algún huésped se comporta de manera considerada insegura, abusiva o perturbadora para el guía u otras partes." }, { "key": "6", "title": "6. Responsabilidad", "body": "London City Tours cuenta con un seguro de responsabilidad civil completo. Sin embargo, no podemos aceptar responsabilidad por pérdidas, daños o lesiones derivados de circunstancias fuera de nuestro control, incluyendo, entre otros, retrasos de tráfico, condiciones meteorológicas o el cierre de atracciones." }, { "key": "7", "title": "7. Entradas", "body": "Las entradas a atracciones, museos, palacios y otros lugares no están incluidas en el precio del tour salvo que se indique expresamente. Los huéspedes son responsables de adquirir sus propias entradas." }, { "key": "8", "title": "8. Privacidad", "body": "Los datos personales recopilados durante el proceso de reserva se utilizan únicamente para cumplir con su reserva y comunicarnos con usted sobre su tour. No compartimos sus datos con terceros excepto cuando sea necesario para procesar su pago (Stripe)." }, { "key": "9", "title": "9. Ley Aplicable", "body": "Estos términos y condiciones se rigen por las leyes de Inglaterra y Gales. Cualquier disputa estará sujeta a la jurisdicción exclusiva de los tribunales de Inglaterra y Gales." }] };
110const common = { "notFound": "Tour No Encontrado", "notFoundBody": "No pudimos encontrar ese tour. Explora todos nuestros tours disponibles a continuación.", "browseAllTours": "Ver Todos los Tours", "required": "Obligatorio", "invalidEmail": "Correo electrónico no válido", "pleaseMoreDetail": "Por favor, proporciona más detalles" };
111const popularTours = { "metaTitle": "Tours Más Populares — London City Tours", "metaDescription": "Nuestros tours guiados privados más populares — Medio Día en Londres, Gran Tour de Londres, Castillo de Windsor, Castillo de Windsor y Stonehenge, y Castillo de Windsor, Stonehenge y Bath. Seleccionados para visitantes por primera vez.", "heroLabel": "Seleccionados para visitantes por primera vez", "heroTitle": "Tours Más Populares", "heroBody": "Cinco de nuestros tours privados más reservados — des
111de medio día en Londres hasta un gran recorrido por el Castillo de Windsor, Stonehenge y Bath. Todos totalmente privados, todos con un Guía Turístico con Insignia Azul.", "browseByDestination": "Explorar por destino", "viewAllTours": "Ver todos los tours", "bespoke": { "label": "¿Tienes algo diferente en mente?", "title": "Cada tour es totalmente a medida", "body": "¿No encuentras exactamente lo que buscas? Richard puede adaptar cualquier tour a tus intereses, ritmo y grupo. Contáctanos para hablar sobre un itinerario personalizado.", "cta": "Consultar sobre un tour a medida" } };
112const destinations$1 = { "allDestinations": "Todos los Destinos", "privateGuidedTours": "Tours Guiados Privados", "tours": "Tours", "lookingForSomethingElse": "¿Buscas algo diferente?", "browseAllBody": "Explora los 14 tours privados o descubre otros destinos.", "allTours": "Todos los tours", "page": { "heroLabel": "Tours Guiados Privados", "heroTitle": "Destinos", "heroBody": "Elige un destino para explorar todos los tours privados disponibles — desde tours por la ciudad de Londres hasta excursiones de un día por Inglaterra.", "tourCount_one": "{{count}} tour", "tourCount_other": "{{count}} tours", "from": "desde", "perGroup": "por grupo", "priceDepends": "El precio final depende de las opciones seleccionadas.", "privateTour": "Tour Privado", "explore": "Explorar", "browseAllTitle": "Ver todos los tours", "browseAllBody": "Consulta la lista completa de los 14 tours privados en un solo lugar.", "viewAllTours": "Ver todos los tours →", "metaTitle": "Destinos — London City Tours", "metaDescription": "Explora tours guiados privados por destino — Londres, Windsor, Stonehenge, Hampton Court, Oxford, Bath y los Cotswolds. Guía Turístico con Insignia Azul." }, "london": { "name": "Londres", "tagline": "La capital, explorada de forma privada", "description": "Desde palacios reales y museos de clase mundial hasta callejuelas escondidas e hitos icónicos — Londres es infinitamente gratificante con un Guía Turístico con Insignia Azul privado." }, "windsor": { "name": "Castillo de Windsor", "tagline": "Residencias reales e historia regal", "description": "Hogar del castillo habitado más antiguo del mundo, Windsor es uno de los destinos reales más visitados de Inglaterra — a solo 40 km de Londres.", "distance": "40 km de Londres" }, "stonehenge": { "name": "Stonehenge", "tagline": "4.500 años de misterio prehistórico", "description": "Uno de los monumentos prehistóricos más icónicos del mundo. Erguido en la Llanura de Salisbury hace más de cuatro milenios, Stonehenge es una experiencia verdaderamente imperdible.", "distance": "145 km de Londres" }, "hampton-court": { "name": "Palacio de Hampton Court", "tagline": "El magnífico palacio Tudor de Enrique VIII", "description": "El Palacio de Hampton Court es una de las residencias reales más espléndidas de Inglaterra — una obra maestra de arquitectura Tudor y Barroca en impresionantes jardines ribereños, a solo 24 km de Londres.", "distance": "24 km de Londres" }, "oxford": { "name": "Oxford", "tagline": "La Ciudad de las Torres Soñadoras", "description": "Una de las ciudades universitarias más antiguas y prestigiosas del mundo. Colegios históricos, la Biblioteca Bodleiana y siglos de historia académica te esperan.", "distance": "97 km de Londres" }, "bath": { "name": "Bath", "tagline": "Elegancia georgiana Patrimonio Mundial de la UNESCO", "description": "La ciudad georgiana más elegante de Inglaterra — hogar de los Baños Romanos, el Royal Crescent y algunas de las arquitecturas Regency más bellas del mundo.", "distance": "185 km de Londres" }, "cotswolds": { "name": "Los Cotswolds", "tagline": "Campo inglés por excelencia", "description": "Un Área de Extraordinaria Belleza Natural — pueblos de piedra dorada, colinas ondulantes y encanto inglés atemporal. Una de las regiones más hermosas del país.", "distance": "129 km de Londres" } };
113const catalogue$1 = /* @__PURE__ */ JSON.parse('{"category":{"cityTour":"Tour por la Ciudad","dayTrip":"Excursión de un Día"},"services":{"label":"Servicios Disponibles","walking":"Tours a P
113ie","driverGuided":"Tours con Conductor-Guía","chauffeurGuide":"Tours con Chófer y Guía Privado"},"serviceType":{"tourist-guide":{"label":"Tours a Pie","capacity":"Ideal para hasta 57 huéspedes","description":"Guía Turístico con Insignia Azul a pie en el destino.","descriptionCity":"Tour a pie por Londres con Guía Turístico con Insignia Azul."},"driver-guided":{"label":"Tours con Conductor-Guía","capacity":"Ideal para hasta 6 huéspedes","description":"Richard actúa como tu conductor y Guía Turístico con Insignia Azul. Vehículo ejecutivo incluido.","descriptionCity":"Richard actúa como tu conductor y Guía Turístico con Insignia Azul — fluido, personal y eficiente. Vehículo ejecutivo incluido."},"chauffeur-guide":{"label":"Tours con Chófer y Guía Privado","capacity":"Ideal para hasta 6 huéspedes","description":"Un chófer dedicado se encarga de la conducción mientras tu Guía Turístico con Insignia Azul se centra por completo en la experiencia. Vehículo ejecutivo incluido.","descriptionCity":"Un chófer dedicado se encarga de la conducción mientras tu Guía Turístico con Insignia Azul se centra por completo en la experiencia. Vehículo ejecutivo incluido."}},"duration":{"4h":"Hasta 4 horas","5h":"Hasta 5 horas","6h":"Hasta 6 horas","8h":"Hasta 8 horas","9h":"Hasta 9 horas","10h":"Hasta 10 horas","12h":"Hasta 12 horas"},"badge":{"bestSellingLondon":"Tour más vendido en Londres"},"tours":{"westminster-abbey":{"title":"El Tour Nº1 de la Abadía de Westminster","subtitle":"Abadía de Westminster • Big Ben • Palacio de Buckingham","duration":"Hasta 4 horas","description":"Descubre la Abadía de Westminster desde dentro y luego vive el corazón histórico de Westminster y el Londres Real con un Guía Turístico con Insignia Azul.","longDescription":"Descubre la Abadía de Westminster desde dentro y luego vive el corazón histórico de Westminster y el Londres Real con un Guía Turístico con Insignia Azul.","highlights":{"0":"Abadía de Westminster (entrada incluida)","1":"Big Ben y Casas del Parlamento","2":"Palacio de Buckingham","3":"Parliament Square"},"included":{"0":"Entrada a la Abadía de Westminster"}},"london":{"title":"Tour de Medio Día por Londres","subtitle":"Tour Guiado Privado por Londres","duration":"Hasta 4 horas","description":"Experimenta Londres como nunca antes en un tour totalmente privado y personalizado dirigido por Richard — un Guía Turístico con Insignia Azul con un conocimiento inigualable de la ciudad.","longDescription":"Los temas del tour son totalmente personalizables. Elige la duración deseada y desde ahí podemos cubrir cualquier destino en Londres — desde palacios reales y museos de clase mundial hasta callejuelas escondidas y monumentos icónicos. Cada tour está adaptado a tus intereses, ritmo y grupo.","highlights":{"0":"Palacio de Buckingham y Cambio de Guardia","1":"Torre de Londres y Joyas de la Corona","2":"Abadía de Westminster y Casas del Parlamento","3":"Tower Bridge","4":"Catedral de San Pablo","5":"Hyde Park y Palacio de Kensington"},"notIncluded":{"0":"Entradas a atracciones"}},"london-grand":{"title":"Gran Tour de Londres","subtitle":"Tour Guiado Privado de Día Completo por Londres","duration":"Hasta 8 horas","description":"La experiencia definitiva de Londres — un día entero explorando los grandes monumentos, joyas ocultas e historia real de la ciudad con tu propio Guía Turístico con Insignia Azul.","longDescription":"Los temas del tour son totalmente personalizables. Un día completo te da la libertad de explorar Londres en profundidad — palacios reales, museos de clase mundial, callejuelas escondidas y monumentos icónicos. Cada tour está adaptado a tus intereses, ritmo y grupo."},"windsor-castle":{"title":"Castillo de Windsor","subtitle":"Excursión Privada de un Día desde Londres","duration":"Hasta 5 horas","description":"Visita el castillo habitado más antiguo y grande del mundo — hogar de la Familia Real Británica durante más de 1.000 años.","longDescription":"El Castillo de Windsor ha sido el hogar de los monarcas británicos durante casi 1.000 años. Explora los Aposentos de Estado, la Capilla de San Jorge y el hermoso Long Walk con tu Guía Turístico con Insignia Azul privado. Una excursión perfecta desde Londres.","highlights":{"0":"Aposentos de Estado del Castillo de Windsor","1":"Capilla de San Jorge","2":"El Long Walk","3":"Cambio de Guardia (estacional)"},"notIncluded":{"0":"Entrada al Castillo de Windsor"}},"windsor-hampton-court":{"title":"Castillo de Windsor y Palacio de Hampton Court","subtitle":"Excursión Privada Combinada de un Día desde Londres","duration":"Hasta 8 horas","description":"Dos de los palacios reales más magníficos de Inglaterra en un día inolvidable — Castillo de Windsor y Palacio de Hampton Court.","longDescription":"Comienza en el Castillo de Windsor, el castillo habitado más antiguo del mundo y hogar de la Familia Real, antes de viajar al Palacio de Hampton Court — la magnífica obra maestra Tudor de Enrique VIII. Tu Guía Turístico con Insignia Azul privado da vida a ambos palacios con comentarios expertos.","highlights":{"0":"Aposentos de Estado del Castillo de Windsor y Capilla de San Jorge","1":"Gran Salón del Palacio de Hampton Court","2":"El famoso Laberinto de Hampton Court","3":"Dos palacios reales en un solo día","4":"Comentarios expertos del Guía Turístico con Insignia Azul"}},"windsor-stonehenge":{"title":"Castillo de Windsor y Stonehenge","subtitle":"Excursión Privada Combinada de un Día desde Londres","duration":"Hasta 10 horas","description":"Combina grandeza real con misterio prehistórico — el Castillo de Windsor y las icónicas piedras de Stonehenge.","longDescription":"Comienza tu día en el Castillo de Windsor, el castillo habitado más antiguo del mundo y residencia oficial de la Familia Real Británica. Luego viaja al oeste hasta Stonehenge, el icónico monumento prehistórico que lleva más de 4.500 años en pie en la Llanura de Salisbury. Tu Guía Turístico con Insignia Azul privado conecta las historias de ambos sitios a lo largo del día."},"windsor-stonehenge-bath":{"title":"Castillo de Windsor, Stonehenge y Bath","subtitle":"Gran Excursión Privada Combinada de un Día desde Londres","duration":"Hasta 12 horas","description":"La excursión de un día definitiva — tres de los destinos más icónicos de Inglaterra en un extraordinario tour privado.","longDescription":"Este gran tour combinado te lleva desde el esplendor real del Castillo de Windsor al misterio prehistórico de Stonehenge, terminando en la ciudad Patrimonio Mundial de la UNESCO de Bath. Un día completo de la historia, arquitectura y paisajes más celebrados de Inglaterra, guiado por tu Guía Turístico con Insignia Azul privado.","highlights":{"4":"Tres sitios UNESCO/patrimonio en un solo día"}},"stonehenge":{"title":"Stonehenge","subtitle":"Excursión Privada de un Día desde Londres","duration":"Hasta 6 horas","description":"Párate ante uno de los mayores monumentos prehistóricos del mundo — un Patrimonio Mundial de la UNESCO que ha cautivado a visitantes durante milenios.","longDescription":"En pie durante más de 4.500 años en la Llanura de Salisbury, Stonehenge es uno de los sitios más misteriosos e impresionantes del mundo. Tu tour privado incluye comentarios expertos de tu Guía Turístico con Insignia Azul durante todo el viaje.","highlights":{"0":"Monumento prehistórico de Stonehenge","1":"Paisaje de la Llanura de Salisbury","2":"Comentarios históricos expertos","3":"Paradas fotográficas en los mejores miradores"},"notIncluded":{"0":"Entrada a Stonehenge"}},"stonehenge-bath":{"title":"Stonehenge y Bath","subtitle":"Excursión Privada Combinada de un Día desde Londres","duration":"Hasta 12 horas","description":"Maravilla prehistórica encuentra elegancia georgiana — Stonehenge y la bella ciudad romana de Bath en una excursión privada de un día.","longDescription":"Visita el antiguo misterio de Stonehenge en la Llanura de Salisbury antes de continuar a Bath, la ciudad georgiana más elegante de Inglaterra. Explora los Baños Romanos, el Royal Crescent y el Puente Pulteney con tu Guía Turístico con Insignia Azul privado. Una comb
113inación perfecta del patrimonio antiguo y georgiano de Inglaterra."},"hampton-court":{"title":"Palacio de Hampton Court","subtitle":"Excursión Privada de un Día desde Londres","duration":"Hasta 5 horas","description":"Explora el magnífico palacio Tudor de Enrique VIII — una de las residencias reales más espectaculares de Inglaterra.","longDescription":"El Palacio de Hampton Court es una obra maestra de la arquitectura Tudor y Barroca situada en impresionantes jardines a orillas del río. Explora el Gran Salón, la Capilla Real, el famoso Laberinto y los hermosos jardines formales con tu Guía Turístico con Insignia Azul privado.","highlights":{"0":"Gran Salón de Enrique VIII","1":"La Capilla Real","2":"El famoso Laberinto de Hampton Court","3":"Jardines formales barrocos","4":"Ubicación a orillas del Támesis"},"notIncluded":{"0":"Entrada al Palacio de Hampton Court"}},"oxford":{"title":"Oxford","subtitle":"Excursión Privada de un Día desde Londres","duration":"Hasta 9 horas","description":"Descubre la Ciudad de las Torres Soñadoras — siglos de tradición académica, arquitectura impresionante y patios ocultos.","longDescription":"Oxford ha sido un centro de aprendizaje desde el siglo XI. Pasea por los antiguos patios de los colegios, visita la Biblioteca Bodleiana y explora la impresionante arquitectura de la ciudad con tu Guía Turístico con Insignia Azul privado. Una excursión verdaderamente inolvidable desde Londres.","highlights":{"0":"Colegio Christ Church","1":"Biblioteca Bodleiana","2":"Cámara Radcliffe","3":"Mercado Cubierto","4":"Colegio Magdalen y parque de ciervos"}},"oxford-cotswolds":{"title":"Oxford y Los Cotswolds","subtitle":"Excursión Privada Combinada de un Día desde Londres","duration":"Hasta 10 horas","description":"Lo mejor del patrimonio inglés — las torres soñadoras de Oxford y los pueblos de piedra dorada de los Cotswolds.","longDescription":"Comienza en Oxford, una de las mayores ciudades universitarias del mundo, explorando antiguos colegios y la Biblioteca Bodleiana. Luego viaja a los Cotswolds, un Área de Extraordinaria Belleza Natural, visitando pueblos pintorescos como Bourton-on-the-Water y Burford. Tu Guía Turístico con Insignia Azul privado da vida a ambos destinos.","highlights":{"0":"Antiguos colegios universitarios de Oxford","1":"Biblioteca Bodleiana y Cámara Radcliffe"}},"oxford-stratford":{"title":"Oxford y Stratford-Upon-Avon","subtitle":"Excursión Privada Combinada de un Día desde Londres","duration":"Hasta 10 horas","description":"Dos de las ciudades más célebres de Inglaterra — la ciudad universitaria de Oxford y el lugar de nacimiento de Shakespeare en Stratford-upon-Avon.","longDescription":"Explora los magníficos colegios y las calles antiguas de Oxford antes de viajar a Stratford-upon-Avon, el lugar de nacimiento de William Shakespeare. Visita la Casa Natal de Shakespeare, el Cottage de Anne Hathaway y la hermosa ciudad mercado con tu Guía Turístico con Insignia Azul privado.","highlights":{"2":"Casa Natal de Shakespeare","3":"Cottage de Anne Hathaway","4":"Centro de la ciudad de Stratford-upon-Avon"},"notIncluded":{"0":"Entrada a la Casa Natal de Shakespeare"}},"cotswolds":{"title":"Los Cotswolds","subtitle":"Excursión Privada de un Día desde Londres","duration":"Hasta 10 horas","description":"Colinas ondulantes, pueblos de piedra dorada y campo inglés por excelencia — los Cotswolds en su máxima belleza.","longDescription":"Los Cotswolds son una de las regiones más hermosas de Inglaterra, designada Área de Extraordinaria Belleza Natural. Visita pueblos pintorescos como Bourton-on-the-Water, Burford y Bibury, con comentarios expertos de tu Guía Turístico con Insignia Azul privado durante todo el día.","highlights":{"0":"Bourton-on-the-Water","1":"Burford y la Calle Principal","2":"Bibury y Arlington Row","3":"Pueblo de Broadway","4":"Campo ondulante de los Cotswolds"}},"bath":{"title":"Bath","subtitle":"Excursión Privada de un Día desde Londres","duration":"Hasta 8 horas","description":"Explora la única ciudad de Inglaterra con fuentes termales naturales — un Patrimonio Mundial de la UNESCO de baños romanos y grandeza georgiana.","longDescription":"Bath es una ciudad Patrimonio Mundial de la UNESCO de extraordinaria belleza. Explora los Baños Romanos, el Royal Crescent, el Puente Pulteney y la Abadía con tu Guía Turístico con Insignia Azul privado. Una de las excursiones más gratificantes desde Londres.","highlights":{"0":"Los Baños Romanos","1":"Royal Crescent y The Circus","2":"Puente Pulteney","3":"Abadía de Bath","4":"Arquitectura y calles georgianas"},"notIncluded":{"0":"Entrada a los Baños Romanos"}}},"shared":{"highlights":{"expertCommentaryBothSites":"Comentarios expertos en ambos sitios"},"included":{"guide":"Guía Turístico con Insignia Azul privado","doorToDoor":"Servicio puerta a puerta","instantConfirmation":"Confirmación instantánea de la reserva","flexibleItinerary":"Itinerario flexible adaptado a ti","flexibleVillageSelection":"Selección flexible de pueblos"},"notIncluded":{"entranceFees":"Entradas a atracciones","meals":"Comidas y bebidas","gratuities":"Propinas (discrecionales)","collegeEntranceFees":"Entradas a colegios (cuando corresponda)","anyEntranceFees":"Cualquier entrada a atracciones"}}}');
114const serviceLanding = { "walking": { "heroLabel": "Tours a Pie en Londres", "heroTitle": "Tours a Pie por Londres y Más Allá", "heroBody": "Explore Londres y los mejores destinos del Reino Unido a pie, guiado por Richard Cerquera — Guía Turístico Blue Badge registrado por el Instituto de Guías Turísticos.", "metaTitle": "Tours a Pie en Londres — Guía Blue Badge", "metaDescription": "Reserve un tour a pie en Londres con un Guía Turístico Blue Badge. Paseos guiados por Londres, Windsor, Stonehenge, Oxford, Bath y los Cotswolds. Totalmente privado.", "sectionLabel": "Tours a Pie", "ctaLabel": "Reservar Este Tour a Pie", "experienceTag": "Tour a Pie", "capacityNote": "Ideal para hasta 57 participantes", "introCopy": "Tours a pie privados en Londres, Windsor, Stonehenge, Oxford, Bath y los Cotswolds. Totalmente privados y adaptados a su grupo.", "limitedLabel": "Disponibilidad Limitada", "limitedTitle": "Actualmente No Disponible para Estos Tours" }, "driverGuided": { "heroLabel": "Tours con Conductor-Guía en Londres", "heroTitle": "Tours Privados con Conductor-Guía en Londres", "heroBody": "Richard Cerquera actúa como su conductor y Guía Turístico Blue Badge — eficiente, personal y sin complicaciones. Vehículo ejecutivo incluido, puerta a puerta.", "metaTitle": "Tours con Conductor-Guía en Londres — Tours en Coche Privados", "metaDescription": "Tours privados con conductor-guía en Londres. Richard Cerquera es su conductor y Guía Blue Badge — vehículo ejecutivo incluido, puerta a puerta. Hasta 6 personas.", "sectionLabel": "Tours con Conductor-Guía", "ctaLabel": "Reservar Este Tour con Conductor-Guía", "experienceTag": "Tour con Conductor-Guía", "capacityNote": "Ideal para hasta 6 personas", "unavailableTitle": "Tours con Conductor-Guía Temporalmente No Disponibles", "unavailableBody": "Los Tours con Conductor-Guía no están disponibles actualmente. Para una experiencia privada perfecta, considere un Tour con Chófer y Guía Privado.", "unavailableCta": "Ver Tours con Chófer y Guía", "introCopy": "¿Busca un guía-conductor privado en Londres? Richard combina guía Blue Badge con conducción profesional — ideal para tours por la ciudad y algunas excursiones de día. Hasta 6 personas.", "limitedLabel": "Disponibilidad Limitada", "limitedTitle": "Actualmente No Disponible para Estos Tours" }, "chauffeur": { "heroLabel": "Tours con Chófer y Guía en Londres", "heroTitle": "Tours con Chófer y Guía Privado", "heroBody": "Un chófer dedicado se encarga de la conducción mientras su Guía Turístico Blue Badge se centra completamente en usted. Vehículo ejecutivo con chófer dedicado, puerta a puerta.", "metaTitle": "Tours con Chófer y Guía en Londres — Tours Privados con Chófer", "metaDescription": "Tours privados con chófer y guía en Londres y más allá. Un chófer dedicado y Guía Turístico Blue Badge — la forma premium de explorar Londres, Windsor, Stonehenge, Oxford, Bath y los Cotswolds.", "sectionLabel": "Tours con Chófer y Guía", "ctaLabel": "Reservar Este Tour con Chófer", "experienceTag": "Tour con Chófer y Guía", "capacityNote": "Ideal para hasta 6 personas", "introCopy": "La experiencia máxima de tour privado en Londres. Un chófer profesional conduce mientras Richard Cerquera, Guía Blue Badge, ofrece comentarios expertos. Disponible para Londres y todos los destinos de excursión." }, "common": { "cityTours": "Tours en Londres", "dayTrips": "Excursiones de Día desde Londres", "from": "desde", "perGroup": "por grupo", "priceDepends": "El precio final depende de las opciones seleccionadas.", "privateTour": "Tour privado", "viewAll": "Ver Todos los Tours", "bespokeTitle": "¿Busca Algo a Medida?", "bespokeBody": "Cada tour está completamente adaptado a sus intereses, ritmo y grupo. Contáctenos para hablar de un itinerario personalizado.", "bespokeEnquire": "Consultar un Tour a Medida", "bespokeWhatsapp": "WhatsApp" } };
115const es = {
116  nav,
117  footer,
118  home: home$1,
119  tours: tours$1,
120  tourDetail,
121  booking,
122  confirmation,
123  about: about$1,
124  faq,
125  contact: contact$1,
126  terms,
127  common,
128  popularTours,
129  destinations: destinations$1,
130  catalogue: catalogue$1,
131  serviceLanding
132};
133const resources = {
134  en: {
135    translation: en
136  },
137  pt: {
138    translation: pt
139  },
140  es: {
141    translation: es
142  }
143};
144instance.use(Browser).use(initReactI18next).init({
145  resources,
146  fallbackLng: defaultLanguage,
147  supportedLngs: languageCodes,
148  // Default namespace (single file per language)
149  defaultNS: "translation",
150  ns: ["translation"],
151  // Language detection options
152  detection: {
153    // Order of detection methods
154    order: ["localStorage", "navigator", "htmlTag"],
155    // Cache user language preference
156    caches: ["localStorage"],
157    // LocalStorage key
158    lookupLocalStorage: "i18nextLng"
159  },
160  interpolation: {
161    // React already escapes values
162    escapeValue: false
163  },
164  // Don't load missing translations from backend
165  saveMissing: false,
166  // Development: warn about missing keys
167  debug: false
168});
169class CookieBannerErrorBoundary extends reactExports.Component {
170  constructor(props) {
171    super(props);
172    this.state = {
173      hasError: false
174    };
175  }
176  // eslint-disable-next-line @typescript-eslint/no-unused-vars
177  static getDerivedStateFromError(_error) {
178    return {
179      hasError: true
180    };
181  }
182  componentDidCatch(error, errorInfo) {
183    console.warn("CookieBanner error boundary caught an error:", error, errorInfo);
184  }
185  render() {
186    if (this.state.hasError) return null;
187    return this.props.children;
188  }
189}
190function useLocalizedPath() {
191  const {
192    i18n
193  } = useTranslation();
194  return (path) => {
195    const lang = i18n.language;
196    if (path === "/") {
197      return `/${lang}`;
198    }
199    const normalized = path.startsWith("/") ? path : `/${path}`;
200    const withoutTrailing = normalized.replace(/\/$/, "");
201    return `/${lang}${withoutTrailing}`;
202  };
203}
204const SOCIALS = [{
205  id: "tripadvisor",
206  label: "TripAdvisor",
207  href: "https://www.tripadvisor.co.uk/Attraction_Review-g186338-d8706674-Reviews-London_City_Tours-London_England.html",
208  trust: true,
209  // slightly more prominent at rest
210  icon: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M12 1C5.925 1 1 5.925 1 12s4.925 11 11 11 11-4.925 11-11S18.075 1 12 1zm0 2c4.963 0 9 4.037 9 9s-4.037 9-9 9-9-4.037-9-9 4.037-9 9-9zm-3.5 5a3.5 3.5 0 100 7 3.5 3.5 0 000-7zm7 0a3.5 3.5 0 100 7 3.5 3.5 0 000-7zm-7 1.5a2 2 0 110 4 2 2 0 010-4zm7 0a2 2 0 110 4 2 2 0 010-4zm-7 .75a1.25 1.25 0 110 2.5 1.25 1.25 0 010-2.5zm7 0a1.25 1.25 0 110 2.5 1.25 1.25 0 010-2.5z" }) })
211}, {
212  id: "instagram",
213  label: "Instagram",
214  href: "https://www.instagram.com/londoncitytours/",
215  trust: false,
216  icon: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zM12 0C8.741 0 8.333.014 7.053.072 2.695.272.273 2.69.073 7.052.014 8.333 0 8.741 0 12c0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98C8.333 23.986 8.741 24 12 24c3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98C15.668.014 15.259 0 12 0zm0 5.838a6.162 6.162 0 100 12.324 6.162 6.162 0 000-12.324zM12 16a4 4 0 110-8 4 4 0 010 8zm6.406-11.845a1.44 1.44 0 100 2.881 1.44 1.44 0 000-2.881z" }) })
217}, {
218  id: "facebook",
219  label: "Facebook",
220  href: "https://www.facebook.com/LDNCityTours/",
221  trust: false,
222  icon: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z" }) })
223}, {
224  id: "tiktok",
225  label: "TikTok",
226  href: "https://www.tiktok.com/@londoncitytours",
227  trust: false,
228  icon: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M19.59 6.69a4.83 4.83 0 01-3.77-4.25V2h-3.45v13.67a2.89 2.89 0 01-2.88 2.5 2.89 2.89 0 01-2.89-2.89 2.89 2.89 0 012.89-2.89c.28 0 .54.04.79.1V9.01a6.33 6.33 0 00-.79-.05 6.34 6.34 0 00-6.34 6.34 6.34 6.34 0 006.34 6.34 6.34 6.34 0 006.33-6.34V8.69a8.18 8.18 0 004.78 1.52V6.75a4.85 4.85 0 01-1.01-.06z" }) })
229}, {
230  id: "x",
231  label: "X (Twitter)",
232  href: "https://x.com/londoncitytours",
233  trust: false,
234  icon: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-4.714-6.231-5.401 6.23
2341H2.746l7.73-8.835L1.254 2.25H8.08l4.253 5.622zm-1.161 17.52h1.833L7.084 4.126H5.117z" }) })
235}, {
236  id: "youtube",
237  label: "YouTube",
238  href: "https://www.youtube.com/@londoncitytours",
239  trust: false,
240  icon: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M23.498 6.186a3.016 3.016 0 00-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 00.502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 002.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 002.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z" }) })
241}];
242function SocialLinks({
243  variant = "footer"
244}) {
245  const isHeader = variant === "header";
246  const iconSize = isHeader ? "w-3.5 h-3.5" : "w-4 h-4";
247  const buttonSize = isHeader ? "w-7 h-7" : "w-8 h-8";
248  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center gap-2", children: SOCIALS.map((s) => /* @__PURE__ */ jsxRuntimeExports.jsx("a", { href: s.href, target: "_blank", rel: "noopener noreferrer", "aria-label": s.label, className: `
249            ${buttonSize} rounded-full flex items-center justify-center
250            border transition-all duration-200
251            ${s.trust ? "border-white/30 text-white/70 hover:text-white hover:border-white/60" : "border-white/15 text-white/40 hover:text-white/80 hover:border-white/35"}
252          `, children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: iconSize, children: s.icon }) }, s.id)) });
253}
254function NotAffiliatedNotice({
255  variant = "light",
256  className = ""
257}) {
258  const {
259    t
260  } = useTranslation();
261  const isDark = variant === "dark";
262  return /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: `text-[11px] leading-relaxed text-center ${isDark ? "text-white/35" : "text-muted-foreground/60"} ${className}`, children: [
263    t("contact.notAffiliatedLine1"),
264    /* @__PURE__ */ jsxRuntimeExports.jsx("br", {}),
265    t("contact.notAffiliatedLine2")
266  ] });
267}
268const ITG_PROFILE = "https://www.itg.org.uk/register-of-guides/richard-cerquera";
269function Footer() {
270  const {
271    t
272  } = useTranslation();
273  const localizedPath = useLocalizedPath();
274  const destinations2 = [{
275    label: "London",
276    href: localizedPath("/tours/london")
277  }, {
278    label: "Stonehenge",
279    href: localizedPath("/tours/stonehenge")
280  }, {
281    label: "Windsor Castle",
282    href: localizedPath("/tours/windsor-castle")
283  }, {
284    label: "The Cotswolds",
285    href: localizedPath("/tours/cotswolds")
286  }, {
287    label: "Hampton Court Palace",
288    href: localizedPath("/tours/hampton-court")
289  }, {
290    label: "Oxford",
291    href: localizedPath("/tours/oxford")
292  }, {
293    label: "Bath",
294    href: localizedPath("/tours/bath")
295  }];
296  const services = [{
297    label: t("footer.services.walking"),
298    href: localizedPath("/private-walking-tours")
299  }, {
300    label: t("footer.services.driverGuided"),
301    href: localizedPath("/driver-guided-tours")
302  }, {
303    label: t("footer.services.chauffeur"),
304    href: localizedPath("/chauffeur-driven-tours")
305  }, {
306    label: t("footer.services.allTours"),
307    href: localizedPath("/tours")
308  }];
309  const info = [{
310    label: t("footer.links.about"),
311    href: localizedPath("/about")
312  }, {
313    label: t("footer.links.faq"),
314    href: localizedPath("/faq")
315  }, {
316    label: t("footer.links.contact"),
317    href: localizedPath("/contact")
318  }, {
319    label: t("footer.links.terms"),
320    href: localizedPath("/terms")
321  }, {
322    label: t("footer.links.showTickets"),
323    href: "https://officiallondontheatre.com/",
324    external: true
325  }];
326  return /* @__PURE__ */ jsxRuntimeExports.jsxs("footer", { className: "bg-primary text-white", children: [
327    /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "max-w-7xl mx-auto px-6 py-16", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-10", children: [
328      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lg:col-span-2", children: [
329        /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: localizedPath("/"), className: "inline-block mb-5", children: /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: "/airo-assets/images/logo/horizontal?v=2026", alt: "London City Tours", width: 200, height: 80, className: "h-20 w-auto object-contain" }) }),
330        /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-white/60 text-sm leading-relaxed mb-1", children: [
331          "Richard Cerquera is an",
332          " ",
333          /* @__PURE__ */ jsxRuntimeExports.jsxs("a", { href: ITG_PROFILE, target: "_blank", rel: "noopener noreferrer", className: "text-white/80 hover:text-white underline underline-offset-2 decoration-white/30 hover:decoration-white/60 transition-colors inline-flex items-center gap-0.5", children: [
334            "Institute of Tourist Guiding",
335            /* @__PURE__ */ jsxRuntimeExports.jsx(ExternalLink, { size: 10, className: "shrink-0 ml-0.5" })
336          ] }),
337          " ",
338          "Registered 'Blue Badge' Tourist Guide."
339        ] }),
340        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-white/40 leading-relaxed whitespace-pre-line", children: t("footer.credentials") }),
341        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-6", children: /* @__PURE__ */ jsxRuntimeExports.jsx(SocialLinks, { variant: "footer" }) })
342      ] }),
343      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
344        /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-xs font-semibold tracking-widest uppercase mb-5 text-white/50", children: t("footer.destinations") }),
345        /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { className: "space-y-3", children: destinations2.map((d) => /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: d.href, className: "text-sm text-white/60 hover:text-white transition-colors", children: d.label }) }, d.label)) })
346      ] }),
347      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
348        /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-xs font-semibold tracking-widest uppercase mb-5 text-white/50", children: t("footer.services.heading") }),
349        /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { className: "space-y-3", children: services.map((s) => /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: s.href, className: "text-sm text-white/60 hover:text-white transition-colors", children: s.label }) }, s.label)) })
350      ] }),
351      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
352        /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-xs font-semibold tracking-widest uppercase mb-5 text-white/50", children: t("footer.information") }),
353        /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { className: "space-y-3", children: info.map((i) => /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: i.external ? /* @__PURE__ */ jsxRuntimeExports.jsx("a", { href: i.href, target: "_blank", rel: "noopener noreferrer", className: "text-sm text-white/60 hover:text-white transition-colors", children: i.label }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: i.href, className: "text-sm text-white/60 hover:text-white transition-colors", children: i.label }) }, i.label)) })
354      ] }),
355      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
356        /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-xs font-semibold tracking-widest uppercase mb-5 text-white/50", children: t("footer.contact") }),
357        /* @__PURE__ */ jsxRuntimeExports.jsxs("ul", { className: "space-y-4", children: [
358          /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("a", { href: "mailto:[email protected]", className: "flex gap-3 text-sm text-white/60 hover:text-white transition-colors", children: [
359            /* @__PURE__ */ jsxRuntimeExports.jsx(Mail, { size: 15, className: "shrink-0 mt-0.5 text-white/40" }),
360            "[email protected]"
361          ] }) }),
362          /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("a", { href: "tel:+447778788336", className: "flex gap-3 text-sm text-white/60 hover:text-white transition-colors", children: [
363            /* @__PURE__ */ jsxRuntimeExports.jsx(Phone, { size: 15, className: "shrink-0 mt-0.5 text-white/40" }),
364            "07778 788 336"
365          ] }) })
366        ] }),
367        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-5", children: /* @__PURE__ */ jsxRuntimeExports.jsx(NotAffiliatedNotice, { variant: "dark" }) }),
368        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-8", children: [
369          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-semibold tracking-widest uppercase mb-3 text-white/50", children: t("footer.paymentsAccepted") }),
370          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-wrap gap-2", children: ["Visa", "Mastercard", "Amex", "Apple Pay"].map((p) => /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs px-2.5 py-1 rounded border border-white/20 text-white/50", children: p }, p)) }),
371          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-white/30 mt-2", children: t("footer.stripeNote") })
372        ] })
373      ] })
374    ] }) }),
375    /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t border-white/10", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-6 py-5 flex flex-col sm:flex-row items-center justify-between gap-3", children: [
376      /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-white/40", children: t("footer.copyright", {
377        year: (/* @__PURE__ */ new Date()).getFullYear()
378      }) }),
379      /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-white/30", children: t("footer.languages") })
380    ] }) })
381  ] });
382}
383function Header() {
384  const [menuOpen, setMenuOpen] = reactExports.useState(false);
385  const [destOpen, setDestOpen] = reactExports.useState(false);
386  const [langOpen, setLangOpen] = reactExports.useState(false);
387  const [scrolled, setScrolled] = reactExports.useState(false);
388  const location = useLocation();
389  const {
390    t,
391    i18n
392  } = useTranslation();
393  const localizedPath = useLocalizedPath();
394  const destinations2 = [{
395    label: "London",
396    href: localizedPath("/destinations/london")
397  }, {
398    label: "Windsor Castle",
399    href: localizedPath("/destinations/windsor")
400  }, {
401    label: "Stonehenge",
402    href: localizedPath("/destinations/stonehenge")
403  }, {
404    label: "Hampton Court Palace",
405    href: localizedPath("/destinations/hampton-court")
406  }, {
407    label: "Oxford",
408    href: localizedPath("/destinations/oxford")
409  }, {
410    label: "Bath",
411    href: localizedPath("/destinations/bath")
412  }, {
413    label: "The Cotswolds",
414    href: localizedPath("/destinations/cotswolds")
415  }];
416  reactExports.useEffect(() => {
417    const handleScroll = () => setScrolled(window.scrollY > 40);
418    window.addEventListener("scroll", handleScroll, {
419      passive: true
420    });
421    return () => window.removeEventListener("scroll", handleScroll);
422  }, []);
423  reactExports.useEffect(() => {
424    setMenuOpen(false);
425    setDestOpen(false);
426    setLangOpen(false);
427  }, [location.pathname]);
428  const handleLangChange = (code) => {
429    const langPattern = supportedLanguages.map((l) => l.code).join("|");
430    const regex = new RegExp(`^/(${langPattern})(/|$)`);
431    const newPath = location.pathname.replace(regex, `/${code}$2`);
432    i18n.changeLanguage(code);
433    window.history.pushState({}, "", newPath || `/${code}`);
434    window.location.reload();
435  };
436  const currentLang = supportedLanguages.find((l) => l.code === i18n.language) ?? supportedLanguages[0];
437  return /* @__PURE__ */ jsxRuntimeExports.jsxs("header", { className: `fixed top-0 left-0 right-0 z-50 transition-all duration-300 ${scrolled || !location.pathname.match(/^\/[a-z]{2}\/?$/) ? "bg-primary shadow-lg py-3 md:py-5" : "bg-transparent py-4 md:py-7"}`, children: [
438    /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-6 flex items-center justify-between", children: [
439      /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: localizedPath("/"), className: "flex items-center shrink-0", children: /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: "/airo-assets/images/logo/horizontal?v=2026", alt: "London City Tours", width: 280, height: 112, className: "h-20 max-h-20 md:h-28 md:max-h-28 w-auto object-contain" }) }),
440      /* @__PURE__ */ jsxRuntimeExports.jsxs("nav", { className: "hidden md:flex items-center gap-7", children: [
441        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", onMouseEnter: () => setDestOpen(true), onMouseLeave: () => setDestOpen(false), children: [
442          /* @__PURE__ */ jsxRuntimeExports.jsxs("button", { className: "flex items-center gap-1 text-sm font-medium text-white/80 hover:text-white transition-colors duration-200 tracking-wide uppercase", children: [
443            t("nav.destinations"),
444            " ",
445            /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { size: 14, className: `transition-transform duration-200 ${destOpen ? "rotate-180" : ""}` })
446          ] }),
447          /* @__PURE__ */ jsxRuntimeExports.jsx(AnimatePresence, { children: destOpen && /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { initial: {
448            opacity: 0,
449            y: 6
450          }, animate: {
451            opacity: 1,
452            y: 0
453          }, exit: {
454            opacity: 0,
455            y: 6
456          }, transition: {
457            duration: 0.15
458          }, className: "absolute top-full left-0 mt-2 w-56 bg-white rounded-sm shadow-xl border border-border overflow-hidden", children: destinations2.map((d) => /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: d.href, className: "flex items-center gap-2.5 px-4 py-3 text-sm text-foreground hover:bg-muted transition-colors border-b border-border/50 last:border-0", children: [
459            /* @__PURE__ */ jsxRuntimeExports.jsx(MapPin, { size: 13, className: "text-primary shrink-0" }),
460            d.label
461          ] }, d.href)) }) })
462        ] }),
463        /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: localizedPath("/tours"), className: "text-sm font-medium text-white/80 hover:text-white transition-colors duration-200 tracking-wide uppercase", children: t("nav.tours") }),
464        /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: localizedPath("/westminster-abbey"), className: "text-sm font-semibold text-white hover:text-white/80 transition-colors duration-200 tracking-wide uppercase border border-white/30 hover:border-white/60 px-3 py-1 rounded-sm", children: "Westminster Abbey" }),
465        /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: localizedPath("/about"), className: "text-sm font-medium text-white/80 hover:text-white transition-colors duration-200 tracking-wide uppercase", children: t("nav.about") }),
466        /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: localizedPath("/faq"), className: "text-sm font-medium text-white/80 hover:text-white transition-colors duration-200 tracking-wide uppercase", children: t("nav.faq") }),
467        /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: localizedPath("/contact"), className: "text-sm font-medium text-white/80 hover:text-white transition-colors duration-200 tracking-wide uppercase", children: t("nav.contact") }),
468        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", onMouseEnter: () => setLangOpen(true), onMouseLeave: () => setLangOpen(false), children: [
469          /* @__PURE__ */ jsxRuntimeExports.jsxs("button", { className: "flex items-center gap-1.5 text-sm font-medium text-white/70 hover:text-white transition-colors duration-200", children: [
470            /* @__PURE__ */ jsxRuntimeExports.jsx(Globe, { size: 14 }),
471            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "uppercase", children: currentLang.code }),
472            /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { size: 12, className: `transition-transform duration-200 ${langOpen ? "rotate-180" : ""}` })
473          ] }),
474          /* @__PURE__ */ jsxRuntimeExports.jsx(AnimatePresence, { children: langOpen && /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { initial: {
475            opacity: 0,
476            y: 6
477          }, animate: {
478            opacity: 1,
479            y: 0
480          }, exit: {
481            opacity: 0,
482            y: 6
483          }, transition: {
484            duration: 0.15
485          }, className: "absolute top-full right-0 mt-2 w-36 bg-white rounded-sm shadow-xl border border-border overflow-hidden", children: supportedLanguages.map((lang) => /* @__PURE__ */ jsxRuntimeExports.jsx("button", { onClick: () => handleLangChange(lang.code), className: `w-full text-left px-4 py-2.5 text-sm transition-colors border-b border-border/50 last:border-0 ${i18n.language === lang.code ? "font-semibold text-primary bg-muted" : "text-foreground hover:bg-muted"}`, children: lang.name }, lang.code)) }) })
486        ] })
487      ] }),
488      /* @__PURE__ */ jsxRuntimeExports.jsx("button", { className: "md:hidden text-white p-2", onClick: () => setMenuOpen(!menuOpen), "aria-label": "Toggle menu", children: menuOpen ? /* @__PURE__ */ jsxRuntimeExports.jsx(X, { size: 24 }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Menu, { size: 24 }) })
489    ] }),
490    /* @__PURE__ */ jsxRuntimeExports.jsx(AnimatePresence, { children: menuOpen && /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { initial: {
491      opacity: 0,
492      y: -8
493    }, animate: {
494      opacity: 1,
495      y: 0
496    }, exit: {
497      opacity: 0,
498      y: -8
499    }, transition: {
500      duration: 0.2
501    }, className: "md:hidden bg-primary border-t border-white/10", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "px-6 py-4 flex flex-col gap-1", children: [
502      /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-semibold tracking-widest uppercase text-white/40 pt-2 pb-1", children: t("nav.destinations") }),
503      destinations2.map((d) => /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: d.href, className: "text-white/80 hover:text-white text-sm py-2 pl-2 border-b border-white/10 transition-colors", children: d.label }, d.href)),
504      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "pt-2 flex flex-col gap-1", children: [
505        /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: localizedPath("/tours"), className: "text-white/80 hover:text-white text-sm font-medium py-2 border-b border-white/10 transition-colors", children: t("nav.tours") }),
506        /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: localizedPath("/westminster-abbey"), className: "text-white hover:text-white/80 text-sm font-semibold py-2 border-b border-white/10 transition-colors", children: "Westminster Abbey" }),
507        /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: localizedPath("/about"), className: "text-white/80 hover:text-white text-sm font-medium py-2 border-b border-white/10 transition-colors", children: t("nav.about") }),
508        /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: localizedPath("/faq"), className: "text-white/80 hover:text-white text-sm font-medium py-2 border-b border-white/10 transition-colors", children: t("nav.faq") }),
509        /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: localizedPath("/contact"), className: "text-white/80 hover:text-white text-sm font-medium py-2 border-b border-white/10 transition-colors", children: t("nav.contact") })
510      ] }),
511      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "pt-2 flex gap-2", children: supportedLanguages.map((lang) => /* @__PURE__ */ jsxRuntimeExports.jsx("button", { onClick: () => handleLangChange(lang.code), className: `px-3 py-1.5 text-xs font-semibold uppercase rounded-sm border transition-colors ${i18n.language === lang.code ? "border-white/60 text-white bg-white/10" : "border-white/20 text-white/50 hover:text-white hover:border-white/40"}`, children: lang.code }, lang.code)) })
512    ] }) }) })
513  ] });
514}
515function cn(...inputs) {
516  return twMerge(clsx(inputs));
517}
518function Website({
519  children,
520  config = {},
521  className
522}) {
523  const {
524    layout = {
525      maxWidth: "full",
526      padding: "md",
527      background: "default",
528      minHeight: true
529    }
530  } = config;
531  const getBackgroundClass = () => {
532    switch (layout.background) {
533      case "muted":
534        return "bg-muted";
535      case "gradient":
536        return "bg-gradient-to-b from-background to-muted/20";
537      default:
538        return "bg-background";
539    }
540  };
541  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: cn(layout.minHeight !== false && "min-h-screen", getBackgroundClass(), "flex flex-col", className), children });
542}
543var define_process_env_default = {};
544const SITE_NAME = "London City Tours";
545const SITE_DESCRIPTION = "Private guided tours of London and beyond with Richard Cerquera — Blue Badge Tourist Guide. Bespoke half-day, full-day, and day-trip experiences from £245.";
546const BASE_URL = typeof process !== "undefined" && define_process_env_default.PUBLIC_URL || "https://londoncitytours.com";
547const LANGUAGES = ["en", "pt", "es"];
548function pageUrl(lang, path) {
549  const cleanPath = path.startsWith("/") ? path : `/${path}`;
550  return `${BASE_URL}/${lang}${cleanPath}`;
551}
552function hreflangLinks(path) {
553  const links = LANGUAGES.map((lang) => ({
554    hreflang: lang,
555    href: pageUrl(lang, path)
556  }));
557  links.push({
558    hreflang: "x-default",
559    href: pageUrl("en", path)
560  });
561  return links;
562}
563function pageTitle(name) {
564  return `${name} | ${SITE_NAME}`;
565}
566function staticOgImage(slotPath) {
567  return `${BASE_URL}/airo-assets/images/${slotPath}`;
568}
569function organizationJsonLd() {
570  return {
571    "@context": "https://schema.org",
572    "@type": "TouristInformationCenter",
573    name: SITE_NAME,
574    url: BASE_URL,
575    logo: `${BASE_URL}/airo-assets/images/logo/primary`,
576    description: SITE_DESCRIPTION,
577    address: {
578      "@type": "PostalAddress",
579      addressLocality: "London",
580      addressCountry: "GB"
581    },
582    founder: {
583      "@type": "Person",
584      name: "Richard Cerquera",
585      jobTitle: "Blue Badge Tourist Guide"
586    }
587  };
588}
589function tourJsonLd(tour, lang) {
590  const url = pageUrl(lang, tour.linkPath ?? `/tours/${tour.slug}`);
591  return {
592    "@context": "https://schema.org",
593    "@type": "TouristTrip",
594    name: tour.title,
595    description: tour.description,
596    url,
597    touristType: "Private guided tour",
598    offers: {
599      "@type": "Offer",
600      priceCurrency: "GBP",
601      price: tour.fromPrice,
602      availability: "https://schema.org/InStock",
603      url
604    },
605    provider: {
606      "@type": "LocalBusiness",
607      name: SITE_NAME,
608      url: BASE_URL
609    },
610    aggregateRating: {
611      "@type": "AggregateRating",
612      ratingValue: tour.rating,
613      reviewCount: tour.reviewCount,
614      bestRating: 5,
615      worstRating: 1
616    }
617  };
618}
619function websiteJsonLd() {
620  return {
621    "@context": "https://schema.org",
622    "@type": "WebSite",
623    name: SITE_NAME,
624    url: BASE_URL
625  };
626}
627function faqPageJsonLd(items) {
628  return {
629    "@context": "https://schema.org",
630    "@type": "FAQPage",
631    mainEntity: items.map(({
632      q,
633      a
634    }) => ({
635      "@type": "Question",
636      name: q,
637      acceptedAnswer: {
638        "@type": "Answer",
639        text: a
640      }
641    }))
642  };
643}
644function destinationJsonLd(opts) {
645  return {
646    "@context": "https://schema.org",
647    "@type": "TouristAttraction",
648    name: opts.name,
649    description: opts.description,
650    url: opts.url,
651    ...opts.image ? {
652      image: opts.image
653    } : {},
654    address: {
655      "@type": "PostalAddress",
656      addressCountry: "GB"
657    },
658    touristType: "Private guided tour",
659    provider: {
660      "@type": "LocalBusiness",
661      name: SITE_NAME,
662      url: BASE_URL
663    }
664  };
665}
666function isAdminPath(pathname) {
667  return pathname.startsWith("/admin");
668}
669function isFormElement(target) {
670  if (!(target instanceof Element)) return false;
671  const tag = target.tagName.toLowerCase();
672  return tag === "input" || tag === "textarea" || tag === "select";
673}
674function useContentProtection() {
675  const {
676    pathname
677  } = useLocation();
678  reactExports.useEffect(() => {
679    if (isAdminPath(pathname)) return;
680    const style = document.createElement("style");
681    style.setAttribute("data-content-protection", "true");
682    style.textContent = ["body *:not(input):not(textarea):not(select):not([contenteditable]) {", "  -webkit-user-select: none !important;", "  -moz-user-select: none !important;", "  -ms-user-select: none !important;", "  user-select: none !important;", "}", "img {", "  -webkit-user-drag: none !important;", "  user-drag: none !important;", "}"].join("\n");
683    document.head.appendChild(style);
684    const handleContextMenu = (e) => {
685      if (isAdminPath(window.location.pathname)) return;
686      if (isFormElement(e.target)) return;
687      e.preventDefault();
688    };
689    const handleKeyDown = (e) => {
690      if (isAdminPath(window.location.pathname)) return;
691      if (isFormElement(e.target)) return;
692      const isMod = e.ctrlKey || e.metaKey;
693      if (!isMod) return;
694      const key = e.key.toLowerCase();
695      if (key === "c" || key === "x") {
696        e.preventDefault();
697      }
698    };
699    const handleCopy = (e) => {
700      var _a2;
701      if (isAdminPath(window.location.pathname)) return;
702      if (isFormElement(e.target)) return;
703      e.preventDefault();
704      try {
705        (_a2 = e.clipboardData) == null ? void 0 : _a2.setData("text/plain", "© London City Tours. All rights reserved.");
706      } catch {
707      }
708    };
709    const handleCut = (e) => {
710      if (isAdminPath(window.location.pathname)) return;
711      if (isFormElement(e.target)) return;
712      e.preventDefault();
713    };
714    const handleDragStart = (e) => {
715      if (isAdminPath(window.location.pathname)) return;
716      if (e.target instanceof HTMLImageElement) {
717        e.preventDefault();
718      }
719    };
720    document.addEventListener("contextmenu", handleContextMenu);
721    document.addEventListener("keydown", handleKeyDown);
722    document.addEventListener("copy", handleCopy);
723    document.addEventListener("cut", handleCut);
724    document.addEventListener("dragstart", handleDragStart);
725    return () => {
726      const injected = document.head.querySelector("style[data-content-protection]");
727      if (injected) document.head.removeChild(injected);
728      document.removeEventListener("contextmenu", handleContextMenu);
729      document.removeEventListener("keydown", handleKeyDown);
730      document.removeEventListener("copy", handleCopy);
731      document.removeEventListener("cut", handleCut);
732      document.removeEventListener("dragstart", handleDragStart);
733    };
734  }, [pathname]);
735}
736function RootLayout({
737  children
738}) {
739  const {
740    lang = "en"
741  } = useParams();
742  useContentProtection();
743  const alternates = hreflangLinks("/");
744  const canonicalUrl = `${BASE_URL}/${lang}`;
745  return /* @__PURE__ */ jsxRuntimeExports.jsxs(Website, { children: [
746    /* @__PURE__ */ jsxRuntimeExports.jsxs(Helmet, { children: [
747      /* @__PURE__ */ jsxRuntimeExports.jsx("title", { children: SITE_NAME }),
748      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "description", content: SITE_DESCRIPTION }),
749      /* @__PURE__ */ jsxRuntimeExports.jsx("link", { rel: "canonical", href: canonicalUrl }),
750      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:site_name", content: SITE_NAME }),
751      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:type", content: "website" }),
752      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:title", content: SITE_NAME }),
753      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:description", content: SITE_DESCRIPTION }),
754      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:url", content: canonicalUrl }),
755      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:card", content: "summary_large_image" }),
756      alternates.map(({
757        hreflang,
758        href
759      }) => /* @__PURE__ */ jsxRuntimeExports.jsx("link", { rel: "alternate", hrefLang: hreflang, href }, hreflang))
760    ] }),
761    /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollRestoration, {}),
762    /* @__PURE__ */ jsxRuntimeExports.jsx(Header, {}),
763    children,
764    /* @__PURE__ */ jsxRuntimeExports.jsx(Footer, {})
765  ] });
766}
767function LanguageWrapper({
768  children
769}) {
770  const {
771    lang
772  } = useParams();
773  const {
774    i18n
775  } = useTranslation();
776  reactExports.useEffect(() => {
777    if (lang && isLanguageSupported(lang)) {
778      i18n.changeLanguage(lang);
779      const language = getLanguage(lang);
780      if (language) {
781        document.documentElement.dir = language.dir;
782        document.documentElement.lang = lang;
783      }
784    }
785  }, [lang, i18n]);
786  if (lang && !isLanguageSupported(lang)) {
787    return /* @__PURE__ */ jsxRuntimeExports.jsx(Navigate, { to: `/${defaultLanguage}`, replace: true });
788  }
789  return /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children });
790}
791function Spinner({
792  className
793}) {
794  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `inline-block ${className || ""}`, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className: "animate-spin h-8 w-8 text-gray-600", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", children: [
795    /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { className: "opacity-10", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }),
796    /* @__PURE__ */ jsxRuntimeExports.jsx("path", { className: "opacity-20", fill: "currentColor", d: "m4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" })
797  ] }) });
798}
799const destinations = [{
800  id: "london",
801  slug: "london",
802  name: "London",
803  tagline: "The capital, explored privately",
804  description: "From royal palaces and world-class museums to hidden backstreets and iconic landmarks — London is endlessly rewarding with a private Blue Badge Tourist Guide.",
805  heroImage: "/airo-assets/images/tours/london",
806  nameKey: "destinations.london.name",
807  taglineKey: "destinations.london.tagline",
808  descriptionKey: "destinations.london.description"
809}, {
810  id: "windsor",
811  slug: "windsor",
812  name: "Windsor Castle",
813  tagline: "Royal residences & regal history",
814  description: "Home to the oldest occupied castle in the world, Windsor is one of England's most visited royal destinations — just 25 miles from London.",
815  heroImage: "/airo-assets/images/tours/windsor-castle",
816  distance: "25 miles from London",
817  nameKey: "destinations.windsor.name",
818  taglineKey: "destinations.windsor.tagline",
819  descriptionKey: "destinations.windsor.description",
820  distanceKey: "destinations.windsor.distance"
821}, {
822  id: "stonehenge",
823  slug: "stonehenge",
824  name: "Stonehenge",
825  tagline: "4,500 years of prehistoric mystery",
826  description: "One of the most iconic prehistoric monuments on earth. Standing on Salisbury Plain for over four millennia, Stonehenge is a truly unmissable experience.",
827  heroImage: "/airo-assets/images/tours/stonehenge",
828  distance: "90 miles from London",
829  nameKey: "destinations.stonehenge.name",
830  taglineKey: "destinations.stonehenge.tagline",
831  descriptionKey: "destinations.stonehenge.description",
832  distanceKey: "destinations.stonehenge.distance"
833}, {
834  id: "hampton-court",
835  slug: "hampton-court",
836  name: "Hampton Court Palace",
837  tagline: "Henry VIII's magnificent Tudor palace",
838  description: "Hampton Court Palace is one of England's finest royal residences — a masterpiece of Tudor and Baroque architecture set in stunning riverside gardens, just 15 miles from London.",
839  heroImage: "/airo-assets/images/tours/hampton-court",
840  distance: "15 miles from London",
841  nameKey: "destinations.hampton-court.name",
842  taglineKey: "destinations.hampton-court.tagline",
843  descriptionKey: "destinations.hampton-court.description",
844  distanceKey: "destinations.hampton-court.distance"
845}, {
846  id: "oxford",
847  slug: "oxford",
848  name: "Oxford",
849  tagline: "The City of Dreaming Spires",
850  description: "One of the world's oldest and most prestigious university cities. Ancient colleges, the Bodleian Library, and centuries of academic history await.",
851  heroImage: "/airo-assets/images/tours/oxford",
852  distance: "60 miles from London",
853  nameKey: "destinations.oxford.name",
854  taglineKey: "destinations.oxford.tagline",
855  descriptionKey: "destinations.oxford.description",
856  distanceKey: "destinations.oxford.distance"
857}, {
858  id: "bath",
859  slug: "bath",
860  name: "Bath",
861  tagline: "UNESCO World Heritage Georgian elegance",
862  description: "England's most elegant Georgian city — home to the Roman Baths, the Royal Crescent, and some of the finest Regency architecture in the world.",
863  heroImage: "/assets/bath.webp",
864  distance: "115 miles from London",
865  nameKey: "destinations.bath.name",
866  taglineKey: "destinations.bath.tagline",
867  descriptionKey: "destinations.bath.description",
868  distanceKey: "destinations.bath.distance"
869}, {
870  id: "cotswolds",
871  slug: "cotswolds",
872  name: "The Cotswolds",
873  tagline: "Quintessential English countryside",
874  description: "An Area of Outstanding Natural Beauty — honey-stone villages, rolling hills, and timeless English charm. One of the most beautiful regions in the country.",
875  heroImage: "/airo-assets/images/tours/cotswolds",
876  distance: "80 miles from London",
877  nameKey: "destinations.cotswolds.name",
878  taglineKey: "destinations.cotswolds.tagline",
879  descriptionKey: "destinations.cotswolds.description",
880  distanceKey: "destinations.cotswolds.distance"
881}];
882function getDestinationBySlug(slug) {
883  return destinations.find((d) => d.slug === slug);
884}
885const catalogue = [
886  // ── PUBLIC GROUP TOURS ───────────────────────────────────────────────────────
887  {
888    id: "westminster-abbey",
889    slug: "westminster-abbey",
890    linkPath: "/westminster-abbey",
891    title: "The Nº1 Westminster Abbey Tour",
892    subtitle: "Westminster Abbey • Big Ben • Buckingham Palace",
893    category: "City Tour",
894    destinations: ["london"],
895    duration: "Up to 4 hours",
896    isCombo: false,
897    titleKey: "catalogue.tours.westminster-abbey.title",
898    subtitleKey: "catalogue.tours.westminster-abbey.subtitle",
899    durationKey: "catalogue.tours.westminster-abbey.duration",
900    descriptionKey: "catalogue.tours.westminster-abbey.description",
901    images: ["/airo-assets/images/pages/westminster/hero"],
902    fromPrice: 63.75,
903    serviceKeys: ["walking"],
904    pricingLabel: "per adult",
905    pricingNote: "Final price depends on your selected option.",
906    rating: 5,
907    reviewCount: 0,
908    services: [],
909    description: "Discover Westminster Abbey from the inside, then experience the historic heart of Westminster and Royal London with a London Blue Badge Tourist Guide.",
910    longDescription: "Discover Westminster Abbey from the inside, then experience the historic heart of Westminster and Royal London with a London Blue Badge Tourist Guide.",
911    longDescriptionKey: "catalogue.tours.westminster-abbey.longDescription",
912    highlights: ["Westminster Abbey (admission included)", "Big Ben & Houses of Parliament", "Buckingham Palace", "Parliament Square"],
913    highlightsKeys: ["catalogue.tours.westminster-abbey.highlights.0", "catalogue.tours.westminster-abbey.highlights.1", "catalogue.tours.westminster-abbey.highlights.2", "catalogue.tours.westminster-abbey.highlights.3"],
914    included: ["Westminster Abbey admission", "Blue Badge Tourist Guide", "Instant booking confirmation"],
915    includedKeys: ["catalogue.tours.westminster-abbey.included.0", "catalogue.shared.included.guide", "catalogue.shared.included.instantConfirmation"],
916    notIncluded: ["Meals and refreshments", "Gratuities (discretionary)"],
917    notIncludedKeys: ["catalogue.shared.notIncluded.meals", "catalogue.shared.notIncluded.gratuities"],
918    keywords: ["westminster abbey", "big ben", "buckingham palace", "london", "public tour", "group tour"],
919    bestSeller: true
920  },
921  // ── CITY TOURS ──────────────────────────────────────────────────────────────
922  {
923    id: "london",
924    slug: "london",
925    title: "Half Day Tour of London",
926    subtitle: "Private Guided Tour of London",
927    category: "City Tour",
928    destinations: ["london"],
929    duration: "Up to 4 hours",
930    isCombo: false,
931    titleKey: "catalogue.tours.london.title",
932    subtitleKey: "catalogue.tours.london.subtitle",
933    durationKey: "catalogue.tours.london.duration",
934    descriptionKey: "catalogue.tours.london.description",
935    images: ["/airo-assets/images/tours/london"],
936    fromPrice: 245,
937    rating: 5,
938    reviewCount: 47,
939    services: [{
940      durationId: "london-tg-4h",
941      type: "tourist-guide",
942      label: "Walking Tours",
943      duration: "Up to 4 hours",
944      durationKey: "catalogue.duration.4h",
945      price: 245,
946      maxGroup: 57,
947      guestCapacityLabel: "Ideal for up to 57 guests",
948      description: "Blue Badge Tourist Guide walking tour of London."
949    }, {
950      durationId: "london-dg-4h",
951      type: "driver-guided",
952      label: "Driver-Guided Tours",
953      duration: "Up to 4 hours",
954      durationKey: "catalogue.duration.4h",
955      price: 615,
956      maxGroup: 6,
957      guestCapacityLabel: "Ideal for up to 6 guests",
958      description: "Richard acts as both your driver and Blue Badge Tourist Guide — seamless, personal, and efficient. Premium vehicle included."
959    }, {
960      durationId: "london-cg-4h",
961      type: "chauffeur-guide",
962      label: "Chauffeur-Driven Tours with a Private Guide",
963      duration: "Up to 4 hours",
964      durationKey: "catalogue.duration.4h",
965      price: 740,
966      maxGroup: 6,
967      guestCapacityLabel: "Ideal for up to 6 guests",
968      description: "A dedicated chauffeur handles the driving while your Blue Badge Tourist Guide focuses entirely on the experience. Premium vehicle included."
969    }],
970    description: "Experience London like never before on a fully private, bespoke tour led by Richard — a Blue Badge Tourist Guide with unrivalled knowledge of the city.",
971    longDescription: "Tour themes are fully customisable. Choose your desired tour length and from there we can cover any destination in London — from royal palaces and world-class museums to hidden backstreets and iconic landmarks. Every tour is tailored to your interests, pace, and group.",
972    longDescriptionKey: "catalogue.tours.london.longDescription",
973    highlights: ["Buckingham Palace & Changing of the Guard", "Tower of London & Crown Jewels", "Westminster Abbey & Houses of Parliament", "Tower Bridge", "St Paul's Cathedral", "Hyde Park & Kensington Palace"],
974    highlightsKeys: ["catalogue.tours.london.highlights.0", "catalogue.tours.london.highlights.1", "catalogue.tours.london.highlights.2", "catalogue.tours.london.highlights.3", "catalogue.tours.london.highlights.4", "catalogue.tours.london.highlights.5"],
975    included: ["Private Blue Badge Tourist Guide", "Flexible itinerary tailored to you", "Instant booking confirmation"],
976    includedKeys: ["catalogue.shared.included.guide", "catalogue.shared.included.flexibleItinerary", "catalogue.shared.included.instantConfirmation"],
977    notIncluded: ["Entrance fees to attractions", "Meals and refreshments", "Gratuities (discretionary)"],
978    notIncludedKeys: ["catalogue.shared.notIncluded.entranceFees", "catalogue.shared.notIncluded.meals", "catalogue.shared.notIncluded.gratuities"],
979    keywords: ["london", "city tour", "buckingham palace", "tower of london", "westminster", "half day"],
980    bestSeller: true
981  },
982  {
983    id: "london-grand",
984    slug: "london-grand",
985    title: "Grand Tour of London",
986    subtitle: "Private Full-Day Guided Tour of London",
987    category: "City Tour",
988    destinations: ["london"],
989    duration: "Up to 8 hours",
990    isCombo: false,
991    titleKey: "catalogue.tours.london-grand.title",
992    subtitleKey: "catalogue.tours.london-grand.subtitle",
993    durationKey: "catalogue.tours.london-grand.duration",
994    descriptionKey: "catalogue.tours.london-grand.description",
995    images: ["/airo-assets/images/tours/london"],
996    fromPrice: 420,
997    rating: 5,
998    reviewCount: 31,
999    services: [{
1000      durationId: "london-grand-tg-8h",
1001      type: "tourist-guide",
1002      label: "Walking Tours",
1003      duration: "Up to 8 hours",
1004      durationKey: "catalogue.duration.8h",
1005      price: 420,
1006      maxGroup: 57,
1007      guestCapacityLabel: "Ideal for up to 57 guests",
1008      description: "Blue Badge Tourist Guide walking tour of London."
1009    }, {
1010      durationId: "london-grand-dg-8h",
1011      type: "driver-guided",
1012      label: "Driver-Guided Tours",
1013      duration: "Up to 8 hours",
1014      durationKey: "catalogue.duration.8h",
1015      price: 890,
1016      maxGroup: 6,
1017      guestCapacityLabel: "Ideal for up to 6 guests",
1018      description: "Richard acts as both your driver and Blue Badge Tourist Guide — seamless, personal, and efficient. Premium vehicle included.",
1019      badge: "Best-selling London tour",
1020      badgeKey: "catalogue.badge.bestSellingLondon"
1021    }, {
1022      durationId: "london-grand-cg-8h",
1023      type: "chauffeur-guide",
1024      label: "Chauffeur-Driven Tours with a Private Guide",
1025      duration: "Up to 8 hours",
1026      durationKey: "catalogue.duration.8h",
1027      price: 1040,
1028      maxGroup: 6,
1029      guestCapacityLabel: "Ideal for up to 6 guests",
1030      description: "A dedicated chauffeur handles the driving while your Blue Badge Tourist Guide focuses entirely on the experience. Premium vehicle included."
1031    }],
1032    description: "The ultimate full-day London experience — cover everything from the Tower of London to Kensington Palace with your private Blue Badge Tourist Guide.",
1033    longDescription: "Tour themes are fully customisable. A full day gives you the freedom to explore London in depth — royal palaces, world-class museums, hidden backstreets, and iconic landmarks. Every tour is tailored to your interests, pace, and group.",
1034    longDescriptionKey: "catalogue.tours.london-grand.longDescription",
1035    highlights: ["Buckingham Palace & Changing of the Guard", "Tower of London & Crown Jewels", "Westminster Abbey & Houses of Parliament", "Tower Bridge", "St Paul's Cathedral", "Hyde Park & Kensington Palace"],
1036    highlightsKeys: ["catalogue.tours.london.highlights.0", "catalogue.tours.london.highlights.1", "catalogue.tours.london.highlights.2", "catalogue.tours.london.highlights.3", "catalogue.tours.london.highlights.4", "catalogue.tours.london.highlights.5"],
1037    included: ["Private Blue Badge Tourist Guide", "Flexible itinerary tailored to you", "Instant booking confirmation"],
1038    includedKeys: ["catalogue.shared.included.guide", "catalogue.shared.included.flexibleItinerary", "catalogue.shared.included.instantConfirmation"],
1039    notIncluded: ["Entrance fees to attractions", "Meals and refreshments", "Gratuities (discretionary)"],
1040    notIncludedKeys: ["catalogue.shared.notIncluded.entranceFees", "catalogue.shared.notIncluded.meals", "catalogue.shared.notIncluded.gratuities"],
1041    keywords: ["london", "grand tour", "city tour", "full day", "buckingham palace", "tower of london"],
1042    bestSeller: true
1043  },
1044  // ── DAY TRIPS ────────────────────────────────────────────────────────────────
1045  {
1046    id: "windsor-castle",
1047    slug: "windsor-castle",
1048    title: "Windsor Castle",
1049    subtitle: "Private Day Trip from London",
1050    category: "Day Trip",
1051    destinations: ["windsor"],
1052    duration: "Up to 5 hours",
1053    isCombo: false,
1054    titleKey: "catalogue.tours.windsor-castle.title",
1055    subtitleKey: "catalogue.tours.windsor-castle.subtitle",
1056    durationKey: "catalogue.tours.windsor-castle.duration",
1057    descriptionKey: "catalogue.tours.windsor-castle.description",
1058    images: ["/airo-assets/images/tours/windsor-castle"],
1059    fromPrice: 310,
1060    rating: 5,
1061    reviewCount: 28,
1062    distance: "65 miles",
1063    distanceKm: "105 km",
1064    services: [{
1065      durationId: "windsor-castle-tg-5h",
1066      type: "tourist-guide",
1067      label: "Walking Tours",
1068      duration: "Up to 5 hours",
1069      durationKey: "catalogue.duration.5h",
1070      price: 310,
1071      maxGroup: 57,
1072      guestCapacityLabel: "Ideal for up to 57 guests",
1073      description: "Blue Badge Tourist Guide on foot once at the destination."
1074    }, {
1075      durationId: "windsor-castle-dg-5h",
1076      type: "driver-guided",
1077      label: "Driver-Guided Tours",
1078      duration: "Up to 5 hours",
1079      durationKey: "catalogue.duration.5h",
1080      price: 725,
1081      maxGroup: 6,
1082      guestCapacityLabel: "Ideal for up to 6 guests",
1083      description: "Richard acts as both your driver and Blue Badge Tourist Guide. Premium vehicle included."
1084    }, {
1085      durationId: "windsor-castle-cg-5h",
1086      type: "chauffeur-guide",
1087      label: "Chauffeur-Driven Tours with a Private Guide",
1088      duration: "Up to 5 hours",
1089      durationKey: "catalogue.duration.5h",
1090      price: 825,
1091      maxGroup: 6,
1092      guestCapacityLabel: "Ideal for up to 6 guests",
1093      description: "A dedicated chauffeur handles the driving while your Blue Badge Tourist Guide focuses entirely on the experience. Premium vehicle included."
1094    }],
1095    description: "Visit the oldest and largest occupied castle in the world — the official residence of the British Royal Family.",
1096    longDescription: "Windsor Castle has been the home of British monarchs for nearly 1,000 years. Explore the State Apartments, St George's Chapel, and the beautiful Long Walk with your private Blue Badge Tourist Guide. A perfect excursion from London.",
1097    longDescriptionKey: "catalogue.tours.windsor-castle.longDescription",
1098    highlights: ["Windsor Castle State Apartments", "St George's Chapel", "The Long Walk", "Changing of the Guard (seasonal)"],
1099    highlightsKeys: ["catalogue.tours.windsor-castle.highlights.0", "catalogue.tours.windsor-castle.highlights.1", "catalogue.tours.windsor-castle.highlights.2", "catalogue.tours.windsor-castle.highlights.3"],
1100    included: ["Private Blue Badge Tourist Guide", "Door-to-door service", "Instant booking confirmation"],
1101    includedKeys: ["catalogue.shared.included.guide", "catalogue.shared.included.doorToDoor", "catalogue.shared.included.instantConfirmation"],
1102    notIncluded: ["Windsor Castle entrance fee", "Meals and refreshments", "Gratuities (discretionary)"],
1103    notIncludedKeys: ["catalogue.tours.windsor-castle.notIncluded.0", "catalogue.shared.notIncluded.meals", "catalogue.shared.notIncluded.gratuities"],
1104    keywords: ["windsor", "windsor castle", "royal family", "berkshire", "day trip"],
1105    bestSeller: true
1106  },
1107  {
1108    id: "windsor-hampton-court",
1109    slug: "windsor-hampton-court",
1110    title: "Windsor Castle & Hampton Court Palace",
1111    subtitle: "Private Combo Day Trip from London",
1112    category: "Day Trip",
1113    destinations: ["windsor", "hampton-court"],
1114    duration: "Up to 8 hours",
1115    isCombo: true,
1116    titleKey: "catalogue.tours.windsor-hampton-court.title",
1117    subtitleKey: "catalogue.tours.windsor-hampton-court.subtitle",
1118    durationKey: "catalogue.tours.windsor-hampton-court.duration",
1119    descriptionKey: "catalogue.tours.windsor-hampton-court.description",
1120    images: ["/airo-assets/images/tours/windsor-castle", "/airo-assets/images/tours/hampton-court"],
1121    fromPrice: 420,
1122    rating: 5,
1123    reviewCount: 19,
1124    distance: "70 miles",
1125    distanceKm: "115 km",
1126    services: [{
1127      durationId: "windsor-hampton-tg-8h",
1128      type: "tourist-guide",
1129      label: "Walking Tours",
1130      duration: "Up to 8 hours",
1131      durationKey: "catalogue.duration.8h",
1132      price: 420,
1133      maxGroup: 57,
1134      guestCapacityLabel: "Ideal for up to 57 guests",
1135      description: "Blue Badge Tourist Guide on foot once at the destination."
1136    }, {
1137      durationId: "windsor-hampton-dg-8h",
1138      type: "driver-guided",
1139      label: "Driver-Guided Tours",
1140      duration: "Up to 8 hours",
1141      durationKey: "catalogue.duration.8h",
1142      price: 960,
1143      maxGroup: 6,
1144      guestCapacityLabel: "Ideal for up to 6 guests",
1145      description: "Richard acts as both your driver and Blue Badge Tourist Guide. Premium vehicle included."
1146    }, {
1147      durationId: "windsor-hampton-cg-8h",
1148      type: "chauffeur-guide",
1149      label: "Chauffeur-Driven Tours with a Private Guide",
1150      duration: "Up to 8 hours",
1151      durationKey: "catalogue.duration.8h",
1152      price: 1150,
1153      maxGroup: 6,
1154      guestCapacityLabel: "Ideal for up to 6 guests",
1155      description: "A dedicated chauffeur handles the driving while your Blue Badge Tourist Guide focuses entirely on the experience. Premium vehicle included."
1156    }],
1157    description: "Two of England's greatest royal palaces in one unforgettable day — Windsor Castle and Hampton Court Palace.",
1158    longDescription: "Begin at Windsor Castle, the oldest occupied castle in the world and home of the Royal Family, before travelling to Hampton Court Palace — Henry VIII's magnificent Tudor masterpiece. Your private Blue Badge Tourist Guide brings both palaces to life with expert commentary throughout.",
1159    longDescriptionKey: "catalogue.tours.windsor-hampton-court.longDescription",
1160    highlights: ["Windsor Castle State Apartments & St George's Chapel", "Hampton Court Palace Great Hall", "The famous Hampton Court Maze", "Two royal palaces in one day", "Expert Blue Badge Tourist Guide commentary throughout"],
1161    highlightsKeys: ["catalogue.tours.windsor-hampton-court.highlights.0", "catalogue.tours.windsor-hampton-court.highlights.1", "catalogue.tours.windsor-hampton-court.highlights.2", "catalogue.tours.windsor-hampton-court.highlights.3", "catalogue.tours.windsor-hampton-court.highlights.4"],
1162    included: ["Private Blue Badge Tourist Guide", "Door-to-door service", "Instant booking confirmation"],
1163    includedKeys: ["catalogue.shared.included.guide", "catalogue.shared.included.doorToDoor", "catalogue.shared.included.instantConfirmation"],
1164    notIncluded: ["Windsor Castle entrance fee", "Hampton Court entrance fee", "Meals and refreshments", "Gratuities (discretionary)"],
1165    notIncludedKeys: ["catalogue.tours.windsor-castle.notIncluded.0", "catalogue.tours.hampton-court.notIncluded.0", "catalogue.shared.notIncluded.meals", "catalogue.shared.notIncluded.gratuities"],
1166    keywords: ["windsor", "hampton court", "henry viii", "tudor", "royal", "palace", "combo", "day trip"]
1167  },
1168  {
1169    id: "windsor-stonehenge",
1170    slug: "windsor-stonehenge",
1171    title: "Windsor Castle & Stonehenge",
1172    subtitle: "Private Combo Day Trip from London",
1173    category: "Day Trip",
1174    destinations: ["windsor", "stonehenge"],
1175    duration: "Up to 10 hours",
1176    isCombo: true,
1177    titleKey: "catalogue.tours.windsor-stonehenge.title",
1178    subtitleKey: "catalogue.tours.windsor-stonehenge.subtitle",
1179    durationKey: "catalogue.tours.windsor-stonehenge.duration",
1180    descriptionKey: "catalogue.tours.windsor-stonehenge.description",
1181    images: ["/airo-assets/images/tours/windsor-castle", "/airo-assets/images/tours/stonehenge"],
1182    fromPrice: 485,
1183    rating: 5,
1184    reviewCount: 22,
1185    distance: "180 miles",
1186    distanceKm: "290 km",
1187    services: [{
1188      durationId: "windsor-stonehenge-tg-10h",
1189      type: "tourist-guide",
1190      label: "Walking Tours",
1191      duration: "Up to 10 hours",
1192      durationKey: "catalogue.duration.10h",
1193      price: 485,
1194      maxGroup: 57,
1195      guestCapacityLabel: "Ideal for up to 57 guests",
1196      description: "Blue Badge Tourist Guide on foot once at the destination."
1197    }, {
1198      durationId: "windsor-stonehenge-dg-10h",
1199      type: "driver-guided",
1200      label: "Driver-Guided Tours",
1201      duration: "Up to 10 hours",
1202      durationKey: "catalogue.duration.10h",
1203      price: 1105,
1204      maxGroup: 6,
1205      guestCapacityLabel: "Ideal for up to 6 guests",
1206      description: "Richard acts as both your driver and Blue Badge Tourist Guide. Premium vehicle included."
1207    }, {
1208      durationId: "windsor-stonehenge-cg-10h",
1209      type: "chauffeur-guide",
1210      label: "Chauffeur-Driven Tours with a Private Guide",
1211      duration: "Up to 10 hours",
1212      durationKey: "catalogue.duration.10h",
1213      price: 1405,
1214      maxGroup: 6,
1215      guestCapacityLabel: "Ideal for up to 6 guests",
1216      description: "A dedicated chauffeur handles the driving while your Blue Badge Tourist Guide focuses entirely on the experience. Premium vehicle included."
1217    }],
1218    description: "Royal splendour meets prehistoric mystery — combine Windsor Castle and Stonehenge in one extraordinary day.",
1219    longDescription: "Start your day at Windsor Castle, the world's oldest occupied castle and official residence of the British Royal Family. Then journey west to Stonehenge, the iconic prehistoric monument standing on Salisbury Plain for over 4,500 years. Your private Blue Badge Tourist Guide connects the stories of both sites throughout the day.",
1220    longDescriptionKey: "catalogue.tours.windsor-stonehenge.longDescription",
1221    highlights: ["Windsor Castle State Apartments", "St George's Chapel", "Stonehenge prehistoric monument", "Salisbury Plain landscape", "Expert commentary at both sites"],
1222    highlightsKeys: ["catalogue.tours.windsor-castle.highlights.0", "catalogue.tours.windsor-castle.highlights.1", "catalogue.tours.stonehenge.highlights.0", "catalogue.tours.stonehenge.highlights.1", "catalogue.shared.highlights.expertCommentaryBothSites"],
1223    included: ["Private Blue Badge Tourist Guide", "Door-to-door service", "Instant booking confirmation"],
1224    includedKeys: ["catalogue.shared.included.guide", "catalogue.shared.included.doorToDoor", "catalogue.shared.included.instantConfirmation"],
1225    notIncluded: ["Windsor Castle entrance fee", "Stonehenge entrance fee", "Meals and refreshments", "Gratuities (discretionary)"],
1226    notIncludedKeys: ["catalogue.tours.windsor-castle.notIncluded.0", "catalogue.tours.stonehenge.notIncluded.0", "catalogue.shared.notIncluded.meals", "catalogue.shared.notIncluded.gratuities"],
1227    keywords: ["windsor", "stonehenge", "salisbury", "prehistoric", "royal", "combo", "day trip"],
1228    bestSeller: true
1229  },
1230  {
1231    id: "windsor-stonehenge-bath",
1232    slug: "windsor-stonehenge-bath",
1233    title: "Windsor Castle, Stonehenge & Bath",
1234    subtitle: "Private Grand Combo Day Trip from London",
1235    category: "Day Trip",
1236    destinations: ["windsor", "stonehenge", "bath"],
1237    duration: "Up to 12 hours",
1238    isCombo: true,
1239    titleKey: "catalogue.tours.windsor-stonehenge-bath.title",
1240    subtitleKey: "catalogue.tours.windsor-stonehenge-bath.subtitle",
1241    durationKey: "catalogue.tours.windsor-stonehenge-bath.duration",
1242    descriptionKey: "catalogue.tours.windsor-stonehenge-bath.description",
1243    images: ["/airo-assets/images/tours/windsor-castle", "/airo-assets/images/tours/stonehenge", "/assets/bath.webp"],
1244    fromPrice: 620,
1245    rating: 5,
1246    reviewCount: 14,
1247    distance: "250 miles",
1248    distanceKm: "400 km",
1249    services: [{
1250      durationId: "windsor-stonehenge-bath-tg-12h",
1251      type: "tourist-guide",
1252      label: "Walking Tours",
1253      duration: "Up to 12 hours",
1254      durationKey: "catalogue.duration.12h",
1255      price: 620,
1256      maxGroup: 57,
1257      guestCapacityLabel: "Ideal for up to 57 guests",
1258      description: "Blue Badge Tourist Guide on foot once at the destination."
1259    }, {
1260      durationId: "windsor-stonehenge-bath-dg-12h",
1261      type: "driver-guided",
1262      label: "Driver-Guided Tours",
1263      duration: "Up to 12 hours",
1264      durationKey: "catalogue.duration.12h",
1265      price: 1325,
1266      maxGroup: 6,
1267      guestCapacityLabel: "Ideal for up to 6 guests",
1268      description: "Richard acts as both your driver and Blue Badge Tourist Guide. Premium vehicle included."
1269    }, {
1270      durationId: "windsor-stonehenge-bath-cg-12h",
1271      type: "chauffeur-guide",
1272      label: "Chauffeur-Driven Tours with a Private Guide",
1273      duration: "Up to 12 hours",
1274      durationKey: "catalogue.duration.12h",
1275      price: 1950,
1276      maxGroup: 6,
1277      guestCapacityLabel: "Ideal for up to 6 guests",
1278      description: "A dedicated chauffeur handles the driving while your Blue Badge Tourist Guide focuses entirely on the experience. Premium vehicle included."
1279    }],
1280    description: "The ultimate English heritage day — three iconic destinations: Windsor Castle, Stonehenge, and the Roman city of Bath.",
1281    longDescription: "This grand combo tour takes you from the royal splendour of Windsor Castle to the prehistoric mystery of Stonehenge, finishing in the UNESCO World Heritage city of Bath. A full day of England's most celebrated history, architecture, and landscapes, guided throughout by your private Blue Badge Tourist Guide.",
1282    longDescriptionKey: "catalogue.tours.windsor-stonehenge-bath.longDescription",
1283    highlights: ["Windsor Castle State Apartments", "Stonehenge prehistoric monument", "Roman Baths in Bath", "Royal Crescent & Georgian architecture", "Three UNESCO/heritage sites in one day"],
1284    highlightsKeys: ["catalogue.tours.windsor-castle.highlights.0", "catalogue.tours.stonehenge.highlights.0", "catalogue.tours.bath.highlights.0", "catalogue.tours.bath.highlights.1", "catalogue.tours.windsor-stonehenge-bath.highlights.4"],
1285    included: ["Private Blue Badge Tourist Guide", "Door-to-door service", "Instant booking confirmation"],
1286    includedKeys: ["catalogue.shared.included.guide", "catalogue.shared.included.doorToDoor", "catalogue.shared.included.instantConfirmation"],
1287    notIncluded: ["Windsor Castle entrance fee", "Stonehenge entrance fee", "Roman Baths entrance fee", "Meals and refreshments", "Gratuities (discretionary)"],
1288    notIncludedKeys: ["catalogue.tours.windsor-castle.notIncluded.0", "catalogue.tours.stonehenge.notIncluded.0", "catalogue.tours.bath.notIncluded.0", "catalogue.shared.notIncluded.meals", "catalogue.shared.notIncluded.gratuities"],
1289    keywords: ["windsor", "stonehenge", "bath", "roman baths", "combo", "grand tour", "day trip"],
1290    bestSeller: true
1291  },
1292  {
1293    id: "stonehenge",
1294    slug: "stonehenge",
1295    title: "Stonehenge",
1296    subtitle: "Private Day Trip from London",
1297    category: "Day Trip",
1298    destinations: ["stonehenge"],
1299    duration: "Up to 6 hours",
1300    isCombo: false,
1301    titleKey: "catalogue.tours.stonehenge.title",
1302    subtitleKey: "catalogue.tours.stonehenge.subtitle",
1303    durationKey: "catalogue.tours.stonehenge.duration",
1304    descriptionKey: "catalogue.tours.stonehenge.description",
1305    images: ["/airo-assets/images/tours/stonehenge"],
1306    fromPrice: 380,
1307    rating: 5,
1308    reviewCount: 35,
1309    distance: "180 miles",
1310    distanceKm: "290 km",
1311    services: [{
1312      durationId: "stonehenge-tg-6h",
1313      type: "tourist-guide",
1314      label: "Walking Tours",
1315      duration: "Up to 6 hours",
1316      durationKey: "catalogue.duration.6h",
1317      price: 380,
1318      maxGroup: 57,
1319      guestCapacityLabel: "Ideal for up to 57 guests",
1320      description: "Blue Badge Tourist Guide on foot once at the destination."
1321    }, {
1322      durationId: "stonehenge-dg-6h",
1323      type: "driver-guided",
1324      label: "Driver-Guided Tours",
1325      duration: "Up to 6 hours",
1326      durationKey: "catalogue.duration.6h",
1327      price: 845,
1328      maxGroup: 6,
1329      guestCapacityLabel: "Ideal for up to 6 guests",
1330      description: "Richard acts as both your driver and Blue Badge Tourist Guide. Premium vehicle included."
1331    }, {
1332      durationId: "stonehenge-cg-6h",
1333      type: "chauffeur-guide",
1334      label: "Chauffeur-Driven Tours with a Private Guide",
1335      duration: "Up to 6 hours",
1336      durationKey: "catalogue.duration.6h",
1337      price: 1265,
1338      maxGroup: 6,
1339      guestCapacityLabel: "Ideal for up to 6 guests",
1340      description: "A dedicated chauffeur handles the driving while your Blue Badge Tourist Guide focuses entirely on the experience. Premium vehicle included."
1341    }],
1342    description: "Journey to one of the world's most iconic prehistoric monuments. A private door-to-door experience from your London hotel.",
1343    longDescription: "Standing for over 4,500 years on Salisbury Plain, Stonehenge is one of the most mysterious and awe-inspiring sites in the world. Your private tour includes expert commentary from your Blue Badge Tourist Guide throughout the journey.",
1344    longDescriptionKey: "catalogue.tours.stonehenge.longDescription",
1345    highlights: ["Stonehenge prehistoric monument", "Salisbury Plain landscape", "Expert historical commentary", "Photo stops at the best viewpoints"],
1346    highlightsKeys: ["catalogue.tours.stonehenge.highlights.0", "catalogue.tours.stonehenge.highlights.1", "catalogue.tours.stonehenge.highlights.2", "catalogue.tours.stonehenge.highlights.3"],
1347    included: ["Private Blue Badge Tourist Guide", "Door-to-door service", "Instant booking confirmation"],
1348    includedKeys: ["catalogue.shared.included.guide", "catalogue.shared.included.doorToDoor", "catalogue.shared.included.instantConfirmation"],
1349    notIncluded: ["Stonehenge entrance fee", "Meals and refreshments", "Gratuities (discretionary)"],
1350    notIncludedKeys: ["catalogue.tours.stonehenge.notIncluded.0", "catalogue.shared.notIncluded.meals", "catalogue.shared.notIncluded.gratuities"],
1351    keywords: ["stonehenge", "salisbury", "wiltshire", "prehistoric", "day trip"]
1352  },
1353  {
1354    id: "stonehenge-bath",
1355    slug: "stonehenge-bath",
1356    title: "Stonehenge & Bath",
1357    subtitle: "Private Combo Day Trip from London",
1358    category: "Day Trip",
1359    destinations: ["stonehenge", "bath"],
1360    duration: "Up to 12 hours",
1361    isCombo: true,
1362    titleKey: "catalogue.tours.stonehenge-bath.title",
1363    subtitleKey: "catalogue.tours.stonehenge-bath.subtitle",
1364    durationKey: "catalogue.tours.stonehenge-bath.duration",
1365    descriptionKey: "catalogue.tours.stonehenge-bath.description",
1366    images: ["/airo-assets/images/tours/stonehenge", "/assets/bath.webp"],
1367    fromPrice: 620,
1368    rating: 5,
1369    reviewCount: 17,
1370    distance: "250 miles",
1371    distanceKm: "400 km",
1372    services: [{
1373      durationId: "stonehenge-bath-tg-12h",
1374      type: "tourist-guide",
1375      label: "Walking Tours",
1376      duration: "Up to 12 hours",
1377      durationKey: "catalogue.duration.12h",
1378      price: 620,
1379      maxGroup: 57,
1380      guestCapacityLabel: "Ideal for up to 57 guests",
1381      description: "Blue Badge Tourist Guide on foot once at the destination."
1382    }, {
1383      durationId: "stonehenge-bath-dg-12h",
1384      type: "driver-guided",
1385      label: "Driver-Guided Tours",
1386      duration: "Up to 12 hours",
1387      durationKey: "catalogue.duration.12h",
1388      price: 1325,
1389      maxGroup: 6,
1390      guestCapacityLabel: "Ideal for up to 6 guests",
1391      description: "Richard acts as both your driver and Blue Badge Tourist Guide. Premium vehicle included."
1392    }, {
1393      durationId: "stonehenge-bath-cg-12h",
1394      type: "chauffeur-guide",
1395      label: "Chauffeur-Driven Tours with a Private Guide",
1396      duration: "Up to 12 hours",
1397      durationKey: "catalogue.duration.12h",
1398      price: 1950,
1399      maxGroup: 6,
1400      guestCapacityLabel: "Ideal for up to 6 guests",
1401      description: "A dedicated chauffeur handles the driving while your Blue Badge Tourist Guide focuses entirely on the experience. Premium vehicle included."
1402    }],
1403    description: "Prehistoric wonder meets Georgian elegance — combine Stonehenge and the beautiful city of Bath in one day.",
1404    longDescription: "Visit the ancient mystery of Stonehenge on Salisbury Plain before continuing to Bath, England's most elegant Georgian city. Explore the Roman Baths, the Royal Crescent, and Pulteney Bridge with your private Blue Badge Tourist Guide. A perfect pairing of England's ancient and Georgian heritage.",
1405    longDescriptionKey: "catalogue.tours.stonehenge-bath.longDescription",
1406    highlights: ["Stonehenge prehistoric monument", "Roman Baths in Bath", "Royal Crescent & The Circus", "Pulteney Bridge", "Expert commentary at both sites"],
1407    highlightsKeys: ["catalogue.tours.stonehenge.highlights.0", "catalogue.tours.bath.highlights.0", "catalogue.tours.bath.highlights.1", "catalogue.tours.bath.highlights.2", "catalogue.shared.highlights.expertCommentaryBothSites"],
1408    included: ["Private Blue Badge Tourist Guide", "Door-to-door service", "Instant booking confirmation"],
1409    includedKeys: ["catalogue.shared.included.guide", "catalogue.shared.included.doorToDoor", "catalogue.shared.included.instantConfirmation"],
1410    notIncluded: ["Stonehenge entrance fee", "Roman Baths entrance fee", "Meals and refreshments", "Gratuities (discretionary)"],
1411    notIncludedKeys: ["catalogue.tours.stonehenge.notIncluded.0", "catalogue.tours.bath.notIncluded.0", "catalogue.shared.notIncluded.meals", "catalogue.shared.notIncluded.gratuities"],
1412    keywords: ["stonehenge", "bath", "roman baths", "prehistoric", "georgian", "combo", "day trip"]
1413  },
1414  {
1415    id: "hampton-court",
1416    slug: "hampton-court",
1417    title: "Hampton Court Palace",
1418    subtitle: "Private Day Trip from London",
1419    category: "Day Trip",
1420    destinations: ["hampton-court"],
1421    duration: "Up to 5 hours",
1422    isCombo: false,
1423    titleKey: "catalogue.tours.hampton-court.title",
1424    subtitleKey: "catalogue.tours.hampton-court.subtitle",
1425    durationKey: "catalogue.tours.hampton-court.duration",
1426    descriptionKey: "catalogue.tours.hampton-court.description",
1427    images: ["/airo-assets/images/tours/hampton-court"],
1428    fromPrice: 310,
1429    rating: 5,
1430    reviewCount: 24,
1431    distance: "65 miles",
1432    distanceKm: "105 km",
1433    services: [{
1434      durationId: "hampton-court-tg-5h",
1435      type: "tourist-guide",
1436      label: "Walking Tours",
1437      duration: "Up to 5 hours",
1438      durationKey: "catalogue.duration.5h",
1439      price: 310,
1440      maxGroup: 57,
1441      guestCapacityLabel: "Ideal for up to 57 guests",
1442      description: "Blue Badge Tourist Guide on foot once at the destination."
1443    }, {
1444      durationId: "hampton-court-dg-5h",
1445      type: "driver-guided",
1446      label: "Driver-Guided Tours",
1447      duration: "Up to 5 hours",
1448      durationKey: "catalogue.duration.5h",
1449      price: 725,
1450      maxGroup: 6,
1451      guestCapacityLabel: "Ideal for up to 6 guests",
1452      description: "Richard acts as both your driver and Blue Badge Tourist Guide. Premium vehicle included."
1453    }, {
1454      durationId: "hampton-court-cg-5h",
1455      type: "chauffeur-guide",
1456      label: "Chauffeur-Driven Tours with a Private Guide",
1457      duration: "Up to 5 hours",
1458      durationKey: "catalogue.duration.5h",
1459      price: 825,
1460      maxGroup: 6,
1461      guestCapacityLabel: "Ideal for up to 6 guests",
1462      description: "A dedicated chauffeur handles the driving while your Blue Badge Tourist Guide focuses entirely on the experience. Premium vehicle included."
1463    }],
1464    description: "Step inside the magnificent Tudor palace of Henry VIII — one of England's most spectacular royal residences.",
1465    longDescription: "Hampton Court Palace is a masterpiece of Tudor and Baroque architecture set in stunning riverside gardens. Explore the Great Hall, the Chapel Royal, the famous Maze, and the beautiful formal gardens with your private Blue Badge Tourist Guide.",
1466    longDescriptionKey: "catalogue.tours.hampton-court.longDescription",
1467    highlights: ["Henry VIII's Great Hall", "The Chapel Royal", "The famous Hampton Court Maze", "Baroque formal gardens", "Riverside setting on the Thames"],
1468    highlightsKeys: ["catalogue.tours.hampton-court.highlights.0", "catalogue.tours.hampton-court.highlights.1", "catalogue.tours.hampton-court.highlights.2", "catalogue.tours.hampton-court.highlights.3", "catalogue.tours.hampton-court.highlights.4"],
1469    included: ["Private Blue Badge Tourist Guide", "Door-to-door service", "Instant booking confirmation"],
1470    includedKeys: ["catalogue.shared.included.guide", "catalogue.shared.included.doorToDoor", "catalogue.shared.included.instantConfirmation"],
1471    notIncluded: ["Hampton Court entrance fee", "Meals and refreshments", "Gratuities (discretionary)"],
1472    notIncludedKeys: ["catalogue.tours.hampton-court.notIncluded.0", "catalogue.shared.notIncluded.meals", "catalogue.shared.notIncluded.gratuities"],
1473    keywords: ["hampton court", "henry viii", "tudor", "palace", "surrey", "maze", "day trip"]
1474  },
1475  {
1476    id: "oxford",
1477    slug: "oxford",
1478    title: "Oxford",
1479    subtitle: "Private Day Trip from London",
1480    category: "Day Trip",
1481    destinations: ["oxford"],
1482    duration: "Up to 9 hours",
1483    isCombo: false,
1484    titleKey: "catalogue.tours.oxford.title",
1485    subtitleKey: "catalogue.tours.oxford.subtitle",
1486    durationKey: "catalogue.tours.oxford.duration",
1487    descriptionKey: "catalogue.tours.oxford.description",
1488    images: ["/airo-assets/images/tours/oxford"],
1489    fromPrice: 420,
1490    rating: 5,
1491    reviewCount: 29,
1492    distance: "120 miles",
1493    distanceKm: "195 km",
1494    services: [{
1495      durationId: "oxford-tg-9h",
1496      type: "tourist-guide",
1497      label: "Walking Tours",
1498      duration: "Up to 9 hours",
1499      durationKey: "catalogue.duration.9h",
1500      price: 420,
1501      maxGroup: 57,
1502      guestCapacityLabel: "Ideal for up to 57 guests",
1503      description: "Blue Badge Tourist Guide on foot once at the destination."
1504    }, {
1505      durationId: "oxford-dg-9h",
1506      type: "driver-guided",
1507      label: "Driver-Guided Tours",
1508      duration: "Up to 9 hours",
1509      durationKey: "catalogue.duration.9h",
1510      price: 995,
1511      maxGroup: 6,
1512      guestCapacityLabel: "Ideal for up to 6 guests",
1513      description: "Richard acts as both your driver and Blue Badge Tourist Guide. Premium vehicle included."
1514    }, {
1515      durationId: "oxford-cg-9h",
1516      type: "chauffeur-guide",
1517      label: "Chauffeur-Driven Tours with a Private Guide",
1518      duration: "Up to 9 hours",
1519      durationKey: "catalogue.duration.9h",
1520      price: 1250,
1521      maxGroup: 6,
1522      guestCapacityLabel: "Ideal for up to 6 guests",
1523      description: "A dedicated chauffeur handles the driving while your Blue Badge Tourist Guide focuses entirely on the experience. Premium vehicle included."
1524    }],
1525    description: `Explore the "City of Dreaming Spires" — one of the world's oldest and most prestigious university cities.`,
1526    longDescription: "Oxford has been a centre of learning since the 11th century. Walk through ancient college quadrangles, visit the Bodleian Library, and explore the city's stunning architecture with your private Blue Badge Tourist Guide. A truly unforgettable day trip from London.",
1527    longDescriptionKey: "catalogue.tours.oxford.longDescription",
1528    highlights: ["Christ Church College", "Bodleian Library", "Radcliffe Camera", "Covered Market", "Magdalen College & deer park"],
1529    highlightsKeys: ["catalogue.tours.oxford.highlights.0", "catalogue.tours.oxford.highlights.1", "catalogue.tours.oxford.highlights.2", "catalogue.tours.oxford.highlights.3", "catalogue.tours.oxford.highlights.4"],
1530    included: ["Private Blue Badge Tourist Guide", "Door-to-door service", "Instant booking confirmation"],
1531    includedKeys: ["catalogue.shared.included.guide", "catalogue.shared.included.doorToDoor", "catalogue.shared.included.instantConfirmation"],
1532    notIncluded: ["College entrance fees (where applicable)", "Meals and refreshments", "Gratuities (discretionary)"],
1533    notIncludedKeys: ["catalogue.shared.notIncluded.collegeEntranceFees", "catalogue.shared.notIncluded.meals", "catalogue.shared.notIncluded.gratuities"],
1534    keywords: ["oxford", "university", "bodleian", "christ church", "dreaming spires", "day trip"]
1535  },
1536  {
1537    id: "oxford-cotswolds",
1538    slug: "oxford-cotswolds",
1539    title: "Oxford & The Cotswolds",
1540    subtitle: "Private Combo Day Trip from London",
1541    category: "Day Trip",
1542    destinations: ["oxford", "cotswolds"],
1543    duration: "Up to 10 hours",
1544    isCombo: true,
1545    titleKey: "catalogue.tours.oxford-cotswolds.title",
1546    subtitleKey: "catalogue.tours.oxford-cotswolds.subtitle",
1547    durationKey: "catalogue.tours.oxford-cotswolds.duration",
1548    descriptionKey: "catalogue.tours.oxford-cotswolds.description",
1549    images: ["/airo-assets/images/tours/oxford", "/airo-assets/images/tours/cotswolds"],
1550    fromPrice: 485,
1551    rating: 5,
1552    reviewCount: 21,
1553    distance: "225 miles",
1554    distanceKm: "360 km",
1555    services: [{
1556      durationId: "oxford-cotswolds-tg-10h",
1557      type: "tourist-guide",
1558      label: "Walking Tours",
1559      duration: "Up to 10 hours",
1560      durationKey: "catalogue.duration.10h",
1561      price: 485,
1562      maxGroup: 57,
1563      guestCapacityLabel: "Ideal for up to 57 guests",
1564      description: "Blue Badge Tourist Guide on foot once at the destination."
1565    }, {
1566      durationId: "oxford-cotswolds-dg-10h",
1567      type: "driver-guided",
1568      label: "Driver-Guided Tours",
1569      duration: "Up to 10 hours",
1570      durationKey: "catalogue.duration.10h",
1571      price: 1150,
1572      maxGroup: 6,
1573      guestCapacityLabel: "Ideal for up to 6 guests",
1574      description: "Richard acts as both your driver and Blue Badge Tourist Guide. Premium vehicle included."
1575    }, {
1576      durationId: "oxford-cotswolds-cg-10h",
1577      type: "chauffeur-guide",
1578      label: "Chauffeur-Driven Tours with a Private Guide",
1579      duration: "Up to 10 hours",
1580      durationKey: "catalogue.duration.10h",
1581      price: 1705,
1582      maxGroup: 6,
1583      guestCapacityLabel: "Ideal for up to 6 guests",
1584      description: "A dedicated chauffeur handles the driving while your Blue Badge Tourist Guide focuses entirely on the experience. Premium vehicle included."
1585    }],
1586    description: "Dreaming spires and honey-stone villages — combine the university city of Oxford with the beauty of the Cotswolds.",
1587    longDescription: "Begin in Oxford, one of the world's greatest university cities, exploring ancient colleges and the Bodleian Library. Then journey into the Cotswolds, an Area of Outstanding Natural Beauty, visiting picture-perfect villages like Bourton-on-the-Water and Burford. Your private Blue Badge Tourist Guide brings both destinations to life.",
1588    longDescriptionKey: "catalogue.tours.oxford-cotswolds.longDescription",
1589    highlights: ["Oxford's ancient university colleges", "Bodleian Library & Radcliffe Camera", "Bourton-on-the-Water", "Burford & the High Street", "Rolling Cotswolds countryside"],
1590    highlightsKeys: ["catalogue.tours.oxford-cotswolds.highlights.0", "catalogue.tours.oxford-cotswolds.highlights.1", "catalogue.tours.cotswolds.highlights.0", "catalogue.tours.cotswolds.highlights.1", "catalogue.tours.cotswolds.highlights.4"],
1591    included: ["Private Blue Badge Tourist Guide", "Door-to-door service", "Instant booking confirmation"],
1592    includedKeys: ["catalogue.shared.included.guide", "catalogue.shared.included.doorToDoor", "catalogue.shared.included.instantConfirmation"],
1593    notIncluded: ["College entrance fees (where applicable)", "Meals and refreshments", "Gratuities (discretionary)"],
1594    notIncludedKeys: ["catalogue.shared.notIncluded.collegeEntranceFees", "catalogue.shared.notIncluded.meals", "catalogue.shared.notIncluded.gratuities"],
1595    keywords: ["oxford", "cotswolds", "bourton", "burford", "bibury", "countryside", "combo", "day trip"]
1596  },
1597  {
1598    id: "oxford-stratford",
1599    slug: "oxford-stratford",
1600    title: "Oxford & Stratford-Upon-Avon",
1601    subtitle: "Private Combo Day Trip from London",
1602    category: "Day Trip",
1603    destinations: ["oxford"],
1604    duration: "Up to 10 hours",
1605    isCombo: true,
1606    titleKey: "catalogue.tours.oxford-stratford.title",
1607    subtitleKey: "catalogue.tours.oxford-stratford.subtitle",
1608    durationKey: "catalogue.tours.oxford-stratford.duration",
1609    descriptionKey: "catalogue.tours.oxford-stratford.description",
1610    images: ["/airo-assets/images/tours/oxford", "/airo-assets/images/tours/stratford"],
1611    fromPrice: 485,
1612    rating: 5,
1613    reviewCount: 16,
1614    distance: "225 miles",
1615    distanceKm: "360 km",
1616    services: [{
1617      durationId: "oxford-stratford-tg-10h",
1618      type: "tourist-guide",
1619      label: "Walking Tours",
1620      duration: "Up to 10 hours",
1621      durationKey: "catalogue.duration.10h",
1622      price: 485,
1623      maxGroup: 57,
1624      guestCapacityLabel: "Ideal for up to 57 guests",
1625      description: "Blue Badge Tourist Guide on foot once at the destination."
1626    }, {
1627      durationId: "oxford-stratford-dg-10h",
1628      type: "driver-guided",
1629      label: "Driver-Guided Tours",
1630      duration: "Up to 10 hours",
1631      durationKey: "catalogue.duration.10h",
1632      price: 1150,
1633      maxGroup: 6,
1634      guestCapacityLabel: "Ideal for up to 6 guests",
1635      description: "Richard acts as both your driver and Blue Badge Tourist Guide. Premium vehicle included."
1636    }, {
1637      durationId: "oxford-stratford-cg-10h",
1638      type: "chauffeur-guide",
1639      label: "Chauffeur-Driven Tours with a Private Guide",
1640      duration: "Up to 10 hours",
1641      durationKey: "catalogue.duration.10h",
1642      price: 1705,
1643      maxGroup: 6,
1644      guestCapacityLabel: "Ideal for up to 6 guests",
1645      description: "A dedicated chauffeur handles the driving while your Blue Badge Tourist Guide focuses entirely on the experience. Premium vehicle included."
1646    }],
1647    description: "Two of England's most celebrated towns — the university city of Oxford and Shakespeare's birthplace, Stratford-upon-Avon.",
1648    longDescription: "Explore Oxford's magnificent colleges and ancient streets before travelling to Stratford-upon-Avon, the birthplace of William Shakespeare. Visit Shakespeare's Birthplace, Anne Hathaway's Cottage, and the beautiful market town with your private Blue Badge Tourist Guide.",
1649    longDescriptionKey: "catalogue.tours.oxford-stratford.longDescription",
1650    highlights: ["Oxford's ancient university colleges", "Bodleian Library", "Shakespeare's Birthplace", "Anne Hathaway's Cottage", "Stratford-upon-Avon town centre"],
1651    highlightsKeys: ["catalogue.tours.oxford-cotswolds.highlights.0", "catalogue.tours.oxford.highlights.1", "catalogue.tours.oxford-stratford.highlights.2", "catalogue.tours.oxford-stratford.highlights.3", "catalogue.tours.oxford-stratford.highlights.4"],
1652    included: ["Private Blue Badge Tourist Guide", "Door-to-door service", "Instant booking confirmation"],
1653    includedKeys: ["catalogue.shared.included.guide", "catalogue.shared.included.doorToDoor", "catalogue.shared.included.instantConfirmation"],
1654    notIncluded: ["Shakespeare's Birthplace entrance fee", "College entrance fees (where applicable)", "Meals and refreshments", "Gratuities (discretionary)"],
1655    notIncludedKeys: ["catalogue.tours.oxford-stratford.notIncluded.0", "catalogue.shared.notIncluded.collegeEntranceFees", "catalogue.shared.notIncluded.meals", "catalogue.shared.notIncluded.gratuities"],
1656    keywords: ["oxford", "stratford", "shakespeare", "university", "combo", "day trip"]
1657  },
1658  {
1659    id: "cotswolds",
1660    slug: "cotswolds",
1661    title: "The Cotswolds",
1662    subtitle: "Private Day Trip from London",
1663    category: "Day Trip",
1664    destinations: ["cotswolds"],
1665    duration: "Up to 10 hours",
1666    isCombo: false,
1667    titleKey: "catalogue.tours.cotswolds.title",
1668    subtitleKey: "catalogue.tours.cotswolds.subtitle",
1669    durationKey: "catalogue.tours.cotswolds.duration",
1670    descriptionKey: "catalogue.tours.cotswolds.description",
1671    images: ["/airo-assets/images/tours/cotswolds"],
1672    fromPrice: 485,
1673    rating: 5,
1674    reviewCount: 26,
1675    distance: "230 miles",
1676    distanceKm: "370 km",
1677    services: [{
1678      durationId: "cotswolds-tg-10h",
1679      type: "tourist-guide",
1680      label: "Walking Tours",
1681      duration: "Up to 10 hours",
1682      durationKey: "catalogue.duration.10h",
1683      price: 485,
1684      maxGroup: 57,
1685      guestCapacityLabel: "Ideal for up to 57 guests",
1686      description: "Blue Badge Tourist Guide on foot once at the destination."
1687    }, {
1688      durationId: "cotswolds-dg-10h",
1689      type: "driver-guided",
1690      label: "Driver-Guided Tours",
1691      duration: "Up to 10 hours",
1692      durationKey: "catalogue.duration.10h",
1693      price: 1120,
1694      maxGroup: 6,
1695      guestCapacityLabel: "Ideal for up to 6 guests",
1696      description: "Richard acts as both your driver and Blue Badge Tourist Guide. Premium vehicle included."
1697    }, {
1698      durationId: "cotswolds-cg-10h",
1699      type: "chauffeur-guide",
1700      label: "Chauffeur-Driven Tours with a Private Guide",
1701      duration: "Up to 10 hours",
1702      durationKey: "catalogue.duration.10h",
1703      price: 1660,
1704      maxGroup: 6,
1705      guestCapacityLabel: "Ideal for up to 6 guests",
1706      description: "A dedicated chauffeur handles the driving while your Blue Badge Tourist Guide focuses entirely on the experience. Premium vehicle included."
1707    }],
1708    description: "Discover the quintessential English countryside — honey-stone villages, rolling hills, and timeless charm.",
1709    longDescription: "The Cotswolds is one of England's most beautiful regions, designated an Area of Outstanding Natural Beauty. Visit picture-perfect villages like Bourton-on-the-Water, Burford, and Bibury, with expert commentary from your private Blue Badge Tourist Guide throughout the day.",
1710    longDescriptionKey: "catalogue.tours.cotswolds.longDescription",
1711    highlights: ["Bourton-on-the-Water", "Burford & the High Street", "Bibury & Arlington Row", "Broadway village", "Rolling Cotswolds countryside"],
1712    highlightsKeys: ["catalogue.tours.cotswolds.highlights.0", "catalogue.tours.cotswolds.highlights.1", "catalogue.tours.cotswolds.highlights.2", "catalogue.tours.cotswolds.highlights.3", "catalogue.tours.cotswolds.highlights.4"],
1713    included: ["Private Blue Badge Tourist Guide", "Door-to-door service", "Instant booking confirmation", "Flexible village selection"],
1714    includedKeys: ["catalogue.shared.included.guide", "catalogue.shared.included.doorToDoor", "catalogue.shared.included.instantConfirmation", "catalogue.shared.included.flexibleVillageSelection"],
1715    notIncluded: ["Meals and refreshments", "Any attraction entrance fees", "Gratuities (discretionary)"],
1716    notIncludedKeys: ["catalogue.shared.notIncluded.meals", "catalogue.shared.notIncluded.anyEntranceFees", "catalogue.shared.notIncluded.gratuities"],
1717    keywords: ["cotswolds", "bourton", "burford", "bibury", "broadway", "countryside", "villages", "day trip"]
1718  },
1719  {
1720    id: "bath",
1721    slug: "bath",
1722    title: "Bath",
1723    subtitle: "Private Day Trip from London",
1724    category: "Day Trip",
1725    destinations: ["bath"],
1726    duration: "Up to 8 hours",
1727    isCombo: false,
1728    titleKey: "catalogue.tours.bath.title",
1729    subtitleKey: "catalogue.tours.bath.subtitle",
1730    durationKey: "catalogue.tours.bath.duration",
1731    descriptionKey: "catalogue.tours.bath.description",
1732    images: ["/assets/bath.webp", "/airo-assets/images/tours/bath"],
1733    fromPrice: 420,
1734    rating: 5,
1735    reviewCount: 33,
1736    distance: "220 miles",
1737    distanceKm: "355 km",
1738    services: [{
1739      durationId: "bath-tg-8h",
1740      type: "tourist-guide",
1741      label: "Walking Tours",
1742      duration: "Up to 8 hours",
1743      durationKey: "catalogue.duration.8h",
1744      price: 420,
1745      maxGroup: 57,
1746      guestCapacityLabel: "Ideal for up to 57 guests",
1747      description: "Blue Badge Tourist Guide on foot once at the destination."
1748    }, {
1749      durationId: "bath-dg-8h",
1750      type: "driver-guided",
1751      label: "Driver-Guided Tours",
1752      duration: "Up to 8 hours",
1753      durationKey: "catalogue.duration.8h",
1754      price: 1070,
1755      maxGroup: 6,
1756      guestCapacityLabel: "Ideal for up to 6 guests",
1757      description: "Richard acts as both your driver and Blue Badge Tourist Guide. Premium vehicle included."
1758    }, {
1759      durationId: "bath-cg-8h",
1760      type: "chauffeur-guide",
1761      label: "Chauffeur-Driven Tours with a Private Guide",
1762      duration: "Up to 8 hours",
1763      durationKey: "catalogue.duration.8h",
1764      price: 1565,
1765      maxGroup: 6,
1766      guestCapacityLabel: "Ideal for up to 6 guests",
1767      description: "A dedicated chauffeur handles the driving while your Blue Badge Tourist Guide focuses entirely on the experience. Premium vehicle included."
1768    }],
1769    description: "Visit England's most elegant Georgian city — home to the famous Roman Baths and stunning Regency architecture.",
1770    longDescription: "Bath is a UNESCO World Heritage city of extraordinary beauty. Explore the Roman Baths, the Royal Crescent, Pulteney Bridge, and the Abbey with your private Blue Badge Tourist Guide. One of the most rewarding day trips from London.",
1771    longDescriptionKey: "catalogue.tours.bath.longDescription",
1772    highlights: ["The Roman Baths", "Royal Crescent & The Circus", "Pulteney Bridge", "Bath Abbey", "Georgian architecture & streets"],
1773    highlightsKeys: ["catalogue.tours.bath.highlights.0", "catalogue.tours.bath.highlights.1", "catalogue.tours.bath.highlights.2", "catalogue.tours.bath.highlights.3", "catalogue.tours.bath.highlights.4"],
1774    included: ["Private Blue Badge Tourist Guide", "Door-to-door service", "Instant booking confirmation"],
1775    includedKeys: ["catalogue.shared.included.guide", "catalogue.shared.included.doorToDoor", "catalogue.shared.included.instantConfirmation"],
1776    notIncluded: ["Roman Baths entrance fee", "Meals and refreshments", "Gratuities (discretionary)"],
1777    notIncludedKeys: ["catalogue.tours.bath.notIncluded.0", "catalogue.shared.notIncluded.meals", "catalogue.shared.notIncluded.gratuities"],
1778    keywords: ["bath", "roman baths", "royal crescent", "pulteney bridge", "georgian", "day trip"]
1779  }
1780];
1781function getTourBySlug(slug) {
1782  return catalogue.find((t) => t.slug === slug);
1783}
1784function getToursByDestination(destinationId) {
1785  return catalogue.filter((t) => t.destinations.includes(destinationId));
1786}
1787function getToursByCategory(category) {
1788  return catalogue.filter((t) => t.category === category);
1789}
1790function useLocalisedPricing() {
1791  const {
1792    i18n
1793  } = useTranslation();
1794  const [bookingConfig, setBookingConfig] = reactExports.useState(null);
1795  reactExports.useEffect(() => {
1796    let cancelled = false;
1797    fetch("/api/booking/config").then((r) => r.ok ? r.json() : null).then((data) => {
1798      if (!cancelled && data) setBookingConfig(data);
1799    }).catch(() => {
1800    });
1801    return () => {
1802      cancelled = true;
1803    };
1804  }, []);
1805  const getLocalisedPrice = reactExports.useCallback((durationId, basePrice) => {
1806    var _a2;
1807    const lang = i18n.language;
1808    if (lang === "en" || !bookingConfig) return basePrice;
1809    for (const tc of bookingConfig.tourConfigs) {
1810      const dur = tc.durations.find((d) => d.id === durationId);
1811      if (dur) {
1812        const override = (_a2 = dur.priceOverrides) == null ? void 0 : _a2[lang];
1813        return override !== void 0 ? override : basePrice;
1814      }
1815    }
1816    return basePrice;
1817  }, [i18n.language, bookingConfig]);
1818  const getLocalisedFromPrice = reactExports.useCallback((tour) => {
1819    const lang = i18n.language;
1820    if (lang === "en" || !bookingConfig) return tour.fromPrice;
1821    const prices = tour.services.map((svc) => getLocalisedPrice(svc.durationId, svc.price));
1822    return Math.min(...prices);
1823  }, [i18n.language, bookingConfig, getLocalisedPrice]);
1824  return {
1825    getLocalisedPrice,
1826    getLocalisedFromPrice,
1827    bookingConfig
1828  };
1829}
1830function matchTour(tour, query) {
1831  const q = query.toLowerCase().trim();
1832  if (!q) return false;
1833  const haystack = [tour.title, ...tour.keywords].join(" ").toLowerCase();
1834  return haystack.includes(q);
1835}
1836function HeroDestinations() {
1837  const {
1838    t
1839  } = useTranslation();
1840  const navigate = useNavigate();
1841  const localizedPath = useLocalizedPath();
1842  const {
1843    getLocalisedFromPrice
1844  } = useLocalisedPricing();
1845  const [query, setQuery] = reactExports.useState("");
1846  const [open, setOpen] = reactExports.useState(false);
1847  const containerRef = reactExports.useRef(null);
1848  const inputRef = reactExports.useRef(null);
1849  const results = query.trim().length > 0 ? catalogue.filter((tour) => matchTour(tour, query)) : [];
1850  reactExports.useEffect(() => {
1851    function handleClick(e) {
1852      if (containerRef.current && !containerRef.current.contains(e.target)) {
1853        setOpen(false);
1854      }
1855    }
1856    document.addEventListener("mousedown", handleClick);
1857    return () => document.removeEventListener("mousedown", handleClick);
1858  }, []);
1859  const handleSelect = reactExports.useCallback((tour) => {
1860    setQuery("");
1861    setOpen(false);
1862    navigate(localizedPath(tour.linkPath ?? `/tours/${tour.slug}`));
1863  }, [navigate, localizedPath]);
1864  const handleChange = (e) => {
1865    setQuery(e.target.value);
1866    setOpen(true);
1867  };
1868  const handleKeyDown = (e) => {
1869    var _a2;
1870    if (e.key === "Escape") {
1871      setOpen(false);
1872      (_a2 = inputRef.current) == null ? void 0 : _a2.blur();
1873    }
1874  };
1875  const showDropdown = open && query.trim().length > 0;
1876  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { ref: containerRef, className: "relative w-full", children: [
1877    /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative flex items-center", children: [
1878      /* @__PURE__ */ jsxRuntimeExports.jsx(Search, { size: 22, strokeWidth: 1.5, className: "absolute left-4 pointer-events-none flex-shrink-0", style: {
1879        color: "rgba(255,255,255,0.85)"
1880      }, "aria-hidden": "true" }),
1881      /* @__PURE__ */ jsxRuntimeExports.jsx("input", { ref: inputRef, type: "text", value: query, onChange: handleChange, onKeyDown: handleKeyDown, placeholder: t("home.search.placeholder"), className: "w-full pl-12 pr-5 py-3.5 text-sm font-light text-white placeholder:text-white/60 focus:outline-none transition-all duration-300", style: {
1882        background: "rgba(255,255,255,0.18)",
1883        border: "1px solid rgba(255,255,255,0.38)",
1884        borderRadius: "2px"
1885      }, onFocus: (e) => {
1886        e.currentTarget.style.background = "rgba(255,255,255,0.26)";
1887        e.currentTarget.style.borderColor = "rgba(255,255,255,0.60)";
1888        if (query.trim().length > 0) setOpen(true);
1889      }, onBlur: (e) => {
1890        e.currentTarget.style.background = "rgba(255,255,255,0.18)";
1891        e.currentTarget.style.borderColor = "rgba(255,255,255,0.38)";
1892      }, autoComplete: "off", spellCheck: false, "aria-label": t("home.search.ariaLabel") })
1893    ] }),
1894    showDropdown && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute top-full left-0 right-0 mt-1 rounded-sm border border-border bg-card shadow-xl z-50 overflow-hidden", children: results.length > 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { children: results.map((tour) => /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("button", { onMouseDown: (e) => {
1895      e.preventDefault();
1896      handleSelect(tour);
1897    }, className: "w-full flex items-center justify-between px-4 py-3 text-left hover:bg-muted/60 transition-colors group", children: [
1898      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3 min-w-0", children: [
1899        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-9 h-9 rounded-sm bg-cover bg-center flex-shrink-0", style: {
1900          backgroundImage: `url(${tour.images[0]})`
1901        } }),
1902        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-w-0", children: [
1903          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-foreground truncate", children: t(tour.titleKey) }),
1904          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground truncate", children: t(tour.durationKey) })
1905        ] })
1906      ] }),
1907      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-shrink-0 ml-4 text-right", children: [
1908        /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-base font-heading font-bold leading-tight", style: {
1909          color: "hsl(var(--primary))"
1910        }, children: [
1911          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-bold text-[13px]", children: t("home.search.from") }),
1912          " ",
1913          "£",
1914          getLocalisedFromPrice(tour).toLocaleString("en-GB")
1915        ] }),
1916        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-[10px] text-muted-foreground font-normal mt-0.5", children: tour.pricingLabel ?? t("home.search.perGroup") }),
1917        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-[10px] text-muted-foreground font-normal mt-0.5 max-w-[120px]", children: t("home.search.priceDepends") })
1918      ] })
1919    ] }) }, tour.id)) }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-4 py-3 text-sm text-muted-foreground", children: t("home.search.noResults", {
1920      query
1921    }) }) })
1922  ] });
1923}
1924const testimonials = [{
1925  id: "bill-m",
1926  name: "Bill M",
1927  location: "United States",
1928  tour: "Half Day London Tour",
1929  date: "October 2024",
1930  text: "Interesting, knowledgeable and fun — a Blue Badge professional tour guide. Couldn't have been better. Thanks for a wonderful day.",
1931  rating: 5,
1932  featured: true,
1933  tripAdvisorUrl: "https://www.tripadvisor.co.uk/Attraction_Review-g186338-d8706674-Reviews-London_City_Tours-London_England.html"
1934}, {
1935  id: "allfifty",
1936  name: "Allfifty",
1937  location: "United States",
1938  tour: "Grand Tour of London",
1939  date: "September 2024",
1940  text: "We have travelled extensively with our family throughout Europe and we can honestly say that Richard is the best tour guide we've had. His love of his city and country is obvious and he's a wealth of information — both current and past.",
1941  rating: 5,
1942  featured: true,
1943  tripAdvisorUrl: "https://www.tripadvisor.co.uk/Attraction_Review-g186338-d8706674-Reviews-London_City_Tours-London_England.html"
1944}, {
1945  id: "katie-w",
1946  name: "Katie W",
1947  location: "United States",
1948  tour: "Grand Tour of London",
1949  date: "August 2024",
1950  text: "He incorporated everything on our wish list and timed it perfectly! His knowledge of unique facts is pretty amazing! We did this the first full day we were in London and it was perfect!",
1951  rating: 5,
1952  featured: true,
1953  tripAdvisorUrl: "https://www.tripadvisor.co.uk/Attraction_Review-g186338-d8706674-Reviews-London_City_Tours-London_England.html"
1954}];
1955const featuredTestimonials = testimonials.filter((t) => t.featured);
1956const TRIPADVISOR_URL = "https://www.tripadvisor.co.uk/Attraction_Review-g186338-d8706674-Reviews-London_City_Tours-London_England.html";
1957function StarRow({
1958  count
1959}) {
1960  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex gap-0.5", "aria-label": `${count} out of 5 stars`, children: Array.from({
1961    length: count
1962  }).map((_, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(Star, { size: 11, fill: "hsl(43 74% 49%)", color: "hsl(43 74% 49%)" }, i)) });
1963}
1964function TripAdvisorMark({
1965  className
1966}) {
1967  return /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", className, "aria-label": "TripAdvisor", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M12 1C5.925 1 1 5.925 1 12s4.925 11 11 11 11-4.925 11-11S18.075 1 12 1zm0 2c4.963 0 9 4.037 9 9s-4.037 9-9 9-9-4.037-9-9 4.037-9 9-9zm-3.5 5a3.5 3.5 0 100 7 3.5 3.5 0 000-7zm7 0a3.5 3.5 0 100 7 3.5 3.5 0 000-7zm-7 1.5a2 2 0 110 4 2 2 0 010-4zm7 0a2 2 0 110 4 2 2 0 010-4zm-7 .75a1.25 1.25 0 110 2.5 1.25 1.25 0 010-2.5zm7 0a1.25 1.25 0 110 2.5 1.25 1.25 0 010-2.5z" }) });
1968}
1969function TestimonialCard({
1970  testimonial: t,
1971  dark = false
1972}) {
1973  const textColor = dark ? "text-white/80" : "text-foreground/80";
1974  const nameColor = dark ? "text-white" : "text-foreground";
1975  const metaColor = dark ? "text-white/40" : "text-muted-foreground";
1976  const borderColor = dark ? "border-white/10" : "border-border";
1977  const bgColor = dark ? "bg-white/5" : "bg-card";
1978  const dividerColor = dark ? "border-white/8" : "border-border/60";
1979  return /* @__PURE__ */ jsxRuntimeExports.jsxs("article", { className: `${bgColor} border ${borderColor} rounded-sm p-8 flex flex-col`, children: [
1980    /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mb-5", children: /* @__PURE__ */ jsxRuntimeExports.jsx(StarRow, { count: t.rating }) }),
1981    /* @__PURE__ */ jsxRuntimeExports.jsxs("blockquote", { className: `${textColor} text-sm leading-relaxed flex-1 mb-6`, children: [
1982      "“",
1983      t.text,
1984      "”"
1985    ] }),
1986    /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `border-t ${dividerColor} pt-5`, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-end justify-between gap-4", children: [
1987      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
1988        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `text-sm font-semibold ${nameColor} leading-tight`, children: t.name }),
1989        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `text-xs ${metaColor} mt-0.5`, children: t.location }),
1990        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: `text-xs ${metaColor} mt-1 italic`, children: t.tour })
1991      ] }),
1992      /* @__PURE__ */ jsxRuntimeExports.jsxs("a", { href: t.tripAdvisorUrl ?? TRIPADVISOR_URL, target: "_blank", rel: "noopener noreferrer", className: `flex items-center gap-1.5 shrink-0 ${metaColor} hover:text-[#34E0A1] transition-colors duration-200`, "aria-label": "View on TripAdvisor", children: [
1993        /* @__PURE__ */ jsxRuntimeExports.jsx(TripAdvisorMark, { className: "w-4 h-4" }),
1994        /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] font-medium tracking-wide uppercase", children: "TripAdvisor" })
1995      ] })
1996    ] }) })
1997  ] });
1998}
1999const WEBSITE_COPY = {
2000  en: [{
2001    targetLang: "es",
2002    question: "¿Prefieres excursiones en Español?"
2003  }, {
2004    targetLang: "pt",
2005    question: "Prefere excursões em Português?"
2006  }],
2007  es: [{
2008    targetLang: "en",
2009    question: "Prefer to see excursions in English?"
2010  }, {
2011    targetLang: "pt",
2012    question: "Prefere excursões em Português?"
2013  }],
2014  pt: [{
2015    targetLang: "en",
2016    question: "Prefer to see excursions in English?"
2017  }, {
2018    targetLang: "es",
2019    question: "¿Prefieres excursiones en Español?"
2020  }]
2021};
2022const PRODUCT_COPY = {
2023  en: [{
2024    targetLang: "es",
2025    question: "¿Prefiere esta excursión en Español?"
2026  }, {
2027    targetLang: "pt",
2028    question: "Prefere esta excursão em Português?"
2029  }],
2030  es: [{
2031    targetLang: "en",
2032    question: "Prefer this excursion in English?"
2033  }, {
2034    targetLang: "pt",
2035    question: "Prefere esta excursão em Português?"
2036  }],
2037  pt: [{
2038    targetLang: "en",
2039    question: "Prefer this excursion in English?"
2040  }, {
2041    targetLang: "es",
2042    question: "¿Prefiere esta excursión en Español?"
2043  }]
2044};
2045function switchLang(currentPath, targetLang) {
2046  const match = currentPath.match(/^\/([a-z]{2})(\/.*)?$/);
2047  if (!match) return `/${targetLang}`;
2048  const rest = match[2] ?? "";
2049  return `/${targetLang}${rest}`;
2050}
2051const DISMISSED_WEBSITE_KEY = "lct_lang_banner_website_dismissed";
2052function WebsiteBanner({
2053  entries,
2054  pathname
2055}) {
2056  const [dismissed, setDismissed] = reactExports.useState(true);
2057  reactExports.useEffect(() => {
2058    const stored = sessionStorage.getItem(DISMISSED_WEBSITE_KEY);
2059    setDismissed(!!stored);
2060  }, []);
2061  const dismiss = () => {
2062    sessionStorage.setItem(DISMISSED_WEBSITE_KEY, "1");
2063    setDismissed(true);
2064  };
2065  if (dismissed || entries.length === 0) return null;
2066  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { role: "region", "aria-label": "Language options", className: "py-8 bg-background", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-6 flex flex-col items-center gap-0", children: [
2067    /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-16 h-px bg-primary/40 mb-6" }),
2068    /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-col items-center gap-3", children: entries.map((entry) => /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: switchLang(pathname, entry.targetLang), className: "group flex items-center gap-2 font-serif italic text-sm text-muted-foreground hover:text-primary transition-colors duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 rounded-sm", "aria-label": `Switch to ${entry.targetLang.toUpperCase()}`, children: [
2069      entry.question,
2070      /* @__PURE__ */ jsxRuntimeExports.jsx(ArrowRight, { size: 13, "aria-hidden": "true", className: "opacity-50 group-hover:opacity-100 group-hover:translate-x-0.5 transition-all duration-200" })
2071    ] }, entry.targetLang)) }),
2072    /* @__PURE__ */ jsxRuntimeExports.jsx("button", { onClick: dismiss, "aria-label": "Dismiss language suggestions", className: "mt-5 text-[11px] text-muted-foreground/50 hover:text-muted-foreground transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-1 rounded-sm", children: "dismiss" })
2073  ] }) });
2074}
2075function ProductBanner({
2076  entries,
2077  pathname
2078}) {
2079  if (entries.length === 0) return null;
2080  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { role: "region", "aria-label": "Language options", className: "bg-muted border-b border-border", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "max-w-7xl mx-auto px-6 py-3 flex flex-col sm:flex-row sm:items-center gap-3 sm:gap-8", children: entries.map((entry) => /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: switchLang(pathname, entry.targetLang), className: "inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-primary transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-1 rounded-sm", "aria-label": `Switch to ${entry.targetLang.toUpperCase()}`, children: [
2081    entry.question,
2082    /* @__PURE__ */ jsxRuntimeExports.jsx(ArrowRight, { size: 12, "aria-hidden": "true" })
2083  ] }, entry.targetLang)) }) });
2084}
2085function LanguageSwitchBanner({
2086  variant
2087}) {
2088  const {
2089    pathname
2090  } = useLocation();
2091  const langMatch = pathname.match(/^\/([a-z]{2})(\/|$)/);
2092  const lang = langMatch ? langMatch[1] : "en";
2093  const entries = (variant === "website" ? WEBSITE_COPY : PRODUCT_COPY)[lang] ?? [];
2094  if (variant === "product") {
2095    return /* @__PURE__ */ jsxRuntimeExports.jsx(ProductBanner, { entries, pathname });
2096  }
2097  return /* @__PURE__ */ jsxRuntimeExports.jsx(WebsiteBanner, { entries, pathname });
2098}
2099const schemas = {
2100  pages: {
2101    home: objectType({
2102      "itgProfileUrl": stringType()
2103    }),
2104    westminster: objectType({
2105      "hero": objectType({
2106        "eyebrow": stringType(),
2107        "headline": stringType(),
2108        "subheading": stringType(),
2109        "destinations": stringType(),
2110        "descriptionHeading": stringType(),
2111        "descriptionBody1": stringType(),
2112        "descriptionBody2": stringType(),
2113        "ctaPrimary": stringType(),
2114        "ctaSecondary": stringType()
2115      }),
2116      "allAges": objectType({
2117        "badge": stringType(),
2118        "body": stringType()
2119      }),
2120      "differentiators": objectType({
2121        "eyebrow": stringType(),
2122        "headline": stringType(),
2123        "items": arrayType(objectType({
2124          "id": stringType(),
2125          "title": stringType(),
2126          "body": stringType(),
2127          "linkLabel": stringType(),
2128          "linkHref": stringType()
2129        }))
2130      }),
2131      "stats": arrayType(objectType({
2132        "id": stringType(),
2133        "label": stringType(),
2134        "value": stringType()
2135      })),
2136      "fastEntry": objectType({
2137        "eyebrow": stringType(),
2138        "headline": stringType(),
2139        "body": stringType()
2140      }),
2141      "included": objectType({
2142        "eyebrow": stringType(),
2143        "headline": stringType(),
2144        "items": arrayType(objectType({
2145          "id": stringType(),
2146          "text": stringType()
2147        })),
2148        "guardChangeNote": stringType(),
2149        "pleaseNote": stringType()
2150      }),
2151      "history": objectType({
2152        "eyebrow": stringType(),
2153        "headline": stringType(),
2154        "body1": stringType(),
2155        "body2": stringType(),
2156        "quote": stringType()
2157      }),
2158      "credentials": objectType({
2159        "unescoLabel": stringType(),
2160        "unescoHeadline": stringType(),
2161        "unescoBody": stringType(),
2162        "royalLabel": stringType(),
2163        "royalHeadline": stringType(),
2164        "royalBody": stringType()
2165      }),
2166      "route": objectType({
2167        "eyebrow": stringType(),
2168        "headline": stringType(),
2169        "intro": stringType(),
2170        "bigBenLabel": stringType(),
2171        "bigBenSub": stringType(),
2172        "buckinghamLabel": stringType(),
2173        "buckinghamSub": stringType(),
2174        "royalLondonLabel": stringType(),
2175        "royalLondonBody": stringType()
2176      }),
2177      "guardChange": objectType({
2178        "eyebrow": stringType(),
2179        "headline": stringType(),
2180        "cardLabel": stringType(),
2181        "cardSub": stringType(),
2182        "body": stringType(),
2183        "disclaimer": stringType()
2184      }),
2185      "guide": objectType({
2186        "eyebrow": stringType(),
2187        "headline": stringType(),
2188        "body": stringType(),
2189        "credential": stringType(),
2190        "languages": stringType()
2191      }),
2192      "bookingOptions": objectType({
2193        "eyebrow": stringType(),
2194        "headline": stringType(),
2195        "infantNote": stringType(),
2196        "option1": objectType({
2197          "badge": stringType(),
2198          "eyebrow": stringType(),
2199          "name": stringType(),
2200          "features": arrayType(objectType({
2201            "id": stringType(),
2202            "text": stringType()
2203          })),
2204          "cta": stringType()
2205        }),
2206        "option2": objectType({
2207          "eyebrow": stringType(),
2208          "name": stringType(),
2209          "features": arrayType(objectType({
2210            "id": stringType(),
2211            "text": stringType()
2212          })),
2213          "cta": stringType()
2214        }),
2215        "option3": objectType({
2216          "eyebrow": stringType(),
2217          "name": stringType(),
2218          "features": arrayType(objectType({
2219            "id": stringType(),
2220            "text": stringType()
2221          })),
2222          "cta": stringType()
2223        })
2224      }),
2225      "availability": objectType({
2226        "eyebrow": stringType(),
2227        "headline": stringType(),
2228        "scarcityNote": stringType(),
2229        "noDepartures": stringType(),
2230        "noDeparturesContact": stringType(),
2231        "seeAll": stringType()
2232      }),
2233      "goodToKnow": objectType({
2234        "eyebrow": stringType(),
2235        "headline": stringType(),
2236        "items": arrayType(objectType({
2237          "id": stringType(),
2238          "text": stringType()
2239        })),
2240        "accessibilityLabel": stringType(),
2241        "accessibilityBody": stringType()
2242      }),
2243      "meetingPoint": objectType({
2244        "eyebrow": stringType(),
2245        "headline": stringType(),
2246        "name": stringType(),
2247        "address": stringType(),
2248        "w3wLabel": stringType(),
2249        "w3wCode": stringType(),
2250        "w3wUrl": stringType(),
2251        "w3wCta": stringType(),
2252        "toiletsHeadline": stringType(),
2253        "toiletsBody": stringType(),
2254        "toiletsCost": stringType(),
2255        "toiletsW3w": stringType(),
2256        "toiletsW3wUrl": stringType()
2257      }),
2258      "gettingThere": objectType({
2259        "eyebrow": stringType(),
2260        "headline": stringType(),
2261        "startHeadline": stringType(),
2262        "startBody": stringType(),
2263        "startLines": stringType(),
2264        "startBuses": stringType(),
2265        "endHeadline": stringType(),
2266        "endBody": stringType(),
2267        "endLines": stringType(),
2268        "endBuses": stringType()
2269      }),
2270      "lateArrival": objectType({
2271        "headline": stringType(),
2272        "body": stringType()
2273      }),
2274      "endPoint": objectType({
2275        "eyebrow": stringType(),
2276        "headline": stringType(),
2277        "body": stringType(),
2278        "returnNote": stringType(),
2279        "w3wCode": stringType(),
2280        "w3wUrl": stringType(),
2281        "w3wCta": stringType()
2282      }),
2283      "whatsapp": objectType({
2284        "headline": stringType(),
2285        "body1": stringType(),
2286        "body2": stringType()
2287      }),
2288      "abbeyClosure": objectType({
2289        "headline": stringType(),
2290        "body1": stringType(),
2291        "body2": stringType()
2292      }),
2293      "bookingConditions": objectType({
2294        "headline": stringType(),
2295        "secureLabel": stringType(),
2296        "secureBody": stringType(),
2297        "flexibleLabel": stringType(),
2298        "flexibleBody": stringType(),
2299        "reserveLabel": stringType(),
2300        "reserveBody": stringType(),
2301        "noShowNote": stringType()
2302      }),
2303      "finalCta": objectType({
2304        "eyebrow": stringType(),
2305        "headline": stringType(),
2306        "body": stringType(),
2307        "cta": stringType()
2308      }),
2309      "comingSoon": objectType({
2310        "headline": stringType(),
2311        "body": stringType()
2312      })
2313    }),
2314    westminster_book: objectType({
2315      "title": stringType(),
2316      "subtitle": stringType(),
2317      "backToTour": stringType(),
2318      "stepLabels": arrayType(objectType({
2319        "id": stringType(),
2320        "label": stringType()
2321      })),
2322      "holdBanner": stringType(),
2323      "securePaymentNote": stringType(),
2324      "whatsappNote": stringType(),
2325      "agencyNote": stringType(),
2326      "admissionNote": stringType()
2327    }),
2328    westminster_confirmation: objectType({
2329      "confirmedBadge": stringType(),
2330      "tourName": stringType(),
2331      "tourSubtitle": stringType(),
2332      "bookingRefLabel": stringType(),
2333      "meetingPointSection": stringType(),
2334      "meetingPointName": stringType(),
2335      "meetingPointAddress": stringType(),
2336      "meetingPointW3w": stringType(),
2337      "meetingPointW3wUrl": stringType(),
2338      "meetingPointCta": stringType(),
2339      "lateArrivalHeadline": stringType(),
2340      "lateArrivalBody": stringType(),
2341      "endPointSection": stringType(),
2342      "endPointName": stringType(),
2343      "endPointW3w": stringType(),
2344      "endPointW3wUrl": stringType(),
2345      "endPointCta": stringType(),
2346      "whatsappHeadline": stringType(),
2347      "whatsappBody1": stringType(),
2348      "whatsappBody2": stringType(),
2349      "whatToBringHeadline": stringType(),
2350      "whatToBringItems": arrayType(objectType({
2351        "id": stringType(),
2352        "text": stringType()
2353      })),
2354      "contactPrompt": stringType(),
2355      "contactEmail": stringType()
2356    }),
2357    admin_westminster: objectType({
2358      "title": stringType(),
2359      "tabs": arrayType(objectType({
2360        "id": stringType(),
2361        "label": stringType()
2362      }))
2363    }),
2364    admin_dashboard: objectType({
2365      "panelTitle": stringType(),
2366      "panelSubtitle": stringType()
2367    }),
2368    tours: objectType({
2369      "westminsterFeaturedLabel": stringType(),
2370      "westminsterFeaturedSectionTitle": stringType(),
2371      "westminsterFeaturedBadge": stringType(),
2372      "westminsterFeaturedTitle": stringType(),
2373      "westminsterFeaturedSubtitle": stringType(),
2374      "westminsterFeaturedBody": stringType(),
2375      "westminsterFeaturedDuration": stringType(),
2376      "westminsterFeaturedStart": stringType(),
2377      "westminsterFeaturedGuide": stringType(),
2378      "westminsterFeaturedFromLabel": stringType(),
2379      "westminsterFeaturedPrice": stringType(),
2380      "westminsterFeaturedPriceNote": stringType(),
2381      "westminsterFeaturedCta": stringType()
2382    }),
2383    contact: objectType({
2384      "email": stringType(),
2385      "phone": stringType(),
2386      "languages": stringType()
2387    }),
2388    about: objectType({
2389      "credentialsIntro": stringType(),
2390      "membershipsLabel": stringType(),
2391      "itgRegisterLink": stringType()
2392    })
2393  }
2394};
2395const identity = { parse: (v) => v };
2396const pages = {
2397  "about": (((_a = schemas.pages) == null ? void 0 : _a.about) ?? schemas.about ?? identity).parse({
2398    "credentialsIntro": "Richard Cerquera holds the highest professional qualifications available to a tourist guide and driver in the United Kingdom.",
2399    "membershipsLabel": "Professional Memberships & Accreditations",
2400    "itgRegisterLink": "View Richard Cerquera on the Institute of Tourist Guiding Register"
2401  }),
2402  "admin_dashboard": (((_b = schemas.pages) == null ? void 0 : _b.admin_dashboard) ?? schemas.admin_dashboard ?? identity).parse({
2403    "panelTitle": "Admin Panel",
2404    "panelSubtitle": "London City Tours — Pricing Configuration"
2405  }),
2406  "admin_westminster": (((_c = schemas.pages) == null ? void 0 : _c.admin_westminster) ?? schemas.admin_westminster ?? identity).parse({
2407    "title": "Westminster Abbey Tour",
2408    "tabs": [
2409      {
2410        "id": "departures",
2411        "label": "Departures"
2412      },
2413      {
2414        "id": "bookings",
2415        "label": "Bookings"
2416      },
2417      {
2418        "id": "config",
2419        "label": "Config"
2420      },
2421      {
2422        "id": "closure",
2423        "label": "Closure"
2424      },
2425      {
2426        "id": "availability",
2427        "label": "Availability"
2428      },
2429      {
2430        "id": "conflicts",
2431        "label": "Conflicts"
2432      }
2433    ]
2434  }),
2435  "contact": (((_d = schemas.pages) == null ? void 0 : _d.contact) ?? schemas.contact ?? identity).parse({
2436    "email": "[email protected]",
2437    "phone": "07778 788 336",
2438    "languages": "English · Português · Español"
2439  }),
2440  "home": (((_e = schemas.pages) == null ? void 0 : _e.home) ?? schemas.home ?? identity).parse({
2441    "itgProfileUrl": "https://www.itg.org.uk/register-of-guides/richard-cerquera"
2442  }),
2443  "tours": (((_f = schemas.pages) == null ? void 0 : _f.tours) ?? schemas.tours ?? identity).parse({
2444    "westminsterFeaturedLabel": "Public Guided Tour",
2445    "westminsterFeaturedSectionTitle": "Westminster Abbey Tour",
2446    "westminsterFeaturedBadge": "Westminster Abbey Admission Included",
2447    "westminsterFeaturedTitle": "The Nº1 Westminster Abbey Tour",
2448    "westminsterFeaturedSubtitle": "Westminster Abbey • Big Ben • Buckingham Palace",
2449    "westminsterFeaturedBody": "Discover Westminster Abbey from the inside, then experience the historic heart of Westminster and Royal London with a London Blue Badge Tourist Guide.",
2450    "westminsterFeaturedDuration": "Up to 4 hours",
2451    "westminsterFeaturedStart": "Parliament Square",
2452    "westminsterFeaturedGuide": "Blue Badge Guide",
2453    "westminsterFeaturedFromLabel": "From",
2454    "westminsterFeaturedPrice": "£63.75",
2455    "westminsterFeaturedPriceNote": "per adult",
2456    "westminsterFeaturedCta": "View Tour"
2457  }),
2458  "westminster": (((_g = schemas.pages) == null ? void 0 : _g.westminster) ?? schemas.westminster ?? identity).parse({
2459    "hero": {
2460      "eyebrow": "Led by a Blue Badge Tourist Guide",
2461      "headline": "The Nº1 Westminster Abbey Tour",
2462      "subheading": "PUBLIC TOUR · WALKING TOUR · MOST POPULAR",
2463      "destinations": "Westminster Abbey · Big Ben · Buckingham Palace",
2464      "descriptionHeading": "GUIDED INSIDE WESTMINSTER ABBEY",
2465      "descriptionBody1": "Enter Westminster Abbey for a guided visit inside this extraordinary historic building, led by an accredited Blue Badge Tourist Guide. Your guide brings the Abbey's history, architecture, royal connections and remarkable stories to life as you explore its interior.",
2466      "descriptionBody2": "Then continue through the historic heart of Westminster, seeing the iconic Elizabeth Tower and Big Ben and Buckingham Palace from the outside, while your guide brings the surrounding history and landmarks to life.",
2467      "ctaPrimary": "Book Now",
2468      "ctaSecondary": "View Options & Prices"
2469    },
2470    "allAges": {
2471      "badge": "⭐ Ideal for all ages",
2472      "body": "A fascinating and entertaining London experience for adults, families and children alike."
2473    },
2474    "differentiators": {
2475      "eyebrow": "More than a visit to Westminster Abbey",
2476      "headline": "More Than a Visit to Westminster Abbey",
2477      "items": [
2478        {
2479          "id": "d1",
2480          "title": "Authorised Blue Badge Guide",
2481          "body": "Explore Westminster Abbey with an authorised Blue Badge Tourist Guide. Only authorised Blue Badge Guides are permitted to guide groups inside the Abbey.",
2482          "linkLabel": "What is a Blue Badge Tourist Guide?",
2483          "linkHref": "/en/about#blue-badge-credentials"
2484        },
2485        {
2486          "id": "d2",
2487          "title": "Inside Westminster Abbey",
2488          "body": "You enter Westminster Abbey and experience it from the inside with a qualified guide — this is not simply an admission ticket. Your guide leads you through the Abbey, bringing the history, monuments and stories to life.",
2489          "linkLabel": "Highlights of your visit",
2490          "linkHref": "#abbey-highlights"
2491        },
2492        {
2493          "id": "d3",
2494          "title": "History with a Human Touch",
2495          "body": "Westminster Abbey is filled with extraordinary stories — and the best way to discover them is with a guide who knows how to tell them. Fascinating anecdotes, fun stories, lesser-known details and the characters and events behind the history make this a genuinely entertaining experience.",
2496          "linkLabel": "",
2497          "linkHref": ""
2498        }
2499      ]
2500    },
2501    "stats": [
2502      {
2503        "id": "s1",
2504        "label": "Duration",
2505        "value": "Up to 4 hours"
2506      },
2507      {
2508        "id": "s2",
2509        "label": "Group size",
2510        "value": "Max 20 guests"
2511      },
2512      {
2513        "id": "s3",
2514        "label": "Guide",
2515        "value": "Blue Badge Tourist Guide"
2516      }
2517    ],
2518    "fastEntry": {
2519      "eyebrow": "Exclusive benefit",
2520      "headline": "Fast Entry via the Guide Entrance",
2521      "body": "Enter Westminster Abbey through the designated guide entrance, avoiding the main visitor queue where available."
2522    },
2523    "included": {
2524      "eyebrow": "Everything you need",
2525      "headline": "What's Included",
2526      "items": [
2527        {
2528          "id": "i1",
2529          "text": "Guided visit inside Westminster Abbey"
2530        },
2531        {
2532          "id": "i2",
2533          "text": "Westminster Abbey admission"
2534        },
2535        {
2536          "id": "i3",
2537          "text": "Authorised Blue Badge Tourist Guide"
2538        },
2539        {
2540          "id": "i4",
2541          "text": "Westminster and Royal London walking experience"
2542        },
2543        {
2544          "id": "i5",
2545          "text": "Guard Change Parade — important phases only, when taking place (selected Mon, Wed, Fri departures)"
2546        },
2547        {
2548          "id": "i6",
2549          "text": "Fascinating anecdotes, stories and historical insights"
2550        },
2551        {
2552          "id": "i7",
2553          "text": "Small guided group — maximum 20 guests"
2554        },
2555        {
2556          "id": "i8",
2557          "text": "Fast Entry via the Guide Entrance where available"
2558        }
2559      ],
2560      "guardChangeNote": "King's Guard parade: The parade element is included only on Monday, Wednesday and Friday departures when the parade is taking place. It is subject to the ceremonial schedule and weather conditions and may be changed or cancelled at short notice. This is not a full Changing the Guard tour.",
2561      "pleaseNote": "Please note: Big Ben / Elizabeth Tower and Buckingham Palace are viewed from the exterior only. Food, refreshments and personal purchases are not included."
2562    },
2563    "history": {
2564      "eyebrow": "The story",
2565      "headline": "A thousand years of history",
2566      "body1": "Westminster Abbey is filled with extraordinary stories — and the best way to discover them is with a guide who knows how to tell them. For centuries, this extraordinary building has stood at the heart of Britain's royal and national story. Monarchs have been crowned here. Royal weddings have taken place here. Great figures from British history — kings, queens, scientists, poets and statesmen — are buried or commemorated within its walls.",
2567      "body2": "Your Blue Badge Guide brings the people, personalities and events behind the Abbey to life through fascinating anecdotes, fun stories and lesser-known details that you simply won't find in a guidebook.",
2568      "quote": "Where kings were crowned, history was written, and the footsteps of centuries still echo."
2569    },
2570    "credentials": {
2571      "unescoLabel": "UNESCO",
2572      "unescoHeadline": "World Heritage Site",
2573      "unescoBody": `"Palace of Westminster and Westminster Abbey including Saint Margaret's Church" — inscribed on the UNESCO World Heritage List.`,
2574      "royalLabel": "Status",
2575      "royalHeadline": "Royal Peculiar",
2576      "royalBody": "Westminster Abbey is a Royal Peculiar — a church under the direct jurisdiction of the Sovereign, not a diocese."
2577    },
2578    "route": {
2579      "eyebrow": "The route",
2580      "headline": "Westminster & Royal London",
2581      "intro": "Beyond the Abbey, your guide leads you through the historic heart of Westminster and Royal London.",
2582      "bigBenLabel": "Big Ben",
2583      "bigBenSub": "Elizabeth Tower • Exterior",
2584      "buckinghamLabel": "Buckingham Palace",
2585      "buckinghamSub": "Royal Residence • Exterior",
2586      "royalLondonLabel": "Royal London",
2587      "royalLondonBody": "Parliament Square, St James's Park, and the stories of the monarchy, politics and power that shaped a nation."
2588    },
2589    "guardChange": {
2590      "eyebrow": "Selected departures",
2591      "headline": "Guard Change Parade",
2592      "cardLabel": "Guard Change Parade",
2593      "cardSub": "See the parade as it marches through Royal London",
2594      "body": "On selected Monday, Wednesday and Friday departures, when the parade is taking place, we'll see important phases of the Guard Change as military bands, soldiers and the Household Cavalry make their way through Royal London.",
2595      "disclaimer": "Please note: the regiment taking part varies. There is no guarantee that the regiment on the day will be wearing the famous bearskin caps. The parade is also subject to the ceremonial schedule and weather conditions and may be changed or cancelled."
2596    },
2597    "guide": {
2598      "eyebrow": "Your guide",
2599      "headline": "Your London Blue Badge Tourist Guide",
2600      "body": "Explore Westminster with a professional London Blue Badge Tourist Guide who brings the history, people and stories behind the landmarks to life.",
2601      "credential": "London Blue Badge Tourist Guide",
2602      "languages": "English • Spanish • Portuguese"
2603    },
2604    "bookingOptions": {
2605      "eyebrow": "Choose how to book",
2606      "headline": "Booking Options",
2607      "infantNote": "Infants (0–5): free of charge. All guests count towards the 20-person capacity.",
2608      "option1": {
2609        "badge": "SAVE 15%",
2610        "eyebrow": "Best Price",
2611        "name": "Secure Your Place",
2612        "features": [
2613          {
2614            "id": "f1",
2615            "text": "Pay in full at booking"
2616          },
2617          {
2618            "id": "f2",
2619            "text": "Westminster Abbey admission included"
2620          },
2621          {
2622            "id": "f3",
2623            "text": "Non-refundable"
2624          }
2625        ],
2626        "cta": "Secure Your Place"
2627      },
2628      "option2": {
2629        "eyebrow": "Most Popular",
2630        "name": "Flexible Booking",
2631        "features": [
2632          {
2633            "id": "f1",
2634            "text": "Pay in full at booking"
2635          },
2636          {
2637            "id": "f2",
2638            "text": "Westminster Abbey admission included"
2639          },
2640          {
2641            "id": "f3",
2642            "text": "Free cancellation up to 24 hours before departure"
2643          }
2644        ],
2645        "cta": "Flexible Booking"
2646      },
2647      "option3": {
2648        "eyebrow": "Reserve Now",
2649        "name": "Reserve Now & Pay Later",
2650        "features": [
2651          {
2652            "id": "f1",
2653            "text": "Reserve your place now"
2654          },
2655          {
2656            "id": "f2",
2657            "text": "Westminster Abbey admission included"
2658          },
2659          {
2660            "id": "f3",
2661            "text": "Payment taken 48 hours before departure"
2662          },
2663          {
2664            "id": "f4",
2665            "text": "Cancel before payment deadline"
2666          }
2667        ],
2668        "cta": "Reserve Now & Pay Later"
2669      }
2670    },
2671    "availability": {
2672      "eyebrow": "Upcoming departures",
2673      "headline": "Check Availability",
2674      "scarcityNote": "Limited to 20 guests per departure. Popular departures can sell out quickly — secure your preferred date/time early.",
2675      "noDepartures": "No upcoming departures are currently listed.",
2676      "noDeparturesContact": "New departures are added regularly.",
2677      "seeAll": "See all departures"
2678    },
2679    "goodToKnow": {
2680      "eyebrow": "Practical information",
2681      "headline": "Good to Know",
2682      "items": [
2683        {
2684          "id": "g1",
2685          "text": "Restrooms available."
2686        },
2687        {
2688          "id": "g2",
2689          "text": "Souvenir shop opportunity at Westminster Abbey."
2690        },
2691        {
2692          "id": "g3",
2693          "text": "Photo opportunities subject to Abbey photography rules."
2694        },
2695        {
2696          "id": "g4",
2697          "text": "Refreshments are available just outside Westminster Abbey but are not included."
2698        },
2699        {
2700          "id": "g5",
2701          "text": "Seating inside Westminster Abbey is limited during the tour."
2702        },
2703        {
2704          "id": "g6",
2705          "text": "Children welcome."
2706        },
2707        {
2708          "id": "g7",
2709          "text": "Comfortable footwear recommended."
2710        },
2711        {
2712          "id": "g8",
2713          "text": "Weather may affect the outdoor portion."
2714        },
2715        {
2716          "id": "g9",
2717          "text": "Dress appropriately for the weather."
2718        }
2719      ],
2720      "accessibilityLabel": "Accessibility:",
2721      "accessibilityBody": "Due to the historic nature and age of Westminster Abbey and the walking involved, this tour is not fully accessible. Please contact us before booking if you have specific accessibility requirements so we can advise whether the experience is suitable."
2722    },
2723    "meetingPoint": {
2724      "eyebrow": "Where to meet",
2725      "headline": "Meeting Point",
2726      "name": "Statue of Winston Churchill",
2727      "address": "Parliament Square, Westminster",
2728      "w3wLabel": "what3words:",
2729      "w3wCode": "///vouch.neck.closer",
2730      "w3wUrl": "https://what3words.com/vouch.neck.closer",
2731      "w3wCta": "Open in what3words",
2732      "toiletsHeadline": "Nearby facilities",
2733      "toiletsBody": "Paid public toilets are available nearby at Westminster Station.",
2734      "toiletsCost": "Cost: £1",
2735      "toiletsW3w": "///cult.cans.sock",
2736      "toiletsW3wUrl": "https://what3words.com/cult.cans.sock"
2737    },
2738    "gettingThere": {
2739      "eyebrow": "Transport",
2740      "headline": "Getting There & Getting Back",
2741      "startHeadline": "Getting There — Westminster Station",
2742      "startBody": "The tour starts at the Winston Churchill Statue, Parliament Square, a short walk from Westminster Underground Station.",
2743      "startLines": "District line • Circle line • Jubilee line",
2744      "startBuses": "Westminster is also served by numerous London bus routes. For current route information, use the TfL Journey Planner at tfl.gov.uk.",
2745      "endHeadline": "Getting Back — Piccadilly Circus",
2746      "endBody": "The tour finishes at Piccadilly Circus, providing easy onward access to the West End and the Underground network.",
2747      "endLines": "Piccadilly line • Bakerloo line",
2748      "endBuses": "Piccadilly Circus is also served by numerous London bus routes. Use the TfL Journey Planner at tfl.gov.uk for current route information."
2749    },
2750    "lateArrival": {
2751      "headline": "⏰ Please arrive on time",
2752      "body": "A polite reminder: Please arrive at the meeting point in good time before your scheduled departure. Westminster Abbey visits operate to strict timed arrangements and our guides work to a scheduled itinerary. Late arrival may mean that you are unable to join the group through the guide entrance at the scheduled time. Unfortunately, we cannot guarantee that late arrivals will be able to receive the same timed entry or join the tour after departure."
2753    },
2754    "endPoint": {
2755      "eyebrow": "Tour end point",
2756      "headline": "Finish at Piccadilly Circus",
2757      "body": "Your tour finishes at Piccadilly Circus, right in the heart of London and one of the capital's main transport and sightseeing hubs. From here, you're within easy walking distance of some of London's major attractions, including the National Gallery, National Portrait Gallery, Royal Academy of Arts and the British Museum, with excellent public transport connections across London.",
2758      "returnNote": "Want to return to Westminster? Parliament Square is approximately a 20-minute walk from Piccadilly Circus.",
2759      "w3wCode": "///spare.funded.forgot",
2760      "w3wUrl": "https://what3words.com/spare.funded.forgot",
2761      "w3wCta": "Open in what3words"
2762    },
2763    "whatsapp": {
2764      "headline": "WhatsApp",
2765      "body1": "We may use WhatsApp to contact you about your booking, including meeting-point information, important updates or time-sensitive issues. Please provide a valid mobile number and ensure that you can receive WhatsApp messages while in London.",
2766      "body2": "WhatsApp communication does not replace your responsibility to check your booking confirmation and arr
2766ive at the meeting point on time."
2767    },
2768    "abbeyClosure": {
2769      "headline": "Important: Occasional Abbey Closures",
2770      "body1": "Westminster Abbey is occasionally required to close at short notice for services, ceremonies or other official events. While uncommon, such closures can sometimes occur with little advance notice.",
2771      "body2": "If Westminster Abbey is unexpectedly closed on the day of your tour, the tour will still go ahead as a guided walking experience through Westminster and Royal London. The Westminster Abbey admission portion will not be provided, and the applicable Abbey admission fee will be refunded to affected customers."
2772    },
2773    "bookingConditions": {
2774      "headline": "Booking Conditions",
2775      "secureLabel": "Secure Your Place",
2776      "secureBody": "Non-refundable. No cancellation refund.",
2777      "flexibleLabel": "Flexible Booking",
2778      "flexibleBody": "Free cancellation up to 24 hours before departure. No refund inside 24 hours.",
2779      "reserveLabel": "Reserve Now & Pay Later",
2780      "reserveBody": "Cancel before the payment deadline to release the hold. No refund after capture.",
2781      "noShowNote": "No-shows are non-refundable. The tour will not be held for late arrivals. All deadlines use London local time."
2782    },
2783    "finalCta": {
2784      "eyebrow": "Ready to visit?",
2785      "headline": "Book The Nº1 Westminster Abbey Tour",
2786      "body": "Limited to 20 guests per departure. Secure your place today.",
2787      "cta": "Book Now"
2788    },
2789    "comingSoon": {
2790      "headline": "Coming Soon — More Languages",
2791      "body": "We're preparing The Nº1 Westminster Abbey Tour in more languages. Portuguese • Spanish • French • Italian • Russian • Chinese • Japanese • Korean. New-language departures will be introduced progressively, with selected departures promoted each week."
2792    }
2793  }),
2794  "westminster_book": (((_h = schemas.pages) == null ? void 0 : _h.westminster_book) ?? schemas.westminster_book ?? identity).parse({
2795    "title": "Book Your Westminster Abbey Tour",
2796    "subtitle": "Private guided tour with a Blue Badge Tourist Guide",
2797    "backToTour": "← Back to tour",
2798    "stepLabels": [
2799      {
2800        "id": "step-1",
2801        "label": "Choose your date"
2802      },
2803      {
2804        "id": "step-2",
2805        "label": "Select your option"
2806      },
2807      {
2808        "id": "step-3",
2809        "label": "Your details"
2810      },
2811      {
2812        "id": "step-4",
2813        "label": "Payment"
2814      }
2815    ],
2816    "holdBanner": "Your places are held for 15 minutes.",
2817    "securePaymentNote": "Payments are processed securely by Stripe. Your card details are never stored.",
2818    "whatsappNote": "Prefer to book by WhatsApp? Message us and we'll confirm your booking personally.",
2819    "agencyNote": "Trade and agency bookings welcome. Please contact us for group rates.",
2820    "admissionNote": "Westminster Abbey admission is included in your tour price."
2821  }),
2822  "westminster_confirmation": (((_i = schemas.pages) == null ? void 0 : _i.westminster_confirmation) ?? schemas.westminster_confirmation ?? identity).parse({
2823    "confirmedBadge": "YOUR TOUR IS CONFIRMED",
2824    "tourName": "The Nº1 Westminster Abbey Tour",
2825    "tourSubtitle": "Westminster Abbey • Big Ben • Buckingham Palace",
2826    "bookingRefLabel": "Booking reference",
2827    "meetingPointSection": "Meeting Point",
2828    "meetingPointName": "Statue of Winston Churchill",
2829    "meetingPointAddress": "Parliament Square, Westminster",
2830    "meetingPointW3w": "///vouch.neck.closer",
2831    "meetingPointW3wUrl": "https://what3words.com/vouch.neck.closer",
2832    "meetingPointCta": "Open in what3words",
2833    "lateArrivalHeadline": "Please arrive early",
2834    "lateArrivalBody": "Westminster Abbey visits operate to strict timed arrangements. Late arrival may mean you are unable to join the group through the guide entrance at the scheduled time.",
2835    "endPointSection": "Tour End Point",
2836    "endPointName": "Piccadilly Circus",
2837    "endPointW3w": "///spare.funded.forgot",
2838    "endPointW3wUrl": "https://what3words.com/spare.funded.forgot",
2839    "endPointCta": "Open in what3words",
2840    "whatsappHeadline": "WhatsApp",
2841    "whatsappBody1": "We may use WhatsApp to contact you about your booking, including meeting-point information, important updates or time-sensitive issues.",
2842    "whatsappBody2": "WhatsApp communication does not replace your responsibility to check your booking confirmation and arr
2842ive at the meeting point on time.",
2843    "whatToBringHeadline": "What to Bring",
2844    "whatToBringItems": [
2845      {
2846        "id": "w1",
2847        "text": "This booking confirmation"
2848      },
2849      {
2850        "id": "w2",
2851        "text": "A charged mobile phone"
2852      },
2853      {
2854        "id": "w3",
2855        "text": "Comfortable footwear"
2856      },
2857      {
2858        "id": "w4",
2859        "text": "Weather-appropriate clothing"
2860      }
2861    ],
2862    "contactPrompt": "Questions about your booking?",
2863    "contactEmail": "[email protected]"
2864  })
2865};
2866const about = pages.about;
2867const admin_dashboard = pages.admin_dashboard;
2868const admin_westminster = pages.admin_westminster;
2869const contact = pages.contact;
2870const home = pages.home;
2871const tours = pages.tours;
2872const westminster = pages.westminster;
2873const westminster_book = pages.westminster_book;
2874const westminster_confirmation = pages.westminster_confirmation;
2875const fadeUp = {
2876  hidden: {
2877    opacity: 0,
2878    y: 24
2879  },
2880  visible: {
2881    opacity: 1,
2882    y: 0,
2883    transition: {
2884      duration: 0.4,
2885      ease: "easeOut"
2886    }
2887  }
2888};
2889const stagger = {
2890  hidden: {},
2891  visible: {
2892    transition: {
2893      staggerChildren: 0.1
2894    }
2895  }
2896};
2897function HomePage() {
2898  const {
2899    t
2900  } = useTranslation();
2901  const localizedPath = useLocalizedPath();
2902  const {
2903    lang = "en"
2904  } = useParams();
2905  const videoRef = reactExports.useRef(null);
2906  reactExports.useEffect(() => {
2907    const el = videoRef.current;
2908    if (!el) return;
2909    const inject = () => {
2910      const src = "/videos/hero-background-faststart.mp4?v=20261006";
2911      if (el.querySelector("source")) return;
2912      const source = document.createElement("source");
2913      source.src = src;
2914      source.type = "video/mp4";
2915      el.appendChild(source);
2916      el.load();
2917      el.play().catch(() => {
2918      });
2919    };
2920    if ("requestIdleCallback" in window) {
2921      const id = requestIdleCallback(inject, {
2922        timeout: 800
2923      });
2924      return () => cancelIdleCallback(id);
2925    } else {
2926      const id = setTimeout(inject, 800);
2927      return () => clearTimeout(id);
2928    }
2929  }, []);
2930  const [westminsterSecureAdultPence, setWestminsterSecureAdultPence] = reactExports.useState(6715);
2931  reactExports.useEffect(() => {
2932    fetch("/api/westminster/pricing").then((r) => r.ok ? r.json() : null).then((data) => {
2933      var _a2;
2934      if ((_a2 = data == null ? void 0 : data.secure) == null ? void 0 : _a2.adultPence) {
2935        setWestminsterSecureAdultPence(data.secure.adultPence);
2936      }
2937    }).catch(() => {
2938    });
2939  }, []);
2940  const steps = t("home.howItWorks.steps", {
2941    returnObjects: true
2942  });
2943  const credentials = [{
2944    icon: /* @__PURE__ */ jsxRuntimeExports.jsx(Shield, { size: 20 }),
2945    title: t("home.about.credentials.blueBadge.title"),
2946    body: t("home.about.credentials.blueBadge.body")
2947  }, {
2948    icon: /* @__PURE__ */ jsxRuntimeExports.jsx(Car, { size: 20 }),
2949    title: t("home.about.credentials.iam.title"),
2950    body: t("home.about.credentials.iam.body")
2951  }, {
2952    icon: /* @__PURE__ */ jsxRuntimeExports.jsx(Globe, { size: 20 }),
2953    title: t("home.about.credentials.languages.title"),
2954    body: t("home.about.credentials.languages.body")
2955  }];
2956  const title = "London City Tours — Private Guided Tours of London & Beyond";
2957  const description = SITE_DESCRIPTION;
2958  const canonical = pageUrl(lang, "/");
2959  const alternates = hreflangLinks("/");
2960  const ogImage = staticOgImage("pages/home/hero");
2961  const orgLd = organizationJsonLd();
2962  const siteLd = websiteJsonLd();
2963  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
2964    /* @__PURE__ */ jsxRuntimeExports.jsxs(Helmet, { children: [
2965      /* @__PURE__ */ jsxRuntimeExports.jsx("title", { children: title }),
2966      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "description", content: description }),
2967      /* @__PURE__ */ jsxRuntimeExports.jsx("link", { rel: "canonical", href: canonical }),
2968      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:title", content: title }),
2969      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:description", content: description }),
2970      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:url", content: canonical }),
2971      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:type", content: "website" }),
2972      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:image", content: ogImage }),
2973      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:card", content: "summary_large_image" }),
2974      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:image", content: ogImage }),
2975      alternates.map(({
2976        hreflang,
2977        href
2978      }) => /* @__PURE__ */ jsxRuntimeExports.jsx("link", { rel: "alternate", hrefLang: hreflang, href }, hreflang)),
2979      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify(orgLd).replace(/</g, "\\u003c") }),
2980      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify(siteLd).replace(/</g, "\\u003c") })
2981    ] }),
2982    /* @__PURE__ */ jsxRuntimeExports.jsxs("section", { className: "relative flex items-center overflow-hidden", style: {
2983      minHeight: "100svh"
2984    }, children: [
2985      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute inset-0", children: [
2986        /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: "/airo-assets/images/pages/home/hero", alt: "", "aria-hidden": "true", width: 1920, height: 1080, className: "absolute inset-0 w-full h-full object-cover", fetchPriority: "high" }),
2987        /* @__PURE__ */ jsxRuntimeExports.jsx("video", { ref: videoRef, autoPlay: true, muted: true, loop: true, playsInline: true, preload: "none", className: "absolute inset-0 w-full h-full object-cover opacity-0 transition-opacity duration-[1200ms] ease-in-out", style: {
2988          willChange: "opacity"
2989        }, onPlaying: (e) => {
2990          e.currentTarget.style.opacity = "1";
2991        } }),
2992        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-gradient-to-b from-black/50 via-black/35 to-black/60" })
2993      ] }),
2994      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative z-10 max-w-7xl mx-auto px-6 pt-36 md:pt-52 pb-24 w-full", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { variants: stagger, initial: "hidden", animate: "visible", className: "max-w-3xl", children: [
2995        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { variants: fadeUp, className: "mb-10", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "font-semibold tracking-[0.18em] uppercase leading-snug", style: {
2996          color: "hsl(var(--gold-text-light))",
2997          fontSize: "clamp(0.55rem, 1.6vw, 0.7rem)"
2998        }, children: t("home.badge") }) }),
2999        /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.h1, { variants: fadeUp, className: "font-heading font-bold uppercase leading-[1.0] mb-1", style: {
3000          color: "hsl(var(--gold-check))",
3001          fontSize: "clamp(1rem, 7.5vw, 4.5rem)",
3002          letterSpacing: "-0.02em"
3003        }, children: [
3004          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "LONDON" }),
3005          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { style: {
3006            color: "hsl(var(--primary-foreground))"
3007          }, children: "CITY" }),
3008          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "TOURS.COM" })
3009        ] }),
3010        /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.p, { variants: fadeUp, className: "font-heading text-white leading-[1.05] mb-4", style: {
3011          fontSize: "clamp(1.5rem, 6.5vw, 3.2rem)",
3012          fontWeight: 600,
3013          wordSpacing: "0.06em"
3014        }, children: [
3015          t("home.heroTitle"),
3016          " ",
3017          t("home.heroTitleHighlight")
3018        ] }),
3019        /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.p, { variants: fadeUp, className: "text-sm md:text-2xl font-light text-white leading-snug tracking-wide mb-8 max-w-2xl", style: {
3020          textShadow: "0 1px 4px rgba(0,0,0,0.5)"
3021        }, children: [
3022          /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "md:hidden", children: [
3023            t("home.heroSubtitle").replace(/, /, ", ").split(", ")[0],
3024            ",",
3025            /* @__PURE__ */ jsxRuntimeExports.jsx("br", {}),
3026            t("home.heroSubtitle").replace(/, /, ", ").split(", ")[1]
3027          ] }),
3028          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "hidden md:inline", children: t("home.heroSubtitle") })
3029        ] }),
3030        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { variants: fadeUp, className: "mb-8", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-col gap-2.5", children: [{
3031          label: t("home.heroTypes.walking"),
3032          href: localizedPath("/private-walking-tours")
3033        }, {
3034          label: t("home.heroTypes.driver"),
3035          href: localizedPath("/driver-guided-tours")
3036        }, {
3037          label: t("home.heroTypes.chauffeur"),
3038          href: localizedPath("/chauffeur-driven-tours")
3039        }].map(({
3040          label,
3041          href
3042        }) => /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: href, className: "group flex items-center gap-2.5 w-fit", children: [
3043          /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { size: 15, strokeWidth: 1.75, className: "shrink-0 transition-colors duration-200", style: {
3044            color: "hsl(43 74% 58%)"
3045          }, "aria-hidden": "true" }),
3046          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-medium text-white/90 leading-snug tracking-wide group-hover:text-white group-hover:underline underline-offset-2 decoration-white/40 transition-all duration-200", children: label })
3047        ] }, label)) }) }),
3048        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { variants: fadeUp, className: "mb-8", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-full md:max-w-2xl", children: /* @__PURE__ */ jsxRuntimeExports.jsx(HeroDestinations, {}) }) }),
3049        /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { variants: fadeUp, className: "flex flex-col sm:flex-row flex-wrap gap-4 mb-8 md:max-w-2xl", children: [
3050          /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: localizedPath("/popular-tours"), className: "w-full sm:flex-1 px-8 py-4 text-sm font-semibold tracking-wide uppercase rounded-sm transition-all duration-200 hover:opacity-90 text-center", style: {
3051            background: "hsl(43 74% 49%)",
3052            color: "#fff"
3053          }, children: t("home.destinations.mostPopularTours") }),
3054          /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: localizedPath("/destinations"), className: "w-full sm:flex-1 px-8 py-4 text-sm font-semibold tracking-wide uppercase rounded-sm transition-all duration-200 hover:opacity-90 text-center", style: {
3055            background: "hsl(43 74% 49%)",
3056            color: "#fff"
3057          }, children: t("home.browseAllTours") })
3058        ] }),
3059        /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { variants: fadeUp, className: "flex flex-col md:flex-row md:flex-nowrap md:items-center gap-3 md:gap-5 text-sm text-white/60", children: [
3060          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
3061            /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex gap-0.5", children: Array.from({
3062              length: 5
3063            }).map((_, i) => /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { viewBox: "0 0 12 12", className: "w-3 h-3", fill: "hsl(43 74% 49%)", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M6 0l1.545 3.09L11 3.635l-2.5 2.455.59 3.455L6 7.91l-3.09 1.635L3.5 6.09 1 3.635l3.455-.545z" }) }, i)) }),
3064            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: t("home.trust.tripadvisor") })
3065          ] }),
3066          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1.5", children: [
3067            /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { size: 14, style: {
3068              color: "hsl(var(--gold-check))"
3069            } }),
3070            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: t("home.trust.liveAvailability") })
3071          ] }),
3072          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1.5", children: [
3073            /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { size: 14, style: {
3074              color: "hsl(var(--gold-check))"
3075            } }),
3076            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: t("home.trust.instantConfirmation") })
3077          ] }),
3078          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1.5", children: [
3079            /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { size: 14, style: {
3080              color: "hsl(var(--gold-check))"
3081            } }),
3082            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: t("home.trust.privateTours") })
3083          ] }),
3084          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1.5", children: [
3085            /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { size: 14, style: {
3086              color: "hsl(var(--gold-check))"
3087            } }),
3088            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: t("home.trust.publicTours") })
3089          ] }),
3090          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1.5", children: [
3091            /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { size: 14, style: {
3092              color: "hsl(var(--gold-check))"
3093            } }),
3094            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: t("home.trust.blueBadge") })
3095          ] })
3096        ] })
3097      ] }) })
3098    ] }),
3099    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 md:py-28 bg-background border-b border-border", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "max-w-7xl mx-auto px-6", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-12 lg:gap-20 items-center", children: [
3100      /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
3101        opacity: 0,
3102        x: -24
3103      }, whileInView: {
3104        opacity: 1,
3105        x: 0
3106      }, viewport: {
3107        once: true
3108      }, transition: {
3109        duration: 0.5
3110      }, className: "hidden lg:block lg:order-1 relative", children: [
3111        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-sm overflow-hidden aspect-[4/3] bg-muted", children: /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: "/airo-assets/images/pages/westminster/west-entrance", alt: "Westminster Abbey gothic west entrance, London", width: 720, height: 540, loading: "lazy", className: "w-full h-full object-cover" }) }),
3112        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute -bottom-4 -right-4 md:-bottom-5 md:-right-5 px-5 py-4 rounded-sm shadow-xl", style: {
3113          background: "hsl(var(--primary))"
3114        }, children: [
3115          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-[10px] font-semibold tracking-[0.2em] uppercase mb-0.5", style: {
3116            color: "hsl(var(--gold-text-light))"
3117          }, children: "From" }),
3118          /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "type-price-sm text-primary-foreground", children: [
3119            "£",
3120            (westminsterSecureAdultPence / 100).toFixed(2)
3121          ] }),
3122          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-[10px] mt-0.5", style: {
3123            color: "hsl(var(--gold-text-light) / 0.8)"
3124          }, children: "per adult" })
3125        ] })
3126      ] }),
3127      /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { variants: stagger, initial: "hidden", whileInView: "visible", viewport: {
3128        once: true
3129      }, className: "lg:order-2 flex flex-col", children: [
3130        /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { variants: fadeUp, className: "flex flex-wrap items-center gap-2 mb-5 self-start", children: [
3131          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "inline-block px-3 py-1.5 border border-primary text-[10px] font-semibold tracking-[0.15em] uppercase text-primary", style: {
3132            background: "hsl(var(--primary) / 0.07)"
3133          }, children: "Public Tour" }),
3134          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "inline-block px-3 py-1.5 border border-primary text-[10px] font-semibold tracking-[0.15em] uppercase text-primary", style: {
3135            background: "hsl(var(--primary) / 0.07)"
3136          }, children: "Walking Tour" }),
3137          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "inline-block px-3 py-1.5 border border-primary text-[10px] font-semibold tracking-[0.15em] uppercase text-primary", style: {
3138            background: "hsl(var(--primary) / 0.07)"
3139          }, children: "Most Popular" })
3140        ] }),
3141        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { variants: fadeUp, className: "lg:hidden mb-5 rounded-sm overflow-hidden aspect-[4/3] bg-muted", children: /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: "/airo-assets/images/pages/westminster/west-entrance", alt: "Westminster Abbey gothic west entrance, London", width: 720, height: 540, loading: "lazy", className: "w-full h-full object-cover" }) }),
3142        /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { variants: fadeUp, className: "lg:hidden mb-5 inline-flex items-baseline gap-1.5", children: [
3143          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-semibold text-muted-foreground uppercase tracking-wide", children: "From" }),
3144          /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "type-price-sm text-primary", children: [
3145            "£",
3146            (westminsterSecureAdultPence / 100).toFixed(2)
3147          ] }),
3148          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-sm text-muted-foreground", children: "per adult" })
3149        ] }),
3150        /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.h2, { variants: fadeUp, className: "font-sans text-foreground leading-tight mb-2", children: [
3151          /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "block", children: [
3152            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-2xl md:text-3xl lg:text-4xl font-normal tracking-normal", children: "The " }),
3153            /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-3xl md:text-4xl lg:text-5xl font-normal tracking-normal", children: [
3154              "N",
3155              /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[0.55em] align-top", children: "º" }),
3156              /* @__PURE__ */ jsxRuntimeExports.jsx("span", { style: {
3157                fontFamily: '"Open Sans", sans-serif',
3158                fontWeight: 400
3159              }, children: "1" })
3160            ] })
3161          ] }),
3162          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block text-2xl md:text-3xl lg:text-4xl font-semibold tracking-normal", children: "Westminster Abbey Tour" })
3163        ] }),
3164        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.p, { variants: fadeUp, className: "text-muted-foreground text-sm mb-5", children: "Westminster Abbey • Big Ben • Buckingham Palace" }),
3165        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.p, { variants: fadeUp, className: "text-muted-foreground leading-relaxed mb-6 text-base md:text-lg", children: "Discover Westminster Abbey from the inside, then experience the historic heart of Westminster and Royal London with a London Blue Badge Tourist Guide." }),
3166        /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { variants: fadeUp, className: "flex flex-wrap items-center gap-x-4 gap-y-1.5 mb-8 text-xs text-muted-foreground", children: [
3167          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Up to 4 hrs" }),
3168          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { "aria-hidden": "true", className: "text-border", children: "·" }),
3169          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "All ages" }),
3170          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { "aria-hidden": "true", className: "text-border", children: "·" }),
3171          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Difficulty 3/5" })
3172        ] }),
3173        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.ul, { variants: stagger, className: "mb-10 space-y-3", children: ["Westminster Abbey admission included", "Authorised Blue Badge Tourist Guide", "Small-group experience — max 20 guests", "Choose your booking option"].map((item) => /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.li, { variants: fadeUp, className: "flex items-center gap-3", children: [
3174          /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { size: 16, strokeWidth: 2, className: "shrink-0 text-primary", "aria-hidden": "true" }),
3175          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-sm font-medium text-foreground", children: item })
3176        ] }, item)) }),
3177        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { variants: fadeUp, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: localizedPath("/westminster-abbey"), className: "inline-flex items-center gap-2 px-6 py-3.5 text-sm font-semibold rounded-sm transition-all duration-200 hover:opacity-90 bg-primary text-primary-foreground whitespace-nowrap", children: [
3178          "Book the Nº1 Westminster Abbey Tour ",
3179          /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { size: 15 })
3180        ] }) })
3181      ] })
3182    ] }) }) }),
3183    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 md:py-28", style: {
3184      background: "hsl(var(--warm-section-bg))"
3185    }, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-6", children: [
3186      /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { variants: stagger, initial: "hidden", whileInView: "visible", viewport: {
3187        once: true
3188      }, className: "max-w-3xl mb-14", children: [
3189        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.p, { variants: fadeUp, className: "type-label-caps text-muted-foreground mb-3", children: "Why Book With Us" }),
3190        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.h2, { variants: fadeUp, className: "font-heading text-4xl md:text-5xl font-bold text-foreground leading-tight mb-5", children: "Your guide. Your experience. Direct." }),
3191        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.p, { variants: fadeUp, className: "text-muted-foreground leading-relaxed mb-3", children: "London City Tours is an independent London tour business created by a professionally qualified Blue Badge Tourist Guide." }),
3192        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.p, { variants: fadeUp, className: "text-muted-foreground leading-relaxed", children: "We're not a multinational tour operator or an anonymous booking marketplace. When you book directly with us, you're booking with the people who actually deliver your experience." })
3193      ] }),
3194      /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { variants: stagger, initial: "hidden", whileInView: "visible", viewport: {
3195        once: true
3196      }, className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6 mb-14", children: [
3197        [{
3198          number: "01",
3199          title: "Professional London Guides",
3200          body: "Your tour is delivered by qualified professional tourist guides with specialist knowledge of London and its history."
3201        }, {
3202          number: "02",
3203          title: "Book Direct",
3204          body: "Deal directly with the people providing your tour — not through layers of intermediaries."
3205        }, {
3206          number: "03",
3207          title: "Better Value",
3208          body: "When you book directly with us, you avoid the high commissions charged by third-party booking platforms. That means more of your booking can go towards your experience and the people delivering it."
3209        }, {
3210          number: "04",
3211          title: "Independent & Local",
3212          body: "We're an independent London business, not a global marketplace. Your booking supports a local guide-led business."
3213        }, {
3214          number: "05",
3215          title: "A Personal Service",
3216          body: "Have a question before you book? Need help with your tour? You're dealing with real people who know London and know the tours we provide."
3217        }].map((benefit) => /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { variants: fadeUp, className: "p-6 rounded-sm border border-border bg-card", children: [
3218          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "font-heading text-3xl font-bold mb-4 text-primary", style: {
3219            opacity: 0.35
3220          }, children: benefit.number }),
3221          /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "font-heading text-lg font-semibold text-foreground mb-3", children: benefit.title }),
3222          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground leading-relaxed", children: benefit.body })
3223        ] }, benefit.number)),
3224        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { variants: fadeUp, className: "p-6 rounded-sm border border-primary bg-card flex flex-col justify-between", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
3225          /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: "/airo-assets/images/credentials/blue-badge-badge", alt: "Institute of Tourist Guiding — London Blue Badge Tourist Guide badge", width: 100, height: 120, loading: "lazy", className: "h-20 w-auto object-contain object-left mb-4" }),
3226          /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "font-heading text-lg font-semibold text-foreground mb-2", children: "London Blue Badge Tourist Guide" }),
3227          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground leading-relaxed", children: "London City Tours was created by a professionally qualified Blue Badge Tourist Guide — the highest standard of tourist guiding qualification in the United Kingdom." })
3228        ] }) })
3229      ] }),
3230      /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { variants: stagger, initial: "hidden", whileInView: "visible", viewport: {
3231        once: true
3232      }, className: "text-center", children: [
3233        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.p, { variants: fadeUp, className: "font-heading text-2xl md:text-3xl font-bold text-foreground mb-8", children: "Don't just book a tour. Book your guide." }),
3234        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { variants: fadeUp, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: localizedPath("/destinations"), className: "inline-flex items-center gap-2 px-8 py-4 text-sm font-semibold tracking-wide uppercase rounded-sm transition-all duration-200 hover:opacity-90 bg-primary text-primary-foreground", children: [
3235          "Explore Our Tours ",
3236          /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { size: 16 })
3237        ] }) })
3238      ] })
3239    ] }) }),
3240    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-24 bg-background", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto px-6", children: [
3241      /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { variants: stagger, initial: "hidden", whileInView: "visible", viewport: {
3242        once: true
3243      }, className: "mb-14", children: [
3244        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.p, { variants: fadeUp, className: "type-label-caps text-muted-foreground mb-3", children: t("home.destinations.sectionLabel") }),
3245        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { variants: fadeUp, className: "flex items-end justify-between flex-wrap gap-4", children: /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "type-h2 text-foreground", children: t("home.destinations.title") }) })
3246      ] }),
3247      /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { variants: stagger, initial: "hidden", whileInView: "visible", viewport: {
3248        once: true
3249      }, className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-
32495", children: destinations.map((dest) => /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { variants: fadeUp, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: localizedPath(`/destinations/${dest.slug}`), className: "group block relative overflow-hidden rounded-sm border border-border h-56 hover:shadow-lg transition-shadow duration-300", children: [
3250        /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: dest.heroImage, alt: t(dest.nameKey), width: 400, height: 224, loading: "lazy", className: "absolute inset-0 w-full h-full object-cover transition-transform duration-500 group-hover:scale-105" }),
3251        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/75 via-black/30 to-transparent" }),
3252        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute bottom-0 left-0 right-0 p-5", children: [
3253          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "font-heading text-2xl md:text-3xl font-bold text-white leading-tight mb-1", children: t(dest.nameKey) }),
3254          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-white/70 leading-snug mb-2", children: t(dest.taglineKey) }),
3255          dest.distanceKey && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1 text-xs text-white/50", children: [
3256            /* @__PURE__ */ jsxRuntimeExports.jsx(MapPin, { size: 10 }),
3257            t(dest.distanceKey)
3258          ] })
3259        ] }),
3260        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute top-3 right-3 opacity-0 group-hover:opacity-100 transition-opacity duration-200", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1 px-2.5 py-1 rounded-sm text-xs font-semibold", style: {
3261          background: "hsl(var(--primary))",
3262          color: "#fff"
3263        }, children: [
3264          t("home.destinations.viewTours"),
3265          " ",
3266          /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { size: 11 })
3267        ] }) })
3268      ] }) }, dest.id)) })
3269    ] }) }),
3270    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-24", style: {
3271      background: "hsl(38 30% 95%)"
3272    }, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "max-w-7xl mx-auto px-6", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { variants: stagger, initial: "hidden", whileInView: "visible", viewport: {
3273      once: true
3274    }, children: [
3275      /* @__PURE__ */ jsxRuntimeExports.jsx(motion.p, { variants: fadeUp, className: "type-label-caps text-muted-foreground mb-3 text-center", children: t("home.howItWorks.sectionLabel") }),
3276      /* @__PURE__ */ jsxRuntimeExports.jsx(motion.h2, { variants: fadeUp, className: "font-heading text-4xl md:text-5xl font-bold text-foreground text-center mb-16", children: t("home.howItWorks.title") }),
3277      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-10", children: steps.map((step, i) => /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { variants: fadeUp, className: "text-center", children: [
3278        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-14 h-14 rounded-full flex items-center justify-center text-white font-heading text-xl font-bold mx-auto mb-5", style: {
3279          background: "hsl(var(--primary))"
3280        }, children: String(i + 1).padStart(2, "0") }),
3281        /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "font-heading text-xl font-semibold text-foreground mb-3", children: step.title }),
3282        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground leading-relaxed", children: step.body })
3283      ] }, i)) })
3284    ] }) }) }),
3285    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-24 bg-background", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "max-w-7xl mx-auto px-6", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-16 items-center", children: [
3286      /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { variants: stagger, initial: "hidden", whileInView: "visible", viewport: {
3287        once: true
3288      }, children: [
3289        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.p, { variants: fadeUp, className: "text-xs font-semibold tracking-[0.25em] uppercase mb-3", style: {
3290          color: "hsl(43 74% 49%)"
3291        }, children: t("home.about.sectionLabel") }),
3292        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.h2, { variants: fadeUp, className: "font-heading text-4xl md:text-5xl font-bold text-foreground leading-tight mb-6", children: t("home.about.title") }),
3293        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.p, { variants: fadeUp, className: "text-muted-foreground leading-relaxed mb-6", dangerouslySetInnerHTML: {
3294          __html: t("home.about.body1")
3295        } }),
3296        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.p, { variants: fadeUp, className: "text-muted-foreground leading-relaxed mb-8", dangerouslySetInnerHTML: {
3297          __html: t("home.about.body2")
3298        } }),
3299        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { variants: stagger, className: "grid grid-cols-1 sm:grid-cols-3 gap-5 mb-8", children: credentials.map((c) => /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { variants: fadeUp, className: "p-4 rounded-sm border border-border bg-card", children: [
3300          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mb-2", style: {
3301            color: "hsl(43 74% 49%)"
3302          }, children: c.icon }),
3303          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-foreground mb-1", children: c.title }),
3304          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground leading-relaxed", children: c.body })
3305        ] }, c.title)) }),
3306        /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { variants: fadeUp, className: "mb-4 p-5 rounded-sm border border-border bg-card", children: [
3307          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-[10px] font-semibold tracking-[0.2em] uppercase text-muted-foreground mb-4", children: t("home.about.professionalMemberships") }),
3308          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center justify-between gap-4 flex-wrap", children: /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: "/airo-assets/images/pages/home/professional-memberships-institute-of-to", alt: "Professional memberships: Institute of Tourist Guiding, Blue Badge, Guide London, British Guild of Tourist Guides, IAM", width: 600, height: 80, loading: "lazy", className: "w-full h-auto object-contain object-left" }) })
3309        ] }),
3310        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { variants: fadeUp, className: "mb-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("a", { href: home.itgProfileUrl, target: "_blank", rel: "noopener noreferrer", className: "inline-flex items-center gap-1.5 text-xs font-semibold text-primary hover:underline underline-offset-2", children: [
3311          /* @__PURE__ */ jsxRuntimeExports.jsx(ExternalLink, { size: 11 }),
3312          t("home.about.itgRegisterLink")
3313        ] }) }),
3314        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { variants: fadeUp, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: localizedPath("/about"), className: "inline-flex items-center gap-2 text-sm font-semibold text-primary hover:gap-3 transition-all duration-200", children: [
3315          t("home.about.readMore"),
3316          " ",
3317          /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { size: 16 })
3318        ] }) })
3319      ] }),
3320      /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
3321        opacity: 0,
3322        x: 30
3323      }, whileInView: {
3324        opacity: 1,
3325        x: 0
3326      }, viewport: {
3327        once: true
3328      }, transition: {
3329        duration: 0.5
3330      }, className: "relative", children: [
3331        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-sm overflow-hidden aspect-[4/5] bg-muted", children: /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: "/airo-assets/images/pages/home/richard-cerquera-blue-badge-tourist-guid", alt: "Richard Cerquera — Blue Badge Tourist Guide", width: 480, height: 600, loading: "lazy", className: "w-full h-full object-cover object-top" }) }),
3332        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute -bottom-5 -left-5 p-5 rounded-sm shadow-xl", style: {
3333          background: "hsl(var(--primary))"
3334        }, children: [
3335          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-semibold tracking-widest uppercase mb-1", style: {
3336            color: "hsl(43 74% 65%)"
3337          }, children: t("home.about.blueBadge") }),
3338          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-white font-heading text-lg font-bold leading-tight", children: t("home.about.blueBadgeTitle") })
3339        ] })
3340      ] })
3341    ] }) }) }),
3342    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-24", style: {
3343      background: "hsl(var(--foreground))"
3344    }, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "max-w-7xl mx-auto px-6", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { variants: stagger, initial: "hidden", whileInView: "visible", viewport: {
3345      once: true
3346    }, children: [
3347      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col md:flex-row md:items-end md:justify-between gap-6 mb-14", children: [
3348        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
3349          /* @__PURE__ */ jsxRuntimeExports.jsx(motion.p, { variants: fadeUp, className: "text-[10px] font-semibold tracking-[0.25em] uppercase mb-3 text-white/40", children: t("home.reviews.sectionLabel") }),
3350          /* @__PURE__ */ jsxRuntimeExports.jsx(motion.h2, { variants: fadeUp, className: "font-heading text-4xl md:text-5xl font-bold text-white leading-tight", children: t("home.reviews.title") })
3351        ] }),
3352        /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.a, { variants: fadeUp, href: TRIPADVISOR_URL, target: "_blank", rel: "noopener noreferrer", className: "group inline-flex items-center gap-3 border border-white/10 rounded-sm px-5 py-3.5 hover:border-white/25 transition-all duration-200 self-start md:self-auto shrink-0", children: [
3353          /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", className: "w-5 h-5 text-[#34E0A1] shrink-0", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M12 1C5.925 1 1 5.925 1 12s4.925 11 11 11 11-4.925 11-11S18.075 1 12 1zm0 2c4.963 0 9 4.037 9 9s-4.037 9-9 9-9-4.037-9-9 4.037-9 9-9zm-3.5 5a3.5 3.5 0 100 7 3.5 3.5 0 000-7zm7 0a3.5 3.5 0 100 7 3.5 3.5 0 000-7zm-7 1.5a2 2 0 110 4 2 2 0 010-4zm7 0a2 2 0 110 4 2 2 0 010-4zm-7 .75a1.25 1.25 0 110 2.5 1.25 1.25 0 010-2.5zm7 0a1.25 1.25 0 110 2.5 1.25 1.25 0 010-2.5z" }) }),
3354          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
3355            /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-semibold text-white/80 group-hover:text-white transition-colors leading-tight", children: t("home.reviews.ratedExcellent") }),
3356            /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-[10px] text-white/35 mt-0.5 group-hover:text-white/50 transition-colors", children: [
3357              t("home.reviews.viewAll"),
3358              " ",
3359              /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { size: 10, className: "inline" })
3360            ] })
3361          ] })
3362        ] })
3363      ] }),
3364      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6", children: featuredTestimonials.map((testimonial) => /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { variants: fadeUp, children: /* @__PURE__ */ jsxRuntimeExports.jsx(TestimonialCard, { testimonial, dark: true }) }, testimonial.id)) })
3365    ] }) }) }),
3366    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-24 bg-background", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "max-w-3xl mx-auto px-6 text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { variants: stagger, initial: "hidden", whileInView: "visible", viewport: {
3367      once: true
3368    }, children: [
3369      /* @__PURE__ */ jsxRuntimeExports.jsx(motion.p, { variants: fadeUp, className: "type-label-caps text-muted-foreground mb-3", children: t("home.cta.sectionLabel") }),
3370      /* @__PURE__ */ jsxRuntimeExports.jsx(motion.h2, { variants: fadeUp, className: "font-heading text-4xl md:text-5xl font-bold text-foreground mb-5", children: t("home.cta.title") }),
3371      /* @__PURE__ */ jsxRuntimeExports.jsx(motion.p, { variants: fadeUp, className: "text-muted-foreground mb-10 leading-relaxed", children: t("home.cta.body") }),
3372      /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { variants: fadeUp, className: "flex flex-wrap justify-center gap-4", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: localizedPath("/tours"), className: "px-8 py-3.5 text-sm font-semibold tracking-wide uppercase rounded-sm transition-all duration-200 hover:opacity-90", style: {
3373        background: "hsl(var(--primary))",
3374        color: "#fff"
3375      }, children: t("home.destinations.viewAllTours") }) })
3376    ] }) }) }),
3377    /* @__PURE__ */ jsxRuntimeExports.jsx(LanguageSwitchBanner, { variant: "website" })
3378  ] });
3379}
3380const ToursPage = reactExports.lazy(() => __vitePreload(() => import("./index-CQA0WRlX.js"), true ? __vite__mapDeps([0,1,2,3,4,5,6,7,8,9]) : void 0));
3381const TourDetailPage = reactExports.lazy(() => __vitePreload(() => import("./slug-BPAIVvR1.js"), true ? __vite__mapDeps([10,1,2,3,4,7,11,6,8,9]) : void 0));
3382const PopularToursPage = reactExports.lazy(() => __vitePreload(() => import("./popular-tours-BS8Iu-KO.js"), true ? __vite__mapDeps([12,1,2,3,4,5,6,8,9]) : void 0));
3383const DestinationsPage = reactExports.lazy(() => __vitePreload(() => import("./index-Cyh2OYGV.js"), true ? __vite__mapDeps([13,1,2,3,4,6,8,9]) : void 0));
3384const DestinationPage = reactExports.lazy(() => __vitePreload(() => import("./slug-K1YeNGoV.js"), true ? __vite__mapDeps([14,1,2,3,4,5,6,7,8,9]) : void 0));
3385const BookingPage = reactExports.lazy(() => __vitePreload(() => import("./index-D3MHJ75M.js"), true ? __vite__mapDeps([15,1,2,6,4,8,16,17,3,9]) : void 0));
3386const BookingConfirmationPage = reactExports.lazy(() => __vitePreload(() => import("./confirmation-DfxJg1ii.js"), true ? __vite__mapDeps([18,1,2,3,6,4,8,9]) : void 0));
3387const AboutPage = reactExports.lazy(() => __vitePreload(() => import("./about-BI5_vIQf.js"), true ? __vite__mapDeps([19,1,2,3,4,6,8,9]) : void 0));
3388const FaqPage = reactExports.lazy(() => __vitePreload(() => import("./faq-CsJZZ5dy.js"), true ? __vite__mapDeps([20,1,2,3,4,6,8,9]) : void 0));
3389const ContactPage = reactExports.lazy(() => __vitePreload(() => import("./contact-CvTkTJ56.js"), true ? __vite__mapDeps([21,1,2,4,3,6,8,9]) : void 0));
3390const TermsPage = reactExports.lazy(() => __vitePreload(() => import("./terms-Cx1AfFbG.js"), true ? __vite__mapDeps([22,1,2,3,4,6,8,9]) : void 0));
3391const PrivateWalkingToursPage = reactExports.lazy(() => __vitePreload(() => import("./private-walking-tours-uCAXTNpu.js"), true ? __vite__mapDeps([23,1,2,24,3,4,7,6,8,9]) : void 0));
3392const DriverGuidedToursPage = reactExports.lazy(() => __vitePreload(() => import("./driver-guided-tours-5kocVefa.js"), true ? __vite__mapDeps([25,1,2,24,3,4,7,6,8,9]) : void 0));
3393const ChauffeurDrivenToursPage = reactExports.lazy(() => __vitePreload(() => import("./chauffeur-driven-tours-DIXPeYmG.js"), true ? __vite__mapDeps([26,1,2,24,3,4,7,6,8,9]) : void 0));
3394const BookingFlowProposal = reactExports.lazy(() => __vitePreload(() => import("./booking-flow-proposal-Dr86UdMu.js"), true ? __vite__mapDeps([27,1,2,4]) : void 0));
3395const WestminsterProductPage = reactExports.lazy(() => __vitePreload(() => import("./index-CEf4Ab6t.js"), true ? __vite__mapDeps([28,1,2,3,4,16,17,11,9,6,8]) : void 0));
3396const WestminsterBookPage = reactExports.lazy(() => __vitePreload(() => import("./book-siY6i8Tu.js"), true ? __vite__mapDeps([29,1,2,3,4,9,6,8]) : void 0));
3397const WestminsterConfirmationPage = reactExports.lazy(() => __vitePreload(() => import("./confirmation-6vS1HniW.js"), true ? __vite__mapDeps([30,1,2,3,4,9,6,8]) : void 0));
3398const WestminsterOfferPage = reactExports.lazy(() => __vitePreload(() => import("./offer-Ua2lAj81.js"), true ? __vite__mapDeps([31,1,2,3,4]) : void 0));
3399const NotFoundPage = reactExports.lazy(() => __vitePreload(() => import("./_404-CR656lpy.js"), true ? __vite__mapDeps([32,1,2,3]) : void 0));
3400const routes = [
3401  {
3402    index: true,
3403    element: /* @__PURE__ */ jsxRuntimeExports.jsx(HomePage, {})
3404  },
3405  {
3406    path: "tours",
3407    element: /* @__PURE__ */ jsxRuntimeExports.jsx(ToursPage, {})
3408  },
3409  {
3410    path: "tours/:slug",
3411    element: /* @__PURE__ */ jsxRuntimeExports.jsx(TourDetailPage, {})
3412  },
3413  {
3414    path: "popular-tours",
3415    element: /* @__PURE__ */ jsxRuntimeExports.jsx(PopularToursPage, {})
3416  },
3417  {
3418    path: "destinations",
3419    element: /* @__PURE__ */ jsxRuntimeExports.jsx(DestinationsPage, {})
3420  },
3421  {
3422    path: "destinations/:destination",
3423    element: /* @__PURE__ */ jsxRuntimeExports.jsx(DestinationPage, {})
3424  },
3425  {
3426    path: "booking",
3427    element: /* @__PURE__ */ jsxRuntimeExports.jsx(BookingPage, {})
3428  },
3429  {
3430    path: "booking/confirmation",
3431    element: /* @__PURE__ */ jsxRuntimeExports.jsx(BookingConfirmationPage, {})
3432  },
3433  {
3434    path: "about",
3435    element: /* @__PURE__ */ jsxRuntimeExports.jsx(AboutPage, {})
3436  },
3437  {
3438    path: "faq",
3439    element: /* @__PURE__ */ jsxRuntimeExports.jsx(FaqPage, {})
3440  },
3441  {
3442    path: "contact",
3443    element: /* @__PURE__ */ jsxRuntimeExports.jsx(ContactPage, {})
3444  },
3445  {
3446    path: "terms",
3447    element: /* @__PURE__ */ jsxRuntimeExports.jsx(TermsPage, {})
3448  },
3449  // Service landing pages
3450  {
3451    path: "private-walking-tours",
3452    element: /* @__PURE__ */ jsxRuntimeExports.jsx(PrivateWalkingToursPage, {})
3453  },
3454  {
3455    path: "driver-guided-tours",
3456    element: /* @__PURE__ */ jsxRuntimeExports.jsx(DriverGuidedToursPage, {})
3457  },
3458  {
3459    path: "chauffeur-driven-tours",
3460    element: /* @__PURE__ */ jsxRuntimeExports.jsx(ChauffeurDrivenToursPage, {})
3461  },
3462  {
3463    path: "booking-flow-proposal",
3464    element: /* @__PURE__ */ jsxRuntimeExports.jsx(BookingFlowProposal, {})
3465  },
3466  // Westminster Abbey Tour
3467  {
3468    path: "westminster-abbey",
3469    element: /* @__PURE__ */ jsxRuntimeExports.jsx(WestminsterProductPage, {})
3470  },
3471  {
3472    path: "westminster-abbey/book",
3473    element: /* @__PURE__ */ jsxRuntimeExports.jsx(WestminsterBookPage, {})
3474  },
3475  {
3476    path: "westminster-abbey/confirmation",
3477    element: /* @__PURE__ */ jsxRuntimeExports.jsx(WestminsterConfirmationPage, {})
3478  },
3479  {
3480    path: "westminster-abbey/offer/:token",
3481    element: /* @__PURE__ */ jsxRuntimeExports.jsx(WestminsterOfferPage, {})
3482  },
3483  {
3484    path: "*",
3485    element: /* @__PURE__ */ jsxRuntimeExports.jsx(NotFoundPage, {})
3486  }
3487];
3488const AdminPage = reactExports.lazy(() => __vitePreload(() => import("./index-D_Ouvygf.js"), true ? __vite__mapDeps([33,1,2,4,34,7,35,36,9,6,3,8]) : void 0));
3489const AgencyAvailabilityPage = reactExports.lazy(() => __vitePreload(() => import("./AgencyAvailability-DQU4IZaJ.js"), true ? __vite__mapDeps([37,1,2,4]) : void 0));
3490const CookieBanner = reactExports.lazy(() => __vitePreload(() => import("./CookieBanner-cVqWjgY7.js"), true ? __vite__mapDeps([38,1,2,35,36,4,9,6,3,8]) : void 0).catch((error) => {
3491  console.warn("Failed to load CookieBanner:", error);
3492  return {
3493    default: () => null
3494  };
3495}));
3496const SpinnerFallback = () => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center py-8 h-screen items-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Spinner, {}) });
3497const LayoutWithLang = () => /* @__PURE__ */ jsxRuntimeExports.jsx(LanguageWrapper, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(RootLayout, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(Outlet, {}) }) });
3498const router = createBrowserRouter([
3499  // Redirect bare / to default language
3500  {
3501    path: "/",
3502    element: /* @__PURE__ */ jsxRuntimeExports.jsx(Navigate, { to: `/${defaultLanguage}`, replace: true })
3503  },
3504  // Admin panel — no language prefix, no header/footer
3505  {
3506    path: "/admin",
3507    element: /* @__PURE__ */ jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: /* @__PURE__ */ jsxRuntimeExports.jsx(SpinnerFallback, {}
3507), children: /* @__PURE__ */ jsxRuntimeExports.jsx(AdminPage, {}) })
3508  },
3509  // Agency availability portal — no language prefix, no header/footer, noindex
3510  {
3511    path: "/agency-availability",
3512    element: /* @__PURE__ */ jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: /* @__PURE__ */ jsxRuntimeExports.jsx(SpinnerFallback, {}), children: /* @__PURE__ */ jsxRuntimeExports.jsx(AgencyAvailabilityPage, {}) })
3513  },
3514  // Agency availability short-link — clean branded URL, same component/auth
3515  {
3516    path: "/availability",
3517    element: /* @__PURE__ */ jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: /* @__PURE__ */ jsxRuntimeExports.jsx(SpinnerFallback, {}), children: /* @__PURE__ */ jsxRuntimeExports.jsx(AgencyAvailabilityPage, {}) })
3518  },
3519  // Language-prefixed routes
3520  {
3521    path: "/:lang",
3522    element: /* @__PURE__ */ jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: /* @__PURE__ */ jsxRuntimeExports.jsx(SpinnerFallback, {}), children: /* @__PURE__ */ jsxRuntimeExports.jsx(LayoutWithLang, {}) }),
3523    children: routes
3524  }
3525]);
3526function App() {
3527  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
3528    /* @__PURE__ */ jsxRuntimeExports.jsx(RouterProvider$1, { router }),
3529    /* @__PURE__ */ jsxRuntimeExports.jsx(CookieBannerErrorBoundary, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: null, children: /* @__PURE__ */ jsxRuntimeExports.jsx(CookieBanner, {}) }) })
3530  ] });
3531}
3532const queryClient = new QueryClient({
3533  defaultOptions: {
3534    queries: {
3535      staleTime: 1e3 * 60 * 5,
3536      // 5 minutes
3537      gcTime: 1e3 * 60 * 10,
3538      // 10 minutes (formerly cacheTime)
3539      retry: 1,
3540      refetchOnWindowFocus: false
3541    },
3542    mutations: {
3543      retry: 0
3544    }
3545  }
3546});
3547const rootElement = document.getElementById("app");
3548if (!rootElement) throw new Error("Root element not found");
3549const root = ReactDOM.createRoot(rootElement);
3550root.render(/* @__PURE__ */ jsxRuntimeExports.jsx(React2.StrictMode, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(HelmetProvider, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsxRuntimeExports.jsx(App, {}) }) }) }));
3551export {
3552  BASE_URL as B,
3553  LanguageSwitchBanner as L,
3554  NotAffiliatedNotice as N,
3555  cn as a,
3556  admin_westminster as b,
3557  catalogue as c,
3558  admin_dashboard as d,
3559  pageUrl as e,
3560  useLocalisedPricing as f,
3561  getToursByCategory as g,
3562  hreflangLinks as h,
3563  getTourBySlug as i,
3564  tourJsonLd as j,
3565  destinations as k,
3566  getToursByDestination as l,
3567  getDestinationBySlug as m,
3568  destinationJsonLd as n,
3569  about as o,
3570  pageTitle as p,
3571  organizationJsonLd as q,
3572  faqPageJsonLd as r,
3573  staticOgImage as s,
3574  tours as t,
3575  useLocalizedPath as u,
3576  contact as v,
3577  westminster as w,
3578  westminster_book as x,
3579  westminster_confirmation as y
3580};

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.