{
  "brand": {
    "tagline": "Find your ski or snowboard instructor"
  },
  "common": {
    "fixMarked": "Check what is marked in red.",
    "skipToContent": "Skip to content",
    "language": "Language",
    "signIn": "Sign in",
    "signUp": "Sign up",
    "loading": "Loading...",
    "cancel": "Cancel",
    "close": "Close",
    "save": "Save",
    "unsavedChanges": "You have unsaved changes.",
    "discard": "Discard",
    "unsavedLeave": "You have unsaved changes. Leave without saving them?",
    "delete": "Delete",
    "back": "Back",
    "retry": "Retry",
    "select": "Select",
    "menu": "Menu",
    "openChat": "Open chat",
    "viewBooking": "View booking",
    "viewProfile": "View profile",
    "seeAll": "See all",
    "showMore": "Show more",
    "showLess": "Show less",
    "typeToConfirm": "Type {phrase} to confirm",
    "saving": "Saving…",
    "emailDidYouMean": "Did you mean {email}?",
    "optional": "Optional"
  },
  "nav": {
    "findInstructor": "Find an instructor",
    "countries": "By country",
    "resorts": "Ski resorts",
    "howItWorks": "How it works",
    "becomeInstructor": "Become an instructor",
    "registerSchool": "Register my school",
    "dashboard": "Dashboard",
    "bookings": "Bookings",
    "requests": "Booking requests",
    "calendar": "Calendar",
    "messages": "Messages",
    "favourites": "Favourites",
    "earnings": "Earnings",
    "invoices": "Invoices",
    "profile": "Profile",
    "notifications": "Notifications",
    "settings": "Settings",
    "admin": "Admin",
    "finances": "Finances",
    "schoolInstructors": "Instructors",
    "previewPage": "Preview my page",
    "privateLessons": "Private lessons",
    "groupLessons": "Group lessons",
    "equipmentRental": "Equipment rental",
    "connections": "Connections"
  },
  "registration": {
    "question": "First, tell us who you are",
    "kind": {
      "instructor": "I am an independent instructor",
      "instructorBody": "Your own profile, your rates and your calendar.",
      "school": "I want to register my school",
      "schoolBody": "Register the school, then invite your instructors by email."
    },
    "heardFrom": {
      "instagram": "Instagram",
      "google": "Google",
      "email": "An email from Alpine Pal",
      "phone": "A call from Alpine Pal",
      "other": "Other",
      "instructor": "An instructor invited me"
    },
    "heardFromOtherLabel": "Where? (optional)",
    "heardFromOtherPlaceholder": "Word of mouth, a trade fair, another website…",
    "conflictTitle": "One account, one role",
    "signOutForSchool": "Sign out and create a school account",
    "signOutForInstructor": "Sign out and create an instructor account"
  },
  "view": {
    "label": "View the app as",
    "admin": "Administrator",
    "instructor": "Instructor",
    "customer": "Student",
    "school": "School"
  },
  "home": {
    "heroTitle": "Find your ski or snowboard instructor",
    "heroSubtitle": "Book verified instructors, independent or from a ski school, across the world's best ski resorts. Pay securely, chat instantly, ski confidently.",
    "popularResorts": "Popular ski resorts",
    "featuredInstructors": "Featured instructors",
    "featuredSchools": "Featured ski schools",
    "howTitle": "How Alpine Pal works",
    "how1Title": "Search and compare",
    "how1Body": "Filter instructors by resort, language, discipline, price and availability.",
    "how2Title": "Book and pay securely",
    "how2Body": "Send a paid booking request. You get a full refund if it isn't accepted.",
    "how3Title": "Chat and meet on the slopes",
    "how3Body": "Message your instructor immediately, agree on a meeting point and enjoy your lesson.",
    "whyTitle": "Why book with Alpine Pal",
    "why1": "Verified instructors, independent or from a school",
    "why2": "Full refund if your instructor doesn't accept",
    "why3": "Local time zones for every resort",
    "why4": "Support in your language",
    "ctaTitle": "Are you a certified instructor?",
    "ctaBody": "Join Alpine Pal and reach international customers all season. Keep 90% of your lesson price.",
    "ctaButton": "Become an instructor"
  },
  "hiw": {
    "title": "How Alpine Pal works",
    "subtitle": "From finding the right instructor to meeting them on the slopes — booking a lesson takes just three steps.",
    "ctaTitle": "Ready to hit the slopes?",
    "ctaBody": "Find a verified instructor at your resort and book your first lesson in minutes.",
    "ctaSearch": "Find an instructor"
  },
  "privateLessons": {
    "faqTitle": "Questions people ask before booking",
    "ctaTitle": "Find an instructor at your resort",
    "ctaBody": "Filter by resort, date, discipline and language, read the profiles, and message whoever looks right before you book anything.",
    "ctaButton": "Browse instructors",
    "navLabel": "Private lessons",
    "moreLink": "What a private lesson includes, and how booking works"
  },
  "becomeInstr": {
    "stepsTitle": "How it works",
    "step1Title": "Create your profile",
    "step1Body": "Tell us about your experience, certifications, teaching languages and the resorts where you work. We check every independent instructor before they go live; a school's instructors are vouched for by their school.",
    "step2Title": "Set your rates and availability",
    "step2Body": "Choose your hourly price and group sizes, and open only the hours you want to teach.",
    "step3Title": "Get booked and paid",
    "step3Body": "Customers pay upfront when they send a booking request. Accept the ones that suit you and keep 90% of the lesson price.",
    "benefitsTitle": "Why teach with Alpine Pal",
    "benefit1Title": "International customers",
    "benefit1Body": "Students from all over the world find you — no marketing or agency needed.",
    "benefit2Title": "Your calendar, your rules",
    "benefit2Body": "You decide when, where and how much you teach. Accept or decline every request.",
    "benefit3Title": "Secure payments",
    "benefit3Body": "Lessons are paid upfront, so you never have to chase a payment again.",
    "benefit4Title": "Built-in chat",
    "benefit4Body": "Coordinate meeting points and lesson details with your customers in one place.",
    "ctaTitle": "Ready to join?",
    "ctaBody": "Create your account and start building your instructor profile today.",
    "ctaButton": "Create your account",
    "ctaSignIn": "I already have an account",
    "ctaSchoolLink": "Are you a ski school?",
    "ctaSchoolLinkCta": "Register it here",
    "schoolCannotApply": "This account manages a ski school. An instructor profile lives in its own account — sign up with a different email to apply.",
    "applyTitle": "Apply to become an instructor",
    "applySubtitle": "Tell us about yourself. Our team reviews every application before your profile goes live.",
    "applyTitleSchool": "Complete your profile for {school}",
    "applySubtitleSchool": "Tell us about yourself. Your profile goes live as soon as you send it, backed by {school}.",
    "schoolSetsPrice": "Your hourly rate is set by {school} — it is on the invitation, and the school can adjust it later.",
    "schoolSetsFormats": "You will sell with {school}'s formats, seasons and prices: the school sets them and they change when it changes them.",
    "schoolRunsCalendar": "{school} runs your calendar and your requests, on its open hours; it can hand them to you later.",
    "kindLabel": "How do you want to offer yourself?",
    "kind": {
      "certified": "Qualified independent instructor",
      "certifiedBody": "You hold an official qualification that licenses you to teach (BASI, ISIA, PSIA, técnico deportivo…) and work on your own.",
      "enthusiast": "Riding companion",
      "enthusiastBody": "No qualification: you ride along and share your experience of the mountain, without giving lessons.",
      "school": "Ski school instructor",
      "schoolBody": "You are qualified and teach for a ski school that works with Alpine Pal."
    },
    "countryFirst": "Choose your country to see how you can join.",
    "schoolInviteNotice": "Ski school instructors join through the invitation their school sends by email — there is no form to fill in here. Ask your school to invite you from its Alpine Pal dashboard.",
    "schoolInviteCta": "Is your school not on Alpine Pal yet? Tell them about us",
    "draftRestored": "We brought back what you had left half-finished.",
    "draftDiscard": "Start over",
    "kindGate": "Pick an option to see the rest of the form.",
    "kindCertifiedNote": "You'll be able to add your certifications from your profile once approved.",
    "kindEnthusiastNote": "Important: in many countries teaching skiing for payment requires an official qualification. As a companion you agree not to give lessons and to follow your resort's rules.",
    "bioLabel": "About you",
    "bioPlaceholder": "Your experience, certifications and teaching style.",
    "bioTranslateHint": "Write it in whichever language you are most comfortable with. We translate it into the other languages of the site automatically.",
    "resortsLabel": "Where do you teach?",
    "resortsHint": "Pick a country, then select one or more resorts. The first one sets your currency.",
    "languagesLabel": "Teaching languages",
    "dobLabel": "Date of birth",
    "dobHint": "Your profile shows your age, never the date. You must be of legal age to sign up as an instructor.",
    "yearsLabel": "Years of experience",
    "priceLabel": "Hourly price",
    "extraStudentLabel": "Price per extra student",
    "groupSetupNow": "Set up group lesson pricing now",
    "groupSetupHint": "Optional. Leave it unticked and you can switch group lessons on later under Group lessons in your dashboard.",
    "submit": "Submit application",
    "submitted": "Application submitted!",
    "missingName": "Add your name",
    "missingDob": "Add your date of birth",
    "tooYoung": "You must be at least {min} to sign up as an instructor",
    "dobInvalid": "That date of birth is not valid",
    "missingBio": "Write a short biography",
    "missingResorts": "Pick at least one resort",
    "missingLanguages": "Pick at least one language",
    "missingLicence": "A licence number is required in your country",
    "missingTitle": "Upload your certificate or give its number",
    "heardFromLabel": "How did you hear about Alpine Pal?",
    "missingHeardFrom": "Tell us how you heard about Alpine Pal",
    "missingTerms": "Accept the terms",
    "goToDashboard": "Go to your instructor dashboard",
    "status": {
      "pendingTitle": "Application under review",
      "pendingBody": "Thanks! Our team is reviewing your profile. We'll publish it as soon as it passes the review and let you know by email.",
      "pendingNextStep": "Meanwhile, set up your calendar: your profile has no teaching hours yet, and nobody can book you until you open some.",
      "verifiedTitle": "You're a verified instructor",
      "verifiedBody": "Your profile is live. Manage your rates, calendar and requests from your dashboard.",
      "rejectedTitle": "Application not approved",
      "rejectedBody": "Your application was not approved this time. Contact support if you think this is a mistake."
    },
    "companionBlocked": "Teaching for payment in {countries} requires an official qualification, so the companion option is not available there.",
    "credentialTitle": "Your qualification",
    "credentialRequired": "To teach in {countries} you need the {credential}. Give us the number and we will check it against the official register before publishing your profile.",
    "credentialRequiredTitle": "To teach in {countries} you need the {credential}. No licence number is needed: upload a photo or PDF of the certificate and we will check it before publishing your profile.",
    "credentialSchoolVouches": "{school} answers for you on the pistes in {countries}, so your qualification is not required. If you have one, upload it: it shows on your profile, and you need it to teach off-piste or on your own.",
    "credentialOptional": "There is no legal licence in the countries you picked. If you hold a certification, tell us and we can verify it: your profile will show it as verified.",
    "licenceNumber": "Licence or registration number",
    "titleNumber": "Certificate number (if it has one)",
    "credentialName": "Name of the qualification",
    "credentialIssuer": "Issued by",
    "credentialYear": "Year obtained",
    "credentialDocument": "Supporting document (optional)",
    "credentialDocumentTitle": "Photo or PDF of the certificate",
    "credentialDocumentHint": "PDF or photo, max 8 MB. Only you and our review team can open it. We keep it on file as evidence of the check.",
    "credentialUploaded": "Document on file",
    "credentialAttached": "Document uploaded",
    "credentialNotSavedYet": "Not saved yet: fill in the certification details and press the button below.",
    "credentialUpload": "Upload document",
    "credentialReplace": "Replace document",
    "acceptResponsibility": "I confirm that holding a valid qualification, licence and insurance for the resorts I have chosen is my responsibility, that the documents I provide are genuine, and that I accept the",
    "acceptResponsibilityCompanion": "I confirm that I will not give lessons or present myself as a qualified instructor, that holding the insurance my chosen resorts require is my responsibility, and that I accept the",
    "specialtiesHint": "Optional. Tick what describes you best: it is what a customer sees on your profile to judge whether you fit what they need.",
    "offPisteNeedsTitle": "In {countries}, “Off-piste”, “Freeride” and “Big mountain” need a qualification of your own: add it to be able to tick them.",
    "credentialExpiry": "Expiry date",
    "credentialNeverExpires": "This qualification does not expire",
    "missingExpiry": "Give the expiry date, or tick that it does not expire",
    "reapply": "Request a new review",
    "reapplyBody": "Fix whatever was wrong from your profile — your qualification, your licence number, the document — and ask us to look again.",
    "reapplied": "Sent. We will review it again.",
    "faqTitle": "Questions instructors ask",
    "moreTitle": "More on teaching with Alpine Pal:",
    "moreCountries": "what each country requires",
    "priceTooLow": "That is too low to charge: the minimum is {min} {currency} per hour.",
    "groupPriceTooLow": "That is too low to charge: the minimum is {min} {currency} per person.",
    "missingPrice": "Raise your hourly price to the minimum"
  },
  "search": {
    "title": "Find an instructor",
    "country": "Country",
    "resort": "Ski resort",
    "selectCountryFirst": "Select a country first",
    "selectDateFirst": "Pick a date first",
    "maxPricePerHour": "Up to {price}/h",
    "allCountries": "All countries",
    "allResorts": "All resorts",
    "date": "Date",
    "startTime": "Start time",
    "duration": "Duration",
    "durationHours": "{hours}h",
    "discipline": "Discipline",
    "ski": "Ski",
    "snowboard": "Snowboard",
    "both": "Ski & Snowboard",
    "language": "Teaching language",
    "anyLanguage": "Any language",
    "students": "Number of students",
    "cta": "Find an instructor",
    "resultsCount": "{count} results",
    "resultsCountOne": "1 result",
    "noResults": "No lessons match your filters.",
    "noResultsHint": "Try changing the resort, language, or date.",
    "lessonType": "Type of lesson",
    "lessonTypeAny": "Private and group",
    "lessonTypePrivate": "Private",
    "lessonTypeGroup": "Group",
    "groupsTitle": "Group lessons",
    "priceFrom": "from {price}",
    "schoolBadge": "Ski school",
    "schoolAssigns": "The school assigns the instructor for your lesson.",
    "schoolBook": "Book with the school",
    "filters": "Filters",
    "clearFilters": "Clear filters",
    "nameFilter": "Name: {name}",
    "nameFilterClear": "Remove the name",
    "priceRange": "Price range",
    "minRating": "Minimum rating",
    "minExperience": "Minimum years of experience",
    "instructorKind": "Type of instructor",
    "anyKind": "Any",
    "sort": "Sort by",
    "sortRecommended": "Recommended",
    "sortHighestRated": "Highest rated",
    "sortMostExperienced": "Most experienced",
    "sortLowestPrice": "Lowest price",
    "sortHighestPrice": "Highest price",
    "sortMostReviewed": "Most reviewed",
    "sortFastestResponse": "Fastest response",
    "selectInstructor": "Select",
    "nextAvailable": "Next available",
    "perHour": "/hour",
    "years": "{years} years",
    "reviews": "{count} reviews",
    "rankingNotice": "The “Recommended” order can be influenced by the commission some schools and instructors pay.",
    "rankingLink": "How we order results"
  },
  "resort": {
    "localTimeNotice": "All times are shown in the resort's local time.",
    "featuredInstructors": "Featured instructors at {resort}",
    "noInstructorsTitle": "No instructors available at this resort yet",
    "noInstructorsBody": "Nobody is offering lessons here for now — try a nearby resort, or check back soon.",
    "comingSoonTitle": "New instructors coming soon to {resort}",
    "comingSoonBodyOne": "{school} has joined Alpine Pal and is adding its instructors. In the meantime, you can contact the school from its page.",
    "comingSoonBodyMany": "These ski schools have joined Alpine Pal and are adding their instructors. In the meantime, you can contact them from their pages.",
    "schoolsBookableTitle": "Book with a ski school at {resort}",
    "schoolsBookableBody": "No instructor has a profile of their own here yet, but you can already book with the school, which assigns the instructor.",
    "schoolView": "View school",
    "schoolBook": "Book a lesson",
    "groupLessonsTitle": "Group lessons at {resort}",
    "groupLessonsIntro": "Learn with other people at a similar level: each person books and pays for their own seat. The next date of each class:",
    "groupLessonWith": "with {name}",
    "schoolSeatsTitle": "Or book with a ski school",
    "schoolSeatsIntro": "These schools sell lessons at {resort} without naming the teacher: you book with the school and it assigns an instructor from its team.",
    "instructorCtaTitle": "Do you teach at {resort}?",
    "instructorCtaTitleGeneric": "Are you an instructor around here?",
    "instructorCtaBody": "Join Alpine Pal, publish your profile and reach the customers already looking for lessons right here.",
    "areas": "Resort areas",
    "meetingPoints": "Suggested meeting points",
    "searchAt": "Find an instructor at {resort}",
    "filterPlaceholder": "Search by name, region or country…",
    "countResorts": "{n} resorts",
    "showAll": "Show all {n} more",
    "showLess": "Show less",
    "noResults": "No resorts match your search.",
    "factRegion": "Region",
    "factCountry": "Country",
    "factTimeZone": "Local time",
    "factCurrency": "Currency",
    "factInstructors": "Instructors here",
    "factFrom": "Lessons from",
    "factOpened": "Opened",
    "lessonsTitle": "Where lessons start",
    "gettingThereTitle": "Getting there",
    "goodForTitle": "Best suited to",
    "nearbyTitle": "Other resorts nearby",
    "faqTitle": "{resort}: common questions",
    "mapLink": "See it on the map",
    "officialSite": "Official resort website",
    "ctaTitle": "Book a lesson in {resort}",
    "ctaBody": "Compare instructors who teach here, message them before you commit, and pay securely through the platform.",
    "aboutTitle": "About {resort}",
    "audienceBeginners": "Beginners",
    "audienceFamilies": "Families",
    "audienceIntermediates": "Intermediates",
    "audienceAdvanced": "Advanced skiers",
    "audienceFreeride": "Off-piste and freeride",
    "audienceSnowboard": "Snowboarding",
    "audienceNightskiing": "Night skiing",
    "audienceCrosscountry": "Cross-country"
  },
  "countries": {
    "ES": "Spain",
    "AD": "Andorra",
    "FR": "France",
    "IT": "Italy",
    "DE": "Germany",
    "AR": "Argentina",
    "CL": "Chile",
    "CH": "Switzerland",
    "AT": "Austria",
    "PL": "Poland",
    "BG": "Bulgaria",
    "US": "United States",
    "CA": "Canada",
    "JP": "Japan",
    "NZ": "New Zealand",
    "MC": "Monaco"
  },
  "country": {
    "hubTitle": "Ski and snowboard instructors by country",
    "hubShort": "By country",
    "hubIntro": "Every country skis differently — the terrain, the season, the price of a lesson and even what the law asks of an instructor all change when you cross a border. Pick a country to see its resorts, its instructors and what you should know before booking.",
    "breadcrumbHome": "Home",
    "searchCta": "Find instructors in {country}",
    "browseAll": "Browse all instructors",
    "factResorts": "Ski resorts",
    "factSeason": "Season",
    "factCurrency": "Currency",
    "factFrom": "Lessons from",
    "factLanguages": "Teaching languages",
    "perHour": "{price} / hour",
    "terrainTitle": "The terrain",
    "seasonTitle": "When to go",
    "instructorsTitle": "Instructors in {country}",
    "instructorsEmpty": "No instructors have joined in {country} yet. We are adding them resort by resort — if you teach here, this is a good moment to be the first.",
    "instructorsEmptyCta": "Become an instructor",
    "resortsTitle": "Ski resorts in {country}",
    "credentialsTitle": "Qualifications required in {country}",
    "credentialsRequired": "Teaching skiing or snowboarding for payment in {country} is a regulated profession: an instructor must hold the {credential}. Instructors listed as certified on Alpine Pal have either sent theirs to us for review or are vouched for by the ski school that invited them.",
    "credentialsNotRequired": "{country} has no state teaching licence. The professional standard is the {credential}, and Alpine Pal shows what each instructor actually holds so you can judge it for yourself.",
    "credentialsName": "Qualification",
    "credentialsIssuer": "Issued by",
    "credentialsRegister": "Public register:",
    "credentialsDisclaimer": "This is a summary for guidance, not legal advice. The instructor remains responsible for holding a valid qualification.",
    "faqTitle": "Skiing in {country}: common questions",
    "relatedTitle": "Nearby countries",
    "ctaTitle": "Ready to book in {country}?",
    "ctaBody": "Compare instructors, message them before you commit, and pay securely through the platform.",
    "ctaButton": "Find an instructor",
    "onThisPage": "On this page",
    "navGuide": "The guide",
    "navInstructors": "Instructors",
    "navResorts": "Resorts",
    "navQualifications": "Qualifications",
    "navFaq": "Questions",
    "availableTitle": "Where you can book right now",
    "availableIntro": "Resorts in {country} with at least one instructor taking bookings on Alpine Pal today.",
    "tableResort": "Resort",
    "tableRegion": "Region",
    "tableInstructors": "Instructors",
    "tableFrom": "From",
    "guideTitle": "Skiing in {country}"
  },
  "instructor": {
    "verified": "Verified",
    "identityVerified": "Identity verified",
    "certificationsVerified": "Certifications verified",
    "age": "{age} years old",
    "yearsExperience": "years of experience",
    "completedLessons": "completed lessons",
    "responseRate": "Response rate",
    "averageResponse": "Avg. response",
    "instantConfirmation": "Instant confirmation",
    "biography": "About me",
    "specialties": "Specialties",
    "resorts": "Ski resorts",
    "languages": "Teaching languages",
    "certifications": "Certifications",
    "pricing": "Pricing",
    "extraStudentPrice": "Per extra student",
    "perExtraStudent": "per extra student/hour",
    "perExtraStudentLesson": "per extra student/lesson",
    "reviews": "Reviews",
    "book": "Book a lesson",
    "favourite": "Add to favourites",
    "favourited": "In your favourites",
    "sendMessage": "Message",
    "kind": {
      "certified": "Qualified instructor",
      "enthusiast": "Riding companion"
    },
    "kindBadge": {
      "certified": {
        "male": "Qualified instructor",
        "female": "Qualified instructor",
        "unspecified": "Qualified instructor"
      }
    },
    "newBadge": {
      "male": "New",
      "female": "New",
      "unspecified": "New",
      "school": "New"
    },
    "noReviewsYet": "No reviews yet",
    "verifiedBadge": {
      "male": "Verified",
      "female": "Verified",
      "unspecified": "Verified"
    },
    "verifiedBySchool": {
      "male": "Verified by their school",
      "female": "Verified by their school",
      "unspecified": "Verified by their school"
    },
    "genderLabel": "Gender",
    "gender": {
      "male": "Man",
      "female": "Woman",
      "unspecified": "Prefer not to say"
    },
    "certificationsDeclared": "Declared by the instructor, not yet verified by us",
    "certificationsSchoolBacked": "Vouched for by {school}, the school that invited them",
    "noCertifications": "No qualifications on file yet.",
    "certExpired": "Expired",
    "certExpiredWarning": "One of your qualifications has expired. Upload the renewed one so your profile shows a valid qualification.",
    "freeCancellation": "Free cancellation up to {window} before the lesson"
  },
  "bio": {
    "machineFrom": {
      "en": "Automatically translated from English",
      "es": "Automatically translated from Spanish",
      "it": "Automatically translated from Italian",
      "fr": "Automatically translated from French",
      "de": "Automatically translated from German",
      "pl": "Automatically translated from Polish",
      "nl": "Automatically translated from Dutch",
      "ru": "Automatically translated from Russian"
    },
    "originalIn": {
      "en": "Written in English — no other version yet",
      "es": "Written in Spanish — no English version yet",
      "it": "Written in Italian — no English version yet",
      "fr": "Written in French — no English version yet",
      "de": "Written in German — no English version yet",
      "pl": "Written in Polish — no English version yet",
      "nl": "Written in Dutch — no English version yet",
      "ru": "Written in Russian — no English version yet"
    },
    "sourceLabel": "The language you write in",
    "sourceHelp": "Write your biography once, in your own language. We translate it into the other languages of the site for you.",
    "originalLabel": "Your biography ({language})",
    "translationsTitle": "Translations",
    "translationsHelp": "Generated automatically when you save. Edit any of them if you would rather use your own words.",
    "chooseLanguage": "Language to view or edit",
    "auto": "Automatic",
    "yours": "Your wording",
    "pending": "Not translated yet",
    "willUpdate": "This will be regenerated when you save.",
    "keptOnEdit": "You wrote this one yourself, so it stays as it is.",
    "edit": "Edit",
    "restoreAuto": "Use the automatic translation",
    "close": "Close"
  },
  "favourites": {
    "empty": "You have no favourite instructors yet. Tap the heart on an instructor's profile to save them here.",
    "remove": "Remove"
  },
  "settings": {
    "photoAlsoPublic": "This is also the photo on your public instructor profile.",
    "title": "Account settings",
    "subtitle": "Your personal details and preferences.",
    "firstName": "First name",
    "lastName": "Last name",
    "email": "Email",
    "country": "Country",
    "preferredLanguage": "Preferred language",
    "maxStudents": "Max students per lesson",
    "privateLessons": "Private lessons",
    "groupLessons": "Group lessons",
    "groupEnabled": "Offer group lessons",
    "groupEnabledHelp": "Off by default. Once on, you can publish group lessons from your calendar; new classes take the price below.",
    "groupPrice": "Price per person",
    "groupPriceHelp": "Per seat, for the whole class. Changing it also updates the group lessons already on your calendar.",
    "minNotice": "Minimum booking notice",
    "minNoticeHelp": "Customers only see your free hours if they book at least this far ahead.",
    "autoAccept": "Instant confirmation",
    "autoAcceptHelp": "Paid bookings are confirmed at once, without waiting for you to accept them. You can still cancel a confirmed lesson, with a full refund to the customer.",
    "disciplineHelp": "This is what customers filter by, so keep it up to date if you start teaching the other one.",
    "noticeNone": "No minimum notice",
    "noticeHours": "At least {n} hours ahead",
    "saved": "Changes saved",
    "cancellationWindow": "Cancellation policy",
    "cancellationOption": "Free up to {window} before",
    "cancellationOptionDefault": "Free up to {window} before (default)",
    "cancellationWindowHelp": "Once a lesson is confirmed, the customer can still cancel it with a full refund up to this long before it starts; after that, there is no refund. It covers your private and group lessons, and customers see it on your profile and before paying. Bookings already made keep the policy they were made with.",
    "cancellationBySchool": "Set by your school: free cancellation up to {window} before the lesson."
  },
  "lessonsPage": {
    "noGroupLessons": "No group lessons",
    "movedInstructor": "Prices, students, notice and instant confirmation are now under",
    "privateTitle": "Private lessons",
    "groupTitle": "Group lessons",
    "privateIntro": "Lessons for one customer and their group, never mixed with strangers. Here you decide how you sell them, at what price and in which hours.",
    "privateIntroSchool": "The private lessons the school sells without naming the teacher: you publish the hours, the customer books and pays, and you assign the teacher whenever you like. Pick an instructor above to see theirs.",
    "privateIntroPerson": "This instructor's private lessons: their rates and their calendar. If the school runs their calendar, you edit it here.",
    "groupIntro": "Lessons sold seat by seat: each person books and pays for their own, and they share the class. Switch them on, set the price per person and publish them on the calendar.",
    "groupIntroSchool": "The group lessons the school publishes: the price per person, the seats, the level and the meeting point are set as each one is published, and you can hand it to an instructor on your roster afterwards.",
    "groupIntroPerson": "This instructor's group lessons: their price per person and their calendar. If the school runs their calendar, you publish them here.",
    "resortPick": "Ski resort",
    "resortCopyFrom": "Copy from another resort",
    "resortHint": "Everything below is for this resort only: how lessons sell, the prices and the calendar.",
    "resortOwn": "This resort has its own settings.",
    "resortShared": "It still uses the school's shared settings; what you save here changes this resort only.",
    "resortCopied": "Copied from {resort}: prices and conditions, not the calendar. Check it and press Save.",
    "whose": "Show",
    "howTitle": "How they are sold",
    "modeHoursTitle": "By the hour",
    "modeHoursBody": "The customer picks when it starts and how many hours. You set a price per hour.",
    "modeFormatsTitle": "Fixed formats",
    "modeFormatsBody": "Set times (morning, afternoon, full day…), each at a price for the whole group that can change by season.",
    "modeHoursPicture": "Example: hours open from 9:00 to 17:00 and a customer booking two of them",
    "modeFormatsPicture": "Example: a morning lesson 9:00–13:00, an afternoon lesson 13:00–17:00 and a full day 9:00–17:00",
    "modeNote": "You can switch whenever you like: what you set for the other way is kept in case you come back.",
    "rosterModeNote": "You decide here how each instructor sells and at what price; their group lessons, under Group lessons.",
    "rosterNoticeHelp": "Customers only see their free hours if they book at least this far ahead.",
    "rosterAutoAcceptHelp": "Paid bookings are confirmed at once, without waiting for the school to accept them. You can still cancel a confirmed lesson, with a full refund to the customer.",
    "rosterTermsByInstructor": "The instructor sets the maximum students, the minimum notice and instant confirmation, since they run their own calendar. If the school runs it (Managed by, under Instructors), they are set here.",
    "rosterGroupHelp": "Off by default. Once on, their group lessons can be published on the calendar below. The price is per seat, for the whole class; changing it also updates the classes already published.",
    "followSchoolHours": "Use the school's open hours",
    "followSchoolHoursOn": "Their calendar has the same open hours as the lessons without an assigned instructor, at the resorts they teach at, and changes whenever those do. One lesson at a time. Turn it off to give them hours of their own: they start from the current ones.",
    "followSchoolHoursOff": "Turned on, their open hours become those of the lessons without an assigned instructor and change with them.",
    "calendarFollowsSchool": "These are the school's open hours. Change them on the calendar of “Lessons without an assigned instructor”, or turn off “Use the school's open hours” to give them hours of their own.",
    "instructorModeBySchool": "How you sell your private lessons, and at what price, is up to your school.",
    "instructorFollowsSchool": "You sell with your school's formats and prices: they change when the school changes its own.",
    "paramsHoursTitle": "Price and terms",
    "paramsFormatsTitle": "Formats, seasons and prices",
    "calendarTitle": "Calendar",
    "calendarHoursHint": "The hours they can be booked in. Any group lessons show striped: they are managed under Group lessons.",
    "calendarFormatsHint": "Formats only sell inside the hours opened here: open at least the hours of each format. Any group lessons show striped: they are managed under Group lessons.",
    "calendarGroupHint": "Light green marks the hours open for private lessons; a group lesson published on them takes those hours.",
    "calendarGroupSeatHint": "Group lessons run apart from the private lessons' places. From each lesson you can hand it to an instructor.",
    "groupSettingsTitle": "Switch on and set the price",
    "groupPriceTitle": "Price per person",
    "groupOffNotice": "Group lessons are switched off: switch them on in step 1, give them a price and save to be able to publish them.",
    "notOnSaleNotice": "Nothing sells here yet: step 2 says what is missing. You can open the hours in the meantime.",
    "cancellationChange": "Change it in Profile"
  },
  "booking": {
    "reviewAndPay": "Review and pay",
    "checkout": "Checkout",
    "summary": "Booking summary",
    "instructor": "Instructor",
    "resort": "Resort",
    "date": "Date",
    "time": "Time",
    "duration": "Duration",
    "language": "Language",
    "students": "Students",
    "oneGroupNote": "This school has one instructor per level and per age: every student on a booking must have the same level and the same age (adults or children).",
    "oneGroupMixed": "These students mix levels or ages. Make one booking per group: go back and book only students of the same level and age.",
    "oneGroupBack": "Change the number of students",
    "studentN": "Student {n}",
    "studentName": "Full name",
    "studentAge": "Age",
    "studentLevel": "Level",
    "studentDetails": "Student details",
    "yearsOld": "{n} years old",
    "contactPhone": "Contact phone",
    "contactPhoneHint": "So {name} can reach you on the day of the lesson.",
    "errorStudentName": "Write this student's name.",
    "errorStudentAge": "Write this student's age.",
    "errorStudentAgeRange": "This age doesn't fit this lesson: {who}.",
    "errorContactPhone": "Write your phone number with its prefix.",
    "errorDetailsAbove": "Check what's marked in red: student details or the phone are missing.",
    "actionsTitle": "Actions",
    "accountClosed": "Account closed",
    "instructorPaused": "Their profile is not published at the moment.",
    "refundLabel": "Refund",
    "refundInProgress": "In progress",
    "refundedLabel": "Refunded",
    "refundPendingNote": "We are processing your refund. It goes back to the payment method you used.",
    "refundBankNote": "It goes back to the payment method you used. Depending on your bank, it can take 5 to 10 business days to show.",
    "pickAnotherTime": "Pick another date or time",
    "slotNoLongerBookable": "This slot can no longer be booked — the instructor's minimum notice has passed.",
    "priceChanged": "The instructor changed their rate while this page was open. Check the updated amount and press again to pay.",
    "customerNoShow": "The customer didn't show up",
    "customerNoShowTitle": "Record a customer no-show?",
    "customerNoShowBody": "The lesson counts as delivered and your payment is released. The customer is notified — only do this if they really never turned up.",
    "customerNoShowToast": "Recorded. The lesson counts as delivered.",
    "messageToInstructor": "Message to the instructor (optional)",
    "messagePlaceholder": "Tell your instructor about your experience, goals or anything they should know.",
    "priceBreakdown": "Price breakdown",
    "extraStudents": "+{count} extra students × {hours}h",
    "extraStudents_one": "+{count} extra student × {hours}h",
    "extraStudentsLesson": "+{count} extra students",
    "extraStudentsLesson_one": "+{count} extra student",
    "total": "Total",
    "payAndSend": "Pay and send request",
    "paymentTitle": "Payment",
    "paymentNotice": "You will be charged now. The booking will remain pending until the instructor approves it. If the instructor rejects the request or does not respond before the deadline, you will receive a full refund.",
    "paymentNoticeInstant": "You will be charged now, and the lesson is confirmed as soon as the payment goes through.",
    "paymentNoticeGroup": "You will be charged now, and your seat is confirmed as soon as the payment goes through. If the class is called off, you will receive a full refund.",
    "paymentNoticeSchool": "You will be charged now. The booking will remain pending until the school approves it. If the school rejects the request or does not respond before the deadline, you will receive a full refund.",
    "paymentNoticePack": "You will be charged now for the whole pack, and it is confirmed as soon as the payment goes through. It can only be cancelled as a whole, in good time before its first day. If one of its days is called off, you get that day's share back.",
    "paymentNoticePackRequest": "You will be charged now for the whole pack. It will remain pending until the school approves it; if the school rejects it or does not respond before the deadline, you will receive a full refund. It can only be cancelled as a whole, in good time before its first day.",
    "paymentNoticePackRequestInstructor": "You will be charged now for the whole pack. It will remain pending until the instructor approves it; if the instructor rejects it or does not respond before the deadline, you will receive a full refund. It can only be cancelled as a whole, in good time before its first day.",
    "cancellationPolicy": "Cancellation policy",
    "cancellationPolicyBody": "Free cancellation while the instructor has not confirmed. After confirmation you can still cancel with a full refund up to {window} before the lesson starts. Full refund if the instructor rejects or does not respond in time.",
    "cancellationPolicyLastMinute": "This lesson starts in under {window}: once the instructor confirms it, you will not be able to cancel. You still get a full refund if they reject it or do not answer in time.",
    "cancellationPolicyBodySchool": "Free cancellation while the school has not confirmed. After confirmation you can still cancel with a full refund up to {window} before the lesson starts. Full refund if the school rejects or does not respond in time.",
    "cancellationPolicyBodyInstant": "Your lesson is confirmed the moment your payment goes through, with no waiting for an answer. You can cancel it with a full refund up to {window} before it starts; after that it can no longer be cancelled.",
    "cancellationPolicyBodyGroup": "Your seat is confirmed the moment your payment goes through. You can cancel it with a full refund up to {window} before the class starts; after that it can no longer be cancelled.",
    "cancellationPolicyLastMinuteSchool": "This lesson starts in under {window}: once the school confirms it, you will not be able to cancel. You still get a full refund if the school rejects it or does not answer in time.",
    "cancellationPolicyLastMinuteInstant": "This lesson starts in under {window}: it is confirmed as soon as you pay, and you will not be able to cancel it.",
    "cancel": "Cancel booking",
    "cancelByInstructor": "Cancel this lesson",
    "cancelTitle": "Cancel this booking?",
    "cancelBody": "The request will be cancelled and the instructor will no longer see it.",
    "cancelBodyPaid": "The request will be cancelled and you will be refunded in full.",
    "cancelByInstructorBody": "The lesson will be cancelled and the customer refunded in full. Cancelling confirmed lessons affects your reputation: only do it when unavoidable.",
    "cancelConfirm": "Yes, cancel",
    "cancelBodyConfirmed": "The confirmed lesson will be cancelled and you will be refunded in full. The instructor gets the slot back.",
    "freeCancelUntil": "Free cancellation until {date} (resort time)",
    "cancelWindowClosed": "The free cancellation window has closed — the lesson starts in less than {window}.",
    "cancelWindowClosedAsk": "Ask {name} in the chat to cancel it: they still can, with a full refund.",
    "cancelWindowClosedAskGroup": "Ask {name} in the chat to cancel your seat: they still can, with a full refund.",
    "managedBySchoolNotice": "Your school answers this request for you.",
    "manageInSchoolPanel": "Manage it from the school panel",
    "schoolLabel": "School",
    "unassignedNote": "The school assigns the instructor and you meet them at the meeting point. Any questions, the chat goes to the school.",
    "unassignedShort": "Instructor assigned by the school",
    "lessonType": "Lesson type",
    "groupLesson": "Group lesson",
    "groupMax": "Max {n} people",
    "groupSeatsLeft": "{count} seats left",
    "groupSeatsLeft_one": "{count} seat left",
    "perPerson": "per person",
    "groupPriceWhole": "For the whole lesson ({hours}h)",
    "groupFromPerPerson": "Group lessons from {price} per person",
    "groupCheckoutNote": "This is a group lesson: other customers can join the same class, up to {n} people in total.",
    "groupQuorumNotice": "This class runs with at least {min} participants. If it is still under that {hours} hours before the start, it is called off and you are refunded in full.",
    "schoolViewerNote": "You are seeing this booking as the instructor's school. The chat and the meeting point stay between the instructor and the customer.",
    "rejectConfirmTitle": "Reject this request?",
    "rejectConfirmBody": "The customer will be refunded in full and the request cannot be reopened. If the time just doesn't suit you, propose a new one instead.",
    "proposeTimeBody": "The customer can accept your new time or decline it and keep the original request open.",
    "proposeFormatNote": "This lesson was sold as a fixed format: it can only move to another day at the same hours, if that day sells it at the same price.",
    "proposeMessagePlaceholder": "Optional message for the customer…",
    "proposeSent": "New time proposed. The customer has been notified.",
    "completePayment": "Complete the payment",
    "declinedProposedToast": "New time declined — the original request is open again.",
    "completePaymentBody": "This booking is waiting on the payment, and the instructor won't see the request until it goes through. When you open the payment, we hold the slot for you for {minutes} minutes; if you no longer want it, cancel it.",
    "cancelledToast": "Booking cancelled",
    "processing": "Processing payment...",
    "paymentSuccess": "Payment successful",
    "confirmationTitle": "Your booking is being processed",
    "confirmationBody": "We've charged your card and opened a private chat with your instructor. You'll get a notification as soon as they respond.",
    "confirmedTitle": "Your lesson is confirmed",
    "confirmedTitleGroup": "Your seat is confirmed",
    "confirmedBody": "We've charged your card and opened a private chat for the lesson. The meeting point and every detail are on your booking page.",
    "openChat": "Open chat with instructor",
    "responseDeadline": "The instructor has {time} to respond.",
    "responseDeadlineExpired": "The response deadline has passed.",
    "proposalDeadlineCustomer": "You have {time} to answer the proposal.",
    "proposalDeadlineOther": "The customer has {time} to answer.",
    "status": {
      "payment_pending": "Payment pending",
      "payment_failed": "Payment failed",
      "pending_instructor_approval": "Waiting for instructor",
      "change_proposed": "Change proposed",
      "confirmed": "Confirmed",
      "rejected_by_instructor": "Rejected by instructor",
      "expired": "Expired",
      "cancelled_by_customer": "Cancelled by student",
      "cancelled_by_instructor": "Cancelled by instructor",
      "refunded": "Refunded",
      "upcoming": "Upcoming",
      "in_progress": "In progress",
      "completed": "Completed",
      "no_show_customer": "Customer no-show",
      "no_show_instructor": "Instructor no-show",
      "disputed": "Under review"
    },
    "payment": {
      "pending": "Payment pending",
      "processing": "Processing",
      "succeeded": "Paid",
      "failed": "Failed",
      "authentication_required": "Authentication required",
      "refund_pending": "Refund pending",
      "refunded": "Refunded"
    },
    "acceptRequest": "Accept",
    "rejectRequest": "Reject",
    "proposeTime": "Propose new time",
    "acceptProposed": "Accept new time",
    "declineProposed": "Decline new time",
    "demoNotice": "This is a simulated payment. No real charge will be made.",
    "mockCardHint": "Any card number works in demo mode.",
    "securedByStripe": "Secure payment by Stripe",
    "continueToPayment": "Continue to payment",
    "continueHint": "You'll enter your card details on the next step, without leaving this page.",
    "signInToPay": "Sign in to continue",
    "signInToPayBody": "Creating an account is free and takes a minute. We need it so your booking, your chat and your receipt stay linked to you.",
    "processingTitle": "We're confirming your payment",
    "processingBody": "This usually takes a few seconds. You can leave this page — we'll email you as soon as it goes through.",
    "slotGoneTitle": "That time was no longer available",
    "slotGoneBody": "It was booked or closed while you were paying, so the booking did not go through. You are being refunded in full to the same payment method; depending on your bank, it can take a few days to show.",
    "paymentReturnedTitle": "Your payment is being refunded",
    "paymentReturnedBody": "This booking is no longer going ahead. The amount goes back to the same payment method; depending on your bank, it can take a few days to show.",
    "loadingPayment": "Opening the secure payment form…",
    "holdUntil": "We're holding this slot for you until {clock} ({time} left).",
    "holdExpired": "Your {minutes} minutes are up, so the slot is no longer held for you and someone else can book it.",
    "holdRenew": "Check it's still free and hold it again",
    "kindLabel": "Kind of lesson",
    "kindPrivate": "Private lesson",
    "kindGroup": "Group lesson",
    "cancellationPolicyBodyPack": "You can cancel the whole pack with a full refund up to {window} before its first day. After that it cannot be cancelled. If one of its days is called off, you get that day's share back.",
    "addToCalendar": "Add to my calendar",
    "addToCalendarGoogle": "Google Calendar",
    "addToCalendarFile": "Apple / Outlook"
  },
  "chat": {
    "directChat": "Direct chat",
    "directSubtitle": "Direct conversation — you can chat before booking a lesson.",
    "empty": "No messages yet. Start the conversation!",
    "emptyList": "You have no conversations yet.",
    "unknownUser": "User",
    "notReady": "The chat opens once the payment is completed.",
    "prePayTitle": "Questions before paying?",
    "prePayBody": "This booking's chat opens once the payment is complete. If you want to ask the instructor something first, write to them: they will answer in a separate conversation.",
    "prePayCta": "Write to the instructor",
    "prePayNewTab": "Opens in another tab",
    "sendPlaceholder": "Write a message...",
    "send": "Send",
    "typing": "typing...",
    "failed": "Message failed to send.",
    "readOnly": "This booking is closed. The conversation is read-only.",
    "meetingPoint": "Meeting point",
    "proposeMeeting": "Propose meeting point",
    "confirmMeeting": "Confirm meeting point",
    "meetingConfirmed": "Meeting point confirmed",
    "meetingProposedBy": "Proposed by {who}",
    "meetingProposedByYou": "Proposed by you",
    "system": {
      "accepted": "The instructor accepted the booking.",
      "rejected": "The instructor rejected the booking.",
      "acceptedNewTime": "The customer accepted the new lesson time.",
      "refundInitiated": "A refund has been initiated."
    },
    "answeredBySchool": "{school} replies on behalf of {name}.",
    "writingForInstructor": "You are writing on behalf of {name}, whose profile has no account yet.",
    "forInstructor": "For {name}"
  },
  "dashboard": {
    "customer": {
      "title": "My dashboard",
      "overview": "Overview",
      "nextLesson": "Next lesson",
      "pendingResponses": "Waiting for instructor",
      "unreadMessages": "Unread messages",
      "empty": "You have no bookings yet.",
      "browse": "Find an instructor",
      "pastLessons": "Past lessons"
    },
    "instructor": {
      "title": "Instructor dashboard",
      "notManaging": "You are not managing any instructor.",
      "notManagingGo": "Go to the instructors",
      "pendingRequests": "Pending booking requests",
      "upcomingLessons": "Upcoming lessons",
      "monthEarnings": "This month",
      "rating": "Average rating",
      "requestsEmpty": "No pending requests.",
      "requestsManagedBySchool": "Your school answers your booking requests. You can follow them here and open the chat.",
      "youEarn": "You earn ({percent}%)",
      "bookingRef": "Booking #{ref}",
      "studentsCount": "{count} students",
      "studentsCount_one": "{count} student",
      "noAvailabilityTitle": "Your calendar is empty",
      "noAvailabilityBody": "You haven't published any teaching hours yet, so customers can't book you. Open the hours you want to teach.",
      "noAvailabilityCta": "Set your availability",
      "acting": {
        "banner": "You are managing {name} as Alpine Pal.",
        "moneyReadOnly": "Payouts and withdrawals belong to the instructor: you can see them here, but not change them.",
        "messagesNotice": "Here you see your own conversations as Alpine Pal, not the instructor's.",
        "accountNotice": "Their payout method and closing the account belong to the instructor: they are not managed from here.",
        "calendarNotice": "The Google Calendar belongs to the instructor: it is not managed from here."
      },
      "connectionsIntro": "Connect Alpine Pal to your Google Calendar: your lessons appear in it on their own and, if you like, the hours busy in your calendar can no longer be booked."
    }
  },
  "review": {
    "submit": "Submit review",
    "verifiedBooking": "Verified booking",
    "rateInstructor": "Rate your instructor",
    "rateCustomer": "Rate your student",
    "commentPlaceholder": "Tell us how the lesson went (optional)",
    "submittedToast": "Thanks for your review!",
    "thanks": "You already reviewed this lesson. Thank you!",
    "pendingBadge": "Rate the lesson",
    "clientRating": "{count} reviews",
    "clientRating_one": "{count} review",
    "clientRatingEmpty": "New customer, no reviews yet",
    "toReview": "Lessons to review"
  },
  "calendar": {
    "title": "Availability",
    "subtitle": "Click a free hour to open it, or an open one to remove it. Times shown in the resort's time zone.",
    "today": "Today",
    "prevWeek": "Previous week",
    "nextWeek": "Next week",
    "weekOf": "Week of {date}",
    "addTitle": "Add availability",
    "untilHour": "Until",
    "oneOff": "One-off",
    "recurring": "Recurring (weekly)",
    "recurringUntil": "Repeat until",
    "noEndDate": "Leave empty to repeat with no end date.",
    "add": "Add",
    "removeTitle": "Remove availability",
    "removeBody": "This hour is part of a recurring availability. Remove it only on this day, or the whole series?",
    "removeSingleDay": "Only this day",
    "removeSeries": "Whole series",
    "legendAvailable": "Available",
    "legendUnavailable": "Unavailable",
    "legendConfirmed": "Confirmed lesson",
    "legendPending": "Pending request",
    "legendInProgress": "Lesson in progress",
    "legendCompleted": "Completed",
    "legendProblem": "Unresolved issue",
    "legendBooked": "Booked",
    "legendPendingSlot": "Being booked",
    "legendSelected": "Your selection",
    "legendYourBooking": "Your booking",
    "legendYourPending": "Your pending request",
    "noticeWindowBlocked": "You ask for {hours} hours' notice, so nobody could book this hour in time. Open hours further ahead, or lower your notice period under Private lessons.",
    "jumpToNext": "Next available lesson: {date}",
    "noneAvailableSoon": "No available times in the coming weeks.",
    "emptyResortHint": "No open hours at this resort yet. Click any free hour in the grid to open it.",
    "managedBySchool": "Your school manages this calendar. You can look at it here; changes are made from the school's panel.",
    "legendExternal": "Booked elsewhere",
    "selectHint": "Click a free hour to start; click the next one to make the lesson longer.",
    "clearSelection": "Clear selection",
    "noSelection": "Pick a time on the calendar",
    "noFormatSelection": "Pick a format and a day on the calendar",
    "legendGroup": "Group lesson",
    "legendGroupFull": "Group lesson · full",
    "groupCellTitle": "Group lesson · {taken}/{capacity} seats",
    "groupCellJoinTitle": "Group lesson · {count} seats left · {price} per person",
    "groupCellJoinTitle_one": "Group lesson · {count} seat left · {price} per person",
    "groupCellFullTitle": "Group lesson · no seats left",
    "groupToggle": "Group lesson",
    "groupToggleHint": "Anyone can join until the seats run out; each person pays for their own place. Published immediately, no Save needed.",
    "groupCapacity": "Seats",
    "groupMinStudents": "Minimum to run",
    "groupPrice": "Price per person",
    "groupPriceMin": "Minimum {price}",
    "groupLevel": "Level",
    "groupLanguage": "Lesson language",
    "groupMeetingPoint": "Meeting point",
    "groupStillMissing": "Still needed to publish it: {fields}.",
    "groupMeetingPointNone": "Not set",
    "groupMeetingPointSuggested": "Use a suggested meeting point",
    "groupMeetingPointSet": "Set it",
    "groupMeetingPointChange": "Change",
    "groupMeetingPointSave": "Save meeting point",
    "groupMeetingPointSaved": "Meeting point saved. Everyone booked has been told.",
    "groupMeetingPointHint": "Fixed and the same for every participant.",
    "publishGroup": "Publish class",
    "groupPublished": "Group lesson published",
    "groupCancelled": "Group lesson removed",
    "groupManageTitle": "Group lesson",
    "groupSeatsLabel": "Seats",
    "groupCancelDay": "Cancel this day",
    "groupCancelSeries": "Cancel the series",
    "groupCancelClass": "Cancel the class",
    "groupCancelDayTitle": "Cancel the class on {date}?",
    "groupCancelSeriesTitle": "Cancel the whole series?",
    "groupCancelClassTitle": "Cancel this class?",
    "groupCancelDayScope": "Only this date stops being offered; the rest of the series stays as it is.",
    "groupCancelSeriesScope": "Every remaining date of this series is cancelled, including the coming weeks.",
    "groupCancelClassScope": "The class stops being offered and leaves the calendar.",
    "groupCancelSeats": "{count} seats are sold: every participant is refunded in full and told.",
    "groupCancelSeats_one": "1 seat is sold: it is refunded in full and whoever booked it is told.",
    "groupCancelSeatsNone": "No seats are sold.",
    "groupCancelIrreversible": "This cannot be undone.",
    "groupCancelSeriesPhrase": "CANCEL",
    "groupAssignLabel": "Hand this class to an instructor",
    "groupAssignPlaceholder": "Pick an instructor",
    "groupAssignButton": "Assign",
    "groupAssignHint": "The class and every booked seat move to their calendar.",
    "groupAssignedToast": "Class assigned",
    "groupDisabledNotice": "Group lessons are switched off. Switch them on and set the price per person in step 1, above.",
    "groupPriceFromSettings": "Set in step 1, above.",
    "seatSubtitle": "Click a free hour to open it, or an open one to change its places. Each cell reads booked/places. Times shown in the resort's time zone.",
    "seatCellTitle": "Booked: {taken} of {places}",
    "legendFull": "Full",
    "placesLabel": "Private places",
    "placesHint": "How many lessons you can sell at once in these hours, at this resort.",
    "placesTitle": "Places for this hour",
    "placesNow": "Places: {places} · Booked: {taken}",
    "placesScopeDay": "This day only",
    "placesScopeWeekly": "Every {weekday}",
    "placesScopeDayHint": "Changes this day only; the other weeks stay as they were.",
    "placesScopeWeeklyHint": "Changes these hours every week from this day on; earlier weeks stay as they were.",
    "placesBelowTaken": "Lessons already booked in these hours: {taken}. They stand even if you lower the places; only new ones stop selling.",
    "placesRemove": "Remove these hours",
    "placesApply": "Apply",
    "seatCellGroups": "Group lessons: {n}",
    "hourIntro": "What runs at this hour: private lessons and group lessons, side by side.",
    "hourPrivate": "Private lessons",
    "hourNoPrivate": "No private lessons at this hour.",
    "hourOpenPrivate": "Open private lessons",
    "hourChangePlaces": "Change places",
    "hourGroups": "Group lessons",
    "hourNoGroups": "No group lesson at this hour.",
    "hourManage": "Manage",
    "hourAddGroup": "Add a group lesson",
    "weekdaysLabel": "Days of the week",
    "placesHintWithGroup": "Private lessons at once, on top of the group lesson.",
    "seatOfferLabel": "In these hours",
    "seatOfferPrivate": "Private lessons",
    "seatOfferGroup": "A group lesson only",
    "seatOfferBoth": "Private and a group lesson",
    "seatOfferHintPrivate": "Hours on sale for private lessons, with the places you say. Kept with Save.",
    "seatOfferHintGroup": "The group lesson alone: no private lessons are sold in these hours. Published at once, without Save.",
    "seatOfferHintBoth": "The group lesson goes up at once; the private places are kept with Save.",
    "groupAudience": "Who it's for",
    "groupAges": "Ages (optional)",
    "groupAgesFrom": "From (years)",
    "groupAgesTo": "To (years)",
    "groupAgesHint": "Shown on the lesson. At booking, every student has to be a child.",
    "groupAgesInvalid": "Ages between {min} and {max}; the first no higher than the second.",
    "groupCellChoose": "Group lessons: {n} · pick one",
    "groupChooseTitle": "Pick the lesson",
    "groupChoosePick": "Choose",
    "selectGroupHint": "Click a lesson to pick it; when several run at that hour, you choose which.",
    "selectFormatHint": "Click a price to choose that format on that day: it is a whole lesson, for the whole group.",
    "formatMinDaysWeek": "This week {list} are only sold for several days in a row: pick the first day and they all light up.",
    "formatMinDaysItem": "{format} (at least {days} days)",
    "formatNotSold": "Not sold that day",
    "recurringSince": "Starts on",
    "recurringSinceHint": "Nothing opens before that date, so you can load the season ahead of time.",
    "untilBeforeSince": "The end can't be before the start.",
    "sinceOutOfRange": "Pick a start between today and {date}.",
    "noWeekdayBetween": "None of those days falls between the two dates.",
    "laterSeriesReplaced": "A series of this weekday already starts on {date}. With no end date, or one past it, these places will replace it; end before that date to keep it.",
    "seriesSince": "from {date}",
    "seriesUntil": "until {date}",
    "privateTitle": "Private lessons calendar",
    "groupTitle": "Group lessons calendar",
    "groupSubtitle": "Click an hour to publish a group lesson, or a lesson to manage it. Times in the resort's time zone.",
    "legendPrivateOpen": "Open for private lessons",
    "groupElsewhere": "managed under Group lessons",
    "legendGoogleBusy": "Busy in Google Calendar"
  },
  "languagePicker": {
    "placeholder": "Select languages",
    "search": "Search for a language…",
    "noResults": "No language matches."
  },
  "invoice": {
    "title": "Commission invoice",
    "print": "Print",
    "number": "Number",
    "date": "Date",
    "platformBlock": "Issuer",
    "instructorBlock": "Recipient",
    "colRef": "Reference",
    "colDate": "Date",
    "colSubtotal": "Lesson amount",
    "colFee": "Commission ({percent}%)",
    "colNet": "Instructor net",
    "totals": "Totals",
    "provisionalNote": "Provisional document: the issuer's fiscal details are pending configuration.",
    "footnote": "This document details the platform commission already retained on the lessons included in the withdrawal. It creates no new charge.",
    "notAvailable": "This invoice is not available.",
    "colFeeMixed": "Commission"
  },
  "meetingPoint": {
    "notAgreed": "Meeting point not agreed",
    "proposed": "Meeting point proposed",
    "propose": "Propose meeting point",
    "titleLabel": "Title",
    "areaLabel": "Resort area",
    "instructionsLabel": "Instructions",
    "mapUrlLabel": "Map link (optional)",
    "change": "Change meeting point",
    "viewMap": "Open map",
    "locked": "You can agree the meeting point once the booking is confirmed.",
    "groupPendingCustomer": "The instructor hasn't set the meeting point of this group lesson yet. You'll be told here as soon as they do.",
    "groupPendingInstructor": "This group lesson has no meeting point yet. Set it on the class in your calendar and every participant will get it.",
    "error": "Could not update the meeting point."
  },
  "admin": {
    "overview": "Admin overview",
    "attention": {
      "title": "Waiting for you",
      "none": "Nothing is waiting for you.",
      "instructors": "Instructors to review",
      "schools": "Schools to review",
      "disputes": "Open complaints",
      "moneyAlerts": "Money alerts to review",
      "manualPayouts": "Payouts to send",
      "awaitingFunds": "Withdrawals waiting for funds in Stripe",
      "open": "Open",
      "referrals": "Referral rewards to review",
      "lueiraReviews": "Lueira connections to review"
    },
    "loadError": {
      "body": "This could not be loaded. It may be a passing fault, so try again.",
      "retry": "Try again"
    },
    "instructors": "Instructors",
    "resorts": "Resorts",
    "bookings": "Bookings",
    "colRef": "Ref",
    "instructorFilterPlaceholder": "Search by name, slug, id or status…",
    "noMatches": "No instructors match that search.",
    "copyId": "Copy account id (Clerk)",
    "idCopied": "Account id copied",
    "gmv": "GMV",
    "savedToast": "Saved",
    "approve": "Approve",
    "schools": "Schools",
    "schoolsPending": "{count} pending",
    "schoolsPending_one": "{count} pending",
    "schoolOwner": "Owner",
    "schoolInstructorCount": "Instructors: {n}",
    "schoolWebsite": "Website",
    "noSchools": "No schools yet.",
    "rejectSchoolTitle": "Reject this school?",
    "status": {
      "pending_review": "Pending review",
      "verified": "Verified",
      "rejected": "Rejected"
    },
    "instructorStatus": {
      "draft": "Draft",
      "pending_review": "Pending review",
      "verified": "Verified",
      "rejected": "Rejected",
      "documents_expired": "Documents expired"
    },
    "finances": {
      "title": "Finances",
      "available": "Available",
      "pending": "Pending",
      "onHold": "On hold",
      "paidOut": "Withdrawn",
      "byInstructor": "Balance by instructor",
      "instructor": "Instructor",
      "withdrawals": "Withdrawals",
      "reference": "Stripe reference",
      "empty": "No money movements yet.",
      "commissionTitle": "Alpine Pal commission",
      "commissionEarned": "Earned",
      "commissionAtRisk": "Not settled yet",
      "commissionRefunded": "Refunded",
      "commissionNote": "A refund returns the whole booking, our commission included — so only a delivered lesson counts as earned.",
      "balance": {
        "title": "Stripe balance",
        "canMove": "You can move to your bank up to",
        "available": "Available on Stripe",
        "pending": "Still settling",
        "mustKeep": "Must stay on Stripe",
        "manualToPay": "Of which, manual payouts to send",
        "hint": "What must stay is what is owed to instructors and schools plus what can still be refunded to customers: a refund returns the whole booking, commission included, until that lesson's money is withdrawn. Only the available balance counts; payments still settling will cover what they belong to. When you pay a withdrawal by hand, move that amount to your bank to send it.",
        "unavailable": "Stripe's balance could not be read right now.",
        "waitingTitle": "Withdrawals waiting for funds",
        "waitingHint": "Stripe's available balance does not cover them yet. They are retried every hour and go out as soon as it does. If you add funds to the payments balance on Stripe, press Retry now.",
        "shortfall": "{amount} short on Stripe's available balance",
        "since": "since {date}",
        "attempts": "retries: {n}",
        "retryNow": "Retry now",
        "retried": "Sent: {sent} · still waiting: {waiting}"
      },
      "owedTitle": "Owed to instructors"
    },
    "colInstructor": "Instructor",
    "colStatus": "Status",
    "colChecks": "Checks",
    "colActive": "Active",
    "colActions": "Actions",
    "colResort": "Resort",
    "colRegion": "Region",
    "colInstructors": "Instructors",
    "active": "Active",
    "inactive": "Inactive",
    "verify": "Verify",
    "reject": "Reject",
    "activate": "Activate",
    "deactivate": "Deactivate",
    "refund": "Refund",
    "resortsNote": "Resorts are maintained as static content in src/data/resorts — this view is read-only. Instructors and schools count the profiles a customer can find; lessons delivered, the ones given and not refunded; upcoming, the bookings paid for and still ahead.",
    "viewDocument": "View document",
    "disputes": "Complaints",
    "schoolSuspend": "Suspend",
    "schoolReactivate": "Reactivate",
    "schoolClose": "Close",
    "schoolSuspendedBadge": "Suspended",
    "schoolClosedBadge": "Closed",
    "continue": "Continue",
    "suspendSchoolTitle": "Suspend {name}?",
    "suspendSchoolBody": "Its page stops showing and its lessons without an assigned instructor stop selling. The bookings it already has carry on, and it can keep using its panel and the API. Its managers will be told by bell and email. You can reactivate it whenever you like.",
    "suspendSchoolSureTitle": "Are you completely sure?",
    "suspendSchoolSureBody": "You are about to take {name} off Alpine Pal right now, and its managers will know straight away.",
    "suspendSchoolNow": "Yes, suspend",
    "reactivateSchoolTitle": "Reactivate {name}?",
    "reactivateSchoolBody": "Its page shows again. Its lessons without an assigned instructor are on sale again on the hours it has open. Its managers will be told.",
    "closeSchoolTitle": "Close {name} for good?",
    "closeSchoolBody": "This is what happens: its {roster} instructors leave the roster and stay paused until reviewed ({rosterLessons} lessons of theirs still ahead stay with them); the {unclaimed} profiles it added without an account are closed; its API keys are revoked and its webhooks switched off.",
    "closeSchoolLoading": "Working out what closing it involves…",
    "closeSchoolOwed": "It cannot be closed: the school is still owed {owed}, counting what it can withdraw, what lessons still to be taught will bring and what is on hold. A closed school can no longer be paid. You can suspend it meanwhile and close it once it has been paid everything.",
    "closeSchoolLessonsAhead": "It cannot be closed yet: it has {count} lessons still ahead that only the school can see through (without an assigned instructor, or with instructors it added without an account), and those take place first. Close it once they have passed and it has been paid everything. You can suspend it meanwhile.",
    "closeSchoolLessonsAhead_one": "It cannot be closed yet: it has {count} lesson still ahead that only the school can see through (without an assigned instructor, or with an instructor it added without an account), and it takes place first. Close it once it has passed and it has been paid everything. You can suspend it meanwhile.",
    "closeSchoolSureTitle": "Last confirmation",
    "closeSchoolSureBody": "Closing a school cannot be undone. Type its exact name to confirm.",
    "closeSchoolNow": "Close the school",
    "schoolSuspendedToast": "School suspended",
    "schoolReactivatedToast": "School reactivated",
    "schoolClosedToast": "School closed",
    "review": {
      "title": "To review",
      "hint": "Money alerts that need a person, each with its booking. Mark them reviewed once they are sorted: they go for every administrator.",
      "repeats": "{n} times",
      "settled": "Refunded since",
      "stripeOnly": "This charge only exists in Stripe: refund it from the Stripe dashboard.",
      "retryRefund": "Retry the refund",
      "retryTitle": "Retry the refund of {reference}?",
      "retryBody": "Stripe is asked again to give the customer their money back. If it already went through, nothing is refunded twice.",
      "dismiss": "Mark as reviewed",
      "dismissed": "Marked as reviewed"
    },
    "sweep": {
      "title": "Automatic sweep",
      "ok": "Last complete run {minutes} min ago.",
      "late": "No complete run for {hours} h: lessons are not being closed and refunds are not being retried. Check the snowmatch-tasks worker.",
      "unknown": "No run recorded yet.",
      "failing": "The last {count} runs failed: {error}",
      "failing_one": "The last run failed: {error}",
      "webhooks": "Webhook retries: last run {minutes} min ago.",
      "lastReport": "Last run did:",
      "lastReportEmpty": "nothing to do"
    },
    "backup": {
      "title": "Backups",
      "ok": "Last backup: {date}. One is taken every week and kept for 90 days.",
      "late": "Last backup: {date}. None has been taken for over a week: check the snowmatch-tasks worker.",
      "never": "No backup has succeeded yet: check the snowmatch-tasks worker and its D1_EXPORT_TOKEN.",
      "unknown": "No backup recorded yet.",
      "failing": "Failed attempts in a row: {n}. Last error: {error}"
    },
    "disputeRefund": "Refund the customer",
    "disputeDismiss": "Dismiss",
    "refundConfirmTitle": "Refund this booking?",
    "refundConfirmBody": "{amount} will be refunded in full to the customer for booking {reference}. This cannot be undone.",
    "disputeRefundNoShow": "Refund (instructor no-show)",
    "disputeRefundNoShowConfirmBody": "The full amount goes back to the customer and the booking is recorded as the instructor not showing up. This closes the complaint for good.",
    "disputeRefundConfirmTitle": "Refund the customer?",
    "disputeRefundConfirmBody": "The full amount goes back to the customer and the instructor is not paid. This closes the complaint for good.",
    "disputeDismissConfirmTitle": "Dismiss this complaint?",
    "disputeDismissConfirmBody": "The complaint is set aside and the instructor's payment is released. This closes the complaint for good.",
    "disputeChargebackBadge": "Stripe chargeback",
    "disputeChargebackDismissBody": "Stripe decides the chargeback, not this list: the instructor's payment stays on hold until Stripe rules, and is then released or given back on its own. Dismissing it only takes it off here, and the customer is not told anything.",
    "disputeChargebackRefundBody": "The money has already gone back to the customer through their bank with the chargeback: this accepts it as lost, cancels the instructor's payment and closes the complaint.",
    "rejectConfirmTitle": "Reject this instructor?",
    "rejectConfirmBody": "{name}'s application will be rejected and their profile will not be published.",
    "deactivateConfirmTitle": "Deactivate this instructor?",
    "deactivateConfirmBody": "{name} will disappear from search and cannot receive new bookings until reactivated.",
    "accountClosed": "Account closed",
    "expiredCerts": "{n} with an expired qualification",
    "stripeVerified": "Identity verified by Stripe",
    "stripePending": "Stripe is reviewing their details",
    "stripeNone": "No payout account yet",
    "payoutViaSchool": "Paid through their school",
    "payoutManual": "Paid by hand: {provider}",
    "filterAllCountries": "Any country",
    "filterAllStaffing": "With or without instructors",
    "filterWithInstructors": "With instructors",
    "filterWithoutInstructors": "Without instructors",
    "filterAllBookingStatuses": "Any booking status",
    "filterAllPaymentStatuses": "Any payment status",
    "filterAllResorts": "Any resort",
    "filterDateFrom": "From",
    "filterDateTo": "To",
    "bookingFilterPlaceholder": "Search by reference, instructor or resort…",
    "noResortMatches": "No resort matches those filters",
    "noBookingMatches": "No booking matches those filters",
    "filterAllStatuses": "Any status",
    "filterPending": "Pending review",
    "filterVerified": "Verified",
    "filterRejected": "Rejected",
    "filterAllKinds": "Any profile type",
    "filterAllStates": "Any state",
    "filterExpiredCert": "Expired qualification",
    "filterAllSchools": "Independent or with a school",
    "filterIndependent": "Independent",
    "filterAnySchool": "With a school (any)",
    "schoolOf": "School: {name}",
    "openInStripe": "Open in Stripe",
    "heardFrom": "Found us via {source}",
    "heardFromSummary": "How they found us: {list}",
    "heardFromUnknown": "not asked",
    "joinedOn": "Joined {date}",
    "lessonsCount": "Lessons delivered: {n}",
    "sort": {
      "label": "Sort by",
      "name": "Name",
      "newest": "Newest sign-ups first",
      "oldest": "Oldest sign-ups first",
      "lessons": "Most lessons delivered",
      "instructors": "Most instructors",
      "schools": "Most schools",
      "upcoming": "Most upcoming bookings",
      "country": "Country and name",
      "pendingFirst": "Pending review first"
    },
    "schoolState": {
      "pending": "Pending review",
      "published": "Published",
      "suspended": "Suspended",
      "rejected": "Rejected",
      "closed": "Closed"
    },
    "schoolFilterPlaceholder": "Search by name, email or country…",
    "noSchoolMatches": "No school matches those filters",
    "colSchools": "Schools",
    "colLessons": "Lessons delivered",
    "colUpcoming": "Upcoming",
    "payouts": {
      "title": "Payouts to send",
      "hint": "Instructors in countries Stripe cannot reach. Send them the money on their platform, then record it here.",
      "requested": "Requested on {date}",
      "referencePlaceholder": "Transaction ref.",
      "markPaid": "Mark as paid",
      "marked": "Payment recorded",
      "release": "I could not pay it",
      "released": "Balance returned and payee notified",
      "releaseConfirmTitle": "Return the balance?",
      "reasonLabel": "Reason",
      "reason": {
        "invalid_details": "Payout details not valid",
        "rejected": "The account refused the payment",
        "other": "Other (explain it in the note)"
      },
      "noteLabel": "Note for the payee",
      "notePlaceholder": "Optional. They will read it just as you write it.",
      "notePlaceholderRequired": "Required with “Other”: say what happened.",
      "releaseConfirmBody": "The amount goes back to their available balance, and they are told by bell and email, with the reason you pick, so they can fix their details and ask again."
    },
    "schoolInstructorsButton": "Instructors",
    "manageSchoolButton": "Manage",
    "manageSchoolFailed": "This school's panel could not be opened.",
    "readOnlyBanner": "Read-only view: you can see the whole admin panel, open Manage and follow every link, but not change anything.",
    "manageInstructorButton": "Manage",
    "manageInstructorFailed": "This instructor's panel could not be opened.",
    "schoolInstructorsTitle": "{name}'s instructors",
    "schoolInstructorsIntro": "What you do here you do for the school, as in its own panel: invite by email, or add instructors without an account from the details it sends you.",
    "unclaimedBadge": "No account · added by its school",
    "top": {
      "badge": "TOP · {percent}%",
      "since": "TOP since {date} · by {by}",
      "switchOn": "Make TOP ({percent}%)",
      "switchOff": "Remove TOP",
      "confirmOnTitle": "Make {name} TOP?",
      "confirmOnBodySchool": "Its new lessons — all its instructors' and those without a named instructor — will pay {percent}% commission instead of {standard}% and move up half a star in the “Recommended” order. Lessons already sold do not change, and nothing shows on its profile. Before the first TOP: the new terms emailed to every instructor and school at least 15 days earlier, and the school's written agreement to the commission.",
      "confirmOnBodyInstructor": "Their new lessons will pay {percent}% commission instead of {standard}% and move up half a star in the “Recommended” order. Lessons already sold do not change, and nothing shows on their profile. Before the first TOP: the new terms emailed to every instructor and school at least 15 days earlier, and the instructor's written agreement to the commission.",
      "confirmOffTitle": "Remove TOP from {name}?",
      "confirmOffBody": "Their new lessons go back to {standard}% commission and the normal order. Lessons sold as TOP keep their commission.",
      "onToast": "TOP switched on",
      "offToast": "TOP switched off",
      "bySchool": "TOP through their school",
      "filterAll": "TOP or not",
      "filterOnly": "TOP only"
    },
    "referredBy": "Code from {name}",
    "salesRep": "Sales partner: {name}",
    "sales": {
      "title": "Sales partners",
      "intro": "Each partner has a link with their code. When a school or an independent instructor arrives through it and signs up, they are credited to that partner without being shown anything. With advertising cookies accepted the link counts for {days} days; without them, only if they sign up in that same visit. Add by hand whatever the link misses.",
      "new": "New partner",
      "name": "Name",
      "code": "Code",
      "codeHint": "Letters, digits and dashes, no spaces. It is what the link carries, and it cannot be changed later.",
      "email": "Email (optional)",
      "note": "Note (optional)",
      "create": "Create partner",
      "created": "Partner created",
      "empty": "No sales partners yet.",
      "inactive": "Switched off",
      "deactivate": "Switch off",
      "activate": "Switch on",
      "deactivated": "Switched off: their link stops counting from now on",
      "activated": "Switched on: their link counts again",
      "copy": "Copy",
      "copied": "Link copied",
      "linkHint": "Works on any page of the site: just add {param} at the end of the address.",
      "funnelSchools": "Schools: {total} · approved: {approved} · can be paid: {payable} · teaching: {teaching}",
      "funnelInstructors": "Instructors: {total} · approved: {approved} · can be paid: {payable} · teaching: {teaching}",
      "totals": "Sales of lessons given: {sales} · Alpine Pal commission: {commission}",
      "noSales": "No sales yet",
      "kind": {
        "school": "School",
        "instructor": "Instructor"
      },
      "source": {
        "link": "Through their link",
        "admin": "Added by hand"
      },
      "since": "since {date}",
      "closed": "Account closed",
      "payable": "Can be paid",
      "notPayable": "Cannot be paid yet",
      "lessons": "Lessons given: {n} (the first on {date})",
      "noLessons": "No lessons given",
      "entrySales": "Sales: {sales} · commission: {commission}",
      "remove": "Remove",
      "removed": "Removed from this partner",
      "assignTitle": "Add by hand",
      "assignPlaceholder": "Search for a school or an independent instructor",
      "assign": "Add",
      "assigned": "Added to this partner",
      "noMatches": "Nobody without a partner goes by that name"
    },
    "referrals": {
      "title": "Instructor referrals",
      "summary": "{toReview} to review · {total} in total",
      "pair": "{invitee} · code {code} from {referrer}",
      "since": "since {date}",
      "firstLesson": "First lesson: #{ref}, {date} · {status} · payment {payment}",
      "disputed": "Disputed",
      "note": "Reason: {note}",
      "grant": "{side}: {used} of {cap} at {percent}% (instead of {base}%), until {date}",
      "revoked": "Withdrawn",
      "revoke": "Withdraw",
      "approve": "Approve reward",
      "decline": "Decline",
      "notePlaceholder": "Reason (optional)",
      "approvedToast": "Reward approved",
      "declinedToast": "Reward declined",
      "revokedToast": "Discount withdrawn",
      "revokeConfirmTitle": "Withdraw what is left of this discount?",
      "revokeConfirmBody": "Bookings already made keep their commission; the next ones pay the normal one.",
      "showAll": "See all ({n})",
      "side": {
        "invitee": "Newcomer's discount",
        "referrer": "Referrer's discount"
      },
      "flag": {
        "same_payout": "Same IBAN or payout email",
        "same_bank": "Same bank account in Stripe",
        "same_email": "Same email address",
        "duplicate_person": "Same name and birth date as another instructor",
        "cap_reached": "Yearly limit reached"
      }
    }
  },
  "notif": {
    "empty": "No notifications yet.",
    "newBookingRequest": "New booking request",
    "bookingAccepted": "Booking accepted",
    "bookingConfirmed": "Booking confirmed",
    "bookingRejected": "Booking rejected",
    "bookingExpired": "Booking expired",
    "timeProposed": "New time proposed",
    "newTimeAccepted": "New time accepted",
    "newTimeDeclined": "New time declined",
    "meetingPointProposed": "Meeting point proposed",
    "meetingPointConfirmed": "Meeting point confirmed",
    "customerNoShow": "Recorded as customer no-show",
    "refundIssued": "Refund issued",
    "newMessage": "New message",
    "newApplication": "New instructor application",
    "newSchoolApplication": "New school application",
    "schoolApproved": "Your school is approved",
    "schoolRejected": "Your school application was not approved",
    "invitationAccepted": "A school invitation was accepted",
    "instructorLeftSchool": "An instructor left a school",
    "schoolOwnerDeleted": "A school's owner deleted their account",
    "schoolOwnerDeletedOwed": "The owner of a school with lessons still ahead or money still owed deleted their account: the school is suspended, not closed",
    "schoolAdminJoined": "A new administrator joined the school",
    "schoolAdminRemoved": "You were removed as a school administrator",
    "schoolCalendarUnlinked": "The school's Google Calendar was disconnected: it was linked through someone who no longer manages the school. Link it again from Connections.",
    "removedFromSchool": "Your school removed you from its roster",
    "instructorNowCertified": "Instructor now claims a qualification",
    "instructorNowCompanion": "Instructor switched to riding companion",
    "instructorCredentialsChanged": "Instructor changed verified certifications",
    "applicationApproved": "Your instructor profile is verified",
    "applicationRejected": "Instructor application not approved",
    "lessonConfirmed": "Lesson confirmed",
    "lessonAutoConfirmed": "Lesson confirmed automatically",
    "disputeOpened": "A complaint was opened",
    "disputeRefunded": "Complaint resolved: refunded",
    "disputeDismissed": "Complaint resolved",
    "refundNeedsReview": "Refund needs manual review",
    "schoolSuspended": "Your school is suspended for now",
    "schoolReactivated": "Your school is published again",
    "schoolClosed": "Your school has been closed",
    "schoolClosedForInstructor": "Your school has closed on Alpine Pal",
    "manualPayoutFailed": "We could not send your payment",
    "sweepStalled": "The automatic sweep has stopped",
    "sweepRecovered": "The automatic sweep is running again",
    "backupProblem": "The database backups are failing",
    "chargebackWon": "The bank ruled for the lesson: payment released",
    "chargebackSettled": "A chargeback was ruled on and settled",
    "reviewInvite": "Rate your lesson",
    "paymentMismatch": "Charged amount differs from expected",
    "bookingCancelled": "Booking cancelled by the customer",
    "bookingCancelledByInstructor": "The instructor cancelled your lesson",
    "groupClassBelowMinimum": "A group lesson was called off: not enough participants",
    "bookingAcceptedBySchool": "Your school accepted a booking for you",
    "bookingRejectedBySchool": "Your school rejected a booking request",
    "bookingCancelledBySchool": "Your school cancelled one of your lessons",
    "bookingCancelledBySchoolCustomer": "The ski school cancelled your lesson",
    "bookingAutoConfirmed": "New lesson booked and confirmed automatically",
    "managedBySchool": "Your school now manages your calendar and your requests",
    "managedByYourself": "You manage your own calendar and requests again",
    "webhookDisabled": "A webhook endpoint was switched off after repeated failures",
    "lessonReminder": "Your lesson is tomorrow",
    "meetingPointPending": "Your lesson is tomorrow: agree the meeting point",
    "classMeetingPointPending": "Your group lesson is tomorrow: set its meeting point in your calendar",
    "lessonReminderToday": "Your lesson is today",
    "meetingPointPendingToday": "Your lesson is today: agree the meeting point",
    "classMeetingPointPendingToday": "Your group lesson is today: set its meeting point in your calendar",
    "withdrawalPaid": "Withdrawal completed",
    "withdrawalFailed": "Withdrawal failed",
    "withdrawalAwaitingFunds": "A withdrawal is waiting for funds on Stripe",
    "transferReversed": "Transfer reversed in Stripe",
    "instructorClosedAccount": "Instructor closed their account",
    "accountDeletedInClerk": "Account deleted in Clerk, needs a look",
    "instructorReapplied": "Instructor asked for a new review",
    "manualPayoutDue": "A payout needs sending by hand",
    "payoutMethodMissing": "Tell us where to send your balance",
    "payoutsReady": "You can withdraw your balance now",
    "payoutsReadyNeedsFiscal": "You can withdraw your balance as soon as you fill in your tax details under Invoices",
    "payoutsBlocked": "Your payout account needs attention",
    "connectUnfinished": "Finish setting up payouts to withdraw",
    "bankRejectedPayout": "Your bank rejected the deposit: check your details",
    "joinedSchool": "You are now part of a school",
    "lessonAssigned": "Your school assigned you a lesson",
    "instructorAssigned": "Your lesson now has an instructor",
    "unclaimedProfileAdded": "A school added an instructor without an account",
    "profileClaimed": "An instructor has claimed their profile",
    "profileClaimedYours": "Your profile is yours now",
    "equipmentBooked": "Equipment rented with a lesson",
    "calendarDisconnected": "Your Google Calendar is no longer receiving lessons",
    "referralSignedUp": "Someone signed up with your code",
    "referralApproved": "We approved someone you invited",
    "referralRewarded": "You earned a lower commission",
    "referralToReview": "Referral reward to review",
    "lueiraDisconnected": "Lueira no longer accepts your school's key",
    "lueiraClash": "Lueira sold a place that was already sold on Alpine Pal",
    "lueiraOursCancelled": "A lesson sold on Alpine Pal was cancelled in Lueira: cancel it here too so the customer gets their money back",
    "lueiraOrderRefused": "A lesson paid on Alpine Pal could not be added to your Lueira",
    "lueiraReview": "A school has sent its Lueira key: review the connection",
    "lueiraApproved": "Your Lueira connection is ready",
    "lueiraMissingScope": "Your Lueira key is missing a permission",
    "lueiraOrderUnsure": "We don't know whether a paid lesson reached your Lueira"
  },
  "photo": {
    "change": "Change photo",
    "uploading": "Uploading…",
    "uploaded": "Photo updated",
    "hint": "JPG, PNG or WebP. We resize it for you."
  },
  "photos": {
    "label": "Photos of you (optional)",
    "hint": "Up to 3. On the snow, skiing, with your face visible works best — profiles with photos get more enquiries.",
    "add": "Add",
    "addFirst": "Add photos",
    "remove": "Remove photo",
    "main": "Main",
    "moveEarlier": "Move earlier",
    "moveLater": "Move later",
    "tooLarge": "That image is too heavy. Maximum {mb} MB per photo.",
    "sectionTitle": "Photos",
    "view": "View photo {n}",
    "previous": "Previous photo",
    "next": "Next photo",
    "close": "Close",
    "counter": "{n} of {total}"
  },
  "payout": {
    "title": "How you get paid",
    "hint": "Stripe cannot send money to your country yet, so we pay your withdrawals by hand. Tell us where.",
    "provider": "Platform",
    "paypal": "PayPal",
    "payoneer": "Payoneer",
    "bank_transfer": "Bank transfer",
    "email": "Account email",
    "emailPlaceholder": "you@email.com",
    "iban": "IBAN",
    "accountHolder": "Account holder",
    "manualNotice": "We store no bank details. When you request a withdrawal we review it and send the money; it takes longer than an automatic transfer, and we email you the moment it leaves.",
    "bankNotice": "We send each withdrawal by hand as a bank transfer to this IBAN. It works best for European (SEPA) accounts; transfers elsewhere can take longer or carry bank fees.",
    "saved": "Payout method saved",
    "clear": "Remove"
  },
  "profileEdit": {
    "certName": "Certification",
    "certOrg": "Organisation",
    "certYear": "Year",
    "addCert": "Add",
    "removeCertTitle": "Remove this certification?",
    "removeCertBody": "{name} will no longer appear on your profile. If you need it again, you will have to add it back with its document.",
    "removeCertConfirm": "Remove",
    "certStillMissing": "To add it, you still need: {fields}.",
    "removeCertLastProof": "You cannot remove it: it is the only one that proves your qualification at your resorts. Add another one first.",
    "kindTitle": "How you offer yourself",
    "kindCurrent": "what your profile says today",
    "kindUpgradeBody": "Got your qualification? Add it here and your profile will show you as a qualified instructor. It reads as declared until we check it — you keep taking bookings meanwhile.",
    "kindUpgrade": "I am now a qualified instructor",
    "kindDowngradeBody": "You can go back to offering yourself as a riding companion. Your qualification stays on file, but the profile stops claiming it.",
    "kindDowngrade": "Switch to riding companion"
  },
  "auth": {
    "notConfiguredTitle": "Sign-in is not available yet",
    "notConfiguredBody": "Accounts are almost ready. Please check back soon.",
    "notInstructor": "This area is for instructors. Apply to become one and it will unlock once you are approved."
  },
  "content": {
    "reviewed": "Last reviewed {date}",
    "onThisPage": "On this page",
    "eyebrowAbout": "Who we are",
    "eyebrowSafety": "Before you book",
    "eyebrowPricing": "One commission, nothing else",
    "eyebrowContact": "We read every message",
    "eyebrowFaq": "Answers, not sales copy",
    "eyebrowHowItWorks": "Three steps",
    "eyebrowBecomeInstructor": "Teach on your own terms"
  },
  "contact": {
    "emailLabel": "Contact email",
    "emailHint": "Write to this address from whatever mail you normally use. If your question is a general one, it may already be answered in the"
  },
  "apiDocs": {
    "eyebrow": "For ski schools",
    "contents": "On this page",
    "copy": "Copy",
    "copied": "Copied"
  },
  "footer": {
    "product": "Product",
    "howItWorks": "How it works",
    "becomeInstructor": "Become an instructor",
    "forSchools": "For ski schools",
    "apiForSchools": "API for ski schools",
    "safety": "Safety and trust",
    "pricing": "Pricing and fees",
    "company": "Company",
    "about": "About Alpine Pal",
    "contact": "Contact",
    "faq": "FAQ",
    "legal": "Legal",
    "terms": "Terms of service",
    "privacy": "Privacy policy",
    "cookies": "Cookie policy",
    "instagram": "Alpine Pal on Instagram",
    "photoCredits": "Photo credits",
    "rights": "All rights reserved."
  },
  "school": {
    "eyebrow": "For ski schools",
    "ctaTitle": "Register your ski school",
    "ctaBody": "Registering is free and there is no monthly fee. Create an account to register your school; we review every school by hand before it goes live.",
    "ctaButton": "Create an account",
    "instructorCannotRegister": "This account already has an instructor profile. A school is managed from its own account — sign up with a different email to register one.",
    "ctaInstructorLink": "Are you an independent instructor?",
    "ctaInstructorLinkCta": "Apply here",
    "formTitle": "Register your school",
    "formIntro": "Tell us who you are and where you teach. Registering is free and commits you to nothing.",
    "nameLabel": "School name",
    "countryLabel": "Country",
    "countryPlaceholder": "Choose a country",
    "contactEmailLabel": "Contact email",
    "phoneLabel": "Phone (optional)",
    "phonePrefixLabel": "Country code",
    "websiteLabel": "Website (optional)",
    "descriptionLabel": "About the school",
    "descriptionPlaceholder": "What you teach, where, and since when. This will appear on your public page.",
    "submitButton": "Send application",
    "descriptionMin": "At least {min} characters ({count}/{min}).",
    "descriptionOk": "This will appear on your public page.",
    "missingName": "Give the school a name",
    "missingCountry": "Choose a country",
    "missingEmail": "Add a contact email",
    "heardFromLabel": "How did you hear about Alpine Pal?",
    "missingHeardFrom": "Tell us how you heard about Alpine Pal",
    "missingDescription": "Write at least {min} characters about the school",
    "reviewNote": "We usually answer within one working day.",
    "submitted": "Application sent — we will email you when it is reviewed.",
    "statusPending": "Your school is waiting for review. We will email you as soon as it is approved.",
    "statusVerified": "Your school is approved and live.",
    "statusRejected": "Your school application was not approved. Write to us if you can document the school's authorisation.",
    "goToDashboard": "Go to your dashboard",
    "badgeVerified": "Verified",
    "imagesTitle": "Public page images",
    "logoLabel": "School logo",
    "logoHint": "Shown beside your name on your public page. Square, JPG/PNG/WebP.",
    "coverLabel": "Cover photo",
    "coverHint": "The large photo that opens your public page.",
    "coverHintDefault": "None uploaded yet — the default Alpine Pal photo is shown.",
    "galleryLabel": "Photo gallery",
    "galleryHint": "Up to {max} photos, shown under your description on your public page: lessons, groups, your instructors, the resort. Use the arrows to change the order.",
    "faqTitle": "Frequent questions",
    "pageContact": "Contact",
    "pageInstructorsTitle": "Instructors at {school}",
    "pageNoInstructors": "No instructors published yet.",
    "unassigned": {
      "title": "Lessons without an assigned instructor",
      "intro": "{school} sells these lessons without naming the teacher: book and pay, and the school assigns an instructor from its team, whom you meet at the meeting point. Any questions go to the school in the chat.",
      "places": "The school publishes how many lessons it can teach at once: an hour is offered while it has a place left.",
      "reviews": "What customers say about the school"
    },
    "booking": {
      "title": "Book a lesson with {school}",
      "who": "Who teaches",
      "schoolOption": "The school picks the instructor",
      "instructorNote": "Booking {name} here or from their own profile is the same lesson at the same price.",
      "show": "Show availability",
      "hide": "Hide availability",
      "reviewsOf": "Reviews of {name}"
    },
    "groupClasses": {
      "title": "Upcoming group lessons",
      "intro": "A seat in a group at a fixed price per person. Pick one to see it on the calendar and book your seat.",
      "previous": "Previous lessons",
      "next": "More lessons"
    },
    "instructorBadge": "School",
    "resortsTitle": "Resorts",
    "resortsLabel": "Resorts where you work",
    "resortsHint": "Tick every resort your school works at. Lessons without an assigned instructor can only be published there.",
    "missingResorts": "pick at least one resort",
    "point1": "Sell private lessons without naming the instructor, group lessons by the seat and your instructors' own hours.",
    "point2": "We review your school by hand before anything goes live.",
    "point3": "90% of every lesson lands in the school's balance, with an invoice per withdrawal."
  },
  "invitation": {
    "title": "{school} invites you to teach",
    "body": "This invitation was sent to {email}. Create an account with that address — or sign in to one that has it verified — and complete your instructor profile.",
    "adminTitle": "{school} invites you to manage its account",
    "adminBody": "This invitation was sent to {email}. Create an account with that address — or sign in to one that has it verified — and accept to start managing the school.",
    "adminExplain": "You will manage the school's profile, its instructors and their rates, and its earnings. Only the school's creator can add or remove administrators.",
    "adminAccept": "Accept the invitation",
    "adminCannotAccept": "This account already has a role, so it cannot manage a school. Sign in with the invited email's account instead.",
    "invalid": "This invitation link is not valid.",
    "expired": "This invitation has expired. Ask the school to send it again.",
    "revoked": "This invitation was withdrawn by the school.",
    "accepted": "This invitation has already been used.",
    "roleCannotAccept": "This account already has a role, so it cannot accept an instructor invitation. Sign in with the invited email's account instead.",
    "join": {
      "title": "Join {school} with your existing profile",
      "sentTo": "This invitation was sent to {email}.",
      "intro": "Your profile, reviews and photos stay exactly as they are. What changes:",
      "rate": "Your hourly rate becomes {rate}/h",
      "extraRate": "plus {rate} per extra student",
      "formats": "You will sell with {school}'s formats, seasons and prices",
      "changeRates": "Your rates are set by the school from now on.",
      "changeCalendar": "The school runs your calendar, on its open hours: they replace yours.",
      "changeEarnings": "From now on the money from your lessons is collected by the school.",
      "changeBadge": "The school vouches for your profile.",
      "changeLeave": "If you leave the school later, your profile is paused until we review it again.",
      "pendingBecomesVerified": "Your profile is still under review. Joining verifies it: the school is the review.",
      "button": "Join {school}",
      "confirmTitle": "Join {school}?",
      "confirmBody": "From now on the school sets your rates, runs your calendar and collects the money from your lessons. Your profile and everything on it stay yours.",
      "confirm": "Yes, join the school",
      "done": "You now teach for {school}.",
      "blocked": {
        "closed": "This account is closed.",
        "noProfile": "This account has no instructor profile yet.",
        "currencyMismatch": "Your profile is priced in {mine} and the school works in {theirs}. A profile's currency cannot be changed, so this invitation cannot be accepted with this profile.",
        "alreadyInSchool": "You already teach for a school. Ask that school to remove you from its roster before accepting another invitation.",
        "rejected": "Your profile was not approved. Ask for it to be reviewed again before joining a school.",
        "rejectedLink": "Request a new review",
        "notCertified": "Only qualified instructors can join a school. Change your profile to qualified instructor first.",
        "notCertifiedLink": "Update my profile",
        "outstandingBalance": "You still have {amount} in your own balance. Withdraw it, and wait until every lesson already paid is settled, before joining a school.",
        "outstandingBalanceLink": "Go to earnings"
      }
    },
    "claim": {
      "title": "{school} has created your instructor profile",
      "body": "To make it yours, sign in or create your account with the email this link was sent to ({email}).",
      "sentTo": "Link sent to {email}.",
      "intro": "This is the profile {school} published under your name. Claim it and it is yours: you will be able to edit it and talk to your students.",
      "keepsRates": "You stay with {school}: the school sets your rates.",
      "keepsCalendar": "{school} keeps running your calendar and your requests until it hands them over to you.",
      "keepsMoney": "{school} collects the money from your lessons, as it does now.",
      "takesAlong": "If you ever leave the school, the profile goes with you, reviews included.",
      "viewProfile": "See {name}'s profile",
      "button": "Claim my profile",
      "done": "The profile is yours now",
      "blocked": {
        "hasProfile": "This account already has an instructor profile, so it cannot claim another one. Ask {school} for an invitation by email: you will join with your own profile, reviews included, and the school will remove the one it created.",
        "schoolPaused": "{school} is not published on Alpine Pal right now. You will be able to claim the profile once it is back.",
        "managesSchool": "This account manages a school, and a school account cannot be an instructor. Sign in with another account to claim the profile."
      },
      "acceptResponsibility": "I confirm that holding a valid qualification, licence and insurance for the resorts on this profile is my responsibility, that what the profile says about me is true, and that I accept the"
    }
  },
  "schoolDash": {
    "title": "School dashboard",
    "notManaging": "You are not managing any school.",
    "notManagingGo": "Go to the schools",
    "verifiedNote": "Your school is approved. Invite instructors and keep your page up to date.",
    "imagesNudgeBoth": "Your public page has no logo or cover photo yet",
    "imagesNudgeLogo": "Your public page has no logo yet",
    "imagesNudgeCover": "Your public page has no cover photo yet",
    "imagesNudgeBody": "The header of your school's page is the first thing customers see.",
    "imagesNudgeCta": "Upload images",
    "instructorsHint": "Invite instructors or add them without email, set their rates and manage your roster.",
    "earningsHint": "Balance, withdrawals and how the school gets paid.",
    "bookingsHint": "Requests, upcoming lessons and history across your instructors.",
    "requestsSection": "Requests",
    "upcomingSection": "Upcoming lessons",
    "historySection": "History",
    "noBookings": "Nothing here yet.",
    "instructorAnswers": "The instructor answers this one.",
    "openBooking": "Open",
    "unassignedRow": "Lesson without an assigned instructor",
    "messagesHint": "Chats with the customers of your lessons without an assigned instructor and of your instructors without an account.",
    "messagesNote": "The chats where your school writes: lessons without an assigned instructor, and instructors you added without an account. Instructors with an account chat for themselves.",
    "acting": {
      "banner": "You are managing {name} as Alpine Pal.",
      "exit": "Exit",
      "moneyReadOnly": "Payouts and withdrawals belong to the school: you can see them here, but not change them.",
      "apiReadOnly": "API keys, webhooks and their secrets belong to the school: you can see the setup here, but not change it.",
      "calendarNotice": "Google Calendar belongs to the school: it is not managed from here.",
      "messagesNotice": "You see these conversations as Alpine Pal, not as the school."
    },
    "cancelLesson": "Cancel lesson",
    "cancelLessonTitle": "Cancel this lesson?",
    "cancelLessonBody": "The customer is refunded in full and told the school cancelled. This cannot be undone.",
    "managementLabel": "Managed by",
    "managedByInstructor": "The instructor",
    "managedBySchool": "The school",
    "calendarLink": "Calendar",
    "calendarManagedByInstructor": "This instructor manages their own calendar. To edit it here, set them to \"managed by the school\" on the roster.",
    "calendarPickPlaceholder": "Choose an instructor",
    "assignInstructor": "Assign",
    "assignedToast": "Lesson assigned. We've let the instructor and the customer know.",
    "assignNobody": "No active instructor on your roster teaches at this resort.",
    "assignGroupFromCalendar": "Group lesson: assign its teacher to the whole class from the calendar.",
    "calendarUnassignedOption": "Lessons without an assigned instructor",
    "calendarUnavailable": "That calendar is not available: the instructor is no longer on your roster.",
    "api": {
      "title": "Connect your booking system",
      "intro": "Your channel manager or your own software can read and write your instructors' calendars, receive bookings the moment they are paid, and answer requests. Everything goes through the API below with one of your keys.",
      "baseUrl": "Base URL",
      "keysTitle": "API keys",
      "keysIntroOwner": "A key gives full access to your roster's calendars and bookings. Create one per system you connect, and revoke it the day you stop using it.",
      "keysIntro": "Only the school's creator can create or revoke keys. Ask them if you need one.",
      "keyName": "What is this key for?",
      "keyNamePlaceholder": "e.g. My booking system",
      "createKey": "Create key",
      "keyCreatedTitle": "Your new API key",
      "keyCreatedBody": "Copy it now and store it somewhere safe. For your security we keep only a fingerprint of it, so it cannot be shown again.",
      "copy": "Copy",
      "copied": "Copied",
      "keyCreated": "Created {date}",
      "keyLastUsed": "last used {date}",
      "keyNeverUsed": "never used",
      "keyRevoked": "Revoked",
      "revokeKey": "Revoke",
      "revokeKeyTitle": "Revoke this key?",
      "revokeKeyBody": "Anything still using \"{name}\" will stop working immediately. This cannot be undone.",
      "keyRevokedToast": "Key revoked",
      "noKeys": "No keys yet.",
      "docsLink": "Read the API documentation",
      "webhooksTitle": "Webhooks",
      "webhooksIntro": "We POST every booking event to the URLs you register, signed with the endpoint's secret. If an endpoint keeps failing we retry for about three days and then switch it off.",
      "webhookUrl": "URL (https)",
      "webhookDescription": "Description",
      "webhookEvents": "Events",
      "allEvents": "All events",
      "addWebhook": "Add endpoint",
      "noWebhooks": "No endpoints yet.",
      "webhookSaved": "Saved",
      "webhookActive": "Active",
      "webhookDisabled": "Off",
      "webhookFailing": "{count} failures in a row",
      "webhookFailing_one": "{count} failure",
      "lastDelivery": "last delivery {date}",
      "sendTest": "Send a test",
      "testSent": "Test delivered: your endpoint answered with a success code.",
      "testFailed": "The test did not get through ({error}).",
      "revealSecret": "Show secret",
      "hideSecret": "Hide secret",
      "rotateSecret": "Rotate secret",
      "rotateSecretTitle": "Issue a new secret?",
      "rotateSecretBody": "The current secret stops working immediately. Update your system with the new one before the next event.",
      "deleteWebhook": "Remove",
      "deleteWebhookTitle": "Remove this endpoint?",
      "deleteWebhookBody": "It stops receiving events and its delivery log is deleted. This cannot be undone.",
      "deliveries": "Deliveries",
      "noDeliveries": "Nothing delivered yet.",
      "sandbox": {
        "title": "Sandbox",
        "intro": "A test copy of your school with made-up instructors, where your system can publish calendars, receive bookings by webhook and answer them without money or email. Test keys start with ap_test_ and only reach the copy; the first one creates it.",
        "createKey": "Create test key",
        "keyNamePlaceholder": "e.g. My booking system (tests)",
        "empty": "No sandbox yet: create a test key to set it up.",
        "instructorsTitle": "What is inside",
        "instantOn": "confirms instantly",
        "instantOff": "answers requests by hand",
        "seatLabel": "Lessons without an assigned instructor",
        "customerNote": "POST /sandbox/bookings stands in for the customer: it creates a paid booking on any of these ids. Nothing in the sandbox is ever public.",
        "reset": "Empty the sandbox",
        "resetTitle": "Empty the sandbox?",
        "resetBody": "Every booking and chat in the test copy is deleted. Keys, webhooks and calendars stay.",
        "resetToast": "Sandbox emptied: {count} bookings deleted",
        "resetToast_one": "Sandbox emptied: {count} booking deleted"
      },
      "deliveryStatus": {
        "pending": "Pending",
        "delivered": "Delivered",
        "failed": "Failed"
      }
    },
    "savedToast": "Saved",
    "inviteTitle": "Invite an instructor",
    "inviteIntro": "They get an email, complete their own profile, and go live as one of your school's instructors. You set the prices: with your formats or by the hour. You run their calendar, on your school's open hours.",
    "inviteVouches": "No qualification is asked for: by inviting this person you answer for them meeting what your canton requires to teach on the pistes. Without a qualification of their own they cannot offer off-piste lessons.",
    "inviteEmailLabel": "Email",
    "inviteRateLabel": "Rate/h",
    "inviteExtraLabel": "Extra/student",
    "inviteModeLabel": "How they will sell",
    "inviteModeFormats": "With the school's formats",
    "inviteModeHours": "By the hour",
    "inviteModeFormatsHint": "They will sell with the formats, seasons and prices of your lessons without an assigned instructor, with no hourly rate. When you change yours, theirs change too.",
    "inviteModeFormatsNone": "You have no formats yet: set them under Private lessons, on the lessons without an assigned instructor. Until then their lessons cannot be booked; once you save them, they appear on their own.",
    "schoolFormatsShort": "School's formats",
    "ownFormatsShort": "Own formats",
    "schoolHoursShort": "on the school's hours",
    "inviteButton": "Invite",
    "inviteSent": "Invitation sent.",
    "invitationsTitle": "Invitations",
    "invitationStatus": {
      "pending": "Pending",
      "accepted": "Accepted",
      "revoked": "Revoked",
      "expired": "Expired"
    },
    "expiresOn": "expires {date}",
    "resend": "Resend",
    "revoke": "Revoke",
    "rosterTitle": "Your instructors",
    "noInstructors": "Nobody yet — invite your first instructor above.",
    "instructorClosed": "Account closed",
    "instructorActive": "{count} lessons taught",
    "instructorActive_one": "{count} lesson taught",
    "instructorInactive": "Not published",
    "remove": "Remove",
    "removeTitle": "Remove from the school?",
    "removeBody": "{name} will be unpublished until we review their profile. Money already earned stays with the school.",
    "removedToast": "Removed from the roster.",
    "adminsTitle": "Administrators",
    "adminsIntro": "Everyone who can manage this school.",
    "adminsIntroOwner": "Everyone who can manage this school. Administrators can do everything except add or remove administrators.",
    "adminInviteLabel": "Invite an administrator by email",
    "adminInviteButton": "Invite",
    "adminInviteSent": "Invitation sent.",
    "adminCreatorBadge": "Creator",
    "adminPendingTitle": "Pending invitations",
    "adminRemove": "Remove",
    "adminRemoveTitle": "Remove this administrator?",
    "adminRemoveBody": "{name} will lose access to the school immediately. Their account stays; only the access goes.",
    "adminRemovedToast": "Administrator removed.",
    "unassigned": {
      "title": "Lessons without an assigned instructor",
      "notOnSale": "Not on sale yet.",
      "rateLabel": "Price per hour ({currency})",
      "rateHint": "At least {min} {currency}.",
      "rateOptional": "Not needed: your lessons start at {hours} hours, which already have a price of their own.",
      "lengthLabel": "Lesson length",
      "lengthFrom": "From",
      "lengthTo": "to",
      "extraLabel": "Extra per additional student ({currency})",
      "maxStudentsLabel": "Students per lesson, at most",
      "autoAcceptLabel": "Confirm instantly when the customer pays",
      "autoAcceptHint": "Off, you accept or decline each request from your bookings. You have {hours} hours from payment (or until the lesson starts, if sooner); unanswered, it expires and the customer is refunded in full.",
      "singleLevelLabel": "One level and one age per booking",
      "singleLevelHint": "On, a booking can't mix levels (beginner, intermediate, advanced) or adults with children: the customer makes one booking per group, and each takes a place of its own.",
      "rulesTitle": "Students and bookings",
      "rulesHint": "How many students fit in a lesson, what you teach, how far ahead it is booked and how bookings are confirmed.",
      "rulesStudents": "Up to {count} students",
      "rulesStudents_one": "Up to {count} student",
      "rulesAuto": "Confirmed on payment",
      "rulesManual": "You confirm each booking",
      "rulesOneLevel": "One level and age per booking",
      "places": "Every hour you publish on the calendar carries its places: how many lessons you can sell at once at that resort. While one is left, the hour stays on sale.",
      "blocked": {
        "school_not_approved": "Your school has to be approved and published first.",
        "no_resorts": "Pick the resorts your school works at first.",
        "noResortsLink": "Resorts",
        "price_below_minimum": "The hourly price has to be at least {min} {currency}.",
        "no_hourly_price": "{from} h lessons go by the hour: set the hourly price (at least {min} {currency}) or make lessons start at {hours} hours, which already have a price.",
        "bad_extra_price": "The extra per student cannot be negative.",
        "bad_max_students": "Students per lesson must be between 1 and 20.",
        "bad_formats": "Check the formats and seasons above: what is missing or wrong is marked in red.",
        "bad_duration_prices": "Check the prices for several hours in a row.",
        "bad_notice": "Pick one of the offered notice periods.",
        "bad_disciplines": "Choose the discipline of these lessons: ski, snowboard or both.",
        "bad_lesson_length": "The shortest lesson can't be longer than the longest.",
        "bad_season_prices": "Check the seasonal prices.",
        "bad_included_students": "Students included must be a number from 1 to 20."
      }
    },
    "formats": {
      "formatsTitle": "Formats",
      "formatsHint": "Up to {max}, starting and ending on the quarter hour, between {start} and {end}.",
      "copyFromSchoolNone": "The school has no formats on its lessons without an assigned instructor yet: you can set them here directly.",
      "followSchool": "Use the school's formats",
      "followSchoolHint": "The formats, seasons and prices of your lessons without an assigned instructor: when you change yours, this instructor's change too. Switch it off to give them their own.",
      "followersNote": "Instructors selling with these formats: {n}. Saving changes theirs too.",
      "kindLabel": "Type",
      "kind": {
        "morning": "Morning",
        "afternoon": "Afternoon",
        "full_day": "Full day",
        "other": "Other"
      },
      "startLabel": "From",
      "endLabel": "To",
      "addFormat": "Add a format",
      "removeFormat": "Remove format",
      "seasonsTitle": "Seasons and prices",
      "seasonsHint": "Each season has its dates and a price per format, per lesson for the whole group. Leave a price empty and that format is not sold in that season; on dates outside every season nothing is sold.",
      "extraLabel": "Extra per additional student, per lesson ({currency})",
      "extraHint": "What each student beyond the first adds, in every season. Empty or 0: the price is for the whole group.",
      "seasonName": "Name (only you see it)",
      "seasonNamePlaceholder": "Low season",
      "rangeFrom": "From",
      "rangeTo": "To (included)",
      "addRange": "Add dates",
      "removeRange": "Remove these dates",
      "addSeason": "Add a season",
      "removeSeason": "Remove season",
      "placesNote": "Each open format carries its places: how many lessons of it you can sell at once. It sells on a day when its season gives it a price and a place is still free.",
      "blocked": {
        "no_formats": "Add at least one format.",
        "too_many_formats": "At most {max} formats.",
        "bad_format_times": "Each format needs a start before its end, on the quarter hour, between {start} and {end}.",
        "duplicate_format": "Two formats have the same hours.",
        "no_seasons": "Add at least one season with its dates and prices.",
        "too_many_seasons": "At most {max} seasons.",
        "bad_season_dates": "Each season needs at least one set of dates, with the start no later than the end.",
        "bad_season_name": "Season names can be {max} characters at most.",
        "seasons_overlap": "Two sets of dates overlap: a day can only belong to one season.",
        "season_without_prices": "Each season needs a price for at least one format.",
        "price_below_minimum": "Each price has to be at least {min} {currency} per hour of the format.",
        "bad_pack_days": "Each length is {days} to {max} days, without repeats, and at most {count} of them.",
        "bad_min_days": "A season's minimum is 1 to {max} days.",
        "pack_price_below_minimum": "Each pack price has to be at least {min} {currency} per hour of the format and per day."
      },
      "packsTitle": "Several days in a row",
      "packsHint": "How many days in a row you also sell a format for. Each season can give them a price for the whole group (blank = each day at its price) and a minimum of days.",
      "noPacks": "None: each day is sold on its own",
      "packDaysLabel": "Days in a row",
      "addPackDays": "Add",
      "addPackDaysN": "Add {days} days",
      "removePackDays": "Remove {days} days",
      "packDaysTaken": "You already sell {days} days in a row. Pick another number.",
      "packDaysRange": "Between {min} and {max} days.",
      "packDaysFull": "{max} options at most. Remove one to add another.",
      "minDays": "Minimum days in a row this season",
      "packPriceLabel": "{format} · {days} days",
      "minDaysFormat": "{format}: minimum days in a row"
    },
    "unclaimed": {
      "cardTitle": "Add an instructor without email",
      "cardIntro": "For someone who has no account yet: you write their profile and it goes live at once. You answer for it — requests, calendar and chat — until they claim it with their own email.",
      "addTitle": "Add an instructor without email",
      "addIntro": "The profile is published under your school, and you answer for it until its instructor claims it with their own email. We will ask them for their date of birth and their acceptance of the terms then.",
      "addButton": "Add instructor",
      "editTitle": "{name}'s profile",
      "editProfile": "Edit profile",
      "createdToast": "Instructor added. Now upload their photo.",
      "nowAddPhoto": "Profile created. Upload their photo so customers can put a face to the name — it is what brings the most bookings.",
      "photoTitle": "Photo",
      "photoAfterSave": "You can upload their photo as soon as you save the profile.",
      "photosHint": "Up to three photos of them teaching. Optional.",
      "bioLabel": "Introduction",
      "bioPlaceholder": "Who they are, how they teach, who they work best with…",
      "bioHint": "Write it in any language: we translate it into the others automatically.",
      "resortsLabel": "Resorts where they teach",
      "resortsHint": "From your country. You can change them at any time.",
      "languagesLabel": "Languages they teach in",
      "yearsLabel": "Years of experience",
      "licenceRequired": "Here their licence number ({credential}) is required to publish the profile.",
      "licenceOptional": "Optional, but it gives customers confidence.",
      "offPisteNeedsTitle": "In {countries}, “Off-piste”, “Freeride” and “Big mountain” need the instructor's own qualification: state it under Qualification to be able to tick them.",
      "activeLabel": "Published",
      "activeHint": "Switch it off to pause the profile without deleting it.",
      "consent": "I confirm this person has agreed to my school publishing their profile on Alpine Pal, and holds the qualification required to teach at these resorts.",
      "consentAdmin": "I confirm the school has assured me that this person has agreed to it publishing their profile on Alpine Pal, and holds the qualification required to teach at these resorts.",
      "missingConsent": "Confirm they agreed",
      "badge": "No account",
      "badgeHint": "Added by your school. You answer for this profile until it is claimed.",
      "managedLocked": "Your school runs it until the profile is claimed.",
      "linkButton": "Send a link to claim it",
      "linkTitle": "Let {name} claim their profile",
      "linkIntro": "We will email them a link. They open it, sign in or create their account with that same email, and the profile becomes theirs, reviews included. They stay with your school at your rates, and you keep running their calendar until you hand it over.",
      "linkSend": "Send link",
      "linkSentToast": "Link sent",
      "linkPending": "Link sent to {email} · expires on {date}",
      "linkExpired": "The link sent to {email} expired on {date}",
      "removeBody": "{name}'s profile will be closed: it disappears from the site and its link stops working. Their past lessons stay in your lists. Not possible while they have lessons ahead.",
      "credentialTitle": "Qualification",
      "missingName": "Name and surname missing",
      "missingLicence": "Licence number missing",
      "missingOffPisteTitle": "Off-piste needs their qualification",
      "missingPrice": "Set a rate above the minimum"
    },
    "lessonsHint": "Private and group lessons: how they sell, at what price and when, the school's own and your roster's.",
    "cancellationHelp": "It applies to every lesson your school sells: your instructors' private and group lessons, and those without an assigned instructor. Once a lesson is confirmed, the customer can still cancel it with a full refund up to this long before it starts; after that, there is no refund. Customers see it on the profiles and before paying. Bookings already made keep the policy they were made with.",
    "lueira": {
      "statusActive": "Connected",
      "statusBroken": "Disconnected",
      "statusReview": "Under review",
      "reviewBody": "We have your key. We are reviewing the connection and will let you know as soon as everything is ready. Until then nothing is sent to or changed in your Lueira.",
      "reviewAdminBody": "The school only sees that it is under review. Until then nothing goes to its Lueira and what it sells there takes no place here. Approving starts the sync and tells the school.",
      "approve": "Approve connection",
      "approveTitle": "Approve this Lueira connection?",
      "approveBody": "Sales in its Lueira will start taking places here, and lessons paid here will enter its Lueira. The school will get an email.",
      "approvedToast": "Connection approved",
      "intro": "If you run your school on Lueira, connect it: the private lessons you sell in Lueira take their place among your unassigned lessons, the group lessons you connect take their seats, and every lesson paid on Alpine Pal goes into your Lueira, already paid.",
      "ownerOnly": "Only the school's owner can connect Lueira and change its settings.",
      "keyLabel": "Lueira API key",
      "keyHint": "Create it in Lueira under Settings > Developers > API Keys, with read and write access to orders, and read access to products, instructors and inventory.",
      "keyReviewHint": "Once sent, we review the connection and let you know.",
      "connect": "Send key",
      "connectedToast": "Key received",
      "brokenBody": "Lueira no longer accepts the saved key, so nothing is sent or received. Paste a new key to connect it again.",
      "failure": {
        "invalid": "Lueira does not recognise this key. Check you copied all of it and that it is not revoked.",
        "scope": "The key lacks the permissions it needs. Give it read and write access to orders, and read access to products.",
        "unreachable": "We could not reach Lueira. Please try again in a while.",
        "broken": "Lueira no longer accepts the key. Paste a new one.",
        "quota": "This month's requests on your Lueira plan are used up.",
        "unavailable": "The Lueira connection is not available right now."
      },
      "mappingTitle": "What your lessons are in Lueira",
      "mappingDone": "Set up: lessons paid here are created like this in your Lueira.",
      "mappingMissing": "Choose at least the resort, one product, the three levels and the meeting point. Until then nothing is created in Lueira.",
      "readCatalog": "Read from Lueira",
      "readCatalogHint": "Brings your centres, products, levels, meeting points and partners. Uses about five requests of your plan.",
      "choose": "Choose…",
      "none": "None",
      "chosen": "The one chosen before",
      "resort": "Resort",
      "location": "Centre",
      "productSki": "Private ski lesson product",
      "productSnowboard": "Private snowboard lesson product",
      "level": {
        "beginner": "Level for beginners",
        "intermediate": "Level for intermediates",
        "advanced": "Level for advanced"
      },
      "meetingPoint": "Meeting point",
      "partner": "Alpine Pal as a partner (optional)",
      "groupsTitle": "Group lessons",
      "groupsHint": "Choose which Lueira products each group lesson is: places sold in Lueira come off here, and places sold here go into your Lueira. If you have one product per level, choose them all. A group lesson with no product stays unconnected.",
      "groupsPick": "Choose Lueira products",
      "groupsSearch": "Search products",
      "groupsEmpty": "Press “{button}” to see your products.",
      "plan": "Your Lueira plan",
      "planUnknown": "I don't know",
      "planQuota": "{n} requests a month",
      "savedToast": "Saved",
      "webhookTitle": "Notices from Lueira",
      "webhookReady": "Working",
      "webhookIntro": "So that what you sell in Lueira takes its place here, create a webhook in Lueira under Settings > Developers > Webhooks, with this address and the order events (order.created, order.updated and order.cancelled). Then paste here the signing secret Lueira shows you.",
      "webhookSecret": "Webhook signing secret",
      "statsPrivate": "Private lessons",
      "statsGroup": "Group lessons",
      "statsSent": "Sent to Lueira",
      "statsReceived": "Received from Lueira",
      "statsReceivedSeats": "Places received from Lueira",
      "statsRefused": "With a problem",
      "reconciledAt": "Sales last checked",
      "mappingGroupsOnly": "Set up for group lessons. To send private lessons too, choose a product, the three levels and the meeting point.",
      "bookingSent": "In Lueira",
      "bookingPending": "Waiting to go to Lueira",
      "bookingRefused": "Not added to Lueira",
      "requests": "Requests this month",
      "requestsOf": "{used} of {quota}",
      "syncedAt": "Last sync",
      "never": "Not yet",
      "lastError": "Last problem ({date}):",
      "syncNow": "Sync now",
      "syncToast": "Syncing with Lueira",
      "disconnect": "Disconnect",
      "disconnectTitle": "Disconnect Lueira?",
      "disconnectBody": "Lessons paid here will stop reaching your Lueira, and what you sell there will stop taking its place here. What is already in Lueira stays as it is.",
      "disconnectedToast": "Lueira disconnected",
      "clash": "Lueira sold a place ({when}) that was already sold on Alpine Pal: you have two lessons for one place.",
      "noSeat": "You have no unassigned lessons yet: give them a price and hours in Private lessons so that what you sell in Lueira takes its place here.",
      "webhookLast": "Last notice received from Lueira: {date}.",
      "webhookWaiting": "No notice from Lueira has arrived yet. To check it, send a test event from that webhook in Lueira and come back to this page.",
      "webhookBadSignature": "Notices from Lueira are arriving, but their signature does not match the saved secret. Copy this webhook's secret from Lueira again and paste it here.",
      "exportButton": "Download Lueira data",
      "exportHint": "For Alpine Pal administrators only. It reads calendars, prices, courses and rental without writing anything, and spends a few dozen requests from the school's plan.",
      "exportDone": "Data downloaded ({calls} requests).",
      "unsure": "We don't know whether booking {reference} reached Lueira. Look for it there: if it isn't there, press \"Sync now\"."
    },
    "connections": {
      "intro": "Connect Alpine Pal to what your school already uses: your lessons appear in your Google Calendar and, if you work with Lueira, everything stays in one place.",
      "developersTitle": "Other booking software",
      "developersIntro": "If your school runs on other software or on its own, it connects through the Alpine Pal API. This part is for whoever programs it."
    }
  },
  "credits": {
    "title": "Photo credits",
    "intro": "The photographs on Alpine Pal come from Wikimedia Commons, under licences that allow commercial reuse as long as the author and licence are named. This page names them.",
    "resorts": "Resort photos",
    "photoBy": "Photo:"
  },
  "empty": {
    "noPending": "No pending bookings.",
    "noReviews": "No reviews yet."
  },
  "error": {
    "generic": "Something went wrong.",
    "paymentsMisconfigured": "Payments are not fully configured. Please contact info@alpinepal.com.",
    "paymentFailed": "Payment could not be completed. Please try again.",
    "bookingLoadFailed": "The booking could not be loaded."
  },
  "specialty": {
    "beginners": "Beginners",
    "intermediate_technique": "Intermediate technique",
    "advanced_technique": "Advanced technique",
    "children": "Children",
    "families": "Families",
    "freeride": "Freeride",
    "snowpark": "Snowpark",
    "racing_preparation": "Racing preparation",
    "adaptive_skiing": "Adaptive skiing",
    "group_lessons": "Group lessons",
    "adults": "Adults",
    "carving": "Carving",
    "off_piste": "Off-piste",
    "moguls": "Moguls",
    "big_mountain": "Big mountain",
    "nervous_skiers": "Nervous skiers",
    "powder": "Powder",
    "freestyle": "Freestyle"
  },
  "level": {
    "beginner": "Beginner",
    "intermediate": "Intermediate",
    "advanced": "Advanced",
    "beginnerPiste": "Beginner · Green/blue pistes",
    "intermediatePiste": "Intermediate · Blue/red pistes",
    "advancedPiste": "Advanced · Red/black pistes",
    "all": "All levels"
  },
  "audience": {
    "all": "Everyone",
    "children": "Children",
    "adults": "Adults",
    "agesRange": "{min}–{max} years",
    "agesFrom": "from {min} years",
    "agesUpTo": "up to {max} years"
  },
  "age": {
    "adult": "Adult",
    "child": "Child"
  },
  "cookies": {
    "title": "Cookie policy",
    "intro": "Alpine Pal uses cookies for two things: to make the site work — staying signed in, taking payments, remembering your choice here — and, if you allow it, to measure how the site is used and how well our ads work, so we can improve both. We never sell your data.",
    "necessaryTitle": "Strictly necessary",
    "necessaryBody": "These are set whatever you choose: without them you cannot sign in or pay. They are not used for tracking.",
    "analyticsTitle": "Analytics",
    "analyticsBody": "Google Analytics counts visits and pages; Microsoft Clarity records anonymised sessions and heatmaps so we can see where people get stuck. They only measure if you accept.",
    "advertisingTitle": "Advertising",
    "advertisingBody": "Google Ads tells us which ad brought you here and whether a booking followed, and can show you our ads again elsewhere. The tag loads for everyone, but it stores nothing on your device and personalises nothing unless you accept.",
    "colName": "Cookie",
    "colProvider": "Set by",
    "colPurpose": "What it is for",
    "colDuration": "Lasts",
    "purpose": {
      "consent": "Remembers your choice on this banner, so you are not asked again.",
      "session": "Keeps you signed in and links the browser to your account.",
      "payments": "Stripe uses it to process the payment and detect fraud. Only set when you reach the checkout.",
      "clarity": "Identifies the browsing session so the recording holds together across pages.",
      "clarityId": "Anonymous identifier Microsoft uses to tell returning visits apart.",
      "ga": "Distinguishes visits and sessions so the traffic reports add up.",
      "gclAu": "Links your booking back to the ad you clicked, so we know which ones are worth paying for.",
      "googleAds": "Set by Google on its own domains to measure the ads and, if you allow it, to personalise them.",
      "salesLink": "If you arrive through one of our sales partners' links, it remembers which one, so we know whom your sign-up is owed to if you register as a school or an instructor. It is only stored if you accept advertising; otherwise nothing is stored and it only counts if you sign up in that same visit."
    },
    "yourChoiceTitle": "Your choice",
    "currentChoice": "Right now",
    "stateUndecided": "not decided yet",
    "stateAccepted": "analytics and advertising accepted",
    "stateRejected": "analytics and advertising rejected",
    "askAgain": "Ask me again",
    "withdrawNote": "You can change this whenever you like. Withdrawing takes effect on the next page load; cookies already set expire on their own or can be deleted from your browser.",
    "browserTitle": "From your browser",
    "browserBody": "Every browser lets you block or delete cookies from its privacy settings. Blocking the strictly necessary ones will stop sign-in and payments from working.",
    "bannerTitle": "Cookies on Alpine Pal",
    "bannerBody": "We use the cookies the site needs to work. With your permission we would also like to measure how it is used and how our ads perform, with Microsoft Clarity, Google Analytics and Google Ads.",
    "acceptAll": "Accept",
    "rejectAll": "Only essential",
    "readPolicy": "See the details"
  },
  "instructorProfile": {
    "priceSetBySchool": "Your rates are set by your school.",
    "managedBySchool": "Your school manages your calendar and your booking settings.",
    "resortsHint": "Add or remove the resorts where you teach. New resorts start with an empty calendar — open your hours from Private lessons. Removing one keeps the hours you had set for the rest.",
    "resortsEmpty": "You need at least one resort to receive bookings.",
    "credentialFirst": "Add it under Certifications, above, and save; then you can add these resorts.",
    "reverifyOnSave": "Your certifications are verified. Once you save this change they will show as declared until we review them."
  },
  "lesson": {
    "askTitle": "Did the lesson happen?",
    "askBody": "Confirm it and we release the instructor’s share. If something went wrong, tell us instead and we’ll hold the payment while we look into it.",
    "confirm": "Yes, confirm the lesson",
    "report": "There was a problem",
    "reasonPlaceholder": "Tell us what happened: the instructor didn’t show up, the lesson was much shorter than booked…",
    "sendReport": "Send the report",
    "confirmedToast": "Thanks. The instructor has been paid their share.",
    "confirmTitle": "Confirm the lesson took place?",
    "confirmBody": "This releases the instructor's payment. Only confirm if the lesson actually happened — this cannot be undone.",
    "reportedToast": "Reported. We’ll look into it and get back to you.",
    "reportTooLate": "This payment has already been withdrawn, so it can no longer be held. Write to us and we’ll sort it out.",
    "disputeOpenTitle": "We’re looking into it",
    "disputeOpenBody": "The payment to the instructor is on hold until we settle this. We’ll be in touch.",
    "completedNote": "This lesson is confirmed and settled.",
    "noShowNote": "The instructor has marked that you did not turn up for this lesson.",
    "noShowReport": "Not what happened? Report a problem",
    "reportLate": "Something went wrong? Report a problem",
    "pendingBadge": "Pending your confirmation"
  },
  "lessonFormats": {
    "name": {
      "morning": "Morning lesson",
      "afternoon": "Afternoon lesson",
      "full_day": "Full day",
      "other": "Lesson"
    },
    "formatLabel": "Format",
    "perLesson": "per lesson",
    "fromPerLesson": "From {price} per lesson",
    "wholeGroup": "For the whole group, up to {count} students",
    "wholeGroup_one": "For the whole group, up to {count} student",
    "firstStudent": "For 1 student",
    "extraPerStudent": "+{price} per extra student, per lesson",
    "markdownIntro": "Private lessons in fixed formats, priced per lesson for the whole group:"
  },
  "earnings": {
    "available": "Available",
    "pending": "Awaiting confirmation",
    "onHold": "On hold",
    "paid": "Withdrawn",
    "withdrawTitle": "Withdrawing to your bank",
    "withdrawBody": "Payments are not configured in this environment. Your balance is safe and you’ll be able to withdraw it once they are live.",
    "payoutCountry": {
      "title": "Which country are you paid from?",
      "body": "The country where you live and pay tax, which need not be where you teach. Stripe will ask for an address and a bank account there, and it cannot be changed once your payout account exists.",
      "manualBody": "The country where you live and pay tax, which need not be where you teach. Stripe cannot send money to your country yet, so we pay your withdrawals by hand.",
      "schoolTitle": "Which country is the school paid in?",
      "schoolBody": "The country of the business and its bank account, which need not be where it teaches. Stripe will ask for details and a bank account from that country, and it cannot be changed once the payout account exists.",
      "schoolManualBody": "The country of the business and its bank account, which need not be where it teaches. Stripe cannot send money to your country yet, so we pay your withdrawals by hand.",
      "placeholder": "Choose your country",
      "default": "If you choose nothing we will use {country}.",
      "saved": "Payout country saved.",
      "conversion": "Your lessons are charged in {from}, and bank accounts in that country are usually held in {to}. Give Stripe an account in {from} if you can: you will receive exactly what you see here. If you give one in {to}, Stripe converts on arrival and the amount will differ."
    },
    "connect": {
      "setupTitle": "Set up your payouts",
      "setupBody": "To withdraw your balance you need a payout account with Stripe. It takes a few minutes: identity and bank account. Stripe keeps your details; we never see them.",
      "setupCta": "Set up payouts",
      "continueCta": "Continue setup",
      "reviewBadge": "Under review by Stripe",
      "readyBadge": "Payouts active"
    },
    "withdraw": {
      "button": "Withdraw {amount}",
      "minimumNote": "Minimum withdrawal: {amount}",
      "confirmTitle": "Withdraw your balance?",
      "confirmBody": "{amount} will be transferred to your bank account via Stripe. This usually takes a few days and cannot be cancelled once started.",
      "confirmCta": "Yes, withdraw",
      "successToast": "Withdrawal on its way. Stripe will deposit it in your bank within a few days.",
      "waitingToast": "Withdrawal on its way. The money from the latest lessons is still settling: we will send it as soon as it lands and email you.",
      "waitingTitle": "Your withdrawal of {amount} is on its way",
      "waitingBody": "The money from the latest lessons is still settling on Stripe, which usually takes a few days. We will send it ourselves as soon as it is there, with nothing for you to do, and email you when it leaves.",
      "error": {
        "not_enabled": "Finish your payout setup before withdrawing.",
        "no_funds": "You have no available balance right now.",
        "below_minimum": "Your available balance is under the withdrawal minimum.",
        "in_progress": "A withdrawal is already in progress. Wait for it to finish.",
        "transfer_failed": "The transfer failed. Your balance is available again; try once more.",
        "no_fiscal_details": "Add your tax details before withdrawing."
      },
      "confirmManual": "We will send {amount} to the payout method you saved. We review it and send it by hand, so it takes a little longer than an automatic transfer; we will email you the moment it leaves.",
      "successManual": "Withdrawal requested. We will send the money and email you."
    },
    "withdrawals": {
      "title": "Withdrawals",
      "invoiceLink": "Invoice",
      "status": {
        "processing": "In progress",
        "paid": "Completed",
        "failed": "Failed",
        "awaiting_funds": "Waiting for funds",
        "awaiting_payout": "Waiting to be sent"
      }
    },
    "movements": "Movements",
    "colRef": "Ref",
    "colDate": "Date",
    "colInstructor": "Instructor",
    "colResort": "Resort",
    "colAmount": "Your share",
    "colStatus": "Status",
    "empty": "Nothing here yet. When a lesson is confirmed, your {percent}% shows up in this list.",
    "status": {
      "pending_completion": "Awaiting confirmation",
      "pending_review_period": "In review",
      "available": "Available",
      "processing": "Being paid",
      "paid": "Withdrawn",
      "failed": "Refunded to customer",
      "on_hold": "On hold"
    },
    "manual": {
      "setupTitle": "Tell us how to pay you",
      "setupBody": "Stripe does not reach your country yet, so we pay your withdrawals ourselves by PayPal, Payoneer or bank transfer. You can keep teaching and building a balance meanwhile — this is only needed to take it out.",
      "setupCta": "Set up payouts",
      "readyBadge": "You will be paid at {email}",
      "readyBadgeBank": "You will be paid by bank transfer to the IBAN ending in {last4}"
    },
    "commissionNote": "Since {date}, Alpine Pal keeps {percent}% of each new lesson. Lessons sold before keep their commission.",
    "referralNote": "Thanks to the referral programme, your next bookings pay {percent}% commission instead of {standard}%: {remaining} left, until {date}."
  },
  "fiscal": {
    "title": "Tax details",
    "hint": "We use these details to issue the invoice for our commission. You need them to withdraw your balance. They are not shown on your public profile.",
    "legalName": "Full name or company name",
    "taxId": "Tax number",
    "vatId": "VAT number (optional)",
    "vatIdHint": "If you have one, with your country's prefix, like FR12345678901.",
    "address": "Tax address",
    "postalCode": "Postcode",
    "city": "City",
    "countryCode": "Country",
    "countryPlaceholder": "Choose the country",
    "saved": "Tax details saved.",
    "missingTitle": "Add your tax details",
    "missingBody": "We need them to issue the invoice for our commission. Without them you cannot withdraw your balance.",
    "missingCta": "Add tax details",
    "invoicesTitle": "Alpine Pal invoices",
    "invoicesEmpty": "You do not have any Alpine Pal invoices yet.",
    "error": {
      "legalName": "Write your full name or your company's name.",
      "taxId": "Write your full tax number.",
      "taxIdSpain": "This NIF is not valid: check the numbers and the letter.",
      "vatId": "This number does not look right: it should start with your country's prefix, like FR12345678901.",
      "address": "Write the street and number.",
      "postalCode": "Write the postcode.",
      "city": "Write the city.",
      "countryCode": "Choose the country."
    }
  },
  "account": {
    "menu": "Your account",
    "security": "Security and sign-in",
    "signOut": "Sign out",
    "closeTitle": "Close your account",
    "closeBody": "This cannot be undone. Your profile, your chat history and your notifications are deleted, and you are signed out.",
    "closeKept": "We keep what the law makes us keep: your bookings and payment records for tax purposes, and any reviews you wrote — those stay published with your first name, as the terms explain. If you are an instructor you must have collected all your money first. You can sign up again later with the same email.",
    "closeAction": "Close my account",
    "confirmTitle": "Close your account permanently?",
    "confirmBody": "Everything except the records above is deleted and you will be signed out. There is no way back.",
    "closed": "Your account has been closed.",
    "blockedBookings": "You still have {count} lessons coming up. Let them happen or cancel them first.",
    "blockedBookings_one": "You still have {count} lesson coming up. Let it happen or cancel it first.",
    "clerkFailed": "Your data was deleted but your login could not be removed. Please write to us so we can finish it.",
    "blockedBalance": "You still have {amount} to collect. Withdraw it — or wait for it to clear if a lesson just finished — and then close.",
    "blockedRefund": "We are returning {amount} to you and it has not arrived yet. Wait for the refund to complete before closing, or we will have nowhere to send it.",
    "blockedSchool": "This account manages a school. Write to us and we will close the school with you first."
  },
  "serverError": {
    "salesCodeTaken": "Another sales partner already has that code",
    "availabilityManagedBySchool": "Your school manages your calendar now. Reload the page to see it.",
    "settingsManagedBySchool": "Your school manages your booking settings. Reload the page to see them.",
    "bookingManagedBySchool": "Your school answers booking requests for you. Reload the page.",
    "instructorSelfManaged": "This instructor answers their own booking requests.",
    "externalBlocksReadOnly": "Those blocks come from your school's booking system and cannot be edited here.",
    "availabilityChanged": "The calendar was changed by somebody else in the meantime. Reload and try again.",
    "tooManyApiKeys": "You already have {max} active keys. Revoke one to create another.",
    "tooManyWebhooks": "You already have {max} endpoints. Remove one to add another.",
    "webhookUrl": "That URL is not allowed: it must be https and point to a public server.",
    "webhookNotFound": "That endpoint no longer exists.",
    "webhookEvents": "Pick at least one known event.",
    "slotUnavailable": "That time is no longer open. The instructor may have changed their calendar since you loaded the page — reload it and pick another slot.",
    "alreadyBooked": "Someone booked that time first. Pick another slot.",
    "youAlreadyBooked": "You already have a lesson booked at that time.",
    "inThePast": "That time has already passed. Pick another slot.",
    "tooSoon": "This instructor needs more notice than that. Pick a later slot.",
    "tooFarAhead": "That date is too far ahead to book yet.",
    "badDuration": "That length is outside what this instructor offers.",
    "badStudents": "That is more students than this instructor takes.",
    "studentDetails": "Check each student's name and age.",
    "studentAge": "A student's age doesn't fit this lesson.",
    "contactPhone": "We need a contact phone.",
    "wrongResort": "This instructor does not teach at that resort.",
    "badBookingState": "This booking has moved on since you opened the page. Reload it to see where it stands.",
    "cannotPay": "This booking can no longer be paid.",
    "alreadyPaid": "This booking has already been paid.",
    "paymentInProgress": "Your payment for this booking is still being processed. We will let you know as soon as it goes through.",
    "slotGoneAfterHold": "Your booking expired before the payment was completed and that hour is no longer available. Please start a new booking.",
    "lessonAlreadyStarted": "That lesson time has already passed and the booking expired unpaid. Please start a new booking with another time.",
    "cancellationClosed": "Free cancellation has closed for this lesson. Message your instructor in the chat.",
    "proposedTimeTaken": "That time has been taken in the meantime. Ask for another one in the chat.",
    "slotNowConflicts": "That slot now clashes with another booking. Propose a new time or reject it.",
    "outsideAvailability": "That time is outside your published availability. Open it in your calendar first.",
    "lessonNotEnded": "The lesson has not finished yet.",
    "lessonAlreadyEnded": "The lesson has already taken place — it can no longer be cancelled.",
    "lessonNotEndedChat": "The lesson has not finished yet. Talk to your instructor in the chat.",
    "cannotDispute": "This booking cannot be disputed.",
    "disputeReasonRequired": "Tell us what went wrong.",
    "refundFailed": "The refund could not be processed. We have been notified.",
    "disputeAlreadyResolved": "This complaint has already been resolved. Reload the page to see how.",
    "disputeAlreadyRefunded": "This booking has already been refunded, so the complaint can only be closed as a refund.",
    "schoolStillOwed": "This school is still owed money, so it cannot be closed. Suspend it and close it once it has been paid everything.",
    "schoolLessonsAhead": "This school still has lessons ahead, so it cannot be closed yet. They take place first; close it once they have passed.",
    "onlyCompletedReviewable": "Only a finished lesson can be reviewed.",
    "alreadyReviewed": "You have already reviewed this lesson.",
    "badRating": "Give a rating between 1 and 5.",
    "commentTooLong": "That comment is too long.",
    "bioTooLong": "That biography is too long. The limit is 4000 characters.",
    "emptyMessage": "Write something first.",
    "meetingPointTitle": "Give the meeting point a name.",
    "noMeetingPoint": "There is no meeting point to confirm.",
    "fileTooLarge": "That file is too big. The limit is 8 MB.",
    "imageTooLarge": "That image is too big. The limit is 5 MB.",
    "imageType": "Only JPEG, PNG or WebP images are accepted.",
    "fileType": "Only PDF, JPEG, PNG or WebP files are accepted.",
    "fileCorrupt": "That file does not look like a real document. Try exporting it again.",
    "imageCorrupt": "That image does not look like a real photo. Try another one.",
    "badPrice": "Give an hourly price above zero.",
    "badExtraPrice": "The price per extra student cannot be negative.",
    "badMaxStudents": "Group size has to be between 1 and 20.",
    "badNotice": "Pick one of the offered notice periods.",
    "durationOrder": "The minimum lesson length cannot be longer than the maximum.",
    "badLessonDuration": "Give a lesson length above zero.",
    "badCertifications": "Something is wrong with those qualifications. Check them and save again.",
    "certNameRequired": "Give the qualification a name and an issuing body.",
    "certExpiryRequired": "Give the qualification an expiry date, or tick that it does not expire.",
    "licenceRequired": "A licence number is required to teach at the resorts you picked.",
    "titleRequired": "To teach at the resorts you picked, upload your certificate or give its number.",
    "offPisteNeedsTitle": "Off-piste, freeride and big mountain need a qualification of your own at these resorts: add it first, or untick them.",
    "approveNeedsTitle": "This profile does not have the qualification its resorts require: ask for it before approving.",
    "pickResort": "Pick at least one resort.",
    "resortHasGroupClasses": "That resort has group lessons published: cancel them or move them before removing it.",
    "pickLanguage": "Pick at least one teaching language.",
    "badKind": "That is not a valid profile type.",
    "notRejected": "Only a rejected application can be sent for review again.",
    "foreignDocument": "That document does not belong to this account.",
    "badAvailability": "Something is wrong with those availability blocks. Check them and save again.",
    "availabilityTooSoon": "Some of the hours you opened start within your {hours}-hour notice window, so nobody could book them. Open hours further ahead, or lower your notice period under Private lessons.",
    "tooManyAvailabilityBlocks": "Your calendar has more than {max} availability blocks from today on. Merge some of them or use weekly ones, and save again.",
    "chargebackOpen": "This booking has an open chargeback: the bank has already taken the money back. It settles itself when Stripe rules; to accept it sooner, use “Refund the customer” under Complaints.",
    "startedRejectInstead": "That lesson has already started, so it can no longer be accepted. Reject it and the customer gets their money back.",
    "rateLimited": "Too many attempts in a row. Wait a moment and try again.",
    "badYearsExperience": "Years of experience must be between 0 and 80.",
    "tooManyResorts": "You can pick at most {max} resorts.",
    "instructorNotBookable": "This instructor is not taking bookings right now.",
    "instructorUnavailable": "This instructor is not available right now.",
    "schoolNameMismatch": "The name does not match: type it exactly to close the school.",
    "onlyApprovedSchoolPublished": "Only an approved school can be published.",
    "signInRequired": "Sign in to continue.",
    "notAuthorised": "You cannot do that.",
    "instructorCannotRegisterSchool": "This account already has an instructor profile — register the school from its own account.",
    "countryNotServed": "We do not serve that country yet.",
    "schoolNotFound": "That school does not exist.",
    "schoolNotApproved": "Your school has not been approved yet.",
    "payoutIban": "That IBAN does not look valid.",
    "payoutAccountHolder": "Give the account holder's name.",
    "invitationInvalid": "That invitation is no longer valid.",
    "invitationExpired": "That invitation has expired — ask the school to send it again.",
    "invitationWrongEmail": "The invitation was sent to a different email address. Add and verify that address on your account, or ask the school to invite this one.",
    "schoolCurrencyMismatch": "Pick resorts in your school's country or currency area.",
    "badEmail": "That email does not look valid.",
    "invitationDuplicate": "That email already has a pending invitation.",
    "alreadyManagesSchool": "This account already manages a school.",
    "schoolCannotApply": "A school management account cannot apply as an instructor — use a separate account.",
    "instructorCannotManageSchool": "An instructor account cannot manage a school — use a separate account.",
    "creatorCannotBeRemoved": "The school's creator cannot be removed.",
    "accountClosed": "This account has been closed.",
    "instructorClosed": "This instructor has closed their account.",
    "invoiceNotReady": "That invoice is not available yet.",
    "tooYoung": "You must be at least {min} to sign up as an instructor.",
    "badDateOfBirth": "That date of birth is not valid.",
    "companionBlocked": "Teaching for payment in {countries} requires an official qualification.",
    "priceBelowMinimum": "That hourly price is too low for us to be able to charge it. Raise it and save again.",
    "companionNoQualification": "A riding companion claims no qualification, so there is nothing to verify.",
    "outsideSkiDay": "Lessons can only run between 07:00 and 21:00, resort time.",
    "tooManyPhotos": "You can only have 3 photos.",
    "tooManySchoolPhotos": "The gallery holds up to 6 photos.",
    "photoNotYours": "That photo is not yours.",
    "photoList": "That photo list is not valid.",
    "payoutProvider": "Choose PayPal or Payoneer.",
    "payoutEmail": "That payout email does not look valid.",
    "payoutNotWaiting": "That payout is no longer waiting.",
    "payoutsNotLiveYet": "We cannot switch your payouts on yet — that is on us, not on you. We are finishing the setup with Stripe. Your balance is safe and you will be able to withdraw it as soon as it is ready.",
    "payoutsCountryBlocked": "Stripe cannot pay out in your country. Email us at info@alpinepal.com and we will sort it out with you.",
    "stripeUnreachable": "We could not reach Stripe. Please try again in a few minutes.",
    "payoutCountryUnsupported": "We cannot pay out in that country yet. Email us at info@alpinepal.com and we will find another way.",
    "payoutCountryLocked": "Your payout country can no longer be changed: your Stripe account already exists. Email us at info@alpinepal.com if you picked the wrong one.",
    "noInstructorProfile": "This account has no instructor profile yet. Use the application form on the invitation page.",
    "alreadyInstructor": "This account already has an instructor profile. Open the invitation link to join the school with it.",
    "joinNotCertified": "Only qualified instructors can join a school. Change your profile to qualified instructor first.",
    "joinRejected": "Your profile was not approved. Request a new review before joining a school.",
    "joinAlreadyInSchool": "You already teach for a school. Ask it to remove you from its roster first.",
    "joinCurrencyMismatch": "Your profile is priced in a different currency from the school's, and that cannot be changed.",
    "joinOutstandingBalance": "Withdraw your balance before joining a school. Lessons already paid must be settled and withdrawn first.",
    "schoolNotTakingBookings": "This school is not taking bookings right now.",
    "unassignedNeedsResorts": "Lessons without an assigned instructor need at least one resort. Pick them on the school profile.",
    "assignNotUnassigned": "Only lessons without an assigned instructor can be assigned.",
    "assignBadState": "This lesson can no longer be assigned.",
    "assignPackPending": "Accept the pack first: until then its days can only go to instructors your school manages.",
    "assignNotOnRoster": "That instructor is not an active member of your roster.",
    "assignCurrency": "That instructor charges in a different currency from this lesson.",
    "assignNotVerified": "That instructor is not verified yet.",
    "assignDiscipline": "That instructor does not teach this lesson's discipline.",
    "assignDuration": "This lesson's length is outside what that instructor offers.",
    "assignStudents": "This lesson has more students than that instructor takes.",
    "groupClassGone": "This group lesson is no longer available.",
    "groupClassWrongDate": "This group lesson does not run at that date and time.",
    "groupClassFull": "This group lesson is full — all its places are taken.",
    "groupClassFixedTime": "A group lesson runs at a fixed time and cannot be moved.",
    "groupClassMeetingPointFixed": "The meeting point of a group lesson is set by the instructor and is the same for everyone.",
    "groupClassAssignWhole": "Seats of a group lesson cannot be assigned one by one.",
    "groupClassInvalid": "The group lesson could not be saved. Check its day, times and details.",
    "groupClassCapacity": "Group lessons need between 2 and 50 places, and the minimum cannot exceed them.",
    "groupPriceBelowMinimum": "The price per participant is below the minimum.",
    "groupClassesDisabled": "Group lessons are switched off for this profile. Switch them on in its settings first.",
    "groupClassOverlap": "Those hours overlap another of your group lessons.",
    "groupClassExternalBlock": "Those hours are blocked by a lesson sold outside Alpine Pal.",
    "tooManyGroupClasses": "You already have {max} group lessons ahead, the most allowed. Cancel one before publishing another.",
    "unclaimedProfile": "Nobody has claimed this profile yet: your school runs it until its instructor does.",
    "unclaimedHasLessons": "This instructor still has lessons ahead: cancel them or assign them to someone else first.",
    "acceptTerms": "Accept the terms to continue.",
    "groupClassAges": "Check the ages: only on a children's lesson, between {min} and {max} years, the first no higher than the second.",
    "groupClassForChildren": "This lesson is for children: every student has to be a child.",
    "groupClassForAdults": "This lesson is for adults: every student has to be an adult.",
    "badLessonFormats": "The formats or seasons are not complete. Check them and save again.",
    "badDurationPrices": "The prices for several hours aren't valid: a longer lesson can't cost more per hour, or less in total, than a shorter one.",
    "badSeatDisciplines": "Choose the discipline of these lessons: ski, snowboard or both.",
    "badLessonLength": "Check the lesson length: the shortest can't be longer than the longest.",
    "oneLevelPerBooking": "This school doesn't mix levels or ages in a lesson: make one booking per group.",
    "formatsNotSold": "This calendar does not sell fixed formats. Choose the time again.",
    "chooseFormat": "These lessons are sold as fixed formats: pick one on the calendar.",
    "formatGone": "That format is no longer offered. Pick another one on the school's calendar.",
    "formatNotOnDate": "That format is not sold on that day. Pick another day or format.",
    "formatOtherTime": "That format starts at another time. Pick it again on the calendar.",
    "formatMoveHours": "A lesson sold as a fixed format can only move to the same hours.",
    "formatMovePrice": "That day does not sell this format at the price the customer paid. Pick another day.",
    "packDayUnavailable": "One of the pack's days is not available any more. Pick another start date.",
    "packDayFull": "One of the pack's days is full. Pick another start date or fewer people.",
    "onlyPacks": "This group lesson is only sold in packs.",
    "packNotSold": "That pack is no longer sold.",
    "packBandsMissing": "Choose a price for every person.",
    "packNotFromDate": "That pack cannot start on that date: there are not enough days of it ahead.",
    "minDaysRequired": "On those dates this lesson is only sold for several days in a row.",
    "packStarted": "This pack has already started: it can no longer be cancelled.",
    "packDayFixed": "A day of a pack cannot be moved.",
    "badPacks": "The packs cannot be saved as they are: check the days and prices.",
    "equipmentUnavailable": "This lesson no longer offers equipment rental. Untick the equipment to book it.",
    "equipmentInvalid": "Check the equipment chosen: something in it is no longer offered.",
    "equipmentShoeSize": "Add the shoe size of everyone renting boots.",
    "equipmentHeight": "Add the height of everyone renting skis, a board or clothing.",
    "equipmentPrice": "Each price per day has to be between {min} and {max}.",
    "equipmentOtherName": "Give every other item a name.",
    "equipmentTooManyOthers": "At most {max} other items.",
    "badCancellationWindow": "Pick one of the offered cancellation policies.",
    "referralNotPending": "This referral is no longer waiting for review. Reload the page.",
    "referrerIneligible": "The referrer can no longer receive the reward: they joined a school, are paused or closed their account.",
    "referralYearLimit": "The referrer has already had every reward possible this year.",
    "referralGrantRevoked": "That discount was already withdrawn.",
    "badSeasonPrices": "The seasonal prices aren't valid. Check the dates and the prices.",
    "badIncludedStudents": "Students included in the price must be a number from 1 to 20.",
    "badChildEquipmentAge": "The age for children's prices must be between 3 and 17.",
    "badChildEquipmentSize": "The size for children's gear isn't valid: check the height and the shoe size.",
    "fiscalDetails": "Check your tax details: something in them is not right.",
    "lueiraReview": "Your Lueira connection is under review. We will let you know when it is ready."
  },
  "installApp": {
    "title": "Install Alpine Pal as an app",
    "body": "It opens in its own window like any other app, with your requests and messages always at hand.",
    "iosIntro": "On iPhone and iPad it takes two steps:",
    "iosShare": "Tap Share (if you can't see it, it's in the ··· menu).",
    "iosAdd": "Choose “Add to Home Screen”.",
    "install": "Install app",
    "notNow": "Not now"
  },
  "push": {
    "title": "Get notifications on this device",
    "body": "We'll tell you straight away about booking requests, messages and anything waiting for your answer, even with the app closed.",
    "bodyCustomer": "We'll tell you straight away when your booking is accepted, someone writes to you or anything changes, even when Alpine Pal isn't open.",
    "hint": "You can turn them off any time from the bell or in your phone's settings.",
    "enable": "Turn on notifications",
    "notNow": "Not now",
    "toggle": "Notifications on this device",
    "blocked": "Blocked in this device's settings",
    "iosInstall": "On iPhone, install the app to get notifications",
    "enabled": "Notifications on. We've sent you a test one.",
    "untested": "Notifications on, but the test one didn't go out. If none arrive, turn them on again later.",
    "disabled": "Notifications turned off on this device.",
    "denied": "Notifications are blocked. To get them, allow them for Alpine Pal in this device's settings.",
    "failed": "Couldn't turn on notifications. Please try again.",
    "testTitle": "Notifications on",
    "testBody": "This is how updates on your bookings and your messages will reach you."
  },
  "share": {
    "myProfile": "Share my profile",
    "schoolPage": "Share the school's page",
    "copied": "Link copied",
    "copyFailed": "Couldn't copy the link"
  },
  "formatCalendar": {
    "title": "Formats calendar",
    "subtitle": "One row per format. Click a cell to open it, change its places or close it. Times in the resort's time zone.",
    "subtitlePerson": "One row per format. Click a cell to open or close it. One lesson at a time. Times in the resort's time zone.",
    "noFormats": "Add at least one format in step 2 to see its calendar here.",
    "legendOnSale": "On sale",
    "legendClosed": "Closed",
    "legendNoSeason": "No price that day",
    "cellClosed": "Closed. Click to open it at {price}.",
    "cellNoSeason": "This day falls in no season with a price for this format: it is not sold.",
    "cellOpen": "{taken} of {places} booked · {price}",
    "cellOpenNoPrice": "{taken} of {places} booked · no price that day",
    "weekOutOfSeason": "This week falls in no season: its formats have no price and are not sold.",
    "toSeason": "Go to {date}",
    "closedNow": "Closed on this day.",
    "placesHint": "How many lessons of this format you can sell at once at this resort.",
    "wholeDay": "The whole day ({from}–{to}): the places count for every format",
    "wholeDayHint": "With one place per instructor, any format takes one while it lasts and you never sell more lessons at once than instructors. Formats opened one by one add their places where they overlap.",
    "wholeDayPerson": "The whole day ({from}–{to}): opens the hours of every format",
    "wholeDayPersonHint": "One lesson at a time: once a format is booked, the ones overlapping it are off sale that day.",
    "openNowPerson": "Open this day.",
    "bookedNowPerson": "Open this day, with a lesson already booked in these hours.",
    "scopeWeekly": "Every week",
    "untilSeasonEnd": "Until the end of the season, {date}.",
    "untilDate": "Until {date}, inclusive.",
    "alsoOpens": "This also opens: {formats}.",
    "alsoCloses": "This also stops selling: {formats}.",
    "closeAlsoCloses": "Closing it also closes: {formats}.",
    "closedFormatNow": "Only this format is closed on this day. Its hours keep {places} places for the others.",
    "closedFormatNowPerson": "Only this format is closed on this day. The other formats in these hours stay on sale.",
    "cellClosedFormat": "Only this format is closed. Click to open it at {price}.",
    "closeDay": "Close the day",
    "openDay": "Open the day",
    "closeOnlyHint": "Close format closes only this one; the others keep their places. To close them all, switch on The whole day.",
    "closeOnlyHintPerson": "Close format closes only this one; the others stay on sale. To close them all, switch on The whole day.",
    "close": "Close format",
    "open": "Open format"
  },
  "packs": {
    "title": "Multi-day packs",
    "optional": "Multi-day packs (optional)",
    "hint": "Sell several days of the course in one payment, at a price per person by age. Each day is booked as a lesson of the course.",
    "courseNote": "They apply to the whole course: the weekdays you published together.",
    "days": "Days",
    "band": {
      "adult": "Adults",
      "youth": "Young people",
      "child": "Children"
    },
    "addOption": "Add a pack",
    "removeOption": "Remove this pack",
    "pricesHint": "Price per person for the whole pack. Leave a band empty and it is not sold in that pack.",
    "agesTitle": "Ages of each band (optional)",
    "agesMin": "From",
    "agesMax": "To",
    "includesTitle": "What it includes besides the lessons",
    "include": {
      "liftPass": "Lift pass",
      "rental": "Equipment hire",
      "helmet": "Helmet"
    },
    "singleDays": "Also sell single days",
    "singleDaysHint": "Each single day at the lesson's price per person.",
    "blocked": {
      "too_many_options": "At most {max} packs.",
      "bad_days": "Each pack is {min} to {max} days.",
      "duplicate_days": "Two packs have the same number of days.",
      "option_without_prices": "Each pack needs at least one price.",
      "price_below_minimum": "Each price has to be at least {min} {currency} per day of the pack.",
      "bad_ages": "Check the ages: from {min} to {max}, and the first no higher than the second."
    },
    "saved": "Packs saved",
    "save": "Save packs",
    "remove": "Remove packs",
    "edit": "Edit packs",
    "none": "None: each day is sold on its own.",
    "summaryOptions": "Packs of {list} days",
    "cardBadge": "Packs of {list} days",
    "agesRange": "{min}–{max} years",
    "agesFrom": "{min}+ years",
    "agesUpTo": "up to {max} years",
    "single": "Just this day",
    "optionLabel": "{days} days",
    "fromPerPerson": "from {price} per person",
    "chooseWho": "Who is coming?",
    "addOne": "Add one",
    "removeOne": "Remove one",
    "includes": "Includes: {list}",
    "lessons": "Lessons",
    "oneDay": "One day",
    "daysInRow": "{days} days in a row",
    "minDaysNote": "On these dates the minimum is {days} days in a row.",
    "datesRange": "From {from} to {to}.",
    "doesNotFit": "{days} days in a row from this day are not all on sale: pick another first day.",
    "people": "People: {n}",
    "summaryLabel": "Pack",
    "firstDay": "First day",
    "groupDaysNote": "The course's next {days} lessons, from {date}.",
    "formatDaysNote": "{days} days in a row, from {from} to {to}.",
    "bookingTitle": "{days}-day pack",
    "dayOf": "Day {day} of {days}",
    "bookingNote": "Each day is its own lesson. The pack is cancelled whole; if one of its days is called off, you get that day's share back.",
    "chatOnFirstDay": "A pack has one chat, on its first day.",
    "openFirstDay": "Go to the first day",
    "cancelPack": "Cancel the pack",
    "acceptPack": "Accept the pack",
    "rejectPack": "Reject the pack",
    "answerWhole": "This day is part of a {days}-day pack: the whole pack is accepted or rejected, and its days cannot be moved.",
    "wholePackNote": "Per person, for the whole pack, by age."
  },
  "extraStudents": {
    "title": "Price per extra student",
    "foldHint": "If you charge more when the lesson is for several students.",
    "extraHint": "Empty or 0: the same price whatever the group size."
  },
  "durationPrices": {
    "title": "Price for several hours in a row",
    "hint": "The price of the whole lesson for one student. Empty: that length goes at the rate per hour of the last length priced before it, or by the hour if there is none.",
    "label": "{hours} hours in a row",
    "labelOrMore": "{hours} hours or more",
    "perHour": "= {price} an hour",
    "lineExact": "{hours} hours in a row",
    "lineRate": "{hours} h at {price} an hour",
    "short": "{hours} h",
    "shortOrMore": "{hours} h or more",
    "blocked": {
      "not_a_price": "The price for {hours} hours must be a number above 0. Leave it empty if that length has no price of its own.",
      "below_minimum": "Each price must be at least {min} {currency} per hour.",
      "dearer_per_hour": "{hours} hours come to {rate} an hour, more than {shorter} hours ({shorterRate} an hour): a longer lesson can't cost more per hour.",
      "dearer_than_hourly": "{hours} hours come to {rate} an hour, more than the hourly price ({shorterRate}) that {shorter} h lessons go at.",
      "cheaper_than_shorter": "{hours} hours cost {total} in total, less than {shorter} hours ({shorterTotal}): a longer lesson can't cost less.",
      "cheaper_than_hourly": "{hours} hours cost {total} in total, less than {shorter} h at the hourly price ({shorterTotal}): a longer lesson can't cost less.",
      "orStartLater": "If you don't sell lessons that short, make them start at {hours} hours."
    },
    "foldHint": "If you charge a set price for 2, 3 or more hours in a row."
  },
  "seasonPrices": {
    "title": "Seasonal prices",
    "hint": "Optional. On the dates of a season, its hourly rate and its prices for several hours in a row apply; on every other day, the ones above.",
    "namePlaceholder": "High season",
    "rateLabel": "Hourly rate on these dates ({currency})",
    "headerNote": "The price depends on the date: pick a day to see that day's.",
    "includesUpTo": "The price covers up to {n} students",
    "includedLabel": "Students included in the price",
    "includedHint": "The extra per student applies from the second one.",
    "includedHintFrom": "The extra per student starts with student {n}.",
    "blocked": {
      "too_many_seasons": "At most {max} seasons.",
      "bad_season": "A season can't be read: remove it and create it again.",
      "bad_season_name": "A season's name is too long (at most {max} characters).",
      "bad_season_dates": "Check the dates marked: each range needs a start and an end, and it can't end before it starts.",
      "seasons_overlap": "Two date ranges overlap: each day can have only one price.",
      "season_rate_below_minimum": "The season's hourly rate is below the minimum of {min} {currency}.",
      "season_duration_prices": "Check the season's prices for several hours."
    },
    "foldHint": "If you charge a different price on some dates, such as high season.",
    "unnamed": "Season {n}"
  },
  "extraPer": {
    "label": "How the extra is charged",
    "hour": "per hour",
    "lesson": "per lesson"
  },
  "equipment": {
    "title": "Equipment rental",
    "intro": "Rent out your equipment with your lessons. Whoever books one of your lessons can add what each student needs and pay for it together with the lesson.",
    "enableLabel": "Offer equipment rental",
    "whereNote": "It is offered with every lesson your school is paid for: lessons without an assigned instructor, group lessons and your roster's lessons. Priced per day, for as many days as the lesson has.",
    "commissionNote": "As with lessons, we keep {commission}% and {share}% goes to your balance when the lesson is completed; if a lesson is refunded, its equipment is refunded too.",
    "nothingPriced": "Give something a price to offer it.",
    "notPublic": "Customers will see it once your school is published.",
    "itemsTitle": "What you rent and the price per day",
    "itemsHint": "Adult price. Leave empty what you don't rent.",
    "groupSki": "Ski",
    "groupSnowboard": "Snowboard",
    "groupCommon": "For everyone",
    "perDay": "{currency}/day",
    "othersTitle": "Other items",
    "othersHint": "Anything that is not on the list, with your own name for it. It is shown as you write it, in every language.",
    "otherNameLabel": "Item name",
    "otherNamePlaceholder": "E.g. back protector",
    "addOther": "Add an item",
    "removeOther": "Remove this item",
    "priceRangeError": "Each price per day has to be between {min} and {max}.",
    "otherIncomplete": "Give every other item a name, or leave both fields empty.",
    "pickupTitle": "Where to pick it up",
    "pickupHint": "If the equipment isn't picked up where the lesson starts, say where. Whoever books sees it before paying, in the confirmation and in the reminder the day before.",
    "pickupAddressLabel": "Shop address",
    "pickupAddressPlaceholder": "E.g. 12 Main Street, Vielha",
    "pickupNoteLabel": "Note (optional)",
    "pickupNotePlaceholder": "E.g. Open 8:00–20:30; you can pick it up the evening before",
    "pickupNoteHint": "It is shown as you write it, in every language.",
    "pickupNoAddress": "Add the shop's address, or leave the note empty too.",
    "pickupBefore": "Pick it up before the lesson.",
    "kind": {
      "ski_set": "Ski set (skis, boots and poles)",
      "skis": "Skis",
      "ski_boots": "Ski boots",
      "poles": "Poles",
      "snowboard_set": "Snowboard set (board and boots)",
      "snowboard": "Snowboard",
      "snowboard_boots": "Snowboard boots",
      "helmet": "Helmet",
      "goggles": "Goggles",
      "gloves": "Gloves",
      "clothing": "Clothing (jacket and trousers)"
    },
    "checkoutTitle": "Do you need equipment?",
    "checkoutIntro": "{school} rents equipment for the lesson. Tick what each student needs: it is paid together with the lesson.",
    "checkoutDays": "Prices are per day, for the {days} days of the pack.",
    "includedInSet": "Included in the set",
    "pricePerDay": "{price}/day",
    "shoeSize": "Shoe size (EU)",
    "height": "Height (cm)",
    "sizesNote": "The shop adjusts the equipment when you pick it up.",
    "breakdownLine": "Equipment rental",
    "breakdownLineDays": "Equipment rental · {days} days",
    "errorStudent": "Check the equipment chosen.",
    "errorItem": "Check the equipment chosen: something in it is no longer offered.",
    "errorSet": "A set already includes its own skis, boots or board.",
    "errorShoeSize": "Add the shoe size of everyone renting boots.",
    "errorHeight": "Add the height of everyone renting skis, a board or clothing.",
    "bookingLabel": "Equipment rental",
    "includedInTotal": "{amount}, included in the total",
    "shoeShort": "shoe size {size}",
    "heightShort": "{cm} cm",
    "forDays": "For {days} days",
    "childTitle": "Children's prices",
    "childFoldHint": "If children's gear has a different price.",
    "childHint": "Charged to students booked as a child. Leave empty what costs the same as the adult's.",
    "childMaxAgeLabel": "They're for children up to",
    "childMaxAgeSuffix": "years old (included)",
    "childAgeError": "The age must be between {min} and {max}.",
    "childNoItems": "First set above the price of what you rent.",
    "childSummary": "Up to {age} years · {n} with a children's price",
    "childPricesNote": "Children's price: up to {age} years old.",
    "childTag": "child",
    "tier": {
      "basic": "Basic range",
      "mid": "Mid range",
      "high": "High range"
    },
    "tierLabel": "Range",
    "tiersTitle": "Ranges",
    "tiersFoldHint": "If you rent the same gear in several ranges.",
    "tiersHint": "Tick the ranges you rent and set each one's price. Leave a range empty where an item doesn't have it: with only one, the customer doesn't choose.",
    "childByLabel": "Children's price by",
    "childByAge": "age",
    "childBySize": "size",
    "childHintSize": "Charged to whoever is up to that height (skis, boards and clothing) or that shoe size (boots); a set, when both fit. Helmets, poles and the rest are always at the adult price. Leave empty what costs the same as the adult's.",
    "childMaxHeightLabel": "Children's gear up to",
    "childMaxShoeLabel": "cm and shoe size",
    "childSizeError": "The height must be between {minHeight} and {maxHeight} cm, and the shoe size between {minShoe} and {maxShoe}.",
    "childWhoAge": "up to {age} years old",
    "childWhoSize": "up to {height} cm and shoe size {shoe}",
    "childSummaryWho": "{who} · {n} with a children's price",
    "childSizeNote": "Children's gear up to {height} cm and shoe size {shoe}: its price shows once the height and shoe size are typed."
  },
  "googleCalendar": {
    "title": "Google Calendar",
    "introInstructor": "Your confirmed lessons appear on their own in an \"Alpine Pal\" calendar in your Google account: added, moved and removed as they happen. Your other calendars are never touched.",
    "introSchool": "All your school's lessons, each with the instructor's name in front, appear on their own in an \"Alpine Pal\" calendar in your Google account. Lessons without an assigned instructor show as \"Unassigned\".",
    "schoolAccountTip": "A shared school account (bookings@…, for example) works better than an administrator's personal one. Each instructor can also connect their own from their dashboard, under Connections.",
    "connect": "Connect Google Calendar",
    "connectedAs": "Connected to {email}",
    "connectedBy": "connected by {name}",
    "updating": "Updating your lessons…",
    "syncedAt": "Updated: {when}",
    "resync": "Sync again",
    "resyncDone": "Your lessons are being written to Google Calendar again.",
    "disconnect": "Disconnect",
    "disconnectTitle": "Disconnect Google Calendar?",
    "disconnectBody": "Lessons will stop reaching Google Calendar. Nothing changes in Alpine Pal.",
    "deleteCalendar": "Also delete the \"Alpine Pal\" calendar from Google",
    "disconnected": "Google Calendar disconnected.",
    "brokenRevoked": "Alpine Pal no longer has access to the account {email}, so new lessons are not reaching Google Calendar. Connect it again.",
    "brokenDeleted": "The \"Alpine Pal\" calendar was deleted from the account {email}, so new lessons are not reaching it. Connect again to create it anew.",
    "reconnect": "Connect again",
    "busy": {
      "title": "Block the hours I'm busy",
      "intro": "Whatever you have in your Google Calendar (a doctor's appointment, another lesson, a trip) can no longer be booked on Alpine Pal. We only see when you are busy, never what it is.",
      "enable": "Turn on",
      "on": "On: the hours your main Google Calendar shows as busy cannot be booked. Events marked as \"free\" don't count.",
      "checkedAt": "Checked: {when}",
      "checking": "Reading your busy hours…",
      "failing": "We couldn't read your calendar last time; we'll try again in a few minutes. Until then, the hours read before stay blocked.",
      "disable": "Turn off",
      "disabled": "Your Google busy hours no longer block your calendar."
    },
    "result": {
      "connected": "Google Calendar connected. Your lessons will appear in a few seconds.",
      "denied": "Not connected: you cancelled on Google.",
      "scope_missing": "The calendar permission is missing. Connect again and leave the Google Calendar box ticked.",
      "forbidden": "You cannot connect this calendar.",
      "unavailable": "The Google Calendar connection is not available yet.",
      "failed": "We could not connect to Google. Please try again.",
      "busy_on": "Done: the hours you're busy in Google Calendar can no longer be booked.",
      "busy_scope_missing": "The availability permission is missing. Turn it on again and leave the box to see your availability ticked."
    }
  },
  "referral": {
    "card": {
      "title": "Refer an instructor",
      "body": "Share your link with other instructors. Whoever signs up with it pays {inviteePercent}% commission instead of {standard}% on their first {amount} of lessons. And once they give their first paid lesson, your next {amount} of lessons pay {percent}% instead of {base}%.",
      "preview": "Only you can see this: the programme stays off until 15 days after the notice about the new terms. A code used now does not count.",
      "linkLabel": "Your referral link",
      "copy": "Copy",
      "copied": "Link copied",
      "share": "Share",
      "shareText": "Come and teach on Alpine Pal. With my link you pay {percent}% commission instead of {standard}% on your first {amount} of lessons:",
      "code": "Your code: {code}. Anyone without the link can type it when signing up.",
      "rewardsTitle": "Your lower commission",
      "reward": "Your lessons pay {percent}% instead of {base}%: {remaining} of {cap} left, until {date}.",
      "inviteesTitle": "People you invited",
      "inviteesEmpty": "Nobody has signed up with your code yet.",
      "limit": "Up to {n} rewards a year (you have had {used}).",
      "terms": "Terms"
    },
    "status": {
      "registered": "Waiting for approval",
      "approved": "Profile approved, no lesson yet",
      "to_review": "First lesson given: reviewing your reward",
      "rewarded": "Reward earned",
      "declined": "No reward",
      "void": "Closed"
    },
    "banner": "{name} invites you to Alpine Pal. Sign up with their code and your first lessons pay {percent}% commission instead of {standard}%.",
    "field": {
      "label": "Referral code",
      "placeholder": "MARTA-7K3Q",
      "valid": "{name} invited you: your first lessons will pay {percent}% commission instead of {standard}%.",
      "invalid": "That code does not exist or no longer works. Check it or leave it empty.",
      "privacy": "Whoever invited you will see that you used their code and whether you have given your first lesson — never your amounts."
    }
  },
  "assistant": {
    "open": "AI assistant",
    "title": "Alpine Pal assistant",
    "hint": "Need a hand?",
    "aiBadge": "AI",
    "greeting": "Hi! I'm Alpine Pal's AI assistant. Ask me anything about the site, or tell me where and when you want to ski and I'll look for lessons.",
    "placeholder": "Write your question…",
    "send": "Send",
    "close": "Close",
    "restart": "New conversation",
    "notice": "AI can make mistakes. What you write is sent to Anthropic to answer you and we don't save it. Don't share sensitive data.",
    "noticeLink": "Privacy",
    "contactLink": "Contact",
    "thinking": "Thinking…",
    "searching": "Looking for lessons…",
    "reading": "Checking the site…",
    "seeAll": "See all results ({total})",
    "errorLimit": "That's a lot of questions in a short time. Wait a few minutes and try again.",
    "errorLimitDay": "You've reached the day's maximum of questions. You can carry on in {count} hours.",
    "errorLimitDay_one": "You've reached the day's maximum of questions. You can carry on in an hour.",
    "errorBusy": "The assistant isn't available right now. You can write to us instead:",
    "errorFailed": "Something went wrong and I couldn't answer. Try again in a moment.",
    "errorRefused": "I can't help with that. If it's about Alpine Pal, try asking another way.",
    "errorCut": "The connection dropped and my answer is incomplete. Ask me again.",
    "errorTruncated": "My answer got cut off. Ask me for a shorter version.",
    "suggestFind": "I want an instructor in Zermatt",
    "suggestSignUp": "How do I sign up?",
    "suggestCancel": "Can I cancel a booking?",
    "suggestHours": "Where do I set my hours?",
    "suggestPayout": "How do I get paid?",
    "suggestPrices": "Where do I change my prices?",
    "suggestAddInstructors": "How do I add my instructors?"
  }
}
