{
  "email": "Email",
  "password": "Password",
  "firstName": "First name",
  "lastName": "Last name",
  "phoneNumber": "Phone number",
  "confirmPassword": "Confirm password",
  "signInType": "Sign in type",
  "submitting": "Logging In...",
  "noAccount": "Don't have an account?",
  "forgotPassword": "Forgot password?",
  "badCredentials": "Invalid email or password",
  "gdprConsentGiven": "GDPR consent given",
  "addGDPRConsentDetails": "Add GDPR consent details",
  "termsAccepted": "Terms accepted",
  "gdprConsentDetailsPlaceholder": "GDPR Consent Details Placeholder",
  "haveAccount": "Have an account?",
  "signIn": "Sign in",
  "signUp": "Sign up",
  "termsAcceptedText": " By clicking this checkbox, you agree to the terms and conditions.",
  "gdprConsentGivenText": " By clicking this checkbox, you agree to the GDPR.",
  "uploadPicture": "Upload picture",
  "dropImageHint": "Drop an image here or click to browse",
  "changeImage": "Change image",
  "removeImage": "Remove image",
  "passwordInfo": "Your password must be at least 8 characters long and include at least one digit, one lowercase letter, one uppercase letter, and one special character.",
  "forgotPasswordDescription": "Enter your email and we'll send you instructions to reset your password.",
  "twoFactorAuth": "Two factor auth",
  "noTwoFactorAuthDescription": "No two factor enabled. To make your account more secure, select a type and follow the instructions.",
  "otpDescription": "An OTP (One-Time Password) will be sent to your email. Enter it below to enable two-factor authentication.",
  "totpDescription": "With an authenticator app (e.g., Google Authenticator), scan the QR code and enter the resulting code below to enable two-factor authentication.",
  "selectType": "Select type",
  "sendOtpEmail": "Send OTP via email",
  "logout": "Logout",
  "back": "Back",
  "send": "Send",
  "login": "Login",
  "register": "Register",
  "registerStepAccount": "Account",
  "registerStepPersonal": "Personal details",
  "registerStepConsents": "Consents",
  "registerStepPin": "Verification",
  "registerStepPhoto": "Photo",
  "registerStepDone": "Done",
  "registerStepProgress": "Step {{current}} of {{total}} - {{name}}",
  "viewTerms": "View Terms & Conditions",
  "viewGdpr": "View GDPR",
  "resendCode": "Resend code",
  "resendCodeIn": "Resend code in {{seconds}}s",
  "next": "Next",
  "skip": "Skip",
  "registerWelcomeTitle": "You're all set!",
  "registerWelcomeText": "Your account has been created. You can now browse and book classes.",
  "browseClasses": "Browse classes",
  "resetPassword": "Reset password",
  "pickADate": "Pick a date",
  "selectTime": "Select time",
  "hours": "Hours",
  "minutes": "Minutes",
  "cancel": "Cancel",
  "save": "Save",
  "close": "Close",
  "yesImSure": "Yes, I'm sure",
  "areYouAbsolutelySure": "Are you absolutely sure?",
  "thisActionWillDisable": "This action will disable the {{var}}!",
  "twoFactorAuthDisabled": "Two factor auth disabled",
  "totpEnabled": "TOTP (Time-based) enabled",
  "emailOtpEnabled": "Email OTP enabled",
  "notPossible": "Not possible",
  "totpLoginDescription": "Enter the verification code from your authenticator app (e.g., Google Authenticator) below.",
  "otpLoginDescription": "Enter the verification code sent to your email below.",
  "dateOfBirth": "Date of birth",
  "profile": "Profile",
  "gender": "Gender",
  "preferredLanguage": "Preferred language",
  "varUpdatedSuccessfully": "{{var}} updated successfully",
  "varCreatedSuccessfully": "{{var}} created successfully",
  "varDeletedSuccessfully": "{{var}} deleted successfully",
  "savedButImageFailed": "Saved, but the image could not be updated",
  "selectedRowsInfo": "{{selectedCount}} of {{totalCount}} row(s) selected",
  "totalRowsInfo": "{{totalCount}} row(s)",
  "rowsPerPage": "Rows per page",
  "pageOf": "Page {{currentPage}} of {{totalPages}}",
  "loading": "Loading...",
  "yes": "Yes",
  "no": "No",
  "initializingAuth": "Initializing authentication...",
  "homeTitle": "Welcome to ... Management APP",
  "404Title": "Page not found",
  "404Message": "The page you’re looking for doesn’t exist or has been moved.",
  "goHome": "Go back home",
  "generalError": "Error: {{message}}",
  "home": "Home",
  "continue": "Continue",
  "users": "Users",
  "locations": "Locations",
  "openInGoogleMaps": "Open in Google Maps",
  "allLocations": "All locations",
  "roomCount_one": "{{count}} room",
  "roomCount_other": "{{count}} rooms",
  "roomCapacity_one": "Up to {{count}} person",
  "roomCapacity_other": "Up to {{count}} people",
  "moreCount": "+{{count}}",
  "noRoomsYet": "No rooms yet",
  "noRoomsYetHint": "Add the rooms this location holds classes in.",
  "noLocationsYet": "No locations yet",
  "noLocationsYetHint": "Add the studio's first location, then its rooms.",
  "deleteLocationDescription": "The location, its rooms and their pictures are deleted, and this cannot be undone. A location whose rooms have classes cannot be deleted: disable it instead.",
  "deleteRoomDescription": "The room and its picture are deleted, and this cannot be undone. A room that has classes cannot be deleted: disable it instead.",
  "themeLight": "Make light",
  "themeDark": "Make dark",
  "languageSelect": "Select language",
  "required": "Required",
  "file-invalid": "Invalid file type",
  "file-tooLarge": "File too large",
  "name-min": "Must be at least {{minimum}} characters",
  "password-min": "Password must be at least {{minimum}} characters",
  "password-noWhitespace": "Password must not contain whitespaces",
  "password-noDigit": "Password must contain at least one digit",
  "password-noLowercase": "Password must contain at least one lowercase letter",
  "password-noUppercase": "Password must contain at least one uppercase letter",
  "password-noSpecial": "Password must contain at least one special character",
  "phoneNumber-invalid": "Invalid phone number",
  "email-invalid": "Invalid email",
  "gdprConsentGiven-invalid": "GDPR consent must be given",
  "termsAccepted-invalid": "Terms must be accepted",
  "invalid-type": "Invalid type",
  "password-mismatch": "Passwords do not match",
  "fieldMax": "Field must be at most {{maximum}} characters",
  "userDetails": "User details",
  "initializing": "Initializing...",
  "pinAndToggleColumns": "Pin | Toggle columns",
  "resetFilters": "Reset filters",
  "search": "Search",
  "view": "View",
  "security": "Security",
  "currentPassword": "Current password",
  "newPassword": "New password",
  "changePassword": "Change password",
  "changeEmail": "Change email",
  "changeEmailHint": "Changing your email requires confirming the new address - you'll get a link there to finish.",
  "newEmail": "New email",
  "sendConfirmationLink": "Send confirmation link",
  "confirmEmailChange": "Confirm email change",
  "confirmEmailChangeMissingToken": "This link is missing its confirmation code. Please use the link from your email exactly as sent.",
  "create": "Create",
  "actionSuccessfully": "Action successfully",
  "avatar": "Avatar",
  "details": "Details",
  "date-invalid": "Invalid date",
  "noResults": "No results",
  "form": "Form",
  "google": "Google",
  "facebook": "Facebook",
  "otherSso": "Other SSO",
  "userRoles": "User roles",
  "delete": "Delete",
  "deleteVar": "Delete {{var1}}: {{var2}}",
  "deleteVarDescription": "All data associated with this {{var}} will be deleted. This action cannot be undone.",
  "consoleWarningMessage": "This is a browser feature intended for developers. If someone told you to copy-paste something here to enable a feature or \"hack\" someone, it is a scam and will give them access to your account.",
  "pinCodeMessage": "Enter the pin code sent to your email:",
  "orContinueWith": "Or continue with",
  "loginWithGoogle": "Login with Google",
  "loginWithFacebook": "Login with Facebook",
  "ssoErrorProfileIncomplete": "We could not get your name and email address from that account. Check that you allowed access to your email, then try again.",
  "ssoErrorAccountMismatch": "This email address is already registered with a different sign-in method. Sign in the way you did originally.",
  "ssoErrorAccountUnavailable": "This account is not available. Please contact the studio.",
  "ssoErrorGeneric": "We could not sign you in with that account. Please try again.",
  "termsTitle": "T&Cs and GDPR",
  "termsMessage": "To use our services, you must agree to our Terms of Service and Privacy Policy. They have been updated or you need to accept them for the first time.",
  "acceptTerms": "Accept T&Cs",
  "acceptGdpr": "Accept GDPR",
  "xOfY": "{{x}} of {{y}}",
  "about": "About",
  "select": "Select",
  "lastModifiedDate": "Modified date",
  "lastModifiedBy": "Modified by",
  "createdDate": "Created date",
  "createdBy": "Created by",
  "auditColumns": "Audit columns",
  "securedBySSO": "Secured by SSO:",
  "newVar": "New {{var}}",
  "editVar": "Edit {{var}}",
  "duplicate": "Duplicate",
  "duplicateEvent": "Duplicate event",
  "duplicateEventHint": "A copy of {{title}}. Change what you need, then save it as a new event.",
  "room": "Room",
  "rooms": "Rooms",
  "capacity": "Capacity",
  "equipment": "Equipment",
  "add": "Add",
  "user": "User",
  "emptyDescription": "No {{var}} yet. Click on the button below to add one.",
  "enabled": "Enabled",
  "image": "Image",
  "location": "Location",
  "name": "Name",
  "address": "Address",
  "city": "City",
  "state": "State",
  "zipCode": "Zip code",
  "description": "Description",
  "descriptionMarkdownHint": "You can use markdown format.",
  "today": "Today",
  "month": "Month",
  "week": "Week",
  "day": "Day",
  "agenda": "Agenda",
  "events": "Events",
  "event": "Event",
  "allDay": "All day",
  "title": "Title",
  "startTime": "Start time",
  "endTime": "End time",
  "maxCapacity": "Max capacity",
  "category": "Category",
  "difficulty": "Difficulty",
  "instructors": "Instructors",
  "filter": "Filter",
  "endTimeAfterStartTime": "End time must be after start time",
  "maxCapacityExceedsRoom": "Max capacity cannot exceed room capacity: {{max}}",
  "subscriptionPlans": "Subscription Plans",
  "subscriptionPlan": "Subscription Plan",
  "price": "Price",
  "entryLimit": "Entry limit",
  "checkInLimit": "Check-in limit",
  "checkFrequency": "Check frequency",
  "unlimitedCheckIns": "Unlimited check-ins",
  "unlimited": "Unlimited",
  "validity": "Validity",
  "validityDuration": "Validity duration",
  "active": "Active",
  "inactive": "Inactive",
  "categories": "Categories",
  "nameEnglish": "English name",
  "nameGerman": "German name",
  "nameSpanish": "Spanish name",
  "nameFrench": "French name",
  "nameRomanian": "Romanian name",
  "color": "Color",
  "category-color-invalid": "Color must be a #RRGGBB hex value",
  "archived": "Archived",
  "archive": "Archive",
  "unarchive": "Unarchive",
  "archiveVar": "Archive {{var}}?",
  "archiveCategoryDescription": "This category will be hidden from pickers for new events, but existing events keep it and nothing else changes. You can unarchive it at any time.",
  "varArchivedSuccessfully": "{{var}} archived successfully",
  "varUnarchivedSuccessfully": "{{var}} unarchived successfully",
  "difficultyLevels": "Difficulty Levels",
  "difficulty-color-invalid": "Color must be a #RRGGBB hex value",
  "archiveDifficultyLevelDescription": "This difficulty level will be hidden from pickers for new events, but existing events keep it and nothing else changes. You can unarchive it at any time.",
  "moveUp": "Move up",
  "moveDown": "Move down",
  "management": "Management",
  "studio": "Studio",
  "administration": "Administration",
  "moreNav": "More",
  "moreActions": "More actions",
  "classManagement": "Class Management",
  "manageClass": "Manage class",
  "participants": "Participants",
  "noParticipants": "No participants yet",
  "addParticipant": "Add participant",
  "searchUsersByName": "Search by name",
  "searchUsersByNameEmail": "Search by name or email",
  "searchUsersByNamePhone": "Search by name or phone",
  "searchUsersByNameEmailPhone": "Search by name, email or phone",
  "cmCannotAddExpired": "Their access has expired. It must be extended before they can be added.",
  "participantAdded": "Participant added",
  "removeParticipant": "Remove participant",
  "confirmRemoveParticipant": "Remove {{name}} from this class? Their subscription entry will be refunded.",
  "participantRemoved": "Participant removed",
  "markAttended": "Mark attended",
  "markNoShow": "Mark no-show",
  "attendanceBeforeStartHint": "Attendance can be marked once the class has started",
  "cmThisWeek": "This week",
  "cmLastWeek": "Last week",
  "cmNextWeek": "Next week",
  "cmPreviousWeek": "Previous week",
  "cmWhoseClasses": "Whose classes",
  "cmAllClasses": "All classes",
  "cmMyClasses": "My classes",
  "cmShowCancelled": "Show cancelled",
  "cmNoClasses": "No classes this week",
  "cmNoClassesMine": "You teach no classes this week",
  "cmCancelledHidden_one": "{{count}} cancelled class is hidden.",
  "cmCancelledHidden_other": "{{count}} cancelled classes are hidden.",
  "cmGoToThisWeek": "Go to this week",
  "cmShowCancelledCount_one": "Show {{count}} cancelled class",
  "cmShowCancelledCount_other": "Show {{count}} cancelled classes",
  "cmOnNow": "On now",
  "cmEnded": "Ended",
  "cmTabRoster": "Roster",
  "cmTabHistory": "History",
  "cmClassTabs": "Class sections",
  "cmBackToWeek": "Back to the week",
  "cmRosterSummary": "Roster summary",
  "cmToCheckIn_one": "to check in",
  "cmToCheckIn_other": "to check in",
  "cmAttendedCount_one": "attended",
  "cmAttendedCount_other": "attended",
  "cmNoShowCount_one": "no-show",
  "cmNoShowCount_other": "no-shows",
  "cmMarkRestAttended": "Mark rest attended",
  "cmMarkRestAttendedConfirm_one": "Mark the {{count}} member still booked as attended? You can still change it on their row.",
  "cmMarkRestAttendedConfirm_other": "Mark the {{count}} members still booked as attended? You can still change each one on their row.",
  "cmMarkedAttended_one": "{{count}} member marked attended",
  "cmMarkedAttended_other": "{{count}} members marked attended",
  "cmSpots_one": "{{count}} spot",
  "cmSpots_other": "{{count}} spots",
  "cmNobodyWaiting": "Nobody is waiting",
  "cmWaitlistOff": "The waitlist is off for this class",
  "cmWaitlistHint": "First come, first served: the first in line is booked in automatically when a spot frees up.",
  "cmWaitlistPosition": "Position {{position}}",
  "cmJoinedAt": "Joined {{date}}",
  "cmNoHistory": "No staff actions on this class yet",
  "cmHistoryAdded": "{{actor}} added {{target}}",
  "cmHistoryRemoved": "{{actor}} removed {{target}}",
  "cmHistoryAttendance": "{{actor}} changed {{target}} from {{from}} to {{to}}",
  "cmHistoryAttendanceUnknown": "{{actor}} changed the attendance of {{target}}",
  "from": "From",
  "to": "To",
  "date": "Date",
  "welcomeTagline": "Your fitness journey starts here",
  "appName": "GN33",
  "appDescription": "Book classes, track your progress, and manage your subscriptions.",
  "browseEvents": "Browse Events",
  "browseEventsDescription": "Explore our full calendar of upcoming classes and sessions.",
  "tomorrow": "Tomorrow",
  "undo": "Undo",
  "bookWithOptions": "Book with options",
  "bookEvents": "Book Events",
  "bookEventsDescription": "Reserve your spot in any class with a single tap.",
  "trackProgress": "Track Progress",
  "trackProgressDescription": "View your booking history and activity analytics.",
  "subscriptionsDescription": "Purchase a subscription plan that suits your training goals.",
  "myBookings": "My Bookings",
  "subscriptions": "Subscriptions",
  "myActivity": "My Activity",
  "upcomingEvents": "Upcoming Events",
  "bookingsTotal": "Total Bookings",
  "bookingsLastWeek": "Last Week",
  "bookingsLastMonth": "Last Month",
  "bookingsLastYear": "Last Year",
  "noActiveSubscription": "No active subscription",
  "noActiveSubscriptionHint": "Purchase a plan to start booking classes.",
  "viewPlans": "View Plans",
  "manageSubscription": "Manage",
  "entriesLeft": "{{count}} entries left",
  "bookEvent": "Book",
  "cancelBooking": "Cancel booking",
  "cancelBookingConfirm": "Cancel this booking?",
  "cancelBookingDescription": "Your spot will be released and your entry will be refunded.",
  "bookingConfirmed": "Booking confirmed!",
  "bookingCancelled": "Booking cancelled.",
  "spotsLeft": "Available spots",
  "eventFull": "Full",
  "upcoming": "Upcoming",
  "eventSearchPlaceholder": "Search events by name",
  "next7Days": "Events for the next 7 days",
  "loadMore": "Load more",
  "noUpcomingEvents": "No upcoming events",
  "noUpcomingEventsHint": "There are no upcoming events matching your filters.",
  "upcomingJumpToDay": "Jump to day",
  "upcomingDayChip": "{{day}}, classes: {{count}}",
  "upcomingDayClasses_one": "{{count}} class",
  "upcomingDayClasses_other": "{{count}} classes",
  "upcomingMoreDays_one": "{{count}} more day",
  "upcomingMoreDays_other": "{{count}} more days",
  "spotsLeftCount": "Spots left: {{count}}",
  "bookedOfCapacity": "{{booked}} of {{capacity}} booked",
  "durationMinutes": "{{count}} min",
  "noBookingsYet": "No bookings yet",
  "noBookingsYetHint": "Browse upcoming events and book your first class.",
  "myBookingsTabs": "Booking tabs",
  "bookingsTabUpcoming": "Upcoming",
  "bookingsTabPast": "Past",
  "bookingsTabCancelled": "Cancelled",
  "bookingNotMarked": "Not marked yet",
  "freeCancellationUntil": "Free cancellation until {{time}}",
  "lateCancelOnly": "Cancelling now counts as a late cancellation",
  "classCancelledByStudio": "Class cancelled by the studio",
  "noUpcomingBookings": "No upcoming bookings",
  "noUpcomingBookingsHint": "Classes you book show up here.",
  "noPastBookings": "No past classes yet",
  "noPastBookingsHint": "Classes you have been to show up here.",
  "noCancelledBookings": "No cancelled bookings",
  "noCancelledBookingsHint": "Bookings you or the studio cancel show up here.",
  "nextClass": "Next class",
  "noClassBooked": "No class booked",
  "noClassBookedHint": "Book a class and it shows up here, with a countdown.",
  "classInProgressUntil": "In progress, ends {{time}}",
  "comingUp": "Coming up",
  "seeAllCount": "See all ({{count}})",
  "nothingElseBooked": "Nothing else booked yet",
  "yourProgress": "Your progress",
  "visitsThisMonth": "This month",
  "visitsThisYear": "This year",
  "visitsAllTime": "All time",
  "upcomingClasses": "Upcoming",
  "classesPerWeek": "Classes per week",
  "noVisitsLately": "No classes in the last 8 weeks",
  "noVisitsLatelyHint": "Classes you go to show up here, week by week.",
  "teachingToday": "Teaching today",
  "bookingSpots_one": "{{count}} spot",
  "bookingSpots_other": "{{count}} spots",
  "booked": "Booked",
  "attended": "Attended",
  "cancelled": "Cancelled",
  "no_show": "No show",
  "late_cancelled": "Late cancelled",
  "lateCancelDialogTitle": "Cancel after the deadline?",
  "lateCancelDialogDescription": "The cancellation window for this class has closed. You can still cancel, but your entry will not be refunded and it counts as a strike toward the studio's no-show policy.",
  "lateCancelConfirm": "Cancel anyway",
  "addToCalendar": "Add to calendar",
  "downloadIcs": "Download .ics",
  "addToGoogleCalendar": "Google Calendar",
  "calendarDownloadError": "Could not download the calendar file.",
  "syncToCalendar": "Sync to your calendar",
  "syncToCalendarHint": "Subscribe to this link in your calendar app to keep your booked classes in sync automatically - a cancelled class disappears and a moved one updates on its own.",
  "calendarFeedUrlCopied": "Calendar link copied to clipboard.",
  "copyLink": "Copy link",
  "regenerateCalendarLink": "Regenerate link",
  "regenerateCalendarLinkDialogTitle": "Regenerate calendar link?",
  "regenerateCalendarLinkDialogDescription": "Your current calendar link will stop working immediately. Any calendar app already subscribed to it will need to be updated with the new link.",
  "regenerateCalendarLinkConfirm": "Regenerate",
  "calendarLinkRegenerated": "Calendar link regenerated.",
  "noShowBannedTitle": "Booking temporarily blocked",
  "noShowBannedUntil": "You can book again after {{date}}.",
  "noShowStandingTitle": "No-show policy standing",
  "noShowStandingCount": "{{count}} of {{threshold}} strikes in the last {{days}} days",
  "entriesUsed": "Entries used",
  "left": "left",
  "mySubscriptions": "My Subscriptions",
  "noPlansAvailable": "No plans available at the moment.",
  "subscriptionsTabs": "Subscription tabs",
  "subscriptionsTabMine": "Mine",
  "subscriptionsTabPlans": "Plans",
  "subscriptionsTabHistory": "History",
  "noPlansAvailableHint": "Check back soon, or ask at the front desk.",
  "noPastSubscriptions": "No past subscriptions",
  "noPastSubscriptionsHint": "Subscriptions that expire or are cancelled show up here.",
  "entriesLeftOf_one": "{{left}} of {{count}} entry left",
  "entriesLeftOf_other": "{{left}} of {{count}} entries left",
  "entriesUsedOf_one": "{{used}} of {{count}} entry used",
  "entriesUsedOf_other": "{{used}} of {{count}} entries used",
  "validUntil": "Valid until {{date}}",
  "lastDayToday": "last day today",
  "daysLeft_one": "{{count}} day left",
  "daysLeft_other": "{{count}} days left",
  "planEntries": "Entries",
  "planCheckIns": "Check-ins",
  "planValidFor": "Valid for",
  "cancelSubscription": "Cancel subscription",
  "awaitingPayment": "Awaiting payment confirmation",
  "yourPlan": "Your plan",
  "subscribe": "Subscribe",
  "redirectingToPayment": "Redirecting to payment...",
  "subscriptionCancelled": "Subscription cancelled.",
  "cancelSubscriptionConfirm": "Cancel subscription?",
  "cancelSubscriptionDescription": "Your subscription will be cancelled. Any remaining entries will be lost.",
  "pending": "Pending",
  "expired": "Expired",
  "failed": "Failed",
  "userSubscriptions": "Subscriptions",
  "addSubscription": "Add subscription",
  "subscriptionAdded": "Subscription added successfully.",
  "subscriptionConfirmed": "Subscription marked as paid.",
  "markAsPaid": "Mark as paid",
  "manageSubscriptions": "Manage subscriptions",
  "editSubscription": "Edit subscription",
  "extendValidity": "Extend validity",
  "newEndDate": "New end date",
  "status": "Status",
  "searchUser": "Search by name or email",
  "msTabs": "Subscription status",
  "msTabExpiring": "Expiring soon",
  "msTabAll": "All",
  "msPages": "Pages",
  "msPreviousPage": "Previous page",
  "msNextPage": "Next page",
  "msEmptyActive": "No active subscriptions",
  "msEmptyPending": "No payments waiting to be confirmed",
  "msEmptyExpiring": "Nothing ends in the next 7 days",
  "msEmptyExpired": "No expired subscriptions",
  "msEmptyCancelled": "No cancelled subscriptions",
  "msEmptyFailed": "No failed payments",
  "msEmptyAll": "No subscriptions yet",
  "msEmptySearch": "No subscriptions for \"{{search}}\"",
  "msEmptySearchHint": "Search by first name, last name, full name or email.",
  "msLastDayToday": "Last day today",
  "msAwaitingPayment": "Awaiting payment",
  "msHeldBy": "Held by {{name}}",
  "msMember": "Member",
  "msPeriod": "Valid",
  "msEntries": "Entries",
  "msNoPaymentYet": "Not paid yet",
  "msFreeze": "Freeze",
  "msNotFrozen": "Not frozen",
  "msFreezeDaysRemaining_one": "{{count}} freeze day left",
  "msFreezeDaysRemaining_other": "{{count}} freeze days left",
  "msFrozenUntil": "Frozen until {{date}}",
  "msFreezeDates": "Freeze {{dates}}",
  "subscriptionUpdated": "Subscription updated.",
  "subscriptionExtended": "Subscription validity extended.",
  "freezeSubscription": "Freeze",
  "freezeStartDate": "Freeze start date",
  "freezeEndDate": "Freeze end date",
  "freezeDaysRemainingHint": "You have {{count}} freeze day(s) remaining on this subscription.",
  "subscriptionFrozen": "Subscription frozen.",
  "freezeRemoved": "Freeze removed.",
  "frozen": "Frozen",
  "frozenUntil": "Frozen until",
  "freezeScheduled": "Freeze scheduled",
  "removeFreeze": "Resume",
  "removeFreezeConfirm": "Remove this freeze?",
  "removeFreezeDescription": "The subscription will resume today and its extended validity will shrink to reflect the days actually used.",
  "cancelScheduledFreeze": "Cancel freeze",
  "cancelScheduledFreezeConfirm": "Cancel this scheduled freeze?",
  "cancelScheduledFreezeDescription": "The freeze will not happen, and the days it added to the validity are taken back.",
  "edit": "Edit",
  "selectPlan": "Plan",
  "startDate": "Start date",
  "endDate": "End date",
  "paymentMethod": "Payment method",
  "paymentNote": "Payment note",
  "paymentId": "Payment ID",
  "paymentMethodNetopia": "Online card",
  "paymentMethodCash": "Cash",
  "paymentMethodBankTransfer": "Bank transfer",
  "paymentMethodOther": "Other",
  "noSubscriptionsHint": "This user has no subscriptions yet.",
  "endDateAfterStartDate": "End date must be after the start date.",
  "filterSaved": "Saved as your default filters.",
  "defaultFiltersRemoved": "Default filters removed.",
  "saveAsDefaultFilters": "Save as my default",
  "useDefaultFilters": "Use my default",
  "removeDefaultFilters": "Remove my default",
  "filtersAreDefault": "These are your default filters",
  "defaultFiltersHint": "Your default filters are applied automatically every time you come back.",
  "aboutAuthorAlt": "Author avatar",
  "aboutAuthorRole": "Full-stack Developer",
  "aboutAuthorBio": "Welcome! You know who I am.",
  "aboutAuthorInvite": "Feel free to explore my work.",
  "aboutTechStack": "Tech Stack",
  "aboutTechStackDescription": "Technologies powering this application",
  "aboutFrontend": "Frontend",
  "aboutBackend": "Backend",
  "aboutTechUiLibrary": "UI library",
  "aboutTechFullStackFramework": "Full-stack framework (SSR)",
  "aboutTechBuildTool": "Build tool",
  "aboutTechRouting": "Type-safe routing",
  "aboutTechForms": "Form management",
  "aboutTechTable": "Headless table",
  "aboutTechDataFetching": "Data fetching & caching",
  "aboutTechComponentLibrary": "Component library",
  "aboutTechProgrammingLanguage": "Programming language",
  "aboutTechStyling": "Styling framework",
  "aboutTechSchemaValidation": "Schema validation",
  "aboutTechI18n": "Internationalization",
  "aboutTechCharts": "Charting library",
  "aboutTechUnitTesting": "Unit testing",
  "aboutTechAppFramework": "Application framework",
  "aboutTechDatabase": "Relational database",
  "aboutTechMigrations": "Database migrations",
  "aboutTechAuth": "JWT auth & OAuth2 sign-in",
  "aboutTechEmail": "Transactional email templates",
  "aboutTechAiAssistants": "AI assistant integration",
  "aboutTechIntegrationTesting": "Integration testing",
  "aboutDemoTitle": "Demo admin user",
  "aboutDemoSubtitle": "Or create your own user",
  "aboutDemoUsername": "Username",
  "aboutDemoPassword": "Password",
  "aboutDemoStart": "Start using",
  "spots": "Spots",
  "bookingDetails": "Notes (optional)",
  "bookingDetailsPlaceholder": "E.g. bringing a friend, might be 5 min late…",
  "googleMapsUrl": "Google Maps URL",
  "viewOnMap": "View on map",
  "filterEvents": "Filter Events",
  "filtersActiveCount_one": "{{count}} filter active",
  "filtersActiveCount_other": "{{count}} filters active",
  "noFiltersActive": "No filters active",
  "clearAllFilters": "Clear all",
  "done": "Done",
  "singleSelect": "Single select",
  "selectedCount": "{{count}} selected",
  "more": "more",
  "expand": "Expand",
  "expandAll": "Expand all",
  "collapse": "Collapse",
  "collapseAll": "Collapse all",
  "createEvent": "Create event",
  "startsIn": "Starts in",
  "dayShort": "d",
  "hourShort": "h",
  "minShort": "m",
  "secShort": "s",
  "bookedDaysCalendar": "My Booked Days",
  "instructorDescription": "Instructor Bio",
  "instructorDescriptionHint": "Write a short bio in markdown format. It will be displayed on instructor profiles.",
  "instructorDescriptionPlaceholder": "## About me\n\nDescribe your experience, specialities...",
  "explore": "Explore",
  "exploreStudios": "Studios",
  "exploreNoStudios": "No studios to show yet",
  "exploreNoInstructors": "No instructors to show yet",
  "exploreRoomCount_one": "{{count}} room",
  "exploreRoomCount_other": "{{count}} rooms",
  "exploreUpToPeople_one": "Up to {{count}} person",
  "exploreUpToPeople_other": "Up to {{count}} people",
  "exploreNextClasses": "Next classes",
  "exploreNoClassesComing": "No classes coming up yet",
  "exploreSubtitle": "The studios where classes happen and the instructors who teach them.",
  "settings": "Settings",
  "bookingSettings": "Booking settings",
  "cancellationCutoffHint": "How long before an event starts users can no longer cancel their booking. Set to 0 to allow cancellation at any time.",
  "settingsSaved": "Settings saved.",
  "privacy": "Privacy",
  "shareParticipation": "Share my event participation",
  "shareParticipationHint": "Show your name and photo to other participants of events you book. This works both ways: only members who share their participation can see who else is going.",
  "pushNotifications": "Push notifications",
  "pushNotificationsHint": "Get an alert on this device for waitlist promotions, class reminders and cancellations, even when the app is closed.",
  "pushNotificationsDeniedHint": "Notifications are blocked for this site. Re-enable them in your browser settings to turn this on.",
  "enablePushNotifications": "Enable push notifications",
  "disablePushNotifications": "Disable push notifications",
  "pushNotificationsEnabled": "Push notifications enabled on this device.",
  "pushNotificationsEnableFailed": "Couldn't enable push notifications. Please try again.",
  "pushNotificationsDisabled": "Push notifications disabled on this device.",
  "pushNotificationsDisableFailed": "Couldn't disable push notifications. Please try again.",
  "notificationPreferences": "Notification preferences",
  "notificationPreferencesHint": "Choose which channels notify you about waitlist promotions, class reminders and cancellations.",
  "notifyByEmail": "Email",
  "notifyByPush": "Push notifications",
  "notifyByWhatsapp": "WhatsApp",
  "notifyByWhatsappHint": "Requires a verified WhatsApp number.",
  "whatsapp": "WhatsApp",
  "whatsappHint": "Verify your number to also get waitlist, reminder and cancellation notifications over WhatsApp.",
  "whatsappNumber": "WhatsApp number",
  "sendVerificationCode": "Send code",
  "whatsappVerificationSent": "A verification code was sent to your WhatsApp. Enter it below.",
  "whatsappVerificationCodeHint": "Enter the 6-digit code",
  "whatsappVerified": "WhatsApp verified",
  "whatsappVerifiedSince": "Verified {{date}}",
  "removeWhatsappNumber": "Remove",
  "whatsappOptOutSuccess": "WhatsApp number removed.",
  "whatsappVerifySuccess": "WhatsApp number verified.",
  "whoIsGoing": "Who's going",
  "place": "Place",
  "noClassDescription": "No description for this class yet.",
  "placeUnknown": "Where this class is held is not known.",
  "bookSpots_one": "Book {{count}} spot",
  "bookSpots_other": "Book {{count}} spots",
  "oneSpotOnlyHint": "Your plan books one spot per class. Add a note for the studio if you like.",
  "andNOthers_one": "and {{count}} other",
  "andNOthers_other": "and {{count}} others",
  "nParticipantsPrivate_one": "{{count}} person is going",
  "nParticipantsPrivate_other": "{{count}} people are going",
  "enableSharingCta": "Enable \"Share my event participation\" under Privacy & data to see who's going.",
  "termsAndConditions": "Terms & Conditions",
  "gdprConsent": "GDPR / Privacy",
  "versionHistory": "Version history",
  "documentVersionInfo": "Version {{version}} · published {{date}}",
  "markdownContent": "Markdown content",
  "markdownContentPlaceholder": "Write the document in markdown…",
  "preview": "Preview",
  "previewEmpty": "Nothing to preview yet.",
  "publish": "Publish",
  "documentPublished": "New version published. All users must re-accept.",
  "publishConfirmTitle": "Publish new version?",
  "publishConfirmDescription": "This publishes a new version and forces every user to re-accept before they can continue using the app. This cannot be undone.",
  "cancellationClosedSince": "Cancellation closed since {{time}}",
  "fieldMinValue": "Must be {{minimum}} or greater",
  "fieldMaxValue": "Must be at most {{maximum}}",
  "reviews": "Reviews",
  "instructorReviews": "Instructor reviews",
  "noReviewsYet": "No reviews yet",
  "reviewCountOne": "1 review",
  "reviewCountMany": "{{count}} reviews",
  "rateStars": "Rate {{count}} out of 5",
  "anonymous": "Anonymous",
  "writeReview": "Write a review",
  "editYourReview": "Edit your review",
  "yourReview": "Your review",
  "reviewCommentPlaceholder": "Share your experience (optional)…",
  "postAnonymously": "Post anonymously",
  "submitReview": "Submit review",
  "deleteReview": "Delete review",
  "deleteReviewConfirm": "This permanently deletes your review. Are you sure?",
  "deleteReviewModerationConfirm": "This permanently deletes this member's review. Are you sure?",
  "reviewSaved": "Review saved.",
  "reviewDeleted": "Review deleted.",
  "reviewEligibilityHint": "Attend at least {{required}} classes with this instructor to write a review. You have attended {{attended}} so far.",
  "reviewedBy": "by {{name}}",
  "reviewSettings": "Instructor review settings",
  "reviewMinAttendedClasses": "Minimum attended classes",
  "reviewMinAttendedClassesHint": "How many classes a member must have attended with an instructor before they can review them. Set to 0 to let anyone write a review.",
  "waitlistSettings": "Waitlist",
  "waitlistEnabled": "Enable the waitlist",
  "waitlistEnabledHint": "When enabled, members can join the waitlist of a full class and are booked automatically when a spot frees up.",
  "memberContactSettings": "Member contact details",
  "memberContactSettingsHint": "Choose what instructors see about members on a class's roster and waitlist and in Add participant, and whether they can search by it. Managers and admins always see both.",
  "instructorSeesMemberEmail": "Instructors can see member email",
  "instructorSeesMemberPhone": "Instructors can see member phone number",
  "scheduleSettings": "Recurring schedule",
  "scheduleWeeksAhead": "Weeks generated ahead",
  "scheduleWeeksAheadHint": "How many weeks ahead recurring event series have their occurrences materialized on a rolling basis. Raising this fills in the newly-covered weeks the next time it runs.",
  "reminderSettings": "Class reminders",
  "classReminderHoursBefore": "Hours before class",
  "classReminderHoursBeforeHint": "How many hours before a class starts booked members receive a reminder email nudging them to cancel in time if they can't attend. Set to 0 to disable reminders.",
  "subscriptionFreezeSettings": "Subscription freeze",
  "subscriptionFreezeMaxDays": "Maximum self-serve freeze days",
  "subscriptionFreezeMaxDaysHint": "The total number of days a member may self-serve freeze on a single subscription over its lifetime. Set to 0 to disable member self-serve freezing; staff can still freeze any subscription with no limit.",
  "noShowSettings": "No-show policy",
  "noShowSettingsHint": "How many strikes (no-shows or late cancellations) within the rolling window trigger a temporary booking ban, and how long the ban lasts. Set the strike threshold to 0 to disable the whole policy.",
  "noShowStrikeThreshold": "Strike threshold",
  "noShowStrikeWindowDays": "Strike window (days)",
  "noShowBanDays": "Ban length (days)",
  "eventTimeWindowSettings": "Event schedule",
  "eventTimeWindowSettingsHint": "The hours events and event series may occupy, and the minute grid every start/end time picker snaps to. Applies to the calendar and to creating or editing events and series.",
  "eventDayStartHour": "Earliest start hour",
  "eventDayEndHour": "Latest end hour",
  "eventTimeMinuteStep": "Minute step",
  "eventMinuteStepOption": "{{count}} minutes",
  "endHourAfterStartHour": "End hour must be after the start hour",
  "waitlist": "Waitlist",
  "joinWaitlist": "Join waitlist",
  "leaveWaitlist": "Leave waitlist",
  "onWaitlist": "On waitlist",
  "waitlistJoined": "You have joined the waitlist. We will book you automatically if a spot frees up.",
  "waitlistLeft": "You have left the waitlist.",
  "waitingCount": "{{count}} waiting",
  "cancelClass": "Cancel class",
  "cancelClassConfirmTitle": "Cancel this class?",
  "cancelClassConfirmDescription": "Every active booking will be refunded and members will be notified by email. This cannot be undone.",
  "cancellationReason": "Reason (optional)",
  "classCancelled": "Class cancelled",
  "classCancelledSuccessfully": "Class cancelled successfully.",
  "repeatsWeekly": "Repeats weekly",
  "repeatDays": "Repeat on",
  "repeatUntil": "Ends on (optional)",
  "classesCreated": "{{count}} classes created",
  "classesCreatedWithSkips": "{{created}} classes created; skipped (room already occupied): {{skipped}}. These dates will be retried automatically once the room frees up.",
  "waitingForRoomToFreeUp": "Waiting for the room to free up on: {{dates}}",
  "recurringClass": "Recurring class",
  "endRecurringSeries": "End recurring series",
  "endRecurringSeriesTitle": "End this recurring series?",
  "endRecurringSeriesDescription": "Stops the series from today. Upcoming classes in it are removed, or cancelled with members notified and refunded if they have bookings. Classes already held are kept.",
  "seriesEndedSuccessfully": "Recurring series ended.",
  "deleteRecurringSeries": "Delete recurring series",
  "deleteRecurringSeriesTitle": "Delete this recurring series?",
  "deleteRecurringSeriesDescription": "Deletes the whole series. Classes in it that nobody booked are removed, past or upcoming. Upcoming classes with bookings are cancelled, with members notified and refunded. Classes with bookings are kept as one-off classes. This cannot be undone.",
  "seriesDeletedSuccessfully": "Recurring series deleted.",
  "editThisClassOnly": "This class only",
  "editThisAndFollowing": "This and following classes",
  "effectiveFromVar": "Changes apply from {{var}} onward",
  "cancelThisClassOnly": "This class only",
  "cancelThisAndFollowing": "This and following classes",
  "accountStatus": "Account status",
  "accountEnabled": "Account enabled",
  "accountEnabledHint": "Disabling locks the member out immediately, on their next request.",
  "accessExpiryDate": "Access expiry date",
  "clearExpiryDate": "Clear expiry date (never expires)",
  "accountStatusDisabled": "This account is disabled.",
  "accountStatusExpired": "This account expired on {{date}}.",
  "accountStatusActiveUntil": "This account is active until {{date}}.",
  "accountStatusActiveNoExpiry": "This account is active and never expires.",
  "memberNotes": "Staff notes",
  "memberNotesHelpLabel": "Help with staff notes",
  "memberNotesEmpty": "No notes yet.",
  "memberNotesLoadError": "Couldn't load the notes.",
  "tryAgain": "Try again",
  "memberNotePlaceholder": "Add a note about this member",
  "memberNoteNew": "New staff note",
  "memberNotePinOnCreate": "Pin this note",
  "memberNotesVisibilityHint": "Members don't see notes in the app, but every note about them is included in their data export. Pinned notes also show to instructors on their class rosters. Record only what staff need to know.",
  "memberNotesInstructorVisibilityHint": "Managers see every note. Pin it to show it to every instructor who has {{name}} in a class. {{name}} doesn't see it in the app, but it is included in their data export. Record only what staff need to know.",
  "memberNoteAdd": "Add note",
  "memberNoteAdded": "Note added",
  "memberNoteUpdated": "Note updated",
  "memberNoteDeleted": "Note deleted",
  "memberNotePinned": "Pinned",
  "memberNoteByInstructor": "Instructor",
  "memberNotePin": "Pin note",
  "memberNoteUnpin": "Unpin note",
  "memberNoteEdited": "edited {{date}}",
  "memberNoteEdit": "Edit note",
  "memberNoteDelete": "Delete note",
  "memberNoteDeleteConfirm": "This permanently deletes the note. Are you sure?",
  "memberNotesFor": "Staff notes for {{name}}",
  "memberNotesRosterDescription": "Pinned notes and your own.",
  "memberNoteAddFor": "Add a staff note for {{name}}",
  "memberAttendance": "Attendance",
  "memberAttendanceHelpLabel": "Help with attendance",
  "memberAttendanceLoadError": "Couldn't load attendance.",
  "memberAttendanceSeeAll": "See all members' attendance",
  "memberAttendancePage": "Member attendance",
  "memberAttendancePageHint": "A past class nobody marked counts as a visit. Last visit, next class and \"Not seen for\" count from today; the other numbers cover the period.",
  "attendanceAttended": "Attended",
  "attendanceNotMarked": "Not marked",
  "attendanceNoShows": "No-shows",
  "attendanceLateCancels": "Late cancels",
  "attendanceCancelled": "Cancelled",
  "attendanceUpcoming": "Upcoming",
  "attendanceLastVisit": "Last visit",
  "attendanceNextClass": "Next class",
  "attendanceStanding": "No-show policy",
  "attendanceStrikes": "{{strikes}} of {{threshold}} strikes in the last {{days}} days",
  "attendanceBannedUntil": "Booking ban until {{date}}",
  "attendanceNotMarkedHint": "attendance not marked",
  "attendanceNeverSeen": "Not yet",
  "attendanceNothingBooked": "Nothing booked",
  "attendanceNoBookings": "No bookings in this period.",
  "attendanceHistory": "Bookings in this period",
  "attendanceClassCancelled": "Class cancelled",
  "attendanceShowAll": "Show all ({{total}})",
  "attendanceShowFewer": "Show fewer",
  "attendanceSubscription": "Subscription",
  "attendanceMember": "Member",
  "attendanceSubscriptionUntil": "until {{date}}",
  "attendanceNoSubscription": "None",
  "attendanceNotSeenFor": "Not seen for",
  "attendanceNotSeenAny": "Any time",
  "attendanceNotSeenDays": "{{days}}+ days",
  "attendanceSearchPlaceholder": "Search name or email",
  "attendanceNobodyAway": "Nobody with an active subscription has been away that long.",
  "csvImport": "Import",
  "csvUsersTitle": "Import members",
  "csvUsersHint": "Bulk-create members from a CSV file. Imported accounts have no password; members sign in via Google or the forgot-password flow.",
  "csvEventsTitle": "Import classes",
  "csvEventsHint": "Bulk-create one-off classes from a CSV file. Use the recurring-series feature for repeating schedules.",
  "csvDownloadTemplate": "Download template",
  "csvImportSummary": "{{total}} rows: {{importable}} importable, {{skipped}} skipped, {{errors}} errors",
  "csvImportCommit": "Import {{count}} rows",
  "csvImportCommitted": "{{count}} rows imported",
  "csvColumnLine": "Line",
  "csvColumnStatus": "Status",
  "csvColumnSummary": "Row",
  "csvColumnMessage": "Message",
  "csvStatusValid": "Will import",
  "csvStatusCreated": "Imported",
  "csvStatusDuplicate": "Duplicate",
  "csvStatusConflict": "Conflict",
  "csvStatusError": "Error",
  "reports": "Reports",
  "reportPeriod": "Period",
  "presetThisWeek": "This week",
  "presetThisMonth": "This month",
  "presetLast30Days": "Last 30 days",
  "presetLast3Months": "Last 3 months",
  "presetCustom": "Custom range",
  "instructor": "Instructor",
  "allInstructors": "All instructors",
  "reportNoData": "No classes in the selected period.",
  "statClassesHeld": "Classes held",
  "statBooked": "Booked",
  "statAttended": "Attended",
  "statNoShows": "No-shows",
  "statAvgPerClass": "Avg attendees / class",
  "statAvgPerDay": "Avg classes / day",
  "statOccupancy": "Occupancy",
  "statCancelled": "Cancelled",
  "occupancy": "Occupancy",
  "noShows": "No-shows",
  "chartAttendeesPerDay": "Attendees per day",
  "chartOccupancyTrend": "Occupancy trend",
  "chartByCategory": "Attendance by category",
  "chartNoShowTrend": "No-shows per day",
  "earningsTitle": "Earnings calculator",
  "earningsHint": "Estimate a payout from the numbers above. The rate is not saved anywhere.",
  "earningsRate": "Rate",
  "earningsRatePlaceholder": "e.g. 15",
  "earningsMode": "Basis",
  "earningsPerAttendee": "Per attendee",
  "earningsPerClass": "Per completed class",
  "earningsEstimated": "Estimated earnings",
  "earningsUnmarkedHint": "Some past classes have no attendance marked, so per-attendee earnings may be undercounted.",
  "comparisonTitle": "Per-instructor comparison",
  "comparisonFootnote": "A class taught by several instructors counts for each of them, so rows can total more than the studio-wide figures. Click a row to view that instructor's dashboard.",
  "colClasses": "Classes",
  "privacyAndData": "Privacy & data",
  "exportMyData": "Export my data",
  "exportMyDataHint": "Download a copy of all your personal data - profile, bookings, subscriptions, waitlist entries, reviews and attendance history - as a ZIP file.",
  "downloadMyData": "Download my data",
  "exporting": "Exporting...",
  "exportDataError": "Could not export your data. Please try again.",
  "deleteMyAccount": "Delete my account",
  "deleteMyAccountHint": "Permanently erase your account and personal data. This cannot be undone.",
  "deleteMyAccountStaffBlocked": "You hold a staff role, so you cannot delete your own account. Please contact the studio to have your roles removed first.",
  "deleteMyAccountConfirmTitle": "Delete your account?",
  "deleteMyAccountConfirmDescription": "This is permanent. Your future bookings will be cancelled, any waitlist spots released, and your active subscription terminated without a refund. Your booking and attendance history will be kept for accounting purposes but anonymized. This action cannot be undone.",
  "deleteMyAccountTypeEmail": "Type your email ({{var}}) to confirm",
  "accountDeletedFarewell": "Your account has been deleted. Goodbye!",
  "gdprErase": "GDPR erase",
  "gdprEraseHint": "Erase {{var}}'s account and personal data per a GDPR erasure request received offline. This cannot be undone.",
  "gdprEraseConfirmTitle": "Erase this account?",
  "gdprEraseConfirmDescription": "This is permanent. Their future bookings will be cancelled, any waitlist spots released, and their active subscription terminated without a refund. Their booking and attendance history will be kept for accounting purposes but anonymized. This action cannot be undone.",
  "gdprEraseTypeEmail": "Type their email ({{var}}) to confirm",
  "gdprEraseSuccess": "The account has been erased.",
  "contact": "Contact",
  "contactPageTitle": "Get in touch",
  "contactPageIntro": "Have a question, or just want to check us out before signing up? Here is everything you need to reach us.",
  "contactReachUs": "Reach us",
  "contactInstagram": "Instagram",
  "contactFacebook": "Facebook",
  "contactOpeningHours": "Opening hours",
  "contactHoursWeekdays": "Monday - Friday: 07:00 - 21:00",
  "contactHoursWeekend": "Saturday - Sunday: 09:00 - 14:00",
  "contactOurLocations": "Our locations",
  "contactNoLocations": "No locations to show right now. Check back soon.",
  "help": "Help",
  "helpSearchPlaceholder": "Search help topics",
  "helpNoResultsHint": "Try a different search term.",
  "helpMemberSectionLabel": "For members",
  "helpStaffSectionLabel": "Admin & management",
  "helpSectionBooking": "Booking classes",
  "helpBookingTitle": "Browsing and booking a class",
  "helpBookingBody": "Browse upcoming classes from **Events** or **Upcoming**. Each class shows its category, difficulty, room, instructor(s) and how many spots are left.\n\nBook a single spot in one click straight from the Upcoming feed - if you change your mind, use the **Undo** action in the confirmation toast (this is a normal cancellation, so the usual cutoff still applies). Need more than one spot, or want to add a note for the instructor? Open the class and use **Book with options** instead.\n\nYou need an active subscription covering the class's category to book, and past classes are hidden - the schedule only shows what's coming up.",
  "helpSectionWaitlist": "Waitlist",
  "helpWaitlistTitle": "Joining the waitlist",
  "helpWaitlistBody": "If a class is full, join its waitlist instead of missing out. You keep your place in line (first come, first served), and if a spot opens up - someone cancels or a booking is removed - the next person on the list is automatically booked in and notified by email, push notification or WhatsApp, depending on what you've turned on in your notification preferences.\n\nStaff can see, in order, who is waiting for a class from the class management view.",
  "helpSectionSubscriptions": "Subscriptions & plans",
  "helpSubscriptionsTitle": "Subscriptions and plans",
  "helpSubscriptionsBody": "Buy a subscription plan from the **Subscriptions** page - pay online or, if the studio allows it, request a manual confirmation. Each plan covers specific class categories and comes with an entry limit and an expiry date; entries are used when you book and refunded automatically if you cancel in time.\n\nGoing away? You can freeze your own active subscription for a bounded number of days per year, within a date window of your choosing - your subscription's expiry date pushes back by exactly the length of the freeze. A frozen subscription can't pay for a booking on any date inside its freeze window.",
  "helpSectionCancellations": "Cancellations & no-shows",
  "helpCancellationsTitle": "Cancelling a booking",
  "helpCancellationsBody": "Cancel a booking from **My Bookings**, before the cutoff window closes, at no cost - your entry is refunded to the subscription that paid for it. Cancelling within the normal window asks for a quick confirmation first.\n\nCancelling after the cutoff, or missing a class without cancelling (a no-show), counts as a strike if the studio has that policy enabled. A configurable number of strikes within a rolling window leads to a temporary booking ban; you'll see your current strike count, or an active ban, on the My Bookings page.",
  "helpSectionReviews": "Instructor reviews",
  "helpReviewsTitle": "Rating your instructor",
  "helpReviewsBody": "After attending enough classes with an instructor, you can leave them a star rating and a comment from their profile. You can update or delete your own review at any time; a manager or admin can remove a review if it needs moderating.",
  "helpSectionProfile": "Profile & notifications",
  "helpProfileTitle": "Your profile and notifications",
  "helpProfileBody": "Update your name, profile picture, preferred language, gender and (for instructors) your bio from the **Profile** page.\n\nFrom the **Notifications** tab you can turn on browser push notifications and choose, per channel (email, push, WhatsApp), which of the waitlist-promotion, class-reminder and event-cancellation alerts you want to receive - WhatsApp requires verifying your number first. Booking confirmations and no-show/ban notices are always sent by email since there is no alternative channel for them.",
  "helpSectionPrivacy": "Privacy & your data",
  "helpPrivacyTitle": "Your data and privacy",
  "helpPrivacyBody": "The **Privacy & data** page is your GDPR self-service: download a ZIP of everything the studio holds about you (profile, bookings, subscriptions, waitlist entries, reviews, attendance history and staff notes about you), or permanently delete your account. Deleting your account cancels your future bookings, releases any waitlist spots, ends your active subscription without a refund, and anonymizes your history - your booking and attendance records are kept for accounting, but no longer linked to your name.\n\nIf you hold a staff role, you'll need to be demoted first - staff accounts can't self-delete.",
  "helpSectionClassManagement": "Class & series management",
  "helpClassManagementTitle": "Managing a class roster",
  "helpClassManagementBody": "**Class management** lists your classes for the selected date range, defaulting to the current week. Open a class to add or remove participants (with user search), see its full roster, and review a per-event audit trail of every roster change.\n\nA class that belongs to a recurring series shows a repeat indicator; editing or cancelling one of its occurrences offers a choice of scope, covered in the next topic.\n\nTo start a new class from an existing one, use **Duplicate** on the class's page or in its edit dialog: it opens a new class prefilled with everything from the original. Nothing is saved until you change something (usually the date or time) and press Save; the original stays as it was.",
  "helpSeriesEditScopeTitle": "Editing a recurring class",
  "helpSeriesEditScopeBody": "When you edit or cancel a single occurrence of a recurring class, gn33 asks whether the change applies to **this class only** or **this and following classes**:\n\n- **This class only** detaches just that occurrence from the series, so the change is a one-off, exactly like editing a standalone class.\n- **This and following classes** rewrites the series' day/time rule from that date onward, updating every future occurrence at once.\n\nA change that would conflict with an occurrence that already has bookings is blocked with a clear error rather than silently going through, so double check attendee counts before choosing the second option.\n\nTo remove a recurring class altogether, use **Delete recurring series** in its edit dialog or on its class page. Classes nobody booked are removed; upcoming classes with bookings are cancelled with members notified and refunded; classes with bookings stay as one-off classes so attendance history is kept.",
  "helpSectionAttendance": "Attendance",
  "helpAttendanceTitle": "Marking attendance",
  "helpAttendanceBody": "After a class, mark each participant **Attended** or **No-show** from its roster in class management. Attendance drives the reporting dashboard's numbers, and if the studio has the no-show/late-cancel policy enabled, fixing an unmarked no-show later automatically reverses any strike or ban it caused - standing is always derived live from the booking history, never stored separately.",
  "helpSectionEventCancellation": "Cancelling a class",
  "helpEventCancellationTitle": "Cancelling a class",
  "helpEventCancellationBody": "Cancelling a future class (soft cancel, manager/admin) refunds every active booking to the subscription that paid for it, retires any waiting waitlist entries, and emails everyone affected. The class stays visible on the schedule with a **Cancelled** badge and an optional reason you can enter - nobody can book, waitlist or edit it after that.\n\nAn event with no booking history can still be deleted outright instead.",
  "helpSectionCsvImport": "Data import",
  "helpCsvImportTitle": "Importing members and classes from CSV",
  "helpCsvImportBody": "The admin **Import** screen bulk-creates members or one-off classes from a CSV file. Upload `users.csv` or `events.csv` and you'll first see a dry-run preview - every row is validated and shown as valid, a duplicate, a conflict, or an error with a line number and reason - before you commit.\n\nOnly the rows that pass are committed; the rest are skipped and reported, so one bad row never blocks the rest of the file. Imported members get a blank password (they sign in via Google or use \"forgot password\") and stay silent, no welcome email, matching how staff-created accounts behave.",
  "helpSectionUserManagement": "Users & account status",
  "helpUserManagementTitle": "Managing users and account status",
  "helpUserManagementBody": "The **Users** page (open to managers, edit/delete/role changes admin-only) lists every account. From a user's detail screen you can enable or disable their account and set or clear an access-expiry date - disabling or expiring locks them out on their next request and revokes their refresh tokens. Managers can only change plain members, never their own account or another staff member's.\n\nAn admin can also run a GDPR erasure for a member from here, for a deletion request that arrived offline - it has the same effect as the member's own self-service deletion.",
  "helpMemberNotesTitle": "Keeping staff notes on a member",
  "helpMemberNotesBody": "A user's detail screen has a **Staff notes** card where managers and admins keep dated notes about the member - an injury mentioned at the desk, a payment arrangement, a follow-up to make. Instructors write notes too, from the roster of a class they teach: tap the note icon next to the member's name. The author can edit or delete their own note (an edited note says so), and an admin can delete any note.\n\nPinning decides who else reads a note: a pinned note shows to every instructor on the roster of every class the member books, and sorts first. An unpinned note is seen only by its author and by managers and admins. Instructors pin or unpin their own notes, when writing one or later from the roster; managers and admins can pin or unpin any note.\n\nNobody sees the notes kept about their own account in the app, staff included, but every note about a person is included in their GDPR data export, and all of them are deleted if their account is erased. Write only what staff need to know.",
  "helpMemberAttendanceTitle": "Checking whether members turn up",
  "helpMemberAttendanceBody": "A user's detail screen has an **Attendance** card: for the period you pick, how many classes the member attended, never had marked, missed (no-show), cancelled late or in time, and has coming up, plus their last visit, their next booked class, their standing under the no-show policy, and every booking in the period. Counts are classes, not seats.\n\n**Member attendance** (the button on the Users page) lists every member who holds a usable subscription or booked a class in the period, with the same counts, their contact details and their subscription. Sort by any count or date. **Not seen for** narrows it to members worth a call: they hold a subscription that is not frozen today, their account is active, and they have not been in for that many days - counted from their last visit, or from the start of their subscription if that is later, so someone who just renewed is not flagged.\n\nAttendance is marked by hand on each roster and is sometimes skipped, so a past class nobody marked still counts as a visit; it shows as **Not marked** so you can see how much of the picture is unconfirmed. Last visit, next class and Not seen for always count from today, whatever the period.",
  "helpSectionAdminSettings": "Admin settings",
  "helpAdminSettingsTitle": "Studio-wide settings",
  "helpAdminSettingsBody": "**Settings** (admin-only) holds the studio-wide knobs: booking cancellation cutoff, the instructor-review attendance threshold, whether the waitlist is on, how many weeks ahead recurring series generate, and how many hours before a class the reminder email goes out. The same area manages the versioned Terms & Conditions and GDPR document text.",
  "waitlistHelpLabel": "Help with the waitlist",
  "seriesScopeHelpLabel": "Help with editing recurring classes",
  "csvImportHelpLabel": "Help with CSV import",
  "personalDetails": "Personal details",
  "userDetailTabs": "User detail sections",
  "userTabMembership": "Membership",
  "userTabNotes": "Notes",
  "userTabAccount": "Account",
  "roleAdmin": "Admin",
  "roleManager": "Manager",
  "roleInstructor": "Instructor",
  "roleUser": "User",
  "accountDisabledBadge": "Disabled",
  "accountErasedBadge": "Erased",
  "accountActiveUntilBadge": "Active until {{date}}",
  "accountExpiredBadge": "Expired {{date}}",
  "myAccount": "My account",
  "profileTabs": "Account sections",
  "profileTabNotifications": "Notifications",
  "profileTabPrivacy": "Privacy",
  "usersTabs": "User groups",
  "usersTabAll": "All",
  "usersTabMembers": "Members",
  "usersTabInstructors": "Instructors",
  "usersTabManagers": "Managers",
  "usersTabAdmins": "Admins",
  "usersSearchPlaceholder": "Search name, email or phone",
  "anyStatus": "Any status",
  "userRoleColumn": "Role",
  "userStatusColumn": "Status",
  "deleteUserCardTitle": "Delete user",
  "deleteUserCardHint": "Permanently removes an account with no history, such as a mistyped or test account. Anyone with bookings, subscriptions, reviews or staff notes has to go through GDPR erase instead.",
  "userRolesHint": "Changes apply straight away. The highest role decides what the account can open.",
  "roleAdminHint": "Everything a manager can do, plus studio settings, plans, categories and imports.",
  "roleManagerHint": "Runs the studio day to day: users, subscriptions, locations and every class.",
  "roleInstructorHint": "Teaches classes: sees their rosters and marks attendance.",
  "roleUserHint": "Books classes and buys subscriptions.",
  "roleUserLocked": "Every account has this role, so it cannot be removed.",
  "roleOwnAdminLocked": "You can't remove your own admin role - ask another admin.",
  "androidAppTitle": "Get the Android app",
  "androidAppDescription": "Book classes and keep track of your bookings from your phone.",
  "androidAppGet": "Get the app",
  "androidAppDismiss": "Hide the Android app suggestion",
  "androidAppMenu": "Android app",
  "discardChangesTitle": "Discard changes?",
  "discardChangesDescription": "What you entered in this form will be lost.",
  "keepEditing": "Keep editing",
  "discard": "Discard",
  "editRecurringClass": "Edit recurring class",
  "cancelRecurringClass": "Cancel recurring class",
  "editThisClassOnlyHint": "Changes just this date; the rest of the series stays as it is.",
  "editThisAndFollowingHint": "Changes this class and every later one in the series.",
  "cancelThisClassOnlyHint": "Cancels just this date; the rest of the series goes on.",
  "cancelThisAndFollowingHint": "Ends the series from this date. Members booked on those classes are notified and refunded.",
  "endsOnAnotherDay": "Ends on another day",
  "roomCapacityHint": "Up to {{count}} in {{room}}",
  "hiddenFromMembersWhenOff": "When off, members don't see it.",
  "equipmentPlaceholder": "Add equipment, e.g. Mats",
  "tagInputHint": "Press Enter after each item.",
  "removeVar": "Remove {{var}}",
  "signInDetails": "Sign-in details",
  "newUserRolesHint": "Every account can book classes. Switch on a staff role to give this person more; it can be changed later on their Account tab.",
  "firstPage": "Go to first page",
  "previousPage": "Go to previous page",
  "nextPage": "Go to next page",
  "lastPage": "Go to last page",
  "aiAssistants": "AI assistants",
  "profileTabConnectedApps": "Connected apps",
  "mcpConsentTitle": "Allow {{host}} to access the studio?",
  "mcpConsentCallsItself": "The app calls itself \"{{name}}\".",
  "mcpConsentLoopbackTitle": "An app on your own computer",
  "mcpConsentLoopbackBody": "This connection goes back to a program running on this computer, such as Claude Code. Only allow it if you started connecting it yourself just now.",
  "mcpConsentWillBeAbleTo": "It will be able to:",
  "mcpScopeReadDescription": "Read $t(mcpReadableData).",
  "mcpConsentNoChanges": "It cannot change anything.",
  "mcpConsentAllowChanges": "Also let it make changes",
  "mcpScopeWriteDescription": "Make changes: $t(mcpWritableActions). $t(mcpPreviewedChanges) are previewed first: the studio makes them only once the app confirms the preview, and the app is asked to show it to you and wait for your OK. $t(mcpImmediateChanges) apply at once.",
  "mcpReadableData": "the schedule, rooms, members with their contact details and staff notes, subscriptions, attendance, reports and instructor reviews",
  "mcpWritableActions": "book members onto classes and cancel their bookings, mark attendance, create, change and cancel classes, start and end recurring classes, record, extend or freeze subscriptions, and add staff notes",
  "mcpPreviewedChanges": "Bookings, booking and class cancellations, no-shows, subscriptions, edits to a booked class, and starting or ending a recurring class",
  "mcpImmediateChanges": "Staff notes, other attendance marks, new one-off classes and edits to a class nobody has booked",
  "mcpConsentActsAsYou": "Act as you, {{name}} ({{email}}), with your permissions.",
  "mcpConsentDisconnectAnyTime": "You can disconnect it at any time under My account, Connected apps.",
  "mcpConsentReturnsTo": "After you decide, you go back to {{host}}.",
  "mcpConsentAllow": "Allow",
  "mcpConsentDeny": "Deny",
  "mcpConsentNotAllowedTitle": "Only managers and admins can connect AI apps",
  "mcpConsentNotAllowedBody": "Ask the studio if you need your AI assistant connected to it.",
  "mcpConsentGoneTitle": "This connection request can’t be used",
  "mcpConsentGoneBody": "It has expired, was already answered, or AI connections are turned off for the studio. Start connecting again from your AI app.",
  "mcpConsentFailedTitle": "The connection request could not be loaded",
  "mcpConsentFailedBody": "Check your connection and reload this page.",
  "mcpErrorTitle": "This AI app can’t be connected",
  "mcpErrorDisabled": "AI connections are turned off for this studio. An admin can turn them on under AI assistants.",
  "mcpErrorInvalidClient": "The app could not be identified, so it was not connected. Try again from the app; if it keeps happening, the app may not support connecting this way.",
  "mcpErrorInvalidRedirect": "The app asked to be answered at an address it has not registered, so it was not connected.",
  "mcpServerUrl": "Server URL",
  "mcpServerUrlCopied": "Server URL copied",
  "mcpNoConnections": "No connected apps",
  "mcpNoConnectionsMine": "Apps you connect to the studio appear here, one row per device.",
  "mcpNoConnectionsAll": "Apps managers and admins connect to the studio appear here.",
  "mcpScopeRead": "Read",
  "mcpScopeWrite": "Changes",
  "mcpConnectedFrom": "via {{host}}",
  "mcpConnectedFromComputer": "from an app on a computer",
  "mcpConnectedAt": "connected {{date}}",
  "mcpLastUsedAt": "last used {{date}}",
  "mcpNeverUsed": "not used yet",
  "mcpDisconnect": "Disconnect",
  "mcpDisconnectTitle": "Disconnect {{name}}?",
  "mcpDisconnectDescription": "The app loses access at once. To use it again, connect it again from the app.",
  "mcpDisconnected": "{{name}} disconnected",
  "mcpConnectTitle": "Connect an AI assistant",
  "mcpConnectDescription": "Add this URL to Claude, ChatGPT or another AI app as a connector, then sign in and allow access when it asks.",
  "mcpConnectDisabled": "AI connections are turned off for this studio. An admin can turn them on under AI assistants.",
  "mcpConnectHelpPrefix": "Step by step for each app:",
  "mcpConnectHelpLink": "Connecting an AI assistant",
  "mcpMyConnections": "Your connected apps",
  "mcpMyConnectionsDescription": "Each app here acts as you, reading the studio’s data and making changes if you allowed it, until you disconnect it.",
  "mcpSwitchTitle": "AI assistant connections",
  "mcpSwitchDescription": "Lets managers and admins connect their own AI assistant (Claude, ChatGPT...) to the studio, to ask it about classes, members, attendance and reports and, if they allow it when connecting, to make changes such as bookings, attendance and subscriptions.",
  "mcpSwitchLabel": "Allow AI assistant connections",
  "mcpSwitchedOn": "AI assistant connections are on",
  "mcpSwitchedOff": "AI assistant connections are off",
  "mcpPrivacyNote": "Member data a staff member reads through their assistant is sent to the AI provider they chose, and from there is subject to that assistant’s other tools. An assistant can make changes only if the staff member allowed it when connecting. $t(mcpPreviewedChanges) go through only after a preview the assistant is asked to show them first. $t(mcpImmediateChanges) apply at once. Turning this off stops every connection at once; connections are kept, and work again when it is turned back on.",
  "mcpAllConnections": "Staff connections",
  "mcpAllConnectionsDescription": "Every AI app a manager or admin has connected. Disconnecting one stops it at once.",
  "mcpActivity": "Activity",
  "mcpActivityDescription": "Everything the assistants asked for, newest first, kept for 180 days. Email addresses and phone numbers in the requests are masked.",
  "mcpNoActivity": "No activity yet",
  "mcpOutcomeFilter": "Outcome",
  "mcpOutcomeAll": "All outcomes",
  "mcpOutcomeSuccess": "Done",
  "mcpOutcomePreview": "Previewed",
  "mcpOutcomeRefused": "Refused",
  "mcpOutcomeError": "Failed",
  "mcpConfirmedAfterPreview": "Confirmed after a preview",
  "mcpDurationMs": "{{ms}} ms",
  "helpSectionAiAssistants": "AI assistants",
  "helpAiAssistantsTitle": "Connecting an AI assistant",
  "helpAiAssistantsBody": "Managers and admins can connect their own AI assistant to the studio and ask it things like \"who has not come in for a month?\" or \"which rooms are free on Thursday at 18:00?\".\n\n1. An admin turns on **AI assistant connections** under **AI assistants**.\n2. Copy the server URL from **My account, Connected apps**.\n3. Add it to your AI app:\n   - **Claude** (web, desktop or mobile): Settings, Connectors, *Add custom connector*, then paste the URL.\n   - **Claude Code**: run `claude mcp add --transport http studio <URL>`.\n   - **ChatGPT**: add it as an app or connector in developer mode.\n4. Sign in when the app asks, check the page names the app you are connecting, and choose **Allow**.\n\nThe assistant acts as you, with your permissions. It can read $t(mcpReadableData). If you tick **Also let it make changes** when connecting, it can also $t(mcpWritableActions). $t(mcpPreviewedChanges) are previewed first: the studio makes them only once the assistant confirms the preview, and the assistant is asked to show it to you and wait for your OK. Whether it really stops to ask is up to your AI app, so read what it is about to do before you agree. $t(mcpImmediateChanges) apply at once. Member data it reads goes to the AI provider you chose.\n\nDisconnect an app at any time under **My account, Connected apps**. Admins see every staff connection and everything the assistants asked for under **AI assistants**."
}
