{"common":{"email":"Email","password":"Password","signIn":"Sign In","forgotPassword":{"link":"Forgot password?","title":"Reset your password","description":"Enter your email and we'll send you a link to set a new password.","submit":"Send reset link","submitting":"Sending…","success":"If an account exists for that email, we've sent a link to reset the password. Check your inbox — the link expires in 24 hours.","error":"Something went wrong. Please try again.","slugRequired":"Enter a valid company name.","backToLogin":"Back to sign in"},"logOut":"Log out","cancel":"Cancel","confirm":"Confirm","create":"Create","delete":"Delete","save":"Save","done":"Done","yes":"Yes","no":"No","close":"Close","actions":"Actions","loading":"Loading...","error":"Error","loginFailed":"Login failed","sessionExpired":"Session expired","apiError":"API error {status}","locale":"Language","english":"English","danish":"Dansk","german":"Deutsch","bulgarian":"Bulgarian","swedish":"Swedish","norwegian":"Norwegian","dutch":"Dutch","french":"French","spanish":"Spanish","italian":"Italian","newsletter":{"contentStep":"Step 1 · Content","contentTitle":"Write your newsletter","contentIntro":"Start with a clear subject and keep the message concise and easy to scan.","subject":"Subject","subjectPlaceholder":"What's the email's subject line?","subjectHint":"A specific subject between 30 and 60 characters often works best.","subjectCount":"{count}/60 recommended","preheader":"Preheader","preheaderHint":"Supports the subject in most inboxes. 40–90 characters is recommended.","preheaderPlaceholder":"A one-sentence hook — Gmail and Apple Mail show 40-90 characters.","preheaderCount":"{count}/90 recommended","body":"Body","bodyPlaceholder":"Write your newsletter here…","bodyCount":"{count} characters","required":"(required)","optional":"(optional)","previewToggle":"Preview (inbox rendering)","previewTitle":"Live preview","previewIntro":"Updates as you write","previewSize":"Preview size","desktopPreview":"Show desktop preview","mobilePreview":"Show mobile preview","previewFrameTitle":"Newsletter preview","previewSender":"Your newsletter","previewNow":"Now","previewSubjectFallback":"Subject goes here","previewPreheaderFallback":"Preheader goes here","previewBodyFallback":"Body preview appears once you start typing.","imageNotice":"Images cannot be inserted yet. Use text and links to create a simple, readable newsletter.","dismissNotice":"Dismiss notice","readinessTitle":"Draft readiness","subjectReady":"Subject added","bodyReady":"Body added","readyToSave":"Your content is ready to save as a draft.","missingRequired":"Add a subject and body to save."},"users":{"inviteStatus":{"pending":"Pending","accepted":"Accepted","expired":"Expired","bounced":"Bounced"},"resendInvite":{"action":"Resend invite","tooltipAccepted":"This user has already accepted their invite.","toastSuccess":"Invite sent to {email}.","toastRateLimit":"Too many invites sent recently. Please wait a few minutes and try again.","toastError":"Failed to send invite. Please try again."},"inviteSentModal":{"title":"Invite sent","body":"An invite has been sent to {email}. They will receive a link to set up their account. The link expires on {expiresAt, date, long}.","emailHint":"If the email does not arrive within a few minutes, check the spam folder or use the resend option.","resendAction":"Resend invite","close":"Done"}}},"locale":{"name":{"en":"English","da":"Danish","de":"German","bg":"Bulgarian","sv":"Swedish","nb":"Norwegian","nl":"Dutch","fr":"French","es":"Spanish","it":"Italian"},"switcher":{"aria":{"trigger":"Change language, current: {locale}","option":"Switch to {locale}"}}},"account":{"menuAria":"Account menu","theme":"Theme","themeLight":"Light","themeDark":"Dark","themeSystem":"System","language":"Language","goToProfile":"Go to profile","changePassword":"Change password","installApp":"Install app","howToInstall":"How to install","logout":"Log out","changePasswordModal":{"title":"Change password","current":"Current password","new":"New password","confirm":"Confirm new password","submit":"Update password","cancel":"Cancel","success":"Password updated. Other signed-in devices have been signed out.","mismatch":"The new passwords don't match.","weak":"Password must be at least 12 characters and include upper, lower, and a digit.","error":"Could not change password. Check your current password and try again."}},"roomFeatures":{"amenities":{"wifi":"Free WiFi","tv":"TV","privateBathroom":"Private bathroom","airCon":"Air conditioning","heating":"Heating","hotTub":"Hot tub","minibar":"Minibar","kitchen":"Kitchen","coffeeTea":"Coffee & tea","parking":"Parking","petFriendly":"Pet-friendly","workspace":"Workspace","balcony":"Balcony / terrace","linenTowels":"Linen and towels","evCharger":"EV charger","bicycle":"Bicycles","bbq":"Barbecue (gas/charcoal)","parasol":"Parasol","pool":"Pool","dishwasher":"Dishwasher","electricKettle":"Electric kettle","freezer":"Freezer","oven":"Oven"},"beds":{"single":"{count, plural, one {# single bed} other {# single beds}}","double":"{count, plural, one {# double bed} other {# double beds}}","queen":"{count, plural, one {# queen bed} other {# queen beds}}","king":"{count, plural, one {# king bed} other {# king beds}}","bunk":"{count, plural, one {# bunk bed} other {# bunk beds}}","sofa":"{count, plural, one {# sofa bed} other {# sofa beds}}"},"bedTypes":{"single":"Single bed","double":"Double bed","queen":"Queen bed","king":"King bed","bunk":"Bunk bed","sofa":"Sofa bed"}},"errorPages":{"notFoundTitle":"Page not found","backToHome":"Back to home","errorTitle":"Something went wrong","errorDescription":"An unexpected error occurred.","retry":"Try again"},"tenant":{"impersonation":{"viewing":"Operator session — you are viewing {tenant} as {operator}.","thisTenant":"this tenant","expiresIn":"Ends in {minutes} min","end":"Exit session","ending":"Exiting…","opening":"Opening…","failedTitle":"This handoff link is no longer valid","failedBody":"Handoff links can only be used once and expire after a minute. Open the tenant again from the admin console.","backToAdmin":"Back to the admin console"},"login":{"title":"Welcome back","eyebrow":"Property dashboard","description":"Sign in to manage your property and reservations.","adminOnly":"Please use the admin portal to log in.","slugLabel":"Company name","slugRequired":"Enter a valid company name."},"paymentReturn":{"successTitle":"Payment submitted","successBody":"Return to the management app to refresh the booking and check the provider-confirmed payment status.","cancelledTitle":"Payment window closed","cancelledBody":"Return to the management app to refresh the booking before deciding whether to try again.","unknownTitle":"Payment window closed","unknownBody":"Return to the management app to check the latest payment status.","returnToApp":"Return to management app","closeHint":"If the app does not reappear automatically, close this browser tab and open the installed app.","openInBrowser":"Open management dashboard in this browser"},"pwa":{"calloutTitle":"Install the staff app","calloutBody":"Open the dashboard from your home screen in its own app window. The normal website keeps working too.","installApp":"Install app","howToInstall":"How to install","dismissCallout":"Hide install suggestion","iosTitle":"Add the staff app to your Home Screen","iosDescription":"Install this management website as a web app. It is not downloaded from the App Store.","iosStepShare":"Open the browser Share menu.","iosStepAdd":"Choose Add to Home Screen.","iosStepOpenAsApp":"Enable Open as Web App if that option is shown.","iosStepConfirm":"Confirm Add.","close":"Close","closeInstallInstructions":"Close install instructions","offlineBanner":"You're offline. Live data is unavailable and changes cannot be saved until you reconnect.","viewSavedSchedule":"View saved schedule","snapshotRefreshFailedRetained":"The saved offline schedule was not refreshed. The previous copy from {time} was kept and may be out of date.","snapshotRefreshFailedEmpty":"The offline schedule could not be refreshed, so no saved schedule is currently available.","secureSignOutTitle":"Signing you out securely","secureSignOutWorking":"Your private information is hidden while this device completes sign-out.","secureSignOutOffline":"Your private information is hidden. Sign-out will finish automatically when this device reconnects.","secureSignOutRetryBody":"The sign-out request did not reach the server. Try again to finish securely.","retry":"Try again","updateRequiredTitle":"Reload to finish updating","updateRequiredBody":"A newer version of the staff app is available. Reload when you are ready; unsaved changes on this page will be lost.","reloadApp":"Reload app","reloadLater":"Not now","updateRecoveryExhausted":"The update still could not load. Close this window and open the staff app again."},"nav":{"primary":"Main navigation","collapse":"Collapse menu","expand":"Expand menu","openMenu":"Open menu","closeMenu":"Close menu","helpTitle":"Need help?","helpBody":"If anything is unclear, we're here to get you going again.","helpCta":"Contact support","support":{"title":"Contact support","description":"Choose a topic and tell the platform team how we can help.","categoryLabel":"Topic","categories":{"GENERAL":"General question","BILLING":"Billing","TECHNICAL":"Technical issue","FEATURE_REQUEST":"Feature request"},"messageLabel":"Message","messagePlaceholder":"Describe what you need help with…","send":"Send request","sending":"Sending…","cancel":"Cancel","close":"Close support form","sent":"Your support request was sent.","sendFailed":"The request could not be sent.","mailFallback":"Send an email instead"}},"legal":{"termsOfService":"Terms of service","cookieSettings":"Cookie settings","termsAcceptance":{"title":"Accept the terms of service","body":"Before you start using Guest & Stay, please read and accept our terms of service. They describe what we provide and what you are responsible for.","readTerms":"Read the terms of service","accept":"I accept the terms","signOut":"Sign out","saveFailed":"Your acceptance could not be saved. Please try again."},"cookieConsent":{"title":"Cookies on Guest & Stay","necessary":"We use necessary cookies to keep you signed in and remember your settings. They are always on.","statistics":"With your consent we also collect anonymous performance measurements that help us make the dashboard faster. You can change your choice at any time under Cookie settings in the account menu.","readMore":"Read more about cookies","acceptAll":"Accept all","necessaryOnly":"Only necessary","currentAccepted":"Your current choice: Accept all","currentDeclined":"Your current choice: Only necessary","close":"Close","saveFailed":"Your choice could not be saved. Please try again."}},"quickSearch":{"title":"Search the workspace","trigger":"Search","placeholder":"Search bookings, guests or settings","loading":"Loading bookings and guests…","loadFailed":"Some results could not be loaded.","retry":"Try again","hint":"Type at least two characters to find bookings and guests.","newBooking":"New booking","actions":"Quick actions","bookings":"Bookings","guests":"Guests","settings":"Settings","refine":"{count} matches. Refine your search to see fewer results.","empty":"No matches. Try a name, phone number or booking reference.","refresh":"Refresh this page"},"editing":{"unsaved":"Unsaved changes","leavePrompt":"Save your changes before continuing, or discard them.","keepEditing":"Keep editing","discard":"Discard changes","saveAndContinue":"Save and continue","saving":"Saving…","saved":"Saved","requiredFields":"Please complete the required fields before saving.","newDraft":"Not saved yet","editRoomRestrictions":"Edit room restrictions","viewRoom":"View room"},"settingsNavigation":{"searchLabel":"Search settings","searchPlaceholder":"Search settings…","resultsCount":"{count} settings","empty":"No settings match your search.","groups":{"property":"Property","booking":"Booking","payments":"Payments","communication":"Communication","account":"Account"}},"setupChecklist":{"title":"Setup checklist","description":"Check the live configuration before you share your booking link.","progress":"{done} of {total} complete","optional":"Optional","status":{"complete":"Complete","incomplete":"Needs attention","loading":"Checking…","error":"Unavailable","unknown":"Needs review"},"items":{"rooms":{"title":"Rooms","description":"Add at least one active room with capacity and availability."},"pricing":{"title":"Pricing","description":"Give every active room a base price."},"bookingRules":{"title":"Booking rules","description":"Set the default check-in and check-out times."},"payments":{"title":"Card payments","description":"Connect and verify a provider when you want to collect card payments."},"mail":{"title":"Confirmation email","description":"Verify the sender used for booking confirmations."},"terms":{"title":"Terms and cancellation","description":"Add the terms guests accept before booking."},"website":{"title":"Website","description":"Publish your homepage before sharing it. Contact support if you need help."},"widget":{"title":"Booking widget","description":"Allow at least one website origin for the inline booking widget."}},"retry":"Retry","retryAll":"Retry all","optionalProgress":"Optional: {done} of {total}"},"dailyNavigation":{"close":"Close","calendarOverflowOpen":"Show {count, plural, one {# more booking} other {# more bookings}} on {date}","calendarOverflowTitle":"Bookings on {date}","calendarOverflowCount":"{count, plural, one {# booking} other {# bookings}}","calendarOverflowList":"Bookings for the selected day"},"onboarding":{"eyebrow":"Getting started","title":"Onboarding guide","description":"Learn what each part of your dashboard does, complete the important setup, and find the right setting without technical knowledge.","openSettings":"Open settings","adminOnlyTitle":"Administrator guide","contentsLabel":"On this page","contents":{"tour":"Your dashboard","firstSetup":"First-time setup","dailyWork":"Daily work","settingsMap":"Where to change things","help":"Ready to launch"},"tour":{"title":"Your dashboard","body":"The left menu is organised by the job you want to do. These are the areas you will use most often.","bookings":{"title":"Bookings","body":"Create, search and update stays, payments and confirmation emails."},"calendar":{"title":"Calendar","body":"See availability across rooms and spot bookings or blocked dates at a glance."},"guests":{"title":"Guests","body":"Find guest contact details and booking history, or add a guest manually."},"messages":{"title":"Messages","body":"Read enquiries sent through contact forms on your managed website."},"finance":{"title":"Finance","body":"Follow revenue, outstanding payments and invoices, and export bookkeeping files."}},"firstSetup":{"title":"First-time setup","body":"Complete these steps in order before you invite guests to book. You can return to each setting at any time.","rooms":{"title":"Add your rooms","body":"Under Settings → Rooms, add each room, its capacity, base price, photos, amenities and any minimum or maximum stay."},"pricing":{"title":"Check prices and discounts","body":"Under Settings → Pricing, set seasonal changes and stay-length rates. Create discount codes only after the normal price is correct."},"rules":{"title":"Set booking rules","body":"Choose check-in and check-out times, then add closures for dates when guests must not book."},"payments":{"title":"Choose how guests pay","body":"Connect QuickPay for cards, and configure invoicing if you offer bank transfer or need guest invoices."},"communication":{"title":"Set up emails and terms","body":"Configure the sender used for confirmations and add the terms and cancellation information guests must accept."},"channels":{"title":"Connect external calendars","body":"Add the Booking.com calendar feed for each room and check the sync status before relying on combined availability."},"team":{"title":"Invite your team","body":"Under Users, invite administrators who can change settings and viewers who only need read access."}},"dailyWork":{"title":"Common daily tasks","body":"Use these simple routes when you are unsure where to start.","newBooking":{"title":"A guest books by phone","body":"Open Bookings, choose New booking, select room and dates, add the guest, then review the calculated total before saving."},"arrival":{"title":"Prepare today's arrivals","body":"Open the Dashboard for the summary, then use Calendar or Bookings to review names, rooms, payment and arrival notes."},"guestQuestion":{"title":"A guest asks a question","body":"Find the guest or booking, review the full history, then use Send message. Website enquiries appear under Messages."}},"settingsMap":{"title":"Where do I change this?","body":"Choose the card that matches what you want to change. Each link opens the exact settings page.","rooms":{"title":"Rooms and photos","body":"Capacity, beds, amenities, prices and calendar feeds"},"pricing":{"title":"Prices and discounts","body":"Seasonal rates, length-of-stay prices and discount codes"},"rules":{"title":"Booking rules","body":"Arrival times and stay restrictions"},"payments":{"title":"Card payments","body":"QuickPay connection and payment status"},"mail":{"title":"Confirmation sender","body":"The name and email address guests receive mail from"},"invoicing":{"title":"Invoices and bank transfer","body":"VAT, numbering, bank details and invoice exports"},"terms":{"title":"Terms and cancellation","body":"The conditions guests accept before booking"},"team":{"title":"Users and access","body":"Invite colleagues and choose administrator or viewer access"}},"help":{"title":"Ready to accept bookings","body":"Run one final check from a guest's point of view before you share the booking link.","readyTitle":"Final checklist","ready":{"room":"At least one active room has the correct capacity and photos.","price":"A test stay shows the expected total price.","availability":"Bookings, closures and external calendars block the correct dates.","payment":"The intended card or bank-transfer payment option is available.","email":"The test guest receives a confirmation from the correct sender.","terms":"Terms, cancellation policy and invoice details are complete.","test":"You have created and then cancelled a test booking."},"supportTitle":"Need a person?","supportBody":"Use Contact support at the bottom of the left menu. Choose the topic and describe what you expected to happen, what happened instead, and which booking or guest was involved."}},"dashboard":{"title":"Dashboard","viewOnly":"View only","loadFailed":"Failed to load dashboard","refresh":"Refresh","updatedJustNow":"Updated just now","updatedMinutesAgo":"Updated {minutes} min ago","chartUnavailable":"Chart unavailable","emptyTitle":"Welcome — let's get you set up","emptyBody":"You don't have any bookings or guests yet. Start by creating your first booking or adding a guest.","emptyCreateBooking":"Create first booking","emptyAddGuest":"Add a guest","calendarTitle":"Calendar overview","calendarLink":"See the full calendar","overviewTitle":"Overview"},"stats":{"thisMonth":"this month","revenue":"Revenue","returningGuests":"Returning Guests","guestsWithMultiple":"guests with 2+ bookings","upcoming":"Upcoming","upcomingDescription":"bookings in next 30 days","outstanding":"Outstanding","outstandingSubtitle":"{count, plural, one {# unpaid booking} other {# unpaid bookings}}"},"overview":{"revenue":"Revenue (month)","revenueSubtitle":"{count, plural, one {# booking} other {# bookings}} this month","arrivals":"Arrivals today","arrivalsSubtitle":"guests checking in","departures":"Departures today","departuresSubtitle":"guests checking out","occupancy":"Occupancy ({days} days)","outstanding":"Awaiting payment","unreadMessages":"Unread messages","unreadMessagesSubtitle":"{count, plural, =0 {No new messages} one {# new message} other {# new messages}}"},"inbox":{"title":"Messages","description":"Keep guest enquiries and conversations with the platform team in one place.","unreadCount":"{count, plural, =0 {No unread messages} one {# unread message} other {# unread messages}}","sectionsLabel":"Message categories","guestMessages":"Guest enquiries","platformSupport":"Platform support","conversations":"Conversations","loading":"Loading messages…","loadFailed":"Messages could not be loaded.","threadLoadFailed":"The conversation could not be loaded.","emptyTitle":"No messages yet","emptyBody":"Contact-form enquiries and conversations you start from a guest’s page appear here.","selectTitle":"Select a conversation","selectBody":"Choose a sender to read their messages.","loadingThread":"Loading conversation…","unread":"Unread","back":"Back","viewGuest":"View guest","reply":"Reply by email","you":"You","previewYou":"You: {text}","noText":"(no text)","channel":{"WEB_FORM":"Contact form","EMAIL":"Email"},"delivery":{"PENDING":"Sending","SENT":"Sent","DELIVERED":"Delivered","BOUNCED":"Bounced","COMPLAINED":"Marked as spam","FAILED":"Failed"},"senderMismatch":"This reply came from {senderEmail}, not {guestEmail}.","senderMismatchUnknown":"This reply came from an address other than {guestEmail}.","authenticationFailed":"This email failed the sender checks and may not come from the address shown.","autoReply":"Automatic reply","attachmentsNotShown":"{count, plural, one {This email had an attachment. Attachments are not shown here yet.} other {This email had # attachments. Attachments are not shown here yet.}}","showQuoted":"Show quoted text","hideQuoted":"Hide quoted text","retry":"Retry","replyLabel":"Reply","replyPlaceholder":"Write your reply…","replyHint":"The guest receives your reply by email, and their answers arrive in this conversation.","charactersLeft":"{count, plural, one {# character left} other {# characters left}}","send":"Send","sending":"Sending…","sendFailed":"The message could not be sent. Try again.","rateLimited":"The hourly message limit has been reached. Try again later.","sendRecipientRefused":"This guest’s email address cannot receive messages sent from here.","sendUncertain":"The connection failed before the message was confirmed. Check the conversation before you send it again.","sentButFailed":"The message was saved but could not be sent. Use Retry to send it again.","replyUnavailable":"Replying from the inbox is not available yet.","replyViewOnly":"Only administrators can reply to guests.","support":{"conversations":"Support conversations","new":"New","loading":"Loading conversations…","loadFailed":"Support conversations could not be loaded.","threadLoadFailed":"The support conversation could not be loaded.","emptyTitle":"No support conversations yet","emptyBody":"Start a conversation when you need help from the platform team.","selectTitle":"Select a support conversation","selectBody":"Choose an existing conversation or create a new support request.","loadingThread":"Loading conversation…","unread":"Unread","back":"Back","newTitle":"New support request","categoryLabel":"Category","messageLabel":"Message","messagePlaceholder":"Describe what you need help with…","cancel":"Cancel","send":"Send request","sending":"Sending…","sendFailed":"The message could not be sent. Try again.","replyLabel":"Reply","replyPlaceholder":"Write a reply to the platform team…","sendReply":"Send reply","ticketReference":"Request #{id}","you":"You","platformTeam":"Platform team","viewOnly":"Only tenant administrators can send support messages.","categories":{"GENERAL":"General question","BILLING":"Billing","TECHNICAL":"Technical issue","FEATURE_REQUEST":"Feature request"}}},"earnings":{"title":"Earnings","mtd":"Revenue this month","avgBooking":"Avg. booking value","outstanding":"Outstanding","allTime":"All-time revenue"},"performance":{"title":"Performance","cancelledOf":"{count} of {total} bookings","repeatOf":"{count} of {total} bookings"},"occupancy":{"title":"Occupancy","roomNights":"{booked} of {available} room nights booked","noRooms":"No active rooms"},"recentBookings":{"title":"Recent bookings","empty":"No bookings yet","bookingCom":"Booking.com","local":"Local","viewAll":"View all"},"upcoming":{"title":"Next {days} days","empty":"Nothing booked in this window","days7":"7 days","days14":"14 days","nights":"{count, plural, one {# night} other {# nights}}"},"momDelta":{"up":"+{pct}% vs last month","down":"{pct}% vs last month","flat":"Same as last month","noPrior":"First month with revenue"},"trends":{"cancellationRate":"Cancellation rate","repeatGuestShare":"Repeat-guest share","windowLabel":"rolling {days} days","deltaPp":"{pp} pp vs prior period","deltaFlat":"Unchanged vs prior period","noPriorPeriod":"No prior period to compare"},"revenue":{"title":"Revenue (last 12 months)","seriesLabel":"Revenue"},"finance":{"title":"Finance","description":"Track revenue, payment status and issued invoices in one place.","refresh":"Refresh","loadFailed":"Finance data could not be loaded.","revenueThisMonth":"Revenue this month","outstanding":"Outstanding","overdue":"Overdue","paid":"Paid","bookings":"{count, plural, one {# booking} other {# bookings}}","paymentBreakdown":"Payment status","unpaid":"Unpaid","pending":"Pending","refunded":"Refunded","invoicesTitle":"Invoices","invoicesDescription":"The 100 most recently issued invoices. Internal bookings are excluded.","noInvoices":"No invoices have been issued yet.","invoiceNumber":"Invoice","guest":"Guest","bookingReference":"Booking","issued":"Issued","amount":"Amount","status":"Status","due":"Due","paidOn":"Paid {date}","dueOn":"Due {date}","noDueDate":"No due date","unknownGuest":"Unknown guest","invoiceStatus":{"GENERATING":"Generating","READY":"Ready","FAILED":"Failed"},"paymentStatus":{"UNPAID":"Unpaid","PENDING":"Pending","PAID":"Paid","REFUNDED":"Refunded"},"exportTitle":"Bookkeeping export","exportDescription":"Download invoices and the CSV ledger for the selected issue-date range.","exportFrom":"From","exportTo":"To","export":"Export CSV & PDFs","exporting":"Preparing export…","exportFailed":"The invoice export could not be created.","exportAdminOnly":"Only tenant administrators can export accounting data.","download":"Download PDF","downloadFailed":"The invoice PDF could not be downloaded.","settings":"Invoice settings"},"bookings":{"title":"Bookings","subtitle":"Manage stays and payments in one place.","activeBookings":"Active","archivedBookings":"Archived","archiveDescription":"Bookings are automatically archived after their checkout date.","emptyActive":"No active bookings","summaryArrivals":"Arriving in the next 7 days","summaryOutstanding":"Awaiting payment","summaryScope":"With the current filters","clearFilters":"Clear filters","firstBooking":"Create a reservation","newBookingDescription":"Add the stay, guest and price.","editBookingDescription":"Update the stay, price and notes.","loadFailed":"Failed to load bookings","empty":"No bookings yet","count":"{count, plural, one {# booking} other {# bookings}}","allStatuses":"All statuses","confirmed":"Confirmed","pending":"Pending","cancelled":"Cancelled","newBooking":"New Booking","staySectionTitle":"Stay","staySectionDescription":"Choose the room, dates and number of guests.","guestSectionTitle":"Guest","guestSectionDescription":"Add the contact details you have. Only the name is required.","pricingSectionTitle":"Price and booking type","pricingSectionDescription":"Review the calculated price or mark the stay as internal.","notesSectionTitle":"Notes","notesSectionDescription":"Add any practical details the team should know.","notesPlaceholder":"Special requests, access details or other notes...","colReference":"Reference","colGuest":"Guest","colDates":"Dates","colCountryCode":"Country code","colNights":"Nights","partySize":"Guests","colRoom":"Room","colPrice":"Price","colSource":"Source","colStatus":"Status","colActions":"Actions","local":"Local","cancel":"Cancel","confirmCancel":"Are you sure you want to cancel this booking?","keepBooking":"Keep booking","cancelBooking":"Cancel booking","cancelFailed":"Failed to cancel booking","cancelBookingCount":"{count, plural, one {# booking} other {# bookings}} selected","cancellationReason":"Reason","reasonCancellation":"Cancellation","reasonNoShow":"No-show","calculatingCancellation":"Calculating charge and refund…","cancellationPreviewFailed":"The amounts could not be calculated. Try again before confirming.","retryCancellationPreview":"Try calculation again","cancellationBandApplied":"Calculated {days} days before check-in at {percent}%.","cancellationCharge":"Cancellation charge","noShowCharge":"No-show charge","resultingRefund":"Resulting refund","manualRefundRequired":"The refund must still be transferred manually after cancellation.","currentCancellationRulesApplied":"This booking has no saved structured snapshot, so the current tenant rules apply.","cancellationCalculationUnavailable":"{count, plural, one {The charge and refund for # booking cannot be calculated from structured rules and must be reviewed manually.} other {The charge and refund for # bookings cannot be calculated from structured rules and must be reviewed manually.}}","createFailed":"Failed to create booking","paymentFailed":"Failed to start payment","paymentWindowBlocked":"Allow the payment window, then try again.","paymentWindowClosed":"The payment window was closed before checkout opened. Please try again.","refundNeeded":"Refund needed","markRefundResolved":"Mark refund resolved","refundResolveFailed":"Could not update the refund status. Please try again.","colPayment":"Payment","goToPayment":"Go to Payment","payment_unpaid":"Unpaid","payment_pending":"Payment pending","payment_paid":"Paid","payment_refunded":"Refunded","payment_outstanding":"Payment outstanding","allPayments":"All payments","allSources":"All sources","dateModeLabel":"Date filter","dateModeStaying":"Staying in range","dateModeArriving":"Arriving in range","dateModeDeparting":"Departing in range","price":"Price","guestName":"Guest name","guestEmail":"Guest email","guestEmailOptional":"Guest email (optional)","noEmailNoConfirmation":"No email — the guest won't receive a confirmation.","guestPhone":"Phone (optional)","startDate":"Check-in","endDate":"Check-out","notes":"Notes","edit":"Edit","editBooking":"Edit Booking","editFailed":"Failed to update booking","dateError":"Check-out must be after check-in","searchPlaceholder":"Search by reference, guest name or email...","noResults":"No bookings match your search","details":"Booking Details","detailReference":"Reference","detailGuest":"Guest","detailPhone":"Phone","detailDates":"Dates","detailNights":"{count, plural, one {# night} other {# nights}}","detailTimes":"Times","arrivalTime":"Arrival","departureTime":"Departure","expectedArrival":"Expected arrival","timePlaceholder":"Select a time","arrivalNotStated":"Guest doesn't know yet","adultsLabel":"Adults","childrenLabel":"Children","childAgeLabel":"Age of child {number}","capacityHint":"The room sleeps {count} guests","internalBooking":"Internal booking","internalBookingHint":"Sets the agreed price to 0 and excludes this booking from revenue and booking statistics.","internalBookingBadge":"Internal","excludedFromRevenue":"Excluded from revenue","internalPriceHint":"Internal bookings use an agreed total of 0.","detailPrice":"Price","detailSource":"Source","detailStatus":"Status","detailPayment":"Payment","detailNotes":"Notes","detailCreated":"Created","detailCalendar":"Calendar event linked","noPhone":"Not provided","noEmail":"No email address","noNotes":"No notes","close":"Close","dateFrom":"From date","dateTo":"To date","clearDates":"Clear date filter","exportCsv":"Export CSV","exportFailed":"Could not prepare the booking export.","viewList":"List","viewCalendar":"Calendar","calendarToday":"Today","calendarAllRooms":"All rooms","calendarRoomFilterLabel":"Room:","calendarRoomsBooked":"{n} of {m} rooms booked","selectAll":"Select all visible bookings","selectRow":"Select booking for {id}","selectedCount":"{count, plural, one {# booking selected} other {# bookings selected}}","bulkCancel":"Cancel selected","exportSelected":"Export selected","moreActions":"More actions","clearSelection":"Clear selection","preset_today":"Today","preset_next7":"Next 7 days","preset_next30":"Next 30 days","partyBreakdown":"{adults} adults, {children} children","roomLabel":"Room","roomPlaceholder":"Select a room","additionalRoomsLabel":"Additional rooms","combinedCapacityHint":"The selected rooms sleep {count} guests","priceAutoFromQuote":"Auto-filled from live quote — edit to override.","agreedPrice":"Agreed total","priceBasis":"Pricing basis: {basis}","priceBasisLabel":"Agreed price basis","priceBasisPerNight":"Per night","priceBasisPerStay":"Whole stay","priceVatIncluded":"Price includes VAT ({rate}%).","priceVatNotRegistered":"No VAT is included because the business is not VAT-registered.","useOtherAgreedPrice":"Use other agreed price","otherAgreedPriceActive":"Other agreed price","useLiveQuote":"Use live quote","quoteHeading":"Live quote","quoteLoading":"Calculating...","quoteStayLength":"Stay length","quoteNights":"{count, plural, one {# night} other {# nights}}","perNight":"per night","quoteBasePerNight":"Base price per night","quoteBasePerStay":"Base price for whole stay","quoteSeasonal":"Seasonal rate","quoteReferenceTotal":"Live quote reference","agreedTotal":"Agreed total","quoteTotal":"Total","sendMessage":"Send message","confirmMailStatus":"Confirmation email","confirmMail_NOT_SENT":"Not sent","confirmMail_QUEUED":"Queued","confirmMail_SENT":"Sent","confirmMail_BOUNCED":"Bounced","confirmMail_COMPLAINED":"Reported as spam","confirmMail_FAILED":"Failed","confirmMailError":"Error","resendConfirmation":"Resend confirmation","resendConfirmationLoading":"Resending…","resendConfirmationSuccess":"Confirmation email queued for resend.","resendConfirmationFailed":"Failed to resend confirmation. Please try again.","importBookings":"Import bookings","importTitle":"Import bookings from CSV","importDescription":"Map your columns, review availability conflicts row by row, then import all approved bookings in one transaction. Importing does not send emails.","importCurrency":"Currency","importSkip":"Skip this row","importIntoRoom":"Import into {room}","importCreatedReference":"Created as {reference}.","importReasonNAME_REQUIRED":"Guest name is required.","importReasonNAME_TOO_LONG":"Guest name is too long.","importReasonEMAIL_INVALID":"Email is invalid.","importReasonEMAIL_TOO_LONG":"Email is too long.","importReasonPHONE_TOO_LONG":"Phone number is too long.","importReasonSTART_DATE_INVALID":"Check-in must be a valid YYYY-MM-DD date.","importReasonEND_DATE_INVALID":"Check-out must be a valid YYYY-MM-DD date.","importReasonDATE_RANGE_INVALID":"Check-out must be after check-in.","importReasonROOM_NOT_FOUND":"The room is missing or inactive.","importReasonROOM_AMBIGUOUS":"More than one active room has this name; use the room ID.","importReasonPRICE_INVALID":"Price must be a non-negative amount with at most two decimals.","importReasonCURRENCY_INVALID":"Currency must be a three-letter code.","importReasonNOTES_TOO_LONG":"Notes are too long.","importReasonGUEST_COUNT_INVALID":"Guest count must be a whole number from 1 to 50.","importReasonGUEST_COUNT_EXCEEDS_CAPACITY":"Guest count exceeds the selected room's capacity.","importReasonSTATUS_INVALID":"Status must be CONFIRMED, PENDING, or CANCELLED.","importReasonARRIVAL_TIME_INVALID":"Arrival time must use 24-hour HH:mm format.","importReasonINTERNAL_INVALID":"Internal must be yes/no or true/false.","importReasonBOOKING_CONFLICT":"Dates overlap an existing booking.","importReasonOTA_CONFLICT":"Dates overlap an external calendar block.","importReasonCLOSURE_CONFLICT":"Dates overlap a closure.","importReasonCSV_CONFLICT":"Dates overlap an earlier approved row in this CSV."},"guests":{"noEmail":"No email on file","notProvided":"Not provided","profileLoadFailed":"Failed to load the guest profile","profileNotFound":"Guest not found","backToGuests":"Back to guests","profileEyebrow":"Guest profile","editProfileDescription":"Update the guest's contact information and profile image.","profileSaved":"Guest profile saved.","profileImageChange":"Upload profile image","profileImageUploading":"Uploading…","profileImageHint":"JPEG, PNG, WebP, or GIF. Maximum 5 MB.","profileImageInvalidType":"Choose a JPEG, PNG, WebP, or GIF image.","profileImageTooLarge":"The image must be no larger than 5 MB.","profileImageFailed":"The profile image could not be uploaded.","newsletterStatus":"Newsletter consent","newsletterSubscribed":"Subscribed","newsletterNotSubscribed":"Not subscribed","newsletterSubscribedAt":"Consent recorded","newsletterUnsubscribedAt":"Unsubscribed","reservationsTitle":"Reservations","reservationsDescription":"{count, plural, =0 {No reservations} one {# reservation} other {# reservations}} linked to this guest.","reservationsEmpty":"This guest has no reservations yet.","reservationNoReference":"No reference","reservationNoRoom":"No room assigned","reservationBookingId":"Booking ID","reservationDates":"Stay dates","reservationNights":"Nights","reservationParty":"Guests","reservationPrice":"Price","reservationPaymentMethod":"Payment method","paymentMethodCARD":"Card","paymentMethodBANK_TRANSFER":"Bank transfer","reservationPaidAt":"Paid","reservationArrival":"Arrival time","reservationDeparture":"Departure time","reservationCreated":"Booked","reservationAdults":"Adults","reservationChildren":"Children","reservationAddress":"Billing address","reservationConfirmation":"Confirmation email","reservationInvoice":"Invoice","reservationRefund":"Refund required","reservationType":"Reservation type","reservationInternal":"Internal stay","reservationGuestStay":"Guest stay","reservationNotes":"Notes","reservationMailError":"Email delivery error","title":"Guests","loadFailed":"Failed to load guests","empty":"No guests yet","noResults":"No guests match your search","searchPlaceholder":"Search by name, email or phone...","count":"{count, plural, one {# guest} other {# guests}}","colName":"Name","colEmail":"Email","colPhone":"Phone","colBookings":"Bookings","colSince":"Guest since","edit":"Edit","editGuest":"Edit Guest","editFailed":"Failed to update guest","deleteTitle":"Delete Guest","deleteConfirm":"Delete guest \"{name}\"? This cannot be undone.","deleteFailed":"Failed to delete guest","messages":"Messages","newGuest":"New guest","createDescription":"Create a guest without creating a booking.","createFailed":"Failed to create guest","importGuests":"Import guests","importTitle":"Import guests from CSV","importDescription":"Map your columns, review every row, then import the valid guests.","newsletterConsentNotice":"Creating or importing a guest never subscribes them to newsletters. Consent must be collected separately.","importReasonNameRequired":"Name is required.","importReasonNameTooLong":"Name is too long.","importReasonEmailInvalid":"Email is invalid.","importReasonEmailTooLong":"Email is too long.","importReasonPhoneTooLong":"Phone is too long.","importReasonEmailExists":"Email already exists.","importReasonEmailDuplicateFile":"Email is duplicated in this file."},"csvImport":{"close":"Close","uploadFailed":"The file could not be uploaded.","previewFailed":"The import preview could not be created.","reviewFailed":"The row decisions could not be reviewed.","commitFailed":"The records could not be imported.","chooseFile":"Choose CSV file","uploading":"Uploading…","retentionNotice":"The raw file is never stored. Parsed rows expire automatically after 10 minutes.","rowsDetected":"{count, plural, one {# data row found} other {# data rows found}}","doNotImport":"Do not import","chooseAnother":"Choose another file","preview":"Create dry-run preview","previewing":"Creating preview…","total":"Total rows","ready":"Ready","created":"Created","duplicates":"Duplicates","conflicts":"Conflicts","invalid":"Invalid","row":"Row {number}","statusREADY":"Ready","statusCREATED":"Created","statusDUPLICATE":"Duplicate","statusINVALID":"Invalid","statusCONFLICT":"Conflict","statusSKIPPED":"Skipped","decisionForRow":"Decision for row {number}","reviewing":"Reviewing decisions…","reviewDecisions":"Review decisions","done":"Done","backToMapping":"Back to mapping","importing":"Importing…","importReady":"{count, plural, one {Import # record} other {Import # records}}"},"messages":{"panel":{"title":"Messages — {name}","subtitle":"Operator-sent messages, newsletters delivered to {email}, and booking confirmations sent for this guest.","sendMessage":"Send message","close":"Close","loadFailed":"Could not load messages.","empty":"No messages yet.","preview":"Preview","closePreview":"Close preview","previewTitle":"Message body preview","colWhen":"When","colKind":"Kind","colSubject":"Subject","colStatus":"Status","colBody":"Body","sourceOperator":"Operator","sourceNewsletter":"Newsletter","sourceBookingConfirmation":"Booking"},"compose":{"title":"Send message","subtitle":"To {guestName} <{guestEmail}>","serviceNote":"For service messages about this guest’s booking — not marketing. Use the newsletter tool for promotions.","subjectLabel":"Subject","subjectPlaceholder":"Subject…","messageLabel":"Message","messagePlaceholder":"Write your message…","cancel":"Cancel","send":"Send message","sending":"Sending…","sendFailed":"Failed to send the message.","rateLimited":"The hourly message limit has been reached. Try again later.","recipientRefused":"This guest’s email address cannot receive messages sent from here.","sendUncertain":"The connection failed before the message was confirmed. Check the guest’s messages before you send it again.","sentTitle":"Message sent","repliesArrive":"Replies arrive in your inbox.","notSentTitle":"Message not sent","notSentBody":"The message could not be sent. Open the conversation to try again.","openConversation":"Open conversation","done":"Done"}},"users":{"title":"Users","heading":"Team members","description":"Manage who has access to this site.","empty":"No users yet","newUser":"+ New user","createUser":"Create user","userCreated":"User created!","credentialsWarning":"Save these credentials now — the password will not be shown again.","colName":"Name","colEmail":"Email","colPhone":"Phone","phoneInvalid":"Enter a valid phone number with country code.","phoneHint":"Include the country code, for example +45.","colRole":"Role","colLocale":"Language","profileDialogLabel":"Profile for {name}","profileEyebrow":"User profile","backToUsers":"Back to users","editProfile":"Edit profile","editProfileDescription":"Update this user's account details, role, language, and profile image.","profileSaved":"User profile saved.","profileLoadFailed":"Failed to load the user profile.","profileSaveFailed":"Failed to save the user profile.","profileNotFound":"User not found.","profileImageChange":"Upload profile image","profileImageUploading":"Uploading…","profileImageHint":"JPEG, PNG, WebP, or GIF. Maximum 5 MB.","profileImageInvalidType":"Choose a JPEG, PNG, WebP, or GIF image.","profileImageTooLarge":"The image must be no larger than 5 MB.","profileImageFailed":"The profile image could not be uploaded.","colStatus":"Status","statusActive":"Active","statusInactive":"Inactive","inviteSentAt":"Invite sent","inviteAcceptedAt":"Invite accepted","termsAcceptedAt":"Terms accepted","createdAt":"Created","roleAdmin":"Admin","roleViewer":"Viewer","password":"Password","passwordAutoGenerated":"A secure password will be generated automatically.","newPassword":"New password (min 8)","resetPassword":"Reset password","passwordResetSuccess":"Password reset successfully","copyCredentials":"Copy all","copied":"Copied!","deleteTitle":"Delete user","deleteConfirm":"Delete user \"{email}\"? This cannot be undone.","you":"You","colInviteStatus":"Invite status"},"rooms":{"title":"Rooms","desc":"Manage bookable rooms and each room's external calendar feeds. Deactivated rooms stay in history but can't be booked.","newRoom":"New room","duplicateRoom":"Duplicate room","duplicating":"Duplicating…","duplicateFailed":"Failed to duplicate room","name":"Name","description":"Description","capacity":"Max guests","sizeSqm":"Size","amenitiesLabel":"Amenities","customAmenitiesLabel":"Custom amenities","bedsLabel":"Bed setup","bedAdd":"Add bed","bedRemove":"Remove","bedCount":"Number of beds","basePriceColumn":"Base price","priceMode":"Pricing model","priceModePerNight":"Per night","priceModePerNightHint":"The base price is multiplied by the number of nights.","priceModePerStay":"Whole stay","priceModePerStayHint":"The base price is charged once for the entire booking.","basePrice":"Base price (per night)","basePriceHint":"Price per night in your tenant currency. Decimals allowed (e.g. 899.50).","basePricePerStay":"Base price (whole stay)","basePricePerStayHint":"Price for the entire booking in your tenant currency, regardless of the number of nights.","minStayNights":"Minimum stay (nights)","maxStayNights":"Maximum stay (nights)","minLeadDays":"Minimum lead time (days)","noLimit":"No limit","stayRulesHint":"Leave blank for no limit. Applies to guest bookings; operators can still book any dates.","active":"Active","inactive":"Inactive","bookingStatusTitle":"Booking availability","bookingStatusTitleActive":"Booking availability","bookingStatusActiveHint":"Shown on your booking page and available for new bookings.","bookingStatusInactiveHint":"Hidden from your booking page and unavailable for new bookings. Existing bookings are kept.","bookingStatusToggle":"Make this room available for new bookings","bookingComIcalUrl":"Calendar import feed (per room)","bookingComIcalUrlHint":"Paste this room's calendar export URL from Booking.com, Airbnb, Hotels.com or another iCal channel.","exportFeedLabel":"Room export feed for external channels","exportFeedHint":"Add this room feed to Booking.com, Airbnb, Hotels.com or another iCal channel so direct bookings block those dates.","exportFeedCopy":"Copy","exportFeedCopied":"Copied!","lastSync":"Last sync: {date}","neverSynced":"Never synced","syncFailing":"Sync failing","lastSuccess":"last OK {date}","syncNow":"Sync now","syncing":"Syncing…","syncFailed":"Sync failed","syncFailedNotice":"Sync of {name} failed — check the feed URL.","saveChanges":"Save","cancel":"Cancel","edit":"Edit","deactivate":"Deactivate","reactivate":"Reactivate","deactivateConfirm":"Deactivate room \"{name}\"? Existing bookings keep the reference but no new bookings can be made.","deactivateConfirmTitle":"Deactivate room?","deleteRoom":"Delete room","deleteConfirmTitle":"Delete room permanently?","deleteConfirm":"Delete room \"{name}\" and its calendar blocks and pricing rules? This cannot be undone. Rooms with existing bookings cannot be deleted.","deleteFailed":"Failed to delete room","deleteHasBookings":"This room has existing bookings and cannot be deleted. Deactivate it instead to preserve booking history.","loading":"Loading...","saveFailed":"Failed to save room","loadFailed":"Failed to load rooms","empty":"No rooms yet. Create your first one.","backToSettings":"Back to settings","photos":{"label":"Photos","add":"Add photos","remove":"Remove photo","moveUp":"Move earlier","moveDown":"Move later","cover":"Cover","coverHint":"The first photo is the cover shown on your website. Use the arrows to reorder.","empty":"No photos yet.","maxReached":"You can add up to {max} photos per room."}},"amenities":{"title":"Custom amenities","desc":"Create your own amenities beyond the built-in list. They appear in the room editor and on your website.","backToSettings":"Back to settings","newAmenity":"New amenity","label":"Name","labelPlaceholder":"e.g. Sauna","icon":"Icon","iconHint":"Pick an icon shown next to the amenity.","active":"Active","inactive":"Inactive","createdMessage":"\"{label}\" was created. Add another below.","updatedMessage":"\"{label}\" was saved.","saveChanges":"Save","cancel":"Cancel","edit":"Edit","delete":"Delete","deleteConfirmTitle":"Delete amenity?","deleteConfirmMessage":"Deleting \"{label}\" removes it from every room. This can't be undone.","empty":"No custom amenities yet. Create one to add it to your rooms.","loadFailed":"Failed to load amenities","saveFailed":"Failed to save amenity","deleteFailed":"Failed to delete amenity"},"pricing":{"title":"Pricing & discounts","desc":"Configure base pricing, stay-length adjustments, seasonal multipliers, and discounts.","scope":"Scope","scopeAll":"All rooms (tenant-wide default)","scopeRoom":"Room: {name}","seasonalTitle":"Seasonal rates","seasonalDesc":"Date-range multipliers applied per night. Multiple overlapping rates resolve to the max. Room-scoped rates override tenant-wide rates for that night.","seasonalName":"Name","seasonalStartDate":"Start date","seasonalEndDate":"End date","seasonalMultiplier":"Multiplier","seasonalAdd":"Add seasonal rate","priceModePerNight":"Per night","priceModePerStay":"Whole stay","tierTitle":"Length-of-stay pricing","tierDesc":"Adjust the price for stays within a number-of-nights range. Tiers apply only to per-night rooms and cannot overlap.","tierSelectRoom":"Select a room above to configure its stay-length tiers.","tierPerStayNotice":"This room uses whole-stay pricing, so stay-length tiers are not applied.","tierMinNights":"Minimum nights","tierMaxNights":"Maximum nights","tierMultiplier":"Multiplier","tierNoMaximum":"No maximum","tierEmpty":"No stay-length tiers for this room.","tierAdd":"Add tier","tierAdding":"Adding…","tierRangeBounded":"{min}–{max} nights","tierRangeOpen":"{min}+ nights","previewTitle":"Live preview","previewDesc":"Quote a stay and see the breakdown.","previewRoom":"Room","previewRoomAny":"Pick a room","previewStart":"Check-in","previewEnd":"Check-out","previewQuote":"Quote","previewNights":"{count, plural, one {# night} other {# nights}}","previewMode":"Pricing model","previewBasePerNight":"Base for {count, plural, one {# night} other {# nights}}","previewBasePerStay":"Whole-stay base","previewLengthOfStay":"Stay tier: {range} (×{multiplier})","previewBase":"Base (before seasonal)","previewSeasonal":"Seasonal-adjusted","previewTotal":"Total","previewBreakdown":"Per-night breakdown","previewBreakdownPerStay":"Price allocation by date","previewFailed":"Quote failed","delete":"Delete","backToSettings":"Back to settings","loadFailed":"Failed to load pricing data","saveFailed":"Failed to save","loading":"Loading...","empty":"No entries yet","saved":"Saved","discountCodesLink":"Discount codes"},"discountCodes":{"title":"Discount codes","subtitle":"Create promo codes guests enter at booking. Codes apply on top of automatic discount rules.","back":"← Pricing & discounts","newCode":"+ New code","showInactive":"Show inactive","loadFailed":"Could not load discount codes.","saveFailed":"Could not save the discount code.","empty":"No discount codes yet. Create one to start running promotions.","colCode":"Code","colTypeAmount":"Discount","colValidity":"Validity","colRedemptions":"Redemptions","colStatus":"Status","statusActive":"Active","statusScheduled":"Scheduled","statusExpired":"Expired","statusExhausted":"Exhausted","statusInactive":"Inactive","modalTitleCreate":"New discount code","modalTitleEdit":"Edit discount code","fieldCode":"Code","fieldCodeHint":"2–32 characters, letters, digits, dashes and underscores only. Stored and matched case-insensitively.","fieldType":"Type","fieldTypeFixed":"Fixed amount","fieldTypePercent":"Percentage","fieldTypeReadOnly":"Cannot be changed after creation.","fieldAmount":"Amount","fieldAmountReadOnly":"Cannot be changed after creation.","fieldValidFrom":"Valid from","fieldValidTo":"Valid to","fieldMaxRedemptions":"Max redemptions","fieldMaxRedemptionsHint":"Leave empty for unlimited.","removeCap":"Remove cap","generate":"Generate","fieldActive":"Active","save":"Save","saving":"Saving…","cancel":"Cancel","errorDuplicateCode":"A code with this name already exists.","errorImmutableField":"This field cannot be changed after creation.","errorGeneric":"Couldn't save the discount code. Please try again.","drillInTitle":"Redemption history — {code}","drillInEmpty":"No redemptions yet.","drillInColAppliedAt":"Redeemed","drillInColGuest":"Guest","drillInColDates":"Stay","drillInColAmount":"Amount credited","drillInClose":"Close","drillInLoadFailed":"Could not load redemption history."},"closures":{"title":"Closures / blocked days","subtitle":"Block off dates when your property can't be booked — renovation, owner stay, off-season. Existing bookings are never cancelled.","backToSettings":"Back to settings","newClosure":"New closure","startDate":"Start date","endDate":"End date","dateError":"End date must be on or after the start date","scopeLabel":"Scope","wholeProperty":"Whole property","reasonLabel":"Internal note — do not enter guest personal data","reasonPlaceholder":"e.g. Renovation, owner staying","create":"Add closure","loadFailed":"Failed to load closures","createFailed":"Failed to create closure","deleteFailed":"Failed to delete closure","empty":"No closures yet. Blocked dates you add will appear here.","colDates":"Dates","colScope":"Scope","colReason":"Note","colCreatedBy":"Created by","colCreatedAt":"Created","delete":"Delete","edit":"Edit","editTitle":"Edit closure","scopeLocked":"Scope can't be changed","editFailed":"Could not save the closure","deleteConfirmTitle":"Delete this closure?","deleteConfirmMessage":"Deleting reopens these dates for booking. This can't be undone.","keepClosure":"Keep closure","confirmDelete":"Delete closure","overlapWarning":"{count, plural, one {# existing booking falls} other {# existing bookings fall}} inside this closure — they will be honored; only new bookings are blocked.","chipClosedLabel":"Closed","hoverTitle":"Closed","hoverDates":"Dates","hoverScope":"Scope","hoverReason":"Note","hoverCreatedBy":"Created by","hoverCreatedAt":"Created"},"calendar":{"title":"Calendar","tabsLabel":"Calendar view","monthTab":"Month","timelineTab":"Timeline","monthBookingsTitle":"Bookings in {month}","monthBookingsEmpty":"No bookings in this month.","loadFailed":"Could not load the calendar"},"timeline":{"title":"Room timeline","roomColumn":"Room","capacity":"{count, plural, one {# guest} other {# guests}}","prevWeek":"Previous week","nextWeek":"Next week","empty":"No rooms yet","blocked":"Blocked","unassignedBookings":"{count, plural, one {# booking without a room} other {# bookings without a room}}","unassignedBlocks":"{count, plural, one {# blocked period without a room} other {# blocked periods without a room}}"},"mail":{"title":"Booking confirmation sender","subtitle":"Where booking confirmation emails come from. Your From address must be on a domain you own — personal Gmail, Hotmail, or Outlook addresses cannot be used there. Until your domain is verified, we send from the platform default so guests still receive confirmations.","back":"← Settings","fromEmail":"From email","fromEmailHint":"Must be on a domain you own and can verify in DNS (e.g. info@yourfarm.dk). Gmail, Hotmail, and Outlook addresses will not work here — those providers block mail sent from outside their servers.","fromEmailPlaceholder":"info@yourfarm.dk","fromName":"From name","fromNamePlaceholder":"Havblik","contactEmail":"Reply-To address","contactEmailPlaceholder":"mike@gmail.com or bookings@yourfarm.dk","contactEmailHint":"When a guest hits reply in their inbox, the reply goes to this address. A personal Gmail, Hotmail, or Outlook address is fine here. Defaults to the From email when left empty.","save":"Save","saving":"Saving…","loadFailed":"Could not load mail settings.","savedMessage":"Saved. If you changed the From address, add or update the DNS records below to verify the new domain.","domainVerification":"Domain verification","recheck":"Recheck","rechecking":"Checking…","recheckTriggered":"Verification re-check started — the status below updates automatically.","recheckFailed":"Recheck failed","saveFirst":"Save a From address above to see DNS records.","registering":"Registering your domain with the mail provider… this page updates automatically. If this keeps showing, use “Recheck” to retry.","providerUnavailable":"Domain verification is temporarily unavailable from the mail provider. Your saved settings are safe; try “Recheck” again shortly.","statusVerified":"verified","statusPending":"pending","statusNotStarted":"not started","statusFailure":"verification failed","statusTemporaryFailure":"temporarily failed","recordsIntro":"Add these records in your DNS provider's zone for {domain}. Verification is automatic once DNS propagates (may take a few minutes to a few hours).","status":"Status:","colType":"Type","colName":"Name","colValue":"Value","colPriority":"Priority","copyButton":"Copy","copied":"Copied!","copyNameAriaLabel":"Copy the name of the {type} record","copyValueAriaLabel":"Copy the value of the {type} record","newsletterSenderTitle":"Newsletter sender","newsletterSenderHint":"Verification state of the newsletter From address. This sender is managed by platform support — contact us to change it.","sharedDomainNote":"Both senders share the same domain — the DNS records below apply to both.","transactionalBadgeLabel":"Booking confirmations","newsletterBadgeLabel":"Newsletters","transactionalDomainLabel":"Booking confirmations","newsletterDomainLabel":"Newsletters","effectiveSenderLabel":"Guests currently receive booking emails from:","effectiveSenderFallbackNote":"Your custom sender is configured but not yet verified — we're using the platform default until it verifies.","testSendButton":"Send test email","testSendSending":"Sending…","testSendSuccess":"Test email sent to {email}.","saveFailed":"Could not save mail settings. Please try again.","registrationFailedWarning":"We could not register your domain with the mail provider. Use “Recheck” below to try again, or contact support if this keeps happening.","viewerNote":"Only administrators can change these settings.","errorFromEmailFreeMail":"\"{domain}\" is a consumer mail provider — use an address on a domain you own instead (e.g. info@yourfarm.dk).","errorDomainReserved":"\"{domain}\" is reserved for the platform's own sender and cannot be used here.","errorDomainClaimedByOtherTenant":"\"{domain}\" is already in use as a sender domain by another business on this platform.","errorEmailDomainUndeliverable":"\"{domain}\" cannot receive email — double-check the domain.","errorEmailDomainUndeliverableSuggestion":"\"{domain}\" cannot receive email — did you mean {suggestion}?","errorNoSenderDomain":"No sender domain is configured yet — save a From email above first.","errorDomainRegistrationFailed":"Could not register \"{domain}\" with the mail provider. Try again shortly, or contact support if this keeps happening.","errorTestSendRateLimited":"Too many test emails sent recently — try again in about an hour.","errorTestSendFailed":"The mail server rejected the test email. Try again shortly."},"terms":{"title":"Terms & conditions","subtitle":"Manage the booking terms and cancellation charges guests must accept when booking on your website.","backToSettings":"Back to settings","textareaLabel":"Booking terms & conditions","placeholder":"e.g. Check-in is from 15:00, check-out by 11:00. Pets are welcome by prior agreement...","helper":"These terms are combined with any enabled cancellation charges in the public Terms & Conditions.","cancellationTitle":"Cancellation rules","cancellationOwnership":"You control these charges. When enabled, they replace any legacy platform-authored cancellation policy on public booking surfaces and are added to your Terms & Conditions.","legacyPolicyNotice":"A legacy platform-authored cancellation policy is still stored. Enabling structured rules replaces it everywhere guests book; disabling the rules falls back to that legacy policy.","cancellationEnabled":"Use structured cancellation charges","cancellationEnabledHelper":"Every guest booking that accepts these rules stores an immutable copy and the exact accepted text.","daysBeforeCheckIn":"Days before check-in","chargePercent":"Charge (% of booking total)","removeBand":"Remove","addBand":"Add band","noShowChargePercent":"No-show charge (% of booking total)","previewTitle":"Guest preview","rulesInvalid":"Use unique day thresholds, include a 0-day band, and keep every value within its allowed range.","saving":"Saving…","saved":"Terms & conditions saved","rulesSaved":"Cancellation rules saved","loadFailed":"Could not load the terms & conditions.","saveFailed":"Could not save the terms & conditions."},"newsletters":{"title":"Newsletters","subtitle":"Send seasonal offers or news to your opted-in guests.","newButton":"New newsletter","empty":"No newsletters yet. Click \"New newsletter\" to draft one.","firstTitle":"Write your first newsletter","firstAction":"Create newsletter","loadFailed":"Could not load newsletters.","summaryTotal":"All","summaryDrafts":"Drafts","summarySent":"Sent","statusDraft":"Draft","statusScheduled":"Scheduled","statusSending":"Sending","statusSent":"Sent","statusFailed":"Failed","createdShort":"Created {date}","back":"← Newsletters","colSubject":"Subject","colStatus":"Status","colSent":"Sent","colRecipients":"Recipients","newTitle":"New newsletter","newSubtitle":"Write the content and see the result immediately. You will choose guests and send after saving the draft.","workflowLabel":"Newsletter creation steps","composeStepLabel":"Write","audienceStepLabel":"Audience and send","saveDraftHint":"Next, choose guests, send a test, then send the newsletter.","cancelCreate":"Cancel","saveDraft":"Save draft","savingDraft":"Saving…","detailCreatedAt":"Created {at}","detailStatus":"Status:","preview":"Preview","sendSection":"Send","audienceLegend":"Audience","audienceAll":"All subscribed guests","audienceRecent":"Only guests who booked in the last","audienceMonthsSuffix":"{months, plural, one {month} other {months}}","audienceSpecific":"Only specific guests","guestPickerSearchPlaceholder":"Search guests by name or email…","guestPickerSelectAll":"Select all","guestPickerClear":"Clear","guestPickerSelectedCount":"{count} selected","guestPickerLoading":"Loading guests…","guestPickerEmpty":"No subscribed guests yet.","guestPickerNoMatch":"No guests match your search.","guestPickerError":"Could not load guests.","guestPickerRetry":"Retry","previewAudience":"Preview audience","recipientsOne":"{count} recipient","recipientsOther":"{count} recipients","recipientListTitle":"Recipients ({count})","colRecipientName":"Name","colRecipientEmail":"Email","sendNow":"Send now","sending":"Sending…","confirmSend":"Confirm send","confirmFallback":"every matching guest","sendSuccess":"Enqueued {enqueued} deliveries.","capsNote":"Subject to per-tenant caps: hourly (default 100) + daily (default 1,000). Contact support if you need higher limits.","deliveriesTitle":"Deliveries ({count})","colRecipient":"Recipient","colDeliveryStatus":"Status","colSentAt":"Sent","colError":"Error","sendTestEmail":"Send test email","testPopoverLabel":"Test will go to:","testRecipientPlaceholder":"recipient@example.com","testSend":"Send","testSending":"Sending…","editDraft":"Edit draft","editDraftHeading":"Edit draft","cancelEdit":"Cancel","saveDraftBtn":"Save draft","savingDraftBtn":"Saving…","noRecipientsWarning":"No subscribed guests match this audience filter.","confirmCardText":"Send to {countLabel}? This can't be undone.","confirmCardFallback":"every matching guest","cancelConfirm":"Cancel","pollingLabel":"Newsletter is {status}","failedBanner":"Delivery failed — check with support if this keeps happening.","noDeliveries":"No delivery records yet.","colSentAtHeader":"Sent","errorRateLimit":"Test send rate limit reached — try again shortly.","errorMailTransport":"Mail transport error. Contact support.","errorNotEditable":"Cannot edit — this newsletter is no longer a draft.","testSentTo":"Test sent to {recipient}.","draftUpdated":"Draft saved."},"settings":{"title":"Settings","hubDescription":"Manage booking, rooms, communication, payments and account preferences.","backToSettings":"Back to settings","adminOnly":"Only administrators can manage these settings.","generalLink":"General","generalLinkDesc":"View company, language, currency and hosting details.","bookingWidgetLink":"Booking widget","bookingWidgetLinkDesc":"Share the booking page or install booking on an external website.","bookingRulesLink":"Booking rules","bookingRulesLinkDesc":"Set arrival times and review room stay restrictions.","channelsLink":"Channels & integrations","channelsLinkDesc":"Connect Booking.com calendars and monitor sync health.","paymentLink":"Payments","paymentLinkDesc":"Configure QuickPay keys and card payment access.","usersLink":"Users & roles","usersLinkDesc":"Invite teammates and control their access.","discountCodesLink":"Discount codes","discountCodesLinkDesc":"Create and manage promotional booking codes.","bookingWidget":{"title":"Booking widget","description":"Connect your existing website to the hosted booking flow and manage which sites may display it inline.","loading":"Loading booking widget settings…","loadFailed":"Booking widget settings could not be loaded.","readOnlyNotice":"You can copy the booking link and snippet. An administrator must change allowed website origins.","bookingLinkTitle":"Booking page link","bookingLinkDescription":"A normal Book now button can use this link. It works without an inline embed.","bookingLinkLabel":"Booking page URL","copyLink":"Copy link","openLink":"Open booking page","copied":"Copied","originsTitle":"Allowed website origins","originsDescription":"Only these websites may display your booking widget inline.","originLabel":"Website origin {number}","originPlaceholder":"https://www.example.com","removeOrigin":"Remove","removeOriginLabel":"Remove website origin {number}","addOrigin":"Add website origin","originRequirements":"Use the exact HTTPS protocol and hostname, plus an optional port. Do not include a path, query, fragment, trailing slash or wildcard. Add both www and non-www origins if both serve the website.","invalidOriginError":"Enter a bare HTTPS origin such as https://www.example.com.","duplicateOriginError":"This origin is already in the list.","originValidationSummary":"Fix the invalid or duplicate origins before saving.","save":"Save origins","saving":"Saving…","cancel":"Cancel changes","saved":"Allowed website origins updated.","saveFailed":"Allowed website origins could not be updated.","notEnabledTitle":"Inline embedding is not enabled.","notEnabledDescription":"An administrator must save at least one allowed website origin before the snippet will work.","snippetTitle":"Embed snippet","snippetDescription":"Paste this code into a compatible custom HTML block on the allowed website.","snippetCodeLabel":"Booking widget embed code","copySnippet":"Copy snippet","copyFailed":"The value could not be copied. Select it and copy it manually."},"generalTitle":"General settings","generalDesc":"Your core account and company configuration.","generalLoadFailed":"Failed to load general settings","generalTenantName":"Account name","generalCompanyName":"Company name","generalSlug":"Booking address","generalCurrency":"Currency","generalCurrencyHelp":"This currency is used for room prices and new bookings. Existing bookings keep their saved currency.","generalCurrencySaved":"Currency updated","generalCurrencySaveFailed":"Failed to update currency","generalLocale":"Default language","generalHostingMode":"Hosting mode","hostingBookingOnly":"Booking only","hostingManagedSite":"Managed website","generalManagedNotice":"The remaining account details are managed by Guest&Stay.","contactSupport":"Contact support to request a change.","bookingRulesTitle":"Booking rules","bookingRulesDesc":"Control the defaults and restrictions used for new bookings.","roomStayRulesTitle":"Room stay restrictions","roomStayRulesDesc":"Edit these values from the Rooms page.","noLimit":"No limit","channelsTitle":"Channels & integrations","channelsDesc":"Keep external calendars connected and direct bookings synchronized.","channelsLoadFailed":"Failed to load channel settings","channelsSaveFailed":"Failed to save channel settings","channelConnected":"Connected","channelNotConnected":"Not connected","channelImportLabel":"Booking.com import feed","channelImportHint":"Paste the room calendar export URL from Booking.com.","loadFailed":"Failed to load settings","saved":"Settings saved","saveFailed":"Failed to save settings","syncFailed":"Sync failed","calendarTitle":"Booking.com Calendar Sync","calendarDesc":"Connect your Booking.com iCal feed to automatically sync reservations and prevent double bookings.","icalUrl":"iCal Feed URL","icalUrlHint":"Find this in your Booking.com extranet under Rates & Availability → Calendar → Export.","syncNow":"Sync now","syncing":"Syncing...","syncResult":"Sync complete: {synced} synced, {errors} errors, {removed} removed","lastSync":"Last sync: {date}","paymentTitle":"Payment providers","paymentDesc":"Configure and select the provider used for new hosted card-payment attempts.","paymentSaved":"Payment settings saved","paymentProviderSelector":"Payment provider","paymentProviderSelectorHint":"Choose a provider to view its setup, connection health and activation status.","paymentProviderDescription":{"quickpay":"Card payments through your QuickPay merchant account.","stripe":"Stripe-hosted checkout with your own Stripe account.","mollie":"Mollie-hosted checkout connected securely with OAuth."},"paymentSelected":"Selected","paymentViewConfiguration":"View setup","paymentActive":"Active","paymentUnavailable":"Unavailable","paymentMakeActive":"Make active","paymentSwitchWarning":"Switching changes new payment attempts only. Existing attempts keep their original provider and configuration.","paymentReady":"Ready","paymentNotReady":"Not ready","paymentNeedsAttention":"Needs attention","paymentCheckoutStatus":"Checkout","paymentWebhookStatus":"Webhook","paymentConnectionStatus":"Connection","paymentConfigurationTitle":"Connection setup","paymentMode":"Mode","paymentModeTest":"Test","paymentModeLive":"Live","paymentQuickPayApiKey":"QuickPay API key","paymentQuickPayApiKeyHint":"Find the merchant API key in QuickPay Dashboard → Settings → API keys.","paymentQuickPayWebhookSecret":"QuickPay agreement private key","paymentQuickPayWebhookHint":"Register this exact URL in QuickPay and use the private key from the top Merchant row to verify callbacks.","paymentStripeSecretKey":"Stripe secret key","paymentStripeSecretKeyHint":"Use a restricted or secret key for the same Stripe account and mode shown here.","paymentStripeWebhookSecret":"Stripe webhook signing secret","paymentStripeWebhookHint":"Create a Stripe webhook destination for this exact URL and paste its endpoint-specific signing secret.","paymentSecretRetainPlaceholder":"Leave blank to retain the stored secret","paymentSecretStored":"Stored secret retained","paymentSecretNotStored":"No secret stored","paymentClearCredential":"Clear explicitly","paymentUndoClear":"Keep stored secret","paymentWebhookUrl":"Webhook URL","paymentTestConnection":"Test connection","paymentMollieProfileId":"Mollie profile ID","paymentMollieProfilePlaceholder":"pfl_...","paymentMollieOAuthHint":"Connect with Mollie to authorize the selected organization, profile and mode. API-key entry is unavailable for this integration.","paymentMollieWebhookHint":"Classic Mollie payment webhooks are attached to each payment automatically. The OAuth redirect URI is configured separately by the platform operator.","paymentConnectMollie":"Connect with Mollie","paymentReconnectMollie":"Reconnect Mollie","paymentDisconnectMollie":"Disconnect Mollie","paymentMollieMobileWebOnly":"Connect, reconnect or disconnect Mollie in the web administration. This app can display, select and test an existing Mollie connection.","paymentMollieOAuthError":"The Mollie connection could not be completed. Try connecting again.","paymentConfirmMollieTitle":"Confirm Mollie account","paymentConfirmMollieDesc":"Confirm organization {organizationId} and profile {profileId}. This creates a new configuration revision without changing historical attempts.","paymentConfirmMollie":"Confirm Mollie connection","paymentRetry":"Try again","paymentAuthorization":{"not_configured":"Not configured","pending":"Confirmation pending","connected":"Connected","refresh_required":"Reconnect required","revoked":"Revoked","error":"Connection error"},"paymentReason":{"provider_disabled":"This provider is not available for your account yet.","provider_not_configured":"The provider has not been configured.","credential_missing":"A provider credential is missing.","credential_unverified":"The provider credential has not passed a connection test.","authorization_pending":"Authorization confirmation is pending.","authorization_expired":"Authorization has expired.","authorization_revoked":"Authorization has been revoked.","merchant_identity_missing":"The merchant account identity is not verified.","profile_missing":"A payment profile is missing.","mode_mismatch":"The credential and configuration modes do not match.","webhook_missing":"Webhook verification is not ready.","mobile_update_required":"A compatible mobile release is required before rollout.","unsupported_currency":"The selected currency is not supported.","unsupported_method":"The selected payment method is not supported."},"paymentError":{"load":"Failed to load payment settings.","save":"Failed to save the provider configuration.","switch":"Failed to switch the active provider.","test":"The provider connection test failed.","credential_required":"Enter an API credential before saving this provider."},"bookingDefaultsTitle":"Booking times","bookingDefaultsDesc":"Default check-in and check-out times, pre-filled on new bookings. Operators (and guests booking online) can adjust them per booking.","checkInTime":"Default check-in time","checkOutTime":"Default check-out time","selectTime":"Select a time","bookingDefaultsSaved":"Booking times saved","bookingDefaultsSaveFailed":"Failed to save booking times","bookingDefaultsLoadFailed":"Failed to load booking times","paymentNotConfigured":"Not configured","roomsLink":"Manage rooms","roomsLinkDesc":"Add rooms and manage capacity, pricing, photos and channel feeds.","pricingLink":"Pricing & discounts","pricingLinkDesc":"Configure rate tables, seasonal multipliers, and discount rules.","mailLink":"Booking confirmation sender","mailLinkDesc":"Configure which email address booking confirmations come from + DNS records to verify it.","notificationsLink":"Push notifications","notificationsLinkDesc":"Choose which live booking and inbox updates reach your devices.","offlineAccessLink":"Offline access","offlineAccessLinkDesc":"Save a short-lived, read-only operations schedule on this device.","newsletterLink":"Newsletters","newsletterLinkDesc":"Send seasonal news and offers to guests who opted in at booking time.","amenitiesLink":"Custom amenities","amenitiesLinkDesc":"Create and manage your own room amenities.","closuresLink":"Closures / blocked days","closuresLinkDesc":"Block off dates for renovation, owner stays, or off-season — existing bookings stay honored.","termsLink":"Terms & conditions","termsLinkDesc":"Write the terms guests must accept when booking.","mailStatusBanner":{"notConfiguredText":"Booking confirmation emails are sent from the platform default address. Set a custom sender to use your own domain.","notConfiguredLink":"Configure sender","pendingText":"Your sender domain is registered but DNS verification is still pending. We check automatically at regular intervals — no action needed yet.","pendingLink":"View DNS records","unverifiedText":"Your sender domain could not be verified. Booking confirmations are falling back to the platform default address.","unverifiedLink":"Fix in mail settings"},"invoicingLink":"Invoicing","invoicingLinkDesc":"Guest invoices: numbering, VAT, bank transfer, invoice text and bulk export.","billingLink":"Platform billing","billingLinkDesc":"Manage your EUR platform subscription, payment method and Stripe invoices.","notifications":{"title":"Push notifications","description":"Receive timely booking and inbox updates, even when the management app is closed.","loading":"Checking this device…","loadFailed":"Could not load notification settings.","notAvailable":"Push notifications are not enabled for this environment.","unsupported":"This browser or device does not support web push.","permissionDenied":"Notifications are blocked. Allow them in your browser or system settings, then return here.","workerNotReady":"The app needs an active service worker before this device can be enabled. Reload and try again.","deviceTitle":"This device","deviceEnabled":"Notifications are enabled on this device.","deviceDisabled":"Notifications are not enabled on this device.","deviceCount":"{count, plural, one {# enabled device} other {# enabled devices}}","enableDevice":"Enable on this device","disableDevice":"Disable on this device","working":"Updating…","enableFailed":"Could not enable notifications on this device.","disableFailed":"Could not disable notifications on this device.","saveFailed":"Could not save notification preferences.","eventsTitle":"Notify me about","eventsDescription":"These preferences apply to all devices registered to your account.","newBookings":"New direct bookings","newBookingsDescription":"A guest completes a booking through your public booking page.","newBookingsToggle":"Notify me about new direct bookings","inboxMessages":"New inbox messages","inboxMessagesDescription":"A guest sends a message through your public contact form.","inboxMessagesToggle":"Notify me about new inbox messages","privacyNote":"Notifications contain only a short event description. Open the app and sign in to view private booking or message details."},"offlineAccess":{"title":"Offline access","description":"Save a minimized, read-only operations schedule on this device for short connection outages.","loading":"Checking secure storage on this device…","loadFailed":"Could not load offline-access settings.","notAvailable":"Offline access is not enabled for this environment.","unsupported":"This browser cannot safely persist the required non-extractable encryption key. Offline access stays disabled.","impersonationUnavailable":"Offline access is unavailable during operator impersonation, and any previous saved data has been removed.","deviceTitle":"This device","deviceEnabled":"Secure offline schedule saving is enabled on this device.","deviceDisabled":"Offline access is not enabled on this device.","scheduleSavedAt":"The minimized schedule was saved at {time}. It expires according to the server timestamp and may omit later changes.","scheduleNotSaved":"Secure storage is enabled, but no offline schedule has been saved yet.","refreshNow":"Refresh saved schedule","enableDevice":"Enable on this device","disableDevice":"Disable and remove data","enableFailed":"Could not create secure offline storage on this device.","disableFailed":"Could not fully remove offline storage. Clear this site's browser data before sharing the device.","refreshFailed":"The schedule could not be saved. No offline schedule is currently available.","refreshFailedRetained":"The schedule could not be refreshed. The previous copy from {time} was kept and may be out of date.","limitsTitle":"Privacy and limits","limitsDescription":"The saved schedule covers {days} days and expires {hours} hours after it is generated by the server.","minimumData":"Only minimum arrival, departure, room and guest-display information is eligible.","noWrites":"Offline changes, payments, messages, exports and availability promises are not supported.","deviceOnly":"Enrollment applies only to this browser or installed-app storage context.","privacyNote":"Use only on a personally controlled device protected by an OS login or screen lock. Server revocation cannot remotely erase a device while it remains offline.","enableConfirmTitle":"Enable offline access on this device?","enableConfirmMessage":"Confirm that this device is personally controlled and protected by an OS login or screen lock. Saved schedules may remain readable for up to 12 hours without a server connection.","enableConfirm":"Confirm and enable","disableConfirmTitle":"Disable offline access?","disableConfirmMessage":"This removes the enrollment, encryption key and any PWA-owned offline data from this browser or installed app.","disableConfirm":"Disable and remove","cancel":"Cancel"}},"history":{"drawerTitle":"Version history","closeDrawer":"Close version history","listLabel":"Published versions","emptyTitle":"No previous versions yet","emptySubtitle":"Versions are saved each time you publish this page.","kindPublished":"Published","kindAutoPrePublish":"Auto pre-publish","kindAutoPrePublishTooltip":"Automatic safety snapshot taken immediately before each publish. Use this to undo the effects of a publish.","brokenMediaIndicator":"This version contains broken media links.","publisherUnknown":"Published by an automated batch process.","editLabel":"Edit version label","labelTooLong":"Label must be 120 characters or fewer.","labelSaving":"Saving…","preview":"Preview","restoreAsDraft":"Restore as draft","restoreConfirmTitle":"Restore version {version}?","restoreConfirmMessage":"Your current draft will be replaced with the content from version {version}. Your published page stays live until you publish again. Review the restored draft and click Publish when ready.","restoreConfirmAction":"Yes, restore as draft","slugConflictTitle":"Slug conflict","slugConflictBody":"The version you are restoring uses the slug \"/{conflictingSlug}\", which is already taken by another page or is reserved by the system.","slugConflictCancelTitle":"Cancel — I’ll rename the conflicting page first","slugConflictCancelHint":"Go to Pages, rename the other page, then return and try the restore again.","slugConflictRestoreTitle":"Restore without slug","slugConflictRestoreHint":"The page is restored immediately but its URL slug is cleared. You must set a new slug in Page Settings before publishing.","restoreSuccessToast":"Version {version} restored as draft. Review and publish to make it live.","restoreSuccessBrokenTitle":"Version {version} restored — but {count} {count, plural, one {media file is} other {media files are}} broken.","restoreSuccessBrokenBody":"These images will appear missing until re-uploaded.","restoreSuccessBrokenLink":"Open Media Library to re-upload","restoreErrorToast":"Restore failed. Please try again.","explainerTitle":"How version history works","explainerBody":"Every time you publish, two snapshots are saved automatically.","explainerPublishRow":"Published — the new live version you created.","explainerAutoRow":"Auto pre-publish — the exact state before that publish. Use this to undo a publish that went wrong.","explainerExpand":"How version history works","explainerCollapse":"Collapse","autoRowHint":"Snapshot taken automatically before the publish below.","historyButton":"History","historyTooltip":"View and restore previous published versions","previewBannerBody":"Preview of version v{versionNumber} — published {publishedAt} by {publishedBy}. This is read-only.","previewBannerBodyAnonymous":"Preview of version v{versionNumber} — published {publishedAt} by an automated batch process. This is read-only.","previewBannerHint":"To make it live, open the editor and click Restore as draft, then Publish.","loadMore":"Load more","loadMoreLoading":"Loading…","showingOf":"{loaded} of {total} versions"},"pagination":{"prev":"Prev","next":"Next","perPage":"Per page","showing":"Showing {from}–{to} of {total}","pageOf":"Page {page} of {totalPages}"},"acceptInvite":{"loading":{"title":"Set up your account","body":"Checking your invite link…"},"ready":{"title":"Set up your account","contextEmail":"You were invited as {email}","contextTenantRole":"Invited to {tenantName} as {role}","contextSuperadmin":"Guest&Stay platform admin"},"form":{"newPasswordLabel":"Choose a password","confirmPasswordLabel":"Confirm password","passwordHelper":"At least 12 characters, uppercase and lowercase letters, and at least one digit.","strengthLabel":"Password strength","confirmMismatch":"Passwords do not match.","passwordTooWeak":"Your password does not meet the requirements above.","validationError":"We could not process that request. Please check the form and try again.","submit":"Set up my account","submitting":"Setting up…"},"success":{"title":"You're all set","body":"Your account is ready — taking you there now."},"invalid":{"title":"Invite not found","body":"This invite link is not valid or has expired. If you were recently invited, contact the person who sent the invite."},"error":{"title":"Something went wrong","body":"We could not reach the server. Check your connection and try again.","retry":"Try again"},"role":{"tenantAdmin":"Admin","tenantViewer":"Viewer","superadmin":"Super Admin"},"rotate":{"title":"Set a new password","contextTenant":"Reset password for your {tenantName} account","contextNoTenant":"Reset password for your account"}},"invoicing":{"title":"Invoicing","subtitle":"Issue legally usable invoices to your guests: paid card bookings get an invoice by email automatically, and bank-transfer bookings receive the invoice with your payment details at booking time.","backToSettings":"Back to settings","loadFailed":"Could not load the invoicing settings.","saved":"Invoicing settings saved","saveFailed":"Could not save the invoicing settings.","saving":"Saving…","enableLabel":"Enable invoicing","enableHelper":"When enabled, every public booking collects the guest's postal address (a full invoice legally requires the buyer's name and address) and paid bookings receive an invoice instead of the payment receipt.","missingSellerFields":"Your company's legal name is not set on the tenant profile — it is printed on every invoice and is required to enable invoicing. A VAT number is optional. Contact platform support to set the legal name.","bankTransferLabel":"Offer payment by bank transfer","bankTransferHelper":"Guests can choose bank transfer on the booking form; the invoice with your bank details and a due date is emailed with the booking confirmation. You confirm receipt manually with \"Mark as paid\" on the booking.","numberingVatHeading":"Numbering, terms & VAT","prefixLabel":"Invoice number prefix","prefixHelper":"Printed in front of the sequential number, e.g. {example}. Must not end in a digit.","paymentTermsLabel":"Payment due before check-in (days)","paymentTermsHelper":"Choose 1–30 days. The due date is this many days before check-in. If that date has passed, payment is due immediately.","paymentTermsDefaultOption":"Default (8 days before check-in)","vatRateLabel":"VAT rate (%)","vatExemptionLabel":"VAT exemption note","vatExemptionPlaceholder":"e.g. Momsfri udlejning jf. momslovens §13, stk. 1, nr. 8","vatHelper":"Short-stay letting (under 1 month) is normally VAT-liable at 25% for VAT-registered businesses; the exemption mainly covers operators under the 50.000 kr/12-month registration threshold. Leave the rate empty only if you are certain — the invoice then prints the exemption note. Confirm with your accountant.","notesHeading":"Invoice text","headerNoteLabel":"Header note (printed under the invoice header)","footerNoteLabel":"Footer note (printed above the footer, also included in the invoice email)","placeholderLegend":"You can use these placeholders — they are replaced per invoice:","unknownPlaceholders":"Unknown placeholders render as-is on the invoice: {placeholders}","bankDetailsHeading":"Bank details","bankDetailsHelper":"Printed on bank-transfer invoices so the guest can pay you. Danish and international transfer details are presented as separate payment options.","bankAccountHolderLabel":"Account holder","bankNameLabel":"Bank name","danishBankDetailsHeading":"Danish transfers","danishBankDetailsHelper":"Shown only when Danish payment details apply. Enter both the registration and account number.","internationalBankDetailsHeading":"International transfers","internationalBankDetailsHelper":"IBAN is the only required account identifier for non-Danish tenants and guests. BIC is shown when provided.","bankRegLabel":"Reg. no. (4 digits)","bankAccountLabel":"Account number","ibanLabel":"IBAN","bicLabel":"BIC","previewButton":"Preview sample invoice","previewing":"Rendering…","previewFailed":"Could not render the preview.","openPreviewFallback":"Open preview","exportHeading":"Export invoices","exportHelper":"Download a zip of invoice PDFs plus a CSV of the invoice data for the selected period. Guest&Stay is a convenience archive, not a bookkeeping system — book your invoices in your own accounting system (e-conomic, Dinero, …).","exportFromLabel":"From (issue date)","exportToLabel":"To (issue date)","exportButton":"Download zip","exporting":"Preparing…","exportFailed":"Could not export the invoices.","exportCsvFallback":"ZIP sharing is unavailable on this device. The invoice data was shared as CSV instead.","blockHeading":"Invoice","invoiceLoadFailed":"Could not load the invoice.","noInvoice":"No invoice has been issued for this booking.","status_GENERATING":"Generating","status_READY":"Ready","status_FAILED":"Render failed","sent":"Sent","notSent":"Not sent","paidOn":"Paid on {date}","dueBy":"Due by {date}","issuedLine":"Issued {date} · {total}","sendErrorLine":"Last send failed: {error}","buyerAddressMissing":"Issued without a buyer address (booking predates address collection).","priceDiffers":"The booking price differs from the invoice total. An issued invoice never changes — correcting it requires a credit note (manual in v1).","refundCreditNote":"This booking was refunded after an invoice was issued. A refund against an issued invoice requires a credit note (momsloven §52a, stk. 5) — issue one manually in your accounting system until credit notes are supported here.","cancelledUnpaid":"Cancelled — no payment received. The numbered invoice remains on file so the invoice sequence stays unbroken.","downloadPdf":"Download PDF","downloadFailed":"Could not download the PDF.","resend":"Re-send invoice","resending":"Sending…","resendOk":"Invoice re-sent","resendFailed":"Could not re-send the invoice.","retryRender":"Retry render","retrying":"Retrying…","retryOk":"Invoice rendered","retryFailed":"Could not re-render the invoice.","markPaid":"Mark as paid","markPaidConfirmBody":"Confirm that the bank transfer for this booking has arrived in your account. The booking becomes PAID and the guest receives a payment confirmation.","markPaidConfirmCta":"Payment received","markPaidOk":"Booking marked as paid","markPaidFailed":"Could not mark the booking as paid.","cancelInvoiceWarning":"An invoice has been issued for this booking. Cancelling does not withdraw it: if the guest has paid, a refund requires a manual credit note (momsloven §52a, stk. 5); if unpaid, the numbered invoice remains on file."},"externalLinks":{"title":"External links","subtitle":"Your own website and your profiles on social media and booking sites, collected in one place.","website":"Your website","otherLink":"Other link","otherLabel":"Label","otherUrl":"URL","openLink":"Open {name} in a new tab","saving":"Saving…","saved":"Links saved.","loadFailed":"Could not load your links.","saveFailed":"Could not save your links.","invalidUrl":"Enter a full address that starts with https://","wrongHost":"This address is not on {name}.","otherIncomplete":"Fill in both a label and a URL, or leave both empty.","viewOnly":"Only administrators can change these links."}}}