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.