1const e={signIn:"Sign In",signUp:"Sign Up",welcome:"Welcome back to Hostme",email:"Email",emailPlaceholder:"you{'@'}restaurant.com",password:"Password",passwordPlaceholder:"Enter your password",createPasswordPlaceholder:"Create a password (min 6 characters)",fillAllFields:"Please fill in all fields",invalidCredentials:"Invalid email or password",connectionError:"Connection error. Please try again.",signingIn:"Signing inâ¦",forgotPassword:"Forgot password?",forgotPasswordTitle:"Reset your password",forgotPasswordHint:"Enter the email associated with your account and we'll send you a link to reset your password.",sendResetLink:"Send reset link",resetEmailSent:"Check your inbox",resetEmailSentHint:"If an account exists for {email}, we just sent a reset link there. The link expires in 1 hour.",backToSignIn:"Back to Sign In",resetPasswordTitle:"Set a new password",resetPasswordHint:"Choose a strong password you haven't used before.",newPassword:"New password",confirmPassword:"Confirm password",confirmPasswordPlaceholder:"Repeat the new password",passwordMismatch:"Passwords don't match",passwordTooShort:"Password must be at least 6 characters",resetPassword:"Change password",resetting:"Savingâ¦",invalidResetLink:"This reset link is invalid or has expired. Request a new one.",resetSuccess:"Your password has been changed. Sign in with the new password.",alreadyHaveAccount:"Already have an account?",noAccount:"Don't have an account?",enterEmail:"Enter Email",verifyEmail:"Verify Email",createAccount:"Create Account",yourRestaurant:"Your Restaurant",welcomeSubtitle:"Create your first restaurant to get started.",signOut:"Sign Out",stepOf:"Step {step} of {total}",continue:"Continue",sending:"Sendingâ¦",confirmationSent:"We sent a 6-digit code to",codeValidFor:"The code is valid for {minutes} minutes.",invalidCode:"Invalid code. Please try again.",invalidCodeWithAttempts:"Invalid code. {attempts} attempts left.",codeExpired:"This code has expired. Please request a new one.",tooManyAttempts:"Too many attempts. Request a new code.",emailAlreadyRegistered:"This email is already registered. Try signing in instead.",rateLimitReached:"Too many requests. Please try again later.",emailProviderDown:"We can't send emails right now. Please try again in a moment.",invalidRegistrationToken:"Your verification has expired. Please start over.",validationFailed:"Please fix the following:",fieldRequired:"{field} is required",resendEmail:"Resend email",resendEmailCountdown:"Resend email ({seconds}s)",fullName:"Full Name",fullNamePlaceholder:"John Doe",firstName:"First name",firstNamePlaceholder:"John",lastName:"Last name",lastNamePlaceholder:"Doe",phone:"Phone",phonePlaceholder:"+1 555 123 4567",yourPhone:"Your phone",job:"Your role in the restaurant",jobPlaceholder:"General manager",invalidPhone:"Please check your phone number â we couldn't recognise it.",howDidYouHear:"How did you hear about us?",optional:"optional",select:"Select...",googleSearch:"Google Search",socialMedia:"Social Media",referral:"Referral",eventConference:"Event / Conference",other:"Other",creatingAccount:"Creating accountâ¦",restaurantName:"Restaurant Name",restaurantNamePlaceholder:"My Restaurant",address:"Address",addressPlaceholder:"123 Main St, City",language:"Language",website:"Website",websitePlaceholder:"https://myrestaurant.com",creatingRestaurant:"Creating restaurantâ¦",finishSetup:"Finish Setup",joinYourTeam:"Join Your Team",invitedTo:"You've been invited to {restaurant}",invalidInviteLink:"Invalid invitation link. Please ask your team to resend the invite.",inviteExpired:"This invitation has expired or is no longer valid.",inviteVerifyFailed:"Failed to verify invitation. Please try again.",goToSignIn:"Go to Sign In",yourNamePlaceholder:"Your name",joining:"Joiningâ¦",joinTeam:"Join Team"},t={operations:"Operations",guests:"Guests",growth:"Marketing",management:"Management",account:"Account",home:"Home",dashboard:"Dashboard",reservations:"Reservations",floorTables:"Floor & Tables",orderingMenu:"Ordering & Menu",guestManagement:"Guest Management",messaging:"Messaging",campaigns:"Campaigns",events:"Events",marketing:"Marketing",onlinePresence:"Online Presence",anal
1ytics:"Analytics",settings:"Settings",integrations:"Integrations",administration:"Administration",help:"Help",collapseSidebar:"Collapse sidebar",expandSidebar:"Expand sidebar",selectRestaurant:"Select restaurant"},a={profile:"Profile",language:"Language",notifications:"Notifications",contactSupport:"Contact us",helpCenter:"Help Centre",darkMode:"Dark Mode",on:"On",off:"Off",signOut:"Sign Out"},o={title:"Could not load your data",body:"The server did not answer, so we don't know which venues you have access to. Nothing is lost â please try again in a minute."},n={later:"Later",next:"Next",back:"Back",start:"Let's go!",menuItem:"About the new Admin",updated:{title:"Hostme has been updated",body:"This is the new version of the Admin Panel. Everything you know and use is still here. Your reservations, guests, floor plans, and settings have all been carried over. Nothing has been lost. Tables, reservations, and waitlists are still managed in the Host Panel, just as they were before.",more:"About the new Admin Panel"},whatsNew:{title:"What's new",lead:"The old Admin Panel was primarily a place to keep settings; in the new one you run the restaurant:",crm:"A CRM with every guest's history, tags, segments, marketing and triggered campaigns, and built-in analytics.",today:"A pre-shift dashboard for today: reservations, covers, table occupancy and the guest briefing â VIPs, birthdays, allergies, large parties.",tools:"A new floor editor: build a plan from a sketch or a photo, edit tables in bulk, browse a decor library, and work from a phone.",languages:"The panel speaks 22 languages â everyone works in their own.",ui:"A reworked interface, 22 languages, and dark mode on by default.",theme:"Dark Mode is new and it is on by default â light mode is one tap away.",themeToggle:"Dark Mode",week:"These are just a few of the many improvements that come with the All-New Hostme Admin Panel. Give it a try and discover a smarter, more intuitive way to manage your restaurant."},help:{title:"If something is unclear",body:"Search lets you find any setting and the instructions for it, and every setting has a link to a help article or a guide.",support:"Something not working? Reach out, we are here to help.",classicLead:"Still prefer the classic Admin Panel? It is available through the end of the year:"}},i={en:"English",ru:"Russian",uk:"Ukrainian",es:"Spanish",de:"German",fr:"French",pt:"Portuguese",it:"Italian",pl:"Polish",sv:"Swedish",da:"Danish",sr:"Serbian",bn:"Bengali",zh:"Chinese"},s={title:"Dashboard",errors:{noRestaurant:"No restaurant selected",loadFailed:"Failed to load dashboard data"},allClear:"All clear â no action items",actionItems:"Action Items",timeline:"Today's Timeline",timelineOther:"Timeline",coversByHour:"Covers by hour",reservationsToday:"Reservations",coversToday:"Covers",waitlistNow:"Waitlist",tablesOccupied:"Tables",trend:"7-Day Trend",covers:"Covers",reservations:"Reservations",noShows:"No-shows",noTrendData:"No reservation data for the last 7 days",quickActions:"Quick Actions",resetRotation:"Reset server rotation",unseatAll:"Unseat all tables",newReservation:"New Reservation",availability:"Availability",openHostPanel:"Open Host Panel",confirmResetRotation:"Reset Server Rotation?",confirmUnseatAll:"Unseat All Tables?",resetRotationDesc:"This will reset the server rotation counters for this restaurant.",unseatAllDesc:"This will release all currently occupied tables.",confirm:"Confirm",processing:"Processing...",rotationReset:"Server rotation reset",allTablesReleased:"All tables released",actionFailed:"Action failed",unconfirmedReservations:"{count} unconfirmed reservation(s)",pendingDeposits:"{count} pending deposit(s)",campaignFinished:'Campaign "{name}" finished â view report',campaignsFinished:"{count} campaign(s) finished â view reports",disableReservations:"Disable online reservations",confirmDisableReservations:"Disable Online Reservations?",disableReservationsDesc:"New reservations for the restricted time slots will be blocked. Guests can still book for times after the restriction or for other days. Existing reservations are not affected.",disable:"Disable",disableUntilEndOfDay:"Until end of day",disableUntilTime:"Until specific time",restrictionsEnabled:"Online reservations disabled",restrictionsRemoved:"Online reservations re-enabled",enableReservations:"Enable online reservations",reservationsDisabledTitle:"Online reservations are disabled",restrictionDescEndOfDay:"Reservations are paused until the end of today",restrictionDescUntilTime:"Reservations are paused until {time} today",confirmEnableReservations:"Re-enable online reservations?",confirmEnableReservationsDesc:"This will remove the current restriction and allow guests to book online again.",statusOpen:"Open Now",statusClosed:"Closed Now",bookingActive:"Online Booking Active",bookingRestricted:"Online Booking Restricted",bookingClosed:"Online Booking Closed",bookingClosedForToday:"Online booking closed for today",dateNav:{today:"Today",selectDate:"Select date",previousDay:"Previous day",nextDay:"Next day"},export:{title:"Export reservations for the selected date",button:"Export",time:"Time",guest:"Guest",party:"Party",table:"Table",status:"Status",source:"Source",deposit:"Deposit",tags:"Tags",notes:"Notes"}
1,onboarding:{title:"Getting Started",subtitle:"Get started today",description:"Complete the following steps and let Hostme do the work for you!",tileBadge:"Getting started",tileProgress:"{done} of {total} steps complete",tileProgressNone:"Let's get your restaurant ready",tileCta:"Continue setup",tileCtaStart:"Start setup",tileDismissAria:"Dismiss onboarding",modalIntro:"Finish setting up your restaurant. Each step takes a couple of minutes â pick up where you left off.",watchTutorials:"Watch tutorials",scheduleDemo:"Schedule a demo",scheduleDemoUrl:"https://www.hostmeapp.com/request-demo",stepStatusComplete:"Done",stepStatusPending:"To do",stepOpenCta:"Open",stepHelpCta:"Help article",dismissBtn:"Don't show this again",dismissError:"Could not save your preference. Try again.",dismissConfirmTitle:"Hide the Getting Started checklist?",dismissConfirmMessage:"You can bring it back any time from Settings â Interface.",dismissConfirmYes:"Yes, hide it",closeBtn:"Close",allDoneTitle:"You're all set!",allDoneDesc:"All onboarding steps are complete. Great job.",steps:{restaurantProfile:{title:"Set up your restaurant profile",description:"Add your name, address, phone and logo â they power the booking widget, confirmations and your public Restogram page.",timeEstimate:"~3 min"},floorPlan:{title:"Create a Floor plan",description:"Build your floor plan (or start from our demo) so you can accept reservations and seat guests.",timeEstimate:"~10 min"},adjustAvailability:{title:"Adjust Availability",description:"Set open hours, online reservation hours and timeslots so guests only book when you're ready.",timeEstimate:"~5 min"},onlineReservations:{title:"Start accepting online reservations",description:"Pick approval mode, party sizes and notice periods to bring guests in 24/7 â even when your team is busy on the floor.",timeEstimate:"~5 min"},inviteTeam:{title:"Invite your team",description:"Add hostesses, managers and other staff so the whole team works in one Hostme â no double-bookings, no out-of-sync floor.",timeEstimate:"~2 min"},adjustFloorRules:{title:"Adjust Floor rules",description:"Set turnover, hold time, statuses, assignment and server rules â smart defaults boost table turnover by 15â30%.",timeEstimate:"~10 min"}}},guestAlerts:{title:"Pre-shift guest alerts",subtitle:"Reservations that need extra attention today",empty:"No special guests on this shift.",unknownGuest:"Guest",categoryVip:"VIP",categoryBirthday:"Birthday",categoryLarge:"Large party",categoryAllergy:"Allergy",categoryVegetarian:"Vegetarian",categoryEvent:"Event",tabs:{all:"All important",vip:"VIP",birthdays:"Birthdays",largeParties:"Large parties",allergies:"Allergies",events:"Events"},party:"{count} guests",partyOne:"1 guest",table:"Table {table}",birthdayDetail:"Birthday today",largePartyDetail:"Party of {count}",allergyDetail:"Allergies: {list}",vegetarianDetail:"Vegetarian",eventDetail:"Event reservation"}},r={title:"Profile",tabProfile:"Profile",tabPassword:"Password",fullName:"Full name",email:"Email",phone:"Phone",phonePlaceholder:"+1 555 000 0000",nameRequired:"Name is required",emailRequired:"Email is required",profileUpdated:"Profile updated",updateFailed:"Failed to update profile",saving:"Saving...",changePassword:"Change Password",currentPassword:"Current password",newPassword:"New password",newPasswordPlaceholder:"Min 6 characters",confirmNewPassword:"Confirm new password",showPassword:"Show password",hidePassword:"Hide password",currentPasswordRequired:"Current password is required",passwordMinLength:"New password must be at least 6 characters",passwordsMismatch:"Passwords do not match",passwordChanged:"Password changed",passwordChangeFailed:"Failed to change password",changing:"Changing...",deleteAccount:"Delete account",phoneAlreadyExists:"This phone number is already used by another account.",phoneInvalid:"Enter a valid phone number."},l={title:"Delete account",warningIntro:"Deleting your account permanently removes your access â this can't be undone. Restaurants you solely own will be deleted.",passwordLabel:"Confirm with your password",passwordPlaceholder:"Your password",passwordRequired:"Enter your password to confirm.",confirmButton:"Delete my account",deleting:"Deletingâ¦",wrongPassword:"Incorrect password.",failed:"Couldn't delete your account. Please try again.",blockedIntro:"Your account can't be deleted until these are resolved:",reasonActiveSubscription:"One of your restaurants has an active subscription. Cancel it before deleting your account.",reasonSoleOwner:"You are the only owner of a restaurant that still has team members or data. Transfer ownership or delete the restaurant.",blockedHint:"Manage owners and team in Administration â Team. Subscriptions live under Billing."},d={title:"Notifications",soundAlertsFor:"Sound alerts for",storedPerDevice:"Stored per device.",browserBlocked:"Notifications are blocked by your browser. Please enable them in your browser settings.",pushNotifications:"Push notifications",tabSounds:"Sounds",enableAlerts:"Enable alerts for this device",pu
1shAllVenues:"Alerts arrive for all your restaurants. Switch off the ones you don't need.",pushBlockedApp:"Notifications are turned off in your phone settings. Turn them on to receive alerts.",pushNotAsked:"Notifications are not enabled yet. Turn them on in your phone settings.",openPhoneSettings:"Open settings",newReservation:"New reservation",newWaitlist:"New waitlist entry",newOrder:"New order",guestMessage:"Guest message",checkInStatus:"Check-in status",incomingCall:"Incoming call",pushTypesTitle:"Which alerts to receive",pushTypesHint:"Applies to this device in all your restaurants.",pushTypesFailed:"Could not save the change. Please try again.",pushTypes:{reservation:{new:"New reservation",request:"Reservation request",changed:"Reservation changed",canceled:"Reservation cancelled",reminder:"Reservation reminder"},order:{new:"New order",changed:"Order changed",canceled:"Order cancelled",reminder:"Order reminder"},lead:{new:"New website lead"},message:{new:"Guest message"}},tabVenues:"Restaurants",tabTypes:"Types",pushPickVenues:"Pick the restaurants you want alerts from on this device.",typesNeedVenue:"Alerts are not on for any restaurant yet â turn one on under Restaurants."},c={title:"Search (âK)",placeholder:"Search pages, settingsâ¦",noResults:"No results found",system:"Management",openHelp:"Open help centre",helpGroup:"Help centre"},u={titleToday:"Subscription ends today",title:"Subscription ends in {n} day | Subscription ends in {n} days",endsOn:"ends {date}",reactivate:"Reactivate"},p={alphaBadge:"Alpha",comingSoon:"Content for {tab} coming soon",dismiss:"Dismiss",minutes:"min",days:"days",distanceMi:"mi",distanceKm:"km",monthNames:{1:"January",2:"February",3:"March",4:"April",5:"May",6:"June",7:"July",8:"August",9:"September",10:"October",11:"November",12:"December"},guests:"guests",remove:"Remove",done:"Done",more:"More",default:"Default",retry:"Try again",discard:"Discard",saved:"Saved",saveChanges:"Save Changes",unlimited:"Unlimited",moveUp:"Move up",moveDown:"Move down",cancel:"Cancel",clear:"Clear",reset:"Reset",noColor:"No colour",moreColors:"More colours",resetTo:"Reset to {color}",create:"Create",save:"Save",add:"Add",back:"Back",next:"Next",saving:"Savingâ¦",settingsSaved:"Settings saved",free:"Free",month:"month",verify:"Verify",verifying:"Verifyingâ¦",close:"Close",on:"On",off:"Off",submitRequest:"Submit Request",requestSent:"Request Sent",preview:"Preview",buyNow:"Buy Now",request:"Request",sendVerification:"Send Verification",copy:"Copy",copied:"Copied!",selectDate:"Select date",expiredBadge:"Expired",loading:"Loadingâ¦",open:"Open",change:"Change",current:"Current",edit:"Edit",rename:"Rename",delete:"Delete",insert:"Insert",apply:"Apply",dragToReorder:"Drag to reorder",unsavedChangesTitle:"Unsaved changes",unsavedChangesMessage:"You have unsaved changes on this page. Save them, discard them, or stay to keep editing.",saveAndLeave:"Save & leave",discardAndLeave:"Discard & leave",stayOnPage:"Stay on page",discardChangesMessage:"Your changes won't be saved.",tierBadge:{requires:"Requires {tier} plan",included:"Included in {tier} plan",grandeFeatureHint:"This feature is available on the Grande plan. Upgrade your subscription to enable it for your guests.",clickToUpgrade:"Click to upgrade",tiers:{grande:"Grande",pro:"Pro",premium:"Premium",enterprise:"Enterprise",basic:"Basic",piccolo:"Piccolo",medio:"Medio"}},upgradeModal:{grande:{title:"Unlock {tier} features",titleWithFeature:"Unlock â{feature}â with {tier}",intro:"You're currently on a plan that doesn't include this feature. Upgrade to {tier} to enable it â along with everything else included in the tier.",perks:["Custom reservation statuses & arrival workflows","Branded widgets, emails and SMS with your logo and colours","Pre-orders, custom order statuses & advanced policies","Full email customisation & promotional templates","Priority support and onboarding"],ctaOwner:"Choose a plan",ctaOwnerHint:"Opens the plans selector in Billing."},noSubscription:{title:"No active subscription",intro:"Your restaurant doesn't have an active subscription right now, so paid features (including events) are turned off. Pick a plan to start serving guests with the full Hostme toolset.",perks:["Reservations, waiting list and table management","Events with monthly quota and overage pricing","Multi-channel guest messaging (Email, SMS, WhatsApp, Telegram)","Online booking widget and Google Reserve integration","Loyalty programme and guest CRM"],ctaOwner:"Choose a plan",ctaOwnerHint:"Opens the plans selector in Billing."},contactOwner:{title:"Ask your manager or owner",intro:"Subscription and billing changes are handled by Owners, Managers and Support roles. Reach out to whoever runs the account for your restaurant â share what you're trying to unlock and they can upgrade in a couple of clicks.",whatYouUnlock:"What you'll unlock with {tier}:",closeBtn:"Got it"},closeBtn:"Maybe later",backdropDismiss:"Close"},gotIt:"Got it",newBadge:"New"},h={owner:"Owner",manager:"Manager",host:"Host",kitchen:"Kitchen",marketing:"Marketing",itSupport:"IT Support",support:"Support"},m={title:"Add image",select:"Select",tab_upload:"Upload",tab_gallery:"Gallery",tab_url:"From URL",clickToUpload:"Click to choose an image",uploadAnother:"Click to upload another",uploading:"Uploading",loadingGallery:"Lo
1ading gallery",galleryEmpty:"No images uploaded yet",imageUrl:"Image URL",imageAlt:"Alt text (for accessibility)"},g={templates:"Templates",templatesLoading:"Loading templatesâ¦",templatesError:"Couldn't load templates",templatesEmpty:"No saved templates",blankTemplate:"Blank (clear)",useSimpleEditor:"Use simple editor",htmlPreview:"Email preview",insertVariable:"Insert Variable",image:"Image",button:"Button",link:"Link",source:"Source",preview:"Preview",color:"Primary colour",insertImage:"Insert Image",insertButton:"Insert Button",insertLink:"Insert Link",sourceCode:"Source Code",sourceCodeHint:"Edit raw HTML. Changes will replace the editor content.",buttonText:"Button text",linkText:"Link text",linkTextPlaceholder:"Optional â if empty, the URL is used",linkTextHint:"Leave empty to wrap the currently selected text.",linkUrl:"URL",buttonColor:"Button colour",textColor:"Text colour",highlightColor:"Highlight colour",fontSize:"Font size",fontSizeDefault:"Size",primaryColor:"Primary colour",primaryColorHint:"Updates the colour of buttons and links inserted from now on, and tries to recolour existing button backgrounds in the current document.",urlBuilder:"URL builder",buildUrl:"Build URL",urlBuilderHint:"Generate a pre-filled reservation link for tables.hostmeapp.com.",urlDate:"Date",urlTime:"Time",urlPersons:"Guests",urlArea:"Area",urlMode:"Reservation mode",urlModeAuto:"Use restaurant default",urlModeAutoConfirm:"Auto-confirm",urlModeRequest:"Request only",urlGenerated:"Generated URL",urlGeneratedPayload:"Generated payload",useUrl:"Use URL",urlBuilderTarget:"Reserve for",urlBuilderTargetRestaurant:"Restaurant",urlAreaAny:"Any",urlBuilderQuickReplyHint:"Builds a WhatsApp quick-reply callback payload (book?â¦) the bot recognises.",imageTab_upload:"Upload",imageTab_gallery:"Gallery",imageTab_url:"From URL",clickToUpload:"Click to choose an image",uploadAnother:"Click to upload another",uploading:"Uploading",loadingGallery:"Loading gallery",galleryEmpty:"No images uploaded yet",imageUrl:"Image URL",imageAlt:"Alt text (for accessibility)",desktop:"Desktop",mobile:"Mobile",subject:"Subject"},y={tabActive:"Active",tabDraft:"Drafts",tabPast:"Past",createEvent:"Create Event",noSubscription:{title:"Events are available on an active plan",description:"Create special events â themed dinners, tastings, live nights â and take bookings from your guests. Subscribe to unlock events.",cta:"Choose a plan"},editEvent:"Edit Event",backToList:"Back to events",discardConfirm:"Discard your unsaved changes?",unsavedBadge:"Unsaved changes",unsavedLeaveConfirm:"You have unsaved changes. Leave this page anyway?",requiredField:"This field is required.",saveDisabledHint:"Fill in the event name and start date to save.",draftHint:"New events start as drafts. After creation you can add photos, table rules, deposits and more on the edit page â then activate when ready.",editorTabs:{information:"Basic Info",onlineBooking:"Online Booking",depositsFees:"Deposits & Fees",coverPacing:"Cover Pacing",blockedTables:"Blocked Tables",tableRules:"Table Rules",ordering:"Ordering",publicPage:"Public Page",floorPlans:"Floor Plans",createOnlyHint:"Available after creation"},override:{badge:"Event-only setting",description:"Changes here apply only to this event. Your restaurant defaults stay untouched.",viewDefault:"View restaurant default"},section:{basicTitle:"Event details",basicDesc:"Public-facing name and description shown to guests.",publicPageTitle:"Public page",publicPageDesc:"Show this event on your restaurant page and share its public guest link.",tagsTitle:"Tags",tagsDesc:"Category tags shown to guests on the event page.",scheduleTitle:"Schedule",scheduleDesc:"When the event runs and which reservation slots are bookable.",photosMainTitle:"Main photo",photosMainDesc:"Hero image shown at the top of the event page on your public profile.",photosGalleryTitle:"Photo gallery",photosGalleryDesc:"Additional photos grouped by category. Visible in the event gallery on your public profile.",floorPlansTitle:"Floor plans",floorPlansDesc:"Choose which floor plans are available for this event.",visibilityTitle:"Visibility & status",visibilityDesc:"Control whether the event is published and visible to guests."},eventName:"Event Name",eventNamePlaceholder:"e.g. Wine Tasting Night",description:"Description",descriptionPlaceholder:"Describe your eventâ¦",tagsLabel:"Tags",tagsPlaceholder:"Type the event tags",tagsHint:"Press Enter or comma to add a tag. Helps guests find this event.",startDate:"Start Date",endDate:"End Date",startTime:"Start Time",endTime:"End Time",repeatEvent:"Repeat weekly",repeatEventHint:"Use a recurring weekly schedule instead of a single time range.",weeklySchedule:"Weekly schedule",weeklyScheduleHint:"Set the time slots for each day the event runs. Days without slots are closed.",slots:{title:"Slots settings",hint:"You can remove slots that are not available for reservations.",enableAll:"Enable all",summaryAll:"All {n} slots enabled",summarySome:"{n} of {total} slots enabled"},showOnPublicPage:"Show on Restaurant Page",showOnPublicPageHint:"Make this event visible on your public page",linkToEventPage:"Link to Event Page",activeEvent:"Active",activeEventHint:"Deactivate to save as draft without publishing",makeActive:"Activate",moveToDraft:"Deactivate",archive:"Archive",duplicate:"Run again",duplicateNameSuffix:"(copy)",archiveHint:"This event has ended. Archiving moves it out of Active.",untitled:"Untitled Event",statusDraft:"Draft",statusPast:"Past",statusOngoing:"Ongoing",statusUpcoming:"Upcoming",statusOutdated:"Outdated",deleteConfirmTitle:"Delete Event",deleteConfirmMessage:'Are you sure you want to delete "{name}"? This action cannot be undone.',emptyActiveTitle:"No Active Events",emptyActiveDescription:"Create your first event to start attracting guests.",emptyDraftTitle:"No Drafts",emptyDraftDescription:"Draft events will appear here when you save without activating.",emptyPastTitle:"No Past Events",emptyPastDescription:"Past events will appear here after their end date.",pricing:{piccolo:"Your Piccolo plan uses Events as pay-as-you-go.",mezzo:"Your Mezzo plan includes 1 free upcoming event per month.",grande:"Your Grande plan includes 5 free upcoming events per month.",extra:"Additional events are charged at $20 USD (or local equivalent) per event each month."},usage:{title:"{plan} plan",unlimited:"Unlimited events included with your plan.",withinQuota:"{used} of {quota} events used this period · resets in {days} days. Additional events are charged at {price} each.",overQuota:"{used} of {quota} events used · {overage} extra event(s) this period. Estimated additional charge: {estimated} ({price}/event). Resets in {days} days."},quotaConfirm:{title:"Exceed your monthly quota?",body:"You have used {used} of {quota} events this billing period. Activating this event will be billed as an extra event at {price}.",bodyOver:"You have already used {used} of {quota} events this period. Activating this event adds another extra event at {price}.",confirm:"Activate anyway"},gallery:{title:"Photo gallery",hint:"Photos shown in the public gallery on the event page. Use the category to group them into sections (Food, Interior, etc.).",createHint:"Save the event first to enable photo uploads.",empty:"No photos yet. Upload your first one below.",upload:"Upload photos",uploading:"Uploadingâ¦",maxSize:"JPG / PNG, up to 3 MB per photo.",errorTooLarge:'"{name}" exceeds the 3 MB limit.',categoryNone:"Select category",categoryPick:"Category",categories:{drink:"Drink",food:"Food",interior:"Interior",outdoor:"Outdoor",style:"Style",other:"Other"}},mainPhoto:{title:"Main event photo",hint:"Used as the hero image at the top of the event public page and as the thumbnail in search results.",upload:"Upload main photo"}},b=JSON.parse(`{"title":"Campaigns","tabCampaigns":"Campaigns","tabAutomations":"Automations","tabReports":"Reports","subAll":"All","subActive":"Active","subCompleted":"Completed","subDrafts":"Drafts","filterChannelLabel":"Channel","filterChannel":{"email":"Email","sms":"SMS","whatsapp":"WhatsApp"},"filterAllChannels":"All","filterChannelsSelected":"{count} selected","filterClear":"Clear","filterEmptyTitle":"No campaigns match this filter","filterEmptyHint":"Try a different channel or clear the filter to see all campaigns.","filterScopeNote":"Searching your most recent campaigns â clear the filter to browse older ones by page.","tokens":"tokens","createCampaign":"Create Campaign","subscriptionRequired":{"title":"Campaigns are available on an active plan","description":"Send email, SMS and WhatsApp campaigns and automations to your guests, and track opens and clicks in reports. Subscribe to unlock the full campaigns suite.","cta":"Choose a plan"},"editCampaign":"Edit Campaign","sendCampaign":"Send Campaign","scheduleCampaign":"Schedule Campaign","balanceTitle":"Balance","balanceCurrent":"Current Balance","balanceRefresh":"Refresh","balanceHeldNote":"{count} on hold for active campaigns","balancePerChannelMsgs":"msgs","balancePackagesTitle":"Marketing Campaigns Packages","balancePackagesEmpty":"No packages available right now.","balanceBuy":"Buy plan","balanceBuying":"Opening checkoutâ¦","balanceCheckoutNote":"You will be redirected to a secure checkout page. Tokens are credited automatically after payment.","activateConfirmTitle":"Activate Campaign","activateConfirmMessage":"Ready to send \\"{name}\\"?","activateRecipients":"Recipients","activateCost":"Your balance will be charged","activateBalance":"Current balance","activateRemaining":"Remaining after send","activateInsufficient":"Not enough tokens","activateInsufficientHint":"Top up your balance to send this campaign.","activateTopUp":"Top up","activateConfirmButton":"Activate","testTitle":"Send Test","testShort":"Test","testDescription":"Send a test of \\"{name}\\" to verify content and formatting before activating.","testRecipientHint":"Test messages are delivered to your account email and ph
1one number.","testRecipientLabel":"Send test to","testRecipientPlaceholderEmail":"name{'@'}example.com","testRecipientPlaceholderPhone":"+1 555 123 4567","testRecipientOwnerNote":"Leave as your account contact, or enter a custom address.","testEstimatedCost":"Estimated cost","testSend":"Send Test","smsUnicode":"Unicode","smsSegmentsLabel":"SMS segments","campaignName":"Campaign Name","campaignNamePlaceholder":"e.g. Summer Special Offer","selectChannels":"Channels","configureChannel":"Set up channel","disabledChannelsWarning":"This campaign uses {count} channel(s) that are currently disabled in Messaging â Channels. They wonât deliver until you enable them.","language":"Language","step":"Step {current} of {total}","step_details":"Details","step_content":"Content","step_audience":"Audience","step_schedule":"Schedule","selectChannel":"Select channel","channelLockedHint":"Channel cannot be changed after the campaign is created.","disabledChannelLockedHint":"This marketing channel isn't set up yet. Configure its provider under {link} before sending.","disabledChannelLockedHintLink":"Integrations â Channels","untitled":"Untitled campaign","saveAndContinue":"Save and continue","continue":"Continue","discardExit":"Discard and exit","cancelCampaign":"Cancel campaign","testSendHint":"Send a test to your own contacts before activating the campaign.","emailSubject":"Subject Line","emailSubjectPlaceholder":"e.g. Your exclusive offer insideâ¦","emailPreheader":"Preview","emailPreheaderPlaceholder":"Short preview text (shown in inbox)","emailHeader":"Header","emailBody":"Email Body","emailBodyPlaceholder":"Write your email contentâ¦","smsText":"SMS Text","smsTextPlaceholder":"Type your SMS messageâ¦","characters":"characters","pushTitle":"Notification Title","pushTitlePlaceholder":"e.g. Special offer just for you!","pushBody":"Notification Text","pushBodyPlaceholder":"Message that appears in the notificationâ¦","whatsappText":"WhatsApp Message","whatsappTextPlaceholder":"Type your WhatsApp messageâ¦","whatsappTemplateNote":"WhatsApp messages must use pre-approved templates. Contact support to set up custom templates.","whatsappEditor":{"typeLabel":"Template type","typeCard":"Single card","typeCarousel":"Carousel","typeCardHint":"One message with a header, body, footer and buttons.","typeCarouselHint":"Intro text plus up to 10 swipeable cards.","headerLabel":"Header","headerImage":"Image","headerText":"Text","headerImageUrl":"Image URL","headerImagePlaceholder":"https://â¦/image.jpg","headerTextPlaceholder":"Header text","bodyLabel":"Body","bodyPlaceholder":"Hi there, book your table at our restaurant â insert variables with the picker.","footerLabel":"Footer","footerPlaceholder":"e.g. Reply STOP to unsubscribe","introLabel":"Intro message","introPlaceholder":"Check our latest offers â insert variables with the picker.","buttonsLabel":"Buttons","addButton":"Add button","buttonType":"Type","buttonTitle":"Button text","buttonTypeQuickReply":"Quick reply","buttonTypeUrl":"Visit website","buttonTypePhone":"Call","buttonUrl":"URL","buttonUrlPlaceholder":"https://â¦","buttonPhone":"Phone","buttonPhonePlaceholder":"+12025551234","buttonCode":"Callback payload","buttonCodePlaceholder":"book?r=â¦&t=â¦","buildUrl":"Build URL","removeButton":"Remove","cardsLabel":"Cards","addCard":"Add card","card":"Card {n}","removeCard":"Remove card","cardTitle":"Title","cardTitlePlaceholder":"e.g. Jazz Night","cardBody":"Description","cardBodyPlaceholder":"e.g. Fri 14 June, 20:00","cardImageUrl":"Image URL","cardImageLabel":"Image","syncButtons":"Copy buttons","syncButtonsHint":"All carousel cards must share the same buttons â same count and types, in the same order.","previewEmpty":"Your WhatsApp message preview will appear here.","approvalNote":"WhatsApp requires every template to be approved. After you save, this template is submitted to WhatsApp for review â you can launch the campaign once it's approved.","errors":{"MEDIA_OR_HEADER_REQUIRED":"Add a header image or header text.","MEDIA_AND_HEADER_CONFLICT":"Use either an image or a text header, not both.","BODY_REQUIRED":"Body text is required.","BODY_TOO_LONG":"Body must be {max} characters or fewer.","FOOTER_TOO_LONG":"Footer must be {max} characters or fewer.","HEADER_TEXT_TOO_LONG":"Header text must be {max} characters or fewer.","INVALID_VARIABLE_PLACEMENT":"Add text around variables â a field can't start or end with a variable, and two variables can't be adjacent.","TOO_MANY_BUTTONS":"Up to {max} buttons allowed.","TOO_MANY_URL_BUTTONS":"Up to {max} link buttons allowed.","BUTTON_TITLE_REQUIRED":"Button text is required.","BUTTON_TITLE_TOO_LONG":"Button text must be {max} characters or fewer.","QUICK_REPLY_PAYLOAD_REQUIRED":"Add a callback payload for the quick reply.","URL_REQUIRED":"Enter a URL.","URL_INVALID":"Enter a valid http(s) URL.","PHONE_REQUIRED":"Enter a phone number.","PHONE_INVALID":"Enter a valid phone number in E.164 format (e.g. +12025551234).","AT_LEAST_1_CARD":"Add at least one card.","MAX_10_CARDS":"Up to {max} cards allowed.","CARD_MEDIA_REQUIRED":"Each card needs an image.","CARD_TITLE_REQUIRED":"Card title is required.","CARD_TITLE_TOO_LONG":"Card title must be {max} characters or fewer.","CARD_BODY_REQUIRED":"Card description is required.","CARD_BODY_TOO_LONG":"Card description must be {max} characters or fewer.","CAROUSEL_BUTTONS_COUNT_MISMATCH":"This card must have the same number of buttons as card 1 ({expected}).","CAROUSEL_BUTTONS_TYPE_MISMATCH":"This card's button types must match card 1 in the same order."}},"whatsappTemplateStatus":{"label":"WhatsApp template","unsubmitted":"Not submitted","pending":"In review","received":"In review","approved":"Approved","rejected":"Rejected","paused":"Paused","disabled":"Disabled","unknown":"Unknown","unsubmittedDesc":"This template hasn't been submitted for review yet. Save the draft to submit it to WhatsApp.","pendingDesc":"WhatsApp is reviewing this template. You can activate the campaign once it's approved.","receivedDesc":"Received by the provider, awaiting WhatsApp review.","approvedDesc":"Approved by WhatsApp â you can activate this campaign.","rejectedDesc":"WhatsApp rejected this template. Edit the content and save to resubmit.","pausedDesc":"WhatsApp paused this template (often due to low quality). Edit and resubmit.","disabledDesc":"This template was permanently disabled by WhatsApp. Create a new template instead.","unknownDesc":"Template status is unavailable.","blockedHint":"This WhatsApp campaign can't be sent until its template is approved."}
1,"personalizationVars":"Available Variables","audienceTitle":"Segment","audienceDescription":"This campaign will be sent to all your restaurant guests with the selected channels enabled.","audienceSegmentHint":"Advanced segment builder is coming soon. Currently campaigns are sent to all eligible contacts.","presetsTitle":"Quick presets","presetsHint":"Pick a starting point.","audienceAllGuests":"All guests","audienceAllGuestsHint":"No filters â every eligible contact will receive this campaign.","audienceAllGuestsInline":"All guests â no filters, every eligible contact.","editFilters":"Edit filters","editFiltersShort":"Edit","openBuilder":"Open builder","clearSegment":"Clear","previewRecipients":"Recipients","recipientsUnit":"guests","tokensUnit":"tokens","tokensUnitShort":"tok","previewCost":"Estimated cost","spentCost":"Spent","previewLoading":"Calculatingâ¦","previewError":"Couldn't calculate. Try again.","previewNeedsChannel":"Pick a channel on step 1 to see the estimate.","viewSegmentInGuestBook":"View these guests in Guest Book","viewSegmentInGuestBookShort":"View in Guest Book","tokenBalance":"Token Balance","balanceTotal":"Total","balanceHeld":"On hold","balanceAvailable":"Available","sendNow":"Send Immediately","sendNowHint":"Campaign will start sending right away","scheduleLater":"Schedule for Later","scheduleLaterHint":"Choose a specific date and time to send","scheduleDate":"Date","scheduleTime":"Time","emptyCampaigns":"No Campaigns Yet","emptyCampaignsHint":"Create your first campaign to start reaching your guests.","emptyAutomations":"No Automations Yet","emptyAutomationsHint":"Automated messages are triggered by guest actions like booking, visiting, or feedback.","deleteConfirmTitle":"Delete Campaign","deleteTriggerTitle":"Delete Automation","deleteConfirmMessage":"Are you sure you want to delete \\"{name}\\"? This action cannot be undone.","statusDraft":"Draft","statusActive":"Active","statusInProgress":"Sending","statusFinished":"Completed","statusCanceled":"Cancelled","statusTesting":"Testing","statusScheduled":"Scheduled","statusFailed":"Failed","statusTrigger":"Trigger","triggerBookingCreated":"Booking Created","triggerBookingReminder":"Booking Reminder","triggerBookingCanceled":"Booking Cancelled","triggerBookingCompleted":"Visit Completed","triggerBirthday":"Birthday","triggerFeedback":"Feedback Request","triggerWinBack":"Win Back","triggerCustom":"Custom Trigger","triggerActive":"Active","triggerInactive":"Inactive","sent":"Sent","sentShort":"Sent","delivered":"Delivered","opened":"Opened","clicked":"Clicked","bounced":"Bounced","undelivered":"Undelivered","spam":"Spam","failed":"Failed","bookings":"Bookings","deliveryRate":"Delivery Rate","openRate":"Open Rate","clickRate":"Click Rate","reportsOverview":"Overview","reportsScopeNote":"Showing your most recent campaigns â older ones aren't included in these totals yet.","reportsTotalCampaigns":"Total Campaigns","reportsTotalSent":"Total Sent","reportsCampaignDetail":"Report","reportsSelectCampaign":"Select a campaignâ¦","reportsSelectPrompt":"Select a campaign above to see its detailed report.","reportsFunnel":"Delivery Funnel","reportsDetailed":"Detailed Breakdown","reportsChannelBreakdown":"Channel Breakdown","reportsComparison":"All Campaigns","reportsColCampaign":"Campaign","reportsColDate":"Date","reportsExportCsv":"Export","reportsExportCampaignCsv":"Export","reportsUniqueTotalHint":"Open/click columns show: unique / total. Rates are based on unique recipients.","reportsTotalLabel":"total {n}","reportsSentLabel":"{n} sent","reportsCampaignsCount":"{n} campaigns","reportsBounced":"Bounced","reportsUndelivered":"Undelivered","reportsSpam":"Spam","reportsFailed":"Failed","reportsEmpty":"No Completed Campaigns","reportsEmptyHint":"Campaign reports will appear here after campaigns finish sending.","reportsFilterEmpty":"No campaigns match these filters","reportsFilterEmptyHint":"Try a different campaign type or channel â or clear the filters.","reportsTypeLabel":"Type","reportsColType":"Type","reportsTypeAll":"All","reportsTypeCampaigns":"Campaigns","reportsT
1ypeAutomations":"Automations","reportsTypeCampaign":"Campaign","reportsTypeAutomation":"Automation","reportsTypeAutomationShort":"Auto","created":"Created","recipients":"recipients","scheduledFor":"Scheduled","sentOfPlanned":"Sent {sent} of {planned}","sendsImmediately":"Sends immediately","sendsImmediatelyShort":"Now","sentOn":"Sent on","sendTiming":"Send timing","saveError":"Failed to save campaign. Please try again.","saveErrorNoSubscription":"Your restaurant doesn't have an active subscription. Activate billing in Administration â Billing to save and send campaigns.","start":"Start","activateMissingContent":"Add message content before starting","activateMissingContentHint":"Missing content for: {channels}. Open the campaign and fill in the message for each selected channel.","activateNoChannels":"Choose at least one channel","activateNoChannelsHint":"Open the campaign and select Email, SMS or WhatsApp before starting.","send":"Send","duplicate":"Duplicate","viewReport":"Report","moreActions":"More actions","searchPlaceholder":"Search campaigns by nameâ¦","searchPlaceholderShort":"Search campaignsâ¦","searchClear":"Clear search","colName":"Campaign","colUpdated":"Last updated","colStatus":"Status","colChannel":"Channels","colSegment":"Recipients","colSchedule":"Date","colActions":"","statsSent":"Sent","statsDelivered":"Delivered","statsOpened":"Opened","triggerUnknown":"Unknown trigger","triggerNoShow":"No-show","triggerPostVisit":"After Visit","triggerInactivity":"Inactivity","triggerNewGuest":"New Guest","createAutomation":"Create automation","editAutomation":"Edit automation","automationsDescription":"Send messages automatically when a guest does something â books, visits, no-shows, leaves feedback or goes quiet.","automationsAlphaTitle":"Automations â Alpha","automationsAlphaHint":"Automations are still in alpha and under active testing. Weâre adding more triggers and conditions â expect changes and please report any issues.","channelEmail":"Email","channelSms":"SMS","channelWhatsapp":"WhatsApp"}`),v={createTitle:"Create automation",editTitle:"Edit automation",step_trigger:"Trigger",step_content:"Channels & Content",step_audience:"Audience",step_review:"Review & Save",step_settings:"Settings",summarySection:"Summary",automationName:"Automation name",automationNamePlaceholder:"e.g. Birthday greetings",pickTrigger:"Pick a trigger",groupScheduled:"Scheduled",groupEvent:"Event-based",typeBirthday:"Birthday",descBirthday:"Fires on the guest's birthday.",typeAnniversary:"Anniversary",descAnniversary:"Fires on the guest's anniversary date.",typeJoined:"Joined",descJoined:"Fires based on when the guest joined your CRM.",typeLastVisit:"Last visit",descLastVisit:"Re-engage guests based on their last visit date.",typeVisits:"Visits count",descVisits:"When a guest reaches a total visits threshold.",typeVisits30:"Visits (30 days)",descVisits30:"Visits in the last 30 days reaches a threshold.",typeCancelations:"Cancelations",descCancelations:"Total cancelations reaches a threshold.",typeSpent:"Spent amount",descSpent:"Total spent reaches a threshold.",typeTotalEvents:"Total events",descTotalEvents:"Total event bookings reaches a threshold.",typeStatusAssigned:"Booking status changed",descStatusAssigned:"Fires when a booking reaches a specific status.",typeTagAssigned:"Tag assigned",descTagAssigned:"Fires when a tag is assigned to a guest.",conditions:"Conditions",when:"When",dateModeToday:"On the day",dateModeBefore:"Before",dateModeAfter:"After",daysSuffix:"days",thresholdLabel:"Threshold",thresholdPlaceholder:"e.g. 5",bookingStatuses:"Booking statuses",statusConfirmed:"Confirmed",statusCanceled:"Cancelled",statusNoShow:"No-show",statusClosed:"Closed",tagsLabel:"Tags",tagsPlaceholder:"Type a tag and press Enter",tagsHint:"Automation fires when any of these tags is assigned.",delayLabel:"Delay after event",minutesSuffix:"minutes",sendTimeLabel:"Send time (local)",sendTimeHint:"Sends within ±30 min of this time.",audienceTitle:"Audience",audienceHint:"All guests matching the trigger condition. Add segment filters to narrow the audience further.",triggerType:"Trigger",activateOnSave:"Activate immediately",activateOnSaveHint:"Once activated, the automation will fire for matching guests. You can pause it anytime.",saveAsDraft:"Save as draft",saveAndActivate:"Save & activate",balanceWarning:"Balance is empty â activation may fail. Top up before activating.",summaryOnTheDay:"Fires on the day",summaryNDaysBefore:"Fires {n} day(s) before",summaryNDaysAfter:"Fires {n} day(s) after",summaryThreshold:"Threshold: {n}",summarySendAt:"Sends at {time} local",summaryDelay:"{n} min delay"},f=JSON.parse(`{"bookingRules":{"managerNotifications":"Manager Notifications","managerNotificationsDesc":"Control how your team gets notified about new and upcoming reservations.","notificationEmail":"Notification
1Email","notificationEmailPlaceholder":"manager{'@'}restaurant.com","notificationEmailHint":"New reservation alerts will be sent here. Separate multiple addresses with commas.","useManagerEmail":"Use manager's email as sender address","useManagerEmailHint":"Guest confirmations will appear from your email instead of noreply{'@'}hostmeapp.com. Guests can reply directly to your team.","notifyPhone":"SMS Notification Phone","notifyPhoneHint":"Receive SMS alerts for new reservations. Leave blank to disable.","minutesToNotify":"Heads-up Before Reservation","minutesToNotifyHint":"Both the email recipient and the SMS phone above receive a reminder this many minutes before each upcoming reservation.","minutesToNotifyZeroHint":"Set to 0 to disable the heads-up notification entirely.","minutesToNotifyTip":"Tip: 30 min for casual dining, 60â120 min for fine dining to allow table prep.","customerReminder":"Guest Confirmation Reminder","customerReminderDesc":"Automatically remind guests to confirm their reservation before arrival. Restaurants using reminders see 30â40% fewer no-shows.","enableReminders":"Send confirmation reminder to guests","enableRemindersHint":"Guests will receive a message asking them to confirm or cancel their reservation.","reminderMinutes":"Send Reminder Before Arrival","reminderMinutesHint":"How far in advance the guest gets the confirmation reminder.","reminderPreset30":"30 min","reminderPreset60":"1 hour","reminderPreset120":"2 hours","reminderPreset1440":"1 day","reminderCustom":"Custom","reminderPreview":"Guest will receive: \\"Reminder â your reservation at {restaurant} is in {time}. Please confirm.\\"","reservationWaitlist":"Reservation Waitlist","reservationWaitlistDesc":"When the requested time has no available slot, the host can add the guest to a waitlist instead of refusing the booking. As soon as a slot frees up, the host can confirm the reservation in one click.","reservationWaitlistNote":"This is different from the walk-in waitlist ({link} tab), which manages guests waiting for a table on-site.","reservationWaitlistEnabled":"Enable reservation waitlist","hostPartySize":"Party Size (Host Bookings)","hostPartySizeDesc":"Set party size limits for reservations created by your staff (phone, walk-in).","onlinePartySizeNote":"Online booking limits are configured in the {link} tab.","partySizeMinMaxError":"Minimum must be less than or equal to maximum","outsideHours":"Booking Outside Operating Hours","outsideHoursDesc":"Let hosts manually create reservations for times when the restaurant is already closed â e.g. 10 PM when you close at 9 PM. Does not affect guests' online booking.","outsideHoursToggle":"Allow booking outside operating hours","minPartySize":"Minimum","maxPartySize":"Maximum","partySizeUnit":"guests","partySizeOnlineNote":"Online booking limits â","partySizeOnlineLink":"Online Booking tab","specialRequests":{"title":"Special Request Options","desc":"Choose which options appear when creating a reservation. Enabled options show in both the host panel and the online booking widget.","groupAccessibility":"Accessibility","groupDietary":"Dietary","groupSeating":"Seating Preferences","groupOther":"Other","allergy":"Allergy Alert","vegetarian":"Vegetarian","event":"Celebration / Special Event","booth":"Booth Seating","table":"Specific Table","highTop":"High Top","highChair":"High Chair Needed","stroller":"Stroller","babyCarrier":"Baby Carrier","wheelchair":"Wheelchair Accessible","vaccination":"Proof of Vaccination / Test","customFieldsTitle":"Custom Fields","customFieldsDesc":"Add your own fields that staff or guests fill in when creating a reservation. Drag to reorder.","customFieldsFlags":"Mark Online to include the field on the online booking form. Mark Featured to surface it above the Special Requests section so guests see it without expanding.","noCustomFields":"No custom fields yet. Add one to collect extra info from guests.","addCustomField":"Add Field","cfDescriptionPlaceholder":"Field name, e.g. Occasion, Promo code","cfTypeText":"Text","cfTypeSwitch":"Switch","cfColDescription":"Description","cfColType":"Type","cfColOnline":"Online","cfOnlineHint":"Show this field on the online booking form for guests","cfColFeatured":"Featured","cfFeaturedHint":"Show this field above the Special Requests section so guests see it without expanding.","cfChangeIcon":"Change icon"},"cancellationReasons":{"title":"Cancellation & Rejection Reasons","desc":"Pre-defined reasons your staff can select when cancelling or rejecting a reservation. The note is included in the notification sent to the guest.","reasonPlaceholder":"Reason name","notePlaceholder":"Note for guest","addReason":"Add Reason","defaultBadge":"System","defaultHint":"System reasons cannot be removed","charCount":"{count}/64","defaults":{"guestRequest":"Guest's Request","noShow":"No-show"}},"noShow":{"title":"No-show Handling","desc":"How long the system waits past the reservation start time before a late guest may be marked as a no-show. Applies to host-created reservations and online bookings alike.","gracePeriod":"Grace peri
1od","gracePeriodWarn":"Set to 0 to disable the grace period â late guests will be eligible for no-show immediately."}},"onlineBooking":{"approvalMode":"Approval Mode","approvalModeDesc":"Control how online reservations are approved. Auto-approve speeds up the process for small parties, while manual review gives your team full control.","autoApproveAll":"Auto-approve all reservations","autoApproveAllHint":"Every online booking is instantly confirmed without staff intervention.","manualFromSize":"Require approval for large parties","manualFromSizeHint":"Parties of this size and above are confirmed by the host. Smaller parties are auto-confirmed.","manualReviewAll":"Manually review all reservations","manualReviewAllHint":"Every online booking is held as a request until your team approves or declines it.","guests":"guests","guestsOrMore":"guests or more","onlinePartySize":"Online Party Size","onlinePartySizeDesc":"Set the minimum and maximum party size guests can select when booking online.","minPartySize":"Minimum","maxPartySize":"Maximum","hostPartySizeNote":"Host/phone booking limits are configured in the {link} tab.","bookingWindow":"Booking Window","bookingWindowDesc":"Define when guests can book online â from the earliest last-minute reservation to how far in advance they can plan.","earliestBooking":"Earliest Booking Notice","notice30":"30 min","notice60":"1 hour","notice120":"2 hours","notice240":"4 hours","notice480":"8 hours","notice1440":"1 day","noticeCustom":"Custom","latestBooking":"Maximum Advance Booking","daysInAdvance":"days","cutoffTime":"Daily Cutoff Time","cutoffDisabled":"Disabled","cutoffTimeHint":"After this time, no same-day online bookings are accepted. Leave disabled to allow bookings until closing.","bookingForm":"Booking Form","bookingFormDesc":"Control which optional fields and choices appear on the online booking form. These settings affect only the online widget â the host reservation form in the admin panel is unaffected.","bookingFormCrossLink":"Built-in special-request checkboxes and custom fields are configured in {link}.","showNotes":"Show notes field","showNotesHint":"Display the Notes field on the online booking form so guests can leave a free-text comment with their reservation.","allowChooseArea":"Allow guests to choose seating area","allowChooseAreaHint":"Guests see available areas (patio, main, bar, etc.) and can pick one. While it's off, the area list is not exposed to the widget or to connected integrations.","allowChooseTable":"Allow guests to choose a table","allowChooseTableHint":"Guests see the floor plan and can select a specific table.","requireTableSelection":"Require table selection","requireTableSelectionHint":"Guests must choose a table to complete their booking. When off, table selection is optional.","coversAvailable":"Covers Available","coversAvailableDesc":"Maximum number of covers (seats) available for online reservations at any given time. Toggle unlimited if you don't want to cap online capacity.","covers":"covers","approvalAreasTitle":"Areas that always need approval","approvalAreasHint":"Bookings in these areas are held for a host to confirm, whatever the party size â including when everything else is auto-approved.","approvalAreasNeedPicker":"Guests aren't asked to pick an area when booking online, so those bookings arrive without one and this rule won't apply to them. Turn on âAllow guests to choose seating areaâ under {link}.","summaryAutoAll":"Now: every online booking is confirmed automatically.","summaryAutoExceptAreas":"Now: bookings are confirmed automatically, except in {areas} â those wait for a host.","summaryFromSize":"Now: bookings of {size} guests or more wait for a host; smaller ones are confirmed automatically.","summaryFromSizeAndAreas":"Now: bookings of {size} guests or more wait for a host, as does anything in {areas}. Everything else is automatic.","summaryManualAll":"Now: every online booking waits for a host to confirm it."},"depositsFees":{"enableFeeCollection":"Enable Fee Collection","enableFeeCollectionDesc":"Enable charging deposits or cancellation fees for reservations. Requires a connected payment provider.","enableFeeCollectionLabel":"Collect fees for reservations","providerNotConnected":"No payment provider connected. Go to {link}
1 to set up a payment provider before enabling fee collection.","providerConnected":"Payment provider connected","integrationsLink":"Integrations","rules":"Rules","rulesDesc":"Choose whether to collect an upfront deposit at booking time or charge a cancellation fee if the guest cancels after the deadline.","feeMode":"Fee mode","deposit":"Deposit","depositHint":"Guest pays at the time the reservation is made. Refundable based on your refund policy.","cancellationFee":"Cancellation Fee","cancellationFeeHint":"Guest is charged only if they cancel after the cancellation period has passed.","refundPercent":"Default refund percentage","refundPercentHint":"Percentage of deposit refunded when a reservation is cancelled by staff.","cancellationPeriod":"Cancellation period","useSpecificTime":"Set by specific time of day","hoursLabel":"Hours before reservation","hoursBeforeReservation":"Hours before reservation","hoursUnit":"hours","hoursHint":"Guest will be charged if cancellation occurs within this many hours before the reservation.","timeLabel":"Cutoff time on reservation day","timeHint":"Guest will be charged if cancellation occurs after this time on the day of the reservation.","feesByGroup":"Fees by Group Size","feesByGroupDesc":"Set the fee amount for each group size. Larger groups can have different deposit or fee amounts.","groupSize":"Group size","amount":"Amount","noRules":"No fee rules configured yet.","addRule":"Add fee rule","paymentTimeoutTitle":"Payment Timeout","paymentTimeoutDesc":"When a deposit or pre-authorisation is required, automatically cancel the reservation if the guest doesn't complete payment in time. Optionally send a reminder before the cancellation kicks in.","autoCancelLabel":"Auto-cancel after","autoCancelHint":"Time from booking creation. If the guest hasn't paid by then, the reservation is cancelled automatically.","paymentReminderLabel":"Send payment reminder","paymentReminderHint":"Time from booking creation when a reminder is sent. Set to 0 to disable. Must be smaller than the auto-cancel window.","paymentTimeoutWarning":"The reminder fires at or after the auto-cancel deadline â guests will never receive it. Reduce the reminder value below the auto-cancel value.","minutesUnit":"min","paymentMethods":"Payment Methods","paymentMethodsDesc":"Choose which payment methods are available when collecting deposits or fees for reservations.","cashPayment":"Cash","cashPaymentHint":"Accept cash payments at the restaurant.","cardPayment":"Card","cardPaymentHint":"Accept card payments online. Requires a connected payment provider.","invoicePayment":"Invoice","invoicePaymentHint":"Send an invoice to the guest. Requires a connected payment provider.","requiresProvider":"Connect a payment provider in {link} to enable this method."},"waitlist":{"autoCall":"Auto-Call & Table Assignment","autoCallDesc":"Configure how guests are notified and seated when a table becomes available. Auto-call sends a notification to the next guest in line; auto-assignment picks the best table automatically.","autoCallGuest":"Auto-call guest when table is available","autoCallGuestHint":"Automatically notify the next guest in the queue when a suitable table opens up.","autoTableAssignment":"Auto-assign tables (waitlist)","autoTableAssignmentHint":"When a waitlist guest is called, the system pre-picks a table for them. Enabling this disables manual auto-call. Independent from the booking-time auto-assign setting in {link}.","autoCallCancelDelay":"Auto-cancel if no response","autoCallCancelDelayHint":"Automatically cancel the call and move to the next guest if no response within the specified time.","autoCallCancelDelayTime":"Cancel after","waitTime":"Wait Time Estimation","waitTimeDesc":"Choose how estimated wait times are calculated for guests on the waitlist. The estimate is shown to guests and helps set expectations.","etaMethod":"Estimation method","etaAverage":"Average wait time","etaAverageHint":"Calculate wait time based on the average turnover from recent history.","etaTableAvailability":"Based on table availability","etaTableAvailabilityHint":"Calculate wait time based on upcoming table availability and party size.","lookBackWindow":"Average wait time timeframe","lookBackWindowHint":"How far back to look when calculating the average wait time.","adjustWaitTime":"Adjust wait time on table assignment","adjustWaitTimeHint":"Automatically recalculate estimated wait times for remaining guests when a table is assigned.","holdSettings":"Hold Settings","holdSettingsDesc":"Control how long guests can be placed on hold and whether hosts can manually hold waitlist entr
1ies.","enableManualHold":"Allow manual hold","enableManualHoldHint":"Let hosts manually place a waitlist entry on hold (e.g., while the table is being prepared).","maximumHoldTime":"Maximum hold time","maximumHoldTimeHint":"Maximum minutes a guest can stay on hold before being automatically released back to the queue.","workflow":"Workflow Options","workflowDesc":"Customise the waitlist creation workflow for your hosts.","showSpecialRequests":"Show special requests in creation workflow","showSpecialRequestsHint":"Display special request options (accessibility, seating preferences, etc.) when adding a new guest to the waitlist."},"statuses":{"preSeatingTitle":"Pre-Seating Statuses","preSeatingDesc":"Statuses a booking passes through before the guest is physically seated. Helps the host see which parties are ready to be seated.","customTableTitle":"Custom Table Statuses","customTableDesc":"Dining-progress states for seated parties (starter, main course, dessert, bill).","customTableDescProgress":"The Duration % nudges the estimated meal completion forward â clear it to leave the booking's expected end time untouched.","grandeUpgrade":"Adding new statuses and deleting custom ones is available on the Grande plan. You can still edit colours, applicability, order, and active state for the existing statuses below.","noPreSeating":"No pre-seating statuses defined.","noTableStates":"No custom table statuses defined.","addStatus":"Add status","colTitle":"Title","colReservation":"Reservation","colWaiting":"Waitlist","colActive":"Active","colDuration":"Duration","appliesToReservation":"Applies to reservations","appliesToWaiting":"Applies to waitlist","colorPicker":"Pick status colour","titlePlaceholder":"Status name","dragToReorder":"Drag to reorder","defaults":{"called":"Called","checkIn":"Check-in","partiallyArrived":"Partially arrived","late":"Late","drinks":"Drinks","starters":"Starters","mainCourse":"Main course","dessert":"Dessert","billDropped":"Bill dropped","paidBill":"Paid bill"}}}`),w=JSON.parse(`{"cancelSubscription":{"backToBilling":"Back to Billing","heroTitle":"We're sorry to see you go","heroDesc":"Tell us why you're cancelling â your answer helps us focus on what matters most for restaurants like yours.","steps":{"reason":"Reason","feedback":"Feedback"},"reason":{"title":"Why are you cancelling?","messageLabel":"Anything else you'd like to add? (optional)","messagePlaceholder":"Share more context â what would have made the difference?","vendorLabel":"Which platform are you switching to?","vendorPlaceholder":"Select a platformâ¦","options":{"TooExpensive":{"label":"Too expensive","hint":"Hostme is meant to pay for itself in saved phone-time and no-show recovery. If the maths isn't working, we'd love to know which plan or add-on broke the budget."},"MissingFeatures":{"label":"Missing features","hint":"Tell us what was missing â we ship customer-requested features every release."},"TechnicalIssues":{"label":"Technical issues","hint":"Crashes, slow pages, syncing problems â anything specific helps us reproduce and fix it."},"NotUsingApp":{"label":"Not using the app enough","hint":"Onboarding may not have stuck. We can offer a free 1-on-1 walkthrough if you'd like."},"SwitchingToAnotherApp":{"label":"Switching to another platform","hint":"We'd love to know which one and what tipped the decision."},"ChangePlan":{"label":"I just want to change my plan","hint":"You don't need to cancel â you can switch plans directly. We'll take you to the plan picker."},"SeasonalBusiness":{"label":"Seasonal closure","hint":""},"CloseOfBusiness":{"label":"Closing the business","hint":""},"Mistake":{"label":"I subscribed by mistake","hint":""}},"vendors":{"OpenTable":"OpenTable","Tock":"Tock","Resy":"Resy","Toast":"Toast","Sevenrooms":"SevenRooms","WaitlistMe":"Waitlist Me","Eat":"Eat App","Yelp":"Yelp Reservations","Tablein":"Tablein","Wisely":"Wisely","Other":"Other"}},"aftermath":{"title":"What happens 24 hours after you cancel","bullets":{"onlineBookings":"Online bookings (widget, guest app, deep links) will be disabled.","hostPanel":"Your host panel will stop offering available slots â new bookings cannot be taken.","guestApp":"Your restaurant will be removed from the Hostme guest-app search.","googleIntegrations":"Google Reserve and Google Business Messages integrations will be removed.","integrations":"All third-party integrations (POS, marketing, payments) will be disabled.","addOns":"Active add-ons (SMS, WhatsApp, paid messaging) will be cancelled and stop billing.","reactivate":"You can reactivate any time before the peri
1od ends â {count} day left. | You can reactivate any time before the period ends â {count} days left."}},"feedback":{"heroTitle":"One more thing â how was Hostme for you?","heroDesc":"Your honest feedback shapes the product. This is the last step.","title":"How would you describe your experience?","desc":"Pick the option that best matches your time with Hostme.","messageLabel":"What stood out â good or bad? (optional)","messagePlaceholder":"Specific moments, features, or interactions help the team the most.","options":{"MetExpectations":{"label":"It met my expectations","hint":"Hostme did what we promised â even though you're leaving, the product worked."},"DidntMeetExpectations":{"label":"It didn't meet my expectations","hint":"Something was off â features, support, performance, or fit."},"DidntUseTheApp":{"label":"I didn't really use the app","hint":"Onboarding, time, or priorities got in the way before you could try it properly."}}},"cta":{"continue":"Continue â","browsePlans":"Browse plans â","backToReason":"Back","cancelFinal":"Cancel subscription","dismiss":"Cancel"}},"reservations":{"title":"Reservations","bookingRules":"Booking Rules","onlineBooking":"Online Booking","depositsFees":"Deposits & Fees","waitlist":"Waitlist","statusesWorkflows":"Statuses & Workflows"},"floorTables":{"title":"Floor & Tables","floorPlans":"Floor Plans","tableRules":"Table Rules","availability":"Availability","coverPacing":"Cover Pacing","blockedTables":"Blocked Tables"},"ordering":{"title":"Ordering","menuBuilder":"Menu Builder","products":"Products","categories":"Categories","modifiers":"Modifiers","settings":"Settings"},"guests":{"title":"Guests","guestBook":"Guest Book","tagsSegments":"Tags","settings":"Settings"},"messaging":{"title":"Messaging","channels":"Channels","templates":"Templates","emailCustomization":"Email Customisation","branding":"Branding","policies":"Policies"},"marketing":{"title":"Campaigns","campaigns":"Campaigns","events":"Events"},"events":{"title":"Events"},"onlinePresence":{"title":"Online Presence","publicPage":"Public Page","widgetGenerator":"Widget Generator","customizationTab":"Customisation","partnerNetworks":"Partner Networks","publicLinks":"Public Links","publicLinksDesc":"Your restaurant's public page URL and website link.","publicPageUrl":"Public Page URL","website":"Website","websitePlaceholder":"https://www.yourrestaurant.com","visibility":"Visibility","visibilityDesc":"Control whether your restaurant appears in Hostme search results.","showOnHostme":"Show on Hostme","showOnHostmeHint":"When enabled, your restaurant will appear in Hostme search and directory.","profileInfo":"Profile Info","profileInfoDesc":"Basic information about your restaurant that guests will see.","description":"Description","descriptionPlaceholder":"Tell guests about your restaurantâ¦","priceRange":"Price Range","selectPriceRange":"Select price range","priceRangeOptions":{"budget":"$ â Budget-friendly","moderate":"$$ â Moderate","upscale":"$$$ â Upscale","fineDining":"$$$$ â Fine Dining"},"categoryLabels":{"bbq":"BBQ","breakfastBrunch":"Breakfast/Brunch","bar":"Bar","cafe":"Cafe","chinese":"Chinese","creativeCocktails":"Creative Cocktails","desserts":"Desserts","family":"Family","farmToTable":"Farm-To-Table","fish":"Fish","french":"French","global":"Global","indian":"Indian","italian":"Italian","japaneseSushi":"Japanese/Sushi","liveMusic":"Live Music","mediterranean":"Mediterranean","mexican":"Mexican","pho":"Pho","pizza":"Pizza","ramen":"Ramen","romantic":"Romantic","seafood":"Seafood","southern":"Southern","spanishTapas":"Spanish/Tapas","steak":"Steak","thai":"Thai","vegetarian":"Vegetarian","wings":"Wings"},"cuisineLabels":{"american":"American","asian":"Asian","chinese":"Chinese","french":"French","indian":"Indian","italian":"Italian","japanese":"Japanese","korean":"Korean","mediterranean":"Mediterranean","mexican":"Mexican","middleEastern":"Middle Eastern","seafood":"Seafood","southern":"Southern","spanish":"Spanish","thai":"Thai","vietnamese":"Vietnamese"},"categories":"Categories","categoriesDesc":"Select the categories that best describe your restaurant.","cuisine":"Cuisine","cuisineDesc":"Select the cuisines you serve.","photos":"Photos","photosDesc":"Add photos to showcase your restaurant to potential guests.","uploadPhotos":"Upload Photos","brandingImages":"Branding Images","brandingImagesDesc":"Your logo and promotional image for widgets and public pages.","logo":"Logo","uploadLogo":"Upload Logo","promoImage":"Promotional Image","uploadPromoImage":"Upload Image","socialMedia":"Social Media","socialMediaDesc":"Add your social media links so guests can follow you.","importData":"Import Data","importDataDesc":"Link external services to import reviews and other data.","foursquarePlaceId":"Foursquare Place ID","foursquarePlaceholder":"e.g. 4b7a1â¦","googlePlaceId":"Google Place ID","googlePlaceholder":"e.g. ChIJâ¦","widgetsTitle":"Booking widgets","widgetsDesc":"Turn on the interactive reservation and waitlist widgets on your public page.","widgets":{"reserveDesc":"Show the reservation widget so guests can book a table right from your public page.","waitlistDesc":"Show the waitlist widget so guests can join the queue when you're fully booked."},"servicesTitle":"Services","servicesDesc":"Mark the amenities your restaurant offers â they appear as icons on your public page.","services":{"reserve":"Reservations","waitlist":"Waitlist","delivery":"Delivery","takeout":"Takeaway","outdoor":"Outdoor Seating","wifi":"Free Wi-Fi","kids":"Kid Friendly","cash":"Cash Only","cards":"Accepts Cards","vegetarian":"Vegetarian Options","businesslunch":"Business Lunch","entertainment":"Entertainment","dresscode":"Dress Code"}
1,"widget":{"type":"Widget Type","typeDesc":"Choose the type of booking widget for your website.","reservation":"Reservation","reservationDesc":"Allow guests to book a table directly from your website.","waitlist":"Waitlist","waitlistDesc":"Let guests join your waitlist remotely.","delivery":"Delivery / Takeaway","deliveryDesc":"Accept online orders for delivery or collection.","settings":"Widget Settings","settingsDesc":"Configure layout and behaviour options for the widget.","layout":"Layout","layoutHorizontal":"Horizontal","layoutVertical":"Vertical","layoutAdaptive":"Adaptive","layoutButton":"Button only","timeAppearance":"Time appearance","timeCalendar":"Calendar format","timeHourly":"Hourly selection","timePeriods":"Periods of the day","timeHidden":"Hidden","preferredGuests":"Preferred guests count","adaptiveLayout":"Adaptive layout","adaptiveButtonDesc":"Stretches the button to fill the width of its container.","advancedCustomization":"Advanced Customisation","colorScheme":"Colour scheme","schemeDark":"Dark","schemeLight":"Light","language":"Language","guestRequired":"Guest selection required","guestRequiredDesc":"Guests must select the number of people before proceeding.","dateRequired":"Date selection required","dateRequiredDesc":"Guests must pick a date before proceeding.","timeRequired":"Time selection required","timeRequiredDesc":"Guests must pick a time slot before proceeding.","hideHeader":"Hide header","hideHeaderDesc":"Remove the widget header with the restaurant name and logo.","multiRestaurants":"Multiple restaurants","multiRestaurantsDesc":"Let guests choose from several of your locations in one widget.","selectRestaurants":"Select restaurants","restaurantsSelected":"{count} restaurants in widget","inPlace":"In Place","inPlaceDesc":"Guests complete reservation on your website instead of opening a separate page.","waitTime":"Wait time","waitTimeDesc":"Show the current estimated wait time to guests.","embedStyle":"Embed Style","embedStyleDesc":"Choose how to embed the widget on your website.","styleWidget":"Widget","styleButton":"Button","styleLink":"Link","width":"Width","height":"Height","buttonText":"Button Text","defaultButtonText":"Book a Table","linkText":"Link Text","defaultLinkText":"Book a Table","defaultLinkTextWaitlist":"Get in Line","defaultLinkTextDelivery":"Order Online","buttonColor":"Button Colour","preview":"Preview","embedCode":"Embed Code","directLinks":"Direct Links","directLinksDesc":"Copy and paste the link to redirect from your website or social media. Use UTM tags to track sources in Hostme analytics.","directLinksHint":"Use UTM tags to track traffic sources in Hostme analytics.","brandCallout":"Want to change the accent colour or hide the Hostme logo?","brandCalloutLink":"Go to Brand Customisation â","reservationLink":"Direct link to reservation page","waitlistLink":"Direct link to waitlist page","waitlistKioskLink":"Direct link to waitlist page (kiosk mode)","deliveryLink":"Direct link to delivery/collection page"},"customization":{"brandColor":"Brand Colour","brandColorDesc":"Choose a primary colour for your booking widgets and guest-facing pages.","logoInWidgets":"Hostme Logo","logoInWidgetsDesc":"Control whether the Hostme branding logo appears in your booking widgets.","showLogo":"Show Hostme Logo","showLogoHint":"Display the \\"Powered by Hostme\\" logo in reservation and waitlist widgets.","guestNote":"Guest Reservation Note","guestNoteDesc":"A message displayed to guests when they make a reservation.","guestNotePlaceholder":"e.g. Please note our cancellation policyâ¦","guestNoteHint":"This note appears on the reservation confirmation page."},"partners":{"googleReserve":"Reserve with Google","googleReserveDesc":"Allow guests to book directly from Google Search and Maps.","googleWaitlist":"Google Waitlist","googleWaitlistDesc":"Let guests join your waitlist from Google Search and Maps.","hostmeNetwork":"Hostme Network","hostmeNetworkDesc":"List your restaurant on the Hostme booking network and mobile app.","yandexEda":"Yandex Eats","yandexEdaDesc":"Connect to Yandex's reservation system â your restaurant becomes bookable online across every Yandex surface: Eats, Maps, Search, Go and Alice AI. A Yandex fee of â½79 per seated guest applies on top.","comingSoon":"Coming soon","saveError":"Couldn't save â please try again.","googleSyncNote":"Changes can take up to 24 h to take effect â Google re-checks your address, phone and other details first. There's no live status to show here.","googleDisableNote":"Google reservations won't stop instantly. To stop taking online bookings right now, use {link}.","yandexConfigure":"Configure credentials","yandexDisconnectTitle":"Disconnect Yandex?","yandexDisconnectMessage":"This removes the Yandex integration and its credentials. You can reconnect later, but you'll need to enter the credentials again.","yandexDisconnectConfirm":"Disconnect","verificationRequired":"Verification Required","verificationRequiredDesc":"Your restaurant needs to be verified before you can enable partner network integrations. Contact support for verification.","howItWorks":"How
1it works","howItWorksDesc":"Partner networks connect your restaurant with major platforms. When enabled, guests can discover and book your restaurant directly from Google, Hostme app, and other services. Changes are saved automatically."}},"analytics":{"title":"Analytics","overview":"Overview","reservations":"Reservations","noShows":"No-shows","waitlist":"Waitlist","tables":"Tables","guests":"Guests","customRequest":"Custom","orders":"Orders"},"settings":{"title":"Settings","restaurant":"Restaurant","interface":"Interface"},"integrations":{"title":"Integrations","connected":"Connected","pos":"POS Systems","payments":"Payments","thirdParty":"Third-Party Apps","channels":"Channels"},"administration":{"title":"Administration","restaurants":"Restaurants","team":"Team","billing":"Billing","activityLog":"Activity Log"}}`),k={timeFormat:"Time Format",timeFormatDesc:"Choose how times are displayed throughout the admin panel â all time pickers, schedules, and reports will update automatically.",timeFormat12h:"12-hour",timeFormat24h:"24-hour",timeFormatExample24:"Example: 14:30, 09:00",timeFormatExample12:"Example: 2:30 PM, 9:00 AM",restaurant:{info:"Restaurant Info",infoDesc:"Basic information about your restaurant â name, contact details, and website.",name:"Restaurant Name",phone:"Phone Number",website:"Website",location:"Location",locationDesc:"Your restaurant's physical address and timezone.",address:"Address",city:"City",state:"County / Region",zip:"Postcode",country:"Country",t
1imezone:"Timezone",regional:"Regional Settings",regionalDesc:"Language and currency settings for your restaurant.",language:"Default Language",languageHint:"Language used for guest-facing communications and widgets.",currency:"Currency",currencyHint:"Currency used for deposits, fees, ordering, and financial reports."},interface:{workflowShortcuts:"Workflow Shortcuts",workflowShortcutsDesc:"Speed up common actions by skipping confirmation steps and automating repetitive workflows.",skipConfirmDialog:"Skip confirmation dialogue boxes",skipConfirmDialogDesc:'Bypass "Are you sure?" prompts when changing reservation statuses.',skipBookWizard:"Quick walk-in seating",skipBookWizardDesc:"Seat a guest who arrives without a reservation in one tap â no name or phone to enter.",skipGroupSizeStep:"Skip group size step",skipGroupSizeStepDesc:"Automatically use a default group size instead of asking every time.",defaultGroupSize:"Default group size",autocloseSeated:"Auto-close seated reservations",autocloseSeatedDesc:"Automatically close reservations once guests are seated.",noteDisplay:"Default Note Display",noteDisplayDesc:"Choose which type of notes are shown on reservation cards in the main view.",noteType:"Note type to display",noteSpecialRequests:"Special requests",noteInternalNotes:"Internal notes",noteGuestNotes:"Guest notes",moduleVisibility:"Module Visibility",moduleVisibilityDesc:"Hide panels you don't use to simplify the navigation sidebar.",hideTablesPanel:"Hide Tables panel",hideWaitlistPanel:"Hide Waitlist panel",hideReservationPanel:"Hide Reservations panel",hideTimelinePanel:"Hide Timeline panel",hideServersPanel:"Hide Server Management panel",hideGuestbookPanel:"Hide Guestbook panel",chatSupport:"Support",chatSupportDesc:"Configure in-app support chat availability.",disableChatSupport:"Disable chat support",disableChatSupportDesc:"Hide the in-app support chat widget for all users except the owner.",onboarding:"Getting Started checklist",onboardingDesc:"Show or hide the onboarding tile and modal on the Dashboard.",onboardingShow:"Show on Dashboard",onboardingShowDesc:"When enabled, a Getting Started tile appears on the Dashboard until all setup steps are complete.",onboardingSaveError:"Couldn't update your preference. Please try again.",hostPanelVersionTitle:"Host Panel version",hostPanelVersionSectionDesc:"Choose which version of the operational host panel your staff use.",hostPanelRestaurantVersion:"Restaurant version",hostPanelRestaurantVersionDesc:"The default for all staff and every device in this restaurant.",hostPanelThisDevice:"This device only",hostPanelThisDeviceDesc:"Try another version on your device without moving the rest of the staff off the restaurant version â e.g. a manager previewing v2.",overrideActive:"This device overrides the restaurant version.",followRestaurantDefault:"Follow restaurant version",versionModalTitle:"Switch the restaurant's Host Panel version?",versionModalBody:"Switching the restaurant to Version {version} affects all staff and every device in this restaurant. Push notifications and email links will now point to the selected version of the panel.",versionModalDeviceHint:"An individual device can still override the version for itself with âThis device onlyâ â that won't affect anyone else.",versionModalConfirm:"Switch version",guestAppVersion:"Guest App",guestAppVersionDesc:"The guest-facing experience (Restogram).",widgetVersion:"Booking Widget",widgetVersionDesc:"The embeddable booking widget.",versionComingSoon:"Coming soon",adminVersionTitle:"Classic admin",adminVersionSectionDesc:"Your restaurant moved here from the previous version of the admin. If you need it back for a while, you can return to it â the old admin stays available until the end of the year.",adminVersionThisDevice:"This device only",adminVersionThisDeviceDesc:"The rest of your team stays in the new admin. Next time you open the new admin, this device comes back to it too.",adminVersionSwitchAction:"Open the classic admin",adminVersionDirectLink:"Direct link: {link}",adminVersionModalTitle:"Go back to the classic admin?",adminVersionModalBody:"While you work there, links from the Host Panel on this device will open the classic admin too.",adminVersionModalConfirm:"Go to the classic admin",adminVersionModalHint:"Only this device changes, and only until you open the new admin again â after that, everything leads back here.",panelPrefsV2:"Panel preferences (v2)",panelPrefsV2Desc:"Restaurant-wide host panel settings introduced in version 2.",panelPrefsV2Placeholder:"Version 2 host panel settings will appear here once they move from the panel into admin."}},S=JSON.parse(`{"floorPlans":{"title":"Floor Plans","description":"Manage your restaurant's floor plans. Each floor plan represents a physical area with tables and sections.","noFloors":"No floor plans yet","noFloorsHint":"Create your first floor plan to start arranging tables.","addFloor":"Add Floor Plan","editFloor":"Rename floor plan","openBuilder":"Open in builder","floorName":"Floor name","floorNamePlaceholder":"Main Dining Room","tablesCount":"{count} tables","tablesOnlineSuffix":"{online} online","coversCount":"{count} covers","online":"Enabled","offline":"Disabled","areas":"Areas","areasTitle":"Seating Areas","areasDescription":"Define seating areas (Patio, Bar, Gardenâ¦) you can later assign tables to in the floor-plan builder. Counts are summed across all floors.","areasRenameHint":"Renaming an area keeps every table assignment: the new name is applied across all floor plans, schedules and open bookings automatically.","noAreas":"No areas defined","addArea":"Add area","editArea":"Rename area","deleteArea":"Delete area","areaDuplicate":"An area
1with that name already exists.","areaSaveError":"Couldn't save the area. Please try again.","areaDeleteError":"Couldn't delete the area. Please try again.","areaServerError":"The server couldn't complete this. Try again later or contact support.","floorDuplicate":"A floor plan with that name already exists.","floorSaveError":"Couldn't save the floor plan. Please try again.","floorDeleteError":"Couldn't delete the floor plan. Please try again.","floorForbidden":"You don't have permission to change floor plans for this restaurant.","floorServerError":"The server couldn't complete this. Try again later or contact support.","areaConfirmDelete":"Delete area \\"{name}\\"? Its {tables} table(s) will become unassigned across all floor plans, and the area will be removed from booking-approval rules.","areaName":"Area name","areaNamePlaceholder":"Patio","deleteFloor":"Delete floor plan","floorConfirmDelete":"Delete floor plan \\"{name}\\"? All tables and the saved canvas layout will be lost. This action cannot be undone.","activateConflictTitle":"Table numbers in use","activateConflictMsg":"{floors} already use table {numbers}. Numbers must be unique across active floors â activating â{target}â will deactivate {floors}.","activateSwap":"Deactivate & activate","deleteFloorConfirm":"Are you sure? This will remove the floor plan and all its tables.","create":"Create","areaColor":"Area colour","floorDeleteBooked":"Table {tables} â active bookings: {count}. Deleting the plan leaves them without a table. | Tables with active bookings: {tables} ({count} in total). Deleting the plan leaves them without a table.","checkingBookings":"Checking bookingsâ¦","offlineWithBookingsTitle":"Guests are booked on this plan","offlineWithBookingsBody":"Switching «{name}» off takes its tables out of service, and these bookings are left without one. You can switch it back on at any time.","offlineWithBookingsConfirm":"Switch off anyway"},"tableRules":{"title":"Table Rules","description":"Configure table combination rules that determine how tables can be joined together for larger parties.","combinationsTitle":"Table Combinations","combinationsDesc":"Define which tables can be combined and the resulting capacity.","noCombinations":"No table combinations defined","noCombinationsHint":"Table combinations allow you to merge adjacent tables for larger groups.","onlyPreset":"Only preset combinations","onlyPresetHint":"When enabled, only the predefined combinations below are allowed. Otherwise, any adjacent tables can be combined.","addCombination":"Add Combination","tables":"Tables","minCovers":"Min covers","maxCovers":"Max covers","removeCombination":"Remove","turnaroundTitle":"Duration by party size","turnaroundDesc":"How long a reservation occupies a table, by party size. Larger groups typically stay longer. Uses the first matching rule.","turnoverByGroup":"Duration by party size","turnoverByGroupHint":"How long a reservation occupies a table, by party size. Larger groups typically stay longer. Uses the first matching rule.","holdTime":"Hold time by party size","holdTimeHint":"How long an assigned table is held in the âUpcoming reservationâ state before the booking starts, configured by party size. Uses the first matching rule.","holdMinutes":"Hold (minutes)","partySize":"Party size","duration":"Duration","addRow":"Add rule","seatingPolicy":"Seating Policy","seatingPolicyDesc":"Rules that govern how guests are seated â reservations, walk-ins, and waitlist alike.","autoTableAssignment":"Auto-assign tables for new bookings","autoTableAssignmentHint":"When a reservation is created or a walk-in is seated, the system suggests the best-fit table based on party size and availability. The host can always override. Applies to bookings and walk-ins.","autoTableAssignmentWaitlistNote":"The waitlist has its own auto-assign toggle:","autoTableAssignmentWaitlistLink":"open Waitlist settingsââ","seatingPolicyConflict":"Auto-assign and seating without a table canât both be on â if guests can be seated without a table, the system has nothing to auto-assign. Turning one on will turn the other off.","seatWithoutTable":"Allow seating without table","seatWithoutTableHint":"Guests can be seated even when no specific table is assigned (useful for bar/counter areas or quick-turn walk-ins).","trackCreators":"Track creators / editors","trackCreatorsHint":"When set to Optional or Required, the system keeps a history of who created or edited each party. The information is shown on the party card.","trackCreatorsOff":"Off","trackCreatorsOptional":"Optional","trackCreatorsRequired":"Required","serverRotation":"Server Rotation","serverRotationDesc":"Control how servers are assigned to new parties. Auto-rotation distributes seating evenly.","serverRotationFutureNote":"Server roster and section assignments will be configured in a dedicated Server Management area (coming soon).","manualServerAssignment":"Manual server assignment only","manualServerAssignmentHint":"Disable auto-rotation so the host manually selects a server for each party.","rotationRule":"Rotation strategy","rotationLastSeated":"Last seated time","rotationLastSeatedHint":"Servers whose last seated table in their section was the longest time ago.","rotationLowestParties":"Lowest number of parties","rotationLowestPartiesHint":"Servers with the lowest number of seated parties for that day.","rotationLowestTables":"Lowest number of tables","rotationLowestTablesHint":"Servers with the lowest number of tables assigned to them for that day.","rotationLowestGuests":"Lowest number of guests at a given time","rotationLowestGuestsHint":"Servers who have the lowest number of people seated at that time.","rotationAlphabetical":"Alphabetical order","rotationAlphabeticalHint":"Servers are picked in alphabetical order by name.","noServerSections":"Disable server sections","noServerSectionsHint":"Treat the entire floor as one zone â no per-section server assignment.","tableStatusWorkflow":"Table Status Workflow","tableStatusWorkflowDesc":"Fine-tune how table statuses behave during the dining experience.","groupSizeValidation":"Validate group size","groupSizeValidationHint":"Prevent seating a party at a table that doesn't match the group size range.","syncByCourse":"Sync status by course","syncByCourseHint":"Automatically advance table status as each course is served.","dontSyncStates":"Don't sync table states","dontSyncStatesHint":"Keep table states independent â staff must update them manually."},"availability":{"title":"Availability Schedule","description":"Set the hours when your restaurant accepts reservations. You can configure different hours for each day of the week.","operatingHoursTitle":"Operating Hours","operatingHoursDesc":"When the restaurant is physically open. Used as the upper bound for online reservation slots, walk-ins, and the public widget.","scheduleTitle":"Online Booking Hours","scheduleDesc":"When guests can book online (widget, Google Reserve). Usually narrower than the restaurant's operating hours.","closuresTitle":"Online booking exceptions","closuresDesc":"Specific dates when online bookings are taken on different hours â or not taken at all. Holidays, private events, short days. Does not change operating hours: the host can still seat guests and book by hand.","noClosures":"No exceptions set","addClosure":"Add exception","removeClosure":"Remove","outdatedBadge":"Expired","repeatYearly":"Repeat yearly","restrictionTimeSlots":"Booking intervals","restrictionAddTimeSlot":"Add booking interval","restrictionAllDay":"Bookings not taken all day","dayPlaceholder":"DD","closed":"Closed","notBookable":"Not bookable","addInterval":"Add time slot","removeInterval":"Remove","applyToAll":"Apply to all days","applyToAllShort":"Apply to all","applyToAllHint":"C
1opy these intervals to every weekday","slots":{"title":"Booking slots","manage":"Choose which slots guests can book","hint":"Turn off slots you don't want available for online booking.","summaryAll":"All {n} slots available","summarySome":"{n} of {total} available","enableAll":"Enable all","loading":"Loading slotsâ¦","error":"Couldn't load slots.","retry":"Retry","empty":"No slots for this day."},"exceptionsTitle":"Special Periods","exceptionsDesc":"Override the regular schedule for holidays, special events, or seasonal changes.","noExceptions":"No special periods defined","addException":"Add Special Period","exceptionName":"Period name","exceptionNamePlaceholder":"Holiday hours","dateRange":"Date range","from":"From","to":"To","removeException":"Remove","dayNames":{"0":"Sunday","1":"Monday","2":"Tuesday","3":"Wednesday","4":"Thursday","5":"Friday","6":"Saturday"}},"coverPacing":{"title":"Cover Pacing","slotSize":"Slot size","slotSizeHint":"The time step guests pick from: 15 minutes means 12:00, 12:15, 12:30. Every limit below is counted per one such slot.","slotSizeMinutes":"{value} minutes","maxCoversPerSlot":"Max guests per slot","maxCoversPerSlotHint":"How many people may arrive at one time. Once the limit is taken, guests are offered a later time.","maxReservationsPerSlot":"Max reservations per slot","maxReservationsPerSlotHint":"Maximum number of separate reservations allowed per slot.","hardMaxReservations":"Hard max reservations","hardMaxReservationsHint":"Absolute limit that includes host-created reservations.","hostLimits":"Host Booking Limits","hostLimitsDesc":"Set additional limits for reservations made by the host or staff.","totalCoversOnline":"Online guests at the same time","totalCoversOnlineHint":"How much of the room goes to online bookings â your site, the widget and Google. Counts everyone seated at that moment, including earlier arrivals. The rest stays for the host and walk-ins.","totalCoversHost":"Host guests at the same time","totalCoversHostHint":"The same for bookings the host creates. Bookings pushed in by POS integrations count towards neither of these two limits.","seatingOptimization":"Seating Optimisation","seatingOptimizationDesc":"Let the system optimise table assignments for better utilisation.","optimizeForHost":"Optimise seating for host","optimizeForHostHint":"System suggests optimal tables for host-created reservations.","optimizeForGuest":"Optimise seating for guest","optimizeForGuestHint":"System picks optimal tables for online reservations.","unlimited":"Unlimited","exceptionsTitle":"Day exceptions","exceptionsDesc":"Special rules for particular days â e.g. seat no more than eight guests per slot on Friday. Overrides âMax guests per slotâ.","noExceptions":"No exceptions defined","addException":"Add Exception","dayOfWeek":"Day","maxCovers":"Max guests","removeException":"Remove","pacingTitle":"How fast guests are let in","pacingDesc":"Smooth the flow at the door so the kitchen and the host aren't hit with everyone at once.","maxBookingsPerSlot":"Max bookings per slot","maxBookingsPerSlotHint":"How many separate parties you take at one time. Three bookings for two is only six guests but three seatings. The site stops offering a full time; the host can still add a booking manually.","hardLimitsTitle":"Limits that cannot be exceeded","hardLimitsDesc":"Overflow insurance: past these values a booking won't save, even when entered by hand.","hardMaxCoversPerSlot":"Hard limit on guests per slot","hardMaxCoversPerSlotHint":"Past this number the host cannot seat guests at one time, even manually. Does not affect online bookings â the regular limit above applies to those.","hardMaxBookingsPerSlot":"Hard limit on bookings per slot","hardMaxBookingsPerSlotHint":"Past this number a booking won't save, even manually. Set it above the regular limit â the gap between them is the room the host gets to use.","hardBelowSoftWarn":"The hard limit is below the regular one â the host is left with no room.","channelQuotasTitle":"How much of the room each channel gets","channelQuotasDesc":"Cap how many guests are seated at the same time from online bookings and from host-created bookings.","exceptionWhen":"When it applies","allDaysUsed":"Every weekday already has an exception","exceptionNoWindow":"No time range set â this rule never applies. Add one."}
1,"blockedTables":{"title":"Blocked Tables","description":"Block specific tables during certain periods. Blocked tables are unavailable for reservations and walk-ins.","pinProtection":"PIN Protection","pinProtectionDesc":"Require a PIN to unblock tables, preventing unauthorised changes.","requirePin":"Require PIN to unblock","pinCode":"PIN code","pinPlaceholder":"Enter 4-digit PIN","pinRequired":"Enter a PIN to enable protection.","periodsTitle":"Blocking Periods","periodsDesc":"Define time ranges when specific tables should be blocked.","noPeriods":"No blocking periods defined","noPeriodsHint":"Add a blocking period to reserve tables for events or maintenance.","addPeriod":"Add Blocking Period","tables":"Tables","allTables":"All tables","from":"From","to":"To","selectTables":"Select tables","tablesSelected":"{count} tables selected","allDay":"All day","timeSlots":"Time slots","addTimeSlot":"Add time slot","removePeriod":"Remove","outdatedBadge":"Expired"},"tablesPicker":{"allTables":"All tables","allTablesHint":"Leave empty to apply to all tables.","selectTables":"Select tablesâ¦","oneSelected":"1 table selected","nSelected":"{count} tables selected","searchPlaceholder":"Search a tableâ¦","selectAll":"Select all","clear":"Clear","noMatches":"No tables match your search","noTables":"No tables available. Create tables in the floor plan first.","unknownGroup":"Selected but no longer in the floor plan","unknownHint":"This table was selected before but is missing from the current floor plan. Click to remove.","offlineHint":"This table is on an offline floor.","groupBy":"Group by:","byArea":"Area","byFloor":"Floor"},"activeReservations":{"table":"Table {n}","count":"active bookings: {count}","guestsHeading":"Guests booked","noName":"No name","noTime":"Walk-in","party":"guests: {count}","andMore":"and {count} more"}}`),T={menuBuilder:{title:"Menus",description:"Create and manage your restaurant menus with sections and products.",noMenus:"No menus yet",noMenusHint:"Create your first menu to start building.",addMenu:"Add Menu",menuName:"Menu name",menuNamePlaceholder:"e.g. Lunch Menu",active:"Active",inactive:"Inactive",products:"{count} products",sections:"Sections",menuContent:"Menu content",menuContentDesc:"Sections and products that make up this menu. Click a section name to rename it.",noSections:"No sections in this menu",addSection:"Add section",newSectionName:"New section",deleteSection:"Delete section",deleteSectionConfirm:'Delete section "{name}" and all its products from this menu?',deleteMenu:"Delete menu",deleteMenuConfirm:'Delete menu "{name}"? This action cannot be undone.',unsavedSwitchMessage:"This menu has unsaved changes. Continue without saving?",unsavedSwitchConfirm:"Continue without saving",menuDetails:"Menu Details",menuDetailsDesc:"Edit the menu name and toggle availability.",sectionsDesc:"View and manage the sections in this menu.",noProducts:"No products in this section",addProduct:"Add product",addProductHint:"Pick a product to add to this section.",removeProduct:"Remove from section",noMatchingProducts:"No matching products.",allProductsAdded:"All products are already in this section.",modifiersToggle:"Modifier Toggles",modifiersToggleDescription:"Enable or disable modifiers for this menu."},products:{title:"Products",description:"Manage all products across your menus.",searchPlaceholder:"Search productsâ¦",allCategories:"All categories",noProducts:"No products found",noProductsHint:"Products appear here once added to categories.",loadMore:"Load more",showingCount:"Showing {shown} of {total}",loadError:"Couldn't load products.",modifiers:"Modifiers",addModifier:"Add modifier",removeModifier:"Remove modifier {name}",viaCategory:"via category",modifierViaCategoryHint:"Applied to the whole category â manage it in the Modifiers tab.",noModifiers:"No modifiers attached.",available:"Available",unavailable:"Unavailable",editProduct:"Edit Product",deleteProduct:"Delete Product",deleteProductConfirm:'Delete product "{name}"? This action cannot be undone.',newProduct:"New product",newProductName:"New product",createNeedsCategory:"Create at least one category before adding products.",name:"Name",productDescription:"Description",price:"Price",pickupPrice:"Collection price",deliveryPrice:"Delivery price",taxR
1ate:"Tax rate",pickupTaxRate:"Collection tax rate",deliveryTaxRate:"Delivery tax rate",pricesAndTaxes:"Prices & taxes",pricesAndTaxesHint:"Optional collection/delivery values fall back to the base price and tax when empty.",image:"Image",uploadImage:"Upload image",changeImage:"Change image",removeImage:"Remove image",requiredFieldHint:"Fields marked with * are required.",category:"Category",createNewCategory:"+ Create new categoryâ¦",newCategoryPlaceholder:"Category name",createCategory:"Create",noCategory:"No category",availability:"Available",pickup:"Collection",delivery:"Delivery"},categories:{title:"Categories",description:"Product groups used to organise your menu items.",newCategory:"New category",newCategoryName:"New Category",deleteCategory:"Delete Category",deleteCategoryConfirm:'Delete category "{name}"? This action cannot be undone.',deleteCategoryWithProductsConfirm:'Delete category "{name}"? {count} product(s) in this category will become uncategorized.',markActive:"Mark active",markInactive:"Mark inactive",noCategories:"No categories found",noCategoriesHint:"Click âNew categoryâ to create one.",active:"Active",inactive:"Inactive",totalProducts:"{count} products",activeProducts:"{count} active",productCount:"{count} products, {active} active",noProducts:"No products in this category",manageCategories:"Manage categories",manageCategoriesDescription:"Create, rename, activate or remove categories used to organise your products.",backToList:"Back to list",selectCategory:"Select category",editCategory:"Edit category",categoryName:"Category name",productsInsideHint:"{count} product(s) currently in this category."},modifiers:{title:"Modifiers",description:"Manage modifiers and their options. Modifiers can be linked to products to allow customisation.",noModifiers:"No modifiers yet",noModifiersHint:"Create modifiers to add customisation options to your products.",addModifier:"Add Modifier",newModifier:"New modifier",modifierName:"Modifier name",modifierNamePlaceholder:"e.g. Sauce Options",editModifier:"Edit Modifier",displayName:"Display name",active:"Active",inactive:"Inactive",type:"Type",typeNote:"Note",typeOptions:"Options",typeNoteHint:"Free-text note shown in the order widget; no selectable options.",typeOptionsHint:"List of selectable options (e.g. flavours, sizes, add-ons).",summaryNote:"Note",summaryOptions:"{count} options",selectionMode:"Selection mode",singleSelect:"Single (radio buttons)",singleSelectHint:"Guest picks exactly one option.",multiSelect:"Multiple (checkboxes)",multiSelectHint:"Guest can pick several options.",minSelections:"Min selections",maxSelections:"Max selections",unlimited:"Unlimited",selectionLimitsHint:"Limit how many options the guest must / can pick.",linkedProducts:"{count} linked products",linkedProductsTitle:"Linked products",linkedProductsHint:"Products this modifier will appear on in the order widget.",linkProducts:"Link products",noLinkedProducts:"No products linked yet.",linkProductsModalTitle:"Link products",searchProducts:"Search productsâ¦",selectAll:"Select all",selectNone:"Clear",selectedCount:"{count} selected",deleteModifier:"Delete modifier",deleteModifierConfirm:'Delete modifier "{name}"? This will also remove it from any linked products.',options:"Options",addOption:"Add option",optionName:"Option name",optionNamePlaceholder:"e.g. Soy milk",optionDescription:"Description (optional)",optionPrice:"Price",optionTaxRate:"Tax rate (optional)",default:"Default",defaultHint:"Pre-selected when guest opens the modifier.",noOptions:"No options yet â add the first one.",deleteOption:"Delete option",deleteOptionConfirm:"Delete this option?"},settings:{noMenu:"â None â",min:"min",cutoffDisabled:"Disabled",cutoffHint:"After this time, no same-day online orders are accepted. Leave disabled to allow orders until closing.",maxOrdersHint:"How many online orders can be accepted in a single time slot.",maxOrdersZeroWarning:"At 0, online orders are not accepted â the widget shows ordering as unavailable. Set a limit above 0.",delivery:{title:"Delivery",description:"Configure delivery ordering: schedule, menu selection, fees, and restrictions.",enabled:"Enable delivery orders",scheduleForLater:"Allow schedule for later",useOpenHours:"Use restaurant open hours",menu:"Delivery menu",minimumNotice:"Minimum notice",maxDaysToOrder:"Max days ahead",maxOrdersPerSlot:"Max orders / slot",cutoffTime:"Cutoff time",guestNote:"Note for guests",distanceFeeRules:"Distance fee rules",distance:"Distance",fee:"Fee",minOrder:"Min order",noDistanceFeeRules:"No distance fee rules configured.",discountRules:"Discount rules",orderAmount:"Order amount",discount:"Discount",noDiscountRules:"No discount rules configured."},takeaway:{title:"Takeaway",description:"Configure takeaway (collection) ordering options.",enabled:"Enable takeaway orders",scheduleForLater:"Allow schedule for later",useOpenHours:"Use restaurant open hours",menu:"Takeaway menu",minimumNotice:"Minimum notice",maxDaysToOrder:"Max days ahead",maxOrdersPerSlot:"Max orders / slot",cutoffTime:"Cutoff time",guestNote:"Note for guests"},preorder:{title:"Preorder",description:"Allow guests to preorder meals before arrival.",enabled:"Enable preorders",menu:"Preorder menu",minOrder:"Minimum order amount"},digital:{title:"Digital Menu",description:"Set up a digital menu accessible via QR code or link.",enabled:"Enable digital menu",menu:"Digital menu"},tips:{title:"Tips",description:"Configure tipping options for online orders.",enabled:"Enable tips",options:"Tip options"},taxes:{title:"Taxes",description:"VAT and tax settings for online orders.",includeVAT:"Include VAT in prices"},additional:{title:"Special Request Options",description:"Extra options guests can request with their order.",contactless:"Contactless Delivery",dontDisturb:"Do not Disturb",needCardReader:"Need card reader"},statuses:{title:"Ordering Statuses",description:"Manage the workflow statuses for order processing. Standard statuses cannot be removed.",grandeUpgrade:"Adding new statuses and deleting custom ones is available on the Grande plan. You can still edit colours, applicability, order, and active state for the existing statuses below.",addStatus:"Add Custom Status",colDelivery:"Delivery",colPickup:"Collection",applyDelivery:"Applies to delivery",applyPickup:"Applies to collection",system:{kitchen:"Cooking",ready:"Ready",inroute:"Out For Delivery"}}}}
1,C={title:"Choose Icon",searchPlaceholder:"Search iconsâ¦",catAll:"All",catFood:"Food & Drink",catPeople:"People",catSeating:"Seating",catCommunication:"Communication",catStatus:"Status",catObjects:"Objects",catTravel:"Travel",catTechnology:"Technology",catFinance:"Finance",catNature:"Nature",catMood:"Mood",catTime:"Time",catEntertainment:"Entertainment",catMusic:"Music",catGeneral:"General",noResults:"No icons found"},P={restaurants:{list:"Your Restaurants",listDesc:"Restaurants you have access to. Switch between them or remove ones you no longer need.",current:"Current",switchTo:"Switch",remove:"Remove",removeTitle:"Remove Restaurant",removeDesc:"You're about to permanently remove '{name}'. This action cannot be undone â all reservations, settings and billing data will be lost.",removeConfirm:"Remove Restaurant",removeReason:"Reason for removal",removeReasonPlaceholder:"Please explain why you want to remove this restaurantâ¦",empty:"You don't have access to any restaurants yet.",addNew:"Add new",addNewTitle:"Add a new restaurant",addNewDesc:"Create another restaurant location under your account. You'll automatically be the Owner.",addNewSubmit:"Create restaurant",subscriptionWarning:"One location â one subscription. Adding a new restaurant will create a separate subscription and may affect your billing.",iUnderstand:"I understand a new subscription will be created for this restaurant.",verified:"Verified",suspended:"Suspended",suspendedDesc:"This restaurant is currently suspended due to a billing issue.",offline:"Offline",offlineDesc:"This restaurant is hidden from public booking surfaces."},team:{members:"Team Members",membersDesc:"People who have access to this restaurant's dashboard.",name:"Name",email:"Email",role:"Role",actions:"Actions",noMembers:"No team members found.",removeUser:"Remove",removeTitle:"Remove Team Member",removeDesc:"You're about to remove '{name}' from the team. They'll lose access to this restaurant's dashboard.",removeConfirm:"Remove User",changeRole:"Change role",changeRoleTitle:"Change Role",changeRoleDesc:"Update the role for {name}. The new permissions take effect immediately â no re-invitation needed.",currentRole:"Current role",newRole:"New role",inviteTitle:"Invite Team Member",inviteDesc:"Send an invitation to join this restaurant's team.",emailPlaceholder:"colleague{'@'}example.com",invite:"Invite",sendInvite:"Send Invitation",sendShort:"Send",pendingInvitations:"Pending Invitations",pen
1dingDesc:"Invitations that have been sent but not yet accepted.",pending:"Pending",noPending:"No pending invitations.",resend:"Resend",cancelInvite:"Cancel"},billing:{currentPlan:"Current Plan",currentPlanDesc:"Your active subscription and billing details.",renewsOn:"Renews on {date}",nextBilling:"Next billing date",endedOn:"Ended on",startedOn:"Started on",includes:"Includes",eventsUsage:"Events this period",eventsRemaining:"{count} remaining",eventsOverage:"Each extra event is billed separately",eventsOverageDetail:"{overage} over quota · est. {estimated} at next invoice",eventsOveragePerEvent:"Extra events charged at {price} each",trialPeriodHeader:"Trial period",trialDaysCounter:"{remaining} of {total} days left",trialEndsToday:"Trial ends today",paymentStatusHeader:"Payment status",paymentFailedMessage:"Last payment failed â update your card to avoid suspension",changePlan:"Change plan",choosePlan:"Choose a plan",plansModalTitle:"Choose a plan",plansModalDesc:"Select a plan that fits your restaurant's needs.",noPlans:"No plans available right now.",noPlansForInterval:"No plans available for this billing period.",switchToPlan:"Switch to this plan",upgrade:"Upgrade",downgrade:"Downgrade",intervalTab:{day:"Daily",week:"Weekly",month:"Monthly",year:"Yearly"},pricePeriod:{day:"day",week:"week",month:"month",year:"year"}
1,priceNote:{billedAnnually:"billed annually",billedMonthly:"billed monthly"},parties:"parties",partiesUnlimited:"Unlimited",scrollToPlan:"Go to plan {n}",subStatus:{active:"Active",trialing:"Trial",past_due:"Past due",canceled:"Cancelled",incomplete:"Incomplete",incomplete_expired:"Expired",inactive:"Pending activation",unpaid:"Unpaid",paused:"Paused"},cancelSubscription:"Cancel Subscription",cancelShort:"Cancel",noSubscription:"No active subscription. Choose a plan below to get started.",availablePlans:"Available Plans",availablePlansDesc:"Select a plan that fits your restaurant's needs.",selectPlan:"Select Plan",activePlan:"Current Plan",paymentMethods:"Payment Methods",paymentMethodsDesc:"Cards on file for automatic subscription payments.",noCards:"No payment methods on file.",defaultCard:"Default",expires:"Expires {month}/{year}",removeCard:"Remove card",removeCardTitle:"Remove Payment Method",removeCardDesc:"Are you sure you want to remove the card ending in {last4}?",removeCardConfirm:"Remove Card",addCard:"Add card",addCardTitle:"Add Payment Method",addCardDesc:"Add a card to pay for your subscription. Powered by Stripe.",addCardSubmit:"Add card",cardholderName:"Cardholder name",cardholderNamePlaceholder:"Jenny Rosen",cardholderEmail:"Email",cardholderEmailPlaceholder:"jenny{'@'}example.com",cardDetails:"Card details",stripeSecured:"Card details are encrypted and handled by Stripe. We never store your card number.",addCardMissingFields:"Please enter the cardholder name and email.",addCardError:"Couldn't add the card. Please check the details and try again.",addCardNotConfigured:"Card payments aren't configured for this environment.",history:"Billing History",historyDesc:"Past charges and payments for this restaurant.",noCharges:"No billing history yet.",noChargesFiltered:"No charges match the current filters.",date:"Date",amount:"Amount",status:"Status",refunded:"Refunded",paid:"Paid",unpaid:"Unpaid",invoice:"Invoice",invoiceNumber:"Invoice #",invoiceUnavailable:"Invoice unavailable",product:"Product",productUnknown:"Unknown",productUnavailable:"Product details aren't available for this charge yet.",productNames:{Other:"Other",Subscription:"Subscription",MarketingTokens:"Marketing tokens",PhoneNumber:"Phone number",SmsPack:"SMS pack",WhatsAppPack:"WhatsApp pack",GuestDeposit:"Guest deposit",GiftCard:"Gift card",PaidEvent:"Paid event"},downloadInvoicePdf:"Download invoice PDF",viewReceipt:"View receipt",statusSucceeded:"Succeeded",statusFailed:"Failed",statusPending:"Pending",statusRefunded:"Refunded",statusPartiallyRefunded:"Partially refunded",filterAll:"All",filterPaid:"Paid",filterFailed:"Failed",filterRefunded:"Refunded",dateRange30d:"Last 30 days",dateRange90d:"Last 90 days",dateRangeYear:"This year",dateRangeAll:"All time",exportCsv:"Export",amountTooltip:"Subtotal {subtotal} + tips {tips} + delivery {delivery}",refundedAmount:"Refunded {amount}",refundedAmountShort:"â{amount} refunded",pageOf:"Page {current} of {total}",prevPage:"Previous page",nextPage:"Next page",cancelTitle:"Cancel Subscription",cancelDesc:"Are you sure you want to cancel your subscription? You will lose access to premium features at the end of the current billing period.",cancelReasonLabel:"Reason for cancellation",cancelReasonPlaceholder:"Please tell us why you're cancellingâ¦",cancelConfirm:"Cancel Subscription"},activityLog:{title:"Activity Log",description:"Track all changes made to your restaurant settings â who changed what and when.",entries:"entries",searchPlaceholder:"Search changesâ¦",searchShort:"Searchâ¦",allUsers:"All members",undefinedUser:"Undefined user",allOperations:"All operations",resetFilters:"Reset",noResults:"No matching entries found. Try adjusting your filters.",empty:"No activity recorded yet.",noReadableChanges:"No structured changes to display.",showRaw:"Show raw JSON",hideRaw:"Hide raw JSON",op:{create:"Created",update:"Updated",delete:"Deleted",disable:"Disabled",activate:"Activated"},changes:{enabled:"{field} â enabled",disabled:"{field} â disabled",set:"{field} set to â{value}â",cleared:"{field} cleared",changed:"{field}: â{from}â â â{to}â",items:"{count} item(s)"}}},A=JSON.parse(`{"status":{"connected":"Connected","available":"Available","error":"Error"},"actions":{"connect":"Connect","buy":"Buy","reconnect":"Reconnect","settings":"Settings","remove":"Disconnect","fix":"Fix","getSetUp":"Get set up","comingSoon":"Coming soon"},"sections":{"connected":"Connected","available":"Available"},"pos":{"emptyTitle":"No POS Systems","emptyDescription":"Connect your POS system to sync reservations, menus, and table statuses automatically."},"payments":{"emptyTitle":"No Payment Providers","emptyDescription":"Enable payment integrations to accept deposits, prepayments, and in-app payments."},"stripeAttach":{"progress":"Connecting Stripeâ¦","errorTitle":"Could not connect Stripe","errorBody":"The connection was not completed. Try again from Integrations.","errorGatewayBody":"This venue already takes payments through another gateway. Disconnect that app in Integrations, or turn off its payment feature, and then connect Stripe â removing the payment account does not free the gateway.","back":"Back to Integrations"},"thirdParty":{"emptyTitle":"No Third-Party Apps","emptyDescription":"Browse available integrations to extend your restaurant's capabilities."},"channels":{"emptyTitle":"No Messaging Channels","emptyDescription":"SMS, WhatsApp, Telegram and Max integrations will appear here."},"connectedTab":{"emptyTitle":"No Connected Integrations","emptyDescription":"Once you connect an integration from any category, it will appear here grouped by type."},"settingsModal":{"title":"Settings â {app}","requiresDependency":"Requires the {dependency} integration. Install it from the marketplace to enable this setting.","noSettings":"This app has no configurable settings."},"detailsPanel":{"features":"Features","settings":"Settings","re
1connectTitle":"Reconnect this integration","reconnectHint":"For example, to switch the bot or update credentials.","nothingToConfigure":"This integration has no settings to configure."},"airsales":{"settings":{"clientId":{"label":"Hostme Client ID","desc":"Issued by Hostme â copy it into your AiR Sales account. Your Hostme login and password are not needed there."},"clientSecret":{"label":"Hostme Client Secret","desc":"Issued by Hostme â copy it into your AiR Sales account. Disconnecting the app cuts off access immediately."}}},"yandex":{"connectHelp":"You need to connect to Yandex Eats. {link}, naming Hostme as your reservation system and entering the 3 fields above into it. Once connected, you'll receive a Yandex Client ID and Secret to paste below.","connectHelpLink":"Fill out the form","features":{"reservationPull":{"title":"Accept reservations from Yandex","desc":"Lets Yandex Eats read your availability, tables and time-slots and create, fetch or cancel reservations in Hostme."},"reservationPush":{"title":"Send status updates to Yandex","desc":"Hostme pushes reservation status changes back to Yandex Eats."}},"settings":{"pullClientId":{"label":"Hostme Client ID","desc":"Issued by Hostme â copy it into your Yandex Eats partner panel."},"pullClientSecret":{"label":"Hostme Client Secret","desc":"Issued by Hostme â copy it into your Yandex Eats partner panel."},"pushClientId":{"label":"Yandex Client ID"},"pushClientSecret":{"label":"Yandex Client Secret"}}},"popular":"Most popular","removeModal":{"title":"Remove Integration","message":"Are you sure you want to remove {app}? Active connections and settings will be lost.","confirm":"Remove"},"oauth":{"waitingTitle":"Waiting for {app} to authoriseâ¦","waitingHint":"Complete the sign-in in the popup window. Your integrations list will refresh automatically when you're done."},"planRequired":"Requires {plan} plan","unlockPlanRequired":"Requires {plan} plan to unlock {capability}","unlockNotAvailable":"{capability} isnât included in any monthly plan â contact sales","grandeBanner":{"title":"Integrations are a Grande feature","description":"Connect any POS, payment provider or third-party app on the Grande plan. Upgrade to unlock the full marketplace.","cta":"Upgrade to Grande"},"priceLabel":"\${price}/mo","featureToggle":"Enable {feature}","names":{"airsales":"AiR Sales â AI Voice Host"},"descriptions":{"poster":"Cloud POS for cafés, bars and small chains â menus, orders and guest history sync in real time.","lightspeed":"Cloud restaurant POS with menu, inventory and reporting â reservations land straight on the floor plan.","squarePos":"Square's restaurant POS for single venues and growing brands â bills tie back to Hostme reservations.","iiko":"Russia's leading restaurant management platform â POS, kitchen, inventory and now reservations in one place.","rkeeper":"Proven enterprise POS for classic restaurants and chains â sync reservations, tables and bills.","rk7":"R-Keeper's flagship platform for chain operations â table states, orders and guest history in one stream.","clover":"All-in-one POS combining hardware and cloud â connect Hostme reservations to Clover terminals and back office.","kounta":"Cloud hospitality POS by Lightspeed (formerly Kounta) â sync menus, bills and table states with Hostme.","omnivore":"Universal integration layer to 70+ POS systems â one connection, dozens of brands.","toast":"Cloud all-in-one management system built specifically for restaurants, cafés and bars on Android hardware.","bookingSync":"Sync with external reservation systems â push bookings from Google, Hostme or your website straight into the POS.","tbank":"Russian acquiring with fast onboarding and competitive rates â accept deposits and prepayments straight from a reservation.","yookassa":"Russian all-in-one payment service â cards, SBP and wallets in a single checkout, including refunds and recurring.","paygateway":"Universal e-POS payment service: automated payment acceptance and PIN-code sales â WebMoney, RBK Money, MoneyMail, WebCreds, payment terminals, Yandex.Money.","stripe":"Accept deposits, no-show fees and online order payments via Stripe â secure card processing for guest reservations.","squarePayment":"Square's simple flat-rate pricing â accept cards online and in-venue with no contracts or hidden fees.","whatsapp":"Send messages from your WhatsApp Business account â confirmations, reminders and replies in the channel guests already use.","telegram":"Telegram Bot integration for guest notifications â guests share their phone via the bot to authorise and receive messages.","twilio":"Send and receive SMS via the Twilio gateway â programmable messaging from a trusted global provider.","sendgrid":"SendGrid integration for guest email â confirmations, reminders and notifications with high deliverability.","max":"MAX Messenger Bot integration for guest notifications â guests share their phone via the bot to authorise and receive messages.","meta":"Connect your Meta Business account to sync ads, audiences and conversion events with Hostme.","facebook":"Connect Facebook and Instagram booking channels â guests reserve directly from your Meta profiles.","tripadvisor":"Connect the Tripadvisor booking channel â accept reservations from your Tripadvisor listing.","michelin":"Connect the MICHELIN Guide booking channel â accept reservations from guests browsing the Guide.","wix":"Integrate Hostme with your Wix website â accept reservations directly from your Wix pages.","google":"Google Reserve and Business Profile integration â guests book straight from Search and Maps.","segment":"Stream guest events to Segment to power your CDP, analytics and every connected marketing tool.","premiumbonus":"Premium Bonus loyalty and CRM â award points for visits and tie loyalty profiles to Hostme reservations.","brandtrack":"Licensed background music for your venue â manage playlists and volume right from Hostme.","beeline":"Beeline virtual PBX â caller ID lights up the reservation card and one-click call-back to the guest.","asterisk":"Asterisk PBX integration â caller ID and call history straight inside the guest card.","sipuni":"Sipuni cloud PBX â inbound calls highlight the guest card, outbound calls launch from a reservation.","hotlead":"Hotlead virtual PBX â caller ID and one-click call-back to the guest from a reservation.","uiscom":"UIS cloud PBX â caller ID and call-tracking integrate with the guest card.","telphin":"Telphin virtual PBX â identify guests by incoming number and call them in one click.","rostelekom":"Rostelecom virtual PBX â caller ID and one-click call-back to the guest from a reservation.","mango":"Mango Office cloud PBX â caller ID, call recording and click-to-call from a reservation.","yandexEda":"Online bookings across every Yandex surface: Eats, Maps, Search, Go and Alice AI. A Yandex fee of â½79 per seated guest applies on top.","hostmeSms":"Transactional SMS notifications via the Hostme gateway â confirmations, reminders and cancellations.","hostmeMarketingSms":"Marketing SMS campaigns via the Hostme gateway â promos, announcements and win-back for lapsed guests.","hostmeDedicated":"Dedicated SMS sender name â guests see your restaurant brand instead of a short code.","events":"Restaurant event management â ticketing, deposits and event reservations in one place.","autoTags":"Auto-tag guests by behaviour â VIP, frequent, no-show and dozens of other rules applied automatically.","premiumReports":"Extended analytics and custom reports â revenue, traffic, shift performance and booking channels.","premiumCampaigns":"Premium segments and scenarios for marketing campaigns â A/B tests, triggers and advanced analytics.","privateFeedback":"Collect private guest feedback right after the visit â react before reviews hit public platforms.","customApp":"Connect your own service to Hostme via API â reservation events, guests and notifications in real time.","thermalPrinter":"Print receipts and pre-order slips on a thermal printer straight from the admin panel â for hosts and servers.","websiteLeads":"Capture website leads into Hostme â forms drop straight into the CRM and the call-back queue.","aiAgent":"AI guest-facing chat agent â answers questions, clarifies reservation details and escalates complex cases to a host.","aiAdminAgent":"AI agent in the admin panel for hosts and managers â suggests actions and finds guests / reservations in natural language.","mobilePush":"Mobile push notifications via the Hostme guest app â instant delivery with no SMS costs.","whoIsCalling":"Inbound caller ID â instantly surfaces the guest card, history and preferences when the phone rings.","campaignsService":"Hostme marketing campaigns service â email, SMS and push campaigns segmented by guest profile.","airsales":"AI voice host â answers the phone in under a second, checks availability and books the table itself, around the clock.","starter":"Branded delivery app and website for restaurants â accept orders directly with no aggregator fees.","unlimitedSms":"Unlimited SMS send / receive service â runs as an Android app on any device connected to a mobile operator.","e2eMock":"End-to-end test stub that emulates an SMS channel. Outbound messages are written to the e2eoutbox table; inbound webhook payloads are normalised into the standard incoming-message pipeline. For automated tests only."}}`),D={title:"Guests",guestBook:"Guest Book",tagsSegments:"Tags",settings:"Settings",searchPlaceholder:"Search guests by name, phone or emailâ¦",searchPlaceholderShort:"Search",filters:"Filters",export:"Export",exportTitle:"Export guests",exportEmailNote:"The report is generated in the background and emailed to the restaurant's owner(s).",exportFilteredNote:"Your current filters will be applied to the export.",exporting:"Exportingâ¦",exp
1ortError:"Couldn't start the export. Please try again.",addGuest:"Add Guest",allTags:"All Tags",allStatuses:"All Statuses",allSources:"All Sources",statusActive:"Active",statusBlacklisted:"Blacklisted",resetFilters:"Reset Filters",loading:"Loadingâ¦",totalGuests:"{count} guests",colName:"Name",colPhone:"Phone",colEmail:"Email",colVisits:"Visits",colLastVisit:"Last Visit",colLastVisitShort:"Last",colTags:"Tags",blocked:"Blocked",noResults:"No guests match your search.",empty:"No guests yet.",addFirstGuest:"Add your first guest",page:"Page {page} of {total}",bulk:{toggle:"Select",exit:"Exit selection",selectAllOnPage:"Select all on this page",selectedCount:"{count} selected",clear:"Clear",applyTags:"Apply tags",delete:"Delete"},bulkTags:{title:"Apply tags",subtitle:"Add one or more tags to multiple guests at once.",scope:"Apply to",scopeSelected:"Selected guests",scopeMatching:"All matching current filter",guestsCount:"{count} guests",pickTags:"Tags to add",noTags:"No tags exist yet. Create tags in the Tags & Segments tab first.",addOnlyHint:"Tags will be added on top of existing ones â nothing will be removed.",applyBtn:"Add to {count} guests",applying:"Applyingâ¦",progress:"{done} / {total} processed",failedCount:"{count} failed"},bulkDelete:{title:"Delete guests",warning:"This action cannot be undone.",warningDetail:"Guest profiles, tags, and notes will be removed. Visit history may remain attached to past reservations.",confirmLabel:"I understand â delete {count} guests",deleteBtn:"Delete {count} guests",deleting:"Deletingâ¦"},duplicates:{openBtn:"Find duplicates",title:"Duplicate detection",subtitle:"Scan your guest book for entries that share the same phone or email.",startHint:"Start a scan to group guests that look like duplicates.",scanBtn:"Scan now",scanning:"Scanning⦠{done} / {total}",scannedTotal:"Scanned {count} guests in total.",byPhone:"By phone",byEmail:"By email",guestsAffected:"{count} guests affected",sharedPhone:"Shared phone",sharedEmail:"Shared email",visits:"{count} visits",noneFound:"No duplicates found.",rescan:"Rescan",actionsHint:"Click a guest to open the profile. Merging is up to your team."},firstName:"First Name",lastName:"Last Name",phone:"Phone",email:"Email",guestProfile:"Guest Profile",memberSince:"Member since",statistics:"Statistics",totalVisits:"Total Visits",last30Days:"Last 30 Days",cancellations:"Cancellations",noShows:"No-shows",preferences:"Preferences",vegetarian:"Vegetarian",handicapAccessible:"Wheelchair Accessible",allergies:"Allergies",tablePreference:"Table Preference",birthday:"Birthday",anniversary:"Anniversary",noPreferences:"No preferences set.",notes:"Notes",noNotes:"No notes yet.",marketingOptIn:"Marketing: subscribed",marketingOptOut:"Marketing: unsubscribed",uploadPhoto:"Upload photo",changePhoto:"Change photo",removePhoto:"Remove photo",addTag:"Add Tag",reservationBreakdown:"Reservations",visitHistory:"Visit History",totalReservations:"Total Reservations",onlineReservations:"Online Reservations",hostReservations:"Host Reservations",avgCheck:"Avg. Spend",noVisits:"No visits recorded.",table:"Table",ppl:"ppl",block:"Block Guest",unblock:"Unblock Guest",delete:"Delete",confirmDelete:"Confirm Delete",tagsTitle:"Guest Tags",tagsDescription:"Create and manage tags to organise and categorise your guests.",addNewTag:"Add Tag",tagNamePlaceholder:"Tag nameâ¦",systemTag:"System",guestsWithTag:"{count} guests",noTags:"No tags created yet.",addFirstTag:"Create your first tag",searchTags:"Search tagsâ¦",noTagsMatch:"No tags match your search.",viewGuestsWithTag:"Show guests with this tag",autoTags:"Auto-tags",autoTagsDesc:"Automatically apply tags to guests based on their booking and visit behaviour.",autoTagsTabDescription:"Define when guests automatically receive each tag. Rules with an empty tag name stay inactive.",autoTagsAlphaTitle:"Auto-tags â Alpha",autoTagsAlphaHint:"Auto-tags are in early alpha â we're fine-tuning them with a small group of restaurants. Public access will open as soon as testing wraps up. Thanks for your patience!",autoTagsLoading:"Loading auto-tag rulesâ¦",autoTagsLoadError:"Failed to load auto-tag rules.",autoTagsRetry:"Try again",autoTagsBackendMissingTitle:"Auto-tags n
1ot available",autoTagsBackendMissingHint:"Your account doesn't have access to the auto-tags engine yet. Contact support to get it enabled.",autoTagsNotEnabledTitle:"Couldn't enable auto-tags",autoTagsNotEnabledHint:"We couldn't enable the auto-tags engine for this restaurant. Try again, or contact support.",autoTagsEnable:"Enable auto-tags",autoTagsEnabling:"Enabling auto-tagsâ¦",autoTagsNoRules:"Auto-tag rules aren't available yet.",autoTagsNoEvents:"This restaurant has no marketing events yet.",autoTagsRuleEnable:"Enable this rule",autoTagsRuleTagName:"Tag name",autoTagsRuleTagNamePlaceholder:"e.g. VIP, Loyal, At risk",autoTagsRuleSpentAtLeast:"Spent at least",autoTagsRuleVisitsAtLeast:"Visits at least",autoTagsRulePeriod:"Period",autoTagsSaved:"Saved",settingsTitle:"Guest Settings",settingsDescription:"Configure how your restaurant manages guest profiles and notifications.",notifyOnBlacklist:"Notify guests when blacklisted",notifyOnBlacklistDesc:"When enabled, guests automatically receive a notification when they are added to your restaurant's blacklist.",dataHygiene:{title:"Data hygiene",description:"Tools to keep your guest book clean and accurate."}},R=JSON.parse(`{"channels":{"title":"Communication Channels","description":"Configure SMS, WhatsApp, Email and Telegram channels","configure":"Configure","unavailable":"Unavailable","backToChannels":"Back to Channels","providerCount":"{count} provider(s)","devBannerTitle":"Channels are under development","devBannerHint":"This section isn't ready yet. To set up SMS, WhatsApp, Email and Telegram, use the Channels tab under Integrations for now.","devBannerLink":"Open channel integrations","status":{"enabled":"Enabled","disabled":"Disabled","unavailable":"Unavailable","pending":"Pending","pendingSetup":"Pending setup","configured":"Configured","actionRequired":"Set up"},"max":{"title":"MAX Channel Settings","description":"Configure MAX messenger integration","comingSoon":"Coming Soon","comingSoonDesc":"MAX messenger integration is currently under development. Check back soon for updates."},"sms":{"title":"SMS Channel Settings","description":"Configure SMS providers and sender settings","noProvider":"No SMS provider enabled","noProviderHint":"Enable at least one provider to start sending SMS.","providers":"SMS Providers","priorityHint":"Messages are sent through the highest-priority enabled provider. If it fails, the next one is used.","activeDragPriority":"{count} active · drag to set priority","numberType":"Number Type","buyDedicated":"Buy a dedicated number","buyDedicatedDesc":"Get a number assigned immediately.","buyDedicatedComingSoon":"Coming soon","alphanumericSenderId":"Alphanumeric Sender ID","alphanumericSenderIdDesc":"Custom branded name instead of a number.","notAvailableWarning":"Not available in all countries. Regulations vary by region.","yourBrandPlaceholder":"YourBrand","reasonPlaceholder":"Reason for request (optional)","apiKey":"API Key","enterApiKeyPlaceholder":"Enter your Beeline API key","apiKeyVerified":"API key verified","invalidApiKey":"Invalid API key. Please check and try again.","androidSetup":"Android Phone Setup","androidSetupDesc":"Install the Hostme SMS Gateway app on your Android phone. Messages will be sent directly using your mobile plan."},"whatsapp":{"title":"WhatsApp Channel Settings","description":"Configure WhatsApp Business API for broadcasts","noProviderConnected":"No WhatsApp provider connected","chooseProviderHint":"Choose a provider below to start sending WhatsApp broadcasts.","provider":"Provider","standard":"WhatsApp Standard","standardPrice":"$0.05 / message","standardDesc":"Full WhatsApp Business API","lite":"WhatsApp Lite","litePrice":"$20 / month","liteDesc":"Mirror your personal WhatsApp","whatsappMirror":"WhatsApp Mirror","linkWhatsApp":"Link your personal WhatsApp account","scanQrHint":"Open WhatsApp on your phone â Linked Devices â Link a Device â Scan this QR code","qrError":"Unable to generate QR code. Please try again.","senderIdentity":"Sender Identity","hostmeNumber":"Hostme Number","hostmeNumberDesc":"Shared number from Hostme","dedicatedNumber":"Dedicated Number","dedicatedNumberDesc":"Use your SMS dedicated number","requiresDedicated":"Requires SMS dedicated number","requestDedicated":"Request a dedicated number","dedicatedNumberOption":"Dedicated Number","senderIdOption":"Alphanumeric Sender ID","preferredAreaCodePlaceholder":"Preferred area code","reasonPlaceholder":"Reason (optional)","whatsappBusiness":"WhatsApp Business","previewMessage":"Hi John! Your reservation at {restaurant} is confirmed for tonight at 7:00 PM. See you there!","linkStatus":{"linked":"Linked","linkedDesc":"WhatsApp account is connected.","pending":"Link pending","pendingDesc":"Scan QR code to finish setup.","failed":"Link failed","failedDesc":"Linking failed. Try generating a new QR.","notLinked":"Not linked","notLinkedDesc":"WhatsApp is not linked yet."}}
1,"email":{"title":"Email Channel Settings","description":"Configure email sender settings","senderName":"Sender Name","restaurantNamePlaceholder":"Your Restaurant Name","senderNameHint":"This name appears in the \\"From\\" field of your emails.","senderEmail":"Sender Email","hostmeDefault":"Hostme Default","customEmail":"Custom Email","customEmailDesc":"Use your own verified email","pendingVerification":"Pending verification","verified":"Verified","verifyCustomEmail":"Verify a custom email address","verificationSentTo":"Verification email sent to {email}. Please check your inbox.","emailPlaceholder":"your{'@'}email.com","yourRestaurant":"Your Restaurant","reservationConfirmation":"Reservation Confirmation","previewMessage":"Hi John, your reservation is confirmed for tonight at 7:00 PM..."},"telegram":{"title":"Telegram Channel Settings","description":"Configure Telegram bot for broadcasts","botMode":"Bot Mode","hostmeBot":"Hostme Bot","hostmeBotPrice":"$0.02 / message","hostmeBotDesc":"Use the shared Hostme bot","yourOwnBot":"Your Own Bot","ownBotPrice":"$20 / month","ownBotDesc":"Connect your own {'@'}BotFather bot","connectYourBot":"Connect Your Bot","howToGetToken":"How to get a bot token","step1":"Open Telegram and search for {'@'}BotFather","step2":"Send /newbot and follow instructions","step3":"Copy the API token and paste it below","botToken":"Bot Token","tokenPlaceholder":"123456:ABC-DEF1234...","botConnected":"Bot connected successfully","invalidToken":"Invalid token. Please check and try again.","selectBot":"Select Bot","selectBotPlaceholder":"Select a bot...","externalConnection":"External connection detected","externalConnectionDefault":"This bot is also connected to another service.","forwardingMode":"Forwarding Mode","mirror":"Mirror","mirrorDesc":"Forward messages to both services","exclusive":"Exclusive","exclusiveDesc":"Use only with Hostme","hostmeBotFallback":"Hostme Bot","telegramBot":"Telegram Bot","previewMessage":"Hi John! Your reservation at {restaurant} is confirmed for tonight at 7:00 PM.","step2b":"and follow instructions"}},"tagPicker":{"search":"Search variablesâ¦","noResults":"No matching variables","insertTitle":"Insert variable","categories":{"restaurant":"Restaurant","guest":"Guest","booking":"Booking","links":"Links"},"tags":{"Restaurant_Name":{"label":"Name","desc":"Restaurant name"},"Restaurant_Address":{"label":"Address","desc":"Full address"},"Restaurant_Phone":{"label":"Phone","desc":"Phone number"},"Restaurant_Links_GuestAppUrl":{"label":"Booking Page","desc":"Online booking URL"},"Guest_CustomerName":{"label":"Full Name","desc":"Guest full name"},"Guest_FirstName":{"label":"First Name","desc":"Guest first name"},"Guest_LastName":{"label":"Last Name","desc":"Guest last name"},"Guest_Phone":{"label":"Phone","desc":"Guest phone number"},"Booking_ReservationDate":{"label":"Date","desc":"Reservation date"},"Booking_ReservationTime":{"label":"Time","desc":"Reservation time"},"Booking_ReservationDateTime":{"label":"Date & Time","desc":"Full date and time"},"Booking_PartySize":{"label":"Party Size","desc":"Number of guests"},"Booking_TableNumber":{"label":"Table","desc":"Table number"},"Booking_Areas":{"label":"Area","desc":"Seating area name"},"Booking_Duration":{"label":"Duration","desc":"Reservation duration"},"Booking_Note":{"label":"Note","desc":"Guest note or special request"},"Booking_Reason":{"label":"Reason","desc":"Cancellation reason"},"Booking_WaitTime":{"label":"Wait Time","desc":"Estimated wait time"},"Booking_MinutesToConfirm":{"label":"Min. to Confirm","desc":"Minutes until auto-cancel"},"Booking_Links_GuestReservationEditUrl":{"label":"Edit Link","desc":"Guest edit reservation URL"},"Booking_Links_ReservationFeedbackUrl":{"label":"Feedback Link","desc":"Post-visit feedback URL"},"Booking_Links_GuestReservationPayUrl":{"label":"Payment Link","desc":"Online payment URL"},"ManageLink":{"label":"Manage Link","desc":"General manage link"}}},"templates":{"sectionTitle":"Template","sectionDesc":"Pick a template type and the specific template you want to edit.","template":"Template","language":"Language","selectTemplate":"Select a template to edit","channels":"Notification Channels","sendTest":"Send Test Email","testTitle":"Send Test Email","testDescription":"A test email for â{name}â will be sent so you can check content and formatting.","testDirtyHint":"Save your changes to send a test","testSentTo":"Sent to","testOwnerNote":"The test is delivered to your account email address.","testOwnerFallback":"your account email","testConfirm":"Send test","testSentToast":"Test email sent","resetDefault":"Reset to default","resetConfirmTitle":"Reset template to default?","resetConfirmMessage":"This will reset Subject, Preview, Header, Email Body, SMS, WhatsApp and Push Title for this template & language to their default content. This cannot be undone.","subject":"Subject","preheader":"Preview","header":"Header","emailContent":"Email Content","smsText":"SMS Text","pushTitle":"Push Title","whatsappText":"WhatsApp Text","channelsDesc":"Enable or disable notification channels for this template.","emailContentDesc":"Customise the email subject, preview, header, and body content.","emailBody":"Email Body","smsAndPush":"SMS & Push","smsAndPushDesc":"Configure SMS text and push notification title for this template.","whatsappDesc":"Set the WhatsApp message text for this template.","folderReservation":"Reservation","folderWaitlist":"Waitlist","folderOrder":"Order","folderTakeaway":"Takeaway","folderStaffReservation":"Staff Reservation","folderStaffOrder":"Staff Order","folderStaffSystem":"System","folderStaffWebsiteLead":"Website leads","names":{"canceled":"Cancelled","changed":"Changed","confirmed":"Confirmed","feedback":"Feedback","generic":"Generic","invitation":"Invitation","invitationaccepted":"Invitation accepted","invoice":"Invoice","paymentreminder":"Payment reminder","rejected":"Rejected","reminder":"Reminder","requested":"Requested","approved":"Approved","called":"Called","canceledbyguest":"Cancelled by guest","canceledbyhost":"Cancelled by host","seated":"Seated","ready":"Ready","loyalty":"Loyalty","welcome":"Welcome","approvalforhost":"Approval (host)","canceledforhost":"Cancelled (host)","changedforhost":"Changed (host)","newreservationforhost":"New reservation (host)","reminderforhost":"Reminder (host)","canceledorderforhost":"Order cancelled (host)","changedorderforhost":"Order changed (host)","neworderforhost":"New order (host)","reminderorderforhost":"Order reminder (host)","appfeedback":"App feedback","blocked":"Blocked","confirmemail":"Confirm email","exporttocsv":"Export to CSV","invitationforuser":"User invitation","paymentlink":"Payment link","receipt":"Receipt","remindertopay":"Payment reminder","renewal":"Renewal","resetpassword":"Reset password","specialdays":"Special days","welcomeforowner":"Welcome (owner)","welcomeforuser":"Welcome (user)","accountarchived":"Account archived","notification":"Archivation notification","existingaccountsignin":"Existing account sign-in","registrationcode":"Registration code","abandoned":"Lead abandoned","submitted":"Lead submitted"},"availableVariables":"Available Variables","clickFieldToInsert":"Click a text field first, then click a variable to insert it."},"customization":{"emailTypeTitle":"What to show in the email","emailTypeDesc":"Pick an email type, then choose which blocks the guest sees. Each type has its own set of elements.","toggleSectionLabel":"Customisation toggles","reservation":"Reservation","waitlist":"Waitlist","order":"Order","reservationSection":"Booking details","orderSection":"Order & add-ons","restaurantSection":"Restaurant","brandingSection":"Branding & promo","logoSection":"Logo & Author","socialSection":"Social","policySection":"Policies","otherSection":"Other Elements","toggles":{"showreservationdetails":"Reservation details","showguestname":"Guest name","showduration":"Duration","showtablenumber":"Table number","showtablenotes":"Table notes","showareas":"Areas","showallergies":"Allergies","showdeposit":"Deposit","showreason":"Reason","shownote":"Note","showmanagebutton":"View/Modify reservation button","showorder":"Order","showadditionals":"Additionals","showcustomadditionals":"Custom additionals","showrestaurantdetails":"Restaurant details","showrestaurantaddress":"Address","showrestaurantservices":"Restaurant services","showrestaurantlogo":"Restaurant logo","showauthorlogo":"Author logo","showpromo":"Promo","showheaderpromo":"Promo header","showtwitter":"Twitter","showfacebook":"Facebook","showinstagram":"Instagram","showyelp":"Yelp","showtripadvisor":"TripAdvisor","showgoogle":"Google","showcustompolicY1":"Custom policy #1","showcustompolicY2":"Custom policy #2","showcustompolicY3":"Custom policy #3","showcustompolicyordeR1":"Order policy"}},"branding":{"colors":"Brand Colours","backgroundColor":"Backgroun
1d Colour","textColor":"Text Colour","logo":"Restaurant Logo","uploadLogo":"Upload Logo","changeLogo":"Change Logo","logoHint":"Recommended: 200Ã200px, PNG or SVG, max 2MB","promo":"Promotional Section","promoImage":"Promo Image","uploadImage":"Upload Image","changeImage":"Change Image","promoContent":"Promo Content","promoContentPlaceholder":"Enter promotional text to include in emails...","colorsDesc":"Set the background and text colours used in your email templates.","logoDesc":"Upload your restaurant logo to display in email headers.","promoDesc":"Add a promotional image and text to include in outgoing emails."},"policies":{"language":"Language","promo":"Promotional Block","customPolicy1":"Custom Policy #1","customPolicy2":"Custom Policy #2","customPolicy3":"Custom Policy #3","orderPolicy":"Order Policy","blockTitle":"Title","blockContent":"Content","languageDesc":"Select the language for editing policy texts."}}`),N={title:"Analytics",errors:{loadFailed:"Failed to load analytics data"},range7d:"7 days",range30d:"30 days",range7dShort:"7 d",range30dShort:"30 d",range7dXShort:"7d",range30dXShort:"30d",customRequestTitle:"Tailored analytics for your restaurant",customRequestComingSoon:"Coming soon",customRequestComingSoonNote:"Weâre building this right now â the request flow will appear here in one of the next releases. In the meantime, you can already share what youâd like to see with your account manager.",customRequestDesc:"Tell us what numbers you need to run your business â average bill by daypart, host performance, cohort retention, waitlist conversion, anything. Weâll build the report and add it right here, in your dashboard.",customRequestCta:"Request custom report",customRequestGrandeOnly:"Custom analytics are available on the Grande plan.",customRequestUpgradeCta:"Upgrade to Grande",comparePrevious:"Compare to previous period",comparePreviousShort:"Compare",previousPeriod:"Previous period",noData:"No data for this period",sourceLabels:{online:"Online",host:"Host"},totalReservations:"Total Reservations",totalCovers:"Total Covers",noShowRate:"No-show Rate",avgPartySize:"Avg Party Size",dailyCovers:"Daily Covers",covers:"Covers",bySource:"Reservations by Source",exportReservations:"Export bookings",exportColumns:{id:"Booking ID",posReferenceId:"POS reference",vendorAppId:"Connection ID",date:"Date",time:"Time",guest:"Guest",ph
1one:"Phone",covers:"Guests",table:"Table",status:"Status",source:"Source",channel:"Channel",deposit:"Deposit"},byVendor:"Reservations by Vendor",vendorNames:{yandexEats:"Yandex Eats",google:"Reserve with Google",airsales:"AiR Sales"},vendorHostme:"Hostme",vendorOther:"Other",byStatus:"Reservations by Status",outcomes:"Outcomes",onlineRequests:"Online Requests",onlineRequestsDesc:"Reservations that required host confirmation",autoApprovalEnabled:"Auto-approval is enabled. Online reservations are confirmed automatically without manual review.",reservationVolume:"Reservation Volume",reservations:"Reservations",peakHours:"Peak Hours Heatmap",topStats:"Key Insights",busiestDay:"Busiest Day",busiestHour:"Busiest Hour",avgDaily:"Avg Daily",noShows:"No-shows",noShowTrend:"No-show Rate Trend",canceledCount:"Cancelled",topNoShowGuests:"Top No-show Guests",guest:"Guest",visits:"Visits",lastVisit:"Last Visit",lastVisitShort:"Last",tags:"Tags",totalWaitings:"Total Waitlist",avgWait:"Avg Wait",conversionRate:"Seated Rate",abandonRate:"Abandon Rate",waitDistribution:"Wait Time Distribution",waitMinutes:"Wait time (minutes)",peakWaits:"Avg Wait by Hour",guests:"Guests",totalTables:"Total Tables",avgUtilization:"Avg Utilisation",avgTurnsPerDay:"Avg Turns / Day",tablePerformance:"Table Performance",table:"Table",seats:"Seats",turns:"Turns",turnsShort:"Turns",avgOccupancy:"Avg Occupancy",utilization:"Utilisation",totalGuests:"Total Guests",newGuests:"New Guests",returningGuests:"Returning",avgVisits:"Avg Visits",visitFrequency:"Visit Frequency",visitsCount:"Number of visits",topGuests:"Top Guests",export:"Export",vsPrev:"vs prev.",minUnit:"min",partiesUnit:"parties",dayMon:"Mon",dayTue:"Tue",dayWed:"Wed",dayThu:"Thu",dayFri:"Fri",daySat:"Sat",daySun:"Sun",statusApproved:"Confirmed",statusClosed:"Closed",statusSeated:"Seated",statusPending:"Pending",statusRejected:"Rejected",statusCanceled:"Cancelled by restaurant",statusCanceledByClient:"Cancelled by guest",statusNoShow:"No-show",statusConfirmed:"Confirmed",statusFinished:"Finished",requestApproved:"Approved",orders:"Orders",totalOrders:"Total Orders",dailyOrders:"Daily Orders",avgTicket:"Avg Order Value",avgFulfillment:"Avg Delivery Time",typeTakeaway:"Takeaway",typeDelivery:"Delivery",typeUnknown:"Unknown",cancelRate:"Cancel Rate",byType:"By Type",coversInPeriod:"covers in period"},x={title:"Segments",tabLabel:"Segments",removeFilterChip:"Remove {label}",builderTitle:"Filter guests",builderTitleAudience:"Choose audience",applyFilters:"Apply",applyAndClose:"Apply & close",save:"Save",resetFilters:"Reset all",reset:"Reset",cancel:"Cancel",saveAs:"Save as segmentâ¦",saveAsDisabled:"Saving custom segments â coming soon",customSegmentsFeature:"Custom segments",segmentNamePlaceholder:"Segment name",saveSegmentChanges:"Save changes",editSegmentTitle:"Edit segment",deleteSegmentTitle:"Delete segment?",deleteSegmentMessage:`"{name}" will be removed for the whole network. This can't be undone.`,deleteSegmentMessageSingle:`"{name}" will be removed. This can't be undone.`,apply:"Apply",nameLabel:"Name",descriptionLabel:"Description",descriptionPlaceholder:"e.g. Local VIPs",noDescription:"No description",optional:"optional",saveDialogTitle:"Save segment",saveDialogHint:"Name it to reuse across campaigns, automations and the guest book.",savedSegmentsLabel:"Saved segments",savedSegmentsComingSoon:"Coming soon",quickStart:"Quick start",quickStartHint:"Pick a preset to fill the filters below â or build your own.",quickStartApplied:"Applied: {name}",quickStartCustom:"Custom filter â adjust groups below.",groupsHeader:"Filters",noActiveFilters:"No filters applied â all guests included.",activeGroups:"{count} filter | {count} filters",recipientsTitle:"Recipients",recipientsCount:"{count} recipient | {count} recipients",recipientsEmpty:"No recipients match these filters.",recipientsHint:"Showing first {count} of {total}",costEstimate:"Estimated cost",tokensUnit:"tokens",noChannelHint:"Channel-specific filtering not applied (preview only).",rangeFrom:"from",rangeTo:"to",rangeBetween:"between",min:"Min",max:"Max",anyValue:"Any",section:{visits:"Visits",reservations:"Reservations",money:"Money"},groups:{guestTags:"Guest tags",languages:"Language",requestTypes:"Special requests",joinDate:"Join date",lastVisit:"Last visit",visitDate:"Visit date",visitDateHelper:"Range limited to 90 days â dates outside the window are disabled.",totalVisits:"Total visits",visits30:"Visits in last 30 days",visitsPeriod:"Visits in period",cancelations:"Cancellations",totalReservations:"Total reservations",onlineReservations:"Online reservations",inHouseReservations:"In-house reservations",totalSpent:"Total spent",averageCheque:"Average spend",events:"Events",restaurants:"Restaurants",gender:"Gender",blacklisted:"Blacklisted",birthMonth:"Birthday"}
1,blacklistedHint:"Show only blacklisted guests",period:{30:"Last 30 days",45:"Last 45 days",90:"Last 90 days",180:"Last 180 days",all:"All time"},eventsEmpty:"No events available for this restaurant.",eventsLoading:"Loading eventsâ¦",requestType:{Allergy:"Has allergies",Vegetarian:"Vegetarian",HandicapAccessible:"Wheelchair accessible"},birthday:{dayPlaceholder:"DD",monthPlaceholder:"Month"},presets:{all_guests:{name:"All guests",description:"No filters applied"},new_30d:{name:"New (30 days)",description:"Joined in the last 30 days"},new_90d:{name:"New (90 days)",description:"Joined in the last 90 days"},lapsed_180d:{name:"Lapsed (6 months)",description:"Last visit over 180 days ago"},lapsed_1y:{name:"Lapsed (1 year)",description:"Last visit over 365 days ago"},frequent:{name:"Frequent guests",description:"10+ total visits"},vip:{name:"VIP",description:"Tagged as VIP"},high_spenders:{name:"High spenders",description:"Spent 500+ in total"},cancellers:{name:"Cancellers",description:"3+ cancellations"},blacklisted:{name:"Blacklist",description:"Blacklisted guests"},allergies:{name:"With allergies",description:"Guests with food allergies"},vegetarian:{name:"Vegetarians",description:"Vegetarian guests"},birthday_this_month:{name:"Birthdays this month",description:"Guests with a birthday this month"}},savedSegments:{title:"Saved segments",builtIn:"Built-in presets",custom:"My segments",customComingSoon:"Save your own filter recipes for one-click reuse. Available on the Grande plan.",previewCount:"{count} guest | {count} guests",openInBuilder:"Open in builder"},tabPage:{builtInDescription:"Quick-start filters covering the most common guest cohorts. Click a card to apply it and view matching guests in the Guest Book.",useFilter:"Use filter",newSegment:"New segment",customDescription:"Your saved filter recipes â reusable across campaigns, automations and the guest book.",applyHint:"Click to apply to the guest book",customEmptyTitle:"No saved segments yet",customEmptyHint:"Build a filter and save it to reuse across campaigns, automations and the guest book."},comingSoon:"Coming soon"},H={usage:{loading:"Loadingâ¦",trial:{title:"Trial · {days} days left"},trialEndingSoon:{title:"Trial ends in {days} days",titleToday:"Trial ends today"},paymentFailed:{title:"Payment failed",subtext:"Update your card to avoid suspension"},noSubscription:{title:"No active subscription",subtext:"Choose a plan to continue"},active:{fallbackTitle:"Subscription",subtext:"{used} / {quota} events · resets in {days}d"},events:{usedOfQuota:"{used} / {quota} events",unlimited:"â Unlimited events",trialDaysLeft:"{remaining} of {total} days left"},cta:{upgrade:"Upgrade",addPayment:"Add payment method",updatePayment:"Update payment",choosePlan:"Choose plan",viewBilling:"View billing"},noAccess:{contactOwner:"Contact the owner to manage billing"}}},B=JSON.parse(`{"onboarding":{"empty":{"title":"Your floor plan is empty","subtitle":"Add tables, walls and decor to map out your space â or start from a ready-made sample.","addTable":"Add your first table","loadSample":"Load a sample plan","fromPhoto":"Create from a photo","fromPhotoBadge":"Alpha","fromPhotoProgress":"Reading your planâ¦","fromPhotoDone":"Imported {n} tables â review and tidy up, then save.","fromPhotoEmpty":"Couldn't find a floor plan in that image. Try a clearer photo.","fromPhotoError":"Couldn't read the plan from that image. Please try again.","takeTour":"Take a quick tour"},"step":"Step {n} of {total}","skip":"Skip","back":"Back","next":"Next","done":"Got it","steps":{"toolbar":{"title":"Add anything","text":"Pick a table, wall, text label or decor here, then click the canvas to place it."},"canvas":{"title":"Place & arrange","text":"Click anywhere on the canvas to place it. Once it's down, drag to move it around, and use the corner handles to resize or rotate it."},"panel":{"title":"Fine-tune","text":"Select any object to edit its size, seating area, number and rotation in this panel."},"save":{"title":"Save your work","text":"Changes are kept until you hit Save. Undo and Redo have your back any time."},"mobileAdd":{"title":"Add anything","text":"Click + to add tables, walls, text and decor, then click the canvas to place.","textTouch":"Tap + to add tables, walls, text and decor, then tap the canvas to place."}
1,"mobileCanvas":{"title":"Place & arrange","text":"Click anywhere on the canvas to place it. Drag to move it around, and use the corner handles to resize or rotate it.","textTouch":"Tap anywhere on the canvas to place it. Drag to move it around, use the corner handles to resize or rotate, and pinch with two fingers to zoom the whole plan."},"mobilePanel":{"title":"Fine-tune","text":"Select an object to edit its size, area, number and rotation in the panel below."},"view":{"title":"View & zoom","text":"Fit the plan to the screen, toggle the grid, and turn on the overlay that colours your zones and marks which tables take a deposit.","textTouch":"Fit the plan, toggle the grid, colour your zones (deposit tables are marked too), and switch on multi-select to pick several objects at once."}}},"help":{"title":"Help","shortcuts":"Keyboard shortcuts","tour":"Take the tour"},"demo":{"renumbered":"Renumbered {n} table(s) to keep numbers unique across your floors.","labels":{"bar":"Bar","entrance":"Entrance"},"zones":{"bar":"Bar","main":"Main hall","terrace":"Terrace"}},"decor":{"plant":"Plant","cat":{"greenery":"Greenery","furniture":"Furniture","structure":"Layout","entertainment":"Entertainment","signs":"Signs"},"label":{"accessible":"Accessible","air-vent":"Air vent","arrow":"Arrow","camera-cctv":"Camera / CCTV","chef":"Chef","children-room":"Children room","cloakroom":"Cloakroom","dj-disc":"DJ / Disc","exit":"Exit","fire-extinguisher":"Fire extinguisher","fish":"Fish","food":"Food","hookah":"Hookah","host":"Host","karaoke":"Karaoke","kitchen":"Kitchen","live-music":"Live music","no-smoking":"No smoking","parking":"Parking","power":"Power","power-outlet":"Power outlet","service":"Service","smoking":"Smoking","soap":"Soap","speaker":"Speaker","under-construction":"Under construction","wc":"WC","waves":"Waves","wi-fi":"Wi-Fi","armchair":"Armchair","chair":"Chair","bar":"Bar","sofa-2":"Sofa 2","sofa-3":"Sofa 3","sofa-3-alt":"Sofa 3 Alt","sofa-3x2":"Sofa 3x2","sofa-4x3":"Sofa 4x3","door":"Door","double-doors":"Double doors","sliding-door":"Sliding door","stairs-1":"Stairs 1","stairs-2":"Stairs 2","sink-1":"Sink 1","sink-2":"Sink 2","toilet":"Toilet","rug-1":"Rug 1","rug-2":"Rug 2","umbrella":"Umbrella","billiard-table":"Billiard table","dj-mixer":"DJ mixer","piano":"Piano","synth":"Synth","tv-1":"TV 1","tv-2":"TV 2","sofa-2-alt":"Sofa 2 Alt","tv":"TV"}},"loading":"Loading floorâ¦","lastEdit":{"byUser":"Last edited by {who} {when}","anonymous":"Last edited {when}"},"status":{"saving":"Savingâ¦","unsaved":"{count} unsaved changes","unsavedOne":"1 unsaved change","saved":"All saved","savedAt":"Saved {when}","error":"Save failed"},"topBar":{"back":"Back to floor plans","untitled":"Untitled floor","save":"Save","undoAll":"Undo all unsaved changes","undoAllTitle":"Undo all unsaved changes?","undoAllBody":"This will roll back every change you've made in this session and clear the undo history. You won't be able to redo afterwards.","undoAllConfirm":"Undo all"},"toolbar":{"select":"Select","rectTable":"Rectangular table","roundTable":"Round table","barTable":"Bar / single-seat","tableDisabled":"Create a seating area first â every table must be bound to one.","wall":"Wall","wallRound":"Pillar (round)","text":"Text label","undo":"Undo (âZ)","redo":"Redo (ââ§Z)","sections":{"tables":"Tables","walls":"Walls","decor":"Decor"},"decor":{"elements":"Decor","comingSoon":"coming soon","search":"Search decorâ¦","noResults":"Nothing found","placeHint":"Pick a glyph, then click the canvas to place it."}},"zoom":{"label":"Zoom controls","out":"Zoom out (â)","in":"Zoom in (+)","to100":"Actual size (0)","fit":"Fit","fitTitle":"Fit to screen (F)","gridOn":"Show alignment grid (G)","gridOff":"Hide alignment grid (G)","zoneOverlayOn":"Show table extras â areas, deposits (A)","zoneOverlayOff":"Hide table extras â areas, deposits (A)","help":"Keyboard shortcuts (?)","multiSelect":"Multi-select (tap to add)"},"shortcutsHelp":{"title":"Keyboard shortcuts","sections":{"selection":"Selection","tools":"Tools","history":"History","view":"View"},"keys":{"click":"Click"},"rows":{"select":"Select tool","addToSelection":"Add / remove from selection","nudge":"Move selection","copy":"Copy","paste":"Paste","duplicate":"Duplicate","clear":"Clear selection","delete":"Delete selected","tableTool":"Table tool (repeat to change shape)","wallTool":"Wall tool (repeat to change shape)","textTool":"Text label","decorTool":"Elements (decor) picker","save":"Save","undo":"Undo","redo":"Redo","undoAll":"Undo all unsaved changes","zoomIn":"Zoom in","zoomOut":"Zoom out","zoom100":"Actual size","zoomFit":"Fit to screen","toggleGrid":"Alignment grid","toggleZoneOverlay":"Table extras","togglePanel":"Collapse / expand panel","help":"Show this help"}},"rightPanel":{"collapse":"Collapse panel","expand":"Expand panel","untitled":"Untitled floor","emptyHint":"Select an object on the canvas to edit it.","seatingAreas":"Seating areas","areasStub":"Manage areas and colours in Stage 1a.7.","tables":{"title":"Tables ({n})","row":"Table {n}","empty":"No tables on this floor yet. Use the toolbar on the left to add one.","sortBy":"Sort by","sortByNumber":"By number","sortByArea":"By area","reusedActive":"in use","reusedActiveHint":"This number is already live on an active floor â it would collide if this draft is activated."},"areas":{"title":"Seating areas ({n}
1)","namePlaceholder":"Area nameâ¦","duplicate":"An area with this name already exists.","saveError":"Couldn't save. Try again.","deleteError":"Couldn't delete. Try again.","serverError":"Server error. Try later or contact support.","deleteTitle":"Delete area?","deleteMessage":"Remove â{name}â from the seating areas list? Tables already assigned to it keep the label until you reassign them.","color":"Area colour"},"tableSettings":"Table settings","tableHeader":"Table {n}","tableStub":"Number / size / area / online reservation / min guests / deposit / description â Stage 1a.6.","textSettings":"Text settings","textSubtitle":"Text label","textContent":"Text","textPlaceholder":"Label text","textFontFamily":"Font","textFontSize":"Size","textAlign":"Align","textAlignOption":{"left":"Align left","center":"Centre","right":"Align right"},"decorSettings":"Decor settings","decorShape":{"wall":"Wall","wallRound":"Round wall","generic":"Decor element"},"decorStub":"Properties for this element will appear here later.","decorWidth":"Width","decorHeight":"Height","decorRadius":"Radius","decorSize":"Size","decorFill":"Fill","multiTitle":"{n} objects selected","delete":"Delete","fields":{"number":"Number","numberRequired":"Number is required.","numberDuplicate":"Table â{n}â already exists on this floor.","numberActiveDuplicate":"Table â{n}â is already active on {floor}. Numbers must be unique across active floors.","numberAlsoActive":"Also active on: {floor}","numberAlsoDraft":"Also on draft: {floor}","seats":"Seats","seatsHint":"Changes regenerate chairs around the table.","area":"Area","areaPlaceholder":"Unassigned","mixed":"Mixed","noAreasYet":"No seating areas yet. Add one in {link}.","dimensions":"Dimensions","width":"Width","height":"Height","aspectLock":"Lock aspect ratio","aspectUnlock":"Unlock aspect ratio","diameter":"Diameter","sizeLocked":"This table type has a fixed size.","barStoolLocked":"Bar stools have a fixed footprint and seat one guest.","reservation":"Reservation","acceptReservations":"Accept online reservations","acceptReservationsHint":"When off, guests can't book this table through the widget.","reservable":"Reservable","guestsUnit":"guests","minCovers":"Minimum guests","deposit":"Deposit","depositPlaceholder":"Optional","description":"Description","descriptionPlaceholder":"Optional","rotation":"Rotation","numberHasBookings":"Active bookings on this table: {count}. Renaming counts as removing it, so those guests lose their table."},"multi":{"tabActions":"Actions","tabSelection":"Selection","tables":"Tables ({n})","walls":"Walls ({n})","texts":"Text labels ({n})","removeFromSelection":"Remove from selection","common":"Common","tablesOnly":"Tables","wallsOnly":"Walls","groupRotation":"Group rotation","groupRotationHint":"Rotates the entire selection around its centre.","delete":"Delete selection","area":"Area","reservable":"Reservable","fill":"Fill","align":"Align","alignLeft":"Align left edges","alignCenterH":"Align horizontal centres","alignRight":"Align right edges","alignTop":"Align top edges","alignCenterV":"Align vertical centres","alignBottom":"Align bottom edges","distribute":"Distribute","distributeH":"Distribute horizontally (3+)","distributeV":"Distribute vertically (3+)"}},"deleteModal":{"title":"Delete?","titleTable":"Delete Table {n}?","titleWall":"Delete this wall?","titleWallRound":"Delete this round wall?","titleText":"Delete this text label?","titleMulti":"Delete {n} selected objects?","body":"This action cannot be undone.","cancel":"Cancel","confirm":"Delete","bookedWarning":"Table {tables} â active bookings: {count}. Delete it and those guests lose their table. | Tables with active bookings: {tables} ({count} in total). Delete them and those guests lose their table."},"rotation":{"label":"Rotation","nudgeLeft":"Rotate 45° counter-clockwise","nudgeRight":"Rotate 45° clockwise"},"mobile":{"addTitle":"Add object","addObject":"Add object","cancelInsert":"Cancel placement","rotateTitle":"Rotate your phone","rotateBody":"The camera notch is covering the toolbar. Turn the phone the other way for full access."},"reservationConflict":{"title":"These tables have guests","body":"The tables below are being removed or renamed, but guests are still booked on them. Save anyway only if you have already moved those guests or cancelled the bookings.","confirm":"Save anyway"}}`),M={title:"Partner sign-in",subtitle:"Support access â restaurant #{id}
1",subtitleNoId:"Support access",submit:"Sign in",signingIn:"Signing inâ¦",or:"or",google:"Sign in with Google",fillAllFields:"Fill in both fields.",invalidCredentials:"Incorrect email or password.",popupBlocked:"Your browser blocked the sign-in window. Allow pop-ups and try again.",tooManyAttempts:"Too many attempts. Wait a moment and try again.",unauthorizedDomain:"This domain is not allowed in the sign-in settings. Let the Hostme team know.",signInFailed:"Couldn't sign you in. Please try again.",exchangeFailed:"Couldn't open the restaurant. Try again or contact the Hostme team.",notAPartner:"This account has no partner access.",restaurantNotFound:"Restaurant #{id} not found.",noRestaurant:"The link carries no restaurant. Open it again from the partner portal.",notConfigured:"Partner sign-in is not configured in this build.",handover:"Signing you in from the partner portalâ¦",notice:"You're signing in as support into someone else's restaurant. Everything you do is recorded under your name.",sessionBanner:"You're in someone else's restaurant â {name}. Support mode; actions are recorded.",exitMode:"Exit partner mode",intentTitle:"A support link",intentBody:"This link opens restaurant #{id} on behalf of support. Your current session has no access to it.",intentStay:"Stay here",intentSignIn:"Sign in as partner"},E={restaurantTitle:"Another restaurant is shown",restaurantBody:"The link pointed at restaurant #{id}, which this account cannot open. You are looking at {name}.",tabTitle:"That tab is not available to you",tabBody:"The link you followed points at a tab your role cannot open, so we opened one you can. Ask the restaurant owner if you need access.",sectionTitle:"That page is not available to you",sectionBody:"The link you followed leads to a page your role cannot open, so we brought you to the dashboard. Ask the restaurant owner if you need access.",dismiss:"Got it"},O={article:"Help article"},L={auth:e,nav:t,user:a,profileUnavailable:o,appWelcome:n,languages:i,dashboard:s,profile:r,deleteAccount:l,notifications:d,search:c,subscriptionCancelledBanner:u,common:p,roles:h,imagePicker:m,emailEditor:g,events:y,campaigns:b,triggerEditor:v,reservations:f,pages:w,settings:k,floorTables:S,ordering:T,iconPicker:C,administration:P,integrations:A,guests:D,messaging:R,analytics:N,segments:x,subscription:H,floorBuilder:B,partnerSignIn:M,deepLink:E,help:O};export{P as administration,N as analytics,n as appWelcome,e as auth,b as campaigns,p as common,s as dashboard,E as deepLink,L as default,l as deleteAccount,g as emailEditor,y as events,B as floorBuilder,S as floorTables,D as guests,O as help,C as iconPicker,m as imagePicker,A as integrations,i as languages,R as messaging,t as nav,d as notifications,T as ordering,w as pages,M as partnerSignIn,r as profile,o as profileUnavailable,f as reservations,h as roles,c as search,x as segments,k as settings,H as subscription,u as subscriptionCancelledBanner,v as triggerEditor,a as user};
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.