{
  "app": {
    "name": "PianoPlanner",
    "tagline": "Smart scheduling for piano technicians"
  },
  "landing": {
    "features": "Features",
    "pricing": "Pricing",
    "myStory": "My Story",
    "privacy": "Privacy",
    "terms": "Terms",
    "login": "Login",
    "getStarted": "Get Started",
    "nowLive": "Now Live",
    "headline": "The smartest business software for piano technicians.",
    "subheadline": "Let your calendar fill itself without leaving gaps. Optimize your routes, manage your clients and pianos, and reduce your admin work. All wrapped in one clear tool that truly understands your craft.",
    "startFree": "Get Started Free",
    "learnMore": "Learn more",
    "heroTitle": "Piano scheduling, simplified.",
    "heroSubtitle": "Smart scheduling built for piano technicians. AI-powered routing, automatic reminders, and a booking page your customers will love.",
    "heroCta": "Start free trial",
    "heroCta2": "See how it works",
    "everythingYouNeed": "Everything you need.",
    "builtFor": "Built by and for piano technicians. Every feature designed to save you time.",
    "featuresTitle": "Everything you need",
    "featuresSubtitle": "Professional tools designed specifically for piano technicians.",
    "storyInvoiceTitle": "Invoice instantly, get paid faster",
    "storyInvoiceDesc": "The piano tuner is still at the customer's home and the invoice is already sent — with a payment link. Create professional invoices from your calendar, email them with a PDF, and get paid online. No separate accounting software needed.",
    "storyInvoiceF1": "1-click invoice from your calendar — customer details auto-filled",
    "storyInvoiceF2": "Online payment link via Mollie — customer pays directly",
    "storyInvoiceF3": "Professional PDF with your own letterhead and automatic numbering",
    "storyInvoiceF4": "Create invoices on your phone — iPhone & Android, even on the go",
    "storyInvoiceF5": "Accounting integration (Moneybird, QuickBooks, and more) — UBL e-invoicing",
    "storyPlanTitle": "Plan smarter, drive less",
    "storyPlanDesc": "See at a glance how efficient your day is. Combine appointments in the same area and save hours of travel time per week.",
    "storyPlanF1": "Color-coded route efficiency per appointment",
    "storyPlanF2": "AI suggestions: automatically cluster nearby clients",
    "storyPlanF3": "Warnings for tight schedules + 1-click fix",
    "storyPlanF4": "Mileage tracking with business/private split",
    "storyWorkshopTitle": "Workshop & projects",
    "storyWorkshopDesc": "Manage rebuilds and workshop jobs from quote to delivery. Plan tasks, track hours and keep oversight of capacity.",
    "storyWorkshopF1": "Project planner with tasks, deadlines and progress",
    "storyWorkshopF2": "Time tracking: book workshop appointments to projects",
    "storyWorkshopF3": "Quotes: labor, materials & costs as PDF",
    "storyWorkshopF4": "Week capacity: instantly see how much room you have",
    "storyPianoTitle": "Every piano, every detail",
    "storyPianoDesc": "Complete service history per piano. Customers book via their personal link. Venues get dedicated evening slots.",
    "storyPianoF1": "Service history, notes and photos per instrument",
    "storyPianoF2": "Personal booking links with pre-filled details",
    "storyPianoF3": "Theater mode: separate hours for concert halls and venues",
    "storyPianoF4": "Automatic tuning reminders based on interval",
    "bannerSyncTitle": "Calendar Sync",
    "bannerSyncDesc": "2-way sync with Google, Apple & Microsoft 365. Or use iCal — works with any calendar app.",
    "bannerMobileTitle": "Access everywhere",
    "bannerMobileDesc": "PWA on your homescreen. Works offline. Push notifications for new bookings.",
    "bannerPrivacyTitle": "100% Dutch hosted",
    "bannerPrivacyDesc": "Data on Dutch servers. No Big Tech cloud. Fully GDPR compliant.",
    "compactEmailTitle": "Professional emails",
    "compactEmailDesc": "Confirmations & reminders in 4 languages. Custom SMTP domain.",
    "compactPrivateTitle": "Private appointments",
    "compactPrivateDesc": "Personal trips separate. Syncs as 'Busy' without details.",
    "compactWalkInTitle": "Walk-in & quick plan",
    "compactWalkInDesc": "Schedule instantly from dashboard. No customer record needed.",
    "compactInvoiceTitle": "1-click invoicing",
    "compactInvoiceDesc": "Create invoices from your calendar. Instant payment link via Mollie or Stripe.",
    "compactLangTitle": "4 languages",
    "compactLangDesc": "Dutch, English, German and French. Customer sees their own language.",
    "desktopTitle": "Powerful on desktop.",
    "desktopDesc": "Full dashboard experience on your Mac or PC. Manage your entire business from one screen.",
    "desktopFeature1": "Complete dashboard overview",
    "desktopFeature2": "Drag & drop appointments",
    "desktopFeature3": "Smart route optimization",
    "desktopFeature4": "Calendar sync & integrations",
    "mobileTitle": "Your schedule, anywhere.",
    "mobileDesc": "Add PianoPlanner to your iPhone or Android homescreen. It works like a native app - even without internet.",
    "mobileFeature1Title": "Add to Homescreen",
    "mobileFeature1Desc": "One tap to install. No app store needed.",
    "mobileFeature2Title": "Works Offline",
    "mobileFeature2Desc": "View appointments and customers without internet.",
    "mobileFeature3Title": "Push Notifications",
    "mobileFeature3Desc": "Get alerts for new bookings and reminders.",
    "mobileFeature4Title": "Touch Gestures",
    "mobileFeature4Desc": "Swipe to navigate. Pull to refresh.",
    "ctaTitle": "Ready to streamline your schedule?",
    "ctaSubtitle": "Join piano technicians who save hours every week.",
    "ctaButton": "Start free trial",
    "footerTagline": "Smart scheduling for piano technicians",
    "startToday": "Start Free Today",
    "joinTechnicians": "Join piano technicians who save hours every week with smarter scheduling.",
    "yourName": "Your name",
    "password": "Password (min. 8 characters)",
    "createAccount": "Create Free Account",
    "accountCreated": "Account created!",
    "awaitingApproval": "Your account is awaiting approval. You'll receive an email when activated.",
    "installApp": "Install App",
    "gettingStarted": {
      "title": "Get Started with PianoPlanner",
      "subtitle": "Follow these 6 simple steps in the setup wizard. Your smart scheduling will be ready in 5 minutes.",
      "step1Title": "Business Details",
      "step1Desc": "Make your communication look professional.",
      "step1Item1": "Enter your business name and address.",
      "step1Item2": "Your address is auto-completed for accurate route planning.",
      "step2Title": "Your Services",
      "step2Item1": "Add your services (e.g., 'Tuning', 'Appraisal', 'Concert Service').",
      "step2Item2": "Set the default duration and price per service.",
      "step3Title": "Travel Preferences",
      "step3MaxTravel": "Max. Travel Time:",
      "step3MaxTravelDesc": "How long do you want to travel to a customer at most?",
      "step3Buffer": "Buffer:",
      "step3BufferDesc": "How much time between appointments?",
      "step4Title": "Connect Calendar",
      "step4Desc": "See your tuning appointments in your own trusted calendar.",
      "step4Google": "Two-way sync, most complete",
      "step4Apple": "Seamless integration",
      "step4Ical": "Works with any calendar app",
      "step5Title": "First Test Customer",
      "step5Item1": "Create a fictional customer (or yourself).",
      "step5Item2": "Add a piano to this customer.",
      "step5Tip": "💡 See how the customer file looks.",
      "step6Title": "Ready to go! 🎉",
      "step6Desc": "Your dashboard is now active. Here's what the colors mean:",
      "step6Green": "Efficiently planned appointments (little travel time)",
      "step6Red": "Far apart — use Smart Appointment!",
      "step6ShareLink": "Share your link:",
      "step6ShareLinkDesc": "Send customers your personal booking link and let your calendar fill itself."
    },
    "skipNav": "Skip to content",
    "creatingAccount": "Creating account...",
    "passwordTooShort": "Password must be at least 8 characters",
    "signupError": "Something went wrong.",
    "connectionError": "Connection error.",
    "trialInfo": "30-day free trial · No credit card needed · Get started right away",
    "notifTitle": "New Booking!",
    "notifText": "John Smith - Piano Tuning",
    "storyReminderTitle": "Never manually remind again",
    "storyReminderDesc": "PianoPlanner automatically sends tuning reminders at the right time. With smart follow-ups and a booking link so customers schedule their own appointment.",
    "storyReminderF1": "Automatic email based on service interval",
    "storyReminderF2": "Smart follow-ups: up to 4 reminders per cycle",
    "storyReminderF3": "Direct booking link in every reminder",
    "storyReminderF4": "Unsubscribe link — 100% GDPR compliant",
    "compactRouteFillTitle": "Route Fill",
    "compactRouteFillDesc": "Find nearby customers due for tuning. Send invitations in one click.",
    "demoPaid": "Paid ✓",
    "demoTuningDesc": "Tuning — Steinway & Sons D",
    "demoPaymentLink": "Online payment link",
    "demoPdfSent": "PDF sent",
    "demoNew": "NEW",
    "demoTravelSaved": "-2h travel time",
    "demoRevision": "Steinway Restoration",
    "demoHoursProgress": "17.5 / 26.0 hours • 4 tasks done",
    "demoStrings": "✓ Strings",
    "demoHammers": "✓ Hammers",
    "demoIntonation": "⏳ Voicing",
    "demoRegulation": "○ Regulation",
    "demoPianoDetail": "De Vries family • Last tuned: Jan 14, 2026",
    "demoTuningJan": "✓ Tuning Jan '26",
    "demoRegulationOct": "✓ Regulation Oct '25",
    "demoPhotos": "📎 Photos",
    "demoAutoReminders": "Automatic reminders",
    "demoReminder1": "Reminder 1",
    "demo14days": "+14 days",
    "demoReminder2": "Reminder 2",
    "demoBooked": "Booked!",
    "demoBookingInEmail": "Booking link in email",
    "tryFree": "Try free"
  },
  "launcher": {
    "agenda": "Agenda",
    "customers": "Customers",
    "pianos": "Pianos",
    "smart": "Smart",
    "share": "Share booking link",
    "tagline": "Your piano tunings, smartly scheduled"
  },
  "nav": {
    "home": "Home",
    "pricing": "Pricing",
    "dashboard": "Dashboard",
    "agenda": "Calendar",
    "customers": "Customers",
    "pianos": "Pianos",
    "travelReport": "Trips",
    "invoices": "Invoices",
    "routeOptimizer": "Route Optimizer",
    "settings": "Settings",
    "guide": "Guide",
    "support": "Support",
    "help": "Help",
    "logout": "Log out",
    "loggingOut": "Logging out...",
    "upgrade": "Upgrade",
    "admin": "Admin",
    "billing": "Subscription",
    "projects": "Projects",
    "pageHelp": "Help for this page",
    "helpDashboard": "Schedule appointments, use Smart Pick for smart suggestions, and manage your calendar with color codes and reminders.",
    "helpCustomers": "Manage customers, share personal booking links, view tuning status, and smartly fill routes with Route Fill.",
    "helpPianos": "Register pianos, set tuning intervals, track status with color codes, and view maintenance history.",
    "helpProjects": "Create workshop projects, manage tasks, link appointments, and track progress with deadlines.",
    "helpTravel": "Record travel costs per appointment, view monthly overviews, and export for your accounting.",
    "helpInvoices": "Create invoices, send by email, track payments, and customize the layout with your own details.",
    "helpSettings": "Configure your business details, email templates, tuning reminders, working hours, and calendar integrations.",
    "helpGuide": "View the complete guide with explanations of all PianoPlanner features.",
    "helpSupport": "Contact support for questions, bugs, or feature requests.",
    "reminders": "Reminders",
    "calendar": "Calendar"
  },
  "routeOptimizer": {
    "title": "Route Optimizer",
    "subtitle": "Optimize your schedule and save kilometers",
    "efficiencyScore": "Route Efficiency",
    "calculating": "Calculating...",
    "appointments": "Appointments",
    "totalKm": "Total km",
    "avgPerTrip": "Avg. per trip",
    "outliers": "Outliers",
    "suggestions": "Optimization Suggestions",
    "noSuggestions": "No suggestions",
    "planningOptimal": "Your schedule is already optimal!",
    "weekOverview": "Week Overview",
    "suggestedTime": "Suggested time",
    "accept": "Accept",
    "dismiss": "Dismiss",
    "rescheduled": "Appointment rescheduled!",
    "rescheduleError": "Error rescheduling",
    "noTimeAvailable": "No time available",
    "errorLoading": "Error loading data",
    "noData": "No data available",
    "noApiKey": "Google Maps API key not configured",
    "potentialSavings": "Save up to {km} km",
    "gradeA": "Excellent route planning!",
    "gradeB": "Good route planning",
    "gradeC": "Acceptable planning",
    "gradeD": "Could be improved",
    "gradeF": "Strong improvement possible",
    "outlier": "Outlier",
    "centroid": "Center {day}",
    "week": "Week",
    "month": "Month"
  },
  "days": {
    "monday": "Monday",
    "tuesday": "Tuesday",
    "wednesday": "Wednesday",
    "thursday": "Thursday",
    "friday": "Friday",
    "saturday": "Saturday",
    "sunday": "Sunday"
  },
  "smartWizard": {
    "title": "Smart Appointment",
    "button": "Smart Appointment",
    "step1": "Customer",
    "step2": "Piano",
    "step3": "Appointment",
    "dayStatus": "Day Status",
    "done": "Done",
    "busy": "Busy",
    "toDo": "To Do",
    "currentAppointment": "Current Appointment",
    "noActiveAppointment": "No active appointment",
    "nextAppointmentHere": "Your next appointment will appear here",
    "todayRemaining": "Today remaining",
    "toComplete": "To complete",
    "selectOrAddCustomer": "Select or add customer",
    "searchOrCreate": "Search for an existing customer or create a new one",
    "searchExistingOrCreate": "Search for an existing customer or create a new one",
    "searchExisting": "Search existing customer",
    "searchExistingCustomer": "Search existing customer",
    "searchPlaceholder": "Type name, email or phone number...",
    "searchCustomerPlaceholder": "Name, email or phone number...",
    "or": "or",
    "createNewCustomer": "Create new customer",
    "name": "Name",
    "email": "Email",
    "phone": "Phone",
    "address": "Address",
    "addressSearch": "Search address",
    "addressSearchPlaceholder": "Start typing for suggestions...",
    "street": "Street + number",
    "postalCode": "Postal code",
    "city": "City",
    "cityRequired": "City *",
    "notes": "Notes",
    "saveCustomer": "Save customer",
    "selectOrAddPiano": "Select or add piano",
    "selectExistingOrRegister": "Choose an existing piano or register a new one",
    "customerPianos": "Customer's pianos",
    "selectCustomerFirst": "Select a customer first",
    "addNewPiano": "Add new piano",
    "brand": "Brand",
    "model": "Model",
    "type": "Type",
    "typeUpright": "Piano",
    "typeGrand": "Grand piano",
    "typeDigital": "Digital piano",
    "buildYear": "Build year",
    "serialNumber": "Serial number",
    "finish": "Finish",
    "finishBlackPolish": "Black polish",
    "finishBlackMatte": "Black matte",
    "finishWhitePolish": "White polish",
    "finishWhiteMatte": "White matte",
    "finishWood": "Wood",
    "finishOther": "Other",
    "location": "Location",
    "floor": "Floor",
    "floorGround": "Ground floor",
    "floor1": "1st floor",
    "floor2": "2nd floor",
    "floor3": "3rd floor",
    "floorBasement": "Basement",
    "condition": "Condition",
    "conditionExcellent": "Excellent",
    "conditionGood": "Good",
    "conditionFair": "Fair",
    "conditionPoor": "Poor",
    "tuningInterval": "Tuning interval",
    "tuningPitch": "Tuning Pitch",
    "tuningPitchPlaceholder": "e.g. 440 Hz",
    "tuningData": "Tuning Data",
    "climateControl": "Climate Control",
    "climateControlActive": "Active",
    "interval6months": "6 months",
    "interval12months": "12 months",
    "interval18months": "18 months",
    "interval24months": "24 months",
    "intervalOnRequest": "On request",
    "savePiano": "Save piano",
    "aiSuggestions": "AI Suggestions",
    "smartRecommendations": "Smart recommendations based on location and calendar",
    "chooseService": "Choose service",
    "selectService": "-- Select service --",
    "smartestMoments": "Smartest moments",
    "calculatedBasedOn": "Automatically calculated based on your calendar and travel time",
    "findingBestMoments": "Finding best moments...",
    "selectServiceToSee": "Select a service to see the smartest moments",
    "loadMoreOptions": "Load more options",
    "chosenMoment": "Chosen moment",
    "sendConfirmationEmail": "Send confirmation email to customer",
    "sendConfirmationEmailTo": "Send confirmation email to",
    "createAppointment": "Create appointment",
    "customerHasNoPianos": "This customer has no pianos yet. Add one!",
    "monthsAgoTuned": "months ago tuned",
    "noTuningKnown": "No tuning known",
    "months": "months",
    "monthsAgo": "months ago",
    "pianoOverdueAlert": "This piano has been",
    "notTuned": "not tuned",
    "tuningRecommended": "A tuning is recommended!",
    "noTuningKnownForPiano": "No tuning known for this piano. This could be the first appointment.",
    "lastTuning": "Last tuning",
    "pianoWellMaintained": "Piano is well maintained.",
    "lastTuningWas": "Last tuning was",
    "lastTuningColon": "Last tuning:",
    "considerCheckup": "Consider a checkup.",
    "noRecentTuningKnown": "No recent tuning known. A first checkup is recommended.",
    "findingMoreOptions": "Finding more options...",
    "calculatingBestMoment": "Calculating best moment...",
    "smartSearching": "We're finding the best options for you...",
    "noMomentsFound": "No available moments found in the coming weeks. Check your calendar settings.",
    "errorFindingMoments": "Error finding available moments.",
    "bestChoice": "Best choice",
    "preferOtherMoment": "Prefer another moment? Choose yourself",
    "backToBestChoice": "Back to best choice",
    "viewRoute": "View route",
    "saved": "saved",
    "after": "After",
    "chooseOrRegister": "Choose an existing piano or register a new one",
    "customerNotesPlaceholder": "Optional notes about this customer...",
    "pianoNotesPlaceholder": "Special features, history, specific attention points...",
    "streetAndNumber": "Street and house number",
    "fullNamePlaceholder": "Full name",
    "customerNotInSystem": "Customer not yet in system",
    "addPianoForCustomer": "Add piano for customer",
    "locationOptional": "Location (optional)",
    "whatNeedsDone": "What needs to be done?",
    "basedOnCalendarAndTravel": "Based on your calendar and travel time",
    "filterMorning": "Morning",
    "filterAfternoon": "Afternoon",
    "filterEvening": "Evening",
    "tabCalendar": "Calendar",
    "tabCustomers": "Customers",
    "tabPianos": "Pianos",
    "tabSmart": "Smart",
    "enterName": "Please enter a name",
    "noPianosForCustomer": "No pianos registered for this customer yet",
    "enterBrand": "Please enter a brand",
    "calculatingSuggestions": "Calculating smart suggestions...",
    "noAvailableMoments": "No available moments found",
    "errorLoadingSuggestions": "Error loading suggestions",
    "appointmentPlanned": "Appointment planned!",
    "confirmationEmailSent": "Confirmation email has been sent",
    "goToCalendar": "Go to calendar",
    "badgeBest": "Best",
    "badgeWorkshop": "Workshop",
    "badgeRemote": "Remote",
    "badgeRoute": "Route",
    "badgeNearby": "Nearby",
    "noTravelTime": "No travel time",
    "daySunday": "Sunday",
    "dayMonday": "Monday",
    "dayTuesday": "Tuesday",
    "dayWednesday": "Wednesday",
    "dayThursday": "Thursday",
    "dayFriday": "Friday",
    "daySaturday": "Saturday",
    "nameRequired": "Name *",
    "emailPlaceholder": "email@example.com",
    "phonePlaceholder": "123-456-7890",
    "brandRequired": "Brand *",
    "brandPlaceholder": "e.g. Steinway",
    "modelPlaceholder": "e.g. Model D",
    "yearPlaceholder": "e.g. 1985",
    "locationPlaceholder": "If piano is at a different location",
    "filterAll": "All",
    "noCustomersFound": "No customers found",
    "errorSavingCustomer": "Error saving customer",
    "loadingPianos": "Loading pianos...",
    "errorLoadingPianos": "Error loading pianos",
    "errorSavingPiano": "Error saving piano",
    "fillAllFields": "Please fill in all required fields",
    "errorCreatingAppointment": "Error creating appointment",
    "travelTime": "Travel time",
    "furtherAway": "Further away",
    "preferOtherMomentCount": "Prefer another moment? {{count}} alternatives available"
  },
  "dashboard": {
    "title": "Dashboard",
    "howToUse": "How does it work?",
    "guideTitle": "Calendar - Guide",
    "guideSchedule": "Schedule appointment",
    "guideScheduleDesc": "Click on a time slot in the calendar or use the + button. Fill in customer, location, time and duration. Smart Pick automatically suggests the best pianos for maintenance.",
    "guideLocation": "Location types",
    "guideLocationDesc": "Choose 'At customer' for on-site appointments, or 'Workshop' to link hours to a restoration project. The linked hours are tracked automatically.",
    "guideSmartPick": "Smart Pick",
    "guideSmartPickDesc": "Smart Pick highlights recommended time slots with a yellow glow. This is based on tuning interval, last tuning and season. Overdue pianos get a warning.",
    "guideReminders": "Reminders",
    "guideRemindersDesc": "Send customers a confirmation email when scheduling (optional toggle). You can also set up automatic reminders. Customize email templates in Settings.",
    "guideColors": "Calendar color codes",
    "guideColorsDesc": "Appointments automatically get a color based on travel time:",
    "guideColorGreen": "Green — short travel time, efficient route",
    "guideColorOrange": "Orange — average travel time",
    "guideColorRed": "Red — long travel time",
    "guideColorDefault": "Default — no travel data available",
    "guideColorPrivate": "Purple — private appointment",
    "guideTip": "<strong>Tip:</strong> Use week view for overview or day view for details. Drag appointments to move them. Double-click to edit.",
    "currentAppointment": "Current Appointment",
    "dayStatus": "Day Status",
    "done": "Done",
    "inProgress": "In Progress",
    "toDo": "To Do",
    "upcomingToday": "Coming Up Today",
    "noActiveAppointment": "No active appointment",
    "nextAppointmentAppears": "Your next appointment will appear here",
    "toProcess": "To Process",
    "openPayments": "Open Payments",
    "openPaymentsHint": "View and invoice in Invoices →",
    "missingAddressesTitle": "{count} appointments without address",
    "missingAddressesSub": "Travel times cannot be calculated",
    "missingAddressesEdit": "Edit",
    "missingAddressesMore": "more",
    "payStatusPending": "To be invoiced",
    "payStatusInvoiced": "Invoice sent",
    "createInvoice": "Create invoice",
    "markPaid": "Mark as paid",
    "confirmMarkPaid": "Mark this payment as paid?",
    "paymentMarkedPaid": "Payment marked as paid",
    "todayAppointments": "Today's Appointments",
    "upcomingAppointments": "Upcoming Appointments",
    "noAppointments": "No appointments scheduled",
    "workshopStats": "Workshop / Field",
    "workshopLabel": "Workshop",
    "fieldLabel": "Field",
    "remoteLabel": "Remote",
    "mileageTitle": "Mileage Tracking",
    "mileageFullView": "Full overview",
    "mileageBusiness": "Business",
    "mileagePrivate": "Private",
    "mileageTotal": "Total km",
    "mileageYearTotal": "Year total",
    "mileageQuickAdd": "Add trip",
    "mileagePrivateTrip": "Private",
    "mileageRoundTrip": "Round trip ×2",
    "mileageEnterKm": "Enter km",
    "mileageTripAdded": "Trip added",
    "viewAll": "View all",
    "customer": "Customer",
    "searchCustomer": "Search customer...",
    "noCustomersFound": "No customers found",
    "selectCustomerFirst": "Select a customer first",
    "selectOrCreateCustomer": "Select a customer first or create a new one",
    "selectOrCreatePiano": "Select a piano first or create a new one",
    "selectAllFields": "Select all fields",
    "selectService": "-- Select service --",
    "sendTo": "Send to",
    "customerNoEmail": "Customer has no email address",
    "confirmationSentTo": "Confirmation email sent to",
    "applying": "Applying...",
    "applyRoute": "Apply route",
    "appointmentsUpdated": "{{count}} appointments updated!",
    "errorApplyingRoute": "Error applying route: ",
    "selectCustomerServiceDate": "Please select customer, service and date",
    "customerRequired": "Customer *",
    "nameRequired": "Name *",
    "selectOrCreateCustomerTitle": "Select or Create Customer",
    "newCustomerTitle": "New Customer",
    "addNewCustomerTitle": "Add new customer",
    "addCustomerButton": "Add customer",
    "actionSheetFillHereTitle": "Fill in here",
    "actionSheetFillHereSubtitle": "Create appointment at this time",
    "actionSheetSmartTitle": "Find best time",
    "actionSheetSmartSubtitle": "Let me find the best time",
    "actionSheetWorkshopTitle": "Workshop task",
    "actionSheetWorkshopSubtitle": "Internal task without customer",
    "actionSheetWalkInTitle": "Walk-in",
    "actionSheetWalkInSubtitle": "Customer comes to workshop",
    "workshopTaskTitle": "Workshop Task",
    "walkInTitle": "Walk-in Registration",
    "walkInSearchHint": "Search or create customer...",
    "workshopPeriodView": "Current view",
    "workshopPeriodWeek": "This week",
    "workshopPeriodMonth": "This month",
    "workshopHoursTotal": "Total hours",
    "wizardStepCustomer": "Customer",
    "wizardStepPiano": "Piano",
    "wizardStepServiceTime": "Service & Time",
    "emailPlaceholder": "email@example.com",
    "phonePlaceholder": "123-456-7890",
    "streetPlaceholder": "Street name 123",
    "pianoOptionalLabel": "Piano (optional)",
    "pianoPlaceholder": "e.g. Yamaha U1",
    "outsideHoursBeforeSingle": "↑ {{count}} appointment before {{hour}}:00",
    "outsideHoursBeforeMultiple": "↑ {{count}} appointments before {{hour}}:00",
    "outsideHoursAfterSingle": "↓ {{count}} appointment after {{hour}}:00",
    "outsideHoursAfterMultiple": "↓ {{count}} appointments after {{hour}}:00",
    "tuningReminders": "Tuning Reminders",
    "totalSent": "Total",
    "thisMonth": "This month",
    "optedOut": "Unsubscribed",
    "route": "Route",
    "sync": "Sync",
    "calcTravelTimesTitle": "Calculate travel times for all appointments",
    "syncCalendarTitle": "Sync with calendar",
    "streamline": "Streamline",
    "streamlineTitle": "Streamline Day",
    "streamlineDesc": "Shift appointments based on real Google Maps travel times",
    "streamlineLoading": "Calculating travel times...",
    "streamlineNoAppointments": "Not enough appointments",
    "streamlineMinTwo": "At least 2 appointments are needed to streamline.",
    "streamlineAlreadyOptimal": "Already optimal!",
    "streamlineNoChanges": "Your schedule is already well-organized. No changes needed.",
    "streamlineChanges": "changes",
    "streamlineTotal": "appointments total",
    "streamlineApply": "Apply",
    "streamlineApplied": "Schedule streamlined",
    "streamlineAppointmentsMoved": "appointments moved",
    "streamlineFailed": "Streamlining failed",
    "addCustomer": "Add customer",
    "addPianoTitle": "Add new piano",
    "savePiano": "Add piano",
    "createNewCustomer": "create new customer",
    "searchHint": "Search by name, or",
    "auto": "Auto",
    "calculatingRoute": "Calculating route...",
    "emailConfirmation": "Email confirmation",
    "endTime": "End time",
    "endTimeHint": "End time calculated: service duration + buffer",
    "newCustomerInline": "👤 New Customer",
    "newPianoInline": "🎹 New Piano",
    "noPianosAvailable": "No pianos available",
    "optimizeRoute": "Optimize Route",
    "pianosForAppointment": "Pianos for this appointment",
    "selectPianos": "Select Piano(s)",
    "selectPianosHint": "Select one or more pianos. Duration is calculated automatically.",
    "selectServiceEdit": "-- Select service --",
    "sendConfirmationLabel": "Send confirmation email to customer",
    "serviceAndTime": "Service & Time",
    "serviceRequired": "Service *",
    "startTimeRequired": "Start time *",
    "titleRequired": "Title *",
    "actionSheetUnavailableSubtitle": "Block day(s) for holiday or time off",
    "actionSheetUnavailableTitle": "Unavailable",
    "today": "Today",
    "yesterday": "Yesterday",
    "appointment": "Appointment",
    "sendConfirmationTo": "Send confirmation to",
    "teamBanner": "You have a Teams subscription — manage your tuners and view the team calendar",
    "teamDashboardBtn": "Team Dashboard",
    "titlePlaceholder": "e.g. Tune Steinway",
    "addressAutoFilled": "Address (auto-filled from customer)",
    "additionalInfoPlaceholder": "Additional info...",
    "titleExamplePlaceholder": "e.g. Piano tuning",
    "searchCustomerPlaceholder": "Search customer...",
    "noMoreAppointmentsToday": "No more appointments today",
    "enjoyFreeTime": "Enjoy your free time!",
    "blockDays": "Block day(s)",
    "blockDaysDesc": "Blocked days are not available for customers.",
    "fromDate": "From date",
    "untilDate": "Until date",
    "untilDateOptional": "(optional, for multiple days)",
    "reasonLabel": "Reason",
    "reasonOptional": "(optional)",
    "reasonPlaceholder": "e.g. Holiday, day off, doctor...",
    "blockButton": "Block",
    "unavailable": "Unavailable",
    "dayBlocked": "Day blocked",
    "daysBlocked": "days blocked",
    "unavailReason": "Reason (optional)",
    "unavailStart": "Start date",
    "unavailEnd": "End date (optional, for multiple days)",
    "prevNav": "Previous",
    "nextNav": "Next",
    "prevNavTitle": "Previous (←)",
    "nextNavTitle": "Next (→)",
    "routeAnalysisTitle": "Route Analysis",
    "timeInterval": "Time interval",
    "zoomControls": "Zoom (Cmd +/-)",
    "viewMode": "View (D/W/M)",
    "zoomOut": "Zoom out",
    "zoomIn": "Zoom in",
    "zoomOutTitle": "Zoom out (Cmd −)",
    "zoomInTitle": "Zoom in (Cmd +)",
    "resetZoomTitle": "Click to reset (Cmd 0)",
    "completedAppointments": "Completed appointments",
    "activeAppointments": "Active appointments",
    "pendingAppointments": "Pending appointments",
    "onSchedule": "On schedule",
    "busy": "Busy",
    "stillToDo": "Still to do",
    "oneHour": "1 hour",
    "calendarView": "Calendar view",
    "goToToday": "Go to today",
    "calendarSyncPromptTitle": "Sync your Google Calendar",
    "calendarSyncPromptDesc": "You signed in with Google. Would you like to connect your calendar so appointments sync automatically?",
    "calendarSyncPromptYes": "Yes, connect",
    "calendarSyncPromptLater": "Later",
    "bookingLeads": "Booking leads"
  },
  "customers": {
    "title": "Customers",
    "howToUse": "How does it work?",
    "guideTitle": "Customers - Guide",
    "guideAdd": "Add customer",
    "guideAddDesc": "Click 'New Customer' to create a customer. Fill in name, address and contact details. Pianos can be added later from the customer profile.",
    "guideBookingLink": "Personal booking link",
    "guideBookingLinkDesc": "Each customer gets a unique booking link. Share it with the customer so they can view and schedule appointments themselves. Find the link in the customer profile under 'Booking Link'.",
    "guideTheater": "Theater customers",
    "guideTheaterDesc": "Mark theaters, concert halls and regular customers as 'Theater'. These customers can see their complete appointment history and book new appointments directly via their booking link.",
    "guideReminders": "Tuning reminders",
    "guideRemindersDesc": "Set a tuning interval per piano (3, 6 or 12 months). PianoPlanner automatically sends an invitation email when it's time for maintenance.",
    "guideDuplicates": "Merge duplicates",
    "guideDuplicatesDesc": "Imported customers duplicated? Use 'Manage Duplicates' to merge duplicate customers. Pianos and appointments are automatically transferred.",
    "guideSmartFill": "Smart Fill Route",
    "guideSmartFillDesc": "Fill your route smartly: search by city or postal code to find nearby customers due for tuning. You'll see urgency, distance and when you last visited. Select customers and send invitations in one go.",
    "guideTip": "<strong>Tip:</strong> The 'Last tuning' column shows the piano that was tuned longest ago per customer — ideal to quickly schedule someone in between. Sort by this column to see the most urgent customers first.",
    "addCustomer": "New Customer",
    "manageDuplicates": "Manage Duplicates",
    "editCustomer": "Edit Customer",
    "deleteCustomer": "Delete Customer",
    "name": "Name",
    "namePlaceholder": "Full name",
    "email": "Email",
    "phone": "Phone",
    "address": "Address",
    "addressSearch": "Search address",
    "addressSearchPlaceholder": "Start typing for suggestions...",
    "street": "Street + No.",
    "postalCode": "Postal code",
    "city": "City",
    "type": "Customer Type",
    "typePrivate": "Private",
    "typeBusiness": "Business",
    "typeSchool": "School",
    "typeChurch": "Church",
    "typeTheater": "Theater",
    "notes": "Notes",
    "notesPlaceholder": "Internal notes...",
    "noNotes": "No notes",
    "billingAdmin": "Billing / Administration",
    "billingAdminDesc": "Send invoices to an accountant or administration office instead of the customer.",
    "billingName": "Attn. (administration)",
    "billingEmail": "Invoice email",
    "billingToAdmin": "Invoices to administration",
    "billingToAdminToggle": "Send invoices to administration",
    "billingToAdminToggleDesc": "Invoices go to the administration address, not to the customer",
    "paymentTerms": "Payment terms",
    "paymentTermsDefault": "Default (setting)",
    "preferredPayment": "Preferred payment method",
    "noPreference": "Not yet known",
    "withPiano": "With Piano",
    "needsTuning": "Tuning Due",
    "newThisMonth": "New this month",
    "noCustomers": "No customers yet",
    "searchPlaceholder": "Search customers...",
    "backToList": "Back to customers",
    "contactDetails": "Contact Details",
    "personalBookingLink": "Personal Booking Link",
    "bookingLinkHint": "Send this link to your customer so they can book appointments themselves.",
    "appointmentHistory": "Appointments",
    "scheduleAppointment": "Schedule Appointment",
    "call": "Call",
    "route": "Route",
    "noAddressKnown": "No address known",
    "nameRequired": "Please enter a name",
    "errorSavingCustomer": "Error saving customer",
    "errorSavingCustomerMsg": "Could not save customer: ",
    "errorCreatingCustomer": "Could not create customer. Please try again.",
    "loadingCustomers": "Loading customers...",
    "errorLoadingCustomers": "Could not load customers",
    "noCustomerId": "No customer ID provided",
    "errorLoadingCustomer": "Error loading customer",
    "customerNotFound": "Customer not found",
    "noContactDetails": "No contact details",
    "unknownPiano": "Unknown piano",
    "noAppointmentsYet": "No appointments yet",
    "emailLog": "Email log",
    "noEmailsYet": "No emails sent to this customer yet",
    "noPiano": "No piano",
    "lastTuning": "Last tuning",
    "noResults": "No results",
    "errorDeleting": "Error deleting",
    "tryDifferentSearch": "Try a different search term",
    "addFirstCustomer": "Add your first customer to get started",
    "typeStudio": "Studio",
    "typeHoreca": "Hospitality",
    "typeGovernment": "Government",
    "customersDeleted": "{{count}} customer(s) deleted",
    "contactInfo": "Contact Information",
    "streetPlaceholder": "Street name 123",
    "cityPlaceholder": "New York",
    "customerUpdated": "Customer updated",
    "customerAdded": "Customer added",
    "customerDeleted": "Customer deleted",
    "confirmDeleteNamed": "Are you sure you want to delete \"{{name}}\"?",
    "errorSaving": "Error saving",
    "emptyStateText": "Add your first customer to get started",
    "duplicatesFound": "Duplicates",
    "duplicatesTitle": "Possible Duplicates",
    "mergeCustomers": "Merge Customers",
    "mergeWarningTitle": "Warning:",
    "mergeWarning": "The other customer(s) will be deleted. Their pianos and appointments will be transferred to the primary customer.",
    "confirmMerge": "Merge",
    "merge": "Merge",
    "noDuplicates": "No duplicates found",
    "duplicatesBy": "Duplicates by",
    "selectFieldsToKeep": "Select the data to keep:",
    "fieldName": "Name",
    "fieldEmail": "Email",
    "fieldPhone": "Phone",
    "fieldAddress": "Address",
    "fieldType": "Type",
    "fieldNotes": "Notes",
    "mergeSuccess": "Customers merged successfully!",
    "mergeError": "Error merging customers",
    "mergeConfirmMsg": "Are you sure you want to merge these customers? All appointments and pianos will be combined. This action cannot be undone.",
    "keepThis": "Keep this",
    "appointments": "appointments",
    "pianoCount": "pianos",
    "export": "Export",
    "delete": "Delete",
    "deselect": "Deselect all",
    "convertAddresses": "Convert addresses",
    "fullName": "Full name",
    "postalCodePlaceholder": "12345",
    "cityRequired": "City *",
    "newCustomer": "New Customer",
    "customerCreated": "Customer created",
    "customerSaved": "Customer saved",
    "pianosAfterSave": "Pianos and appointments appear after saving the customer",
    "noCustomersFound": "No customers found",
    "fullNamePlaceholder": "Full name",
    "emailPlaceholder": "email@example.com",
    "phonePlaceholder": "06-12345678",
    "mapView": "Map view",
    "gridView": "Grid view",
    "customersOnMap": "Customers on the map",
    "customers": "customers",
    "onMap": "on map",
    "noCity": "No city",
    "viewCustomer": "View customer",
    "couldNotLoadMap": "Could not load map: ",
    "couldNotLoadMapData": "Could not load map data",
    "geocodingFailed": "Geocoding failed",
    "remainingToProcess": "{{count}} remaining to process",
    "done": "Done!",
    "retryGeocode": "Try again",
    "mergeFailed": "Merge failed",
    "mergeErrorOccurred": "Something went wrong during merge",
    "searchFailed": "Search failed",
    "connectionFailed": "Connection failed: ",
    "sendFailed": "Sending failed",
    "failed": "Failed",
    "customersWithoutCoordinates": "customers have no coordinates yet",
    "private": "Private",
    "business": "Business",
    "theater": "Theater",
    "school": "School",
    "church": "Church",
    "duplicatesFetchError": "Error fetching duplicates",
    "duplicateDetectionDesc": "Duplicate detection searches by email, name+phone and name only.",
    "clickToSelectPrimary": "Click on a customer to select as primary",
    "previous": "Previous",
    "next": "Next",
    "chooseFieldValues": "Choose which value to keep for each field:",
    "fieldStreet": "Street",
    "fieldCity": "City",
    "fieldPostalCode": "Postal code",
    "noContactInfo": "No contact info",
    "addFirstCustomerDesc": "Add your first customer to get started",
    "status": "Status",
    "edit": "Edit",
    "newAppointment": "New appointment",
    "customerCount": "customers",
    "confirmDelete": "Are you sure you want to delete this customer?",
    "exportSuccess": "Export successful",
    "selected": "selected"
  },
  "pianos": {
    "title": "Pianos",
    "howToUse": "How does it work?",
    "guideTitle": "Pianos - Guide",
    "guideAdd": "Add piano",
    "guideAddDesc": "Click 'New Piano' or add a piano from the customer profile. Fill in brand, model, serial number and location. Link the piano to a customer.",
    "guideInterval": "Set tuning interval",
    "guideIntervalDesc": "Set a tuning interval per piano: 3, 6 or 12 months. Or choose 'Customer initiates contact' if the customer calls themselves. The status color shows if maintenance is needed.",
    "guideStatus": "Status colors",
    "guideStatusDesc": "Green = on schedule, Yellow = tuning due soon, Red = overdue. Colors are calculated based on last tuning and the set interval.",
    "guideSmartPick": "Smart Pick",
    "guideSmartPickDesc": "When scheduling an appointment, Smart Pick shows which pianos need maintenance. Recommended time slots are highlighted based on interval and season.",
    "guideHistory": "Maintenance history",
    "guideHistoryDesc": "View the complete maintenance history per piano. All appointments are automatically logged with date, service type and any notes.",
    "guideTip": "<strong>Tip:</strong> Use the 'Overdue' or 'Never' filters to quickly find pianos that need attention. Click on a piano to view details and history.",
    "addPiano": "New Piano",
    "editPiano": "Edit Piano",
    "deletePiano": "Delete Piano",
    "brand": "Brand",
    "brandPlaceholder": "e.g. Steinway",
    "model": "Model",
    "serialNumber": "Serial number",
    "year": "Year",
    "yearPlaceholder": "Year",
    "type": "Type",
    "typeUpright": "Piano",
    "typeGrand": "Grand Piano",
    "upright": "Piano",
    "grand": "Grand Piano",
    "digital": "Digital",
    "condition": "Condition",
    "conditionExcellent": "Excellent",
    "conditionGood": "Good",
    "conditionFair": "Fair",
    "conditionPoor": "Poor",
    "excellent": "Excellent",
    "good": "Good",
    "fair": "Fair",
    "poor": "Poor",
    "finish": "Finish",
    "finishPlaceholder": "e.g. Black Gloss",
    "location": "Location",
    "locationPlaceholder": "e.g. Living room",
    "internalLocation": "Inventory location",
    "internalLocationPlaceholder": "e.g. Showroom, Workshop",
    "tuningInterval": "Tuning Interval",
    "tuningPitch": "Tuning Pitch",
    "tuningPitchPlaceholder": "e.g. 440 Hz",
    "tuningData": "Tuning Data",
    "climateControl": "Climate Control",
    "climateControlActive": "Active",
    "intervalNone": "Customer initiates contact",
    "interval3": "Every 3 months",
    "interval6": "Every 6 months",
    "interval12": "Yearly",
    "owner": "Owner",
    "noOwner": "No owner linked to this piano.",
    "notes": "Notes",
    "totalPianos": "Total Pianos",
    "onSchedule": "On Schedule",
    "dueSoon": "Due Soon",
    "overdue": "Overdue",
    "neverTuned": "Never tuned",
    "byBrand": "Pianos by Brand",
    "searchPlaceholder": "Search pianos...",
    "lastTuning": "Last tuning",
    "noPianos": "No pianos yet",
    "serviceHistory": "Service History",
    "addService": "Add Service",
    "serviceTuning": "Tuning",
    "serviceRepair": "Repair",
    "serviceRegulation": "Regulation",
    "serviceVoicing": "Voicing",
    "noServiceHistory": "No service history yet",
    "confirmDelete": "Are you sure you want to delete this piano?",
    "lastTuned": "Last tuned",
    "errorLoading": "Error loading data",
    "everyMonths": "Every {{months}} months",
    "noOwnerLinked": "No owner linked",
    "linkOwner": "Link Owner",
    "linkOwnerFirst": "Link an owner first",
    "dueSoonStatus": "Due Soon",
    "overdueStatus": "Overdue",
    "nextTuning": "Next",
    "planFirstTuning": "Plan the first tuning",
    "loadingHistory": "Loading history...",
    "noNotes": "No notes",
    "brandRequired": "Brand is required",
    "pianoUpdated": "Piano updated",
    "pianoAdded": "Piano added",
    "pianoDeleted": "Piano deleted",
    "thisPiano": "this piano",
    "confirmDeleteNamed": "Are you sure you want to delete \"{{name}}\"?",
    "selectDate": "Select a date",
    "tuningAdded": "Tuning added",
    "errorSavingPiano": "Error saving piano",
    "errorSavingPianoMsg": "Could not save piano: ",
    "loadingPianos": "Loading pianos...",
    "errorLoadingPianos": "Error loading pianos",
    "newPiano": "New piano",
    "totalPianosLabel": "Total pianos",
    "serviceOverdue": "Service overdue",
    "serviceSoon": "Service soon",
    "serviceOk": "Well maintained",
    "filterOverdue": "Overdue",
    "filterDueSoon": "Soon",
    "filterOk": "Good",
    "filterUnknown": "Unknown",
    "colStatus": "Status",
    "colBrandModel": "Brand & Model",
    "colType": "Type",
    "colSerialNumber": "Serial number",
    "colCustomer": "Customer",
    "colLocation": "Location",
    "colLastTuning": "Last tuned",
    "colNextService": "Next service",
    "colActions": "Actions",
    "noResults": "No pianos found",
    "tryDifferentSearch": "Try a different search or filter",
    "serviceStatus": "Service Status",
    "pianoDetails": "Piano Details",
    "scheduleService": "Schedule Appointment",
    "viewCustomer": "View Customer",
    "nextService": "Next Service",
    "serviceInterval": "Service Interval",
    "statusUnknown": "Unknown",
    "statusGood": "Good",
    "monthsLate": "{{count}} mo late",
    "withinMonths": "Within {{count}} mo",
    "noCustomer": "No customer",
    "typePiano": "Piano",
    "typeGrandPiano": "Grand",
    "typeDigitalPiano": "Digital",
    "schedule": "Schedule",
    "edit": "Edit",
    "selected": "selected",
    "exportCsv": "Export",
    "bulkLastTuning": "Last tuning",
    "bulkTuningTitle": "Update last tuning date",
    "bulkTuningDesc": "pianos will be updated",
    "lastTuningDate": "Last tuning date",
    "bulkApply": "Apply",
    "selectDateFirst": "Please select a date first",
    "bulkTuningSuccess": "Pianos updated!",
    "loading": "Loading...",
    "noPianoId": "No piano ID provided",
    "pianoNotFound": "Piano not found",
    "errorLoadingPiano": "Could not load piano",
    "noRemarks": "No remarks",
    "noServiceInfo": "No service information available",
    "monthsLateForService": "{{count}} months late for service",
    "serviceSoonNeeded": "Service needed soon",
    "monthsUntilService": "{{count}} months until service",
    "monthsAgoTuned": "Tuned {{count}} months ago",
    "addFirstService": "Add a first service",
    "basicInfo": "Basic Information",
    "locationMaintenance": "Location & Maintenance",
    "emptyStateText": "Add your first piano to get started",
    "photos": "Photos",
    "addPhoto": "Add photo",
    "deletePhoto": "Delete photo",
    "photoAdded": "Photo added",
    "photosAdded": "{{count}} photos added",
    "photoDeleted": "Photo deleted",
    "maxPhotos": "Maximum 10 photos per piano",
    "uploadFailed": "Photo upload failed",
    "deleteFailed": "Delete failed",
    "linkCustomer": "Link customer",
    "changeCustomer": "Change",
    "unlinkCustomer": "Unlink",
    "selectCustomer": "Select customer",
    "customerLinked": "Customer linked",
    "customerUnlinked": "Owner unlinked",
    "floor": "Floor",
    "floor1": "1st floor",
    "floor2": "2nd floor",
    "floor3": "3rd floor",
    "floor4plus": "4th or higher",
    "scheduleAppointment": "Schedule appointment",
    "basement": "Basement",
    "blackPolish": "Black high gloss",
    "blackSatin": "Black satin",
    "groundFloor": "Ground floor",
    "mahogany": "Mahogany",
    "needsRepair": "Needs repair",
    "oak": "Oak",
    "other": "Other",
    "piano": "Piano",
    "walnut": "Walnut",
    "whitePolish": "White high gloss",
    "modelPlaceholder": "e.g. U1, Model D",
    "typeDigital": "Digital Piano",
    "typeRequired": "Type *",
    "featurePopupTitle": "New!",
    "featurePopupBody": "You can now select pianos that are due for service and send tuning invitations directly from this page. Use the checkboxes to select pianos and click 'Send invitation' in the action bar.",
    "featurePopupGotIt": "Got it!",
    "customerRequired": "Please select a customer first",
    "errorSaving": "Could not save piano",
    "noPianosForCustomer": "No pianos for this customer yet",
    "notesPlaceholder": "Additional information...",
    "yearExample": "e.g. 1985",
    "brandExample": "e.g. Yamaha",
    "modelExample": "e.g. U1",
    "savePiano": "Save piano",
    "optional": "Optional",
    "sendInvitation": "Send tuning invitation",
    "colInvitation": "Invitation",
    "notSent": "Not sent",
    "scheduledOn": "Scheduled {{date}}",
    "somethingWentWrong": "Something went wrong",
    "updateError": "Something went wrong while updating",
    "pianosSkipped": "{{count}} piano(s) skipped",
    "noValidPianos": "No valid pianos to send invitations.\nCheck if customers have an email address and tuning interval.",
    "maxInvitations": "Maximum 20 invitations at a time. Select fewer pianos.",
    "confirmSendInvitations": "Do you want to send {{count}} tuning invitation(s)?",
    "invitationsSent": "{{count}} invitation(s) sent",
    "invitationsFailed": "{{failed}} failed",
    "sendFailed": "Sending failed",
    "sendError": "Error sending invitations",
    "noEmail": "no email",
    "intervalZero": "tuning interval is 0",
    "perPage25": "25 per page",
    "perPage50": "50 per page",
    "perPage100": "100 per page",
    "allItems": "All",
    "csvBrand": "Brand",
    "csvModel": "Model",
    "csvType": "Type",
    "csvSerialNumber": "Serial number",
    "csvCustomer": "Customer",
    "csvLocation": "Location",
    "csvLastTuned": "Last tuned",
    "csvStatus": "Status",
    "pianoDataUnavailable": "Piano data not available",
    "noCustomerLinked": "No customer linked",
    "confirmUnlinkOwner": "Unlink owner from this piano?",
    "ownerUnlinked": "Owner unlinked",
    "unlinkFailed": "Unlinking failed",
    "linkFailed": "Linking failed",
    "customerSelected": "Customer selected",
    "noDetails": "No details",
    "errorDeleting": "Error deleting",
    "noCustomersFound": "No customers found",
    "confirmDeletePhoto": "Delete photo?",
    "buildYear": "Build year"
  },
  "appointments": {
    "title": "Appointments",
    "appointment": "Appointment",
    "newAppointment": "New Appointment",
    "editAppointment": "Edit Appointment",
    "deleteAppointment": "Delete Appointment",
    "deleteTitle": "Delete Appointment",
    "deleteConfirm": "Are you sure you want to delete this appointment? This action cannot be undone.",
    "date": "Date",
    "time": "Time",
    "duration": "Duration",
    "service": "Service",
    "customer": "Customer",
    "piano": "Piano",
    "location": "Location",
    "notes": "Notes",
    "status": "Status",
    "scheduled": "Scheduled",
    "completed": "Completed",
    "cancelled": "Cancelled",
    "appointmentCreated": "Appointment created!",
    "appointmentDeleted": "Appointment deleted",
    "createAppointment": "Create Appointment",
    "thisAppointment": "this appointment",
    "confirmDeleteNamed": "Are you sure you want to delete \"{{title}}\"?",
    "errorCreatingAppointment": "Error creating appointment: ",
    "errorSavingAppointment": "Could not save appointment: ",
    "errorDeletingAppointment": "Could not delete appointment. Please try again.",
    "slotTaken": "This time slot is already taken. Please choose another time.",
    "travelWarningPrevious": "Warning: only {{gapMinutes}} min travel time from previous appointment (minimum {{neededMinutes}} min recommended)",
    "travelWarningNext": "Warning: only {{gapMinutes}} min travel time to next appointment (minimum {{neededMinutes}} min recommended)",
    "travelWarningBoth": "Warning: insufficient travel time to surrounding appointments (minimum {{neededMinutes}} min recommended)",
    "fillTitleStartEnd": "Please fill in title, start and end time",
    "errorMovingAppointment": "Could not move appointment: ",
    "errorMovingAppointmentRetry": "Could not move appointment. Please try again.",
    "call": "Call",
    "whatsapp": "WhatsApp",
    "message": "Message",
    "route": "Route",
    "done": "Done",
    "markDone": "Mark as done",
    "privateAppointment": "Private appointment",
    "privateAppointmentHint": "Not business-related, counts for separate mileage tracking",
    "privatePurpose": "Trip purpose",
    "privatePurposePlaceholder": "e.g. Shopping, doctor, family...",
    "locationType": "Where?",
    "locationCustomer": "At customer",
    "locationWorkshop": "Workshop",
    "locationRemote": "Remote",
    "atWorkshop": "Workshop",
    "atCustomer": "At customer",
    "atRemote": "Remote",
    "workshopAddress": "Your workshop address",
    "noTravelNeeded": "No travel needed",
    "travelToWorkshop": "To workshop",
    "travelFromWorkshop": "From workshop",
    "workshopAppointment": "Workshop appointment",
    "workshopTimer": "Workshop timer",
    "startsIn": "Starts in",
    "elapsed": "elapsed",
    "remaining": "remaining",
    "timerDone": "Finished",
    "viewProject": "View project",
    "linkedProject": "Linked project",
    "workshopCount": "workshop",
    "customerCount": "customer",
    "remoteCount": "remote",
    "project": "Project",
    "noProject": "No project (loose workshop hours)",
    "newProject": "New",
    "remainingHours": "Remaining",
    "hours": "hours",
    "selectProject": "Select a project",
    "couldNotLoad": "Could not load appointments",
    "enjoyYourDay": "Enjoy your day!",
    "noAppointmentsToday": "No appointments today",
    "tryAgain": "Try again",
    "schedule": "Schedule"
  },
  "services": {
    "title": "Services",
    "addService": "Add Service",
    "editService": "Edit Service",
    "deleteService": "Delete Service",
    "name": "Name",
    "duration": "Duration",
    "price": "Price",
    "description": "Description",
    "minutes": "minutes"
  },
  "pwa": {
    "loading": "Loading...",
    "swipeToClose": "Swipe down to close",
    "pullToRefresh": "Pull to refresh",
    "releaseToRefresh": "Release to refresh",
    "refreshing": "Refreshing...",
    "syncCompleted": "Sync completed!",
    "syncedCalendars": "calendar(s) synced",
    "noCalendarsLinked": "No calendars linked",
    "goToSettings": "Go to Settings to link calendars",
    "syncError": "Sync error",
    "couldNotSync": "Could not sync. Check your internet connection",
    "launcher": {
      "agenda": "Agenda",
      "agendaDesc": "Manage appointments",
      "customers": "Customers",
      "customersDesc": "Customer overview",
      "pianos": "Pianos",
      "pianosDesc": "Instruments & data",
      "smart": "Smart Plan",
      "smartDesc": "AI-powered suggestions",
      "sync": "Sync",
      "share": "Share booking link",
      "sectionTitle": "Get started",
      "invoices": "Invoices",
      "invoicesDesc": "Create and send invoices"
    },
    "youAreOffline": "You are offline",
    "backOnline": "Back online",
    "dataStoredLocally": "Data is stored locally",
    "dataSynced": "Data synchronized",
    "syncFailed": "Sync failed",
    "sync": "Sync",
    "itemsSynced": "items synced",
    "itemsFailedSync": "items failed to sync",
    "wakeLockActive": "Screen stays on",
    "wakeLockReleased": "Screen lock released",
    "updateAvailable": "New version available",
    "update": "Update",
    "later": "Later",
    "logoutConfirm": "Are you sure you want to log out?",
    "tabs": {
      "agenda": "Agenda",
      "customers": "Customers",
      "pianos": "Pianos",
      "smart": "Smart"
    },
    "agenda": {
      "today": "Today",
      "day": "Day",
      "week": "Week",
      "month": "Month",
      "view": "View",
      "done": "Done",
      "pending": "pending",
      "pickDate": "Choose date"
    },
    "customerDetail": {
      "customers": "Customers",
      "customer": "Customer",
      "edit": "Edit",
      "call": "Call",
      "route": "Route",
      "email": "Email",
      "whatsapp": "WhatsApp",
      "copy": "Copy",
      "addPiano": "Add Piano",
      "newPiano": "New Piano",
      "invoice": "Invoice",
      "invoiceTitle": "Quick Invoice",
      "openTasks": "Open appointments",
      "addService": "Add service",
      "addLine": "+ Add line",
      "selectService": "Choose a service...",
      "customDescription": "Description",
      "quantity": "Quantity",
      "price": "Price",
      "vatRate": "VAT",
      "subtotal": "Subtotal",
      "vat": "VAT",
      "total": "Total",
      "sendInvoice": "Send",
      "sending": "Sending...",
      "invoiceSent": "Invoice sent!",
      "invoiceError": "Error sending invoice",
      "noEmail": "This customer has no email address. Please add one first.",
      "noLines": "Add at least one line to the invoice.",
      "removeLine": "Remove",
      "invoiceProOnly": "Invoicing is available from the Pro plan.",
      "backToCustomers": "Back to customers",
      "scheduleAppointment": "Schedule appointment",
      "confirmDeleteCustomer": "Are you sure you want to delete this customer? This cannot be undone.",
      "customerCreated": "Customer created",
      "customerDeleted": "Customer deleted",
      "couldNotSaveCustomer": "Could not save customer",
      "couldNotDeleteCustomer": "Could not delete customer",
      "confirmDeletePiano": "Are you sure you want to delete \"{{name}}\"?",
      "pianoDeleted": "Piano deleted",
      "couldNotDeletePiano": "Could not delete piano",
      "emailStatusFailed": "Failed",
      "emailStatusSent": "Sent",
      "emailLoadError": "Error loading email log",
      "noSubject": "(no subject)",
      "emailTypeConfirmation": "Confirmation",
      "emailTypeReminder": "Reminder",
      "emailTypeCancellation": "Cancellation",
      "emailTypeBooking": "Booking",
      "emailTypeInvitation": "Tuning invitation",
      "emailTypeWelcome": "Welcome email",
      "emailTypeReschedule": "Reschedule",
      "projectStatusPlanning": "Planning",
      "projectStatusActive": "Active",
      "projectStatusPaused": "Paused",
      "projectStatusCompleted": "Completed",
      "projectStatusCancelled": "Cancelled",
      "customerDataUnavailable": "Customer data not available",
      "pianoNotFound": "Piano not found",
      "linkCopied": "Link copied to clipboard",
      "contactInfo": "Contact Information",
      "personalBookingLink": "Personal Booking Link",
      "pianos": "Pianos",
      "notes": "Notes",
      "pianoData": "Piano Details",
      "extraInfo": "Extra Information",
      "noCustomerId": "No customer ID provided",
      "customerNotFound": "Customer not found",
      "loadError": "Error loading customer",
      "noContactInfo": "No contact information",
      "noPianosRegistered": "No pianos registered",
      "sendInvitation": "Send invitation",
      "serialNr": "Serial no",
      "lastTuning": "Last tuning",
      "noEmailAddress": "Customer has no email address",
      "confirmSendInvitation": "Send tuning invitation for \"{{name}}\"?",
      "invitationSent": "Invitation sent!",
      "sendError": "Error sending",
      "editPiano": "Edit Piano",
      "copied": "Copied!"
    },
    "customerForm": {
      "back": "Back",
      "newCustomer": "New Customer",
      "editCustomer": "Edit Customer",
      "customerDetails": "Customer details",
      "name": "Name",
      "fullName": "Full name",
      "emailLabel": "Email",
      "emailPlaceholder": "email address",
      "phoneLabel": "Phone",
      "phonePlaceholder": "phone number",
      "searchAddress": "Search address...",
      "extra": "Extra",
      "type": "Type",
      "typeRegular": "Individual",
      "typeTheater": "Theater / Venue",
      "typeSchool": "School",
      "notes": "Notes",
      "notesPlaceholder": "Remarks, special notes...",
      "save": "Save",
      "saving": "Saving...",
      "saved": "Saved!",
      "saveFailed": "Save failed",
      "nameRequired": "Name is required",
      "customerNotFound": "Customer not found",
      "loadError": "Error loading customer",
      "saveError": "Error saving",
      "customerUpdated": "Customer updated ✓",
      "customerCreated": "Customer created ✓",
      "confirmDeleteTitle": "Are you sure you want to delete this customer?",
      "deleteCustomer": "Delete Customer",
      "cancel": "Cancel",
      "deleteFailed": "Delete failed",
      "customerDeleted": "Customer deleted",
      "deleteError": "Error deleting",
      "customer": "Customer",
      "customers": "Customers",
      "agenda": "Calendar",
      "pianos": "Pianos",
      "smart": "Smart"
    },
    "pianoForm": {
      "back": "Back",
      "newPiano": "New Piano",
      "editPiano": "Edit Piano",
      "pianoDetails": "Piano Details",
      "brand": "Brand",
      "brandPlaceholder": "e.g. Steinway, Yamaha",
      "model": "Model",
      "modelPlaceholder": "Model name/number",
      "serialNumber": "Serial number",
      "serialNumberPlaceholder": "Serial number",
      "buildYear": "Year built",
      "buildYearPlaceholder": "e.g. 2015",
      "type": "Type",
      "typeUpright": "Piano",
      "typeGrand": "Grand Piano",
      "extraInfo": "Additional Information",
      "finish": "Finish",
      "finishPlaceholder": "e.g. Black high gloss",
      "locationLabel": "Location",
      "locationPlaceholder": "e.g. Living room",
      "floor": "Floor",
      "floorPlaceholder": "e.g. 2nd floor",
      "conditionExcellent": "Excellent",
      "conditionGood": "Good",
      "conditionFair": "Fair",
      "conditionPoor": "Poor",
      "conditionNeedsRepair": "Needs repair",
      "notes": "Notes",
      "notesPlaceholder": "Details, remarks...",
      "pianoForCustomer": "Piano for",
      "linkSubtitle": "Assign this piano to a customer",
      "searchCustomer": "Search customer...",
      "loading": "Loading...",
      "noContext": "No customer or piano specified",
      "pianoNotFound": "Piano not found",
      "brandRequired": "Brand is required",
      "pianoSaved": "Piano saved ✓",
      "loadError": "Error loading piano",
      "save": "Save",
      "saving": "Saving...",
      "saved": "Saved!",
      "saveFailed": "Save failed",
      "saveError": "Error saving",
      "confirmDeleteTitle": "Are you sure you want to delete this piano?",
      "deletePiano": "Delete Piano",
      "cancel": "Cancel",
      "deleteFailed": "Delete failed",
      "pianoDeleted": "Piano deleted",
      "deleteError": "Error deleting",
      "photosLoadFailed": "Failed to load photos",
      "uploadFailed": "Upload failed",
      "maxPhotos": "Maximum 10 photos per piano",
      "photosRemaining": "remaining",
      "photosAdded": "added",
      "photoUploadFailed": "Photo upload failed",
      "confirmDeletePhoto": "Delete photo?",
      "photoDeleted": "Photo deleted"
    },
    "pianosList": {
      "cancel": "Cancel",
      "sendInvitation": "Send invitation",
      "edit": "Edit",
      "delete": "Delete",
      "deleteFailed": "Delete failed",
      "searchPianos": "Search pianos...",
      "filterAll": "All",
      "filterPiano": "Piano",
      "filterGrand": "Grand Piano",
      "filterDue": "Tuning due",
      "selected": "selected",
      "schedule": "Schedule",
      "owner": "Owner",
      "details": "Details",
      "noNotes": "No notes",
      "photos": "Photos",
      "addPhoto": "Photo",
      "serviceHistory": "Service history",
      "noHistory": "No service history",
      "loadingHistory": "Loading history...",
      "couldNotLoadHistory": "Could not load history",
      "noDetails": "No details",
      "noOwner": "No owner linked",
      "noOwnerLabel": "No owner",
      "unknownPiano": "Unknown piano",
      "serialNumber": "Serial number",
      "type": "Type",
      "buildYear": "Year built",
      "color": "Color",
      "lastTuning": "Last tuning",
      "tuningStatus": "Tuning status",
      "name": "Name",
      "phone": "Phone",
      "city": "City",
      "unknown": "Unknown",
      "scheduled": "Scheduled",
      "overdue": "Overdue",
      "dueSoon": "Due soon",
      "onTime": "On time",
      "today": "Today",
      "years": "yr",
      "months": "mo",
      "days": "d",
      "loadError": "Error loading",
      "loadErrorText": "Could not load pianos. Try again.",
      "noResults": "No results",
      "noPianos": "No pianos",
      "noResultsText": "Try a different search term or filter",
      "noPianosText": "Add your first piano to get started",
      "selectAllDue": "Select all due",
      "invitationSent": "Invitation",
      "notYetInvited": "Not yet invited",
      "noEmail": "No email",
      "intervalIsZero": "Tuning interval is 0",
      "chooseCustomer": "Choose a customer",
      "noCustomersFound": "No customers found",
      "confirmDelete": "Are you sure you want to delete \"%s\"?\n\nThis cannot be undone.",
      "pianoDeleted": "Piano deleted ✓",
      "deleteError": "Error deleting",
      "appointment": "Appointment",
      "service": "Service",
      "noValidPianos": "No valid pianos to send invitations",
      "maxInvitations": "Maximum 20 invitations at once",
      "confirmSendInvitations": "Do you want to send %d invitation(s)?",
      "sending": "Sending...",
      "invitationsSent": "invitation(s) sent",
      "failed": "failed",
      "sendError": "Error sending invitations",
      "skippedNoEmailOrInterval": "piano(s) skipped: no email or interval",
      "noEmailLabel": "customer has no email",
      "intervalZeroLabel": "tuning interval is 0",
      "maxPhotos": "Maximum 10 photos",
      "remaining": "remaining",
      "photosAdded": "added",
      "uploadFailed": "Upload failed",
      "confirmDeletePhoto": "Delete photo?",
      "photoDeleted": "Photo deleted"
    }
  },
  "settings": {
    "title": "Settings",
    "subtitle": "Manage your calendar, email, account and business settings.",
    "loading": "Loading...",
    "syncOverview": "Sync Overview",
    "hideGuide": "Hide Guides",
    "hideGuideDesc": "Hide the 'How does it work?' sections on all pages",
    "sidebar": {
      "calendar": "Calendar",
      "googleCalendar": "Google Calendar",
      "microsoftCalendar": "Microsoft 365",
      "appleCalendar": "Apple iCloud",
      "displaySettings": "Display Settings",
      "icalFeed": "iCal Feed",
      "email": "Email",
      "customDomain": "Custom Domain",
      "emailNotifications": "Notifications",
      "emailTemplates": "Templates",
      "emailLog": "Sent emails",
      "notifications": "Notifications",
      "pushNotifications": "Push Notifications",
      "business": "Business",
      "companyDetails": "Company Details",
      "bookingSettings": "Booking Settings",
      "teamManagement": "Team Management",
      "integrations": "Integrations",
      "accounting": "Accounting Integration",
      "travelSettings": "Travel & Service Area",
      "mileageTracking": "Mileage Tracking",
      "regionalSettings": "Regional Settings",
      "bookingPlanning": "Booking & Planning",
      "onlineBooking": "Online Booking",
      "availability": "Availability",
      "travelArea": "Travel & Service Area",
      "communication": "Communication",
      "services": "Services",
      "manageServices": "Manage Services",
      "account": "Account",
      "profile": "Profile",
      "subscription": "Subscription",
      "language": "Language",
      "importData": "Import Data"
    },
    "cards": {
      "password": "Password",
      "companyAvailability": "Company & Availability",
      "resetData": "Start Over",
      "dangerZone": "Danger Zone"
    },
    "export": {
      "title": "Data Export",
      "statusLabel": "Backup & Download",
      "description": "Download all your business data as a backup. The file contains customers, pianos, appointments, service history and settings.",
      "tipTitle": "Tip: make regular backups",
      "tipText": "Store the file in a safe place, such as your own cloud storage or an external drive. This way you always have a copy of your business data.",
      "customers": "Customers",
      "pianos": "Pianos",
      "appointments": "Appointments",
      "serviceRecords": "Service records",
      "downloadBtn": "Download Backup",
      "preparing": "Preparing export...",
      "success": "Backup downloaded!",
      "error": "Export failed"
    },
    "vat": {
      "enterNumber": "Please enter a VAT number first",
      "validating": "Validating...",
      "valid": "Valid VAT number",
      "invalid": "Invalid VAT number",
      "reverseCharge": "Reverse charge (0%) — VAT shifted to buyer",
      "serviceDown": "EU VIES service temporarily unavailable. Please try again later.",
      "error": "Error validating VAT number",
      "verified": "Verified via EU VIES",
      "validateBtn": "Validate"
    },
    "iban": {
      "enterNumber": "Please enter an IBAN first",
      "invalidFormat": "Invalid IBAN format",
      "wrongLength": "IBAN for {country} must be {length} characters",
      "invalid": "Invalid IBAN — check the digits",
      "valid": "Valid IBAN",
      "validateBtn": "Validate"
    },
    "mileage": {
      "title": "Mileage Tracking",
      "description": "Tax-proof mileage administration with vehicle, odometer readings and trip registration.",
      "year": "Year:",
      "totalKm": "Total km",
      "businessKm": "Business km",
      "privateKm": "Private km",
      "business": "Business",
      "private": "Private",
      "trips": "trips",
      "manualTrips": "Manual trips",
      "monthlyBreakdown": "Monthly Breakdown",
      "exportCSV": "Export CSV",
      "exportPDF": "Export PDF (tax-proof)",
      "pdfComingSoon": "PDF export coming soon!",
      "vehicleTitle": "Vehicle",
      "licensePlate": "License plate",
      "vehicleName": "Vehicle",
      "saveVehicle": "Save",
      "vehicleSaved": "Vehicle saved",
      "vehicleError": "Error saving vehicle",
      "odometerTitle": "Odometer Readings",
      "odometerDate": "Date",
      "odometerReading": "Reading (km)",
      "noReadings": "No odometer readings entered yet.",
      "selectDate": "Select a date",
      "enterReading": "Enter a valid odometer reading",
      "readingSaved": "Odometer reading saved",
      "addTripTitle": "Add manual trip",
      "tripDate": "Date",
      "tripDistance": "Distance (km)",
      "tripFrom": "From",
      "tripTo": "To",
      "tripPurpose": "Trip purpose",
      "tripPrivate": "Private trip",
      "tripRoundTrip": "Round trip (×2)",
      "addTrip": "Add trip",
      "manualTripsTitle": "Manual trips",
      "tripAdded": "Trip added",
      "tripDeleted": "Trip deleted",
      "confirmDelete": "Are you sure you want to delete this trip?",
      "enterDistance": "Enter a distance",
      "noData": "No mileage data loaded",
      "generatingPdf": "Generating PDF...",
      "pdfReady": "PDF downloaded",
      "pdfError": "Error generating PDF",
      "exportPrefix": "mileage-log",
      "dashboardLink": "Quickly add trips? Use the mileage widget on the Dashboard →",
      "pdfTitle": "Mileage Log",
      "pdfGeneratedOn": "Generated on",
      "pdfAdministration": "mileage administration",
      "pdfCompanyDetails": "Company details",
      "pdfVehicle": "Vehicle",
      "pdfLicensePlate": "License plate",
      "pdfStartOdometer": "Start odometer",
      "pdfEndOdometer": "End odometer",
      "pdfActuallyDriven": "Actually driven",
      "pdfTotal": "Total",
      "pdfBusiness": "Business",
      "pdfPrivate": "Private",
      "pdfMonthlyOverview": "Monthly Overview",
      "pdfMonth": "Month",
      "pdfTripLog": "Trip Log",
      "pdfDate": "Date",
      "pdfType": "Type",
      "pdfFrom": "From",
      "pdfTo": "To",
      "pdfPurpose": "Purpose",
      "pdfOutward": "Outward",
      "pdfReturn": "Return",
      "pdfSource": "Source",
      "pdfPrint": "Print / Save PDF",
      "pdfLegendOverride": "Manually corrected distance",
      "pdfLegendManual": "Manually added trip",
      "pdfFooterNote": "This document was automatically generated by PianoPlanner on",
      "pdfTaxNote": "Keep this document with your fiscal records as required by tax authorities.",
      "pdfMonthNames": "January,February,March,April,May,June,July,August,September,October,November,December"
    },
    "calendar": {
      "googleTitle": "Google Calendar",
      "googleDesc": "Two-way sync between PianoPlanner and Google Calendar.",
      "betaDisclaimer": "Google Calendar sync is currently in beta. Google is reviewing our app for verification. During this period, you may see a warning screen when connecting. This is normal and your data is safe.",
      "syncDirection": "Sync direction",
      "twoWaySync": "Two-way sync",
      "twoWayGoogleDesc": "PianoPlanner ↔ Google (recommended)",
      "exportOnly": "Export only",
      "exportOnlyGoogleDesc": "PianoPlanner → Google",
      "importOnly": "Import only",
      "importOnlyGoogleDesc": "Google → PianoPlanner",
      "calendarLabel": "Calendar",
      "enableSync": "✓ Enable Sync",
      "lastSync": "Last sync:",
      "never": "Never",
      "historyImport": "Import historical calendar data",
      "historyImportDesc": "Import appointments up to 3 years back from your Google Calendar",
      "connectGoogle": "Connect Google Account",
      "googleLoginRequired": "Google Calendar sync requires you to log in with your Google account.",
      "googleLoginRequiredDesc": "Log out and choose 'Sign in with Google' on the login screen. Your existing data will be preserved.",
      "googleLoginRequiredBtn": "Log out and sign in with Google",
      "displayTitle": "Calendar Display",
      "displayDesc": "Configure which hours to show in your calendar view.",
      "startHour": "Start hour",
      "endHour": "End hour",
      "outsideHoursInfo": "Appointments outside these hours will show an indicator at the top/bottom of the calendar.",
      "microsoftTitle": "Microsoft 365 / Outlook",
      "microsoftDesc": "Sync with Outlook.com, Hotmail or Microsoft 365 work calendar.",
      "microsoftConnected": "Connected!",
      "microsoftSynced": "Your Microsoft Calendar is synced.",
      "selectCalendar": "Select Calendar:",
      "connectMicrosoft": "Connect Microsoft Account",
      "appleTitle": "Apple Calendar",
      "appleDesc": "Sync with iCloud / Apple Calendar.",
      "appleIdLabel": "Apple ID",
      "appPasswordLabel": "App-Specific Password",
      "twoWayAppleDesc": "PianoPlanner ↔ Apple (recommended)",
      "exportOnlyAppleDesc": "PianoPlanner → Apple",
      "importOnlyAppleDesc": "Apple → PianoPlanner",
      "feedTitle": "Calendar Subscription",
      "feedDesc": "Subscribe to your calendar from any app (read-only iCal feed).",
      "feedUrlLabel": "Subscription URL:",
      "copy": "Copy",
      "feedInstructionsTitle": "Add to your calendar:",
      "feedInstructionApple": "Apple: File → New Calendar Subscription",
      "feedInstructionGoogle": "Google: Settings → Add Calendar → From URL",
      "feedInstructionOutlook": "Outlook: Add Calendar → Subscribe from web",
      "syncRange": "Sync Range:",
      "startDate": "Start Date",
      "monthsAhead": "Months Ahead",
      "saveRange": "Save Range",
      "feedAutoRefresh": "Calendar apps refresh automatically (usually hourly).",
      "enableFeed": "Enable Feed",
      "disableFeed": "Disable",
      "newLink": "New Link",
      "calendarExportTitle": "Export / Backup",
      "calendarExportDesc": "Download your calendar as .ics file for backup or import.",
      "from": "From",
      "to": "To",
      "downloadIcs": "Download .ics",
      "exportHint": "Leave dates empty to export 1 year back and forward.",
      "inactive": "Inactive",
      "setupInstructions": "Setup instructions:",
      "appleId": "Apple ID",
      "appSpecificPassword": "App-Specific Password",
      "connect": "Connect",
      "addToCalendar": "Add to your calendar:",
      "exportTitle": "Export / Backup",
      "exportDesc": "Download your calendar as .ics file for backup or import.",
      "disable": "Disable",
      "singleProviderTitle": "One calendar active",
      "singleProviderMessage": "You can only use one calendar integration at a time",
      "singleProviderError": "You can only connect one calendar provider. Disconnect the current one first."
    },
    "email": {
      "configTitle": "Email Configuration",
      "usingPianoplanner": "Using PianoPlanner",
      "ownEmailConfigured": "Own email active",
      "ownEmailActive": "Own email",
      "emailsSentFrom": "Emails will be sent from:",
      "notVerified": "Not verified",
      "testToActivate": "Test the connection to activate your settings",
      "pianoplannerEmail": "PianoPlanner email",
      "emailsViaPianoplannerDesc": "Emails are sent on your behalf via noreply@pianoplanner.com",
      "configDesc": "Send emails from your own address or use PianoPlanner's default.",
      "sendVia": "Send emails via:",
      "viaPianoplanner": "PianoPlanner (default)",
      "viaPianoplannerDesc": "Emails sent on your behalf via noreply@pianoplanner.com",
      "viaOwn": "My own email",
      "viaOwnDesc": "Emails sent from your personal email address",
      "provider": "Email provider",
      "providerGmail": "Gmail / Google Workspace",
      "providerIcloud": "iCloud / Apple Mail",
      "providerOutlook": "Outlook / Microsoft 365",
      "providerCustom": "Other (manual setup)",
      "emailAddress": "Email address",
      "appPassword": "App-specific password",
      "appPasswordHint": "Not your regular password. Follow instructions above.",
      "smtpHost": "SMTP Host",
      "port": "Port",
      "sslTls": "SSL/TLS (required for port 465)",
      "senderName": "Sender name (optional)",
      "senderName2": "Sender name",
      "replyEmail": "Email address (for replies)",
      "senderDetails": "Your sender details",
      "providerTransip": "TransIP",
      "advancedSmtp": "Advanced: custom SMTP server (optional)",
      "advancedSmtpDesc": "By default, emails are sent via our secure server with your name as sender. Want to send emails directly via your own mail server? Enter your SMTP details below.",
      "smtpDisclaimerTitle": "Note about using your own SMTP",
      "smtpDisclaimerText": "When using your own email server, you will receive bounce messages (undeliverable mail notifications) directly. These are automatic messages when a customer email address no longer exists or is incorrect. This is normal and not a PianoPlanner error — simply update the customer's email address.",
      "test": "Test",
      "notificationsTitle": "Notifications",
      "notificationsDesc": "Automatic emails to customers for appointments.",
      "confirmations": "Confirmation emails",
      "confirmationsDesc": "Send when appointment is booked",
      "reminders": "Reminder emails",
      "remindersDesc": "Send before appointment",
      "sendReminder": "Send reminder",
      "hoursBefore": "hours before",
      "reminder1Label": "Reminder 1",
      "reminder2Label": "Reminder 2",
      "reminderExplanation": "Customers automatically receive an email reminder before their appointment. Set one or two reminders — ideal when you plan far ahead, so customers still have time to reschedule.",
      "reminderTip": "💡 Tip: combine e.g. 7 days + 24 hours, so customers have time to reschedule if they can't make it.",
      "reminderOff": "Off",
      "hours2": "2 hours before",
      "hours6": "6 hours before",
      "hours12": "12 hours before",
      "hours24": "24 hours before",
      "hours48": "48 hours before",
      "days5": "5 days before",
      "days7": "7 days before",
      "reminder2MustBeShorter": "Reminder 2 must be shorter than reminder 1 (closer to the appointment)",
      "cancellations": "Cancellation emails",
      "cancellationsDesc": "Notify customer when cancelled",
      "newBookingAlerts": "New booking alerts",
      "newBookingAlertsDesc": "Get notified when customers book",
      "sendTest": "Send Test",
      "bccToSelf": "Copy to myself (BCC)",
      "bccToSelfDesc": "Automatically receive a copy of all emails sent to customers (confirmations, reminders, cancellations, invoices). Useful to verify what your customers receive.",
      "templatesTitle": "Email Templates",
      "templatesDesc": "Customize the content of automatic emails with your own text and style.",
      "loading": "Loading...",
      "openEditor": "Open Template Editor",
      "editorHint": "Use the full editor for a better experience with live preview.",
      "editTemplateTitle": "Edit Email Template",
      "subject": "Subject",
      "availableVariables": "Available variables",
      "contentHtml": "Content (HTML)",
      "templateActive": "Template active",
      "preview": "Preview",
      "refresh": "Refresh",
      "clickRefreshPreview": "Click \"Refresh\" to see a preview",
      "resetToDefault": "Reset to default",
      "cancel": "Cancel"
    },
    "emailLog": {
      "title": "Sent emails",
      "description": "Overview of all sent emails. Check if messages were delivered successfully.",
      "searchPlaceholder": "Search by email address or subject...",
      "refresh": "Refresh",
      "colStatus": "Status",
      "colRecipient": "Recipient",
      "colSubject": "Subject",
      "colDate": "Date",
      "statusSent": "Sent",
      "statusFailed": "Failed",
      "empty": "No emails sent yet",
      "loading": "Loading...",
      "loadError": "Could not load email log",
      "totalEmails": "email(s)",
      "selectAllPage": "Select page",
      "deleteSelected": "Delete selected",
      "selectedCount": "{count} selected",
      "confirmDelete": "Are you sure you want to delete {count} email(s)?",
      "deleted": "{count} email(s) deleted",
      "deleteError": "Could not delete emails"
    },
    "tuningReminders": {
      "title": "Automatic Tuning Reminders",
      "description": "Automatically send tuning reminders to customers when their piano is due for service. Based on the service interval per piano.",
      "enable": "Enable automatic reminders",
      "enableDesc": "Customers will automatically be reminded when their piano is due for tuning",
      "advanceDays": "Send first reminder",
      "daysBeforeDue": "days before tuning is due",
      "followupInterval": "Follow-up interval",
      "daysBetweenFollowups": "days between follow-up reminders",
      "maxFollowups": "Maximum reminders per cycle",
      "remindersPer": "reminders per cycle",
      "sendTime": "Send time",
      "sendTimeDesc": "hour (emails will be sent around this time)",
      "statsTotalSent": "Total sent",
      "statsThisMonth": "This month",
      "statsOptedOut": "Unsubscribed",
      "howItWorks": "How does it work?",
      "howStep1": "Reminders are only sent for pianos with a set service interval (> 0)",
      "howStep2": "The first reminder is sent X days before the scheduled tuning",
      "howStep3": "If no response, follow-ups are sent at the configured interval",
      "howStep4": "The cycle stops automatically when the customer books an appointment or unsubscribes",
      "howStep5": "You can customize the email template via the Template Editor",
      "sendTest": "Send test",
      "editTemplate": "Edit template",
      "saved": "Tuning reminder settings saved",
      "saveError": "Error saving tuning reminder settings",
      "testSent": "Test reminder sent to your own email address. Check your inbox.",
      "testError": "Could not send test reminder",
      "active": "Active",
      "inactive": "Inactive",
      "previewTitle": "Heads up",
      "previewWarning": "There are currently {pianoCount} pianos from {customerCount} customers due for tuning. After saving, reminders will be sent. Pianos imported less than 24 hours ago will be skipped.",
      "previewNone": "There are currently no pianos due for tuning. Newly imported pianos are only included after 24 hours."
    },
    "account": {
      "subscriptionTitle": "Subscription",
      "subscriptionDesc": "Manage your subscription, view invoices and update payment method.",
      "manageSubscription": "Manage Subscription",
      "importTitle": "Import Data",
      "importTypes": "Contacts, Calendar, CSV",
      "importDesc": "Import existing data from other apps or files.",
      "importContacts": "Contacts",
      "importContactsDesc": "vCard, CSV\niPhone, Google, Outlook",
      "importCalendar": "Calendar",
      "importCalendarDesc": "iCal (.ics)\nApple, Google, Outlook",
      "importGazelle": "Gazelle Import",
      "importGazelleDesc": "Step by step\nwith detailed report",
      "cleanNotes": "Clean Up Notes",
      "cleanNotesDesc": "Remove duplicate text and repeated lines from customer and piano notes. Useful after importing data that may contain merge artifacts.",
      "cleanAllNotes": "Clean All Notes",
      "timezone": "Timezone",
      "timezoneDesc": "Set your timezone for accurate appointment scheduling and calendar sync.",
      "autoDetect": "Auto-detect",
      "saveTimezone": "Save Timezone",
      "name": "Name",
      "profileEmail": "Email",
      "loginMethod": "Login method",
      "saveProfile": "Save Profile",
      "currentPassword": "Current password",
      "newPassword": "New password",
      "confirmPassword": "Confirm password",
      "minChars": "Minimum 6 characters",
      "changePassword": "Change Password",
      "interfaceLanguage": "Interface language",
      "deleteTitle": "Delete your account permanently",
      "deleteWarning": "This action cannot be undone. All your data, appointments, customers, and settings will be permanently deleted.",
      "deleteAccountBtn": "Delete Account",
      "deleteAccountConfirmTitle": "Delete Account",
      "deleteAccountPermanent": "This action is permanent!",
      "deleteAccountConfirmMsg": "Your account, all appointments, customers, pianos, services, and settings will be permanently deleted and cannot be recovered.",
      "deleteConfirmPrompt": "To confirm deletion, please enter your password:",
      "deleteConfirmPassword": "Password",
      "deleteConfirmBtn": "Delete My Account",
      "email": "Email",
      "password": "Password",
      "permanentAction": "This action is permanent!",
      "deleteModalWarning": "Your account, all appointments, customers, pianos, services, and settings will be permanently deleted and cannot be recovered.",
      "confirmDeletion": "To confirm deletion, please enter your password:",
      "deleteMyAccount": "Delete My Account",
      "resetTitle": "Delete all data, keep your settings",
      "resetDescription": "Remove all your customers, pianos, appointments, invoices and service history. Your account, settings, services, email templates and subscription remain unchanged.",
      "resetWillDelete": "Will be deleted:",
      "resetCustomers": "All customers",
      "resetPianos": "All pianos and photos",
      "resetAppointments": "All appointments",
      "resetInvoices": "All invoices",
      "resetServiceHistory": "All service history",
      "resetMileage": "Mileage records",
      "resetWillKeep": "Will be kept:",
      "keepAccount": "Your account & profile",
      "keepSettings": "Company settings & booking page",
      "keepServices": "Your services & prices",
      "keepTemplates": "Email templates",
      "keepSubscription": "Subscription & calendar sync",
      "resetDataBtn": "Start Over",
      "resetConfirmWarning": "This will delete all your data!",
      "resetConfirmDetail": "All customers, pianos, appointments, invoices and service history will be permanently deleted. Your settings and account will be kept.",
      "resetConfirmPrompt": "Type RESET to confirm:",
      "resetConfirmLabel": "Confirmation",
      "confirmReset": "Start Over",
      "resetTypeReset": "Type RESET to confirm",
      "resetting": "Resetting...",
      "resetSuccess": "All data has been deleted. Your settings and account are preserved.",
      "resetFailed": "Failed to reset data"
    },
    "company": {
      "logoTitle": "Company Logo",
      "logoDesc": "Upload your logo to personalize emails and your booking page.",
      "uploadLogo": "Upload Logo",
      "removeLogo": "Remove",
      "basicInfo": "Basic Information",
      "searchAddress": "Search address",
      "searchAddressPlaceholder": "Start typing to search...",
      "saveCompany": "Save Company"
    },
    "booking": {
      "desc": "Let customers schedule appointments online via a shareable link.",
      "linkDisabled": "Booking link is disabled",
      "yourBookingUrl": "Your booking URL:",
      "copyLink": "Copy",
      "previewLink": "Preview",
      "enableBookingLink": "Enable booking link",
      "pageTitle": "Page title",
      "pageTitlePlaceholder": "Schedule an appointment",
      "minAdvance": "Minimum advance",
      "maxAdvance": "Maximum advance",
      "requiredFields": "Required fields",
      "welcomeMessage": "Welcome message (optional)",
      "welcomePlaceholder": "Message shown on your booking page",
      "availableServices": "Available services for booking",
      "availableServicesDesc": "Select which services customers can book via the public link",
      "weeklyAvailability": "Weekly Availability",
      "weeklyAvailabilityHint": "Set your working hours for each day.",
      "saveAvailability": "Save Availability",
      "theaterAvailability": "Theater Availability",
      "theaterAvailabilityHint": "Optional separate availability for theaters/venues. Enable this to allow certain customers to book outside normal hours.",
      "proFeature": "Pro Feature",
      "theaterProMsg": "Theater availability is only available with a Pro subscription.",
      "upgradeToPro": "Upgrade to Pro",
      "enableTheater": "Enable theater availability",
      "theaterBookingWindow": "Theater Booking Window",
      "theaterBookingWindowHint": "Different advance booking times for theater customers. Useful for allowing last-minute bookings.",
      "saveTheater": "Save Theater Availability",
      "yourUrl": "Your booking URL:",
      "preview": "Preview",
      "enableLink": "Enable booking link",
      "selectServices": "Select which services customers can book via the public link",
      "theaterHint": "Optional separate availability for theaters/venues. Enable this to allow certain customers to book outside normal hours.",
      "theaterWindow": "Theater Booking Window",
      "theaterWindowHint": "Different advance booking times for theater customers. Useful for allowing last-minute bookings.",
      "1day": "1 day",
      "2days": "2 days",
      "3days": "3 days",
      "4days": "4 days",
      "5days": "5 days",
      "1week": "1 week",
      "2weeks": "2 weeks",
      "1month": "1 month",
      "2months": "2 months",
      "3months": "3 months",
      "6months": "6 months",
      "9months": "9 months",
      "1year": "1 year",
      "noMinimum": "No minimum (immediate)",
      "1hour": "1 hour",
      "2hours": "2 hours",
      "4hours": "4 hours",
      "8hours": "8 hours (same day)"
    },
    "travel": {
      "title": "Travel Settings",
      "desc": "Set how far you want to drive and how much break time you want between appointments.",
      "enableLimits": "Enable travel limits",
      "bookingRadius": "Service area for online bookings",
      "bookingRadiusDesc": "How far away can customers live and still book online?",
      "maxTravelBooking": "Maximum travel time for bookings",
      "noLimit": "No limit",
      "noPreference": "No preference",
      "farMessage": "Message for far locations",
      "farMessageHint": "This message is shown to customers who live too far away to book online.",
      "routeEfficiency": "Travel time between appointments",
      "routeEfficiencyDesc": "How long do you want to drive between two customers on the same day at most? The system uses this preference to plan your day efficiently.",
      "maxBetween": "Travel time between appointments",
      "maxBetweenInfo": "💡 This only affects <strong>smart suggestions</strong>. Customers who live further away can always be scheduled manually or book through your booking link. This setting controls which times the system automatically suggests — not which customers you can accept.",
      "maxBetweenAdviceNone": "⚪ <strong>No preference set.</strong><br>▸ The system still plans smartly: nearby customers get <strong>priority</strong> and days with multiple customers in the same area are grouped together<br>▸ No customers are pushed down — everyone gets a fair chance<br>▸ Ideal if you have a large service area or want to give the system maximum flexibility",
      "maxBetweenAdvice10": "🔴 <strong>Very tight — max. ~10 min.</strong><br>▸ Customers < 10 min drive get <strong>priority</strong><br>▸ Customers 10–15 min drive appear <strong>lower in the list</strong><br>▸ Customers > 15 min drive appear <strong>only if no better options are available</strong><br>▸ Ideal for one neighbourhood or small town",
      "maxBetweenAdvice15": "🟠 <strong>Tight — max. ~15 min.</strong><br>▸ Customers < 15 min drive get <strong>priority</strong><br>▸ Customers 15–22 min drive appear <strong>lower in the list</strong><br>▸ Customers > 22 min drive appear <strong>only if no better options are available</strong><br>▸ Suitable for one city or small municipality",
      "maxBetweenAdvice20": "🟡 <strong>Compact — max. ~20 min.</strong><br>▸ Customers < 20 min drive get <strong>priority</strong><br>▸ Customers 20–30 min drive appear <strong>lower in the list</strong><br>▸ Customers > 30 min drive appear <strong>only if no better options are available</strong><br>▸ Your city and immediate surroundings",
      "maxBetweenAdvice25": "🟢 <strong>Medium — max. ~25 min.</strong><br>▸ Customers < 25 min drive get <strong>priority</strong><br>▸ Customers 25–37 min drive appear <strong>lower in the list</strong><br>▸ Customers > 37 min drive appear <strong>only if no better options are available</strong><br>▸ A small region. Good if you serve a few municipalities",
      "maxBetweenAdvice30": "🟢 <strong>Standard — max. ~30 min.</strong> ⭐ Most popular<br>▸ Customers < 30 min drive get <strong>priority</strong><br>▸ Customers 30–45 min drive appear <strong>lower in the list</strong><br>▸ Customers > 45 min drive appear <strong>only if no better options are available</strong><br>▸ Good balance — full days in the same region, without missing customers",
      "maxBetweenAdvice35": "🔵 <strong>Relaxed — max. ~35 min.</strong><br>▸ Customers < 35 min drive get <strong>priority</strong><br>▸ Customers 35–52 min drive appear <strong>lower in the list</strong><br>▸ Customers > 52 min drive appear <strong>only if no better options are available</strong><br>▸ Wider region. You miss few customers",
      "maxBetweenAdvice40": "🔵 <strong>Wide — max. ~40 min.</strong><br>▸ Customers < 40 min drive get <strong>priority</strong><br>▸ Customers 40–60 min drive appear <strong>lower in the list</strong><br>▸ Customers > 60 min drive appear <strong>only if no better options are available</strong><br>▸ Large service area. Only truly long trips (1 hour+) rank lower",
      "maxBetweenAdvice45": "🔵 <strong>Large — max. ~45 min.</strong><br>▸ Customers < 45 min drive get <strong>priority</strong><br>▸ Customers 45–67 min drive appear <strong>lower in the list</strong><br>▸ Customers > 67 min drive appear <strong>only if no better options are available</strong><br>▸ Suitable for an entire province",
      "maxBetweenAdvice60": "⚪ <strong>Maximum — max. ~60 min.</strong><br>▸ Customers < 60 min drive get <strong>priority</strong><br>▸ Customers 60–90 min drive appear <strong>lower in the list</strong><br>▸ Customers > 90 min drive appear <strong>only if no better options are available</strong><br>▸ Virtually everything is suggested",
      "travelInfoHint": "The system plans your day as efficiently as possible. Nearby customers get priority, further customers appear lower in the suggestions.",
      "analyzeBtn": "Analyze my customer base",
      "analyzeLoading": "Analyzing customer base...",
      "analyzeNotEnough": "Not enough customers with address data to analyze. At least 5 customers with an address required.",
      "analyzeTitle": "Analysis of your customer base",
      "analyzeCustomers": "customers analyzed",
      "analyzeTopCities": "Largest cities",
      "analyzeMedian": "Median distance between customers",
      "analyzeCoverage": "Percentage of customer pairs within each setting",
      "analyzeRecommended": "recommended",
      "analyzeAdvice": "Recommendation",
      "analyzeExplain": "This covers most trips between consecutive customers. Customers further away still appear in your suggestions but ranked lower.",
      "analyzeApply": "Apply this setting",
      "analyzeError": "Something went wrong during analysis. Please try again.",
      "saveTravelSettings": "Save Travel Settings",
      "30min": "30 minutes",
      "45min": "45 minutes",
      "1hour": "1 hour",
      "90min": "1.5 hours",
      "2hours": "2 hours",
      "15min": "15 minutes",
      "10min": "10 minutes",
      "20min": "20 minutes",
      "25min": "25 minutes",
      "35min": "35 minutes",
      "40min": "40 minutes",
      "bookingRadiusHint": "How far away can customers live and still book online?",
      "bookingRadiusExplain": "🗺️ This is the boundary of your service area for online bookings. Customers who live further than this travel time cannot book online — they'll see a message to contact you. You can always schedule them manually.",
      "maxBookingTravel": "Maximum travel time for bookings",
      "routeEfficiencyHint": "How long do you want to drive between two customers on the same day at most? The system uses this preference to plan your day efficiently.",
      "saveTravel": "Save Travel Settings",
      "trafficPrediction": "Traffic Prediction",
      "trafficPredictionHint": "Use expected traffic conditions when calculating travel times between appointments.",
      "enableTrafficPrediction": "Enable traffic prediction",
      "trafficPredictionExplain": "🚦 Travel times account for expected traffic at the time of the appointment. During rush hours, longer travel times are calculated for more realistic scheduling."
    },
    "services": {
      "title": "Services",
      "desc": "Manage the services you offer. Buffer times are included in scheduling.",
      "newService": "+ New Service",
      "newServiceTitle": "New Service",
      "serviceName": "Service name *",
      "serviceNamePlaceholder": "e.g. Tune grand piano",
      "duration": "Duration (min) *",
      "rate": "Rate *",
      "bufferBefore": "Buffer before (min)",
      "bufferAfter": "Buffer after (min)",
      "description": "Description",
      "descriptionPlaceholder": "Short description",
      "calendarColor": "Calendar color",
      "customerTypes": "Available for customer types",
      "customerTypesDesc": "Select which customer types can book this service via their personal link. Leave all unchecked for all types.",
      "cancel": "Cancel",
      "loadingServices": "Loading services..."
    },
    "sync": {
      "notConnected": "Not connected",
      "needsReauth": "Reconnect required",
      "active": "Active",
      "notSynced": "not synchronized",
      "connectedSyncOff": "Connected (sync off)",
      "pendingInQueue": "sync(s) in queue",
      "failed": "failed",
      "forceSync": "Force Sync"
    },
    "googleCalendar": "Google Calendar Sync",
    "appleCalendar": "Apple Calendar Sync",
    "emailNotifications": "Email Notifications",
    "bookingLink": "Public Booking Link",
    "companyProfile": "Company Profile",
    "language": "Language",
    "selectLanguage": "Select language",
    "save": "Save",
    "saved": "Saved!",
    "connect": "Connect",
    "disconnect": "Disconnect",
    "connected": "Connected",
    "notConnected": "Not connected",
    "enabled": "Enabled",
    "disabled": "Disabled",
    "selectTimezone": "Please select a timezone",
    "couldNotSaveTimezone": "Could not save timezone",
    "timezoneSaved": "🌍 Timezone saved!",
    "nameEmailRequired": "Name and email are required",
    "couldNotSaveProfile": "Could not save profile",
    "profileSaved": "Profile saved!",
    "fillAllPasswordFields": "Please fill in all password fields",
    "passwordsDoNotMatch": "New passwords do not match",
    "passwordMinLength": "Password must be at least 6 characters",
    "couldNotChangePassword": "Could not change password",
    "passwordChanged": "Password changed!",
    "modalNotFound": "Error: Modal not found",
    "editService": "Edit Service",
    "newService": "New Service",
    "serviceNotFound": "Service not found. Try refreshing the page.",
    "serviceUpdated": "Service updated!",
    "serviceAdded": "Service added!",
    "couldNotSaveService": "Could not save service",
    "confirmDeleteService": "Are you sure you want to delete this service?",
    "serviceDeleted": "Service deleted",
    "couldNotDeleteService": "Could not delete service",
    "enterAppleCredentials": "Please enter your Apple ID and app-specific password",
    "connectingToApple": "Connecting to Apple Calendar...",
    "appleCalendarConnected": "🍎 Apple Calendar connected successfully!",
    "appleCalendarSavedWait": "Account saved successfully! It may take a few seconds for your calendars to appear.",
    "selectCalendarFirst": "Please select a calendar first",
    "appleSyncEnabled": "🍎 Apple Calendar sync enabled!",
    "failedToEnableSync": "Failed to enable sync: ",
    "syncingWithApple": "Syncing with Apple Calendar...",
    "confirmDisconnectMicrosoft": "Are you sure you want to disconnect Microsoft Calendar?",
    "microsoftDisconnected": "Microsoft Calendar disconnected",
    "failedToDisconnect": "Failed to disconnect: ",
    "logoUploaded": "Logo uploaded successfully!",
    "uploadLogo": "Upload logo",
    "logoRequirements": "PNG, JPG or GIF. Max 2MB recommended. Preferably use an image of max 400×400px with a transparent background.",
    "uploadFailed": "Upload failed: ",
    "confirmRemoveLogo": "Are you sure you want to remove your logo?",
    "logoRemoved": "Logo removed",
    "couldNotRemoveLogo": "Could not remove logo: ",
    "fileTooLarge": "File is too large. Maximum size is 5MB.",
    "couldNotSaveSettings": "Could not save settings",
    "bookingSettingsSaved": "Booking settings saved!",
    "linkCopied": "Link copied to clipboard!",
    "confirmCleanNotes": "This will clean up all customer and piano notes by removing duplicate text and repeated lines.\n\nDo you want to continue?",
    "couldNotLoadTemplate": "Could not load template",
    "fillSubjectAndContent": "Please fill in subject and content",
    "saveFailed": "Save failed",
    "templateSaved": "Template saved!",
    "saveFailedWithError": "Save failed: ",
    "confirmResetTemplate": "Are you sure you want to reset this template to the default version? Your changes will be removed.",
    "resetFailed": "Reset failed",
    "templateReset": "Template reset to default",
    "resetFailedWithError": "Reset failed: ",
    "testEmailSending": "Test email is being sent...",
    "sendFailed": "Send failed",
    "testEmailSent": "✅ Test email sent to your email address!",
    "testEmailFailed": "❌ Test email failed: ",
    "syncEnabled": "Sync enabled!",
    "syncDisclaimer": "Please note: when enabling calendar synchronisation, appointment data will be shared with Google (external processor). PianoPlanner is not responsible for how Google processes your data. See our Data Processing Agreement (Art. 3.3) for more information.\n\nDo you want to continue?",
    "syncDisclaimerApple": "Please note: when connecting Apple Calendar, appointment data will be shared with Apple (external processor). PianoPlanner is not responsible for how Apple processes your data. See our Data Processing Agreement (Art. 3.3) for more information.\n\nDo you want to continue?",
    "somethingWentWrong": "Something went wrong",
    "errorSavingSettings": "Error saving settings",
    "syncing": "Syncing...",
    "syncComplete": "Sync complete! Items synchronized.",
    "syncFailed": "Sync failed",
    "errorSyncing": "Error syncing",
    "syncNow": "Sync now",
    "confirmDisconnectGoogle": "Are you sure you want to disconnect Google Calendar? Your sync will be disabled and you will need to log in with Google again to reconnect.",
    "googleDisconnected": "Google Calendar disconnected",
    "couldNotConnectApple": "Could not connect to Apple Calendar",
    "connectionError": "Connection error. Please try again.",
    "confirmDisconnectApple": "Are you sure you want to disconnect Apple Calendar?",
    "appleDisconnected": "Apple Calendar disconnected",
    "couldNotDisconnect": "Could not disconnect",
    "errorDisconnecting": "Error disconnecting",
    "couldNotEnableSync": "Could not enable sync",
    "singleProviderTitle": "Another calendar active",
    "singleProviderMessage": "Your calendar is connected to {provider}. Disconnect {provider} first in the settings above before switching.",
    "singleProviderError": "You already have an active sync with another calendar. Disconnect the current calendar first.",
    "errorSyncingApple": "Error syncing with Apple Calendar",
    "calendarSelectionSaved": "Calendar selection saved!",
    "couldNotSaveCalendarSelection": "Could not save calendar selection",
    "emailSettingsSaved": "Email settings saved",
    "errorSavingEmailSettings": "Error saving email settings",
    "sending": "Sending...",
    "testEmailSentCheckInbox": "Test email sent! Check your inbox.",
    "couldNotSendTestEmail": "Could not send test email",
    "errorSendingTestEmail": "Error sending test email",
    "sendTestEmail": "Send test email",
    "languageChanged": "Language changed",
    "pleaseEnterPassword": "Please enter your password",
    "deleting": "Deleting...",
    "accountDeletedRedirecting": "Account deleted successfully. Redirecting...",
    "failedToDeleteAccount": "Failed to delete account",
    "deleteMyAccount": "Delete My Account",
    "somethingWentWrongTryAgain": "Something went wrong. Please try again.",
    "companyProfileSaved": "Company profile saved!",
    "couldNotSaveCompanyProfile": "Could not save company profile: ",
    "failedToConnect": "Failed to connect: ",
    "notesCleanedSuccess": "Notes cleaned!",
    "errorCleaningNotes": "Error cleaning notes: ",
    "emailsViaPianoPlanner": "Emails will now be sent via PianoPlanner",
    "confirmSwitchToPianoplanner": "Are you sure you want to switch back to PianoPlanner email? Your own SMTP settings will be removed.",
    "errorSaving": "Error saving: ",
    "enterEmailAddress": "Please enter your email address",
    "enterAppPassword": "Please enter your app-specific password",
    "smtpSettingsSaved": "SMTP settings saved! Now test the connection.",
    "smtpTestSuccess": "SMTP test successful! Check your inbox.",
    "syncRangeSaved": "Sync range saved. Calendar apps will update on next refresh.",
    "couldNotSaveRange": "Could not save range: ",
    "calendarFeedActive": "Calendar feed is now active! Copy the URL to subscribe.",
    "couldNotEnableFeed": "Could not enable feed",
    "couldNotEnableFeedError": "Could not enable feed: ",
    "confirmDisableFeed": "Are you sure you want to disable the calendar feed? Existing subscriptions will stop working.",
    "calendarFeedDisabled": "Calendar feed disabled",
    "couldNotDisableFeed": "Could not disable feed",
    "couldNotDisableFeedError": "Could not disable feed: ",
    "confirmRegenerateFeed": "Are you sure you want to generate a new link? The current link will stop working and you need to re-subscribe in your calendar apps.",
    "generating": "Generating...",
    "newFeedLinkGenerated": "New feed link generated. Remember to re-subscribe!",
    "couldNotRegenerateFeed": "Could not regenerate feed",
    "couldNotGenerateNewLink": "Could not generate new link: ",
    "syncCompleteItems": "Sync complete! Items synchronized.",
    "errors": "errors",
    "syncFailedError": "Sync failed: ",
    "workshopAvailability": "Workshop Availability",
    "workshopAvailabilityHint": "Set dedicated workshop hours. During these times, no customer appointments will be scheduled — only workshop tasks.",
    "enableWorkshopHours": "Enable workshop hours",
    "workshopAddress": "Workshop address",
    "workshopAddressPlaceholder": "e.g. 5 Industrial Road, Amsterdam",
    "workshopAddressHint": "Leave empty to use your company address for workshop appointments.",
    "saveWorkshopAvailability": "Save Workshop Availability",
    "workshopProMessage": "Workshop availability is only available with a Pro subscription.",
    "workshopAvailabilitySaved": "Workshop availability saved",
    "workshopAvailabilityFailed": "Failed to save workshop availability",
    "availabilitySaved": "Weekly availability saved",
    "availabilityFailed": "Failed to save availability",
    "theaterAvailabilitySaved": "Theater availability saved",
    "theaterAvailabilityFailed": "Failed to save theater availability",
    "dayAvailable": "Available",
    "dayNotAvailable": "Not available",
    "timeTo": "to",
    "saving": "Saving...",
    "panelIntro": {
      "calendarTitle": "Calendar & Sync",
      "calendarDesc": "Sync with your existing calendar to prevent double bookings. PianoPlanner checks your existing appointments and automatically blocks those times for online bookings.",
      "emailTitle": "Email & Communication",
      "emailDesc": "Set up automatic confirmations, reminders and notifications. Use your own email address for a professional appearance.",
      "bookingTitle": "Booking & Planning",
      "bookingDesc": "Set up your online booking link, manage your availability and travel times. Customers can schedule appointments themselves through your personal link.",
      "businessTitle": "Business",
      "businessDesc": "Manage your company details, timezone and mileage tracking. Your business information is shown on the booking page and in emails to customers.",
      "accountTitle": "Account",
      "accountDesc": "Manage your profile, password, language and subscription. Import data or create a backup of your data.",
      "servicesTitle": "Services",
      "servicesDesc": "Manage your services with prices, duration and buffer times. Customers choose from these when booking. Create specific services so customers can choose exactly what they need.",
      "integrationsTitle": "Accounting Integrations",
      "integrationsDesc": "Connect PianoPlanner with Dutch accounting packages to automatically sync invoices. Your API credentials are stored encrypted."
    },
    "advice": {
      "calendarSyncTitle": "Which calendar to connect?",
      "calendarSyncText": "Google Calendar offers the best two-way sync. Apple iCloud and Microsoft 365 are also supported. You can only connect one at a time — choose the calendar you use daily. You can always switch by disconnecting first.",
      "smtpTitle": "Your own email address = more professional",
      "smtpText": "Emails from info@yourbusiness.com are better received than from a noreply address. Use Gmail, iCloud or Outlook with an app-specific password for best delivery.",
      "smtpText2": "Enter your name and email address so customers see your name as the sender. Replies go directly to your inbox.",
      "notificationsTitle": "Recommended combination",
      "notificationsText": "Confirmation on booking, reminder 24 hours ahead (60% fewer no-shows), cancellation email and new booking alert. This way you miss nothing and customers always know where they stand.",
      "bookingTitle": "Online booking saves you 30 minutes per day",
      "bookingText": "Share your booking link on your website, in your email signature, or on your Google Business Profile. Customers choose an available time themselves — no more back-and-forth messaging. Recommended: minimum 24 hours, maximum 3 months ahead.",
      "travelTitle": "Limit your service area for efficiency",
      "travelText": "Most piano tuners work within 45-60 minutes travel time. A smaller area means more appointments per day and lower fuel costs. The travel time between appointments determines how the smart scheduling system clusters appointments in the same area.",
      "companyTitle": "Complete profile = trustworthy",
      "companyText": "Customers see your company name and logo on the booking page and in emails. A complete profile with logo, address and chamber of commerce number radiates professionalism. Your address is also used as starting point for travel time calculations.",
      "bufferTitle": "Buffer times — travel time between appointments",
      "bufferText": "Each service has a buffer before (arrival, setting up tools) and a buffer after (cleaning up, driving to next customer). Recommended: 15 min before, 15-30 min after. Adjust via the ✏️ icon on each service."
    },
    "validateVat": "Validate",
    "blockedDays": {
      "title": "Holidays & blocked days",
      "hint": "Days when you are not available. Customers cannot book on these days.",
      "fromDate": "From date",
      "toDate": "Until date",
      "reason": "Reason",
      "add": "Add",
      "empty": "No blocked days scheduled",
      "remove": "Remove",
      "loadError": "Could not load blocked days",
      "selectStartDate": "Select a start date",
      "endBeforeStart": "End date cannot be before start date",
      "unavailable": "Unavailable",
      "daysBlocked": "{count} days blocked",
      "dayBlocked": "1 day blocked",
      "blockError": "Could not block days",
      "confirmRemoveSingle": "Are you sure you want to unblock this day?",
      "confirmRemoveMultiple": "Are you sure you want to unblock these {count} days?",
      "dayUnblocked": "Day unblocked",
      "daysUnblocked": "{count} days unblocked",
      "through": "to",
      "dayCount": "{count} days",
      "reasonPlaceholder": "e.g. Holiday, day off..."
    },
    "bccEnabled": "BCC copy enabled",
    "bccDisabled": "BCC copy disabled",
    "smtpServerError": "Server gave an unexpected response. Try again or log in again.",
    "lastSyncAt": "Last sync:"
  },
  "company": {
    "name": "Company name",
    "ownerName": "Owner name",
    "email": "Email",
    "phone": "Phone",
    "address": "Address",
    "street": "Street",
    "postalCode": "Postal code",
    "city": "City",
    "country": "Country",
    "postalCodePlaceholder": "10001",
    "cityPlaceholder": "New York",
    "kvk": "Business Registration",
    "vat": "Tax ID / VAT / EIN",
    "iban": "IBAN",
    "website": "Website"
  },
  "email": {
    "title": "Email Notifications",
    "configured": "Email configured",
    "notConfigured": "Email not configured",
    "confirmations": "Confirmation emails",
    "confirmationsDesc": "Send confirmation when appointment is booked",
    "reminders": "Reminder emails",
    "remindersDesc": "Send reminder before appointment",
    "reminderTime": "Send reminder",
    "hoursBefore": "hours before",
    "cancellations": "Cancellation emails",
    "cancellationsDesc": "Notify customer when appointment is cancelled",
    "newBookings": "New booking alerts",
    "newBookingsDesc": "Get notified when customers book appointments",
    "sendTest": "Send test email",
    "testSent": "Test email sent! Check your inbox."
  },
  "booking": {
    "title": "Online Booking",
    "enableBooking": "Enable booking link",
    "yourLink": "Your booking link",
    "copy": "Copy",
    "copied": "Copied!",
    "preview": "Preview",
    "slug": "Custom URL",
    "pageTitle": "New Appointment - PianoPlanner",
    "description": "Description",
    "minAdvance": "Minimum advance booking",
    "maxAdvance": "Maximum advance booking",
    "hours": "hours",
    "days": "days",
    "notAvailableOn": "Not available on",
    "noSlotsIn14Days": "No time found in the next 14 days.",
    "tryDifferentDate": "Try selecting a different starting date.",
    "saveAndContinue": "Save customer & continue →",
    "skipPiano": "Skip (no piano)",
    "continue": "Continue →",
    "findTime": "Find available time",
    "differentDate": "Different date",
    "confirmAppointment": "Confirm Appointment",
    "scheduleAppointment": "Schedule Appointment",
    "pageSubtitle": "Book a new appointment in 4 easy steps",
    "step1Title": "1. Choose a service",
    "step2Title": "2. Customer details",
    "step2bTitle": "2b. Select piano",
    "step3Title": "3. Choose date & time",
    "step4Title": "4. Confirm appointment",
    "searchCustomerPlaceholder": "Search existing customer (name, email, city)...",
    "orAddNew": "or add new customer",
    "nameRequired": "Name *",
    "phone": "Phone",
    "email": "Email",
    "selectPianosDesc": "Select which piano(s) to service for this customer.",
    "serviceLabel": "Service:",
    "customerLabel": "Customer:",
    "pianosLabel": "Piano(s):",
    "preferredDate": "Preferred date",
    "service": "Service",
    "customer": "Customer",
    "piano": "Piano",
    "location": "Location",
    "travelTime": "Travel time",
    "dateTime": "Date & time",
    "notesOptional": "Notes (optional)",
    "notesPlaceholder": "Extra information for this appointment...",
    "success": "Appointment Booked!",
    "successText": "The appointment has been added to your calendar.",
    "newAppointment": "New Appointment",
    "goToDashboard": "Go to Dashboard",
    "onRequest": "On request",
    "noCustomersFound": "No customers found",
    "customerSelected": "Customer selected",
    "differentCustomer": "Different customer",
    "saveCustomerError": "Could not save customer. Please try again.",
    "noPianosRegistered": "No pianos registered for this customer yet.",
    "addPianosLater": "You can add pianos later on the Pianos page.",
    "continueWithoutPiano": "Continue without piano →",
    "grand": "Grand",
    "upright": "Upright",
    "serialNumber": "SN",
    "skipNoPiano": "Skip (no piano)",
    "selectDateFirst": "Please select a date first",
    "checkingAvailability": "Checking availability...",
    "clickToSelect": "Click a time to select it",
    "firstAvailableOn": "First available time on",
    "travelTimeLabel": "Travel time",
    "continueWithTime": "Continue with this time →",
    "genericError": "Something went wrong. Please try again.",
    "noAddress": "No address",
    "from": "from",
    "to": "to",
    "bookingInProgress": "Booking...",
    "bookingError": "Could not book appointment. Please try again."
  },
  "book": {
    "bestChoice": "Best choice",
    "available": "Available",
    "findingBestTimes": "Finding the best times...",
    "preferOtherTime": "Prefer another time? Choose yourself",
    "chooseDateTime": "Choose date & time",
    "chooseService": "Choose a service",
    "notesOptional": "Notes (optional)",
    "bookAppointment": "Book appointment",
    "suggestedTimes": "Suggested times",
    "school": {
      "selectPianos": "Select pianos",
      "selectPianosSub": "Check which pianos need tuning",
      "chooseService": "Choose service",
      "chooseServiceSub": "Which service for the selected pianos?",
      "pickDate": "Date & time",
      "pickDateSub": "Choose when you want the appointment",
      "pianoOverview": "Piano overview",
      "pianoOverviewSub": "Select the pianos that need tuning",
      "back": "Back",
      "brand": "Brand",
      "lastTuned": "Last tuned",
      "location": "Location",
      "model": "Model",
      "nextChooseDate": "Next: choose date",
      "nextChooseService": "Next: choose service",
      "pianosSelected": "pianos selected",
      "scheduled": "Scheduled",
      "selectedPianos": "selected pianos?",
      "selectedPianosTitle": "Selected pianos",
      "serialNumber": "Serial no.",
      "type": "Type",
      "whichServiceForPianos": "Which service for the"
    },
    "sendConfirmation": "Send confirmation by email",
    "theaterInstructionsTitle": "How to book an appointment",
    "theaterStep1": "Choose the desired service (tuning, repair, etc.)",
    "theaterStep2": "Select the instrument (piano or grand piano)",
    "theaterStep3": "Optionally describe the event in the notes (e.g. concert, rehearsal)",
    "theaterStep4": "Select a date and time in the calendar",
    "chooseServiceSub": "Select the desired service",
    "appointmentsSub": "History & scheduled",
    "selectPianoSub": "Choose the piano or grand piano",
    "notesSub": "Extra information for the technician",
    "chooseDateTimeSub": "Choose a suitable time",
    "welcome": "Welcome",
    "loading": "Loading...",
    "loadingCalendar": "Loading calendar...",
    "loadingTimes": "Loading available times...",
    "linkInvalid": "This booking link is not valid",
    "linkNotFound": "Booking link not found",
    "selectPiano": "Select a piano",
    "availableTimesFor": "Available times for",
    "noTimesAvailable": "No available times",
    "firstAvailable": "First available",
    "smartSuggestions": "Smart suggestions",
    "smartSuggestionsDesc": "Recommended moments based on location and schedule",
    "calculatingSmart": "Calculating suggestions...",
    "smartSearching": "We're finding the best options for you...",
    "noSmartSuggestions": "No smart suggestions available",
    "chooseManualTime": "Choose manually",
    "moreOptions": "More options",
    "planHere": "Book here",
    "booked": "Booked!",
    "confirmEmail": "A confirmation email has been sent",
    "notesPlaceholder": "Any notes or requests...",
    "legendAvailable": "Available",
    "legendFull": "Fully booked",
    "legendClosed": "Closed",
    "appointments": "Appointments",
    "contactForBooking": "No available times found. Please contact us to schedule an appointment.",
    "loadMoreSuggestions": "Load more suggestions"
  },
  "calendar": {
    "today": "Today",
    "week": "Week",
    "month": "Month",
    "day": "Day",
    "allDay": "All day",
    "noTitle": "No title",
    "syncNow": "Sync now",
    "lastSync": "Last sync",
    "syncDirection": "Sync direction",
    "bothDirections": "Both directions",
    "toGoogle": "To Google only",
    "fromGoogle": "From Google only",
    "toApple": "To Apple only",
    "fromApple": "From Apple only",
    "months": [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    "monthsShort": [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    "days": [
      "Sunday",
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday"
    ],
    "daysShort": [
      "Sun",
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat"
    ]
  },
  "publicBooking": {
    "pageTitle": "Book Appointment",
    "loading": "Loading...",
    "step1Service": "Service",
    "step2Details": "Details",
    "step3Time": "Time",
    "chooseService": "Choose a service",
    "yourDetails": "Your details",
    "findBestTimesIntro": "We'll find the best appointment times based on your location.",
    "name": "Name",
    "email": "Email",
    "phone": "Phone",
    "address": "Address (street + number)",
    "addressPlaceholder": "Start typing an address...",
    "postalCode": "Postal code",
    "postalCodePlaceholder": "e.g. 10001",
    "city": "City",
    "cityPlaceholder": "e.g. New York",
    "back": "← Back",
    "next": "Next →",
    "findBestTimes": "Find best times →",
    "choosePreferredTime": "Choose your preferred time",
    "timesOptimizedIntro": "These times are optimized for minimal travel time and efficient scheduling.",
    "loadingOptimalTimes": "Loading optimal times...",
    "confirmAppointment": "Confirm Appointment",
    "booking": "Booking...",
    "appointmentScheduled": "Appointment Scheduled!",
    "newAppointment": "New Appointment",
    "service": "Service",
    "date": "Date",
    "time": "Time",
    "bestChoice": "Best Choice",
    "preferOtherTime": "Prefer a different time? Choose yourself",
    "backToBestChoice": "Back to best choice",
    "noServicesAvailable": "No services available",
    "onRequest": "On request",
    "min": "min",
    "noAvailableTimes": "No available times found. Please try again later.",
    "errorLoadingTimes": "Error loading available times. Please try again.",
    "findingBestTimes": "Finding the best times for your location...",
    "searchingTimes": "Searching for available times...",
    "searchingTimesSubtitle": "This may take a moment",
    "earlierOption": "Earliest available",
    "outsideServiceArea": "Outside Service Area",
    "locationTooFar": "Your location is approximately <strong>{{travelTime}}</strong> away (max: {{maxAllowed}} min).",
    "sendEmail": "Send Email",
    "bookingFailed": "Could not book appointment. Please try again.",
    "errorNotFound": "404",
    "errorNotFoundTitle": "Booking page not found",
    "errorNotFoundText": "This booking link is not active or does not exist.",
    "poweredBy": "Powered by"
  },
  "common": {
    "save": "Save",
    "cancel": "Cancel",
    "delete": "Delete",
    "choose": "-- Choose --",
    "edit": "Edit",
    "add": "Add",
    "close": "Close",
    "confirm": "Confirm",
    "yes": "Yes",
    "no": "No",
    "of": "of",
    "or": "or",
    "loading": "Loading...",
    "error": "Error",
    "success": "Success",
    "search": "Search",
    "filter": "Filter",
    "all": "All",
    "none": "None",
    "required": "Required",
    "optional": "Optional",
    "total": "Total",
    "date": "Date",
    "notes": "Notes...",
    "internalNotes": "Internal notes...",
    "errorSaving": "Error saving",
    "errorDeleting": "Error deleting",
    "errorLoading": "Error loading",
    "saving": "Saving...",
    "busy": "Busy...",
    "errorOccurred": "An error occurred. Please try again.",
    "unknownError": "Unknown error",
    "previous": "Previous",
    "next": "Next",
    "back": "Back",
    "customer": "Customer",
    "end": "End",
    "selectDate": "Select date",
    "service": "Service",
    "start": "Start",
    "time": "Time",
    "title": "Title",
    "understood": "Got it",
    "warning": "Warning",
    "saveFailed": "Save failed",
    "appointment": "Appointment",
    "more": "more",
    "address": "Address",
    "appointments_one": "{{count}} appointment",
    "appointments_other": "{{count}} appointments",
    "customers_one": "{{count}} customer",
    "customers_other": "{{count}} customers",
    "pianos_one": "{{count}} piano",
    "pianos_other": "{{count}} pianos",
    "daysAgo_one": "{{count}} day ago",
    "daysAgo_other": "{{count}} days ago",
    "at": "at",
    "unnamed": "Unnamed",
    "skipNav": "Skip to content"
  },
  "teamBooking": {
    "pageTitle": "Book Appointment - Team",
    "stepService": "Service",
    "stepDateTime": "Date & Time",
    "stepDetails": "Your Details",
    "stepConfirm": "Confirm",
    "selectService": "Select a Service",
    "selectServiceSubtitle": "Choose the service you need",
    "selectDateTime": "Select Date & Time",
    "smartAssignmentInfo": "We'll suggest the best available team member based on your location and date",
    "preferredDate": "Preferred Date",
    "yourAddress": "Your Address",
    "addressPlaceholder": "Street, City",
    "addressHelp": "Helps us assign the nearest available team member",
    "findAvailableTimes": "Find Available Times",
    "availableOptions": "Available Options",
    "bestMatch": "Best Match",
    "yourDetails": "Your Details",
    "yourDetailsSubtitle": "We need some information to confirm your booking",
    "fullName": "Full Name",
    "email": "Email Address",
    "phone": "Phone Number",
    "notes": "Additional Notes",
    "notesPlaceholder": "Any special requests or information...",
    "reviewBooking": "Review Your Booking",
    "reviewBookingSubtitle": "Please check all details before confirming",
    "confirmBooking": "Confirm Booking",
    "bookingConfirmed": "Booking Confirmed!",
    "confirmationEmail": "A confirmation email has been sent to your email address.",
    "teamMember": "Team Member",
    "dateTime": "Date & Time",
    "duration": "Duration",
    "location": "Location",
    "name": "Name",
    "noSlotsAvailable": "No available slots on this date",
    "tryAlternativeDates": "Try these alternative dates",
    "travelTime": "Travel time",
    "appointmentsToday": "appointments today",
    "minutes": "minutes",
    "service": "Service",
    "confirmationEmailLabel": "Confirmation Email",
    "searchCustomer": "Search Customer",
    "selectPiano": "Select Piano",
    "selectTunerAndTime": "Please select a tuner and time slot first",
    "enterNameAndEmail": "Please enter your name and email address",
    "bookingFailed": "Booking failed. Please try again.",
    "somethingWentWrong": "Something went wrong. Please try again.",
    "confirmationSentTo": "A confirmation has been sent to {{email}}",
    "confirmation": "Confirmation",
    "date": "Date",
    "time": "Time",
    "tuner": "Tuner",
    "next": "Next",
    "back": "Back",
    "review": "Review",
    "contactSubtitle": "Enter your contact details for the confirmation",
    "nameStar": "Name *",
    "emailStar": "Email *",
    "phoneLabel": "Phone",
    "addressLabel": "Address",
    "notesLabel": "Notes",
    "detailsNotesPlaceholder": "Details about the piano or your preferences...",
    "confirmTitle": "Confirm your appointment",
    "confirmSubtitle": "Review the details below",
    "confirmedTitle": "Appointment confirmed!",
    "defaultSuccessMessage": "You will receive a confirmation by email.",
    "newBooking": "Make a new appointment",
    "noBookingLink": "No booking link provided.",
    "teamNotFound": "Team not found.",
    "loadError": "Something went wrong while loading.",
    "noServicesAvailable": "No services available",
    "findBestTime": "Find best time",
    "locationTitle": "Location",
    "locationSubtitle": "Your address helps us find the nearest tuner",
    "recommendedTitle": "Recommended appointment",
    "recommendedSubtitle": "Based on location, availability and workload",
    "chooseOwnDate": "Choose your own date",
    "chooseOwnDateSubtitle": "Or manually select a different time",
    "available": "Available",
    "limitedAvailability": "Limited",
    "availableTuners": "Available tuners",
    "searching": "Searching...",
    "smartPickAnalyzing14days": "Smart Pick is analyzing 14 days...",
    "smartPickAnalyzing": "Smart Pick is analyzing availability...",
    "noAvailability": "No availability",
    "noSlotsOnDate": "No time slots available on this date.",
    "noSlotsIn2Weeks": "No time slots found in the next 2 weeks.",
    "availableOn": "Available on:",
    "searchAgain": "Search again",
    "bestChoice": "Best choice",
    "yourTuner": "Your tuner",
    "routeOptimized": "Route-optimized",
    "otherTime": "Prefer a different time? Choose your own",
    "otherOptions": "Other options:",
    "bookingInProgress": "Booking in progress...",
    "overview": "Overview",
    "membersAvailable": "{{count}} tuner(s) available",
    "bookAt": "Book at {{name}} — PianoPlanner",
    "until": "to",
    "appointmentsCount": "appointment(s)",
    "somethingWentWrongShort": "Something went wrong",
    "tryAgain": "Please try again.",
    "tryAgainOrOtherDate": "Please try again or choose another date.",
    "namePlaceholder": "Full name",
    "emailPlaceholder": "your@email.com",
    "phonePlaceholder": "+31 6 1234 5678",
    "addressInputPlaceholder": "Street, City",
    "invalidBookingLink": "This booking link is not valid or no longer active.",
    "pageNotFound": "Page not found",
    "outsideServiceArea": "Outside our service area",
    "outOfZoneMessage": "Unfortunately, this address is outside the area we currently serve.",
    "contactUsDirectly": "Contact us directly:",
    "selectTimeFirst": "Please select a time slot first",
    "fillRequiredFields": "Please fill in name, email and address",
    "searchingTimes": "Searching for available times...",
    "noSlotsInComingWeeks": "No available time slots found in the coming weeks.",
    "preferOtherTime": "Prefer a different time? Choose yourself",
    "earliestOption": "Earliest",
    "backToBestChoice": "Back to best choice",
    "findBestTimesIntro": "Find best times",
    "addressStar": "Address *",
    "findBestTimes": "Find best times",
    "choosePreferredTime": "Choose your preferred time",
    "timesOptimizedIntro": "Times optimized for efficient routing",
    "loadingOptimalTimes": "Loading optimal times...",
    "confirmAppointment": "Confirm appointment"
  },
  "teams": {
    "pageTitle": "Team Management - PianoPlanner",
    "title": "Team Management",
    "subtitle": "Manage your teams and enable smart team booking",
    "createTeam": "Create Team",
    "newTeam": "New Team",
    "editTeam": "Edit Team",
    "teamName": "Team Name",
    "bookingTitle": "Booking Page Title",
    "bookingTitleHint": "Shown to customers on the booking page",
    "bookingDescription": "Booking Page Description",
    "bookingDescriptionHint": "A brief description for customers",
    "bookingSettings": "Booking Settings",
    "enableBooking": "Enable Team Booking",
    "enableBookingHint": "Allow customers to book with your team",
    "teamMembers": "Team Members",
    "addMember": "Add Member",
    "newMember": "New Member",
    "editMember": "Edit Member",
    "memberName": "Name",
    "memberEmail": "Email",
    "memberAddress": "Home Address",
    "memberAddressHint": "Used for smart routing",
    "maxDistance": "Max Travel Distance (km)",
    "workHours": "Work Hours",
    "workHoursHint": "Format: HH:MM-HH:MM",
    "priority": "Priority (0-100)",
    "priorityHint": "Higher priority members are preferred for assignments",
    "status": "Status",
    "statusActive": "Active",
    "statusInactive": "Inactive",
    "noTeamsYet": "No Teams Yet",
    "createFirstTeam": "Create your first team to enable smart team booking",
    "active": "Active",
    "inactive": "Inactive",
    "members": "members",
    "manage": "Manage",
    "myTeam": "My Team",
    "myTeamSubtitle": "Manage your piano tuners, work hours and booking link",
    "loading": "Loading...",
    "bookingLink": "Booking Link",
    "pianoTuners": "Piano Tuners",
    "save": "Save",
    "bookingDisabledMsg": "Enable bookings so customers can book online with your team.",
    "teamNamePlaceholder": "e.g. Your Company Name",
    "bookingTitlePlaceholder": "e.g. Book a tuning",
    "bookingDescPlaceholder": "e.g. Our team of experienced piano tuners is ready to help...",
    "icalTitle": "Calendar subscription for team members",
    "icalDesc": "Each team member has a personal iCal link to view appointments (read-only) in their own calendar.",
    "icalApple": "Apple: File → New Calendar Subscription → paste URL",
    "icalGoogle": "Google: Settings → Other calendars → From URL",
    "icalOutlook": "Outlook: Add calendar → Subscribe from web",
    "bookingEnabled": "Bookings enabled",
    "bookingDisabled": "Bookings disabled",
    "bookingToggleFailed": "Could not change bookings",
    "enterTeamName": "Enter a team name",
    "settingsSaved": "Settings saved",
    "settingsSaveFailed": "Could not save settings",
    "linkCopied": "Link copied!",
    "connectLinkCopied": "Connect link for {name} copied! Send this link to {name}.",
    "connectLinkFailed": "Could not create connection link",
    "disconnectConfirm": "Disconnect Google Calendar for {name}?",
    "disconnected": "Google Calendar disconnected for {name}",
    "disconnectFailed": "Could not disconnect Google Calendar",
    "enterDates": "Enter a start and end date",
    "absenceAdded": "Absence added",
    "absenceAddFailed": "Could not add absence",
    "absenceDeleteConfirm": "Delete absence?",
    "absenceDeleted": "Absence deleted",
    "absenceDeleteFailed": "Could not delete absence",
    "nameEmailRequired": "Name and email are required",
    "memberUpdated": "Member updated",
    "memberAdded": "Member added",
    "memberSaveFailed": "Could not save member",
    "memberDeleteConfirm": "Are you sure you want to remove this team member?",
    "memberRemoved": "Member removed",
    "memberRemoveFailed": "Could not remove member",
    "companyLogo": "Company Logo",
    "logoUploadHint": "Upload a custom team logo (overrides company logo)",
    "logoUploaded": "Logo uploaded",
    "logoRemoved": "Logo removed",
    "usingCompanyLogo": "Your company logo from Settings is used on the booking page.",
    "changeInSettings": "Change in Settings",
    "justNow": "just now",
    "minutesAgo": "{{mins}} minutes ago",
    "hoursAgo": "{{hours}} hours ago",
    "yesterday": "yesterday",
    "daysAgo": "{{days}} days ago",
    "absencesTitle": "Absences",
    "addAbsence": "Add vacation/absence",
    "fromLabel": "From",
    "untilLabel": "Until",
    "reasonOptional": "Reason (optional)",
    "addAbsenceButton": "Add",
    "noAbsences": "No absences scheduled",
    "scheduledAbsences": "Scheduled",
    "pastAbsences": "Past",
    "dateRangeSeparator": "to",
    "deleteAbsenceButton": "Delete",
    "errorSending": "Error sending.",
    "sendingStatus": "Sending...",
    "sentStatus": "Sent",
    "bookingActiveLabel": "Active",
    "bookingDisabledLabel": "Disabled",
    "copyButton": "Copy",
    "noMembersYet": "No team members yet",
    "vacationButton": "Vacation",
    "sendAccessButton": "Send Access",
    "lastActiveLabel": "Last active:",
    "neverLoggedIn": "Never logged in",
    "reasonPlaceholder": "E.g. vacation, sick, course...",
    "closeButton": "Close",
    "teamLoadFailed": "Could not load team",
    "serviceArea": "Service Area",
    "noZone": "No zone",
    "enterAddressFirst": "Enter a home address above first",
    "clearZone": "Clear zone (available everywhere)",
    "geocodeFailed": "Could not find this address on the map",
    "serviceZone": "zone",
    "contactPhone": "Contact Phone",
    "contactPhonePlaceholder": "e.g. +31 6 12345678",
    "contactPhoneHint": "Shown to customers outside your service area",
    "contactEmail": "Contact Email",
    "contactEmailPlaceholder": "e.g. info@company.com",
    "dragToMove": "Drag to move zone center",
    "zoneHint": "Customers outside this radius cannot book this tuner",
    "memberLoadFailed": "Could not load members",
    "logoUploadFailed": "Could not upload logo",
    "logoRemoveFailed": "Could not remove logo",
    "magicLinkSent": "Magic link sent successfully!",
    "selectTeam": "Team:",
    "membersCount": "members",
    "enterTeamName": "Enter team name:",
    "teamCreated": "Team created",
    "errorCreatingTeam": "Error creating team",
    "cannotDeleteLastTeam": "Cannot delete the last team",
    "confirmDeleteTeam": "Are you sure you want to delete this team? All members will be removed and appointments unassigned.",
    "teamDeleted": "Team deleted",
    "errorDeletingTeam": "Error deleting team"
  },
  "actions": {
    "save": "Save",
    "cancel": "Cancel",
    "delete": "Delete",
    "edit": "Edit",
    "add": "Add",
    "viewCustomer": "View Customer",
    "navigate": "Navigate",
    "createInvoice": "Create Invoice",
    "back": "Back",
    "next": "Next",
    "close": "Close",
    "confirm": "Confirm",
    "complete": "Complete",
    "markAsDone": "Mark as done"
  },
  "completion": {
    "title": "Complete appointment",
    "updatePiano": "Update tuning",
    "updatePianoDesc": "Last tuning date → today",
    "paymentLabel": "Payment",
    "payInvoice": "Create invoice",
    "payPin": "Paid by card",
    "payCash": "Paid in cash",
    "payLater": "Invoice later",
    "payNone": "No payment (warranty/service)",
    "notesLabel": "Notes",
    "notesPlaceholder": "Optional note...",
    "submit": "✅ Complete",
    "preferredHint": "⭐ This customer's preference",
    "customerPreference": "⭐ This customer's preference"
  },
  "errors": {
    "notLoggedIn": "Not logged in",
    "notFound": "Not found",
    "serverError": "Server error",
    "networkError": "Network error",
    "invalidInput": "Invalid input",
    "connectionError": "Connection error",
    "couldNotComplete": "Could not complete appointment",
    "error": "Error"
  },
  "subscription": {
    "proRequired": "Invoicing is available from Pro plan and up"
  },
  "route": {
    "efficiency": "Route Efficiency",
    "excellent": "Excellent",
    "good": "Good",
    "moderate": "Moderate",
    "poor": "Poor",
    "travelTime": "Travel time"
  },
  "analysis": {
    "routeAnalysis": "Route Analysis",
    "analyze": "Analyze",
    "day": "Day",
    "week": "Week",
    "loading": "Loading analysis...",
    "trips": "Trips",
    "appointments": "appointments",
    "suggestions": "Suggestions",
    "optimizations": "Optimizations",
    "noAppointments": "No appointments",
    "noAppointmentsDesc": "There are no appointments to analyze.",
    "score": "Score",
    "grade": "Grade",
    "totalKm": "Total km",
    "totalTime": "Total drive time",
    "potentialSavings": "Potential savings",
    "save": "save",
    "savings": "savings",
    "total": "total",
    "savingsThisWeek": "savings this week",
    "savingsPossible": "savings possible",
    "perDay": "Per day",
    "shortTrip": "Short",
    "mediumTrip": "Medium",
    "longTrip": "Long",
    "veryLongTrip": "Very long",
    "gradeA": "Excellent",
    "gradeB": "Good",
    "gradeC": "Acceptable",
    "gradeD": "Needs improvement",
    "gradeF": "Inefficient",
    "moveAppointment": "Move appointment",
    "applyOptimization": "Apply",
    "timingRisk": "Timing too tight",
    "timingTight": "Tight timing",
    "longTripWarning": "Long trip",
    "zigzagWarning": "Zigzag route",
    "clusterSuggestion": "Cluster appointments",
    "upgradeRequired": "Solo Feature",
    "upgradeDesc": "Route Analysis is available from the Solo subscription.",
    "upgradeButton": "Upgrade to Solo",
    "errorLoading": "Error loading analysis",
    "thisWeek": "This week",
    "critical": "CRITICAL",
    "high": "HIGH",
    "medium": "MEDIUM",
    "tip": "TIP",
    "minutesSaved": "min saved",
    "quickMove": "Quick move to",
    "later": "later",
    "viewAllTimes": "View all times",
    "viewReorder": "View reorder",
    "findBetterDay": "Find better day",
    "routeOptimizationPossible": "Route optimization possible!",
    "viewAnalysis": "View analysis"
  },
  "time": {
    "today": "Today",
    "tomorrow": "Tomorrow",
    "yesterday": "Yesterday",
    "thisWeek": "This week",
    "nextWeek": "Next week",
    "never": "Never",
    "allDay": "All day",
    "justNow": "just now"
  },
  "login": {
    "title": "Log in",
    "welcome": "Welcome",
    "register": "Register",
    "email": "Email",
    "password": "Password",
    "confirmPassword": "Confirm password",
    "name": "Name",
    "forgotPassword": "Forgot password?",
    "forgotDesc": "Enter your email. You will receive a link to reset your password.",
    "sendResetLink": "Send reset link",
    "backToLogin": "← Back to login",
    "rememberMe": "Remember me",
    "loginWithGoogle": "Login with Google",
    "signupWithGoogle": "Sign up with Google",
    "createAccount": "Create account",
    "alreadyHaveAccount": "Already have an account?",
    "noAccount": "New here?",
    "loginLink": "Log in →",
    "registerLink": "Create an account →",
    "companyOptional": "Company name (optional)",
    "namePlaceholder": "John Smith",
    "passwordMin": "Min. 8 characters",
    "or": "or",
    "acceptTerms": "I agree to the <a href=\"/terms.html\" target=\"_blank\">Terms & Conditions</a>, the <a href=\"/privacy.html\" target=\"_blank\">Privacy Policy</a> and the <a href=\"/dpa.html\" target=\"_blank\">Data Processing Agreement</a>",
    "acceptTermsRequired": "You must agree to the Terms & Conditions, Privacy Policy and Data Processing Agreement.",
    "hintLogin": "Welcome back!",
    "hintRegister": "Create an account in 30 seconds",
    "trustFree": "1 month free trial",
    "trustNoCard": "No credit card required",
    "trustGdpr": "GDPR compliant & data in EU",
    "trustCancel": "Cancel anytime",
    "loggingIn": "Logging in...",
    "welcomeBack": "Welcome back! Redirecting...",
    "loginFailed": "Login failed",
    "somethingWentWrong": "Something went wrong. Please try again.",
    "sending": "Sending...",
    "resetLinkSent": "If this email address is known, you will receive a reset link.",
    "passwordTooShort": "Password must be at least 8 characters.",
    "creatingAccount": "Creating account...",
    "awaitingApproval": "Account created! Please wait for admin approval. You'll receive an email when your account is activated.",
    "awaitingApprovalBtn": "Awaiting Approval",
    "accountCreated": "Account created! You can now log in with your credentials.",
    "accountCreatedBtn": "Account Created!",
    "googleRecommended": "Recommended — direct access to calendar sync",
    "googleRecommendedSignup": "Fastest way — ready with calendar sync instantly"
  },
  "pricing": {
    "title": "Simple, transparent pricing.",
    "subtitle": "Choose the plan that fits you. No hidden fees.",
    "monthly": "per month",
    "yearly": "per year",
    "perMonth": "/ month",
    "startTrial": "Start 1-month free trial",
    "trySolo": "Start free trial",
    "getStartedFree": "Get started free",
    "subscribe": "Subscribe",
    "currentPlan": "Current plan",
    "features": "Features",
    "unlimited": "Unlimited",
    "support": "Support",
    "trial": "Trial",
    "trialDays": "day free trial",
    "foreverFree": "Forever free",
    "mostPopular": "Most Popular",
    "serverLocation": "Your data is stored securely on servers in the Netherlands (EU)",
    "exVat": "excl. VAT",
    "startName": "Start",
    "startTagline": "Smart scheduling & routes",
    "startFeature1": "Unlimited customers & appointments",
    "startFeature2": "Route optimization & Route Fill",
    "startFeature3": "Online booking page",
    "startFeature4": "Email reminders & templates",
    "startFeature5": "Custom email domain (SMTP)",
    "startFeature6": "Smart Suggestions",
    "startFeature7": "Calendar export (iCal)",
    "startFeature8": "PWA mobile app",
    "startFeature9": "CSV & Gazelle import",
    "proName": "Pro",
    "proTagline": "Full sync & automation",
    "proFeature1": "Everything in Start, plus:",
    "proFeature2": "2-way sync Google, Apple & Microsoft",
    "proFeature3": "1-click invoicing with payment link",
    "proFeature3sub": "PDF invoices + payment provider of choice (via key)",
    "proFeature4": "Mileage tracking (tax-proof)",
    "proFeature5": "Accounting integration (QuickBooks, Xero, ...)",
    "invoiceHighlightTitle": "Invoicing with instant payment link",
    "invoiceHighlightDesc": "Create invoices from your calendar, send them with PDF and payment link. Your customer pays directly online. Available from Pro.",
    "premiumName": "Premium",
    "premiumTagline": "Workshop, projects & team",
    "premiumFeature1": "Everything in Pro, plus:",
    "premiumFeature2": "Workshop project planner",
    "premiumFeature3": "Time tracking & capacity planning",
    "premiumFeature4": "Theater/venue hours",
    "premiumFeature5": "Deadline overview",
    "premiumFeature6": "Team dashboard & smart assignment",
    "premiumFeature6sub": "+ €15 per extra tuner/team member",
    "teamsName": "Teams",
    "teamsTagline": "Workshop, projects & team",
    "teamsFeature1": "Everything in Pro, plus:",
    "teamsFeature2": "Workshop project planner",
    "teamsFeature3": "Time tracking & capacity planning",
    "teamsFeature4": "Theater/venue hours",
    "teamsFeature5": "Deadline overview",
    "teamsFeature6": "Team dashboard & smart assignment",
    "teamsFeature7": "Magic Link portal for tuners",
    "teamsFeature7sub": "Incl. 5 tuners · + €15 per extra tuner",
    "businessName": "Teams Business",
    "businessTagline": "Inventory, stock & 10 tuners",
    "businessFeature1": "Everything in Teams, plus:",
    "businessFeature2": "Inventory management",
    "businessFeature3": "Showroom batches",
    "businessFeature4": "Up to 10 tuners",
    "businessFeature4sub": "+ €15 per extra tuner above 10",
    "freeHint": "Just starting or up to 25 customers?",
    "freeHintLink": "Start with our free entry plan.",
    "serverTitle": "European servers, Dutch company",
    "serverText": "Your data stays in Europe. GDPR compliant. Based in Tilburg, Netherlands.",
    "independenceTipTitle": "Break free from Big Tech?",
    "independenceTipText": "With just the Start plan, you manage everything in PianoPlanner and generate an iCal link that works with any calendar app. No Google, Apple, or Microsoft account needed.",
    "faqTitle": "Frequently Asked Questions",
    "faqSubtitle": "Everything you need to know about PianoPlanner.",
    "faq1Question": "Can I try before I buy?",
    "faq1Answer": "Yes! All paid plans include a 1-month free trial. No credit card required. After the month you can choose to pay or fall back to the free plan.",
    "faq2Question": "What happens to my data if I cancel?",
    "faq2Answer": "Your data is yours. You can export everything before canceling. After cancellation, your account reverts to the Free plan.",
    "faq3Question": "Can I change plans later?",
    "faq3Answer": "Absolutely. Upgrade or downgrade anytime. Changes take effect immediately and the new amount applies from the next billing cycle.",
    "faq4Question": "How does calendar sync work?",
    "faq4Answer": "PianoPlanner syncs two-way with Google Calendar, Apple Calendar, and Microsoft 365. Appointments appear in real-time across all your devices.",
    "footerFeature1": "1 month free",
    "footerFeature2": "No credit card required",
    "footerFeature3": "Cancel anytime",
    "footerFeature4": "GDPR compliant",
    "compareTitle": "Compare plans",
    "compareFeature": "Feature",
    "compareCustomers": "Customers & appointments",
    "compareRoute": "Route optimization",
    "compareBooking": "Online booking page",
    "compareReminders": "Email reminders",
    "compareSmtp": "Own email (SMTP)",
    "compareSmart": "Smart Suggestions",
    "compareiCal": "Calendar export (iCal)",
    "comparePwa": "PWA mobile app",
    "compareImport": "CSV & Gazelle import",
    "compareCalSync": "2-way calendar sync",
    "compareMileage": "Mileage tracking",
    "compareInvoicing": "Invoicing + payment link",
    "compareAccounting": "Accounting integration",
    "compareProjects": "Workshop project planner",
    "compareTimetrack": "Time tracking",
    "compareCapacity": "Capacity planning",
    "compareTheater": "Theater/venue hours",
    "compareTeamDashboard": "Team dashboard & assignment",
    "compareTeamMembers": "Extra tuners",
    "compareMagicLink": "Magic Link portal",
    "compareInventory": "Inventory management",
    "compareShowroom": "Showroom batches",
    "compareMaxTuners": "Max. tuners",
    "teamsHint": "More than 5 tuners?",
    "teamsHintLink": "Contact us for a custom quote."
  },
  "billing": {
    "title": "My subscription",
    "subtitle": "Manage your subscription and invoices",
    "currentPlan": "Current plan",
    "startSubscription": "Start subscription",
    "choosePlan": "Choose your plan",
    "perMonthVat": "/month + VAT",
    "perMonthExclVat": "/month (excl. VAT)",
    "soloFeature1": "Unlimited customers & appointments",
    "soloFeature2": "Email reminders & templates",
    "soloFeature3": "Route optimisation",
    "soloFeature4": "Online booking page",
    "proFeatureAll": "Everything in Start, plus:",
    "proFeature1": "2-way calendar sync",
    "proFeature2": "Mileage tracking (tax-compliant)",
    "proFeature3": "Invoicing with payment link",
    "premiumFeatureAll": "Everything in Pro, plus:",
    "premiumFeature1": "Workshop project planner",
    "premiumFeature2": "Capacity planning & hours",
    "premiumFeature3": "Theatre/venue projects",
    "teamsCustom": "Multiple tuners? ",
    "teamsCustomLink": "Request a custom Teams quote.",
    "selectPlanContinue": "Choose a plan to continue",
    "whatsIncluded": "What's included",
    "allPlansInclude": "All plans include:",
    "featureUnlimited": "Unlimited customers & appointments",
    "featureEmail": "Email reminders & templates",
    "featureSMTP": "Custom email domain (SMTP)",
    "featureRoute": "Route optimisation",
    "featureBooking": "Online booking page",
    "featurePWA": "PWA mobile app",
    "featureSmart": "Smart Suggestions",
    "featureIcal": "Calendar export (iCal)",
    "featureImport": "Import from other systems",
    "featureEU": "EU data protection (GDPR)",
    "needHelp": "Need help?",
    "needHelpDesc": "Questions about your subscription or invoices? Get in touch with us.",
    "contactUs": "Contact us",
    "price": "Price",
    "vat": "VAT",
    "perMonth": "month",
    "daysLeftTrial": "days left in your trial",
    "likePianoPlanner": "Like PianoPlanner?",
    "upgradeAnytime": "You can upgrade anytime – no need to wait for your trial to end!",
    "nextBilling": "Next billing date",
    "statusLabel": "Status",
    "trialExpired": "Your trial has expired",
    "daysLeft": "days left",
    "noSubscription": "No active subscription",
    "upgradeNow": "Upgrade now",
    "manageSubscription": "Manage subscription",
    "checkoutError": "Unable to start checkout.",
    "somethingWentWrong": "Something went wrong. Please try again.",
    "portalError": "Unable to open subscription management.",
    "loadError": "Unable to load subscription details.",
    "active": "Active",
    "trial": "Trial",
    "expired": "Expired",
    "canceled": "Canceled",
    "welcomePlan": "Welcome to PianoPlanner",
    "paymentSuccess": "Your payment was successful. Your subscription is now active for",
    "confirmationEmail": "You will receive a confirmation email. Invoices can be found below.",
    "paymentCancelled": "Payment cancelled",
    "paymentCancelledDesc": "No problem! You can try again later. Nothing was charged.",
    "yourPlan": "Your plan",
    "continueWith": "Continue with",
    "proAdds": "Pro adds:",
    "proFeatureSync": "2-way calendar sync",
    "proFeatureKm": "Mileage tracking",
    "proFeatureInvoice": "Invoicing with payment link",
    "proFeatureAccounting": "Accounting integration",
    "proFeatureSupport": "Priority support"
  },
  "import": {
    "title": "Import Data",
    "selectSource": "Select Import Source",
    "selectSourceDesc": "Choose where you want to import your customer data from.",
    "gazelleTitle": "Gazelle Import Wizard - PianoPlanner",
    "gazelleWizard": "Gazelle Import Wizard",
    "backToSettings": "Back to Settings",
    "step1Title": "Import Customers",
    "step1Desc": "Upload clients.csv",
    "step2Title": "Import Pianos",
    "step2Desc": "Upload pianos.csv",
    "step3Title": "Import Appointments",
    "step3Desc": "Upload events.csv (optional)",
    "step4Title": "Complete",
    "step4Desc": "View results",
    "customersTitle": "Step 1: Import Customers",
    "customersDesc": "Upload your Gazelle clients.csv file. We'll validate each record and show exactly what will be imported.",
    "dropClients": "Drop clients.csv here",
    "orClickBrowse": "or click to browse",
    "pianosTitle": "Step 2: Import Pianos",
    "pianosDesc": "Upload your Gazelle pianos.csv file. Pianos will be automatically linked to customers via Gazelle ID.",
    "dropPianos": "Drop pianos.csv here",
    "eventsTitle": "Step 3: Import Appointments",
    "eventsDesc": "Upload your Gazelle events.csv file. Appointments will be linked to customers and pianos. This is optional - you can skip this step.",
    "dropEvents": "Drop events.csv here",
    "filterAll": "All",
    "filterValid": "✓ Valid",
    "filterSkip": "⚠ Skip",
    "filterError": "✗ Error",
    "optSkipExisting": "Skip existing customers",
    "optSkipExistingDesc": "Skip customers that already exist (based on email)",
    "optCreateCustomers": "Create missing customers",
    "optCreateCustomersDesc": "Automatically create customers for pianos without a match",
    "skipStep": "Skip step →",
    "skipAndFinish": "Finish without appointments →",
    "importCustomers": "Import Customers",
    "importPianos": "Import Pianos",
    "importEvents": "Import Appointments",
    "importing": "Importing...",
    "completed": "Import Complete!",
    "completedDesc": "Your Gazelle data has been imported to PianoPlanner.",
    "customers": "Customers",
    "pianos": "Pianos",
    "events": "Appointments",
    "viewCustomers": "View Customers",
    "viewPianos": "View Pianos",
    "toDashboard": "Go to Dashboard",
    "step": {
      "source": "Source",
      "upload": "Upload",
      "preview": "Preview",
      "import": "Import"
    },
    "external": {
      "desc": "Piano service software"
    },
    "csv": {
      "desc": "Generic CSV file"
    },
    "uploadFile": "Upload File",
    "uploadFileDesc": "Upload your export file (CSV format).",
    "dropFile": "Drop your file here",
    "orClick": "or click to browse",
    "previewData": "Preview Data",
    "previewDesc": "Review the data before importing.",
    "totalRecords": "Total Records",
    "activeClients": "Active Clients",
    "inactiveClients": "Inactive Clients",
    "withEmail": "With Email",
    "th": {
      "name": "Name",
      "email": "Email",
      "phone": "Phone",
      "city": "City",
      "status": "Status"
    },
    "options": "Import Options",
    "opt": {
      "activeOnly": "Only import active clients",
      "activeOnlyDesc": "Skip clients marked as inactive",
      "skipDuplicates": "Skip duplicates",
      "skipDuplicatesDesc": "Skip clients with email addresses already in your database",
      "includeCompany": "Include company name",
      "includeCompanyDesc": "Add company name to customer name (e.g., \"Company - John Doe\")"
    },
    "complete": "Import Complete!",
    "failed": "Import Failed",
    "partialComplete": "Import Partially Complete",
    "successMessage": "Successfully imported {{count}} customers.",
    "partialMessage": "Imported {{imported}} customers with {{errors}} errors.",
    "noImports": "No customers were imported.",
    "imported": "Imported",
    "skipped": "Skipped",
    "errors": "Errors",
    "importMore": "Import More",
    "undoImport": "Undo Import",
    "undone": "Import Undone",
    "undoneMessage": "Successfully deleted {{count}} records.",
    "next": "Next",
    "back": "Back",
    "cancel": "Cancel",
    "preview": "Preview",
    "startImport": "Start Import",
    "error": {
      "csvOnly": "Please upload a CSV file",
      "parse": "Error parsing CSV file"
    },
    "deleteImportedData": "Delete previously imported data",
    "backToImport": "← Back to Import",
    "analyzeFile": "Analyze file",
    "importContacts": "Import contacts",
    "importAppointments": "Import appointments",
    "viewAgenda": "View agenda",
    "filterLinked": "✓ Linked",
    "filterNoCustomer": "⚠ No customer",
    "filterNoLink": "⚠ No link",
    "deleteImported": "Delete imported data",
    "gazelle": {
      "desc": "Import data from Gazelle"
    },
    "manager": {
      "title": "Import Manager",
      "desc": "Manage your previous imports",
      "back": "Back",
      "empty": "No imports found",
      "loading": "Loading..."
    },
    "gazelleWizardTitle": "Gazelle Import",
    "gazelleWizardDesc": "Import your data from Gazelle in 5 steps.",
    "gazelleStep1": "Clients",
    "gazelleStep2": "Pianos",
    "gazelleStep3": "Events",
    "gazelleStep4": "Services",
    "gazelleStep5": "Results",
    "gazelleFileNeeded": "Required file from Gazelle:",
    "gazelleClientsFile": "Clients",
    "gazellePianosFile": "Pianos",
    "gazelleEventsFile": "Events",
    "gazelleMslFile": "Master Service List",
    "gazelleEsiFile": "Event Service Items",
    "gazelleClientsDesc": "Upload your Gazelle Clients export. Contains client names, addresses, email and phone.",
    "gazellePianosDesc": "Upload your Gazelle Pianos export. Pianos will be automatically linked to clients.",
    "gazelleEventsDesc": "Upload your Gazelle Events export. Appointments will be linked to clients and pianos.",
    "gazelleMslDesc": "Upload your Master Service List. Contains official services with prices and descriptions.",
    "gazelleEsiDesc": "Optional: Event Service Items for exact service linking per appointment.",
    "gazelleServicesTitle": "Step 4: Import Services",
    "gazelleServicesDesc": "Upload your Master Service List (MSL). Services are also automatically derived from appointments.",
    "gazelleServicesFound": "{{count}} services found",
    "gazelleServicesMsl": "From Master Service List (official)",
    "gazelleServicesExtracted": "Derived from appointments",
    "gazelleServicesExisting": "{{count}} services already exist",
    "gazelleOptionalStep": "This step is optional",
    "gazellePersonalEvents": "Import personal events as private appointments",
    "gazellePersonalEventsDesc": "Personal/memo events will be added as private appointments in your calendar",
    "gazelleSyncedEvents": "Include synced events",
    "gazelleSyncedEventsDesc": "Synced events from other calendars are skipped by default",
    "gazelleHistorical": "{{count}} historical (not synced to Google)",
    "gazelleFuture": "{{count}} upcoming (will be synced)",
    "gazelleProcessing": "Processing...",
    "gazelleProcessingOf": "{{current}} of {{total}}",
    "gazelleResultTitle": "Import complete!",
    "gazelleResultDesc": "Your Gazelle data has been successfully imported into PianoPlanner.",
    "gazelleResultCustomers": "{{count}} clients imported",
    "gazelleResultPianos": "{{count}} pianos imported",
    "gazelleResultEvents": "{{count}} appointments imported",
    "gazelleResultServices": "{{count}} services created",
    "gazelleResultSkipped": "{{count}} skipped",
    "gazelleResultErrors": "{{count}} errors",
    "gazelleServicesTip": "💡 Tip: go to Settings → Services to adjust prices and duration.",
    "gazelleUndoAll": "Undo all",
    "gazelleUndoConfirm": "Are you sure you want to delete all imported data?",
    "gazelleDropFile": "Drop your CSV file here",
    "gazelleOrBrowse": "or click to browse",
    "gazelleFileSelected": "File selected:",
    "gazelleAnalyzing": "Analyzing file...",
    "gazelleRecordsFound": "{{count}} records found",
    "gazelleReadyToImport": "Ready to import",
    "gazelleImportBtn": "Import",
    "gazelleSkipBtn": "Skip step →",
    "gazelleNextBtn": "Next step →",
    "gazelleBackBtn": "← Previous step",
    "gazelleFinishBtn": "Finish",
    "gazelleImportSuccess": "✅ Successfully imported",
    "gazelleImportPartial": "⚠️ Partially imported",
    "gazelleImportFailed": "❌ Import failed",
    "gazelleNoFile": "No file selected yet",
    "gazelleExportInstructions": "Go to Gazelle → Data → Export and download the file:"
  },
  "emailTemplates": {
    "title": "Email Templates",
    "subtitle": "Customize the emails sent to your customers",
    "bccToSelf": "Copy to myself (BCC)",
    "bccToSelfDesc": "Automatically receive a copy of all emails sent to customers (confirmations, reminders, cancellations, invoices). Useful to verify what your customers receive.",
    "helpBanner": {
      "title": "Get started with the Email Editor",
      "subtitle": "Customize your customer emails in 3 easy steps",
      "step1Title": "Choose a template",
      "step1Desc": "Click above on the email type you want to customize (confirmation, reminder, etc.)",
      "step2Title": "Edit visually or in HTML",
      "step2Desc": "Use the 🎨 Visual mode to format text like in Word. Click on variables to insert customer details.",
      "step3Title": "Save & test",
      "step3Desc": "Check the live preview on the right. Send a test email to yourself to see the result.",
      "tip": "Tip: Variables like {{customerName}} are automatically replaced with real customer details when sending."
    },
    "confirmation": {
      "subject": "Confirmation: {{service}} on {{date}}",
      "title": "Appointment Confirmed",
      "confirmed": "Confirmed",
      "greeting": "Dear {{customerName}},",
      "intro": "Your appointment has been confirmed. Here are all the details.",
      "details": "Appointment details",
      "date": "Date",
      "time": "Time",
      "service": "Service",
      "location": "Location",
      "address": "Address",
      "instrument": "Instrument",
      "piano": "Piano",
      "pianoType": "Type",
      "serialNumber": "Serial number",
      "buildYear": "Year built",
      "pianoLocation": "Piano location",
      "notes": "Notes",
      "questions": "Do you have questions? Feel free to contact us.",
      "regards": "Kind regards,",
      "rescheduleText": "Doesn't the time suit you? You can reschedule your appointment online.",
      "rescheduleButton": "Reschedule appointment"
    },
    "reminder": {
      "subject": "Reminder: {{service}} on {{date}}",
      "title": "Reminder",
      "subtitle": "Your appointment is tomorrow",
      "tomorrow": "tomorrow",
      "inHours": "in {{hours}} hours",
      "inDays": "in {{days}} days",
      "greeting": "Dear {{customerName}},",
      "intro": "This is a reminder for your appointment:",
      "lookingForward": "We look forward to seeing you!",
      "regards": "Kind regards,"
    },
    "newBooking": {
      "subject": "New booking: {{customerName}} - {{service}}",
      "title": "New Appointment",
      "subtitle": "A new appointment has been booked",
      "customerDetails": "Customer",
      "appointmentDetails": "Appointment Details",
      "customerNote": "Customer note",
      "openPianoPlanner": "Open PianoPlanner to view this appointment"
    },
    "cancellation": {
      "subject": "Cancellation: {{service}} on {{date}}",
      "title": "Appointment Cancelled",
      "greeting": "Dear {{customerName}},",
      "intro": "Your appointment has been cancelled:",
      "reschedule": "Would you like to reschedule? Contact us or book a new appointment online.",
      "regards": "Kind regards,"
    },
    "bookingInvitation": {
      "subject": "Invitation to book an appointment",
      "title": "Book an Appointment",
      "subtitle": "Easy online booking",
      "greeting": "Dear {{customerName}},",
      "intro": "I would like to invite you to schedule an appointment. You can easily choose a suitable time using the link below.",
      "bookButton": "Book Appointment",
      "linkNote": "Or copy this link:",
      "regards": "Kind regards,"
    },
    "tuningInvitation": {
      "subject": "Time for a tuning: your {{piano_brand}} {{piano_model}}",
      "title": "Time for a Tuning",
      "subtitle": "Your piano deserves the best care",
      "greeting": "Dear {{customerName}},",
      "intro": "It has been a while since your piano was last tuned. To keep your instrument in optimal condition, it is time for maintenance.",
      "piano": "Piano",
      "lastTuning": "Last tuning",
      "unknown": "Unknown",
      "timeElapsed": "Time elapsed",
      "months": "months",
      "recommendedInterval": "Recommended interval",
      "every": "every",
      "bookNow": "Easily schedule your next tuning using the link below:",
      "bookButton": "Book an appointment now",
      "regards": "Kind regards,",
      "footer": "Professional piano tuning",
      "unsubscribeText": "Stop receiving reminders"
    },
    "teamBookingConfirmation": {
      "subject": "Confirmation: {{service}} with {{teamMember}} on {{date}}",
      "title": "Appointment Confirmed",
      "greeting": "Dear {{customerName}},",
      "intro": "Your appointment has been confirmed. One of our team members will be happy to visit.",
      "teamMember": "Team member",
      "date": "Date",
      "time": "Time",
      "service": "Service",
      "location": "Location",
      "notes": "Your notes",
      "questions": "Do you have questions? Feel free to contact us.",
      "regards": "Kind regards,"
    },
    "teamMemberNotification": {
      "subject": "New appointment assigned: {{service}} on {{date}}",
      "title": "New Appointment",
      "subtitle": "Automatically assigned via team booking",
      "greeting": "Hi {{teamMember}},",
      "intro": "A new appointment has been assigned to you via the team booking system.",
      "date": "Date",
      "time": "Time",
      "service": "Service",
      "customerInfo": "Customer details",
      "name": "Name",
      "email": "Email",
      "phone": "Phone",
      "location": "Location",
      "customerNotes": "Customer notes",
      "smartAssignment": "Smart assignment:",
      "travelTime": "Travel time from your previous appointment",
      "minutes": "minutes",
      "closing": "Good luck!",
      "footer": "This appointment was automatically assigned based on availability and location"
    },
    "teamTuningInvitation": {
      "subject": "Time for a tuning at {{companyName}}",
      "title": "Time for a Tuning",
      "subtitle": "Your piano deserves the best care",
      "greeting": "Dear {{customerName}},",
      "intro": "It has been a while since your piano was last tuned. Our team of experienced tuners is ready for you.",
      "piano": "Piano",
      "lastTuning": "Last tuning",
      "timeElapsed": "Time elapsed",
      "months": "months",
      "usp1": "Multiple experienced tuners available",
      "usp2": "Quickly find a suitable time",
      "usp3": "Automatically the nearest tuner",
      "bookNow": "Easily schedule your next tuning with our team:",
      "bookButton": "Book an appointment now",
      "regards": "Kind regards,",
      "footer": "Our team of skilled piano tuners"
    },
    "passwordReset": {
      "subject": "Reset password - PianoPlanner",
      "title": "Reset password",
      "greeting": "Hello {{name}},",
      "intro": "You have requested to reset your password. Click the button below to set a new password.",
      "button": "Reset password",
      "expiry": "This link is valid for 1 hour. If you did not make this request, you can ignore this email.",
      "requestMessage": "If this email address is registered with us, you will receive a reset link."
    },
    "rescheduleEmail": {
      "badge": "Reschedule confirmed",
      "title": "Appointment rescheduled",
      "greeting": "Dear {{name}},",
      "intro": "Your appointment has been successfully rescheduled.",
      "oldTime": "Previous time",
      "regards": "Kind regards,",
      "subject": "Appointment rescheduled: {{service}} — {{date}}",
      "ownerSubject": "{{name}} rescheduled: {{date}} {{time}}",
      "ownerTitle": "Appointment rescheduled by customer",
      "ownerIntro": "has rescheduled their appointment:",
      "from": "From:",
      "to": "To:",
      "service": "Service:",
      "location": "Location:"
    },
    "subscriptionEmail": {
      "subject": "Welcome to {{plan}}! 🎹",
      "title": "Welcome to {{plan}}!",
      "subtitle": "Your subscription has been successfully activated",
      "greeting": "Dear {{name}},",
      "intro": "Thank you for your trust in PianoPlanner! Your payment has been received and your <strong>{{plan}}</strong> subscription is now active.",
      "plan": "Plan",
      "amount": "Amount",
      "status": "Status",
      "active": "Active ✓",
      "inclVat": "incl. {{pct}}% VAT",
      "exclVat": "excl. VAT",
      "reverseCharge": "VAT reverse charged",
      "perMonth": "/month",
      "manage": "You can manage your subscription at any time via the settings in PianoPlanner. Have questions? Feel free to contact us.",
      "dashboard": "Go to your Dashboard",
      "footer": "PianoPlanner • You will receive a monthly invoice for your subscription."
    },
    "trialNudge": {
      "day7": {
        "subject": "How's it going with PianoPlanner, {{name}}?",
        "greeting": "Hi {{name}},",
        "body": "You've been using PianoPlanner for a week now — great to have you! 🎹",
        "statsTitle": "Your usage so far:",
        "statsCustomers": "{{count}} customer(s) created",
        "statsPianos": "{{count}} piano(s) registered",
        "statsAppointments": "{{count}} appointment(s) scheduled",
        "cta": "If you have any questions, just reply to this email. We're happy to help!",
        "ctaButton": "Go to PianoPlanner",
        "footer": "You have {{daysLeft}} days left in your trial. After your trial, you'll always have access to the free plan."
      },
      "day20": {
        "subject": "10 days left in your PianoPlanner trial",
        "greeting": "Hi {{name}},",
        "body": "Your trial expires in 10 days. Here's what you've accomplished so far:",
        "statsCustomers": "{{count}} customer(s)",
        "statsAppointments": "{{count}} appointment(s)",
        "statsEmails": "{{count}} emails sent",
        "loseAccess": "After your trial, you'll lose access to:",
        "loseCalendarSync": "Two-way calendar sync",
        "loseRoute": "Route optimization & Smart Suggestions",
        "loseReminders": "Automatic reminders",
        "loseInvoicing": "Invoicing & mileage tracking",
        "cta": "With the Solo plan (€24.50/mo) you keep everything, or upgrade to Pro (€39.50/mo) for the full experience.",
        "ctaButton": "View plans",
        "footer": "Your data is always safely stored, even if you don't upgrade (yet)."
      },
      "day25": {
        "subject": "⏳ 5 days left — your PianoPlanner trial is ending",
        "greeting": "Hi {{name}},",
        "body": "In 5 days your trial expires and you'll lose access to the Pro features you're currently using.",
        "warning": "Route optimization, reminders, calendar sync and invoicing won't be available in the free plan.",
        "cta": "Upgrade now and keep everything you've built.",
        "ctaButton": "Upgrade now — from €24.50/mo",
        "footer": "Your data is always safely stored, even if you don't upgrade (yet)."
      },
      "day28": {
        "subject": "🔔 2 days left — your PianoPlanner Pro access ends soon",
        "greeting": "Hi {{name}},",
        "body": "Your trial expires the day after tomorrow.",
        "warning": "You'll immediately lose access to route optimization, calendar sync, invoicing and automatic reminders.",
        "dataSafe": "Your data ({{customers}} customers, {{pianos}} pianos) is safely stored. You can always upgrade to reactivate everything.",
        "cta": "Upgrade now — you only have 2 days left to keep your Pro features.",
        "ctaButton": "Upgrade now",
        "footer": "Your data is always safely stored, even if you don't upgrade."
      },
      "expired": {
        "subject": "Your PianoPlanner trial has expired",
        "greeting": "Hi {{name}},",
        "body": "Your 30-day trial has ended. Your account is now on the free plan.",
        "whatChanges": "What changes?",
        "noRoute": "No route optimization",
        "noSync": "No calendar sync",
        "noReminders": "No automatic reminders",
        "noInvoicing": "No invoicing",
        "dataSafe": "Your data ({{customers}} customers, {{pianos}} pianos) is safe",
        "freeLimit": "Up to 25 customers and 50 appointments/year on the free plan",
        "cta": "Upgrade at any time to instantly reactivate all features.",
        "ctaButton": "Upgrade now",
        "footer": "Your data is safe. You can always upgrade whenever you're ready."
      },
      "lastchance": {
        "subject": "We miss you! Come back to PianoPlanner 🎹",
        "greeting": "Hi {{name}},",
        "body": "It's been a week since your trial expired. We hope you enjoyed the PianoPlanner experience!",
        "dataWaiting": "You have {{customers}} customers and {{pianos}} pianos in your account. That data is waiting for you.",
        "tip": "With the Solo plan (€24.50/mo) you get everything you need: unlimited customers, route optimization and automatic reminders.",
        "cta": "Upgrade today and get instant access to all features again.",
        "ctaButton": "Back to PianoPlanner",
        "footer": "This is the last reminder we'll send. You can always upgrade on your own via billing."
      },
      "banner": {
        "welcomeDays": "Welcome! You have {{days}} days to explore everything",
        "daysLeft": "{{days}} days left in your trial — upgrade to keep everything",
        "endingSoon": "{{days}} day(s) left — your Pro access ends soon!",
        "expired": "Your trial has expired — upgrade to get all features back",
        "freePlan": "Free plan — upgrade for route optimization, calendar sync and more",
        "viewPlans": "View plans",
        "upgradeNow": "Upgrade now",
        "upgrade": "Upgrade now"
      }
    },
    "invoiceEmail": {
      "payButton": "💳 Pay now",
      "paySecure": "Pay securely via credit card, bank transfer or other methods"
    },
    "variableDescriptions": {
      "customerName": "Customer's name",
      "customerEmail": "Customer's email",
      "customerPhone": "Customer's phone",
      "customerAddress": "Customer's address",
      "date": "Appointment date",
      "time": "Appointment time",
      "service": "Service name",
      "location": "Appointment location/address",
      "notes": "Notes/comments",
      "pianoBrand": "Piano brand (e.g. Steinway)",
      "pianoModel": "Piano model",
      "pianoSerial": "Piano serial number",
      "pianoBuildYear": "Piano build year",
      "pianoType": "Type (grand/upright)",
      "pianoColor": "Colour/finish of the piano",
      "pianoLocation": "Piano location (e.g. living room)",
      "lastTuning": "Date of last tuning",
      "daysSinceTuning": "Days since last tuning",
      "monthsSinceTuning": "Months since last tuning",
      "serviceInterval": "Recommended tuning interval in months",
      "bookingLink": "Customer's personal booking link",
      "reminderNumber": "Sequential reminder number (1, 2, 3...)",
      "unsubscribeLink": "Unsubscribe link for reminders",
      "companyName": "Your company name",
      "companyLogo": "Your company logo (as image)",
      "companyAddress": "Your company address",
      "companyPhone": "Your phone number",
      "companyEmail": "Your email address"
    },
    "tabs": {
      "confirmation": "Confirmation",
      "reminder": "Reminder",
      "cancellation": "Cancellation",
      "newBooking": "New Booking",
      "invitation": "Invitation"
    },
    "modeVisual": "🎨 Visual",
    "modeHtml": "</> HTML",
    "editTemplate": "Edit Template",
    "editorMode": "Editor mode:",
    "varAll": "All",
    "varCustomer": "Customer",
    "varAppointment": "Appointment",
    "varPiano": "Piano",
    "varInvitation": "Invitation",
    "varCompany": "Company",
    "resetDefault": "Reset to Default",
    "sendTest": "Send Test"
  },
  "support": {
    "pageTitle": "Support - PianoPlanner",
    "title": "Support",
    "subtitle": "Report a problem or ask a question",
    "backToDashboard": "Back to Dashboard",
    "subjectLabel": "Subject",
    "subjectPlaceholder": "Brief description of the issue",
    "typeLabel": "Report type",
    "typeBug": "🐛 Bug / Error",
    "typeQuestion": "❓ Question",
    "typeFeature": "💡 Feature request",
    "typeOther": "📋 Other",
    "priorityLabel": "Priority",
    "priorityLow": "Low",
    "priorityMedium": "Medium",
    "priorityHigh": "High",
    "descriptionLabel": "Description",
    "descriptionPlaceholder": "Describe the problem in as much detail as possible. What were you doing? What did you expect? What happened?",
    "descriptionHint": "Tip: The more details, the faster we can help you",
    "screenshotsLabel": "Screenshots (optional)",
    "dropFilesHere": "Drop files here or",
    "browse": "browse",
    "fileLimit": "Max 5 files, each max 5 MB (images or PDF)",
    "submitButton": "Submit report",
    "thankYou": "Thank you for your report!",
    "successMessage": "We have received your message and will contact you as soon as possible.",
    "sending": "Sending...",
    "sendFailed": "Sending failed",
    "sendError": "Error sending: ",
    "maxFilesError": "Maximum 5 files allowed",
    "fileTooLarge": "{file} is too large (max 5 MB)",
    "invalidFileType": "{file} is not an image or PDF"
  },
  "cookieBanner": {
    "message": "We use cookies to improve your experience. By continuing to use this site, you agree to our",
    "privacyLink": "Privacy Policy",
    "accept": "Accept",
    "decline": "Decline"
  },
  "pwaLauncher": {
    "subtitle": "Your piano business",
    "agenda": "Agenda",
    "customers": "Customers",
    "pianos": "Pianos",
    "teams": "Teams",
    "smartAppointment": "Smart Appointment",
    "sync": "Sync",
    "shareLink": "Share Link",
    "loading": "Loading...",
    "login": "Login",
    "loginSubtitle": "Log in to sync"
  },
  "creator": {
    "pageTitle": "About the Creator - PianoPlanner",
    "heroTitle": "Passion for Pianos, Precision in Planning",
    "heroSubtitle": "The story behind PianoPlanner",
    "heroIntro": "You probably know me as a fellow piano technician. Someone who visits clients with a tuning hammer and a listening ear. But what not everyone knows is that alongside piano technology, I've had a second great passion my whole life: automation and numbers.",
    "beginTitle": "The Beginning",
    "beginText": "PianoPlanner didn't just appear out of nowhere; it's the sum of years of frustration with existing software and a lifelong passion for programming.",
    "codeTitle": "From card file to code",
    "codeText1": "That love for technology started early. As a teenager, I was already programming BASIC late into the night on a ZX Spectrum. Later, armed with my first Tulip PC, I wrote my first 'real' software: a digital customer database for my father.",
    "codeText2": "In my youthful enthusiasm, I then threw away his physical card file, much to my father's shock! Eventually, I printed everything neatly for him on the dot matrix printer, but the tone was set: I wanted to organize things more efficiently, faster, and better.",
    "whyTitle": "Why I built PianoPlanner",
    "whyText1": "In my own practice, I ran into walls for years. I worked with American software that didn't quite understand our market, or I was juggling three different apps for calendar, invoicing, and routes. I thought: \"This has to be smarter.\"",
    "whyText2": "I have a great interest in everything related to business figures (we all know how complex the margin scheme can be). I wanted software that not only schedules but also thinks along with my business operations.",
    "whyText3": "When I decided to build the ultimate calendar myself, I wasn't alone. I got to work with my skills and the advice of my children and stepchildren. One graduated as an IT specialist from HAN University. The other as a Game Developer & Sound Designer from HKU. With my experience in the field and their knowledge of the latest technology (and AI), we developed PianoPlanner.",
    "smartTitle": "Smart Appointments",
    "smartText": "The core of PianoPlanner is simple: I want to see at a glance whether I'm making money or wasting time. I also don't want to spend too much time in the car and want to use my time effectively. That's why we developed Smart Appointments.",
    "colorGreen": "Green = Fits perfectly in your route",
    "colorOrange": "Orange = Watch your travel time",
    "colorRed": "Red = Inefficient, waste of your time",
    "nlTitle": "Proudly Dutch",
    "nlText1": "Unlike the big American players, I believe in local strength. PianoPlanner is an independent initiative. Your data is stored safely and encrypted on European servers, fully compliant with privacy legislation.",
    "nlText2": "I'm proud of what we've built. A system for piano tuners, by a piano tuner.",
    "signatureGreeting": "I warmly invite you to experience it yourself.",
    "signatureBye": "Kind regards,",
    "signatureName": "Edward Meijer",
    "signatureTitle": "PianoPlanner & Fellow Piano Technician",
    "ctaTitle": "Try PianoPlanner yourself",
    "ctaText": "Start for free today and discover how smart scheduling really works.",
    "ctaButton": "Start for free",
    "aboutPianoPlanner": "About PianoPlanner",
    "aboutCreator": "About the Creator",
    "footerMade": "Made with love in the Netherlands"
  },
  "why": {
    "navPricing": "Pricing",
    "navStart": "Get Started",
    "heroTitle": "Why Piano Technicians Choose PianoPlanner",
    "heroSubtitle": "Built by a piano technician who got tired of inefficient scheduling. Here's what makes PianoPlanner different from Gazelle and other software.",
    "uniqueTitle": "🏆 Features No One Else Has",
    "badgeUnique": "Unique Feature",
    "badgeSmart": "Smart",
    "badgeVisual": "Visual",
    "theaterTitle": "Theater Mode",
    "theaterDesc": "Concert halls and theaters are available when you're normally off - evenings and weekends. PianoPlanner lets you set separate working hours for these special clients.",
    "tripleCalTitle": "Triple Calendar Sync",
    "tripleCalDesc": "The only piano scheduling app with two-way sync for Google Calendar, Microsoft 365, AND Apple Calendar - all at once. Your private appointments automatically block availability.",
    "personalLinkTitle": "Personal Booking Links",
    "personalLinkDesc": "Every customer gets their own unique booking link with pre-filled details: name, address, pianos, last tuning date, and service interval.",
    "smartOriginTitle": "Smart Origin Routing",
    "smartOriginDesc": "Route calculation starts from your PREVIOUS appointment, not your office. Combined with data from all your calendars (Google, Apple, Microsoft) for accurate travel times.",
    "routeColorsTitle": "Route Efficiency Colors",
    "routeColorsDesc": "See at a glance if your day is efficiently planned. Every appointment is color-coded based on travel time from the previous one.",
    "pianoLocTitle": "Piano ≠ Customer Location",
    "pianoLocDesc": "PianoPlanner understands that a piano can be somewhere else than where the customer lives. Route calculation uses the piano's actual location.",
    "compareTitle": "📊 Side-by-Side Comparison",
    "compareSubtitle": "See how PianoPlanner stacks up against other scheduling software for piano technicians.",
    "tableFeature": "Feature",
    "featureTarget": "Target Audience",
    "featureTargetPP": "Piano Technicians",
    "featureTargetGZ": "Piano Technicians",
    "featureTargetSP": "HVAC Installers",
    "featureTheater": "Theater/Venue Hours",
    "featureGoogle": "Google Calendar",
    "featureMicrosoft": "Microsoft 365",
    "featureApple": "Apple Calendar",
    "featurePersonalLinks": "Personal Customer Links",
    "featureRouteColors": "Route Efficiency Colors",
    "featureSmartOrigin": "Smart Origin (from previous apt)",
    "featurePianoLoc": "Piano Location Support",
    "featureTuningReminders": "Automatic Tuning Reminders",
    "featureOffline": "Offline PWA App",
    "featureLanguages": "Languages",
    "featureServers": "Data Location",
    "featurePrice": "Starting Price",
    "featureFree": "Free Tier",
    "ownOnly": "Own calendar only",
    "nativeApp": "Native app",
    "serversEU": "Europe (GDPR)",
    "serversUS": "USA",
    "serversNL": "Netherlands",
    "free25": "25 customers",
    "trial30": "30 day trial",
    "trial14": "14 day trial",
    "routeDemoTitle": "🚦 Route Efficiency at a Glance",
    "routeGreen": "<15 min travel - Efficient",
    "routeOrange": "15-30 min travel - Acceptable",
    "routeRed": ">30 min travel - Consider rescheduling",
    "ctaTitle": "Ready to Try PianoPlanner?",
    "ctaDesc": "Start free with up to 25 customers. No credit card required. Import your existing data from Gazelle or Excel in minutes.",
    "ctaButton": "Get Started Free →",
    "footerMadeBy": "Made with ♥ in Tilburg, Netherlands"
  },
  "footer": {
    "google": "Google Calendar",
    "microsoft": "Microsoft 365",
    "apple": "Apple Calendar",
    "offline": "Offline Mode",
    "push": "Push Notifications",
    "languages": "4 Languages",
    "smtp": "Own SMTP",
    "route": "Route Planning",
    "navFeatures": "Features",
    "navPricing": "Pricing",
    "navWhy": "Why PianoPlanner",
    "navAbout": "My Story",
    "navLogin": "Login",
    "navPrivacy": "Privacy",
    "navTerms": "Terms",
    "navContact": "Contact",
    "navDpa": "DPA"
  },
  "gazelleMigration": {
    "buttons": {
      "cancel": "Cancel",
      "nextAppointments": "Next: Appointments →",
      "skipStep": "Skip this step",
      "importCustomers": "Import Customers",
      "importAppointments": "Import Appointments",
      "back": "← Back",
      "viewCustomers": "View Customers",
      "skipFinish": "Skip & Finish",
      "goToDashboard": "Go to Dashboard",
      "nextCleanup": "Next: Clean up →",
      "cleanupNotes": "Clean up Notes",
      "importPianos": "Import Pianos",
      "viewPianos": "View Pianos",
      "nextPianos": "Next: Pianos →"
    },
    "options": {
      "skipNoCustomerEvents": "Overslaan als customer niet gevonden",
      "skipDuplicates": "Duplicaten overslaan",
      "activeOnlyPianos": "Import active pianos only",
      "skipNoCustomer": "Overslaan als customer niet gevonden",
      "activeOnlyDesc": "Skip customers marked as inactive in Gazelle",
      "completedOnly": "Alleen voltooide appointments importeren",
      "skipDuplicatesDesc": "Sla customers over met e-mailadressen die al in je database staan",
      "title": "Import Opties",
      "cleanNotes": "Notities opschonen",
      "activeOnlyPianosDesc": "Sla pianos over die als inactief zijn gemarkeerd in Gazelle",
      "skipNoCustomerEventsDesc": "Importeer alleen appointments die aan een bestaande customer gekoppeld kunnen worden",
      "cleanNotesDesc": "Delete dubbele regels en merge-artefacten uit notities",
      "completedOnlyDesc": "Sla geannuleerde en wachtende appointments over",
      "skipNoCustomerDesc": "Importeer alleen pianos die aan een bestaande customer gekoppeld kunnen worden",
      "activeOnly": "Import active customers only"
    },
    "step4": {
      "warningTitle": "Let op: Dit is permanent!",
      "whatRemoved": "Wat wordt verwijderd?",
      "cleaningUp": "Bezig met opschonen...",
      "notesPreserved": "Je eigen notities en opmerkingen blijven behouden!",
      "whatRemovedDesc": "Alleen deze specifieke import-markeringen worden verwijderd:",
      "title": "Step 4: Clean up",
      "pending": "Wachtend",
      "desc": "Delete import-metadata uit je records voor een schone start.",
      "summaryTitle": "Import Samenvatting",
      "markerBatch": "Import Batch: imp_xxx",
      "completeDesc": "Je gegevens zijn succesvol imported ofuit Gazelle.",
      "markerEvent": "Original Event ID: evt_xxx",
      "complete": "Migratie Voltooid!",
      "markerClient": "Original ID: cli_xxx",
      "warningDesc": "Na opschonen kun je geen nieuwe Gazelle imports meer koppelen aan deze customers. De Originele ID's zijn nodig om pianos en appointments aan customers te koppelen.",
      "markerPiano": "Original Piano ID: ins_xxx",
      "done": "Klaar",
      "warningNote": "Schoon alleen op als je 100% klaar bent met alle imports!",
      "recordsWithMeta": "{{count}} records met import-metadata"
    },
    "progress": {
      "importingPianos": "Pianos worden imported...",
      "importingCustomers": "Customers worden imported...",
      "importingAppointments": "Appointments worden imported..."
    },
    "table": {
      "name": "Naam",
      "brand": "Merk",
      "title": "Titel",
      "status": "Status",
      "city": "Plaats",
      "duration": "Dhour",
      "email": "E-mail",
      "phone": "Telefoon",
      "customer": "Klant",
      "model": "Model",
      "date": "Datum",
      "type": "Type"
    },
    "step1": {
      "dropHint": "of klik om te bladeren",
      "dropTitle": "Sleep Gazelle Export: Clients.csv hierheen",
      "desc": "Upload je Gazelle \"Clients.csv\" exportbestand. Klant-ID's worden bewaard voor het koppelen of pianos.",
      "title": "Step 1: Import Customers"
    },
    "status": {
      "imported": "{{count}} imported",
      "finalStep": "Laatste stap",
      "notImported": "Niet imported",
      "waiting": "Wachten..."
    },
    "step3": {
      "title": "Step 3: Import Appointments",
      "desc": "Upload je Gazelle \"Events.csv\" exportbestand om appointmentgeschiedenis te importeren.",
      "dropHint": "of klik om te bladeren",
      "dropTitle": "Sleep Gazelle Export: Events.csv hierheen",
      "warningDesc": "Dit importeert oude appointments als referentie. Toekomstige appointments maak je vers in PianoPlanner.",
      "warningTitle": "Alleen Historische Data"
    },
    "step2": {
      "dropHint": "of klik om te bladeren",
      "linkInfoDesc": "Pianos worden gekoppeld aan customers via het Originele ID in de customernotities.",
      "linkInfoTitle": "Automatische Klantkoppeling",
      "desc": "Upload je Gazelle \"Pianos.csv\" exportbestand. Pianos worden automatisch aan customers gekoppeld.",
      "title": "Step 2: Import Pianos",
      "dropTitle": "Sleep Gazelle Export: Pianos.csv hierheen"
    },
    "stats": {
      "withEmail": "Met E-mail",
      "withCustomer": "Met Klant",
      "completed": "Voltooid",
      "total": "Totaal",
      "active": "Actief",
      "canceled": "Geannuleerd",
      "inactive": "Inactief"
    },
    "confirm": {
      "title": "⚠️ IMPORTANT: This action is permanent!",
      "message": "After cleaning up, you can NO longer link new Gazelle importsn aan deze customers.\n\nGa alleen verder als je 100% klaar bent met ALLE Gazelle imports.\n\nDoorgaan met opschonen?"
    },
    "backToSettings": "← Back to Settings",
    "subtitle": "Importeer al je gegevens of Gazelle naar PianoPlanner",
    "step": {
      "appointments": "Appointments",
      "cleanup": "Clean up",
      "pianos": "Pianos",
      "customers": "Customers"
    },
    "results": {
      "customersSuccess": "Customers Successfully Geïmporteerd!",
      "pianosSuccess": "Pianos Successfully Geïmporteerd!",
      "importedSkipped": "{{imported}} imported, {{skipped}} skipped",
      "appointmentsSuccess": "Appointments Successfully Geïmporteerd!"
    },
    "title": "Gazelle Migration"
  },
  "guide": {
    "title": "User Guide",
    "subtitle": "Everything you need to know to get the most out of PianoPlanner",
    "sidebar": {
      "gettingStarted": "Getting Started",
      "firstSteps": "First Steps",
      "businessDetails": "Business Details",
      "workingHours": "Working Hours",
      "serviceArea": "Service Area",
      "routeEfficiency": "Route Efficiency",
      "calendarSync": "Calendar Sync",
      "googleCalendar": "Google Calendar",
      "microsoftCalendar": "Microsoft 365",
      "appleCalendar": "Apple Calendar",
      "switchCalendar": "Switch Calendar Provider",
      "syncMethods": "Sync Methods",
      "advancedSettings": "Advanced Settings",
      "customDomain": "Custom Email Domain",
      "emailTemplates": "Email Templates",
      "tuningInvitations": "Tuning Invitations",
      "customerFeatures": "Customer Features",
      "bookingLink": "Booking Link",
      "customerLink": "Personal Links",
      "smartSuggestions": "Smart Suggestions",
      "routeAnalysis": "Route Analysis",
      "theaterAvailability": "Theater Availability",
      "pianoService": "Piano Service History",
      "otherFeatures": "Other Features",
      "slotDuration": "Slot Duration",
      "importData": "Import Data",
      "privateAppointments": "Private Appointments",
      "mileageTracking": "Mileage Tracking",
      "calendarIntegration": "Calendar integration",
      "dataManagement": "Data management",
      "emailSetup": "Email settings",
      "onlineBooking": "Online booking",
      "pianosService": "Pianos & Service",
      "serviceHistory": "Service history",
      "workshopPlanning": "Workshop",
      "workshopSetup": "Workshop Planning",
      "walkInTasks": "Walk-in & Tasks",
      "projectPlanner": "Project Planner",
      "dailyUse": "Daily Use",
      "dashboard": "Dashboard & Calendar",
      "customers": "Customer Management",
      "pianos": "Piano Management",
      "travelReport": "Travel Report",
      "invoicing": "Invoicing",
      "invoicingSetup": "Invoice Setup",
      "invoicingCreate": "Creating Invoices",
      "invoicingMobile": "Invoicing on Mobile",
      "invoicingBtw": "VAT Handling",
      "autoTuningReminders": "Automatic Reminders",
      "accountingIntegration": "Accounting Integration",
      "smartFill": "Route Fill",
      "servicesConfig": "Services",
      "reschedule": "Reschedule",
      "routeOptimizer": "Route Optimizer",
      "qrCode": "QR Code",
      "mobileApp": "Mobile App",
      "pwaInstall": "Install App",
      "pushNotifications": "Push Notifications",
      "molliePayments": "Online Payments",
      "accountSection": "Account",
      "subscription": "Subscription & Billing",
      "teams": "Teams",
      "streamlineDay": "Streamline Day",
      "trafficPrediction": "Traffic Prediction"
    },
    "common": {
      "tip": "Tip",
      "important": "Important",
      "yes": "Yes"
    },
    "firstSteps": {
      "title": "First Steps",
      "intro": "Welcome to PianoPlanner! This guide will help you get started quickly. Begin with these essential settings and you'll be ready to book your first appointment within minutes.",
      "recommendedOrder": "Recommended Order",
      "orderList": "1. Business Details → 2. Working Hours → 3. Service Area → 4. Calendar → 5. Email → 6. Booking Link",
      "configureText": "Take some time to configure everything properly. This saves you work later and ensures that:",
      "benefit1": "Travel times are calculated correctly",
      "benefit2": "Customers can only book when you're available",
      "benefit3": "Emails look professional with your own details",
      "benefit4": "Appointments automatically appear in your calendar",
      "quickStartTitle": "Quick Start (5 minutes)",
      "quickStart1": "Business details - Your name and address for confirmations",
      "quickStart2": "Working hours - When can customers book?",
      "quickStart3": "Services - What do you offer? (Tuning, regulation, etc.)",
      "quickStart4": "Your first customer - Add one and try it yourself",
      "settingsTitle": "Find the settings",
      "settingsText": "Everything you need to configure can be found in Settings (the gear ⚙️ in the menu). Below we'll help you step by step.",
      "onboardingTip": "Use the Onboarding Wizard (Settings → Onboarding) to be guided through the most important settings step by step."
    },
    "businessDetails": {
      "title": "Business Details",
      "intro": "Your business details appear in email confirmations and on your booking page. Fill these in correctly so customers know exactly who you are.",
      "whatToFillTitle": "What to fill in?",
      "whatToFillText": "In Settings → Company you'll find the following fields:",
      "field1": "Company name - Your official business name",
      "field2": "Address - Your business address (used for route calculations)",
      "field3": "Phone number - Where customers can reach you",
      "field4": "Email address - For confirmations (can later be your own domain)",
      "field5": "Logo - Upload your logo for a professional appearance",
      "whyImportantTitle": "Why is this important?",
      "whyImportantText": "Your address is used as the starting point for route calculations. If a customer lives nearby, the system sees this and can make smarter suggestions. Your company name and logo appear on every email you send.",
      "tipText": "You can always adjust your details later. Start with the basics and refine as you gain more experience.",
      "howToSetup": "How to set up your business details?",
      "step1Title": "Go to Settings",
      "step1Text": "Click on Settings in the menu, or go directly to the 'Company' tab.",
      "step2Title": "Fill in your details",
      "step2Text": "Company name, your name, email, phone and full address. Use Google Maps suggestions for an exact address.",
      "step3Title": "Upload your logo (optional)",
      "step3Text": "Your logo appears on the booking page and in emails.",
      "step4Title": "Verify your address",
      "step4Text": "Make sure your address is correct - it's used for travel time calculations.",
      "step5Title": "Save",
      "step5Text": "Click Save to store your details.",
      "warning": "Without a correct address, travel times cannot be calculated. Fill this in first!"
    },
    "workingHours": {
      "title": "Setting Working Hours",
      "intro": "Your working hours determine when customers can book appointments. The system only shows time slots within these hours.",
      "whereToFindTitle": "Where to find this?",
      "whereToFindText": "Go to Settings → Company and scroll to \"Availability\".",
      "howToSetTitle": "How to set it up?",
      "howToSetItem1": "Click on a day to turn it on or off",
      "howToSetItem2": "Set the start and end time per day",
      "howToSetItem3": "Use different times for different days (e.g., Wednesday shorter)",
      "exampleTitle": "Example",
      "exampleText": "Most piano technicians work Monday-Friday from 9:00 to 17:00. Saturday is optional. Sunday usually off.",
      "importantTitle": "Important tips",
      "importantItem1": "Account for travel time - don't plan too tight",
      "importantItem2": "Lunch break? The system automatically avoids times around 12:00-13:00 unless you disable this",
      "importantItem3": "Theaters? Set separate \"Theater availability\" (see section below)",
      "bufferAfter": "Buffer after appointment",
      "bufferAfterDesc": "Extra time after an appointment for notes or unexpected delays",
      "bufferAfterRec": "15 minutes recommended",
      "bufferBefore": "Buffer before appointment",
      "bufferBeforeDesc": "Minimum time between booking and the appointment",
      "bufferBeforeRec": "2 days recommended for planning",
      "bufferType": "Buffer type",
      "buffersText": "Buffers help you keep time between appointments and prevent customers from booking too last-minute.",
      "daysAndTimes": "Days and times",
      "daysAndTimesText": "Select the days you work and set the start and end time for each day.",
      "minBookingTime": "Minimum booking time",
      "minBookingTimeDesc": "How far in advance must customers book?",
      "minBookingTimeRec": "2 days gives you time to plan",
      "option1": "Option 1: Fixed times every day",
      "option2": "Option 2: Different times per day",
      "option3": "Option 3: Some days off",
      "recommended": "Recommended",
      "settingBuffers": "Setting buffers",
      "tipText": "Start with wide working hours and narrow down later if certain times don't work.",
      "whatDoesItDo": "What does this do?"
    },
    "serviceArea": {
      "title": "Setting Your Service Area",
      "intro": "Your service area determines how far you're willing to drive for appointments. This helps the system make smart suggestions and prevents bookings that are too far away.",
      "howItWorksTitle": "How does it work?",
      "howItWorksText": "Set a maximum travel distance (e.g., 50 km). The system:",
      "howItWorks1": "Filters booking requests outside your area",
      "howItWorks2": "Prioritizes customers close to each other",
      "howItWorks3": "Calculates travel time for route optimization",
      "settingTitle": "Setting up",
      "step1Title": "Go to Settings → Company",
      "step1Text": "Scroll to the \"Service Area\" section.",
      "step2Title": "Choose your maximum distance",
      "step2Text": "Select how many kilometers you're willing to drive maximum. Default is 50 km.",
      "step3Title": "Optional: Set postal code areas",
      "step3Text": "You can also specify specific postal code areas where you work.",
      "tipText": "Start wide (e.g., 75 km) and restrict later if you get too many requests from far away.",
      "extraOption": "Extra option",
      "extraOptionText": "You can also exclude specific postal code areas if you don't want to serve certain regions.",
      "howToSet": "How to set your service area?",
      "step4Title": "4. Save",
      "step4Text": "Click Save. The system now takes your service area into account for bookings and suggestions."
    },
    "dashboard": {
      "sectionTitle": "Dashboard & Calendar",
      "intro": "The dashboard is your central workspace. Here you find your calendar, daily overview, quick actions and useful widgets — everything you need for a productive workday.",
      "layoutTitle": "Dashboard layout",
      "layoutText": "Your dashboard is divided into three columns: a left panel with quick overviews, the calendar in the center, and a right panel with statistics and widgets.",
      "leftPanelTitle": "Left panel",
      "leftMiniCal": "Mini calendar — quickly navigate between dates",
      "leftTrafficLights": "Traffic lights — see the day status at a glance (done, in progress, to do)",
      "leftCurrentAppt": "Current appointment — shows the appointment you're working on right now",
      "leftUpcoming": "Coming up today — quick list of remaining appointments",
      "leftPending": "To process — appointments that still need follow-up",
      "calendarTitle": "Calendar",
      "calendarText": "Switch between day, week and month views. Click on a time slot to create a new appointment. Drag appointments to move them. Double-click to edit.",
      "calendarDrag": "Drag & drop — move appointments to a different time or day",
      "calendarResize": "Resize — drag the bottom edge of an appointment to change the duration",
      "calendarRoute": "Route button — calculate travel times and color-code your appointments",
      "calendarFilters": "Filters — show/hide appointment types (field, workshop, private)",
      "rightPanelTitle": "Right panel",
      "rightToday": "Today's appointments list with customer details",
      "rightUpcoming": "Upcoming appointments for the next days",
      "rightWorkshop": "Workshop / field service statistics for the day",
      "rightMileage": "Mileage widget — current month km overview and quick-add trips (Pro)",
      "createApptTitle": "Creating an appointment",
      "createStep1Title": "Click a time slot or press +",
      "createStep1Text": "Click on a time in the calendar, or use the + button in the bottom right.",
      "createStep2Title": "Select a customer",
      "createStep2Text": "Search for an existing customer or create a new one on-the-fly.",
      "createStep3Title": "Choose location type",
      "createStep3Text": "Select 'At customer' for on-site visits or 'Workshop' for in-house work.",
      "createStep4Title": "Pick a piano (optional)",
      "createStep4Text": "Smart Pick highlights pianos that are due for maintenance with a yellow glow. Click to select.",
      "createStep5Title": "Set time & duration, then save",
      "createStep5Text": "Adjust the time and duration if needed. Click Save — the appointment appears in your calendar.",
      "smartPickTitle": "Smart Pick",
      "smartPickText": "Pianos highlighted with a yellow glow are recommended by Smart Pick. It considers the tuning interval, last service date and season to suggest which pianos need attention.",
      "tipText": "Use week view for planning efficiency and day view for detailed scheduling. The calendar remembers your preferred view."
    },
    "customers": {
      "title": "Customer Management",
      "intro": "Keep all your customer data in one place. Add customers, link their pianos, track service history and send professional emails — all from a single overview.",
      "addTitle": "Adding a customer",
      "addStep1Title": "Go to Customers",
      "addStep1Text": "Click \"Customers\" in the navigation menu to open the customer overview.",
      "addStep2Title": "Click + New Customer",
      "addStep2Text": "Fill in name, address, email and phone. The address is used for travel time calculations.",
      "addStep3Title": "Add notes (optional)",
      "addStep3Text": "Add parking instructions, gate codes or special requests. These notes appear when creating appointments.",
      "detailTitle": "Customer detail page",
      "detailText": "Click on a customer to see their full profile. Here you'll find:",
      "detailPianos": "All linked pianos with service status",
      "detailHistory": "Complete appointment history",
      "detailBooking": "Personal booking link to share with the customer",
      "detailInvite": "Send tuning invitations directly",
      "detailNotes": "Contact information and notes",
      "searchTitle": "Search & filter",
      "searchText": "Use the search bar to quickly find customers by name, email, city or phone number. The list updates as you type.",
      "tip": "You can also add new customers directly when creating an appointment. Just type the name in the customer field and click '+ Create new customer'."
    },
    "pianos": {
      "title": "Piano Management",
      "intro": "Track every piano you service. Record brand, model, serial number, year and condition. Link pianos to customers and keep a complete service history.",
      "addTitle": "Adding a piano",
      "addStep1Title": "Go to Pianos",
      "addStep1Text": "Click \"Pianos\" in the navigation menu, then click \"+ New Piano\".",
      "addStep2Title": "Link to a customer",
      "addStep2Text": "Select the customer who owns this piano. The piano appears on their detail page.",
      "addStep3Title": "Fill in piano details",
      "addStep3Text": "Brand, model, serial number, year of manufacture, type (grand/upright/digital) and location in the house.",
      "addStep4Title": "Set the tuning interval",
      "addStep4Text": "Choose how often this piano should be tuned: every 3, 6 or 12 months, or 0 if the customer initiates contact.",
      "detailTitle": "Piano detail page",
      "detailInfo": "Full piano specifications and condition notes",
      "detailService": "Service history — all past appointments and tunings",
      "detailStatus": "Service status indicator: on time, coming due, or overdue",
      "detailPhotos": "Photos — upload images of the piano for reference",
      "serviceIntervalTitle": "Tuning intervals explained",
      "intervalHeader": "Interval",
      "meaningHeader": "Meaning",
      "interval0": "Customer initiates contact — no automatic reminders",
      "interval3": "Every 3 months — for concert pianos or intensive use",
      "interval6": "Every 6 months — standard for most pianos",
      "interval12": "Yearly — for pianos with light use",
      "smartPickTitle": "Smart Pick uses these intervals",
      "smartPickText": "When creating an appointment, Smart Pick automatically highlights pianos that are due for maintenance based on the configured interval and last service date."
    },
    "routeEfficiency": {
      "title": "Understanding Route Efficiency",
      "intro": "PianoPlanner shows you how efficient your schedule is with a color system. This way you can see at a glance whether your day is well planned.",
      "colorsTitle": "The colors",
      "colorGreen": "Green - Excellent! Short travel time, efficient route",
      "colorOrange": "Orange - Acceptable, but there's room for improvement",
      "colorRed": "Red - Long travel time, consider rescheduling",
      "whereToSeeTitle": "Where do you see this?",
      "whereToSeeText": "On the dashboard you'll see a small color indicator with each appointment. Check your day or week view to recognize patterns.",
      "tipsTitle": "Tips for better routes",
      "tip1": "Plan appointments in the same region on the same day",
      "tip2": "Use smart suggestions - they take your existing appointments into account",
      "tip3": "Check the map view to see your appointments geographically",
      "blueTitle": "🔵 Default",
      "blueText": "No travel data available - travel time has not been calculated",
      "calcStep1Title": "Automatic calculation",
      "calcStep1Text": "When creating an appointment, PianoPlanner automatically calculates travel time from your previous location.",
      "calcStep2Title": "Color coding",
      "calcStep2Text": "The color indicates how efficient the trip is compared to your set limits.",
      "calculateTravel": "How is travel time calculated?",
      "colorLegend": "Color legend",
      "customizeLimits": "Customize limits",
      "customizeLimitsText": "You can adjust the travel time thresholds in Settings → Company. Set what 'short', 'medium' and 'long' means for you.",
      "greenTitle": "🟢 Green",
      "greenText": "Short travel time - efficient planning!",
      "orangeTitle": "🟠 Orange",
      "orangeText": "Average travel time - acceptable but could be better",
      "redTitle": "🔴 Red",
      "redText": "Long travel time - consider rescheduling"
    },
    "googleCalendar": {
      "title": "Connecting Google Calendar",
      "intro": "Sync PianoPlanner with your Google Calendar for two-way sync. Appointments appear in both calendars and updates are automatically synchronized.",
      "step1Title": "1. Go to Settings → Integrations",
      "step1Text": "Open the settings menu and click on \"Integrations\" or \"Calendar Sync\".",
      "step2Title": "2. Click \"Connect Google Calendar\"",
      "step2Text": "You'll be redirected to Google to log in.",
      "step3Title": "3. Log in to Google",
      "step3Text": "Use the Google account you want to connect. Allow the requested permissions.",
      "step4Title": "4. Select your calendar",
      "step4Text": "Choose which Google Calendar you want to sync (usually your main calendar).",
      "step5Title": "5. Done!",
      "step5Text": "New appointments now automatically appear in your Google Calendar.",
      "whatSyncsTitle": "What gets synchronized?",
      "whatSyncsText": "New appointments in PianoPlanner → Google Calendar, Changes in time/date, Cancellations (appointment is deleted/marked), Google Calendar events → PianoPlanner (blocking)",
      "tipText": "Two-way sync means if you block something in Google, PianoPlanner also takes this into account when showing available time slots.",
      "creatingConnection": "Creating connection",
      "description": "Description",
      "includeTravelTime": "Include travel time",
      "includeTravelTimeDesc": "Automatically add travel time to calendar events",
      "option": "Option",
      "syncOptions": "Sync options",
      "toGoogleOnly": "To Google only",
      "toGoogleOnlyDesc": "Appointments are only sent from PianoPlanner to Google",
      "twoWaySync": "Two-way sync",
      "twoWaySyncDesc": "Changes in both calendars are synchronized"
    },
    "microsoftCalendar": {
      "title": "Connecting Microsoft 365",
      "intro": "Do you use Outlook or Microsoft 365? Connect your calendar for seamless synchronization with PianoPlanner.",
      "step1Title": "1. Go to Settings → Integrations",
      "step1Text": "Open the settings menu.",
      "step2Title": "2. Click \"Connect Microsoft 365\"",
      "step2Text": "You'll be redirected to Microsoft to log in.",
      "step3Title": "3. Log in with your Microsoft account",
      "step3Text": "This can be a personal or business account. Allow the permissions.",
      "step4Title": "4. Select your calendar",
      "step4Text": "Choose which Outlook calendar you want to use.",
      "step5Title": "5. Sync active",
      "step5Text": "Your appointments are now being synchronized.",
      "tipText": "Microsoft 365 Business accounts may require additional approval from your IT administrator.",
      "connecting": "Connecting",
      "need1": "A Microsoft 365 or Outlook.com account",
      "need2": "Access to your calendar",
      "sync1": "New appointments in PianoPlanner",
      "sync2": "Changes to time and date",
      "sync3": "Cancellations",
      "whatGetsSynced": "What gets synced?",
      "whatYouNeed": "What do you need?",
      "worksWithBoth": "Works with both",
      "worksWithBothText": "Both personal (Outlook.com) and business (Microsoft 365) accounts are supported."
    },
    "appleCalendar": {
      "title": "Apple Calendar (iCloud)",
      "intro": "Apple Calendar works slightly differently than Google and Microsoft. You can subscribe your PianoPlanner calendar in Apple Calendar, but this is one-way synchronization.",
      "howItWorksTitle": "How does it work?",
      "howItWorksText": "PianoPlanner provides a calendar feed (ICS URL) that you can add to Apple Calendar. The calendar refreshes periodically (every 15-60 minutes).",
      "step1Title": "1. Copy your feed URL",
      "step1Text": "Go to Settings → Integrations and copy your personal ICS link.",
      "step2Title": "2. Open Apple Calendar",
      "step2Text": "On Mac: Calendar → File → New Calendar Subscription, On iPhone: Settings → Calendar → Accounts → Add Account → Other",
      "step3Title": "3. Paste the URL",
      "step3Text": "Paste the copied link and confirm.",
      "step4Title": "4. Set refresh interval",
      "step4Text": "Choose how often the calendar should refresh (default: every 15 minutes).",
      "limitationTitle": "Limitation",
      "limitationText": "This is read-only. Changes in Apple Calendar will NOT be sent back to PianoPlanner. Always make changes in PianoPlanner itself.",
      "connStep1Title": "1. Copy your calendar feed URL",
      "connStep1Text": "Go to Settings → Integrations and copy the iCal feed URL.",
      "connStep2Title": "2. Open Apple Calendar",
      "connStep2Text": "On Mac: File → New Calendar Subscription. On iPhone/iPad: Settings → Calendar → Accounts → Add Account.",
      "connStep3Title": "3. Paste the URL",
      "connStep3Text": "Paste the copied feed URL in the URL field.",
      "connStep4Title": "4. Configure settings",
      "connStep4Text": "Choose a name for the calendar and set the refresh interval.",
      "connStep5Title": "5. Subscribe",
      "connStep5Text": "Click Subscribe or OK. Your appointments now appear in Apple Calendar!",
      "connectionInPP": "Connecting in PianoPlanner",
      "creatingPassword": "Creating an app-specific password",
      "passStep1Title": "1. Go to Apple ID",
      "passStep1Text": "Open appleid.apple.com and sign in with your Apple ID.",
      "passStep2Title": "2. Go to Security",
      "passStep2Text": "Scroll to the 'App-Specific Passwords' section.",
      "passStep3Title": "3. Generate password",
      "passStep3Text": "Click 'Generate Password' and give it a name (e.g. 'PianoPlanner').",
      "passStep4Title": "4. Copy the password",
      "passStep4Text": "Copy the generated password - you'll only see it once!",
      "requiredPassword": "Required: App-specific password",
      "requiredPasswordText": "Apple requires an app-specific password for third-party app access. This is an extra security layer."
    },
    "switchCalendar": {
      "title": "Switch Calendar Provider",
      "intro": "Want to switch from Google Calendar to Apple Calendar (or vice versa)? You can do this without losing any appointments. This is also relevant if you want to move away from US cloud services and have more control over your data.",
      "noDataLoss": "No data loss",
      "noDataLossText": "All appointments are always safely stored in PianoPlanner. Calendar sync is just a copy to your calendar app. If you stop a sync, all appointments remain — both in PianoPlanner and in your old calendar.",
      "whySwitch": "Why switch?",
      "reason1": "Privacy: Apple processes data in Europe (GDPR), Google in the US",
      "reason2": "Less Big Tech dependency: No Google account needed for your calendar",
      "reason3": "Better integration: Apple Calendar works seamlessly on iPhone, iPad and Mac",
      "reason4": "Digital sovereignty: Your data, your choice where it's stored",
      "howTo": "Step-by-step switching",
      "step1Title": "1. Check your appointments",
      "step1Text": "Go to your calendar in PianoPlanner and verify all your appointments are there. All data is stored centrally — the calendar sync is just a copy.",
      "step2Title": "2. Disconnect your current calendar",
      "step2Text": "Go to Settings → Calendar and click 'Disconnect' for your current provider (e.g. Google). Your appointments in PianoPlanner and your old calendar will remain intact.",
      "step3Title": "3. Create an app-specific password (Apple)",
      "step3Text": "Go to appleid.apple.com → Sign-In and Security → App-Specific Passwords. Create a new password named 'PianoPlanner'.",
      "step4Title": "4. Connect Apple Calendar",
      "step4Text": "Go to Settings → Calendar → Apple. Enter your Apple ID email and the app-specific password. Choose the right calendar.",
      "step5Title": "5. Synchronize",
      "step5Text": "PianoPlanner automatically sends all existing appointments (up to 1 year back and 1 year ahead) to your new Apple Calendar. No manual transfer needed.",
      "tipTitle": "Tip: Clean up old calendar",
      "tipText": "After switching, your appointments still exist in your old calendar (e.g. Google). You can leave them as an archive, or manually delete them later. They will no longer be synchronized.",
      "comparisonTitle": "Comparison: Google vs Apple",
      "dataLocation": "Data location",
      "dataGoogle": "US (Google Cloud)",
      "dataApple": "Europe (Apple iCloud)",
      "syncType": "Sync method",
      "direction": "Direction",
      "dirBoth": "Two-way",
      "privacy": "Privacy (GDPR)"
    },
    "syncMethods": {
      "title": "Sync Methods Compared",
      "intro": "Not all calendar synchronization is the same. Here you can see the differences between the methods.",
      "tableCalendar": "Calendar",
      "tableSyncType": "Sync type",
      "tableDirection": "Direction",
      "tableRealTime": "Real-time",
      "twoWay": "Two-way",
      "oneWay": "One-way",
      "bothDirections": "Both directions",
      "toApple": "→ Only to Apple",
      "near": "Nearly",
      "delayed": "Delayed (15-60 min)",
      "recommendationTitle": "Recommendation",
      "recommendationText": "If you have a choice, use Google Calendar for the best experience. The two-way sync is the most complete and reliable.",
      "appleBestFor": "Anyone using iCloud Calendar as primary calendar",
      "bestFor": "Best for",
      "direction": "Direction",
      "every15to60": "Every 15-60 min",
      "googleBestFor": "Anyone with a Google account - most complete integration",
      "icalBestFor": "Simple read-only sync with any calendar app",
      "icalFeed": "iCal Feed",
      "icalIntro": "Would you like your tuning appointments to automatically appear in the calendar you already use on your phone or computer (such as Samsung, Google, or Outlook)? That's easy — just connect the calendars.",
      "icalStep1Title": "Step 1: Copy the link",
      "icalStep1Text": "Go to Settings → Integrations. There you'll find a button to copy the calendar link. Click it — the link is now saved to your clipboard.",
      "icalStep2Title": "Step 2: Paste the link in your calendar",
      "icalStep2Text": "Open your own calendar app and look for the option to add a calendar.",
      "method": "Method",
      "microsoftBestFor": "Microsoft 365 or Outlook users",
      "readOnly": "Read only",
      "realtime": "Realtime",
      "usingIcal": "Your tuning appointments in your own trusted calendar",
      "icalHow": "How does it work?",
      "icalHowText": "You copy a special 'digital key' (a link). You paste this once into your own calendar app. After that, all your appointments sync automatically.",
      "icalAppTipsTitle": "Instructions per app",
      "icalTipGoogle": "Go to 'Add calendar' (preferably on your computer) and choose 'From URL'.",
      "icalTipOutlook": "Choose 'New calendar' then select 'From network' or 'From Internet'.",
      "icalGoodToKnow": "Good to know",
      "icalNote1": "View only — you can see your appointments in your own calendar, but changes are made in PianoPlanner.",
      "icalNote2": "Automatic — as soon as you schedule an appointment, it appears in your other calendar automatically.",
      "whichMethod": "Which method should I choose?",
      "whichMethodText": "This depends on which calendar you use. Google offers the best integration, Microsoft is ideal for business users, and iCal works everywhere."
    },
    "customDomain": {
      "title": "Using Your Own Email Domain",
      "intro": "Want confirmation emails to come from info@yourbusiness.com instead of noreply@pianoplanner.com? You can! With your own SMTP server.",
      "whatIsSmtpTitle": "What is SMTP?",
      "whatIsSmtpText": "SMTP (Simple Mail Transfer Protocol) is the standard for sending email. If you have your own email address (e.g., via your web hosting provider), you probably also have SMTP credentials.",
      "step1Title": "1. Gather your SMTP details",
      "step1Text": "You need: SMTP server (e.g., smtp.yourprovider.com), Port (usually 587 or 465), Username (often your full email address), Password",
      "step2Title": "2. Go to Settings → Email",
      "step2Text": "Scroll to the \"Custom SMTP\" section.",
      "step3Title": "3. Fill in your details",
      "step3Text": "Enter the server details, port, username, and password.",
      "step4Title": "4. Test the connection",
      "step4Text": "Click \"Test send\" to check if everything works.",
      "step5Title": "5. Activate",
      "step5Text": "Toggle the switch to \"On\" to use your own SMTP.",
      "tipText": "No technical knowledge? Ask your web host or IT administrator for the SMTP details. Most hosting packages include email.",
      "popularProvidersTitle": "Popular providers",
      "providersList": "Gmail (with app password), Microsoft 365, Transip, Antagonist, Hostnet",
      "commonSettings": "Common settings",
      "example": "Example",
      "explanation": "Explanation",
      "field": "Field",
      "fromAddress": "From address",
      "fromAddressDesc": "The email address shown as sender",
      "host": "Host",
      "password": "Password",
      "passwordDesc": "Your email password or app-specific password",
      "port": "Port",
      "portDesc": "Usually 587 (TLS) or 465 (SSL)",
      "provider": "Provider",
      "reason1": "Emails come from your own domain (info@yourcompany.com)",
      "reason2": "More professional appearance",
      "reason3": "Less likely to be caught by spam filters",
      "reason4": "Full control over your email communication",
      "smtpHost": "SMTP Host",
      "smtpHostDesc": "Your mail server address (e.g. smtp.gmail.com)",
      "smtpSetup": "SMTP Configuration",
      "testSettings": "Test your settings",
      "testSettingsText": "After filling in, click 'Send Test' to verify everything works before activating.",
      "username": "Username",
      "usernameDesc": "Usually your full email address",
      "whySmtp": "Why use your own SMTP?"
    },
    "emailTemplates": {
      "title": "Customize Email Templates",
      "intro": "PianoPlanner automatically sends emails to your customers for appointments. You can fully customize these emails with your own text, branding, and logo. There are two editing modes: a simple mode for plain text and an advanced mode for HTML formatting.",
      "typesTitle": "Available templates",
      "typeConfirmation": "Confirmation - Sent as soon as an appointment is booked",
      "typeReminder": "Reminder - Sent 24 hours before the appointment",
      "typeCancellation": "Cancellation - Sent if you cancel an appointment",
      "typeInvitation": "Tuning invitation - For inviting customers to book an appointment",
      "editingTitle": "Editing templates",
      "step1Title": "1. Open the Template Editor",
      "step1Text": "Go to Settings → Email Templates → Open Template Editor. Or click directly on a template in the overview.",
      "step2Title": "2. Choose a template",
      "step2Text": "On the left you see all available templates. Click the template you want to customize.",
      "step3Title": "3. Customize the subject",
      "step3Text": "At the top you see the email subject line. This is what the customer sees in their inbox. You can also use variables here.",
      "step4Title": "4. Edit the content",
      "step4Text": "Choose \"Simple\" for plain text or \"Advanced\" for HTML. Use the variables list on the right — click a variable to insert it at cursor position.",
      "variablesTitle": "Available variables",
      "variablesText": "You can use these variables in your templates:",
      "varCustomerName": "Customer's name, e.g. \"John Smith\"",
      "varDate": "Appointment date",
      "varTime": "Appointment start time",
      "varService": "Service type (e.g., \"Tuning\")",
      "varAddress": "{{address}} - Customer's address",
      "varCompanyName": "Your company name",
      "tipText": "All variables are available in the \"Variables\" panel on the right side of the editor. They are grouped by category: Customer, Appointment, Piano, Invitation, and Company. Click a variable to insert it directly.",
      "availableTemplates": "Available templates",
      "availableVariables": "Available variables",
      "editingTemplate": "Editing template",
      "replacedBy": "Replaced by",
      "template1": "Confirmation email — Sent automatically when a customer books an appointment",
      "template2": "Reminder email — Sent 24/48 hours before the appointment",
      "template3": "Cancellation email — Sent when you cancel an appointment",
      "template4": "Modification email — Sent when date/time changes",
      "template5": "Tuning Invitation — For inviting customers who are due for a tuning (manual and automatic)",
      "varCompanyEmail": "Your email address",
      "varCompanyPhone": "Your phone number",
      "variable": "Variable",
      "editorModes": "The Template Editor — Two Modes",
      "simpleMode": "Simple Mode (recommended for beginners)",
      "simpleModeText": "Type plain text like in an email. Each new line automatically becomes a paragraph. Variables (like {{customerName}}) can be typed directly or click a variable from the list on the right to insert it. PianoPlanner automatically creates a beautifully formatted email with your company logo and branding.",
      "advancedMode": "Advanced Mode (for experienced users)",
      "advancedModeText": "Write your own HTML code for full control over the layout. Useful if you are a designer or want to implement a specific design. You see the raw HTML and can use tags directly for colors, fonts, tables, etc.",
      "step5Title": "5. Preview",
      "step5Text": "On the right you see a live preview of how the email looks. Click \"Refresh\" to update the preview after changes.",
      "step6Title": "6. Test and save",
      "step6Text": "Click \"Send Test\" to send a sample to your own email address. Satisfied? Click \"Save\". You can always revert to the default template via \"Reset to Default\".",
      "variablesExplanation": "Variables are special codes that are automatically replaced with real data. Type them exactly as shown (including the double curly braces) or click them in the editor.",
      "varPianoBrand": "Piano brand (e.g., \"Steinway\")",
      "varPianoModel": "Piano model",
      "varBookingLink": "Customer's personal booking link",
      "varReminderNumber": "Sequential reminder number (1, 2, 3...) — only for automatic reminders",
      "varUnsubscribeLink": "Unsubscribe link for the customer — only for automatic reminders",
      "tipTitle": "Tip"
    },
    "tuningInvitations": {
      "title": "Sending Tuning Invitations",
      "intro": "Automatically remind your customers when their piano is due for tuning. This is a powerful way to generate recurring appointments.",
      "howItWorksTitle": "How does it work?",
      "howItWorksText": "Each piano has a service interval (e.g., 6 months). When a piano is almost or over that time, you can send a reminder. The customer receives an email with a link to book an appointment directly.",
      "sendingTitle": "Sending invitations",
      "step1Title": "1. Go to Pianos",
      "step1Text": "In the menu you'll see \"Pianos\" - this shows all pianos sorted by service status.",
      "step2Title": "2. Filter by \"Due for tuning\"",
      "step2Text": "Use the filter to only see pianos that are soon or overdue for tuning.",
      "step3Title": "3. Select pianos",
      "step3Text": "Check the pianos you want to send an invitation to.",
      "step4Title": "4. Click \"Send invitation\"",
      "step4Text": "An email is sent to each selected customer.",
      "whatCustomerSeesTitle": "What does the customer receive?",
      "whatCustomerSeesText": "The customer receives a friendly email with: A reminder that their piano is due for tuning, A link to book an appointment directly, Your contact details for questions",
      "tipText": "Don't send invitations too often. One reminder is usually enough. Customers appreciate subtle service, not spam.",
      "description": "Description",
      "howToSend": "How to send invitations?",
      "intervalOptions": "Tuning interval options",
      "option": "Option",
      "option3Months": "3 months",
      "option3MonthsDesc": "Concert grands, intensive use",
      "option6Months": "6 months",
      "option6MonthsDesc": "Standard for most pianos",
      "optionYearly": "12 months",
      "optionYearlyDesc": "Recreational use, hobby",
      "optionCustomer": "Customer initiates contact",
      "optionCustomerDesc": "No automatic reminders",
      "safetyFeature": "Safety feature",
      "safetyFeatureText": "The system prevents you from accidentally sending multiple invitations to the same customer within a short period.",
      "varBookingLink": "{{bookingLink}}",
      "varDaysSince": "{{daysSinceLastTuning}}",
      "varInterval": "{{serviceInterval}}",
      "varLastTuning": "{{lastTuningDate}}",
      "varMonthsSince": "{{monthsSinceLastTuning}}",
      "variables": "Available variables for invitations",
      "whenToUse": "When to send invitations?",
      "whenToUseText": "The best time is 2-4 weeks before the piano is due for tuning. This gives the customer time to respond and lets you plan.",
      "autoTip": "Prefer automatic?",
      "autoTipText": "Don't want to manually send invitations each time? PianoPlanner can do this automatically! Read more in the next chapter: Automatic Tuning Reminders."
    },
    "bookingLink": {
      "title": "Sharing Your Booking Link",
      "intro": "Every PianoPlanner user has a unique booking link. Share this with potential customers so they can book an appointment themselves.",
      "findingTitle": "Finding your link",
      "findingText": "Go to Settings → Booking page. Here you'll see your personal booking URL. You can copy or share it.",
      "whereToShareTitle": "Where to share?",
      "share1": "Your website - Add a \"Book appointment\" button",
      "share2": "Email signature - Add the link to every email",
      "share3": "Business cards - Print a QR code of your link",
      "share4": "Google My Business - Add as booking link",
      "share5": "Social media - Share in your bio or posts",
      "customizingTitle": "Customizing",
      "customizingText": "In the settings you can customize your booking page:",
      "customize1": "Add logo - Your company logo at the top of the page",
      "customize2": "Welcome text - A personal greeting for customers",
      "customize3": "Choose services - Which services can be booked",
      "customize4": "Maximum advance booking - How far ahead customers can book",
      "tipText": "Make it as easy as possible for customers. The fewer clicks to a booking, the more appointments you'll get.",
      "addToWebsite": "Add to your website",
      "addToWebsiteText": "Copy this code and paste it on your website where you want the booking button to appear.",
      "asButton": "As button",
      "asSimpleLink": "As simple link",
      "shareEverywhere": "Share everywhere",
      "step1Title": "1. Go to Settings",
      "step1Text": "Open the settings menu via the gear icon ⚙️.",
      "step2Title": "2. Click Booking Page",
      "step2Text": "Find the 'Booking Page' or 'Online Booking' section.",
      "step3Title": "3. Copy your link",
      "step3Text": "You'll see your personal booking link. Click 'Copy'.",
      "step4Title": "4. Customize the page (optional)",
      "step4Text": "Add your logo, customize the welcome text, and choose which services are visible.",
      "step5Title": "5. Set availability",
      "step5Text": "Determine how far in advance customers can book.",
      "step6Title": "6. Activate",
      "step6Text": "Enable the booking page so customers can book.",
      "stepByStep": "Step by step",
      "tipQrCode": "QR code tip",
      "tipQrCodeText": "Generate a QR code of your booking link for business cards or flyers. Customers can then scan and book directly!",
      "use1": "Your website - 'Book now' button",
      "use2": "Email signature",
      "use3": "Business cards (as QR code)",
      "use4": "Social media bio",
      "use5": "Google My Business",
      "use6": "WhatsApp status",
      "whereToUse": "Where can you use the link?",
      "whyUse": "Why a booking link?",
      "whyUseText": "With your own booking link, customers can make an appointment 24/7, without you having to answer the phone. You automatically receive a confirmation and the appointment is immediately in your calendar."
    },
    "customerLink": {
      "title": "Personal Links for Regular Customers",
      "intro": "Regular customers don't have to fill in their details every time. Every customer in PianoPlanner has a unique link with pre-filled details.",
      "perfectFor": "Perfect for:",
      "perfectForText": "Regular customers who come back regularly, customers with multiple pianos, theaters and businesses with complex bookings.",
      "howItWorksTitle": "How does it work?",
      "howItWorksText": "When a customer opens their personal link, they see:",
      "sees1": "Their name and address already filled in",
      "sees2": "Their piano(s) to choose from",
      "sees3": "Smart time suggestions based on their location",
      "sees4": "Only relevant services",
      "sees5": "Can book directly without an account",
      "findingTitle": "Finding the link",
      "step1Title": "1. Go to Customers",
      "step1Text": "Open the customer list.",
      "step2Title": "2. Click on a customer",
      "step2Text": "Open the customer details.",
      "step3Title": "3. See \"Booking link\"",
      "step3Text": "Copy this customer's personal link.",
      "step4Title": "4. Share the link",
      "step4Text": "Send the link via email or save it for later use.",
      "needNewLinkTitle": "Need a new link?",
      "needNewLinkText": "If a link no longer works or you want to reset it, you can generate a new link in the customer details.",
      "realExampleTitle": "Real-world example",
      "realExampleText": "You send Mrs. Johnson a reminder every year. Instead of \"call me for an appointment\" you send her personal link. She clicks, chooses a time, and done. No phone calls, no hassle.",
      "defaultService": "Set default service",
      "defaultServiceText": "You can set a default service per customer so it's automatically selected when they open their link.",
      "defaultStep1Title": "1. Go to the customer",
      "defaultStep1Text": "Open the customer details.",
      "defaultStep2Title": "2. Click Edit",
      "defaultStep2Text": "Open the edit form.",
      "defaultStep3Title": "3. Select default service",
      "defaultStep3Text": "Choose the service this customer usually books.",
      "defaultStep4Title": "4. Save",
      "defaultStep4Text": "The service will now be automatically selected on their booking link.",
      "needNewLink": "Need a new link?",
      "realExample": "Practical example",
      "step5Title": "5. Copy or share",
      "step5Text": "Copy the link or share it directly via email or WhatsApp.",
      "stepByStep": "Step by step: Finding and sharing the link",
      "whatCustomerSees": "What does the customer see?",
      "whenOpensLink": "When the customer opens the link:"
    },
    "smartSuggestions": {
      "title": "Smart Booking Suggestions",
      "intro": "When customers book via their personal link, they automatically see smart time suggestions. The system analyzes your existing appointments and suggests the most efficient time slots.",
      "howDoesItWork": "How does it work?",
      "howDoesItWorkText": "Instead of manually choosing a date and time, the customer sees a list of recommended times. These are calculated based on:",
      "factor1": "Existing appointments - Slots just before or after other appointments nearby",
      "factor2": "Location - Minimal travel time between appointments",
      "factor3": "Working hours - Only within your available times",
      "factor4": "Theater hours - Separate hours for theaters if configured",
      "benefits": "Benefits",
      "benefitsText": "• More efficient route planning - fewer miles driven\n• Customers choose faster - no doubt about availability\n• Better schedule - appointments cluster in the same area",
      "whatCustomerSees": "What does the customer see?",
      "afterSelecting": "After selecting a service, up to 10 optimal time slots appear, sorted with the best choice first:",
      "recommended": "Recommended - The most efficient time (green badge)",
      "alternative": "Alternative - Good options on other days, sorted by date",
      "pickAnother": "The customer can also choose \"Pick another time\" to manually select a date and time.",
      "distantCustomersTitle": "Distant customers",
      "distantCustomersText": "For customers outside your normal service area, the system automatically searches further ahead (up to 6 months) to find the best options. Instead of blocking distant customers, longer travel times result in a slightly lower score - but good options are still shown. The system keeps searching until it finds at least 10 suggestions.",
      "trafficAwareTitle": "Traffic-aware suggestions",
      "trafficAwareText": "When Traffic Prediction is enabled in your settings, smart suggestions take rush hour and typical traffic patterns into account."
    },
    "routeAnalysis": {
      "title": "Route Analysis",
      "intro": "Route Analysis helps you see how efficient your daily schedule is. View distances between appointments, get an efficiency score, and receive suggestions to optimize your route.",
      "availableFor": "Available for Solo & Pro",
      "availableForText": "Route Analysis is included in Solo and Pro subscriptions. Free users can upgrade to unlock this powerful feature.",
      "howToAccessTitle": "How to Access",
      "step1Title": "1. Open the Dashboard",
      "step1Text": "Go to your calendar/agenda view in PianoPlanner.",
      "step2Title": "2. Click \"Analyse\"",
      "step2Text": "Find the 📊 Analyse button in the toolbar, next to Route and Sync.",
      "step3Title": "3. Choose Day or Week",
      "step3Text": "Toggle between day view (detailed) and week view (overview).",
      "dayAnalysisTitle": "Day Analysis",
      "dayAnalysisIntro": "The day view shows you:",
      "dayFeature1": "📊 Efficiency Score (A-F grade) - How well your route is optimized",
      "dayFeature2": "🚗 Total Distance - Sum of all trips between appointments",
      "dayFeature3": "⏱️ Travel Time - Estimated driving time for all trips",
      "dayFeature4": "📍 Trip List - Each journey with start, destination, km and minutes",
      "weekAnalysisTitle": "Week Analysis",
      "weekAnalysisIntro": "The week view gives you a broader perspective:",
      "weekFeature1": "📅 Daily Scores - See which days have efficient vs inefficient routes",
      "weekFeature2": "📈 Weekly Average - Overall efficiency percentage",
      "weekFeature3": "⚡ Cross-Day Opportunities - Suggestions to move appointments between days",
      "efficiencyScoresTitle": "Understanding Efficiency Scores",
      "gradeHeader": "Grade",
      "scoreHeader": "Score",
      "meaningHeader": "What it means",
      "gradeA": "Excellent! Your route is highly optimized.",
      "gradeB": "Good route with minor improvements possible.",
      "gradeC": "Acceptable, but consider the suggestions.",
      "gradeD": "Inefficient route - follow the optimization tips.",
      "gradeF": "Very inefficient - significant optimization needed.",
      "optimizationTitle": "1-Click Optimization",
      "optimizationIntro": "When the system finds optimization opportunities, you'll see suggestions with an \"Apply\" button. Clicking it will:",
      "optStep1": "Check for conflicts with existing appointments",
      "optStep2": "Show a confirmation with the proposed change",
      "optStep3": "Move the appointment if you confirm",
      "urgencyTitle": "Urgency Indicators",
      "urgencyIntro": "Each suggestion has a colored urgency level:",
      "urgencyWhen": "When",
      "urgencyAction": "Action",
      "urgencyCritical": "You will be late!",
      "urgencyCriticalAction": "Act immediately",
      "urgencyHigh": "Risk of being late (<10 min buffer)",
      "urgencyHighAction": "Fix today",
      "urgencyMedium": "Long trip (>30km) or zigzag",
      "urgencyMediumAction": "Consider",
      "urgencyLow": "Optimization opportunity",
      "urgencyLowAction": "Nice to have",
      "economicTitle": "Economic Impact",
      "economicText": "Each suggestion shows the potential savings in km, minutes, and fuel costs. For example: '42 km trip = ~€9 fuel costs' helps you understand the real cost of inefficient routes.",
      "tipsTitle": "Tips for Better Routes",
      "tipsText": "Add addresses to all customers for accurate distance calculations\nUse Smart Suggestions when booking new appointments\nCheck the weekly analysis to find days worth reorganizing\nConsider moving appointments on days with D or F scores\nUse the Streamline button to automatically tighten your schedule"
    },
    "theaterAvailability": {
      "title": "Theater Availability",
      "intro": "Theaters, concert halls, and other venues often have different availability than private customers. They're mainly available evenings and weekends - exactly when you're normally off! With Theater Availability you can set separate working hours for these special customers.",
      "whyTitle": "Why Theater Hours?",
      "whyText": "The problem: Theaters have rehearsals and performances during the day. They can only let you in before opening (mornings) or after closing (evenings). The solution: Set different hours for theater customers. They only see evening/weekend slots. Private customers only see daytime slots. Everyone books at the right time!",
      "benefitsTitle": "Benefits of Theater Mode",
      "benefit1": "🎭 Separate availability - Theaters don't see your 9-5 private slots",
      "benefit2": "⚡ Last-minute bookings - Theaters can book with just 2 hours notice (you set this)",
      "benefit3": "📅 Shorter booking window - Theaters often can't plan far ahead",
      "benefit4": "🎹 Concert-ready tuning - They book when they need it, before performances",
      "benefit5": "💼 Extra income - Fill your evenings with well-paying theater work",
      "setupTitle": "Step-by-Step: Setting Up Theater Hours",
      "step1Title": "1. Go to Settings → Company",
      "step1Text": "Click the gear icon ⚙️ and scroll to find \"Company Settings\"",
      "step2Title": "2. Find \"Theater Availability\"",
      "step2Text": "Scroll down past your normal working hours. You'll see a separate section for theaters.",
      "step3Title": "3. Turn it ON",
      "step3Text": "Click the switch to enable theater hours. It turns green.",
      "step4Title": "4. Set the times per day",
      "step4Text": "For each day, set when you're available for theaters:\nExample:\n• Monday-Friday: 18:00 - 22:00 (after your regular work)\n• Saturday: 10:00 - 18:00 (whole day available)\n• Sunday: OFF",
      "step5Title": "5. Save",
      "step5Text": "Click Save at the bottom of the page.",
      "markingTitle": "Marking a Customer as \"Theater\"",
      "markingIntro": "Now tell PianoPlanner which customers should use theater hours:",
      "markStep1Title": "1. Go to Customers",
      "markStep1Text": "Open your customer list and find the theater/venue.",
      "markStep2Title": "2. Edit the customer",
      "markStep2Text": "Click on their name, then click Edit.",
      "markStep3Title": "3. Check \"Use theater availability\"",
      "markStep3Text": "You'll see a checkbox ☑️ near the bottom. Check it!",
      "markStep4Title": "4. Save",
      "markStep4Text": "Click Save Customer. Done!",
      "realExample": "Real Example",
      "realExampleText": "Your normal working hours:\nMonday - Friday: 09:00 - 17:00\n\nYour theater hours:\nMonday - Friday: 18:00 - 22:00\nSaturday: 10:00 - 18:00\n\nResult:\n• Mrs. Johnson (private customer) → sees Mon-Fri 09:00-17:00 slots\n• Theater \"The Playhouse\" → sees Mon-Fri 18:00-22:00 + Saturday slots\n\nNo overlap, no confusion, perfect separation!",
      "bookingWindowTitle": "Theater Booking Window",
      "bookingWindowIntro": "Theaters often need to book on short notice - a piano might need tuning before tonight's concert! You can set how far ahead theaters must/can book:",
      "minAdvanceTitle": "Minimum advance time",
      "minAdvanceText": "How far ahead must theaters book at minimum?\nOptions: No minimum, 2 hours, 4 hours, 1 day, 2 days\nRecommended: 2 hours - allows last-minute emergency calls",
      "maxAdvanceTitle": "Maximum advance time",
      "maxAdvanceText": "How far ahead can theaters book?\nOptions: 1 week, 2 weeks, 1 month, 2 months, 3 months, 6 months\nRecommended: 1 month - theaters rarely plan further ahead",
      "comparisonTitle": "Comparison: Regular vs Theater Booking",
      "comparisonText": "Regular customers:\n• Must book 2 days ahead (you have planning time)\n• Can book up to 3 months in advance\n\nTheater customers:\n• Can book just 2 hours ahead (emergency tunings!)\n• Can book up to 1 month in advance\n\nTheaters get flexibility for urgent needs, while private customers give you planning time."
    },
    "pianoService": {
      "title": "Piano Service History & Tuning Intervals",
      "intro": "PianoPlanner automatically tracks the service history of every piano. This helps you remember when pianos need tuning - no more forgetting customers or guessing when you last visited!",
      "whyTrackTitle": "Why Track Service Intervals?",
      "whyTrackText": "Without tracking: You rely on customers calling you, or you forget who needs service.\nWith PianoPlanner: You see exactly which pianos are due for tuning. Send a reminder, book the appointment, keep customers happy. More repeat business, less effort!",
      "howItWorksTitle": "How It Works (Automatically!)",
      "howItWorksIntro": "PianoPlanner automatically updates \"Last tuning\" based on:",
      "source1": "✅ Completed appointments - When you finish a tuning, the piano record updates",
      "source2": "✅ Service records - Notes you add to the piano's history",
      "source3": "✅ Manual date entry - If you enter a past tuning date yourself",
      "automatic": "You don't have to do anything! Just complete your appointments as normal, and PianoPlanner keeps track.",
      "statusColorsTitle": "Understanding the Status Colors",
      "statusColorsIntro": "Each piano shows a status so you can see at a glance who needs attention:",
      "tableHeader1": "What You See",
      "tableHeader2": "What It Means",
      "statusGreen": "Last: 15 Jan 2026",
      "statusGreenMeaning": "✅ Recently tuned - no action needed yet",
      "statusOrange": "Due in 14 days",
      "statusOrangeMeaning": "⚠️ Service coming up - time to contact customer!",
      "statusRed": "30 days overdue",
      "statusRedMeaning": "🔴 Past due date - definitely time to call!",
      "statusGray": "Not yet tuned",
      "statusGrayMeaning": "ℹ️ New piano - no history recorded yet",
      "intervalTitle": "Setting the Right Tuning Interval",
      "intervalIntro": "Different pianos need different care. A concert grand in a theater needs tuning every few months, while a hobby piano at home might only need yearly service. You set the interval per piano!",
      "recommendedTitle": "Recommended Intervals",
      "recommendedText": "3-4 months: Concert grands, conservatory pianos, music schools\n6 months: Churches, professional musicians, serious hobbyists (default)\n12 months: Home pianos, occasional players\n18-24 months: Rarely used pianos, vacation homes",
      "changeIntervalTitle": "Step-by-Step: Changing a Piano's Interval",
      "changeStep1Title": "1. Go to the piano",
      "changeStep1Text": "Open Customers → click on a customer → click on their piano",
      "changeStep2Title": "2. Click Edit",
      "changeStep2Text": "Click the Edit button (pencil icon ✏️)",
      "changeStep3Title": "3. Find \"Service interval\"",
      "changeStep3Text": "Look for the dropdown that says \"Service interval (months)\"",
      "changeStep4Title": "4. Choose the interval",
      "changeStep4Text": "Select how many months between tunings:\n3, 4, 6, 9, 12, 18, or 24 months",
      "changeStep5Title": "5. Save",
      "changeStep5Text": "Click Save Piano. The status will now calculate from this interval!",
      "proTipTitle": "Pro Tip: Finding Pianos Due for Service",
      "proTipText": "Go to Pianos in the menu. You'll see all pianos sorted by status. Orange and red pianos appear first - these are your opportunities!\nEvery week, check this list and send reminders to customers with overdue pianos. Easy way to fill your calendar! 📅",
      "manualRecordTitle": "Manually Recording a Past Tuning",
      "manualRecordIntro": "Did you tune a piano before using PianoPlanner? You can enter the date manually:",
      "manualStep1Title": "1. Edit the piano",
      "manualStep1Text": "Go to the piano and click Edit",
      "manualStep2Title": "2. Find \"Last service date\"",
      "manualStep2Text": "Look for the date picker field",
      "manualStep3Title": "3. Enter the date",
      "manualStep3Text": "Click the field and select the date of the last tuning",
      "manualStep4Title": "4. Save",
      "manualStep4Text": "The piano's status will now be calculated correctly!"
    },
    "slotDuration": {
      "title": "Calendar Slot Duration",
      "intro": "You can customize how the calendar displays time slots. Choose between 1-hour slots or 1.5-hour slots depending on your typical appointment length.",
      "changingTitle": "Changing Slot Duration",
      "step1Title": "Go to the Dashboard",
      "step1Text": "Open your calendar view.",
      "step2Title": "Find the slot selector",
      "step2Text": "In the toolbar next to the view selector (Day/Week/Month), you'll see a dropdown.",
      "step3Title": "Choose your duration",
      "step3Text": "Select \"1 hour\" or \"1½ hour\" from the dropdown.",
      "whenToUseTitle": "When to use which?",
      "whenToUseText": "1 hour slots: Standard tuning appointments, quick services\n1.5 hour slots: Regulation, voicing, or when tunings typically take longer",
      "savedAutomatically": "Your preference is saved automatically and will be remembered next time you visit."
    },
    "importData": {
      "title": "Import Data",
      "intro": "Switching from another piano service management system? PianoPlanner makes it easy to import your existing customers and pianos.",
      "whatCanImportTitle": "What can you import?",
      "importCustomers": "Customers - Names, addresses, phone numbers, email addresses",
      "importPianos": "Pianos - Brand, model, serial number, year, type, location",
      "importHistory": "Service history - Last tuning dates are preserved",
      "importOrderTip": "Always import customers first, then pianos. This way pianos are automatically linked to the correct customer.",
      "howToImportTitle": "How to import",
      "step1Title": "Export from your current system",
      "step1Text": "Export your clients and/or pianos as CSV files from your current software.",
      "step2Title": "Go to Import",
      "step2Text": "Navigate to Settings → Import Data or go directly to the import page.",
      "step3Title": "Select what to import",
      "step3Text": "Choose whether you want to import Customers or Pianos.",
      "step4Title": "Upload the CSV file",
      "step4Text": "Drag and drop your file or click to browse. The system will automatically detect the columns.",
      "step5Title": "Preview and configure",
      "step5Text": "Check the preview table and set options like \"Skip duplicates\" or \"Active clients only\".",
      "step6Title": "Start import",
      "step6Text": "Click \"Start Import\" and wait for the process to complete.",
      "optionsTitle": "Import options",
      "optionHeader": "Option",
      "whatDoesItDoHeader": "What does it do?",
      "activeOnly": "Active only",
      "activeOnlyDesc": "Only import customers/pianos marked as active",
      "skipDuplicates": "Skip duplicates",
      "skipDuplicatesDesc": "Skip customers that already exist (based on email)",
      "includeCompany": "Include company name",
      "includeCompanyDesc": "Add company name to customer name",
      "undoImportTitle": "Undo Import",
      "undoImportText": "Made a mistake? After importing, you'll see an \"Undo Import\" button that lets you remove all records from that import batch at once.",
      "otherFormatsTitle": "Other Import Formats",
      "otherFormatsText": "In addition to CSV, PianoPlanner also supports the following import formats:",
      "gazelleTitle": "Gazelle Import",
      "gazelleDesc": "Switching from Gazelle (piano management software)? Use the dedicated Gazelle Import Wizard under Settings → Import → Gazelle. It automatically recognizes the Gazelle export format.",
      "vcardTitle": "vCard (.vcf) Import",
      "vcardDesc": "Import contacts directly from your phone or email client. Export your contacts as a .vcf file and upload it to PianoPlanner.",
      "icsTitle": "Calendar (.ics) Import",
      "icsDesc": "Import appointments from your existing calendar (Google, Apple, Outlook). Export as an .ics file and upload it to transfer your existing appointments."
    },
    "privateAppointments": {
      "title": "Private Appointments",
      "intro": "Need to track personal trips separately from business appointments? Mark appointments as private to keep them separate in your mileage records and sync them to external calendars without revealing details.",
      "howToTitle": "How to create a private appointment",
      "step1Title": "Create or edit an appointment",
      "step1Text": "Open the appointment form on the dashboard.",
      "step2Title": "Toggle \"Private Appointment\"",
      "step2Text": "Enable the purple toggle to mark this as a private trip.",
      "step3Title": "Add a purpose (optional)",
      "step3Text": "Enter a description like \"Doctor\", \"Shopping\", or \"Family visit\".",
      "visualTitle": "Visual distinction",
      "visualText": "Private appointments appear in purple with a 🔒 icon in your calendar, making them easy to distinguish from business appointments.",
      "syncTitle": "Calendar sync",
      "syncText": "When synced to Google, Apple, or Microsoft calendars, private appointments appear as \"Busy\" without showing any details, location, or description. Your privacy is protected!",
      "taxTip": "Private kilometers are tracked separately and can be exported for tax purposes. This helps maintain a clear split between business and personal travel."
    },
    "mileageTracking": {
      "title": "Mileage Tracking",
      "intro": "PianoPlanner automatically tracks your traveled kilometers based on appointment locations. View a complete overview split by business and private trips.",
      "introNew": "Keep a tax-proof mileage administration. PianoPlanner automatically tracks kilometers from appointments, and you can add manual trips, register odometer readings and export everything for your tax return.",
      "proFeature": "Pro feature",
      "proFeatureText": "Mileage tracking is available with the Pro subscription (€39.50/month) and higher.",
      "accessTitle": "Where to find it",
      "accessDashboard": "Dashboard — The mileage widget in the right panel shows your current month and lets you quickly add trips",
      "accessSettings": "Settings → Business → Mileage Tracking — Full overview with vehicle info, odometer readings, chart and exports",
      "accessTravelReport": "Travel Report — Detailed trip list with route information and CSV export",
      "accessText": "Go to Settings → Business → Mileage Tracking to view your kilometer overview.",
      "vehicleTitle": "Vehicle setup",
      "vehicleText": "Go to Settings → Business → Mileage Tracking and fill in your license plate and vehicle name. This appears on your mileage reports and PDF exports.",
      "odometerTitle": "Odometer readings",
      "odometerText": "Register your odometer readings periodically (e.g. at the start and end of the year). This serves as proof for the tax authorities and helps verify your trip records.",
      "autoTrackTitle": "Automatic tracking",
      "autoTrackText": "Every appointment with a customer address automatically generates a trip record. The system calculates the distance from your business address to the customer location.",
      "featuresTitle": "Features",
      "feature1": "Year-by-year overview with monthly breakdown chart",
      "feature2": "Separate totals for business (green) and private (purple) trips",
      "feature3": "Smart round-trip calculation: real km from last customer back home via Google Maps",
      "feature4": "Export to CSV for accounting or tax purposes",
      "smartCalcTitle": "Smart round-trip calculation",
      "smartCalcText": "The system automatically determines if a trip is one-way or round-trip:",
      "oneWay": "Other appointments during the day → One-way only (you continue to the next location)",
      "roundTrip": "Last appointment of the day → Return trip (real km home via Google Maps)",
      "manualTitle": "Manual trips",
      "manualText": "For trips not linked to an appointment (e.g. picking up parts, visiting a supplier), add manual trips via the dashboard mileage widget or via Settings.",
      "manualStep1Title": "Quick method: Dashboard widget",
      "manualStep1Text": "Enter km, purpose and click +. Check 'Private' for non-business trips, 'Round trip' to double the distance.",
      "manualStep2Title": "Detailed method: Settings",
      "manualStep2Text": "Go to Settings → Mileage Tracking → Manual trip form. Here you can also set the exact date, from/to locations and delete trips.",
      "exportTitle": "Export & reports",
      "exportCSV": "CSV export — Download all trips as a spreadsheet for your accountant",
      "exportPDF": "PDF export — Generate a tax-proof report with vehicle details, odometer readings and trip list",
      "exportChart": "Monthly chart — Visual overview of business vs. private km per month",
      "taxTip": "Tax authorities require a complete mileage administration if you claim business travel expenses. Register your odometer readings at least at the start and end of each year.",
      "exportTip": "Export your mileage data as CSV at the end of each year for your tax records. The export includes date, type, location, one-way distance, round-trip indicator, and total kilometers."
    },
    "travelReport": {
      "title": "Travel Report",
      "intro": "The Travel Report gives you a detailed overview of all your trips over any period. Filter by date range, see totals and export a complete expense report.",
      "howToTitle": "How to use",
      "step1Title": "Open Travel Report",
      "step1Text": "Click \"Travel Report\" in the navigation menu (car icon).",
      "step2Title": "Set the date range",
      "step2Text": "Use the 'From' and 'To' date pickers to select the period. The report updates automatically.",
      "step3Title": "Review the summary",
      "step3Text": "At the top you see totals: number of trips, total km, average km per trip, travel time and expense claim.",
      "step4Title": "Export to CSV",
      "step4Text": "Click the CSV button to download the full report as a spreadsheet for your records or accountant.",
      "columnsTitle": "Report columns",
      "columnHeader": "Column",
      "descriptionHeader": "Description",
      "colDate": "Date",
      "colDateDesc": "Date of the appointment",
      "colCustomer": "Customer",
      "colCustomerDesc": "Customer name with link to detail page",
      "colLocation": "Location",
      "colLocationDesc": "Address of the appointment",
      "colRoute": "Route",
      "colRouteDesc": "Open in Google Maps for navigation",
      "colDistance": "Distance",
      "colDistanceDesc": "One-way distance in km",
      "colTravelTime": "Travel time",
      "colTravelTimeDesc": "Estimated driving time",
      "tip": "Use the search field to filter trips by customer name or location. Combine this with a date range to quickly find specific trips."
    },
    "workshop": {
      "title": "Workshop Planning",
      "intro": "PianoPlanner supports dedicated workshop time slots for work in your own workshop. Set your workshop availability hours and they will automatically be blocked in the online booking calendar.",
      "setupTitle": "Setting up workshop hours",
      "setupText": "Go to Settings → Workshop to configure your workshop availability. You can set different hours for each day of the week, just like your regular working hours.",
      "featuresTitle": "Features",
      "feature1": "Set workshop availability per day of the week",
      "feature2": "Workshop hours are automatically blocked for online bookings",
      "feature3": "Smart Pick respects workshop hours — no overlapping suggestions",
      "feature4": "Workshop appointments visible in your agenda with a dedicated icon",
      "feature5": "Workshop statistics in your dashboard reports",
      "smartPickTitle": "Smart Pick integration",
      "smartPickText": "When you use Smart Pick to suggest appointment times, it automatically avoids your workshop hours. This ensures customers are never offered a time slot that conflicts with your workshop schedule.",
      "tip": "Use workshop planning for recurring in-house tasks like piano rebuilds, voicing work, or instrument repairs. This keeps your field schedule clean and your workshop time organized."
    },
    "walkIn": {
      "title": "Walk-in Appointments & Tasks",
      "intro": "Not every appointment needs a customer record. PianoPlanner lets you quickly create walk-in appointments and internal workshop tasks directly from your dashboard.",
      "walkInTitle": "Walk-in appointments",
      "walkInText": "When a customer walks in unexpectedly, use the quick walk-in button on your dashboard action sheet. Enter a name and service — no need to create a full customer record first.",
      "tasksTitle": "Tasks without customer",
      "tasksText": "Need to block time for internal work? Create a task without linking it to a customer. Perfect for workshop maintenance, administrative work, or personal time blocks.",
      "howToTitle": "How to create",
      "howTo1": "From the dashboard: tap the + button and choose 'Walk-in' or 'Task'",
      "howTo2": "Walk-in: enter a name, choose a service, and pick a time",
      "howTo3": "Task: add a description and time — no customer needed",
      "howTo4": "Both types appear in your agenda and respect your availability",
      "tip": "Walk-in appointments can be converted to full customer records later. If a walk-in customer returns, you can create a proper customer profile and link the previous appointment."
    },
    "projectPlanner": {
      "title": "Workshop Project Planner",
      "intro": "The Workshop Project Planner helps you manage larger workshop jobs — piano rebuilds, restorations, or any multi-step project. Track tasks, hours, deadlines, and link projects to customers and pianos.",
      "businessOnly": "Business plan",
      "businessOnlyText": "The Project Planner is available exclusively with the Business subscription (€89,50/month). Upgrade via Settings → Subscription to unlock this feature.",
      "createTitle": "Creating a project",
      "createText": "Navigate to Projects in the main menu and click 'New project'. Give it a title, optionally link a customer and piano, set a priority and deadline, and estimate the total hours.",
      "tasksTitle": "Managing tasks",
      "tasksText": "Each project can have multiple tasks. Add tasks quickly with the inline input field at the bottom of the task list, or click a task to edit details like estimated/actual hours and due dates.",
      "task1": "Click the circle to cycle status: To do → In progress → Done",
      "task2": "Drag tasks by the handle to reorder them",
      "task3": "Track estimated vs. actual hours per task",
      "task4": "Set due dates — overdue tasks are highlighted in red",
      "capacityTitle": "Capacity overview",
      "capacityText": "The capacity bar on the projects overview shows how many workshop hours you have used vs. available this week. This is based on your workshop hours configured in Settings → Workshop.",
      "featuresTitle": "Features",
      "feature1": "Link projects to customers and pianos",
      "feature2": "Priority levels: Low, Normal, High, Urgent",
      "feature3": "Status tracking: Planning → Active → Paused → Completed",
      "feature4": "Visual progress bar based on completed tasks",
      "feature5": "Weekly capacity tracking based on your workshop hours",
      "feature6": "Filter and search across all your projects",
      "quoteTitle": "Quotes & Pricing",
      "quoteIntro": "Turn your project task list into a professional quote. Each task can include pricing information that's automatically calculated and ready to share with your customer.",
      "excelEditTitle": "Excel-style Editing",
      "excelEditText": "The task list works like a spreadsheet. Click any cell to edit inline. Changes are saved automatically as you type. Press Enter to move to the next row, or Tab to move to the next column.",
      "taskTypesTitle": "Task Types",
      "taskTypeLabor": "<strong>Labor</strong> — Work hours billed at your hourly rate (set in Settings → Workshop)",
      "taskTypeMaterial": "<strong>Material</strong> — Parts, strings, felt, etc. Track cost price for profit calculation",
      "taskTypeOther": "<strong>Other</strong> — Transport, disposal, rental costs",
      "costOverviewTitle": "Cost Overview",
      "costOverviewText": "The cost overview at the bottom shows real-time totals for labor, materials, and other costs. Only tasks marked as 'billable' (green checkbox) are included in the quote. Toggle billable off for internal tasks you don't want to charge for.",
      "exportQuoteTitle": "Export Quote",
      "exportQuoteText": "Click 'Copy Quote' to copy a text version to your clipboard (perfect for pasting into emails), or click 'PDF' to open a professionally formatted quote ready for printing or saving as PDF.",
      "quoteTip": "Set your hourly rate in Settings → Workshop. New labor tasks will automatically use this rate. For materials, enter both the cost price (what you pay) and the selling price to track your margin.",
      "tip": "Use projects for any multi-day workshop job: full restorations, action rebuilds, soundboard repairs, or even instrument transport coordination. The task list keeps you on track and the hours overview helps with quoting future similar jobs."
    },
    "invoicing": {
      "setupTitle": "Invoice Setup",
      "setupIntro": "Before creating your first invoice, configure your invoicing settings. Go to Invoices and click the ⚙️ settings icon in the top bar.",
      "numberingTitle": "Invoice Numbering",
      "prefixStep": "Prefix",
      "prefixText": "Set a prefix for your invoice numbers (e.g. \"F2026-\", \"INV-\"). Your invoices will be numbered as prefix + sequence number, e.g. F2026-001, F2026-002, etc.",
      "nextNumberStep": "Next Number",
      "nextNumberText": "Set the next invoice number. Useful when switching from another system mid-year — just enter the number where you left off. The counter auto-increments with each new invoice.",
      "bankStep": "Bank Details",
      "bankText": "Enter your IBAN, bank name, and BIC code. These appear on your invoices so customers know where to pay.",
      "footerStep": "Footer Text",
      "footerText": "Add your chamber of commerce number, VAT number, or any other legal text that should appear at the bottom of every invoice.",
      "setupTip": "You can also upload your own letterhead (JPG/PNG) so your invoices match your corporate identity. If your letterhead already contains your company details, check \"Hide company info on invoice\".",
      "createTitle": "Creating Invoices",
      "createIntro": "There are two ways to create an invoice: from the agenda or manually.",
      "fromAgendaTitle": "From the Agenda (recommended)",
      "fromAgendaText": "After completing an appointment, create an invoice directly from the agenda. Click on the appointment → choose \"Create Invoice\". The invoice is automatically prefilled with:",
      "prefill1": "Customer name and details",
      "prefill2": "Service description with instrument (e.g. \"Tuning — Steinway & Sons D\")",
      "prefill3": "Appointment date in the description",
      "prefill4": "Service price from your services configuration",
      "prefill5": "Customer notes (as a separate text line)",
      "manualTitle": "Manual Invoice",
      "manualText": "Go to Invoices → New Invoice. Search and select a customer, then add invoice lines manually. You can add regular lines with prices, or text-only lines for additional notes.",
      "sendTitle": "Sending Invoices",
      "sendText": "Once your invoice is ready, save it as \"Sent\". You can then email it directly to the customer with a PDF attachment. If you have Mollie configured, a payment link is automatically included.",
      "createTip": "You can use 'Service Templates' in invoice settings to quickly add frequently used services to any invoice.",
      "mobileTitle": "Invoicing on Mobile",
      "mobileIntro": "With PianoPlanner on your homescreen you can create and send invoices directly from your phone — even while you're still at the customer's location.",
      "mobileFromCustomerTitle": "From a Customer Profile",
      "mobileFromCustomerText": "Open a customer in the PWA, scroll down and tap \"Create Invoice\". A bottom sheet appears where you can:",
      "mobilePrefill1": "Select a service — the price is automatically filled in",
      "mobilePrefill2": "Add a description or notes",
      "mobilePrefill3": "Choose the invoice status (draft, sent, paid)",
      "mobilePrefill4": "Send with payment link — the customer can pay online immediately",
      "mobileWorkflowTitle": "Typical Mobile Workflow",
      "mobileStep1": "Finish the tuning",
      "mobileStep1Text": "Complete the appointment as usual.",
      "mobileStep2": "Open customer → Create Invoice",
      "mobileStep2Text": "Tap on the customer and hit \"Create Invoice\". Your service and price are pre-filled.",
      "mobileStep3": "Send with payment link",
      "mobileStep3Text": "Save and send. The customer receives an email with a PDF invoice and an online payment link.",
      "mobileTip": "The piano tuner is still at the customer's home and the invoice is already sent — with a payment link. No bookkeeping software needed, no manual work at the end of the day.",
      "btwTitle": "VAT Handling",
      "btwIntro": "PianoPlanner handles VAT differently depending on the customer type. This is determined automatically based on the customer type set in the customer profile.",
      "btwPrivateTitle": "Private Customers",
      "btwPrivateLabel": "Price = INCLUSIVE VAT",
      "btwPrivateText": "For private customers, the service price is the total amount they pay, inclusive of VAT. Example: your service costs €125. The invoice shows: Subtotal: €103.31 — VAT 21%: €21.69 — Total: €125.00",
      "btwBusinessTitle": "Business / Institutions",
      "btwBusinessLabel": "Price = EXCLUSIVE VAT",
      "btwBusinessText": "For businesses, schools, churches, and theaters, the service price is exclusive of VAT. VAT is added on top. Example: your service costs €125 excl. The invoice shows: Subtotal: €125.00 — VAT 21%: €26.25 — Total: €151.25",
      "btwCustomerTypeTitle": "Setting the Customer Type",
      "btwCustomerTypeText": "To ensure correct VAT handling, set the customer type in each customer profile:",
      "typePrivate": "Private",
      "typePrivateDesc": "Price inclusive VAT",
      "typeBusiness": "Business",
      "typeBusinessDesc": "Price exclusive VAT",
      "typeSchool": "School",
      "typeSchoolDesc": "Price exclusive VAT",
      "typeChurch": "Church",
      "typeChurchDesc": "Price exclusive VAT",
      "typeTheater": "Theater",
      "typeTheaterDesc": "Price exclusive VAT",
      "btwTip": "The default customer type is 'Private'. If you don't set a type, the price will be treated as inclusive VAT. You can always manually adjust the price on the invoice if needed."
    },
    "needHelp": {
      "title": "Need Help?",
      "text": "Can't figure it out? Feel free to contact us.",
      "contactButton": "Contact Support"
    },
    "autoReminders": {
      "title": "Automatic Tuning Reminders",
      "intro": "PianoPlanner can automatically send tuning reminders to customers when their piano is due for a tuning. You don't have to do anything — the system checks for each piano when the last tuning was, adds the service interval, and sends a reminder at the right time.",
      "whatIsIt": "What's the difference with manual invitations?",
      "whatIsItText": "Manual invitation: You click the email icon for each customer yourself. Automatic reminder: PianoPlanner does it for you. You set it up once, and all customers are automatically reminded at the right time.",
      "howItWorks": "How does it work?",
      "step1": "1. Piano has a service interval",
      "step1Text": "Reminders are only sent for pianos that have a service interval set (3, 6, or 12 months). Pianos set to \"Customer initiates contact\" (interval 0) are skipped.",
      "step2": "2. First reminder goes out",
      "step2Text": "For example, a piano has a 6-month service interval and the last tuning was on January 1st. The next tuning is around July 1st. With the default setting (30 days advance), the customer receives the first reminder around June 1st.",
      "step3": "3. Follow-up if no response",
      "step3Text": "If the customer doesn't respond, a second reminder is sent automatically after 14 days. After that, a reminder follows every month until the maximum is reached (default 4 reminders per cycle).",
      "step4": "4. Cycle stops automatically",
      "step4Text": "Reminders stop automatically when the customer books an appointment, the maximum number of reminders is reached, or the customer unsubscribes.",
      "setupTitle": "Setup — Step by Step",
      "setup1": "1. Go to Settings",
      "setup1Text": "Open Settings and scroll to the \"Automatic Tuning Reminders\" card (with the bell icon). Click to expand it.",
      "setup2": "2. Enable the feature",
      "setup2Text": "Turn on the toggle \"Enable automatic reminders\". Additional options will appear.",
      "setup3": "3. Configure the schedule",
      "setup3Text": "Adjust the following settings to your preference:",
      "setting": "Setting",
      "settingDefault": "Default",
      "settingExplanation": "Explanation",
      "settingAdvance": "How many days before the tuning is due the first email is sent. For example: 30 days = about 1 month in advance.",
      "settingFollowup": "How many days between the first and second reminder. After that it becomes monthly.",
      "settingMax": "Maximum number of emails per piano per tuning cycle. After reaching this number, the system stops.",
      "settingTime": "Around what time emails are sent. Choose a time when your customers are likely online.",
      "setup4": "4. Send a test",
      "setup4Text": "Click \"Send Test\" to send a sample reminder to your own email address.",
      "setup5": "5. Click Save",
      "setup5Text": "Don't forget to click \"Save\"! From now on, your customers will be automatically reminded.",
      "templateTitle": "Customize Email Template",
      "templateText": "Automatic reminders use the same template as manual tuning invitations. You can customize this template via:",
      "template1": "Via Settings",
      "template1Text": "Click \"Edit Template\" in the tuning reminder settings. You'll be redirected to the Template Editor.",
      "template2": "Extra variables",
      "template2Text": "In addition to the standard variables, two extra variables are available for automatic reminders:",
      "varReminderNumber": "The sequential number of the reminder (1, 2, 3...). Useful to mention in the text.",
      "varUnsubscribeLink": "A link that allows the customer to unsubscribe from reminders. Automatically placed at the bottom of the email.",
      "unsubscribeTitle": "Customer Unsubscribe",
      "unsubscribeText": "At the bottom of every automatic reminder is an unsubscribe link. When a customer clicks it, a clean page confirms they've been unsubscribed.",
      "unsubscribeStats": "In the statistics in settings you can see how many customers have unsubscribed. Want to re-subscribe a customer? Contact the helpdesk.",
      "dashboardTitle": "Dashboard Widget",
      "dashboardText": "Once you enable automatic reminders, a widget appears on your dashboard with three numbers: total reminders sent, this month's count, and unsubscribed customers.",
      "prereqTitle": "Requirements",
      "prereqCalloutTitle": "Important to know",
      "prereqCalloutText": "Automatic reminders are only sent when all conditions are met: the feature is enabled, the piano has a service interval, the piano has a known last tuning date, the customer has an email address, and the customer hasn't unsubscribed.",
      "tipTitle": "Tip: Check your customer data",
      "tipText": "Before enabling automatic reminders, check that your customers have an email address and that pianos have a service interval and last tuning date filled in."
    },
    "accountingIntegration": {
      "title": "Accounting Integration",
      "intro": "PianoPlanner can sync your invoices directly to your accounting software, saving you from manual entry. Go to <strong>Settings → Integrations</strong> to connect your accounting package.",
      "availableTitle": "Available Integrations",
      "availableText": "Currently three integrations are fully operational. More are being developed to support piano technicians across the Netherlands, Belgium, and Germany.",
      "jorttTitle": "Jortt (Netherlands)",
      "jorttIntro": "Jortt is a popular Dutch accounting package designed for freelancers and small businesses. PianoPlanner connects via OAuth2 for secure, automatic invoice syncing.",
      "jorttStep1Title": "Get API Credentials",
      "jorttStep1Text": "Log in to your Jortt account and go to <strong>Settings → API</strong>. Create a new API client to get your Client ID and Client Secret.",
      "jorttStep2Title": "Connect in PianoPlanner",
      "jorttStep2Text": "Navigate to <strong>Settings → Integrations</strong>, find the Jortt card, enter your Client ID and Client Secret, then click <strong>Connect</strong>.",
      "jorttStep3Title": "Configure Sync Settings",
      "jorttStep3Text": "Choose whether to sync invoices automatically when created, or manually via the sync button. You can also enable automatic syncing when an invoice is marked as sent.",
      "odooTitle": "Odoo (International)",
      "odooIntro": "Odoo is an international open-source ERP system with a powerful accounting module. PianoPlanner connects via Odoo's JSON-RPC API.",
      "odooWarning": "Odoo API access requires a Custom or Enterprise plan. The free Odoo Online plan does not include external API access.",
      "odooStep1Title": "Gather Your Odoo Details",
      "odooStep1Text": "You need four things: your Odoo URL (e.g. https://mycompany.odoo.com), your database name, your username (email), and an API key. Generate an API key in Odoo via <strong>Settings → Users → API Keys</strong>.",
      "odooStep2Title": "Connect in PianoPlanner",
      "odooStep2Text": "Go to <strong>Settings → Integrations</strong>, find the Odoo card, fill in all four fields, and click <strong>Connect</strong>. PianoPlanner will verify your credentials immediately.",
      "odooStep3Title": "Sync Invoices",
      "odooStep3Text": "Once connected, use the <strong>Sync</strong> button to push invoices to Odoo. Each invoice creates a customer invoice (account.move) in Odoo, and missing contacts are automatically created.",
      "syncLogTitle": "Sync Log",
      "syncLogText": "Every sync action is logged. You can view the sync history in the integration settings to see which invoices have been sent successfully and which ones encountered errors. This helps you quickly spot and resolve any issues.",
      "moneybirdTitle": "Moneybird (Netherlands/Belgium)",
      "moneybirdIntro": "Moneybird is a popular Dutch online accounting package. PianoPlanner connects via the Moneybird API for automatic invoice synchronization.",
      "moneybirdStep1Title": "Get API Token",
      "moneybirdStep1Text": "Log in to your Moneybird account and go to Settings → Developers → Personal API Tokens. Create a new token.",
      "moneybirdStep2Title": "Connect in PianoPlanner",
      "moneybirdStep2Text": "Go to Settings → Integrations → Moneybird. Enter your API token and administration ID, then click Connect.",
      "moneybirdStep3Title": "Sync Invoices",
      "moneybirdStep3Text": "Once connected, you can push invoices directly to Moneybird. Customers are automatically created if they don't exist yet.",
      "comingSoonTitle": "Coming Soon",
      "comingSoonText": "We are actively working on integrations with more accounting packages used by piano technicians across Europe:",
      "comingSoonEboekhouden": "Dutch cloud bookkeeping",
      "comingSoonExact": "Dutch/international ERP system",
      "comingSoonDatev": "German market leader for tax advisors",
      "comingSoonLexoffice": "Popular German cloud accounting",
      "comingSoonSevdesk": "German online accounting for freelancers",
      "comingSoonYuki": "Dutch/Belgian accounting with document processing",
      "comingSoonBillit": "Belgian invoicing platform",
      "tip": "Missing your accounting package? Let us know via support and we'll prioritize it. All credentials are encrypted and stored securely — your API keys are never visible after saving."
    },
    "dismiss": "Hide",
    "smartFill": {
      "title": "Route Fill",
      "intro": "Got a gap in your schedule in a specific area? Route Fill helps you find nearby customers who are due for a tuning and lets you send them an invitation in one click.",
      "howItWorksTitle": "How does it work?",
      "step1Title": "1. Open Route Fill",
      "step1Text": "Go to Customers and click the green \"Route Fill\" button in the top right.",
      "step2Title": "2. Enter a location",
      "step2Text": "Type a city name or postal code and choose a search radius (10-50 km). Click Search.",
      "step3Title": "3. Review results",
      "step3Text": "You'll see a list of customers sorted by urgency. Each customer shows their distance, last tuning date, and an urgency badge.",
      "step4Title": "4. Select & send",
      "step4Text": "Select the customers you want to invite, then click \"Send invitations\". They'll receive a tuning invitation email with your booking link.",
      "urgencyTitle": "Urgency badges",
      "urgencyIntro": "Each customer gets a colored badge based on when they were last tuned:",
      "urgencyOverdue": "🔴 Overdue — Past the service interval",
      "urgencyDue": "🟠 Due — Within one month of the interval",
      "urgencySoon": "🟡 Soon — Within three months of the interval",
      "urgencyOk": "🟢 On schedule — Not yet due",
      "benefitsTitle": "Why use Route Fill?",
      "benefitsText": "• Fill gaps in your schedule proactively\n• Combine multiple appointments in the same area\n• Customers appreciate the personal reminder\n• Less driving, more earning",
      "tip": "Only customers with a configured service interval and an email address appear in results. Make sure your customer records are up to date for the best results."
    },
    "servicesConfig": {
      "title": "Services",
      "intro": "Services define what you offer to customers — such as tuning, regulation, or repair. Each service has its own duration, price, and calendar color. Customers see these when booking online.",
      "howToTitle": "Setting up services",
      "step1Title": "Go to Settings → Services",
      "step1Text": "Here you'll find an overview of all your services. Click \"Add Service\" to create a new one.",
      "step2Title": "Fill in the details",
      "step2Text": "Name, duration (in minutes), price, and optionally a description that customers see on the booking page.",
      "step3Title": "Set buffer times",
      "step3Text": "Add buffer time before and/or after the appointment. This gives you travel time or preparation time between appointments.",
      "step4Title": "Choose a calendar color",
      "step4Text": "Each service can have its own color. This color appears in your PianoPlanner calendar and is synced to Google Calendar. This way you can see at a glance what type of appointment you have.",
      "step5Title": "Activate or deactivate",
      "step5Text": "Only active services appear on the booking page. Deactivate a service to temporarily hide it without deleting it.",
      "colorTitle": "Calendar colors",
      "colorText": "Service colors help you visually distinguish between appointment types in your calendar. Choose from preset colors like blue, green, red, purple, etc. The color is also used when syncing with Google Calendar.",
      "tip": "Create different services for different durations. For example: \"Piano tuning\" (90 min), \"Grand piano tuning\" (120 min), and \"Quick check\" (45 min). This way customers always book the right amount of time."
    },
    "reschedule": {
      "title": "Reschedule Appointment",
      "intro": "Customers can reschedule their own appointment through a secure link in the confirmation email. No phone call or email needed — they choose a new time from smart suggestions and confirm with one click.",
      "howItWorksTitle": "How does it work?",
      "step1Title": "Customer receives confirmation email",
      "step1Text": "Every booking confirmation contains a \"Reschedule Appointment\" button with a unique, secure link.",
      "step2Title": "Customer clicks the link",
      "step2Text": "They see their current appointment and a list of available alternative times, powered by Smart Suggestions with route optimization.",
      "step3Title": "Customer chooses a new time",
      "step3Text": "They select a new time slot and confirm. The appointment is automatically rescheduled.",
      "step4Title": "Both parties are notified",
      "step4Text": "The customer receives a confirmation email with the new time. You (the technician) also receive a notification that the appointment has been rescheduled.",
      "rulesTitle": "Rules",
      "rule1": "Rescheduling is only possible up to 24 hours before the appointment",
      "rule2": "Past appointments cannot be rescheduled",
      "rule3": "The link is unique per appointment and works only once",
      "rule4": "Calendar sync (Google/Apple/Microsoft) is automatically triggered",
      "tip": "The reschedule page uses the same Smart Suggestions engine as the booking page — the current appointment is excluded and only times that fit your schedule and route are shown."
    },
    "routeOptimizer": {
      "title": "Route Optimization",
      "intro": "The Route Optimizer uses Google Maps to calculate the most efficient order for your appointments. It can automatically reorder your day to minimize total travel time.",
      "step1Title": "Open the optimizer",
      "step1Text": "On the dashboard, click the route icon on a day with multiple appointments. The optimizer opens with a map view.",
      "step2Title": "Review the suggested order",
      "step2Text": "You see your appointments plotted on the map with the optimized route. The total travel time savings are shown.",
      "step3Title": "Apply with one click",
      "step3Text": "Click \"Apply optimized route\" to automatically reorder your appointments. Calendar sync is automatically updated.",
      "tip": "The optimizer works best when your customers have accurate addresses. Use Google Maps suggestions when adding customer addresses."
    },
    "qrCode": {
      "title": "QR Code",
      "intro": "PianoPlanner has a built-in QR code generator for your booking page. Print it on business cards, flyers, or place it in your workshop — customers scan it and go directly to your booking page.",
      "step1Title": "Go to the QR code page",
      "step1Text": "Navigate to Settings → Booking Link and click the QR code button, or open the QR page directly.",
      "step2Title": "Download or print",
      "step2Text": "The QR code links to your personal booking page. Download it as an image and use it on your marketing materials."
    },
    "pwaInstall": {
      "title": "Mobile App (PWA)",
      "intro": "PianoPlanner works as a Progressive Web App (PWA) — you can install it on your phone or tablet and use it like a native app. No App Store needed.",
      "iosTitle": "Install on iPhone / iPad",
      "iosStep1Title": "Open PianoPlanner in Safari",
      "iosStep1Text": "Go to pianoplanner.com and log in. Make sure you're using Safari (not Chrome or Firefox).",
      "iosStep2Title": "Tap the Share button",
      "iosStep2Text": "Tap the share icon (square with arrow) at the bottom of the screen.",
      "iosStep3Title": "Choose \"Add to Home Screen\"",
      "iosStep3Text": "Scroll down and tap \"Add to Home Screen\". PianoPlanner will now appear as an app icon on your home screen.",
      "androidTitle": "Install on Android",
      "androidStep1Title": "Open PianoPlanner in Chrome",
      "androidStep1Text": "Go to pianoplanner.com and log in via Chrome.",
      "androidStep2Title": "Tap \"Install\" or the menu",
      "androidStep2Text": "You may see an \"Install\" banner at the bottom. Otherwise tap the three dots (⋮) and choose \"Install App\" or \"Add to Home Screen\".",
      "featuresTitle": "What you get on mobile",
      "feature1": "Full calendar view optimized for touch",
      "feature2": "Quickly look up customers and pianos",
      "feature3": "Create and edit appointments on the go",
      "feature4": "Create and send invoices from your phone",
      "feature5": "Push notifications for new bookings"
    },
    "pushNotifications": {
      "title": "Push Notifications",
      "intro": "Receive instant push notifications when a customer books an appointment online. Works on desktop and mobile (when the PWA is installed).",
      "step1Title": "Enable notifications",
      "step1Text": "Go to Settings → Notifications and enable push notifications. Your browser will ask for permission — click \"Allow\".",
      "step2Title": "Test",
      "step2Text": "Click \"Send test notification\" to check if it works. You should see a notification within a few seconds.",
      "tip": "For the best experience, install the PWA on your phone and enable notifications. This way you'll be instantly notified when a customer books, even when you're not actively using PianoPlanner."
    },
    "molliePayments": {
      "title": "Online Payments (Mollie)",
      "intro": "Accept credit card and other online payments directly on your invoices via Mollie. Customers click the payment link in the invoice email and pay instantly.",
      "setupTitle": "Setting up Mollie",
      "step1Title": "Create a Mollie account",
      "step1Text": "Go to mollie.com and create a free account. Complete the verification process (identity check and bank account).",
      "step2Title": "Get your API key",
      "step2Text": "In your Mollie dashboard, go to Developers → API Keys. Copy your Live API key.",
      "step3Title": "Connect in PianoPlanner",
      "step3Text": "Go to Settings → Integrations → Mollie. Paste your API key and click Connect. PianoPlanner will verify the connection.",
      "step4Title": "Send invoices with payment link",
      "step4Text": "When you send an invoice by email, a payment link is automatically added. Customers can pay directly via credit card or other payment methods.",
      "tip": "Mollie charges no monthly fees — you only pay per transaction (e.g., €0.29 per payment). The invoice status is automatically updated when the customer pays."
    },
    "subscription": {
      "title": "Subscription & Billing",
      "intro": "PianoPlanner offers flexible subscription plans to fit your needs. Manage your subscription, upgrade, downgrade, or update your payment details at any time.",
      "plansTitle": "Available Plans",
      "planHeader": "Plan",
      "priceHeader": "Price",
      "featuresHeader": "Key Features",
      "starterPrice": "Free",
      "starterFeatures": "Basic scheduling, up to 25 customers",
      "soloFeatures": "Unlimited customers, calendar sync, route optimization, invoicing",
      "proFeatures": "Everything in Solo + automatic reminders, accounting integrations, priority support",
      "businessName": "Business",
      "businessFeatures": "Everything in Pro + team management, shared customer database",
      "manageTitle": "Manage Subscription",
      "step1Title": "Go to Billing",
      "step1Text": "Click your profile icon → Billing, or go directly to the billing page.",
      "step2Title": "Upgrade or downgrade",
      "step2Text": "Click \"Change Plan\" to switch between plans. Changes take effect on your next billing date. Upgrading gives immediate access to new features.",
      "step3Title": "Payment management",
      "step3Text": "Click \"Manage Payment\" to update your credit card, view invoices, or cancel your subscription via the Stripe customer portal."
    },
    "teams": {
      "title": "Teams",
      "intro": "Working with multiple technicians? The Teams feature lets you manage a shared customer database, coordinated scheduling, and team booking pages.",
      "availabilityNote": "Teams is available on the Business plan. Features include: team member invitations, shared customer and piano database, coordinated calendar, and a team booking page where customers can choose a technician.",
      "setupTitle": "Getting started with Teams",
      "step1Title": "Create a team",
      "step1Text": "Go to Settings → Teams and click \"Create Team\". Name your team and set it up.",
      "step2Title": "Invite members",
      "step2Text": "Invite technicians by email. They'll receive an invitation to join your team.",
      "step3Title": "Share the team booking page",
      "step3Text": "Your team gets a shared booking page where customers can choose their preferred technician, or let the system determine the best match based on availability and location."
    },
    "streamlineDay": {
      "title": "Streamline Day",
      "intro": "Have gaps between your appointments that waste time? The Streamline button automatically tightens your schedule by recalculating appointment times based on real travel times.",
      "availableFor": "Available for Solo & Pro",
      "availableForText": "Streamline Day is included in Solo and Pro subscriptions. It uses real-time travel calculations via Google Maps.",
      "howItWorksTitle": "How does it work?",
      "step1Title": "1. Open Route Analysis",
      "step1Text": "Go to the Dashboard and click the Analyse button in the toolbar.",
      "step2Title": "2. Click Streamline",
      "step2Text": "In the day analysis view, click the Streamline button. The system calculates real travel times between all appointments.",
      "step3Title": "3. Preview changes",
      "step3Text": "A preview shows the current vs. proposed schedule. You can see exactly how each appointment would shift, including the time saved.",
      "step4Title": "4. Apply or dismiss",
      "step4Text": "Click Apply to update all appointment times, or close the preview to keep your current schedule.",
      "whatItDoesTitle": "What does Streamline calculate?",
      "calc1": "Real travel time from your company address to the first appointment",
      "calc2": "Real travel time between each consecutive appointment",
      "calc3": "Your configured buffer time is added after each travel time",
      "calc4": "The first appointment starts at your working hours start + travel time",
      "previewTitle": "Understanding the preview",
      "previewText": "The preview shows each appointment with its current time and the proposed new time. Appointments that would move are highlighted, and you can see the total time saved at the top of the preview.",
      "benefitsTitle": "Benefits",
      "benefitsText": "Eliminates unnecessary gaps between appointments\nUses real Google Maps travel times - not estimates\nFrees up time at the end of your day\nOne click to optimize your entire schedule",
      "noteTitle": "Good to know",
      "noteText": "Streamline only adjusts appointments that are not yet confirmed by the customer. Private appointments and blocked time slots are kept in place. Always review the preview before applying."
    },
    "trafficPrediction": {
      "title": "Traffic Prediction",
      "intro": "PianoPlanner can factor in real traffic conditions when calculating travel times. Instead of just using the standard driving time, the system looks at expected traffic for the specific day and time of each appointment.",
      "howItWorksTitle": "How does it work?",
      "howItWorksText": "When traffic prediction is enabled, every travel time calculation considers the expected departure time. A Monday morning rush hour trip will show a longer travel time than the same trip on a quiet Sunday afternoon.",
      "whereUsedTitle": "Where is it used?",
      "usage1": "Smart Suggestions - Booking suggestions account for rush hour traffic",
      "usage2": "Route Colors - Calendar colors reflect realistic travel times",
      "usage3": "Route Analysis - Analysis uses traffic-aware durations",
      "usage4": "Streamline - Optimized schedules account for traffic patterns",
      "enableTitle": "How to enable",
      "step1Title": "1. Go to Settings",
      "step1Text": "Navigate to Settings - Travel Time.",
      "step2Title": "2. Enable Traffic Prediction",
      "step2Text": "Toggle Traffic Prediction on. Travel times will now factor in typical traffic patterns for the time of day.",
      "exampleTitle": "Example",
      "exampleText": "A trip from Tilburg to Amsterdam normally takes 89 minutes. With traffic prediction enabled, PianoPlanner might show 91 minutes for a Monday morning departure - preventing you from being late due to rush hour.",
      "noteTitle": "Good to know",
      "noteText": "Traffic predictions are based on Google Maps historical traffic data. They reflect typical conditions for that day and time, not live traffic incidents. Travel time caches refresh every 2 hours to stay current."
    }
  },
  "travelReport": {
    "title": "Travel Expenses Report - PianoPlanner",
    "heading": "Travel Expenses",
    "subtitle": "Overview of all travel distances for invoicing",
    "startDate": "From",
    "endDate": "To",
    "customerFilter": "Customer (optional)",
    "searchPlaceholder": "Search customer...",
    "generate": "Generate Report",
    "export": "CSV",
    "totalAppointments": "Trips",
    "totalKm": "Kilometers",
    "avgKm": "Avg. km",
    "totalTime": "Travel Time",
    "costLabel": "Expenses",
    "loading": "Loading...",
    "emptyState": "Select a period",
    "emptyHint": "The report will be generated automatically",
    "date": "Date",
    "time": "Time",
    "customer": "Customer",
    "location": "Location",
    "route": "Route",
    "service": "Service",
    "distance": "Distance",
    "travelTime": "Travel Time",
    "notes": "Notes",
    "noDataFound": "No travel data found",
    "errorLoading": "Could not load report",
    "errorExport": "Generate a report first",
    "selectDates": "Select a start and end date"
  },
  "onboarding": {
    "welcome": "Welcome to PianoPlanner",
    "subtitle": "Let's configure your account in a few steps",
    "companyTitle": "Company details",
    "companyDescription": "Enter your company information. This will be used for invoices and customer communications.",
    "companyName": "Company name *",
    "companyNamePlaceholder": "e.g. Piano Service Toronto",
    "findAddress": "Find address",
    "findAddressPlaceholder": "e.g. 123 Main Street, Toronto",
    "addressAutoFill": "Address is automatically filled in via Google",
    "street": "Street and house number",
    "postalCode": "Postal code",
    "city": "City",
    "country": "Country",
    "postalCodePlaceholder": "10001",
    "cityPlaceholder": "Toronto",
    "stepCompany": "Company",
    "stepServices": "Services",
    "stepTravel": "Travel",
    "stepCalendar": "Calendar",
    "stepTest": "Test",
    "stepDone": "Done!",
    "next": "Next",
    "previous": "Previous",
    "skip": "Skip and configure later",
    "skipConfirm": "Are you sure you want to skip the setup? You can always adjust these settings later in Settings.",
    "calendarTitle": "Connect Your Calendar",
    "calendarDescription": "Link your existing calendar so PianoPlanner knows when you're already busy. This prevents the smart scheduler from creating double bookings.",
    "calendarWhyTitle": "Why connect your calendar?",
    "calendarWhy1": "PianoPlanner sees when you already have an appointment",
    "calendarWhy2": "The smart planner only suggests available time slots",
    "calendarWhy3": "Customers cannot book at times when you're busy",
    "calendarOptionGoogle": "Google Calendar",
    "calendarOptionGoogleDesc": "Best choice if you use Gmail or a Google account. Full two-way sync.",
    "calendarOptionGoogleBtn": "Connect Google Calendar",
    "calendarOptionApple": "Apple Calendar (iCloud)",
    "calendarOptionAppleDesc": "Ideal if you use an iPhone or Mac. Two-way sync via iCloud.",
    "calendarOptionAppleBtn": "Connect Apple Calendar",
    "calendarOptionOutlook": "Microsoft Outlook",
    "calendarOptionOutlookDesc": "For users of Outlook, Hotmail, or a Microsoft 365 work account.",
    "calendarOptionOutlookBtn": "Connect Outlook",
    "calendarOptionIcal": "Other calendar (iCal)",
    "calendarOptionIcalDesc": "Works with Samsung Calendar, Thunderbird, and any other app that supports iCal. Read-only.",
    "calendarOptionIcalBtn": "View iCal instructions",
    "calendarIcalWhat": "What is iCal?",
    "calendarIcalTitle": "Your tuning appointments in your own trusted calendar",
    "calendarIcalIntro": "Would you like your tuning appointments to automatically appear in the calendar you already use on your phone or computer (such as Samsung, Google, or Outlook)? That's easy — just connect the calendars.",
    "calendarIcalHow": "How does it work?",
    "calendarIcalHowText": "You'll copy a special 'digital key' (a link) and paste it once into your own calendar app. After that, all your appointments sync automatically.",
    "calendarIcalExplain": "iCal is a universal format that lets calendar apps talk to each other. PianoPlanner gives you a special link (URL) that you paste into your own calendar app. Your appointments will then appear automatically.",
    "calendarIcalStep1Title": "Copy the link",
    "calendarIcalStep1": "After setup, go to Settings → Integrations where you'll find a button to copy the calendar link.",
    "calendarIcalStep2Title": "Paste the link in your calendar",
    "calendarIcalStep2": "Open your calendar app and look for the option to add a calendar.",
    "calendarIcalStep3": "Open your calendar app and look for 'Add Calendar' or 'Subscribe'",
    "calendarIcalStep4": "Paste the URL and save — your appointments will appear within an hour",
    "calendarIcalTipGoogle": "Go to 'Add calendar' (preferably on your computer) and choose 'From URL'.",
    "calendarIcalTipOutlook": "Choose 'New calendar' then select 'From network' or 'From Internet'.",
    "calendarIcalGoodToKnow": "Good to know",
    "calendarIcalNote1": "View only — you can see your appointments in your own calendar, but changes are made in PianoPlanner.",
    "calendarIcalNote2": "Automatic — as soon as you schedule an appointment, it appears in your other calendar automatically.",
    "calendarSkip": "Skip, I'll do this later",
    "calendarConnected": "Calendar connected!",
    "calendarSkipNote": "No worries — you can always set this up later via Settings → Integrations.",
    "finishBtn": "Start PianoPlanner",
    "servicesTitle": "Configure Services",
    "servicesDescription": "Configure the services you offer. You can always add more later.",
    "addService": "Add service",
    "noServices": "No services yet. Add one!",
    "modalAddService": "Add service",
    "modalEditService": "Edit service",
    "serviceName": "Name *",
    "serviceNamePlaceholder": "e.g. Tuning",
    "serviceDuration": "Duration (minutes) *",
    "serviceDescription": "Description",
    "serviceOptional": "Optional",
    "servicePrice": "Price",
    "cancel": "Cancel",
    "save": "Save",
    "travelTitle": "Travel Time & Preferences",
    "travelDescription": "Set your travel time preferences for the smart scheduler.",
    "maxTravelTime": "Max. travel time between appointments (minutes)",
    "maxTravelTimeHint": "Smart Appointment prioritizes appointments within this range.",
    "maxBookingTravelTime": "Max. travel time for bookings (minutes)",
    "maxBookingTravelTimeHint": "Customers outside this range will see a contact message.",
    "minutes10": "10 minutes",
    "minutes15": "15 minutes",
    "minutes20": "20 minutes",
    "minutes25": "25 minutes",
    "minutes30": "30 minutes",
    "minutes35": "35 minutes",
    "minutes40": "40 minutes",
    "minutes45": "45 minutes",
    "hour1": "1 hour",
    "hours1_5": "1.5 hours",
    "hours2": "2 hours",
    "testTitle": "Try it out",
    "testDescription": "Create a test customer to explore the app.",
    "testCardTitle": "Create test customer",
    "testCardDescription": "We'll create an example customer \"Test Customer\" with a piano \"Yamaha U1\". This way you can see how everything works!",
    "testButton": "Create test customer",
    "testResult": "✅ Test customer and piano created!",
    "doneTitle": "You're all set!",
    "doneDescription": "Here are some tips to get started:",
    "tipGreenTitle": "Green dates",
    "tipGreenText": "A piano needs tuning soon and fits well in your schedule.",
    "tipRedTitle": "Red dates",
    "tipRedText": "A piano hasn't been tuned for too long — urgent to schedule!",
    "tipSmartTitle": "Smart Appointment",
    "tipSmartText": "Get automatic appointment suggestions based on location and urgency.",
    "errorSaving": "Something went wrong while saving. Please try again.",
    "errorCompanyName": "Please enter a company name.",
    "errorServiceSave": "Could not save service.",
    "errorServiceDelete": "Could not delete service.",
    "errorGeneric": "Something went wrong.",
    "confirmDeleteService": "Are you sure you want to delete this service?",
    "pleaseWait": "Please wait...",
    "creating": "Creating...",
    "created": "Created!",
    "tryAgain": "Try again",
    "phone": "Phone number"
  },
  "projects": {
    "title": "Projects",
    "detailTitle": "Project - PianoPlanner",
    "subtitle": "Workshop project planner",
    "newProject": "New project",
    "noProjects": "No projects yet",
    "noProjectsText": "Get started by clicking 'New project' to create your first project.",
    "backToProjects": "Back to projects",
    "notFound": "Project not found",
    "statusPlanning": "Planning",
    "statusActive": "Active",
    "statusPaused": "Paused",
    "statusCompleted": "Completed",
    "statusCancelled": "Cancelled",
    "priorityLow": "Low",
    "priorityNormal": "Normal",
    "priorityHigh": "High",
    "priorityUrgent": "Urgent",
    "filterAll": "All",
    "filterActive": "Active",
    "filterPlanning": "Planning",
    "filterCompleted": "Completed",
    "searchPlaceholder": "Search projects...",
    "projectTitle": "Project title",
    "description": "Description",
    "customer": "Customer",
    "noCustomer": "-- No customer --",
    "selectCustomer": "Select customer",
    "piano": "Piano",
    "noPiano": "-- No piano --",
    "selectPiano": "Select piano",
    "selectCustomerFirst": "Select a customer first",
    "priority": "Priority",
    "status": "Status",
    "estimatedHours": "Estimated hours",
    "actualHours": "Actual hours",
    "deadline": "Deadline",
    "notes": "Notes",
    "capacity": "Capacity this week",
    "hoursUsed": "hours used",
    "hoursAvailable": "available",
    "tasks": "Tasks",
    "tasksCompleted": "Tasks completed",
    "hoursWorked": "Hours worked",
    "hoursPlanned": "Planned",
    "hoursEstimated": "Estimated",
    "progress": "Progress",
    "addTask": "Add",
    "addTaskPlaceholder": "Add a new task...",
    "editTask": "Edit task",
    "taskTitle": "Task",
    "taskDescription": "Description",
    "taskTodo": "To do",
    "taskInProgress": "In progress",
    "taskDone": "Done",
    "completedTasks": "Completed",
    "dueDate": "Due date",
    "taskTitleRequired": "Task title is required",
    "taskAdded": "Task added",
    "taskUpdated": "Task updated",
    "taskDeleted": "Task deleted",
    "projectSaved": "Project saved",
    "projectCreated": "Project created",
    "projectUpdated": "Project updated",
    "projectDeleted": "Project deleted",
    "duplicate": "Duplicate",
    "duplicating": "Duplicating project...",
    "projectDuplicated": "Project duplicated",
    "duplicateError": "Could not duplicate project",
    "titleRequired": "Project title is required",
    "confirmDelete": "Delete project?",
    "confirmDeleteText": "This will delete the project and all tasks. This cannot be undone.",
    "confirmDeleteTask": "Delete task?",
    "confirmDeleteTaskText": "This action cannot be undone.",
    "upgradeTitle": "Workshop Project Planner",
    "upgradeText": "The project planner is available with the Business plan. Upgrade to manage projects and tasks.",
    "upgradeBtn": "Upgrade to Business",
    "runningProjects": "Running projects",
    "viewAll": "View all",
    "viewAgenda": "View agenda",
    "overbookedWarning": "Warning: {hours} hours overbooked this week!",
    "weekCapacity": "Week capacity",
    "weekFull": "Week is fully scheduled",
    "hoursAvailableWeek": "hours available this week",
    "noProjectsFilter": "No projects match this filter",
    "noProjectsHint": "Create your first workshop project.",
    "editProject": "Edit project",
    "titlePlaceholder": "E.g. Steinway B restoration",
    "descriptionPlaceholder": "Description...",
    "upgradeCta": "Upgrade to Business",
    "dayMon": "Mon",
    "dayTue": "Tue",
    "dayWed": "Wed",
    "dayThu": "Thu",
    "dayFri": "Fri",
    "daySat": "Sat",
    "daySun": "Sun",
    "workHistory": "Work History",
    "noWorkHistory": "No workshop appointments linked yet",
    "hours": "hours",
    "howToUse": "How does it work?",
    "guideTitle": "Workshop Project Planner - Guide",
    "guideCreate": "Create a project",
    "guideCreateDesc": "Click 'New project' to create a workshop job. Add a title, optionally link a customer/piano, and set an estimated hours budget.",
    "guideTasks": "Manage tasks",
    "guideTasksDesc": "Add tasks as a checklist: order materials, pick up parts, call customer, etc. Check off what's done to track progress.",
    "guideLink": "Link appointments",
    "guideLinkDesc": "Create workshop appointments in the agenda and select the project under 'Workshop'. Hours worked are automatically tracked and deducted from the budget.",
    "guideProgress": "Track progress",
    "guideProgressDesc": "See at a glance: tasks completed, hours worked vs. planned, and remaining budget. The week capacity shows how much room you have left.",
    "guideTheater": "Theaters & regular customers",
    "guideTheaterDesc": "Theaters and regular customers get a personal booking link. They can view their own appointments (upcoming + history) and book new appointments directly. Find the link in the customer profile.",
    "guideTip": "<strong>Tip:</strong> Use status filters to stay focused. Set completed projects to 'Completed' to keep your overview clean. Projects with deadlines turn red when they're approaching!",
    "viewGrid": "Cards",
    "viewTimeline": "Timeline",
    "timelineTitle": "Project Timeline",
    "project": "Project",
    "appointment": "Appointment",
    "itemType": "Type",
    "typeLabor": "Labor",
    "typeMaterial": "Material",
    "typeOther": "Other",
    "pricing": "Pricing",
    "quantity": "Quantity",
    "unit": "Unit",
    "unitHour": "Hour",
    "unitPiece": "Piece",
    "unitSet": "Set",
    "unitMeter": "Meter",
    "unitLiter": "Liter",
    "unitPrice": "Price",
    "costPrice": "Cost price",
    "isBillable": "Billable",
    "lineTotal": "Total",
    "quoteSummary": "Cost overview",
    "copyQuote": "Copy quote",
    "quoteCopied": "Quote copied to clipboard",
    "totalToBill": "To invoice",
    "materialsCatalog": "Materials catalog",
    "selectFromCatalog": "Select from catalog",
    "addMaterial": "Add material",
    "materialName": "Name",
    "materialCategory": "Category",
    "materialSupplier": "Supplier",
    "materialArticleNumber": "Article number",
    "materialDefaultPrice": "Default selling price",
    "materialCostPrice": "Cost price",
    "materialSaved": "Material saved",
    "materialDeleted": "Material deleted",
    "workshopHourlyRate": "Workshop hourly rate",
    "duplicateTitle": "Duplicate project",
    "pdf": "PDF",
    "notesPlaceholder": "Internal notes...",
    "colType": "Type",
    "colDescription": "Description",
    "colQty": "Quantity",
    "colUnit": "Unit",
    "colPrice": "Price",
    "colTotal": "Total",
    "newRowPlaceholder": "+ New row...",
    "addTitle": "Add",
    "completed": "Completed",
    "actualHoursTitle": "Hours worked",
    "deleteTitle": "Delete",
    "changeStatus": "Change status",
    "hourAbbr": "hrs",
    "hoursToPlan": "hours to plan",
    "margin": "Margin",
    "loadError": "Error loading project",
    "addRowError": "Could not add row",
    "updateError": "Error updating task",
    "saveError": "Error saving task",
    "deleteError": "Error deleting",
    "unknownCustomer": "Unknown",
    "quoteHeader": "QUOTE",
    "quoteCustomer": "Customer",
    "quotePiano": "Piano",
    "quoteDate": "Date",
    "quoteLaborSection": "LABOR",
    "quoteSubtotalLabor": "Subtotal labor",
    "quoteMaterialsSection": "MATERIALS",
    "quoteSubtotalMaterials": "Subtotal materials",
    "quoteOtherSection": "OTHER",
    "quoteSubtotalOther": "Subtotal other",
    "quoteTotal": "TOTAL",
    "pdfProject": "Project",
    "pdfRate": "Rate",
    "pdfAmount": "Amount",
    "pdfTotalExclVat": "Total excl. VAT",
    "pdfFooter": "Quote generated with PianoPlanner"
  },
  "privacy": {
    "title": "Privacy Policy",
    "subtitle": "How we collect, use and protect your data",
    "h1": "1. What data do we collect?",
    "p1": "We process data in two categories:",
    "h2": "2. Purpose of data processing",
    "p2": "We process this data exclusively to:",
    "h3": "3. Sharing data and Synchronization",
    "p3a": "<strong>3.1. External Calendar Services:</strong> If you activate two-way synchronization, appointment data is exchanged with external parties such as Google (Google Calendar), Apple (iCloud) or Microsoft (Outlook). We have no control over the privacy policies of these third parties.",
    "p3b": "<strong>3.2. Processors:</strong> We use trusted sub-processors for hosting (cloud infrastructure), email delivery and payments. Data processing agreements compliant with the GDPR have been concluded with these parties.",
    "p3c": "<strong>3.3. No selling:</strong> We will never sell or rent your data or your customers' data to third parties for marketing purposes.",
    "h4": "4. Security and Storage",
    "p4a": "<strong>4.1. Security:</strong> We take appropriate technical and organizational measures to protect data against loss or unlawful processing, including SSL encryption and secured databases.",
    "p4b": "<strong>4.2. Local storage (PWA):</strong> When using the Progressive Web App, certain data may be stored locally on your device to enable offline use and fast synchronization. You are responsible for the physical security of your devices.",
    "h5": "5. Retention period",
    "p5": "We retain your data as long as your account is active. After termination of your subscription, we retain your data for a maximum of 30 days to enable export. After that, all customer data is permanently deleted, unless legal retention obligations require us to retain it longer.",
    "h6": "6. Your rights",
    "p6": "Under the GDPR, you have the following rights regarding your personal data:",
    "p6outro": "You can exercise these rights through the settings in your account or by contacting us at info@pianoplanner.com.",
    "h7": "7. Contact details",
    "lastUpdated": "Last updated: February 23, 2026",
    "tldr": "We never sell your data. Your information is stored securely on European servers. You are and remain the owner of your customer data.",
    "toc1": "Data",
    "toc2": "Purpose",
    "toc3": "Sharing",
    "toc4": "Security",
    "toc5": "Retention",
    "toc6": "Your rights",
    "toc7": "Contact",
    "intro": "Introduction",
    "catA": "Category A",
    "catA1": "First and last name",
    "catA2": "Address data",
    "catA3": "Phone number",
    "catB": "Category B",
    "catB1": "Email address",
    "catB2": "IP address",
    "catB3": "Browser information",
    "p2a": "Delivering products/services",
    "p2b": "Customer service",
    "p2c": "Improving our website",
    "p2d": "Legal obligations",
    "p6a": "Right of access",
    "p6b": "Right to rectification",
    "p6c": "Right to erasure"
  },
  "terms": {
    "title": "Terms and Conditions",
    "subtitle": "Terms of use for PianoPlanner",
    "h1": "1. Identity of the Entrepreneur",
    "p1": "PianoPlanner is a service of Edward Meijer, operating under the name Edan Creative (also trading as Edward Meijer Piano & Grand Piano Maintenance). Located in Tilburg, The Netherlands. Chamber of Commerce: 18073263.",
    "p1b": "By creating an account or using PianoPlanner, you agree to these terms and conditions.",
    "h2": "2. Description of the Service",
    "p2": "PianoPlanner is an online planning and customer management service (SaaS) for piano technicians, available via a web browser and as a Progressive Web App (PWA). The service includes calendar, customer management, instrument registration, invoicing and optional two-way synchronization with external calendar services.",
    "h3": "3. Intellectual Property",
    "p3a": "<strong>3.1. Ownership:</strong> The PianoPlanner service, including source code, design, algorithms, graphic elements and all content, is the exclusive intellectual property of Edward Meijer.",
    "p3b": "<strong>3.2. Trademark:</strong> The name \"PianoPlanner\" and associated logos are protected trademarks (applied for/registered at BOIP). Use of these marks without prior written consent is prohibited.",
    "p3c": "<strong>3.3. License:</strong> Users receive a non-exclusive, non-transferable right to use the software for the duration of their subscription. Copying, decompiling or selling the software to third parties is prohibited.",
    "h4": "4. Use of the Service and PWA",
    "p4a": "<strong>4.1. Account:</strong> The user is responsible for keeping login credentials confidential and for all activities under their account.",
    "p4b": "<strong>4.2. Synchronization:</strong> PianoPlanner uses technology for two-way synchronization between devices and external calendar services. The user is responsible for correct browser settings and internet connection to enable this synchronization.",
    "p4c": "<strong>4.3. Acceptable Use:</strong> It is prohibited to use the service for illegal purposes or in a way that compromises system integrity.",
    "h5": "5. Subscriptions and Payment",
    "p5a": "<strong>5.1. Pricing:</strong> Current prices for the various plans (Solo, Pro, Business) are listed on the website.",
    "p5b": "<strong>5.2. Payment:</strong> Payments are processed via Mollie. Subscriptions are automatically renewed unless cancelled before the end of the billing period.",
    "p5c": "<strong>5.3. Cancellation:</strong> After cancellation, the user retains access to data until the end of the paid period.",
    "h6": "6. Data and Privacy",
    "p6a": "<strong>6.1. Data Ownership:</strong> The user remains the owner of all entered customer and instrument data.",
    "p6b": "<strong>6.2. Processing:</strong> We process personal data in accordance with our Privacy Policy and the GDPR.",
    "p6c": "<strong>6.3. Export:</strong> After termination of the service, the user has 30 days to export data, after which it may be permanently deleted.",
    "h7": "7. Limitation of Liability",
    "p7a": "<strong>7.1. Availability:</strong> We strive for high availability but do not guarantee 100% uptime.",
    "p7b": "<strong>7.2. External Services:</strong> We are not liable for disruptions or changes in linked external services (Google, Apple, Microsoft).",
    "p7c": "<strong>7.3. Data Loss:</strong> Although we make daily backups, we accept no liability for data loss beyond our direct fault.",
    "p7d": "<strong>7.4. Maximum Liability:</strong> Our total liability is limited to the amount the user has paid in the 12 months preceding the damage event.",
    "h8": "8. Maintenance and Backup",
    "p8a": "<strong>8.1. Maintenance:</strong> We may temporarily interrupt the service for necessary maintenance.",
    "p8b": "<strong>8.2. Backup:</strong> Although we make daily backups, we advise users to regularly create their own exports of critical business data.",
    "h9": "9. Changes and Applicable Law",
    "p9a": "<strong>9.1. Changes:</strong> We may modify these terms. Major changes will be communicated at least 30 days in advance.",
    "p9b": "<strong>9.2. Law:</strong> These terms are exclusively governed by Dutch law.",
    "p9c": "<strong>9.3. Disputes:</strong> Any disputes shall be submitted to the competent court in Breda.",
    "lastUpdated": "Last updated: February 23, 2026",
    "tldr": "You remain the owner of your data. You can cancel anytime — you keep access until the end of the billing period. After cancellation, you have 30 days to export your data. Dutch law applies.",
    "toc1": "Identity",
    "toc2": "Service",
    "toc3": "Ownership",
    "toc4": "Usage & PWA",
    "toc5": "Payment",
    "toc6": "Privacy",
    "toc7": "Liability",
    "toc8": "Maintenance",
    "toc9": "Changes"
  },
  "travelV2": {
    "pageTitle": "Trips & Travel Expenses - PianoPlanner",
    "heading": "Trips & Travel Expenses",
    "tabOverview": "Overview",
    "tabTrips": "Trip List",
    "tabVehicle": "Vehicle",
    "year": "Year:",
    "totalKm": "Total km",
    "businessKm": "Business km",
    "privateKm": "Private km",
    "declaration": "Declaration",
    "manualTrips": "Manual",
    "odometerDiff": "Odometer diff",
    "monthlyChart": "Monthly Overview",
    "business": "Business",
    "private": "Private",
    "filterAll": "All",
    "filterBusiness": "Business",
    "filterPrivate": "Private",
    "filterManual": "Manual",
    "searchTrips": "Search trip...",
    "addTrip": "Add trip",
    "colDate": "Date",
    "colPurpose": "Purpose",
    "colRoute": "Route",
    "colType": "Type",
    "colSource": "Source",
    "colDistance": "Distance",
    "noTrips": "No trips found",
    "noTripsHint": "Select a different year or change the filter",
    "loading": "Loading...",
    "purposePlaceholder": "Trip purpose",
    "fromPlaceholder": "From",
    "toPlaceholder": "To",
    "roundTrip": "Round trip",
    "vehicleInfo": "Vehicle information",
    "licensePlate": "License plate",
    "vehicleName": "Vehicle name",
    "save": "Save",
    "odometerTitle": "Odometer readings",
    "odometerDate": "Date",
    "odometerReading": "Reading (km)",
    "period": "Period:",
    "periodWeek": "Week",
    "periodMonth": "Month",
    "periodQuarter": "Quarter",
    "periodYear": "Year",
    "periodCustom": "Custom",
    "periodTo": "to",
    "tripsCount": "{count} trips",
    "exportCsv": "CSV",
    "exportPdf": "PDF",
    "exportCsvTitle": "Export as CSV",
    "exportPdfTitle": "Export as PDF",
    "refreshTitle": "Refresh",
    "prevTitle": "Previous",
    "nextTitle": "Next",
    "kmPlaceholder": "km",
    "odometerPlaceholder": "e.g. 45230",
    "monthJan": "Jan",
    "monthFeb": "Feb",
    "monthMar": "Mar",
    "monthApr": "Apr",
    "monthMay": "May",
    "monthJun": "Jun",
    "monthJul": "Jul",
    "monthAug": "Aug",
    "monthSep": "Sep",
    "monthOct": "Oct",
    "monthNov": "Nov",
    "monthDec": "Dec",
    "trips": "trips",
    "loadError": "Error loading data",
    "typeBusiness": "Business",
    "typePrivate": "Private",
    "typeManual": "Manual",
    "sourceManual": "Manual",
    "sourceAppointment": "Appointment",
    "home": "Home",
    "manuallyAdjusted": "Manually adjusted",
    "editTitle": "Edit",
    "deleteTitle": "Delete",
    "overrideKmTitle": "Override km",
    "totalLabel": "Total",
    "roundTripLabel": "Round trip",
    "fillDateDistance": "Fill in date and distance",
    "defaultPurpose": "Manual trip",
    "tripAdded": "Trip added",
    "tripSaveError": "Error saving trip",
    "tripUpdated": "Trip updated",
    "tripUpdateError": "Error updating trip",
    "confirmDeleteTrip": "Are you sure you want to delete this trip?",
    "tripDeleted": "Trip deleted",
    "deleteError": "Error deleting",
    "currentDistance": "Current distance",
    "enterNewDistance": "Enter new distance (km):",
    "invalidValue": "Invalid value",
    "kmOverridden": "Km adjusted",
    "kmOverrideError": "Error adjusting km",
    "vehicleSaved": "Vehicle saved",
    "vehicleSaveError": "Error saving vehicle",
    "noOdometerReadings": "No readings recorded yet",
    "fillDateReading": "Fill in date and reading",
    "odometerAdded": "Odometer reading added",
    "odometerSaveError": "Error saving reading",
    "confirmDeleteOdometer": "Delete odometer reading?",
    "odometerDeleted": "Reading deleted",
    "noDataExport": "No data to export",
    "csvHeader": "Date,Purpose,From,To,Type,Source,Distance (km),Round trip",
    "csvDownloaded": "CSV downloaded",
    "pdfDownloaded": "PDF downloaded",
    "pdfError": "Error exporting PDF"
  },
  "reminders": {
    "pageTitle": "Tuning Reminders - PianoPlanner",
    "title": "Tuning Reminders",
    "sendTest": "Send test",
    "editTemplate": "Template",
    "tabOverview": "Overview",
    "tabUpcoming": "Queue",
    "tabHistory": "History",
    "tabSettings": "Settings",
    "statTotal": "Total sent",
    "statMonth": "This month",
    "statQueue": "In queue",
    "statOptout": "Unsubscribed",
    "toggleTitle": "Automatic reminders",
    "toggleDesc": "Customers are automatically reminded when their piano is due for tuning",
    "toggleDescActive": "Active — reminders are being sent automatically",
    "confirmTitle": "Confirmation required",
    "confirmActivate": "Yes, activate",
    "reviewFirst": "Review first",
    "cancel": "Cancel",
    "confirmNoPianos": "There are currently <strong>no pianos</strong> that would receive a reminder. You can safely activate — no emails will be sent until pianos are due for tuning.",
    "confirmActivateIntro": "When activated, reminders will be scheduled for",
    "confirmOf": "of",
    "confirmCustomers": "customer(s)",
    "confirmSkipped": "will be skipped (already have an appointment).",
    "confirmOptedOut": "customer(s) have unsubscribed.",
    "confirmEmailTiming": "Emails will not be sent immediately but at the configured time",
    "confirmReviewHint": "Click \"Review first\" to see the full list.",
    "howTitle": "How does it work?",
    "how1": "Reminders are only sent for pianos with a set tuning interval (> 0 months)",
    "how2": "The first reminder is sent X days before the scheduled tuning",
    "how3": "If there is no response, follow-ups are sent at the configured interval",
    "how4": "The cycle stops automatically when the customer books an appointment or unsubscribes",
    "how5": "Pianos with a future appointment are automatically skipped",
    "how6": "Maximum 50 emails per day (spam protection)",
    "upcomingTitle": "Pianos receiving a reminder",
    "loadingUpcoming": "Loading...",
    "upcomingEmpty": "No pianos currently need a reminder",
    "historyTitle": "Sent reminders",
    "loadingHistory": "Loading...",
    "historyEmpty": "No reminders sent yet",
    "settingsTitle": "Reminder settings",
    "setAdvanceDays": "Send first reminder",
    "optDays7": "7 days",
    "optDays14": "14 days",
    "optDays21": "21 days",
    "optDays30": "30 days",
    "optDays45": "45 days",
    "optDays60": "60 days",
    "optDays90": "90 days",
    "beforeDue": "before tuning",
    "setFollowup": "Follow-up interval",
    "betweenFollowups": "between follow-ups",
    "setMax": "Max reminders per cycle",
    "setHour": "Send time",
    "save": "Save",
    "daysShort": "d",
    "overdue": "overdue",
    "andMoreOthers": "and",
    "others": "more",
    "previewLoadFailed": "Could not load the preview. Please try again.",
    "toastActivated": "Reminders activated",
    "toastDeactivated": "Reminders deactivated",
    "toastSaveError": "Error saving",
    "toastSettingsSaved": "Settings saved",
    "toastSaveFailed": "Save failed",
    "toastTestSent": "Test reminder sent to your email",
    "toastTestFailed": "Could not send test",
    "toastSendError": "Error sending",
    "thCustomer": "Customer",
    "thPiano": "Piano",
    "thLastTuning": "Last tuning",
    "thStatus": "Status",
    "thReminders": "Reminders",
    "statusOptedOut": "Unsubscribed",
    "statusScheduled": "Appointment",
    "statusDueSoon": "Due soon",
    "sent": "sent",
    "sentNone": "None yet",
    "loadError": "Could not load data",
    "unknownCustomer": "Unknown",
    "reminderNumber": "Reminder",
    "historyLoadError": "Could not load history"
  },
  "invoices": {
    "pageTitle": "Invoices - PianoPlanner",
    "title": "Invoices",
    "settings": "Settings",
    "newInvoice": "New invoice",
    "openTasks": "To invoice",
    "itemsSelected": "{count} item(s) selected",
    "multiCustomerSelected": "{count} items from {customers} customers selected",
    "createFromTasks": "📄 Create invoice",
    "markPaid": "Mark as paid",
    "dismissTask": "✕ Handled",
    "confirmDismiss": "Mark {count} item(s) as handled? They will be removed from the list.",
    "dismissedSuccess": "Item(s) marked as handled",
    "dismissError": "Error dismissing task",
    "confirmMarkPaid": "Mark {count} item(s) as paid?",
    "paymentMarkedPaid": "Payment(s) marked as paid",
    "markPaidError": "Error marking as paid",
    "multiCustomerInvoice": "You have selected items from multiple customers. One invoice per customer will be created. Continue?",
    "totalInvoices": "Total",
    "drafts": "Drafts",
    "outstanding": "Outstanding",
    "paid": "Paid",
    "overdue": "Overdue",
    "searchPlaceholder": "Search by number or customer...",
    "loading": "Loading...",
    "noInvoices": "No invoices yet. Create your first invoice!",
    "createFirst": "Create first invoice",
    "colNumber": "Number",
    "colCustomer": "Customer",
    "colDate": "Date",
    "colDueDate": "Due date",
    "colAmount": "Amount",
    "colStatus": "Status",
    "settingsTitle": "Invoice settings",
    "numbering": "Numbering",
    "prefix": "Invoice prefix",
    "nextNumber": "Next number",
    "nextInvoicePreview": "Next invoice:",
    "defaultVat": "Default VAT %",
    "layout": "Layout",
    "paymentTermsDays": "Payment terms (days)",
    "vatRegion": "VAT region",
    "bankDetails": "Bank details",
    "bankName": "Bank name",
    "footerText": "Invoice footer text",
    "contactPosition": "Customer info position",
    "contactLeft": "Left (default)",
    "contactRight": "Right",
    "hideCompanyInfo": "Hide company info on invoice (already on letterhead)",
    "letterhead": "Letterhead",
    "serviceTemplates": "Service templates",
    "cancel": "Cancel",
    "save": "Save",
    "statusDraft": "Draft",
    "statusSent": "Sent",
    "statusPaid": "Paid",
    "statusOverdue": "Overdue",
    "statusCancelled": "Cancelled",
    "statusCredited": "Credited",
    "statusConfirmed": "Confirmed",
    "editInvoice": "Edit",
    "viewPdf": "View PDF",
    "duplicate": "Duplicate",
    "markSent": "Mark as sent",
    "markConfirmed": "Confirm without email",
    "confirmNoEmail": "Confirm without email",
    "invoiceConfirmed": "Invoice confirmed (no email sent)",
    "delete": "Delete",
    "creditNote": "Credit note",
    "creditForRef": "Regarding",
    "creditedBy": "Credited with",
    "confirmDelete": "Are you sure you want to delete this draft invoice?",
    "confirmCredit": "Are you sure you want to create a credit note?",
    "savedMsg": "Settings saved",
    "deletedMsg": "Invoice deleted",
    "statusUpdated": "Status updated",
    "duplicatedMsg": "Invoice duplicated",
    "creditCreated": "Credit note created",
    "errorStatus": "Error changing status",
    "errorDuplicate": "Error duplicating",
    "errorCredit": "Error creating credit note",
    "invoiceSaved": "Invoice saved",
    "changesSaved": "Changes saved",
    "selectCustomerError": "Select a customer",
    "issueDateError": "Enter an invoice date",
    "addLineError": "Add at least one line",
    "alreadyCredited": "This invoice has already been credited",
    "internalNotes": "Internal notes",
    "internalNotesPlaceholder": "Only visible to you, not on the invoice...",
    "letterheadUploaded": "Letterhead uploaded",
    "letterheadHint": "JPG or PNG only. PDF is not supported.",
    "letterheadNoPdf": "PDF is not supported as letterhead. Use JPG or PNG.",
    "letterheadOnlyImages": "Only JPG or PNG files are allowed.",
    "deleteLetterheadConfirm": "Delete letterhead?",
    "letterheadDeleted": "Letterhead deleted",
    "selectFileFirst": "Please select a file first",
    "serviceAdded": "Service added",
    "serviceDeleted": "Service deleted",
    "invoiceDetail": "Invoice",
    "customer": "Customer",
    "selectCustomer": "Select customer...",
    "invoiceNumber": "Invoice number",
    "numberOnSend": "Invoice number will be assigned automatically when sent",
    "issueDate": "Invoice date",
    "dueDate": "Due date",
    "paymentTerms": "Payment terms",
    "paymentTermsCash": "Cash / Card",
    "paymentTerms7": "7 days",
    "paymentTerms14": "14 days",
    "paymentTerms30": "30 days",
    "savePaymentTermsToCustomer": "Save payment terms \"{terms}\" to {name}?",
    "paymentTermsSaved": "Payment terms saved to customer",
    "days": "days",
    "notes": "Notes",
    "addLine": "Add line",
    "addTextLine": "Text line",
    "fromPiano": "Add piano...",
    "searchPiano": "Search piano...",
    "description": "Description",
    "quantity": "Quantity",
    "unitPrice": "Price",
    "vatRate": "VAT %",
    "lineTotal": "Total",
    "subtotal": "Subtotal",
    "vatAmount": "VAT",
    "total": "Total",
    "saveDraft": "📝 Save draft",
    "saveAndSend": "✉️ Save & send",
    "backToList": "Back to overview",
    "fromTemplate": "From template",
    "sendEmail": "Send email",
    "sendEmailTitle": "Send invoice",
    "emailSubject": "Subject",
    "emailBcc": "BCC (copy to)",
    "emailTo": "To",
    "emailMessage": "Message",
    "attachmentHint": "The invoice will be attached to the email",
    "includePaymentLink": "Include payment link",
    "paymentLinkHint": "Adds a payment button to the email (via Mollie or Stripe)",
    "emailSent": "Invoice sent by email",
    "noCustomerEmail": "Customer has no email address",
    "sendError": "Error sending invoice",
    "errorLoading": "Error loading invoice",
    "onlinePayment": "Online payment",
    "mollieApiKey": "Mollie API key",
    "mollieHint": "Enter your Mollie Live API key to enable online payment links on invoices.",
    "stripeApiKey": "Stripe API key",
    "stripeHint": "Alternative: enter your Stripe Secret key for payment links via Stripe Checkout.",
    "eInvoicing": "E-invoicing",
    "ublAttach": "Attach UBL XML",
    "ublHint": "Sends a machine-readable e-invoice (UBL 2.1) as attachment alongside the PDF. Enabled by default for EU countries.",
    "ublEuNote": "E-invoicing is standard or mandatory in your country.",
    "ublNonEuNote": "E-invoicing is not required for your country. You can enable it optionally.",
    "downloadUbl": "UBL XML",
    "layoutEditor": "Invoice Layout Editor",
    "companyLogo": "Company logo",
    "noLogo": "No logo uploaded yet",
    "logoPosition": "Logo position",
    "posLeft": "Left",
    "posCenter": "Center",
    "posRight": "Right",
    "logoUploaded": "Logo uploaded",
    "logoDeleted": "Logo deleted",
    "confirmDeleteLogo": "Are you sure you want to delete the logo?",
    "contactBlock": "Company info contact block",
    "contactBlockHint": "Use variables to automatically fill in your details. Leave empty for default layout.",
    "resetToDefault": "Reset to default",
    "preview": "Preview",
    "noLetterhead": "No letterhead yet",
    "desktopHint": "Adjust layout details like logo position, font sizes and margins on desktop with the live preview.",
    "logoScale": "Logo size",
    "marginSize": "Page margin",
    "companyBlockPosition": "Company info position",
    "metaPosition": "Invoice details position",
    "customerPosition": "Customer info position",
    "customerOffsetX": "Customer address horizontal (mm)",
    "customerOffsetY": "Customer address vertical (mm)",
    "emailTemplate": "Accompanying email",
    "emailTemplateHint": "Set your default email text. Variables are automatically filled in per invoice.",
    "emailSubjectTemplate": "Subject",
    "emailBodyTemplate": "Message",
    "defaultSubject": "Invoice {{invoiceNumber}}",
    "defaultBody": "Dear {{firstName}},\n\nPlease find attached invoice {{invoiceNumber}} for services rendered.\nThe total amount is {{amount}}.\n\nPlease pay this invoice before {{dueDate}}.\n\nThe invoice is included as an attachment.\n\nKind regards",
    "defaultCreditSubject": "Credit Note {{invoiceNumber}}",
    "defaultCreditBody": "Dear {{firstName}},\n\nPlease find attached credit note {{invoiceNumber}}.\nThe total amount is {{amount}}.\n\nThe credit note is included as an attachment.\n\nKind regards",
    "howToUse": "How does it work?",
    "guideTitle": "Invoices - Guide",
    "guideCreate": "Create invoice",
    "guideCreateDesc": "Click + to create a new invoice. Select a customer, add lines with description and amount. The invoice number is automatically incremented.",
    "guideSend": "Send by email",
    "guideSendDesc": "Send invoices as PDF by email directly from PianoPlanner. Customize the email template in settings with variables like customer and amount.",
    "guidePayment": "Online payment",
    "guidePaymentDesc": "Connect your Mollie API key in settings to add online payment links to invoice emails. Payments are processed automatically.",
    "guideLayout": "Customize layout",
    "guideLayoutDesc": "Open settings to customize your invoice layout: logo, company details, font sizes and colors. The live preview shows changes instantly.",
    "guideStatus": "Track status",
    "guideStatusDesc": "Track invoices via status cards: Draft, Outstanding, Paid and Overdue. Click a card to filter. Overdue invoices are marked in red.",
    "guideVat": "VAT calculation",
    "guideVatDesc": "For private customers, the service price is <strong>VAT inclusive</strong> — VAT is calculated from the amount. For business customers, the price is <strong>VAT exclusive</strong> — VAT is added on top of the amount.",
    "guideTip": "<strong>Tip:</strong> Use the search bar to quickly find an invoice by number or customer name. Download invoices as PDF or send them directly — all from one screen.",
    "fontSizes": "Font sizes",
    "fsBedrijfsnaam": "Company name",
    "fsBedrijfsinfo": "Company info",
    "fsFactuurtitel": "Invoice title",
    "fsKlantnaam": "Customer name",
    "fsTabelkop": "Table header",
    "fsTabelinhoud": "Table content",
    "fsTotalen": "Totals",
    "fsVoettekst": "Footer text",
    "senderAlign": "Sender alignment",
    "sampleLine1": "1 x Piano tuning grand piano",
    "sampleLine2": "1 x Travel costs",
    "sampleCompany": "My Company",
    "vatExempt": "Exempt",
    "errorDeleting": "Error deleting",
    "draft": "Draft",
    "errorLoadingInvoices": "Error loading invoices",
    "oneService": "1 service",
    "services": "services",
    "serviceDefault": "Service",
    "billingRedirectNote": "Invoice goes to billing admin instead of customer",
    "molliePaymentLinkError": "Mollie payment link could not be created",
    "unknownError": "Unknown error",
    "errorSaving": "Error saving",
    "uploadFailed": "Upload failed",
    "errorDeletingLogo": "Error deleting logo",
    "noServicesYet": "No services configured yet",
    "serviceNamePrompt": "Service name:",
    "servicePricePrompt": "Default price (excl. VAT):",
    "errorAddingService": "Error adding service",
    "errorGeneric": "Error",
    "mollieKeyConfigured": "Mollie API key configured",
    "mollieKeyNotSet": "No Mollie key configured",
    "stripeKeyConfigured": "Stripe API key configured",
    "stripeKeyNotSet": "No Stripe key configured",
    "connectingMollie": "Connecting to Mollie...",
    "mollieKeyValid": "Mollie key is valid — payment methods:",
    "keyInvalid": "Key is invalid",
    "mollieConnectFailed": "Could not connect to Mollie",
    "connectingStripe": "Connecting to Stripe...",
    "stripeKeyValid": "Stripe key is valid — account:",
    "stripeConnectFailed": "Could not connect to Stripe",
    "mollieKeyVerified": "Mollie API key verified and saved",
    "stripeKeyVerified": "Stripe API key verified and saved",
    "phoneLabel": "Phone:",
    "emailLabel": "Email:",
    "kvkLabel": "COC:",
    "vatLabel": "VAT:",
    "newInvoiceTitle": "New invoice",
    "deleteLogoTitle": "Delete logo",
    "deleteLetterheadTitle": "Delete letterhead",
    "testMollieTitle": "Test current or new Mollie key",
    "testStripeTitle": "Test the Stripe key",
    "testBtn": "Test",
    "upload": "Upload",
    "footerPlaceholder": "E.g. COC number, VAT number, etc.",
    "bccPlaceholder": "email@example.com",
    "emailSubjectPlaceholder": "Invoice {{invoiceNumber}}",
    "emailBodyPlaceholder": "Dear {{firstName}},\n\nPlease find attached invoice {{invoiceNumber}} for services rendered.\nThe total amount is {{amount}}.\n\nPlease pay this invoice before {{dueDate}}.\n\nThe invoice is included as an attachment.\n\nKind regards",
    "pushToAccounting": "Push to",
    "confirmPushAccounting": "Push this invoice to {provider}?",
    "pushingToAccounting": "Pushing to {provider}...",
    "pushedToAccounting": "Invoice pushed to {provider}",
    "pushFailed": "Push failed"
  },
  "importCalendar": {
    "googleTitle": "Import Google Calendar",
    "googleDesc": "Import appointments directly from your Google Calendar — up to 3 years back.",
    "googleNotConnected": "Your Google Calendar is not connected yet. Go to Settings → Calendar Sync to connect your Google account.",
    "googlePeriod": "Period:",
    "googleFoundInGoogle": "Found in Google Calendar:",
    "googleAlreadyImported": "Already imported:",
    "googleNewEvents": "New to import:",
    "googlePreviewBtn": "🔍 See what's available",
    "googleImportBtn": "📥 Import appointments",
    "googleImporting": "Importing...",
    "googleViewAgenda": "View calendar",
    "uploadTitle": "Upload your calendar file",
    "microsoftTitle": "Import Microsoft / Outlook",
    "microsoftDesc": "Import appointments directly from your Microsoft 365 / Outlook calendar — up to 3 years back.",
    "microsoftNotConnected": "Your Microsoft calendar is not connected yet. Go to Settings → Calendar Sync to connect your Microsoft account.",
    "microsoftPeriod": "Period:",
    "microsoftFoundInMs": "Found in Microsoft:",
    "microsoftAlreadyImported": "Already imported:",
    "microsoftNewEvents": "New to import:",
    "microsoftPreviewBtn": "🔍 See what's available",
    "microsoftImportBtn": "📥 Import appointments",
    "microsoftImporting": "Importing...",
    "microsoftViewAgenda": "View calendar",
    "appleTitle": "Apple Calendar",
    "appleExplanation": "Apple does not offer an open API for calendar access, unlike Google and Microsoft. Therefore, a direct import is not possible.",
    "appleHowTo": "You can still import your Apple Calendar via an .ics file:",
    "appleStep1": "Open Calendar on your Mac",
    "appleStep2": "Select your calendar in the sidebar",
    "appleStep3": "Go to File → Export → Export...",
    "appleStep4": "Save as .ics file and upload it below ↓",
    "googleSessionExpired": "Your Google session has expired. Go to Settings to reconnect.",
    "microsoftSessionExpired": "Your Microsoft session has expired. Go to Settings to reconnect.",
    "previewFailed": "Preview failed",
    "importFailed": "Import failed",
    "error": "Error",
    "importError": "Error importing",
    "processing": "Processing...",
    "errors": "errors",
    "googleConfirmImport": "Import {count} appointments from Google Calendar? This cannot be undone.",
    "microsoftConfirmImport": "Import {count} appointments from Microsoft? This cannot be undone.",
    "googleFetching": "Fetching appointments from Google...",
    "microsoftFetching": "Fetching appointments from Microsoft...",
    "importedCount": "{count} appointments imported!",
    "skippedCount": "{count} skipped (already present)",
    "noEventsToImport": "No appointments to import",
    "backToSettings": "Back to settings",
    "calendarImportTitle": "Calendar Import",
    "calendarImportDesc": "Import appointments from Apple Calendar, Google Calendar, Outlook or other apps",
    "importManagerTitle": "Import Manager",
    "importManagerDesc": "Here you can delete previously imported data per batch.",
    "loadingBatches": "Loading import batches...",
    "noImportedData": "No imported data found.",
    "howItWorks": "How does it work?",
    "howToExport": "How do I export my calendar?",
    "appleExportStep": "Open Calendar → Select your calendar in the sidebar → File → Export → Export... → Save as .ics file",
    "googleExportStep": "Go to calendar.google.com → Click ⚙️ → Settings → Import & export → Export → Choose your calendar",
    "outlookExportStep": "Open Calendar → File → Save Calendar → Choose date range → Save as .ics",
    "iphoneExportStep": "Go via iCloud: go to icloud.com/calendar → Click 📤 (share) next to your calendar → Public calendar → Copy link and download",
    "importWarning": "Imported appointments are created without a linked customer. You can manually add a customer to the appointment via the calendar afterwards.",
    "importCompleted": "Import completed!",
    "filterAll": "All",
    "andMore": "... and {count} more",
    "importCount": "Import {count} appointments",
    "deleteBatch": "Delete",
    "batchLoadError": "Error loading import batches.",
    "confirmDeleteBatch": "Are you sure you want to delete this import?\n\nThis deletes {count} items permanently.",
    "deletedResult": "Deleted:\n• {customers} customers\n• {pianos} pianos\n• {appointments} appointments",
    "deleteError": "Error deleting: ",
    "unknownError": "Unknown error",
    "fileReadError": "Error reading file: ",
    "months6": "6 months",
    "months12": "1 year",
    "months24": "2 years",
    "months36": "3 years",
    "importOf": "Import of",
    "batchCustomers": "customers",
    "batchPianos": "pianos",
    "batchAppointments": "appointments",
    "dropZoneText": "Drag your .ics file here",
    "dropZoneHint": "or click to browse",
    "defaultService": "Default service for imported appointments:",
    "noService": "No service (appointment only)",
    "selectAppointments": "Select appointments to import",
    "totalFound": "Total found",
    "future": "Future",
    "past": "Past",
    "filterFuture": "Future only",
    "filterMonth": "Past month + future",
    "unknownDate": "Unknown date",
    "invalidFileType": "Please upload a .ics or .ical file"
  },
  "importContactsPage": {
    "backToSettings": "Back to settings",
    "contactsImportTitle": "Import Contacts",
    "contactsImportDesc": "Import your customers from Apple Contacts, Google, Outlook or other apps",
    "importManagerTitle": "Import Manager",
    "importManagerDesc": "Here you can delete previously imported data per batch.",
    "loadingBatches": "Loading import batches...",
    "noImportedData": "No imported data found.",
    "step1Title": "Step 1: Choose your source",
    "vcardName": "vCard (.vcf)",
    "vcardDesc": "iPhone, Mac, Google",
    "csvName": "CSV / Excel",
    "csvDesc": "Excel, Numbers, other",
    "howToExportContacts": "How do I export my contacts?",
    "iphoneExportStep": "Go to iCloud.com → Contacts → Select all contacts (⌘A) → Click the gear ⚙️ → Export vCard",
    "macExportStep": "Open Contacts → Select contacts → File → Export → Export vCard",
    "googleExportStep": "Go to contacts.google.com → Click Export on the left → Choose \"vCard\" → Export",
    "outlookExportStep": "Open Contacts → Select contacts → File → Export → vCard file",
    "howToCreateCsv": "How do I create a CSV file?",
    "excelStep": "Create columns: Name, Email, Phone, Address, City, Postal Code → File → Save as → CSV",
    "googleSheetsStep": "File → Download → CSV (.csv)",
    "numbersStep": "File → Export to → CSV",
    "step2Title": "Step 2: Upload your file",
    "dropZoneText": "Drag your file here",
    "dropZoneHint": "or click to browse (.vcf or .csv)",
    "step3Title": "Step 3: Review and import",
    "contactsFound": "Contacts found",
    "newToAdd": "New to add",
    "alreadyExisting": "Already existing",
    "skipDuplicates": "Skip duplicates",
    "skipDuplicatesDesc": "Don't import contacts with existing email address",
    "duplicate": "Duplicate",
    "new": "New",
    "andMore": "... and {count} more",
    "importCount": "Import {count} contacts",
    "importCompleted": "Import completed!",
    "importedResult": "{imported} contacts imported",
    "errors": "errors",
    "noContactsToImport": "No contacts to import",
    "invalidFileType": "Please upload a .vcf or .csv file",
    "fileReadError": "Error reading file: ",
    "importOf": "Import of",
    "batchCustomers": "customers",
    "batchPianos": "pianos",
    "batchAppointments": "appointments",
    "deleteBatch": "Delete",
    "batchLoadError": "Error loading import batches.",
    "confirmDeleteBatch": "Are you sure you want to delete this import?\n\nThis deletes {count} items permanently.",
    "deletedResult": "Deleted:\n• {customers} customers\n• {pianos} pianos\n• {appointments} appointments",
    "deleteError": "Error deleting: ",
    "unknownError": "Unknown error",
    "unknownDate": "Unknown date"
  },
  "accounting": {
    "title": "Accounting Integration",
    "subtitle": "Connect PianoPlanner with your accounting software to automatically sync invoices.",
    "connected": "Connected",
    "notConnected": "Not connected",
    "comingSoon": "Coming soon",
    "connect": "Connect",
    "connecting": "Connecting...",
    "disconnect": "Disconnect",
    "disconnected": "Disconnected",
    "testConnection": "Test connection",
    "connectionOk": "Connection OK",
    "connectionFailed": "Connection failed",
    "syncNow": "Sync now",
    "syncing": "Syncing started...",
    "syncingPayments": "Fetching payment status...",
    "noNewPayments": "No new payments found",
    "syncFailed": "Sync failed",
    "fillBothFields": "Please fill in both Client ID and Client Secret",
    "connectFailed": "Connection failed",
    "networkError": "Network error — please try again",
    "confirmDisconnect": "Are you sure you want to disconnect? Existing syncs will be preserved.",
    "disconnectFailed": "Disconnect failed",
    "jorttConnected": "Jortt connected successfully!",
    "lastSyncAt": "Last sync:",
    "administration": "Administration:",
    "neverSynced": "Not yet synced",
    "syncSettings": "Sync settings",
    "syncInvoices": "Sync invoices",
    "syncContacts": "Sync contacts",
    "autoSync": "Auto-sync daily",
    "syncLog": "Sync log",
    "syncLogDesc": "Overview of recent syncs",
    "logDate": "Date",
    "logInvoice": "Invoice",
    "logProvider": "Provider",
    "logStatus": "Status",
    "noSyncHistory": "No syncs performed yet",
    "loadFailed": "Loading failed",
    "invoicesSynced": "invoices synced",
    "fetchFailed": "Fetching failed",
    "colNumber": "Number",
    "colCustomer": "Customer",
    "colDate": "Date",
    "colAmount": "Amount",
    "colStatus": "Status",
    "statusSent": "Sent",
    "statusPaid": "Paid",
    "statusDraft": "Draft",
    "comingSoonText": "This integration will be available soon. Contact us if you'd like to use this.",
    "country": {
      "nl": "Netherlands",
      "be": "Belgium",
      "de": "Germany",
      "intl": "International"
    },
    "requestSection": "Can't find your package?",
    "requestTitle": "Request another accounting package",
    "requestDesc": "Using a different accounting package? Let us know! We'll look into adding support for it.",
    "requestCountry": "Country",
    "requestPackageName": "Accounting package name *",
    "requestPackageUrl": "Website (optional)",
    "requestNotes": "Notes (optional)",
    "requestSubmit": "Submit request",
    "requestSending": "Sending...",
    "requestSent": "Thank you! Your request has been submitted. We'll review it and get back to you.",
    "requestSentShort": "Request submitted!",
    "requestFillName": "Please enter the accounting package name",
    "requestFailed": "Request failed",
    "jortt": {
      "desc": "Online accounting, invoicing and VAT filing for freelancers and SMBs",
      "apiInfo": "Connect your Jortt account via API. You need a Client ID and Client Secret from the Jortt Developer Portal.",
      "step1Title": "Go to Jortt Developer Portal",
      "step1Text": "Log in with your Jortt account",
      "step2Title": "Create a new API connection",
      "step2Text": "Click \"New connection\" and name it \"PianoPlanner\"",
      "step3Title": "Copy the credentials",
      "step3Text": "Copy the Client ID and Client Secret and paste them below",
      "clientId": "Client ID",
      "clientSecret": "Client Secret",
      "credentialHint": "Your credentials are stored encrypted.",
      "viewInvoices": "View invoices in Jortt",
      "syncPayments": "Fetch payments",
      "noInvoices": "No invoices found in Jortt",
      "goToSetup": "Set up connection",
      "manage": "Manage"
    },
    "moneybird": {
      "desc": "Popular Dutch accounting software for freelancers and SMBs",
      "apiInfo": "Connect your Moneybird account via a Personal Access Token. You need a token and your administration ID.",
      "step1Title": "Create a Personal Access Token",
      "step1Text": "Create a new token named \"PianoPlanner\"",
      "step2Title": "Find your Administration ID",
      "step2Text": "Go to your administration in Moneybird. The ID is in the URL: moneybird.com/{administration-id}/...",
      "step3Title": "Fill in the details below",
      "step3Text": "Paste your token and administration ID below",
      "token": "Personal Access Token",
      "adminId": "Administration ID",
      "credentialHint": "Your token is stored encrypted.",
      "fillBothFields": "Please fill in both the token and the administration ID",
      "syncContacts": "Sync customers",
      "syncInvoices": "Sync invoices",
      "syncPayments": "Sync payments",
      "goToSetup": "Set up connection",
      "connectedTitle": "Moneybird is connected",
      "manage": "Manage"
    },
    "eboekhouden": {
      "desc": "Simple and affordable online bookkeeping",
      "apiInfo": "Connect your e-Boekhouden account via an API Token. Go to e-Boekhouden → Manage → Connections → API to create your token.",
      "step1Title": "Log in to e-Boekhouden",
      "step1Text": "go to Manage → Connections → API",
      "step2Title": "Create an API Token",
      "step2Text": "Click \"New token\" and copy the generated token",
      "step3Title": "Paste the token below",
      "step3Text": "Your token is stored encrypted",
      "apiToken": "API Token",
      "credentialHint": "Your token is stored encrypted.",
      "goToSetup": "Set up connection",
      "manage": "Manage",
      "syncPayments": "Sync payments",
      "connected": "Successfully connected to e-Boekhouden!",
      "tokenRequired": "Please enter your API Token"
    },
    "exact": {
      "desc": "Comprehensive business software for accounting and ERP"
    },
    "odooConnected": "Odoo connected successfully!",
    "odoo": {
      "desc": "Open-source ERP and accounting — popular in Belgium and internationally",
      "apiInfo": "Connect your Odoo account via the External API. You need your Odoo URL, database name, username and an API key.",
      "planNote": "Note:",
      "planNoteText": "The Odoo External API is only available on Custom/Enterprise plans. Standard and One App Free plans are not supported.",
      "step1Title": "Note your Odoo URL and database",
      "step1Text": "For example https://mycompany.odoo.com — the database name is usually your company name",
      "step2Title": "Create an API key",
      "step2Text": "Go to Preferences → Account Security → New API Key. Store the key safely!",
      "step3Title": "Fill in the details below",
      "step3Text": "Your URL, database name, email address and API key",
      "url": "Odoo URL",
      "dbName": "Database name",
      "username": "Username (email)",
      "apiKey": "API Key",
      "credentialHint": "Your credentials are stored encrypted. The API key is equivalent to a password.",
      "fillAllFields": "Please fill in all fields: URL, database, username and API key",
      "goToSetup": "Set up connection",
      "manage": "Manage"
    },
    "datev": {
      "desc": "The standard for German tax advisors and businesses — market leader in Germany"
    },
    "lexoffice": {
      "desc": "Most popular cloud accounting in Germany — by Haufe/Lexware"
    },
    "sevdesk": {
      "desc": "Smart online accounting with excellent API — fast-growing in Germany"
    },
    "yuki": {
      "desc": "Automated accounting for accountants — popular in Belgium and the Netherlands"
    },
    "billit": {
      "desc": "Belgian invoicing platform with e-invoicing and accounting"
    },
    "quickbooks": {
      "desc": "Globally popular accounting software by Intuit — market leader in the US and UK",
      "apiInfo": "Connect your QuickBooks Online account via the API. You need an Access Token and your Company ID (Realm ID) from the Intuit Developer Portal.",
      "step1Title": "Go to the Intuit Developer Portal",
      "step1Text": "Sign in with your Intuit account",
      "step2Title": "Create an app and generate tokens",
      "step2Text": "Create an OAuth 2.0 app and use the API Explorer to generate an Access Token",
      "step3Title": "Find your Company ID (Realm ID)",
      "step3Text": "Your Company ID is in the URL of your QuickBooks account: app.qbo.intuit.com/app/homepage?companyId={ID}",
      "realmId": "Company ID (Realm ID)",
      "token": "Access Token",
      "credentialHint": "Your token is stored encrypted.",
      "fillBothFields": "Please fill in both the Company ID and Access Token"
    },
    "quickbooksConnected": "QuickBooks successfully connected!",
    "zoho": {
      "desc": "Complete cloud accounting by Zoho — popular in India, US, UK and worldwide",
      "apiInfo": "Connect your Zoho Books account via OAuth. You need an OAuth Token and your Organization ID from the Zoho API Console.",
      "step1Title": "Go to the Zoho API Console",
      "step1Text": "Create a Self Client for OAuth tokens",
      "step2Title": "Generate an OAuth Token",
      "step2Text": "Use scope ZohoBooks.fullaccess.all and generate a token via the Self Client",
      "step3Title": "Find your Organization ID",
      "step3Text": "Go to Zoho Books → Settings → Organization → the ID is at the top",
      "regionLabel": "Zoho Region",
      "orgId": "Organization ID",
      "token": "OAuth Token",
      "credentialHint": "Your token is stored encrypted.",
      "fillBothFields": "Please fill in both the Organization ID and OAuth Token"
    },
    "zohoConnected": "Zoho Books successfully connected!",
    "fiken": {
      "desc": "Super simple accounting software for Norwegian businesses — invoices, bookkeeping and VAT",
      "apiInfo": "Connect your Fiken account with a Personal API Token and your Company Slug. The API costs 99 NOK/month in Fiken.",
      "step1Title": "Log in to Fiken",
      "step1Text": "Go to Edit account → API → Personal API keys",
      "step2Title": "Create a Personal API Token",
      "step2Text": "Click 'Create new key' and copy the token",
      "step3Title": "Find your Company Slug",
      "step3Text": "Your Company Slug is in the URL: fiken.no/foretak/your-company-slug",
      "companySlug": "Company Slug",
      "token": "Personal API Token",
      "credentialHint": "Your token is stored encrypted.",
      "fillBothFields": "Please fill in both the Company Slug and API Token"
    },
    "fikenConnected": "Fiken successfully connected!",
    "visma": {
      "desc": "Scandinavian accounting platform — Visma eAccounting, e-conomic, Netvisor and more"
    },
    "vipps": {
      "desc": "Mobile payments in Scandinavia — invoice and receive payments via Vipps directly on the phone"
    },
    "region": {
      "europa": "Europe",
      "international": "International",
      "payments": "Payments"
    },
    "moneybirdConnected": "Moneybird connected successfully!",
    "statusConfirmed": "Confirmed",
    "syncAsDraft": "Sync as draft (concept)",
    "syncAsDraftHint": "Invoices are synced as draft so you can review and send them from your accounting software."
  },
  "dpa": {
    "title": "Data Processing Agreement",
    "subtitle": "Data Processing Agreement in accordance with the GDPR",
    "intro": "This Data Processing Agreement is an integral part of the General Terms and Conditions of PianoPlanner and governs the processing of personal data by Edward Meijer (Edan Creative), hereinafter referred to as ‘Processor’, on behalf of the user of the software, hereinafter referred to as ‘Controller’.",
    "h1": "1. Subject of Processing",
    "p1a": "1.1. The Processor commits, under the conditions of this agreement, to process personal data on behalf of the Controller.",
    "p1b": "1.2. The processing exclusively concerns the data of the Controller’s customers (such as name, address, instrument details and appointment history) entered into the PianoPlanner software for planning and administration purposes.",
    "h2": "2. Obligations of the Processor",
    "p2a": "2.1. The Processor shall process personal data solely based on written instructions from the Controller, including those instructions arising from the normal use of the software.",
    "p2b": "2.2. The Processor shall not use the data for its own purposes or share it with third parties, unless required by law.",
    "p2c": "2.3. The Processor guarantees that persons authorized to process personal data have committed to confidentiality.",
    "h3": "3. Security and Synchronization",
    "p3a": "3.1. The Processor shall take appropriate technical and organizational measures to protect personal data against loss or any form of unlawful processing.",
    "p3b": "3.2. These measures include, among others, SSL encryption, secure cloud storage and monitoring of system integrity.",
    "p3c": "3.3. The Controller acknowledges that when two-way synchronization is activated (such as with Google or iCloud), data is transferred outside the direct control of the Processor. The Processor is not responsible for processing by these external parties.",
    "h4": "4. Sub-processors",
    "p4a": "4.1. The Controller hereby grants permission to the Processor to use sub-processors (such as hosting providers and payment processors) for the processing.",
    "p4b": "4.2. The Processor ensures that these sub-processors are bound by at least equivalent obligations as set out in this agreement.",
    "h5": "5. Rights of Data Subjects",
    "p5a": "5.1. If an end customer of the Controller submits a request for access, correction or deletion of their personal data, the Processor shall forward this request to the Controller.",
    "p5b": "5.2. The Processor shall, insofar as reasonably possible, assist the Controller in fulfilling obligations regarding the rights of data subjects.",
    "h6": "6. Duration and Termination",
    "p6a": "6.1. This agreement shall remain in force as long as the PianoPlanner subscription is active.",
    "p6b": "6.2. Upon termination of the service, the Processor shall delete all personal data within 30 days, unless a legal obligation to retain the data exists.",
    "lastUpdated": "Last updated: February 23, 2026",
    "tldr": "We process your customer data solely on your behalf. Your data is encrypted and stored in Europe and never shared with third parties.",
    "toc1": "Subject",
    "toc2": "Obligations",
    "toc3": "Security",
    "toc4": "Sub-processors",
    "toc5": "Rights",
    "toc6": "Duration"
  },
  "smartFill": {
    "badgeNew": "New",
    "buttonLabel": "Fill Route",
    "title": "Fill Route",
    "description": "Enter a city or postal code to find nearby customers who are due for a tuning.",
    "locationLabel": "City or postal code",
    "radiusLabel": "Radius (km)",
    "searchBtn": "Search",
    "searching": "Searching for nearby customers...",
    "errorEmpty": "Enter a city or postal code",
    "noResults": "No customers found in this area with a pending tuning.",
    "customersFound": "customers found near",
    "selectAll": "Select all",
    "changeLocation": "Change location",
    "selected": "selected",
    "sendInvitations": "Send invitations",
    "sending": "Sending...",
    "successTitle": "Invitations sent!",
    "successMessage": "{count} invitations sent successfully.",
    "close": "Close",
    "urgencyOverdue": "Overdue",
    "urgencyDue": "Due",
    "urgencySoon": "Soon",
    "urgencyOk": "On schedule",
    "urgencyUnknown": "Unknown",
    "noCoordinates": "No coordinates",
    "neverTuned": "Never tuned",
    "monthsOverdue": "months overdue",
    "monthsLeft": "months left",
    "invitationsSent": "invitations sent!",
    "neverVisited": "Never visited",
    "monthsAgo": "months ago",
    "lastVisited": "Last visited"
  },
  "reschedule": {
    "pageTitle": "Reschedule appointment",
    "loading": "Loading appointment...",
    "title": "Reschedule appointment",
    "currentAppointment": "Current appointment",
    "currentLabel": "Current appointment",
    "suggestionsTitle": "Available times",
    "loadingSuggestions": "Finding optimal times...",
    "noSuggestionsTitle": "No times available",
    "noSuggestionsText": "Unfortunately, no available times were found in the coming period. Please contact us to arrange another time.",
    "recommended": "Recommended",
    "bestChoice": "Best choice",
    "routeOptimized": "Route-optimized",
    "nearby": "Nearby",
    "confirmButton": "Reschedule appointment",
    "keepCurrent": "Keep current appointment",
    "confirmDialogTitle": "Reschedule appointment?",
    "confirmDialogText": "Your appointment will be moved to:",
    "confirmCancel": "Cancel",
    "confirmSubmit": "Confirm",
    "processing": "Rescheduling...",
    "keptTitle": "Appointment kept",
    "keptText": "Your current appointment remains unchanged.",
    "successTitle": "Appointment rescheduled!",
    "successText": "Your appointment has been successfully rescheduled. You will receive a confirmation by email.",
    "errorTitle": "Oops!",
    "errorGeneric": "Something went wrong.",
    "expiredTitle": "Link expired",
    "expiredText": "This rescheduling link is no longer valid. The appointment may have already passed or been cancelled.",
    "invalidLink": "Invalid link",
    "chooseNewDate": "Choose a new date",
    "chooseNewTime": "Choose a new time",
    "newAppointment": "New time slot",
    "noSlots": "No available times on this day. Please choose a different date.",
    "loadingTimes": "Loading times...",
    "until": "until"
  },
  "invoiceApi": {
    "invoiceNotFound": "Invoice not found",
    "invoiceLoadError": "Could not load invoice",
    "invoicesLoadError": "Could not load invoices",
    "invoiceCreateError": "Could not create invoice",
    "invoiceUpdateError": "Could not update invoice",
    "invoiceDeleteError": "Could not delete invoice",
    "invoiceDuplicateError": "Could not duplicate invoice",
    "invoiceSent": "Invoice sent by email",
    "invoiceSendError": "Error sending invoice",
    "invoice": "Invoice",
    "creditNote": "Credit Note",
    "creditNoteFor": "Credit note for",
    "creditNoteCreateError": "Could not create credit note",
    "alreadyCredited": "This invoice has already been credited",
    "deleteOnlyDraft": "Only draft and cancelled invoices can be deleted. Create a credit note first.",
    "invalidStatus": "Invalid status",
    "statusChangeError": "Could not change status",
    "notesUpdated": "Notes and invoice number updated",
    "settingsLoadError": "Could not load settings",
    "settingsSaveError": "Could not save settings",
    "mollieNoKey": "No Mollie API key set. Enter a key starting with live_",
    "mollieKeyFormat": "Key must start with live_ (production) or test_ (test)",
    "mollieKeyInvalid": "Invalid Mollie API key. The key must start with live_ (production) or test_ (test).",
    "mollieKeyVerifyFailed": "Mollie API key is invalid",
    "stripeNoKey": "No Stripe API key set. Enter a key starting with sk_live_ or sk_test_",
    "stripeKeyFormat": "Key must start with sk_live_ (production) or sk_test_ (test)",
    "stripeKeyInvalid": "Invalid Stripe API key. The key must start with sk_live_ or sk_test_.",
    "stripeKeyVerifyFailed": "Stripe API key is invalid",
    "keyInvalid": "Key is invalid",
    "internalTestError": "Internal error during test",
    "noFileUploaded": "No file uploaded",
    "letterheadUploadError": "Could not upload letterhead",
    "letterheadDeleteError": "Could not delete letterhead",
    "servicesLoadError": "Could not load services",
    "serviceNotFound": "Service not found",
    "serviceCreateError": "Could not create service",
    "serviceUpdateError": "Could not update service",
    "serviceDeleteError": "Could not delete service",
    "nameRequired": "Name is required",
    "openTasksError": "Could not load open tasks",
    "pdfGenerateError": "Could not generate PDF",
    "ublGenerateError": "Could not generate UBL XML",
    "numberAssignError": "Could not assign invoice number",
    "customerNotFound": "Customer not found",
    "customerNoEmail": "Customer has no email address",
    "adminNoEmail": "Billing admin has no email address",
    "emailSendFailed": "Email could not be sent"
  },
  "sidebar": {
    "planning": "Planning",
    "agenda": "Agenda",
    "customers": "Customers",
    "pianos": "Pianos",
    "reminders": "Reminders",
    "work": "Work",
    "projects": "Projects",
    "travel": "Mileage",
    "invoices": "Invoices",
    "management": "Management",
    "settings": "Settings",
    "emailTemplates": "Email Templates",
    "accounting": "Accounting",
    "import": "Import",
    "billing": "Subscription",
    "teams": "Teams",
    "inventory": "Inventory",
    "help": "Help",
    "guide": "Guide",
    "support": "Support",
    "logout": "Log out",
    "logoutConfirm": "Are you sure you want to log out?",
    "menuToggle": "Menu",
    "emailQuota": "Email credits",
    "googleExpired": "Your Google Calendar connection has expired.",
    "reconnect": "Reconnect",
    "aiSearch": "AI Search"
  },
  "contact": {
    "about": "About",
    "businessDetails": "Business Details",
    "companyName": "Company",
    "companyTitle": "About Us",
    "email": "Email",
    "emailField": "Email",
    "error": "Something went wrong. Please try again later.",
    "formDesc": "Fill out the form below and we'll get back to you within 24 hours.",
    "formTitle": "Send us a message",
    "heroDesc": "Have questions about PianoPlanner? We'd love to hear from you. Send us a message and we'll respond as soon as possible.",
    "heroTitle": "Get in touch",
    "kvk": "Chamber of Commerce (KvK)",
    "location": "Location",
    "login": "Login",
    "message": "Message",
    "name": "Name",
    "selectSubject": "Select a subject...",
    "send": "Send Message",
    "sending": "Sending...",
    "subject": "Subject",
    "subjectBilling": "Billing & Subscription",
    "subjectFeature": "Feature request",
    "subjectFeedback": "Feedback",
    "subjectGeneral": "General question",
    "subjectOther": "Other",
    "subjectSupport": "Technical support",
    "success": "Your message has been sent successfully!",
    "vat": "VAT Number"
  },
  "teamDashboard": {
    "pageTitle": "Team Dashboard - PianoPlanner",
    "teamLoading": "Loading team...",
    "today": "Today",
    "smartAppointment": "Smart Appointment",
    "dayView": "Day",
    "weekView": "Week",
    "teamView": "Team",
    "loading": "Loading...",
    "bookingLink": "Booking Link",
    "bookingLinkTitle": "Copy public booking link",
    "invitations": "Invitations",
    "invitationsTitle": "Send tuning invitations via Teams",
    "teamMembers": "Team Members",
    "workload": "Workload this week",
    "unassigned": "Unassigned",
    "everyone": "Everyone",
    "none": "None",
    "previous": "Previous",
    "next": "Next",
    "icalFeeds": "iCal Feeds",
    "icalHowItWorks": "How does it work?",
    "icalCopyLink": "Copy the iCal link and add as subscription in:",
    "icalApple": "Apple Calendar: File → New Calendar Subscription",
    "icalGoogle": "Google Calendar: Settings → Other calendars → From URL",
    "icalOutlook": "Outlook: Add calendar → Subscribe from web",
    "selectPiano": "Select or add a piano",
    "selectPianoDesc": "Choose an existing piano or register a new one",
    "customerPianos": "Customer's pianos",
    "selectCustomerFirst": "Select a customer first",
    "or": "or",
    "addNewPiano": "Add new piano",
    "brand": "Brand",
    "brandPlaceholder": "e.g. Steinway, Yamaha",
    "model": "Model",
    "modelPlaceholder": "e.g. Model D, U1",
    "type": "Type",
    "upright": "Upright",
    "grand": "Grand",
    "buildYear": "Build Year",
    "buildYearPlaceholder": "e.g. 1985",
    "savePiano": "Save piano",
    "aiSuggestions": "AI Suggestions",
    "aiSuggestionsDesc": "Smart recommendations based on location and calendar",
    "customer": "Customer",
    "piano": "Piano",
    "selectService": "Choose service",
    "selectServicePlaceholder": "-- Select service --",
    "smartestMoments": "Smartest moments",
    "smartMomentsDesc": "Automatically calculated based on your calendar and travel time",
    "smartMomentsLoading": "Looking for the best options...",
    "smartMomentsEmpty": "Select a service to see the best moments",
    "loadMoreOptions": "Load more options",
    "chosenMoment": "Chosen moment",
    "assignMember": "Assign team member",
    "assignMemberDesc": "Who will handle this appointment?",
    "assignTo": "Assign to",
    "moment": "Moment",
    "chooseMember": "Choose a team member",
    "chooseMemberDesc": "Sorted by smart score (availability, location, workload)",
    "chooseMemberLoading": "Calculating best team member...",
    "sendConfirmation": "Send confirmation email",
    "createAndAssign": "Create & assign appointment",
    "prevStep": "Previous",
    "nextStep": "Next",
    "assign": "Assign",
    "removeAssignment": "Remove assignment",
    "cancel": "Cancel",
    "sendInvitations": "Send tuning invitations",
    "searchCustomer": "Search customer by name or email...",
    "selected": "selected",
    "selectAll": "Select all",
    "deselectAll": "Deselect all",
    "customersLoading": "Loading customers...",
    "customersSelected": "customer(s) selected",
    "sendInvitationsBtn": "Send invitations",
    "errorLoadingTeams": "Error loading teams",
    "bookingLinkCopied": "Booking link copied!",
    "errorLoadingCalendar": "Error loading team calendar",
    "selectMember": "Select a team member",
    "assignmentSaved": "Assignment saved",
    "errorAssigning": "Error assigning",
    "assignmentRemoved": "Assignment removed",
    "errorRemovingAssignment": "Error removing assignment",
    "selectTeamFirst": "Select a team first",
    "selectPianoFirst": "Select a piano first",
    "selectTimeslotFirst": "Select a timeslot first",
    "noPastDates": "You cannot create appointments in the past",
    "selectProjectFirst": "Select a project for workshop work",
    "enterName": "Enter a name",
    "errorSavingCustomer": "Error saving customer",
    "enterBrand": "Enter the brand",
    "errorSavingPiano": "Error saving piano",
    "selectAllFieldsAndMember": "Select all fields and a team member",
    "confirmCreateAnyway": "Do you want to create this appointment anyway?",
    "appointmentCreated": "Appointment created and assigned to {name}",
    "errorCreatingAppointment": "Error creating appointment",
    "invitationsSent": "{count} team invitation(s) sent",
    "noTeams": "No teams — create one first",
    "noTeamsTitle": "No teams",
    "noTeamsDesc": "Go to Team Management to create a team.",
    "copied": "Copied!",
    "copy": "Copy",
    "clickToCopy": "Click to copy",
    "noTeamMembers": "No team members",
    "members": "members",
    "copyThisLink": "Copy this link:",
    "stepCustomer": "Customer",
    "stepPiano": "Piano",
    "stepAppointment": "Appointment",
    "stepMember": "Member",
    "selectCustomer": "Select or add customer",
    "selectCustomerDesc": "Search an existing customer or create a new one",
    "searchExistingCustomer": "Search existing customer",
    "searchCustomerInputPlaceholder": "Type name, email or phone number...",
    "searchCustomerPlaceholder": "Search customer by name or email...",
    "createNewCustomer": "Create new customer",
    "nameLabel": "Name",
    "emailLabel": "Email",
    "phoneLabel": "Phone",
    "addressLabel": "Address",
    "postalCodeLabel": "Postal code",
    "cityLabel": "City",
    "fullNamePlaceholder": "Full name",
    "emailPlaceholder": "email@example.com",
    "phonePlaceholder": "+1 234 567 8900",
    "addressPlaceholder": "Street and house number",
    "postalCodePlaceholder": "12345",
    "cityPlaceholder": "City",
    "saveCustomer": "Save customer",
    "noAddressKnown": "No address known",
    "noCustomersFound": "No customers found",
    "loadingPianos": "Loading pianos...",
    "noPianosYet": "This customer has no pianos yet. Add one!",
    "monthsAgoTuned": "months ago tuned",
    "noTuningKnown": "No tuning history known",
    "noTuningKnownPiano": "No tuning history known for this piano.",
    "pianoOverdue": "This piano has not been tuned for",
    "months": "months",
    "errorLoadingPianos": "Error loading pianos",
    "noAvailableMoments": "No available moments found.",
    "errorSearchingMoments": "Error searching for available moments.",
    "saved": "saved",
    "bestChoice": "Best choice",
    "preferOther": "Prefer another moment?",
    "alternativesAvailable": "alternatives available",
    "preferOtherChoose": "Prefer another moment? Choose yourself",
    "backToBest": "Back to best choice",
    "recommended": "Recommended",
    "available": "Available",
    "noActiveMembersAvailable": "No active team members available",
    "noActiveMembers": "No active team members",
    "activateMembersVia": "Activate team members via",
    "teamManagement": "Team Management",
    "noTeamsCreate": "to create a team.",
    "errorLoadingMembers": "Error loading team members",
    "busy": "Working...",
    "appointment": "Appointment",
    "createAnyway": "Do you want to create this appointment anyway?",
    "sendConfirmationTo": "Send confirmation email to",
    "confirmationSentTo": "Confirmation email sent to",
    "appointmentCreatedAssigned": "Appointment created and assigned to",
    "loadingCustomers": "Loading customers...",
    "errorLoadingCustomers": "Error loading customers",
    "noCustomersWithEmail": "No customers with email found",
    "unnamed": "Unnamed",
    "sending": "Sending...",
    "sendingFailed": "Sending failed",
    "teamInvitationsSent": "team invitation(s) sent",
    "viaTeamBookingLink": "Via team booking link",
    "skipped": "skipped",
    "sent": "sent",
    "done": "Done",
    "error": "Error",
    "timelineView": "Timeline",
    "titleLabel": "Title",
    "titlePlaceholder": "Title",
    "customerLabel": "Customer",
    "pianoLabel": "Piano(s)",
    "serviceLabel": "Service",
    "noServiceOption": "— No service —",
    "startLabel": "Start",
    "endLabel": "End",
    "locationLabel": "Location",
    "addressPlaceholderShort": "Address",
    "tunerLabel": "Tuner",
    "statusLabel": "Status",
    "statusScheduled": "Scheduled",
    "statusConfirmed": "Confirmed",
    "statusCompleted": "Completed",
    "statusCancelled": "Cancelled",
    "notesLabel": "Notes",
    "notesPlaceholder": "Notes...",
    "deleteButton": "Delete",
    "cancelButton": "Cancel",
    "saveButton": "Save",
    "teamAppointmentTitle": "Team Appointment",
    "orChooseFromInventory": "or choose from inventory",
    "inventoryTitle": "Inventory pianos",
    "inventorySearchPlaceholder": "Search by brand, model or serial number...",
    "smartScheduling": "Smart scheduling",
    "manualScheduling": "Manual scheduling",
    "selectServiceV4": "-- Select a service --",
    "searchRange": "Search range",
    "autoEndDateHelp": "Leave end date empty for automatic 30 days",
    "findBestMatch": "Find best match",
    "v4LoadingMessage": "Combining schedules, travel times & workload...",
    "myAgenda": "My Agenda",
    "summaryCustomerLabel": "Customer",
    "summaryPianoLabel": "Piano",
    "errorLoadingAppointment": "Error loading appointment",
    "editAppointmentTitle": "Edit appointment",
    "appointmentSaved": "Appointment saved",
    "errorSaving": "Error saving",
    "saveFailed": "Save failed",
    "confirmDelete": "Are you sure you want to delete this appointment?",
    "deleteFailed": "Delete failed",
    "appointmentDeleted": "Appointment deleted",
    "errorDeleting": "Error deleting",
    "movedTo": "Moved to",
    "errorMoving": "Error moving",
    "selectCustomerOrInventory": "Select a customer or an inventory piano",
    "selectServiceFirst": "Select a service first",
    "selectStartDate": "Select a start date",
    "noCustomerSelected": "No customer selected",
    "noMatchesFound": "No available matches found. Try a wider search range.",
    "errorSearching": "Something went wrong while searching. Try again.",
    "inventoryNoCustomer": "Inventory — no customer",
    "inventoryLabel": "Inventory",
    "noPianosFound": "No pianos found",
    "selectedColon": "Selected:",
    "noStockPianos": "No pianos in inventory",
    "errorLoadingStock": "Could not load inventory",
    "lastTuningLabel": "Last tuning:",
    "monthsAgo": "months ago",
    "pianosInInventory": "pianos in inventory",
    "ofPianos": "of",
    "fromHome": "from home",
    "travelTimeLbl": "travel time",
    "toHome": "to home",
    "noAppointmentsToday": "No appointments today",
    "absent": "Absent",
    "membersScanned": "members scanned",
    "daysSearched": "days searched",
    "grandPiano": "Grand",
    "uprightPiano": "Upright",
    "digitalPiano": "Digital",
    "showroomBadge": "Showroom",
    "workshopBadge": "Workshop",
    "unknownLocation": "unknown",
    "appointmentsLabel": "appointments",
    "routeOptimized": "Route-optimized",
    "preferredLabel": "Preferred",
    "appointmentMoved": "Appointment moved",
    "newAppointment": "New appointment",
    "createAppointment": "Create appointment",
    "smartSuggestion": "Suggestion",
    "createFailed": "Creation failed",
    "errorCreating": "Error creating appointment",
    "noMember": "None",
    "smartPlanTitle": "Smart scheduling",
    "smartSelectService": "Select a customer and service to see smart suggestions",
    "smartSelectServiceWorkshop": "Select a service to see smart suggestions",
    "smartSearching": "Finding best moments...",
    "noSmartSuggestions": "No smart suggestions available",
    "smartError": "Could not load suggestions",
    "backToSmart": "Back to smart suggestions ▴",
    "planManually": "Prefer to schedule manually? ▾",
    "locationTypeLabel": "Appointment type",
    "atCustomer": "At customer",
    "workshop": "Workshop",
    "projectLabel": "Project",
    "noProject": "— No project (standalone hours) —",
    "remaining": "Remaining",
    "hours": "hours",
    "hoursLeft": "hours left",
    "deadline": "Deadline",
    "daysOverdue": "days overdue!",
    "deadlineToday": "today!",
    "daysRemaining": "{{n}} days left",
    "selectSuggestionOrManual": "Select a suggestion or plan manually",
    "wizardCustomer": "Customer",
    "wizardServiceTime": "Service & Time",
    "wizardDetails": "Details",
    "searchHint": "Search by name, or",
    "addNewCustomer": "create a new customer",
    "newCustomer": "New customer",
    "nameRequired": "Name *",
    "phone": "Phone",
    "streetHouseNr": "Street + house no.",
    "postalCode": "Postal code",
    "city": "City",
    "addCustomer": "Add customer",
    "titleHint": "Leave empty for automatic title based on customer + service",
    "customerCreated": "Customer added",
    "errorCreatingCustomer": "Error creating customer"
  },
  "notifications": {
    "updated": "updated",
    "pinPaid": "Pin paid",
    "cashPaid": "Cash paid",
    "invoiceLater": "Invoice later",
    "appointmentCompleted": "Appointment completed"
  },
  "legal": {
    "tldrLabel": "In short",
    "tocTitle": "Table of Contents"
  },
  "about": {
    "heroTitle": "Software for piano tuners,<br>built by a piano tuner.",
    "heroSubtitle": "With 46 years of hands-on experience, I know what you need. I built the app I always wanted.",
    "storyOriginTitle": "From card box to code",
    "storyOriginP1": "My love for technology started early. As a teenager, I programmed BASIC late at night on a ZX Spectrum. Later, armed with my first Tulip PC, I wrote my first 'real' software: a digital customer database for my father.",
    "storyOriginP2": "In my youthful enthusiasm, I then threw away his physical card box — to his great dismay! Eventually I printed everything neatly for him on the dot-matrix printer, but the tone was set: I wanted to organize things faster, more efficiently, and better.",
    "storyFrustrationTitle": "What I tried",
    "storyFrustrationP1": "Every morning the same ritual: check Google Calendar, look up customer addresses, open Google Maps, figure out if another appointment fits between two others... And in the evening: manually send confirmation emails, update my Excel sheet with serial numbers, note when each piano needs tuning again.",
    "storyFrustrationP2": "After years of thinking \"there must be a better way\" I decided to build it myself.",
    "triedExcel": "No reminders",
    "triedGCal": "No customer info",
    "triedGazelle": "Expensive, US servers",
    "triedCalendly": "Not for our profession",
    "triedServiceP": "For HVAC technicians",
    "triedPaperName": "Paper diary",
    "triedPaper": "No backup, sync",
    "storyTeamTitle": "The collaboration",
    "storyTeamP1": "In my own practice, I hit walls for years. I worked with American software that didn't fully understand our market, or I juggled three different apps for calendar, invoicing, and routes. I thought: \"This has to be smarter.\"",
    "storyTeamP2": "I have great interest in everything around business figures — we all know how complex the margin scheme can be. I wanted software that not only plans but also thinks along with my business operations.",
    "storyTeamP3": "When I decided to build the ultimate planner myself, I wasn't alone. I got to work with my skills and the advice of my children and stepchildren. One graduated as an IT specialist from HAN University. The other as a Game Developer & Sound Designer from HKU. With my hands-on experience and their knowledge of the latest technology and AI, we developed PianoPlanner together.",
    "storySmartTitle": "Smart appointments",
    "storySmartP1": "The core of PianoPlanner is simple: I want to see at a glance whether I'm making money or wasting time. I also don't want to spend too much time driving. That's why we developed Smart Appointments — each appointment automatically gets a color based on travel time:",
    "colorGreen": "Fits perfectly in your route",
    "colorOrange": "Watch your travel time",
    "colorRed": "Inefficient, costs you time",
    "storyNLTitle": "Proudly Dutch",
    "storyNLP1": "Unlike the big American players, I believe in local strength. PianoPlanner is an independent initiative. Your data is securely encrypted and stored on European servers, fully compliant with GDPR privacy regulations.",
    "storyNLP2": "I'm proud of what we've built. A system for piano tuners, by a piano tuner.",
    "compareTitle": "PianoPlanner vs Gazelle",
    "compareSubtitle": "Two platforms for piano technicians — which fits your workflow?",
    "ppOrigin": "🇳🇱 Netherlands · Made by a piano tuner",
    "pp1": "Automatic route clustering with Smart Suggestions",
    "pp2": "Google + Microsoft + Apple calendar sync (two-way)",
    "pp3": "Online booking links for customers",
    "pp4": "European servers — GDPR compliant",
    "pp5": "4 languages: NL, EN, DE, FR",
    "gzOrigin": "🇺🇸 USA · Founded in 2015",
    "gz1": "Native iOS & Android apps",
    "gz2": "Invoicing with QuickBooks integration",
    "gz3": "Condition Reports (PDF piano reports)",
    "gz4": "Large established customer base in the US",
    "gz5": "Multiple languages available",
    "thFeature": "Feature",
    "catPlanning": "📅 Planning & Routing",
    "fRouteOpt": "Route optimization",
    "fRouteOptPP": "✅ Smart Suggestions — AI automatically picks the best time slot based on travel time + existing appointments",
    "fRouteOptGZ": "Manual scheduling with map view + routing algorithm",
    "fRouteFill": "Route Filling",
    "fRouteFillPP": "✅ Find customers near existing appointments who are due for tuning. Send invitations.",
    "fCustAnalysis": "Customer Database Analysis",
    "fCustAnalysisPP": "✅ Scan your customer database, calculate distances, receive optimal travel time recommendation — one click",
    "fTheater": "Theater mode",
    "fTheaterPP": "✅ Separate hours for theaters & concert halls",
    "catCalendar": "📆 Calendar & Sync",
    "fGooglePP": "✅ Two-way sync (real-time)",
    "fGoogleGZ": "One-way sync",
    "catBooking": "🌐 Online Booking",
    "fBookingLink": "Public booking link",
    "fBookingLinkPP": "✅ pianoplanner.com/book/your-name",
    "fSmartSugg": "Smart Suggestions",
    "fSmartSuggPP": "✅ 3 strategies: route, gap-filler, proximity",
    "fConfirm": "Confirmation",
    "fConfirmPP": "✅ Instantly confirmed — customer knows right away",
    "fConfirmGZ": "Approval required",
    "catPianos": "🎹 Pianos & Customers",
    "fPhotos": "Photos per piano",
    "fPhotosPP": "✅ Up to 5 photos per piano — optimized with thumbnails",
    "fPhotosGZ": "✅ Photos with piano + condition reports",
    "fWorkshop": "Workshop project planner",
    "fWorkshopPP": "✅ Projects, tasks, hour estimates, progress tracking",
    "catBilling": "💰 Billing",
    "fInvoicing": "Invoicing",
    "fInvoicingPP": "✅ Included",
    "fInvoicingGZ": "Paid add-on",
    "fAccounting": "Accounting integration",
    "fAccountingPP": "✅ Moneybird, Jortt, e-Boekhouden, Exact Online",
    "fAccountingGZ": "QuickBooks / Xero (US-focused)",
    "fMileage": "Mileage tracking",
    "fMileagePP": "✅ Automatically per appointment based on route",
    "catTechnical": "⚙️ Technical",
    "fPrivacy": "Privacy & data",
    "fPrivacyPP": "✅ EU/NL servers · GDPR compliant",
    "fPrivacyGZ": "US servers",
    "fSmtp": "Custom email domain",
    "fSmtpPP": "✅ Custom SMTP + editable templates",
    "fLanguages": "Languages",
    "fLanguagesPP": "✅ NL, EN, DE, FR, IT, ES",
    "fLanguagesGZ": "EN + multiple languages",
    "catPricing": "💳 Pricing",
    "fFree": "Free version",
    "fFreePP": "✅ Permanent — up to 25 customers",
    "fFreeGZ": "30-day trial",
    "fStartPrice": "Starting price",
    "fStartPricePP": "From €24.50/month (unlimited)",
    "fStartPriceGZ": "€67/mo (250 pianos) · €89 (350) · €115 (500)",
    "fLimits": "Limits",
    "fLimitsPP": "✅ Unlimited customers & pianos",
    "fLimitsGZ": "Pay per 50 pianos + extra costs",
    "catTeams": "👥 Teams",
    "fTeams": "Teams version",
    "fTeamsPP": "✅ Multiple tuners per company · shared calendar · Smart Pick · iCal per tuner · €49,50/month",
    "honestTitle": "🤝 Honestly: where Gazelle is stronger",
    "honest1": "<strong>Condition Reports</strong> — Send customers detailed PDF reports about their piano's condition. PianoPlanner doesn't have this (yet).",
    "honest2": "<strong>Native apps</strong> — Gazelle's iOS/Android apps may feel smoother than a PWA, especially on older devices.",
    "honest3": "<strong>US market presence</strong> — Gazelle has been active longer and has a large network in North America.",
    "diffTitle": "The fundamental difference",
    "diffSubtitle": "Why tuners switch to PianoPlanner",
    "diffSmartTitle": "Automatically smart scheduling",
    "diffSmartDesc": "Smart Suggestions analyzes your schedule, calculates travel times and automatically suggests the most efficient time slots. The system clusters on its own.",
    "diffSyncTitle": "Triple calendar sync",
    "diffSyncDesc": "As the only piano platform, PianoPlanner syncs two-way with Google Calendar, Microsoft 365 and Apple Calendar.",
    "diffBookingTitle": "Customers book themselves",
    "diffBookingDesc": "Each customer gets a personal booking link. They see their pianos, previous appointments and can pick a new time slot directly.",
    "diffPrivacyTitle": "European privacy",
    "diffPrivacyDesc": "All data is stored on Dutch servers. Fully GDPR compliant. No data going to the US. Ideal for European technicians.",
    "priceTitle": "Pricing comparison",
    "priceSubtitle": "What do you pay per month?",
    "priceAmountPP": "€0 – €89,50",
    "pricePerMonth": "per month",
    "pricePP1": "Starter: free (up to 25 customers)",
    "pricePP2": "Start: €24.50/month — unlimited",
    "pricePP3": "Pro: €39.50/month — with calendar sync + invoicing",
    "pricePP4": "No limit on pianos or customers",
    "pricePP5": "1 month free trial",
    "priceAmountGZ": "€67 – €115+",
    "priceSubGZ": "per month (250–500 pianos, base plan only)",
    "priceGZ1": "30-day free trial",
    "priceGZ2": "250 pianos = €67/mo · 350 = €89 · 500 = €115",
    "priceGZ3": "Price per 50 active pianos — scales up fast",
    "priceGZ4": "Reminders, invoicing, SMS cost extra",
    "priceGZ5": "QuickBooks integration (add-on)",
    "migTitle": "Switching? Takes just 5 minutes.",
    "migSubtitle": "Export your customers, pianos and appointments from Gazelle as CSV. Upload to PianoPlanner — done.",
    "migStep1": "1. Export from Gazelle",
    "migStep2": "2. Upload to PianoPlanner",
    "migStep3": "3. Done!",
    "signatureGreeting": "I warmly invite you to experience it yourself.",
    "signatureTitle": "Piano Technician & Creator of PianoPlanner",
    "ctaTitle": "Ready to work smarter?",
    "ctaDesc": "Start free with up to 25 customers. No credit card needed.",
    "ctaBtn": "Start free →"
  },
  "seo": {
    "homeTitle": "PianoPlanner — Smart Scheduling for Piano Technicians",
    "homeDescription": "The smartest business software for piano technicians. AI-powered scheduling, route optimization, invoicing, and a booking page your customers will love.",
    "pricingTitle": "Pricing — PianoPlanner",
    "pricingDescription": "Simple pricing for piano technicians. Start free with up to 25 customers. No credit card needed.",
    "aboutTitle": "About PianoPlanner — Built by a Piano Technician",
    "aboutDescription": "The story behind PianoPlanner. Built by piano technician Edward Meijer to help fellow tuners work smarter.",
    "contactTitle": "Contact — PianoPlanner",
    "contactDescription": "Get in touch with the PianoPlanner team. Questions, feedback, or partnership inquiries — we'd love to hear from you.",
    "guideTitle": "Getting Started — PianoPlanner",
    "guideDescription": "Learn how to get started with PianoPlanner. Set up your account, import customers, and schedule your first appointment.",
    "bookTitle": "Book a Demo — PianoPlanner",
    "bookDescription": "Book a free demo of PianoPlanner. See how smart scheduling can transform your piano tuning business.",
    "teamsInfoTitle": "PianoPlanner Teams — Complete operations under control",
    "teamsInfoDescription": "AI-powered route planning, mobile technician app and airtight security. PianoPlanner Teams automates the logistics of your piano service business.",
    "compareTitle": "PianoPlanner vs Gazelle — Which is right for you?",
    "compareDescription": "Smart route planning, triple calendar sync, European privacy vs native apps and QuickBooks integration. See the full comparison."
  },
  "languagePicker": {
    "chooseLanguage": "Choose your language",
    "searchLanguage": "Search language..."
  },
  "portal": {
    "pageTitle": "My Route — PianoPlanner",
    "title": "My Route",
    "logout": "Log out",
    "loading": "Loading schedule...",
    "noAppointments": "No appointments",
    "noAppointmentsDesc": "You have no tuning appointments today.",
    "completeTitle": "Complete appointment",
    "updateTuning": "Update tuning",
    "updateTuningDesc": "Last tuning date → today",
    "payment": "Payment",
    "customerPreference": "This customer's preference",
    "paidByCard": "Paid by card",
    "paidByCash": "Paid in cash",
    "createInvoice": "Create invoice",
    "invoiceLater": "Invoice later",
    "noPayment": "No payment",
    "notes": "Notes",
    "optionalNote": "Optional note...",
    "cancel": "Cancel",
    "complete": "Complete",
    "navigate": "Navigate",
    "note": "Note",
    "history": "History",
    "done": "Done",
    "save": "Save",
    "loadingText": "Loading...",
    "noCustomerNotes": "No notes for this customer yet.",
    "loadError": "Could not load history.",
    "unknownCustomer": "Unknown customer",
    "notePlaceholder": "Note about this tuning...",
    "appointmentCompleted": "Appointment completed",
    "pianoUpdated": "piano updated",
    "cardPaid": "Card paid",
    "cashPaid": "Cash paid",
    "invoiceRequested": "Invoice requested",
    "connectionError": "Connection error",
    "couldNotComplete": "Could not complete",
    "saved": "Saved",
    "dayMon": "Mon",
    "dayTue": "Tue",
    "dayWed": "Wed",
    "dayThu": "Thu",
    "dayFri": "Fri",
    "daySat": "Sat",
    "daySun": "Sun",
    "statusPending": "Scheduled",
    "statusConfirmed": "Confirmed",
    "statusEnRoute": "En route",
    "statusCompleted": "Completed",
    "expiredTitle": "Session Expired",
    "expiredHeading": "Link has expired",
    "expiredMessage": "This secure access link is no longer valid or your session has ended. Ask your planner to send you a new link.",
    "workshopTasks": "Workshop",
    "estimated": "estimated",
    "actual": "worked",
    "taskCompleted": "Task completed",
    "reportAbsence": "Report absence",
    "startDate": "Start date",
    "endDate": "End date",
    "reason": "Reason (optional)",
    "reasonPlaceholder": "E.g. holiday, sick...",
    "send": "Submit",
    "datesRequired": "Please fill in start and end date",
    "endAfterStart": "End date must be after start date",
    "absenceRegistered": "Absence registered"
  },
  "teamsInfo": {
    "heroTitle": "PianoPlanner Teams: Complete operations under control",
    "heroSubtitle": "Managing a team of piano technicians is a complex logistical puzzle. How do you prevent two tuners from crossing paths on the motorway? How do you give employees access to their route without exposing financial business data? PianoPlanner Teams is purpose-built to fully automate these challenges.",
    "smartTitle": "AI-powered route planning",
    "smartIntro": "Stop manually comparing five different calendars. The built-in algorithms do the calculations in milliseconds.",
    "smartLocationLabel": "Location-first",
    "smartLocationDesc": "Got a customer on the line? Enter the postcode and the system instantly scans every calendar across your entire team.",
    "smartMatchLabel": "The perfect match",
    "smartMatchDesc": "You get a ranked list of the best technicians for the job. The algorithm calculates travel time from their previous appointment and factors in a fair workload distribution.",
    "smartSpeedLabel": "Time saved",
    "smartSpeedDesc": "What takes a human planner ten minutes of puzzling, PianoPlanner does in a single click.",
    "appTitle": "The mobile technician app",
    "appIntro": "Every piano technician gets their own secure portal on the go — optimised for mobile.",
    "appMagicLabel": "Magic Links",
    "appMagicDesc": "No more forgotten passwords. You send your technician a secure login link by email. One click and they are logged in on their own phone.",
    "appFocusLabel": "Focus on the day",
    "appFocusDesc": "The technician sees a clear timeline: where to go, what type of piano, and any customer-specific notes — with a direct navigation button.",
    "appRealtimeLabel": "Real-time completion",
    "appRealtimeDesc": "As soon as the technician marks a job as done, it is instantly updated on your central dashboard.",
    "securityTitle": "Airtight security and privacy",
    "securityIntro": "As an owner, you want to empower your team while shielding financial and strategic data. PianoPlanner operates on the need-to-know principle.",
    "securitySepLabel": "Strict data separation",
    "securitySepDesc": "A technician sees only their own appointments. Colleagues' calendars, revenue, invoices and the general customer database are completely invisible.",
    "securityRevokeLabel": "The kill switch",
    "securityRevokeDesc": "An employee leaving the company? One click sets them to inactive and their access is revoked immediately — even if they are currently logged in. Your data stays yours.",
    "bookingTitle": "Smart booking widget for customers",
    "bookingIntro": "Let your online booking system work for you, not against you.",
    "bookingRouteLabel": "Route-optimised booking",
    "bookingRouteDesc": "Customers enter their address online. The system automatically shows only the time slots that result in the shortest travel time for your team. The customer picks a time, the system picks the technician.",
    "bookingFixedLabel": "The preferred-technician link",
    "bookingFixedDesc": "Does a customer have a relationship with one specific technician? Send them a personal link. The system gives that technician priority, unless they are booked up for weeks — then colleagues are suggested as alternatives.",
    "summary": "With PianoPlanner Teams you minimise travel time, eliminate scheduling errors and give both customers and employees an ultra-professional experience. The system takes over the heavy logistical thinking, so you can focus on growing the business.",
    "ctaTry": "Try for free",
    "ctaPricing": "View pricing"
  },
  "inventory": {
    "pageTitle": "Warehouse & Inventory - PianoPlanner",
    "title": "Warehouse & Inventory",
    "description": "Manage showroom inventory, import pianos via CSV and plan batch tuning appointments for all your pianos at one location.",
    "showroomInventory": "Showroom inventory",
    "csvImport": "CSV import",
    "batchPlanning": "Batch planning",
    "salesTracking": "Piano sales tracking",
    "upgradeButton": "Upgrade to Business",
    "availableFrom": "Available from the Business subscription (€89,50/month)",
    "importCsv": "Import CSV",
    "addPiano": "Add Piano",
    "inStock": "In stock",
    "sold": "Sold",
    "locations": "Locations",
    "selectAll": "Select all",
    "brandAndModel": "Brand & Model",
    "type": "Type",
    "serialNumber": "Serial Number",
    "location": "Location",
    "status": "Status",
    "added": "Added",
    "selectedPianos": "You have selected <strong>{{count}}</strong> pianos",
    "createBatch": "Create Showroom Batch",
    "deselectAll": "Deselect all",
    "planBatch": "Plan Showroom Batch",
    "pianosSelected": "pianos selected",
    "locationLabel": "Location (shop/workshop)",
    "locationPlaceholder": "e.g. Showroom Amsterdam",
    "dateLabel": "Date",
    "startTimeLabel": "Start Time",
    "durationLabel": "Estimated duration per piano (min)",
    "duration20": "20 minutes",
    "duration30": "30 minutes",
    "duration45": "45 minutes",
    "duration60": "60 minutes",
    "notesOptional": "Notes (optional)",
    "notesPlaceholder": "e.g. All grand pianos on showroom floor",
    "cancelButton": "Cancel",
    "scheduleButton": "Schedule",
    "csvImportTitle": "Import CSV",
    "csvImportDesc": "Upload a CSV file with columns: Brand, Model, Serial Number, Internal Location",
    "selectCsvFile": "Select CSV file",
    "closeButton": "Close",
    "importButton": "Import",
    "addPianoTitle": "Add Showroom Piano",
    "addPianoDesc": "Add a piano to your inventory",
    "brandLabel": "Brand",
    "brandPlaceholder": "e.g. Yamaha",
    "modelLabel": "Model",
    "modelPlaceholder": "e.g. C3",
    "serialNumberLabel": "Serial Number",
    "serialPlaceholder": "e.g. YAM-12345",
    "typeLabel": "Type",
    "uprightPiano": "Upright Piano",
    "grandPiano": "Grand Piano",
    "digitalPiano": "Digital Piano",
    "internalLocation": "Internal Location",
    "internalLocationPlaceholder": "e.g. Showroom A, Workshop",
    "addButton": "Add",
    "loading": "Loading...",
    "errorLoadingInventory": "Error loading inventory",
    "noInventoryYet": "No pianos in inventory yet",
    "noInventoryDesc": "Import a CSV file or add pianos manually to get started.",
    "importCsvButton": "Import CSV",
    "grandLabel": "Grand",
    "digitalLabel": "Digital",
    "uprightLabel": "Upright",
    "soldStatus": "Sold",
    "inStockStatus": "In stock",
    "unknownLocation": "Unknown",
    "selectCsvFirst": "Select a CSV file first",
    "importFailed": "Import failed",
    "pianosImported": "pianos imported",
    "pianosSkipped": "skipped",
    "warnings": "warning(s)",
    "brandRequired": "Brand is required",
    "addFailed": "Adding failed",
    "pianoAdded": "Piano added",
    "selectPianosFirst": "Select pianos first",
    "enterLocation": "Enter a location",
    "chooseDate": "Choose a date",
    "chooseStartTime": "Choose a start time",
    "showroomTuningRound": "Showroom tuning round",
    "tuningShowroomBatch": "Tuning (showroom batch)",
    "batchScheduled": "Batch scheduled: {{count}} pianos on {{date}}",
    "smartPlanTitle": "Smart planning",
    "smartFillLocation": "Enter a location to see smart suggestions",
    "manualPlan": "Prefer to plan manually? ▾",
    "backToSmart": "Back to smart suggestions ▴",
    "findingBestMoment": "Finding best time...",
    "smartError": "Could not load suggestions",
    "noSmartSuggestions": "No smart suggestions available",
    "bestChoice": "Best choice",
    "routeOptimized": "Route",
    "selectSlotFirst": "Choose a suggestion or plan manually",
    "tunerLabel": "Tuner"
  },
  "api": {
    "auth": {
      "notLoggedIn": "Not logged in",
      "emailPasswordRequired": "Email and password are required",
      "invalidEmailFormat": "Invalid email format",
      "registrationFailed": "Registration failed",
      "sessionError": "Session error",
      "loginFailed": "Login failed",
      "emailRequired": "Email is required",
      "errorOccurred": "An error occurred",
      "tokenMissing": "Token missing",
      "tokenVerificationFailed": "Could not verify token",
      "tokenPasswordRequired": "Token and password are required",
      "passwordMinLength": "Password must be at least 8 characters",
      "passwordResetFailed": "Could not reset password",
      "usernamePasswordRequired": "Username and password are required",
      "invalidCredentials": "Invalid username or password",
      "noChanges": "No changes provided",
      "newPasswordRequired": "New password is required",
      "passwordsDoNotMatch": "Passwords do not match",
      "currentNewPasswordRequired": "Current and new password are required",
      "newPasswordsDoNotMatch": "New passwords do not match",
      "userNotFound": "User not found",
      "passwordRequired": "Password is required"
    },
    "subscription": {
      "checkFailed": "Could not check subscription",
      "featureCheckFailed": "Could not check feature",
      "limitCheckFailed": "Could not check limit",
      "cancelled": "Subscription cancelled",
      "planChanged": "Plan changed"
    },
    "email": {
      "quotaCheckFailed": "Quota check failed",
      "noAddress": "No email address provided",
      "settingsUpdated": "Email settings updated",
      "notConfigured": "Email not configured",
      "confirmationSent": "Confirmation email sent",
      "reminderSent": "Reminder email sent",
      "customerIdRequired": "customerId is required",
      "invitationSent": "Invitation sent",
      "customerPianoIdRequired": "customerId and pianoId are required",
      "logLoadFailed": "Could not load email log",
      "noneSelected": "No emails selected",
      "invalidIds": "Invalid IDs",
      "deleteFailed": "Could not delete emails"
    },
    "appointments": {
      "notFound": "Appointment not found",
      "loadFailed": "Could not load appointments",
      "noneFound": "No appointments found",
      "duplicateDetectionFailed": "Could not detect duplicates",
      "noDuplicatesFound": "No duplicates found",
      "cleanupFailed": "Cleanup failed",
      "noBrokenFound": "No broken appointments found",
      "pendingLoadFailed": "Could not load pending appointments",
      "paymentLoadFailed": "Could not load outstanding payments",
      "missingAddressesLoadFailed": "Could not load missing addresses",
      "titleRequired": "Title is required",
      "startEndTimeRequired": "Start and end time are required",
      "createFailed": "Could not create appointment",
      "updateFailed": "Could not update appointment",
      "deleteFailed": "Could not delete appointment",
      "completeFailed": "Could not complete appointment",
      "cancelFailed": "Could not cancel appointment",
      "statsLoadFailed": "Could not load statistics",
      "dateRequired": "Date is required",
      "routeOptimizationFailed": "Could not optimize route",
      "noScheduleProvided": "No schedule provided",
      "routeApplyFailed": "Could not apply optimized route",
      "duplicateRemovalFailed": "Could not remove duplicates",
      "workshopStatsLoadFailed": "Could not load workshop stats",
      "paymentMarkedAsPaid": "Payment marked as paid",
      "paymentMarkFailed": "Could not mark payment",
      "markedAsCompleted": "Appointment marked as completed",
      "taskCompleteFailed": "Could not complete task",
      "timeSlotOverlap": "This time slot overlaps with an existing appointment: \"{conflictWith}\". Please choose another time."
    },
    "customers": {
      "noEmail": "Customer has no email address",
      "notFound": "Customer not found",
      "loadFailed": "Could not load customers",
      "namesLoadFailed": "Could not load customer names",
      "searchFailed": "Search failed",
      "duplicatesLoadFailed": "Could not load duplicates",
      "targetSourceIdRequired": "Target and source ID are required",
      "mergeFailed": "Merge failed",
      "targetSourceIdsRequired": "Target ID and source IDs are required",
      "notesCleanFailed": "Could not clean notes",
      "mapDataLoadFailed": "Could not load map data",
      "geocodingFailed": "Geocoding failed",
      "nameRequired": "Name is required",
      "createFailed": "Could not create customer",
      "updateFailed": "Could not update customer",
      "deleted": "Customer deleted",
      "deleteFailed": "Could not delete customer",
      "tokenRegenFailed": "Could not regenerate token",
      "locationRequired": "Enter a place, zip code, or address",
      "locationNotFound": "Location not found. Try a different place name or zip code.",
      "noneWithInterval": "No customers with tuning interval found",
      "selectAtLeastOne": "Select at least one customer",
      "maxInvitationsExceeded": "Maximum 20 invitations at a time",
      "invitationsSendFailed": "Sending invitations failed",
      "noAddress": "Customer has no address",
      "geocodeFailed": "Could not geocode address",
      "notesLoadFailed": "Could not load notes",
      "noteRequired": "Note is required",
      "noteSaveFailed": "Could not save note",
      "noteDeleteFailed": "Could not delete note"
    },
    "pianos": {
      "notFound": "Piano not found",
      "loadFailed": "Could not load pianos",
      "invitationStatusLoadFailed": "Could not load invitation status",
      "servicesLoadFailed": "Could not load services",
      "brandRequired": "Brand is required",
      "createFailed": "Could not create piano",
      "idsArrayRequired": "pianoIds array is required",
      "updatesObjectRequired": "updates object is required",
      "noValidFieldsToUpdate": "No valid fields to update",
      "updateFailed": "Could not update piano",
      "deleteFailed": "Could not delete piano",
      "serviceAddFailed": "Could not add service",
      "serviceRecordNotFound": "Service record not found",
      "serviceDeleteFailed": "Could not delete service",
      "photoDeleted": "Photo deleted"
    },
    "calendar": {
      "tokenCheckFailed": "Could not check tokens",
      "loadFailed": "Could not load calendars",
      "eventsLoadFailed": "Could not load events",
      "requiredFieldsMissing": "Title, start, and end are required",
      "eventCreateFailed": "Could not create event",
      "eventDeleteFailed": "Could not delete event",
      "syncSettingsLoadFailed": "Could not load sync settings",
      "syncSettingsSaveFailed": "Could not save sync settings",
      "disconnectFailed": "Could not disconnect",
      "syncStatusLoadFailed": "Could not load sync status",
      "syncNotEnabled": "Sync is not enabled",
      "syncFailed": "Sync failed",
      "syncDisabledByAdmin": "Calendar sync is temporarily disabled by the administrator",
      "importFailed": "Import failed",
      "sessionExpired": "Google session expired",
      "previewFailed": "Preview failed",
      "forceSyncFailed": "Force sync failed",
      "statusLoadFailed": "Could not load status",
      "notConnected": "Calendar not connected",
      "urlRequired": "Calendar URL is required",
      "invalidUrl": "Invalid calendar URL",
      "eventUrlRequired": "Event URL is required",
      "noneSelected": "No calendar selected",
      "invalidUrlInSettings": "Invalid calendar URL in settings",
      "syncQueueLoadFailed": "Could not load sync queue",
      "syncVerifyFailed": "Could not verify sync",
      "orphanedEventsFindFailed": "Could not find orphaned events",
      "missingSyncsFindFailed": "Could not find missing syncs"
    },
    "settings": {
      "loadFailed": "Could not load settings",
      "saveFailed": "Could not save settings",
      "noVatNumber": "No VAT number provided",
      "vatValidationFailed": "Could not validate VAT number",
      "vatInfoLoadFailed": "Could not load VAT info",
      "servicesLoadFailed": "Could not load services",
      "serviceNotFound": "Service not found",
      "serviceLoadFailed": "Could not load service",
      "nameRequired": "Name is required",
      "serviceCreateFailed": "Could not create service",
      "serviceUpdateFailed": "Could not update service",
      "serviceDeleteFailed": "Could not delete service",
      "serviceActivateFailed": "Could not activate service",
      "bookingSettingsLoadFailed": "Could not load booking settings",
      "bookingSettingsSaveFailed": "Could not save booking settings",
      "travelSettingsLoadFailed": "Could not load travel settings",
      "travelSettingsSaveFailed": "Could not save travel settings",
      "analysisFailed": "Could not analyze customer base",
      "languageNotSupported": "Language not supported",
      "languageSaveFailed": "Could not save language setting",
      "confirmationTextIncorrect": "Confirmation text is incorrect",
      "resetFailed": "Could not reset data",
      "accountDeleted": "Account successfully deleted",
      "accountDeleteFailed": "Could not delete account",
      "exportFailed": "Could not export data",
      "previewLoadFailed": "Could not load preview",
      "testSendFailed": "Could not send test",
      "testReminderFailed": "Could not send test reminder",
      "historyLoadFailed": "Could not load history",
      "upcomingRemindersLoadFailed": "Could not load upcoming reminders"
    },
    "notification": {
      "invalidSubscription": "Invalid subscription",
      "subscriptionSaveFailed": "Failed to save subscription",
      "unsubscribeFailed": "Failed to unsubscribe",
      "settingsUpdateFailed": "Failed to update settings",
      "settingsGetFailed": "Failed to get settings",
      "testSent": "Test notification sent",
      "sendFailed": "Could not send notification",
      "testSendFailed": "Failed to send test notification",
      "testReminderSent": "Test reminder sent to your own email address"
    },
    "mileage": {
      "vehicleLoadFailed": "Could not load vehicle",
      "vehicleSaveFailed": "Could not save vehicle",
      "loadFailed": "Could not load mileage",
      "dateAndMileageRequired": "Date and mileage are required",
      "invalidMileage": "Invalid mileage",
      "saveFailed": "Could not save",
      "notFound": "Not found",
      "deleteFailed": "Could not delete",
      "tripsLoadFailed": "Could not load trips",
      "dateAndDistanceRequired": "Date and distance are required",
      "updateFailed": "Could not update",
      "noChanges": "No changes provided",
      "adjustFailed": "Could not adjust mileage",
      "auditLogLoadFailed": "Could not load audit log",
      "reportGenerationFailed": "Could not generate mileage report",
      "summaryLoadFailed": "Could not load mileage summary",
      "travelTimeCalculationFailed": "Could not calculate travel times"
    },
    "booking": {
      "linkInvalid": "Invalid booking link",
      "dataLoadFailed": "Could not load booking data",
      "serviceDateTimeRequired": "Service, date, and time are required",
      "invalidService": "Invalid service",
      "invalidPianoSelection": "Invalid piano selection",
      "syncProblem": "Could not create appointment due to sync problem. Please try again.",
      "createFailed": "Could not create appointment",
      "serviceRequired": "Service is required",
      "suggestionGenerationFailed": "Error generating suggestions",
      "serviceIdRequired": "Service ID is required",
      "availableDaysLoadFailed": "Could not load available days",
      "dateServiceIdRequired": "Date and service ID are required",
      "availableTimesLoadFailed": "Could not load available times",
      "firstAvailableTimeLoadFailed": "Could not load first available time",
      "placeIdRequired": "Place ID is required",
      "addressDataLoadFailed": "Could not load address data",
      "unauthorized": "Unauthorized",
      "leadsFetchFailed": "Could not fetch leads",
      "invalidStatus": "Invalid status",
      "leadUpdateFailed": "Could not update lead",
      "pageNotFound": "Booking page not found",
      "pageNotAvailable": "Booking page not available",
      "errorOccurred": "An error occurred",
      "dateServiceRequired": "Date and service are required",
      "notFound": "Not found",
      "notAvailable": "Not available",
      "serviceNotFound": "Service not found",
      "dateTooEarly": "Date is too early",
      "dateTooFar": "Date is too far in the future",
      "closedOnThisDay": "Closed on this day",
      "timeSlotsLoadError": "Error loading time slots",
      "allFieldsRequired": "All fields are required",
      "nameRequired": "Name is required",
      "emailRequired": "Email is required",
      "phoneRequired": "Phone is required",
      "noLink": "Customer has no booking link. Generate a link first.",
      "slotLockedByOther": "This time slot is currently being booked by someone else. Please try again.",
      "slotTakenByAppointment": "This time slot is already taken by another appointment. Please choose another time.",
      "slotTakenByCalendar": "This time slot is occupied in your external calendar. Please choose another time.",
      "slotNoLongerAvailable": "This time slot is no longer available. Please choose another time.",
      "noAvailableTimesInPeriod": "No available times found in the coming period",
      "noAvailableTimesFound": "No available times found",
      "noAvailableTimes": "No available times",
      "notAWorkday": "Not a workday",
      "invalidRescheduleLink": "Invalid or expired reschedule link",
      "appointmentAlreadyPassed": "This appointment has already passed and can no longer be rescheduled",
      "rescheduleMinimum24h": "Rescheduling is only possible up to 24 hours before the appointment",
      "somethingWentWrong": "Something went wrong",
      "followsPreviousNearby": "Follows previous appointment nearby",
      "firstSlotOfDay": "First slot of the day",
      "appointmentAlreadyExists": "This appointment already exists",
      "bookingError": "An error occurred while booking",
      "contactForFarLocations": "For locations further away, please contact us directly to schedule an appointment.",
      "missingFields": "Service, date and time are required",
      "success": "Appointment successfully booked!",
      "multiPianoSuccess": "Appointments successfully booked!",
      "optimalTimesFound": "Optimal times found",
      "sameLocationAsPrevious": "Same location as previous appointment",
      "shortestTravelTime": "Shortest travel time",
      "timesAvailable": "Times available",
      "arrivalTimesNote": "Times shown are arrival times at your location",
      "createdViaOnlineBooking": "Created via online booking",
      "firstAvailable": "First available time",
      "rescheduleSuccess": "Appointment successfully rescheduled",
      "rescheduleError": "Something went wrong while rescheduling",
      "dateTimeRequired": "Date and time are required",
      "appointmentNotFound": "Appointment not found"
    },
    "accounting": {
      "noInvoicesToSync": "No invoices to sync",
      "jorttApiError": "Jortt API error",
      "noCustomersToSync": "No customers to sync",
      "noOutstandingInvoices": "No outstanding synced invoices found",
      "requestReceived": "Request received",
      "dbNameNotUrl": "The database name must not be a URL. Enter the Odoo database name (e.g. \"my-company-main-12345\"), not the website URL.",
      "eboekhoudenAuthFailed": "e-Boekhouden authentication failed. Check your API Token.",
      "eboekhoudenConnected": "Successfully connected to e-Boekhouden"
    },
    "team": {
      "loadFailed": "Failed to load teams",
      "nameRequired": "Team name is required",
      "createFailed": "Failed to create team",
      "accessDenied": "Access denied",
      "updateFailed": "Failed to update team",
      "noFileUploaded": "No file uploaded",
      "logoUploadFailed": "Failed to upload logo",
      "logoDeleteFailed": "Failed to delete logo",
      "bookingEnableFailed": "Failed to enable team booking",
      "bookingDisableFailed": "Failed to disable team booking",
      "membersLoadFailed": "Failed to load team members",
      "nameEmailRequired": "Name and email are required",
      "memberLimitExceeded": "Team member limit exceeded",
      "memberAddFailed": "Failed to add team member",
      "memberNotFound": "Member not found",
      "memberUpdateFailed": "Failed to update team member",
      "memberRemoveFailed": "Failed to remove team member",
      "paramsRequired": "Start and end parameters are required",
      "calendarLoadFailed": "Failed to load team calendar",
      "appointmentAssignFailed": "Failed to assign appointment",
      "unassignedLoadFailed": "Failed to load unassigned appointments",
      "suggestionsFailed": "Failed to get suggestions",
      "selectAtLeastOneCustomer": "Select at least one customer",
      "maxInvitationsExceeded": "Maximum 50 invitations at a time",
      "bookingNotEnabled": "Team booking is not enabled",
      "noCustomersFound": "No customers found",
      "invitationsSendFailed": "Could not send invitations",
      "absencesLoadFailed": "Failed to load absences",
      "datesRequired": "Start and end dates are required",
      "endAfterStart": "End date must be after start date",
      "absenceAddFailed": "Failed to add absence",
      "absenceDeleteFailed": "Failed to delete absence",
      "memberNoEmail": "This team member has no email address",
      "magicLinkSent": "Magic link sent successfully",
      "linkGenerationFailed": "Error generating link",
      "requiredParamsMissing": "Required parameters are missing",
      "smartMatchesFailed": "Failed to generate smart matches",
      "notFound": "Team not found",
      "notFoundOrDisabled": "Team not found or booking disabled",
      "ownerNotFound": "Team owner not found",
      "serviceNotFound": "Service not found",
      "noSlotsInComingWeeks": "No available time slots found in the coming weeks",
      "noAvailableSlotsOnDate": "No available slots on this date",
      "noAvailableMembers": "No team members are available for this booking",
      "slotNoLongerAvailable": "This time slot has just been booked. Please select another time.",
      "appointmentAlreadyExists": "This appointment already exists",
      "appointmentBooked": "Appointment booked successfully",
      "memberNotFoundOrInactive": "Member not found or inactive",
      "failedToLoadInfo": "Failed to load team information. Please try again later.",
      "failedToCreateBooking": "Failed to create booking. Please try again later.",
      "failedToGetSlots": "Failed to get available time slots. Please try again later.",
      "failedToFindSlots": "Failed to find available slots.",
      "tooManyRequests": "Too many requests. Please wait a moment.",
      "startDateRequired": "startDate is required",
      "bookingLinkDisabled": "This booking link does not exist or has been disabled.",
      "notAcceptingBookings": "This team is not currently accepting bookings.",
      "missingRequiredFields": "Missing required fields",
      "bookingFieldsRequired": "Member, time slot, service, name and email are required.",
      "failedToGetPianos": "Failed to get pianos",
      "dateServiceRequired": "Date and service are required",
      "monthServiceRequired": "Month and service ID are required",
      "serverError": "Server error"
    },
    "smtp": {
      "settingsSaved": "SMTP settings saved",
      "notConfigured": "No SMTP settings found",
      "diagnosisFailed": "Diagnosis failed",
      "settingsDeleted": "SMTP settings deleted",
      "connectionFailed": "Could not connect",
      "invalidCredentials": "Invalid credentials. Tips:\n• Use your full email address as username\n• Use an App password (NOT your regular password)\n• Copy the app password WITHOUT spaces (16 characters)\n• Make sure 2-factor authentication is ON",
      "connectionRefused": "Connection refused. The SMTP port is likely blocked on the server. Contact support.",
      "sslError": "SSL/TLS certificate problem. Try a different port.",
      "connectionTimeout": "Connection timeout — the SMTP port is likely blocked on the server. Gmail tip: we automatically tried port 465 (SSL). Contact support if it doesn't work.",
      "serverNotFound": "SMTP server not found. Check the hostname.",
      "authFailed": "Authentication failed. Check:\n• App password without spaces\n• 2FA must be enabled\n• Correct email address as username"
    },
    "inventory": {
      "pianoMarkedAsSold": "Piano marked as sold",
      "subtaskUpdated": "Subtask updated",
      "fetchShowroomPianosFailed": "Could not fetch showroom pianos",
      "brandRequired": "Brand is required",
      "addPianoFailed": "Could not add piano",
      "customerIdRequired": "Customer ID is required",
      "showroomPianoNotFound": "Showroom piano not found",
      "customerNotFound": "Customer not found",
      "markAsSoldFailed": "Could not mark piano as sold",
      "locationRequired": "Location is required",
      "startEndTimeRequired": "Start and end time are required",
      "selectAtLeastOnePiano": "Select at least one piano",
      "batchCreated": "Batch appointment created",
      "createBatchFailed": "Could not create batch appointment",
      "batchNotFound": "Batch appointment not found",
      "fetchBatchFailed": "Could not fetch batch appointment",
      "invalidStatus": "Invalid status",
      "noUpdatesProvided": "No updates provided",
      "subtaskNotFound": "Subtask not found",
      "updateSubtaskFailed": "Could not update subtask",
      "noCsvFileReceived": "No CSV file received",
      "csvFileEmpty": "CSV file is empty",
      "requiredColumnMissing": "Required column \"Brand\" (or \"Merk\") is missing in CSV headers",
      "importFailed": "Import failed"
    },
    "upload": {
      "logoDeleted": "Logo deleted"
    },
    "support": {
      "requestSubmitted": "Support request submitted"
    },
    "onboarding": {
      "welcome": "Welcome to PianoPlanner!",
      "statusFailed": "Could not retrieve onboarding status",
      "companyLoadFailed": "Could not retrieve company details",
      "servicesLoadFailed": "Could not retrieve services",
      "nameAndDurationRequired": "Name and duration are required",
      "serviceCreateFailed": "Could not create service",
      "serviceNotFound": "Service not found",
      "serviceUpdateFailed": "Could not update service",
      "serviceDeleteFailed": "Could not delete service",
      "settingsLoadFailed": "Could not retrieve settings",
      "settingsSaveFailed": "Could not save settings"
    },
    "admin": {
      "noRights": "No admin rights",
      "notConfigured": "Admin login is not configured",
      "cannotDeleteSelf": "Admins cannot delete their own account",
      "settingsLoadFailed": "Could not load settings",
      "invalidSetting": "Invalid setting",
      "settingSaveFailed": "Could not save setting",
      "statsLoadFailed": "Could not load stats",
      "noBrokenAppointments": "No broken appointments found",
      "cleanupFailed": "Cleanup failed",
      "dashboardStatsLoadFailed": "Could not load dashboard stats",
      "signupTrendLoadFailed": "Could not load signup trend",
      "auditLogsLoadFailed": "Could not load audit logs",
      "securityAlertsLoadFailed": "Could not load security alerts",
      "errorLogsLoadFailed": "Could not load error logs",
      "errorStatsLoadFailed": "Could not load error stats",
      "errorResolveFailed": "Could not resolve error",
      "announcementCreateFailed": "Could not create announcement",
      "announcementUpdateFailed": "Could not update announcement",
      "announcementNotFound": "Announcement not found",
      "announcementToggleFailed": "Could not toggle announcement",
      "announcementDeleteFailed": "Could not delete announcement",
      "defaultTemplatesLoadFailed": "Could not load default templates",
      "invalidSection": "Invalid section",
      "defaultsSaveFailed": "Failed to save defaults",
      "defaultsUpdateFailed": "Could not update default templates",
      "defaultsResetFailed": "Could not reset default templates",
      "backupStatusFailed": "Failed to get backup status",
      "backupKeyRequired": "Backup key is required",
      "invalidBackupKey": "Invalid backup key",
      "backupDownloadFailed": "Failed to download backup",
      "logoLoadFailed": "Could not load logo",
      "noFileUploaded": "No file uploaded",
      "uploadFailed": "Upload failed",
      "logoDeleted": "Platform logo deleted",
      "logoDeleteFailed": "Could not delete logo",
      "logoNotFound": "Logo not found",
      "invoiceQueueLoadFailed": "Could not load invoice queue",
      "invalidQueueStatus": "Invalid status",
      "queueItemNotFound": "Queue item not found",
      "queueItemUpdateFailed": "Could not update queue item",
      "emailLogsLoadFailed": "Could not load email logs",
      "emailLogNotFound": "Email log not found",
      "onlyFailedCanBeResent": "Only failed emails can be re-sent",
      "alreadyInRetryQueue": "Email already in retry queue",
      "emailRequeued": "Email re-queued for processing",
      "emailRequeueFailed": "Could not re-queue email",
      "emailLogDeleted": "Email log deleted",
      "cacheCleared": "Cache cleared",
      "queueProcessed": "Queue processed",
      "itemRemovedFromQueue": "Item removed from queue",
      "testReportSent": "Test report sent",
      "usersLoadFailed": "Could not load users",
      "pendingUsersLoadFailed": "Could not load pending users",
      "userApproved": "User approved",
      "userApproveFailed": "Could not approve user",
      "userNotFound": "User not found",
      "welcomeEmailSent": "Welcome email sent",
      "welcomeEmailSendFailed": "Could not send welcome email",
      "userRejected": "User rejected",
      "userRejectFailed": "Could not reject user",
      "invalidTier": "Invalid tier",
      "tierChangeFailed": "Could not change tier",
      "userDeleted": "User deleted",
      "userDeleteFailed": "Could not delete user",
      "planRequired": "Plan is required",
      "planSet": "Plan set",
      "planSetFailed": "Could not set plan",
      "emailPasswordRequired": "Email and password are required",
      "userEmailExists": "A user with this email address already exists",
      "userCreated": "User created",
      "userCreateFailed": "Could not create user",
      "anotherUserEmailExists": "Another user with this email address already exists",
      "userUpdated": "User updated",
      "userUpdateFailed": "Could not update user",
      "userLoadFailed": "Could not load user",
      "userDetailsLoadFailed": "Could not load user details",
      "bookingSlugRequired": "Booking slug is required",
      "slugMinLength": "Slug must be at least 3 characters",
      "slugInUse": "This slug is already in use",
      "bookingSlugUpdateFailed": "Could not update booking slug",
      "impersonateFailed": "Could not impersonate user",
      "notImpersonating": "Not impersonating",
      "impersonationStopFailed": "Could not stop impersonation",
      "noUsersSpecified": "No users specified",
      "bulkDeleteFailed": "Bulk delete failed",
      "bulkPlanSetFailed": "Bulk set plan failed",
      "notificationsSendFailed": "Failed to send notifications"
    },
    "common": {
      "serverError": "Server error",
      "placeIdRequired": "Place ID is required",
      "failed": "Failed"
    },
    "teamBooking": {
      "teamNotFound": "Team not found",
      "teamNotFoundOrDisabled": "Team not found or booking disabled",
      "bookingLinkNotFound": "This booking link does not exist or has been disabled.",
      "placeIdRequired": "Place ID is required",
      "failed": "Failed",
      "serviceIdRequired": "Service ID is required",
      "monthServiceIdRequired": "Month and service ID are required",
      "missingFields": "Missing required fields",
      "dateServiceRequired": "Date and service are required.",
      "bookingFieldsRequired": "Member, time slot, service, name and email are required.",
      "tooManyRequests": "Too many requests. Please wait a moment.",
      "startDateRequired": "Start date is required",
      "outOfZone": "Unfortunately, this address is outside our service area."
    },
    "portal": {
      "rateLimitExceeded": "Too many attempts. Please try again in a minute.",
      "fetchScheduleFailed": "Could not fetch the schedule.",
      "fetchWeekScheduleFailed": "Could not fetch the weekly schedule.",
      "invalidStatus": "Invalid status.",
      "appointmentNotFound": "Appointment not found.",
      "updateStatusFailed": "Could not update status.",
      "noteRequired": "Note is required.",
      "saveNoteFailed": "Could not save note.",
      "fetchHistoryFailed": "Could not load history.",
      "profileNotFound": "Profile not found.",
      "fetchProfileFailed": "Could not fetch profile.",
      "completeAppointmentFailed": "Could not complete appointment.",
      "batchAppointmentNotFound": "Batch appointment not found.",
      "pianoNotFoundInBatch": "Piano not found in this batch.",
      "fetchTasksFailed": "Could not fetch tasks.",
      "taskNotFound": "Task not found.",
      "invalidHours": "Invalid number of hours.",
      "updateHoursFailed": "Could not update hours."
    },
    "uploads": {
      "noFileUploaded": "No file uploaded",
      "logoUploaded": "Logo uploaded successfully",
      "uploadFailed": "Upload failed",
      "logoDeleted": "Logo deleted",
      "deleteFailed": "Delete failed",
      "invalidFilename": "Invalid filename",
      "logoNotFound": "Logo not found"
    },
    "services": {
      "loadFailed": "Could not retrieve services",
      "notFound": "Service not found",
      "loadOneFailed": "Could not retrieve service",
      "nameAndDurationRequired": "Name and duration are required",
      "createFailed": "Could not create service",
      "updateFailed": "Could not update service",
      "deleteFailed": "Could not delete service"
    }
  },
  "api.teamBooking.teamNotFound": "Team not found",
  "api.teamBooking.searchFailed": "Search failed",
  "api.teamBooking.placeIdRequired": "placeId required",
  "api.teamBooking.placeDetailsFailed": "Failed to get place details",
  "api.teamBooking.customerNotFound": "Customer not found",
  "api.teamBooking.pianosFailed": "Failed to get pianos",
  "api.teamBooking.linkNotExist": "This booking link does not exist or has been disabled.",
  "api.teamBooking.bookingDisabled": "Booking disabled",
  "api.teamBooking.notAcceptingBookings": "This team is not currently accepting bookings.",
  "api.teamBooking.ownerNotFound": "Owner not found",
  "api.teamBooking.ownerAccountNotFound": "Team owner account not found.",
  "api.teamBooking.loadInfoFailed": "Failed to load team information. Please try again later.",
  "api.teamBooking.serviceIdRequired": "serviceId is required",
  "api.teamBooking.teamNotFoundOrDisabled": "Team not found or booking disabled",
  "api.teamBooking.serviceNotFound": "Service not found",
  "api.teamBooking.noSlotsInComingWeeks": "No available time slots found in the coming weeks.",
  "api.teamBooking.bestMatchFailed": "Server error",
  "api.teamBooking.dateRequired": "date parameter is required",
  "api.teamBooking.missingFields": "Missing required fields",
  "api.teamBooking.dateServiceRequired": "Date and service are required.",
  "api.teamBooking.noSlotsOnDate": "No available slots on this date",
  "api.teamBooking.noAvailableMembers": "No available members",
  "api.teamBooking.noMembersAvailableMessage": "No team members are available on this date. Please try another date.",
  "api.teamBooking.slotsFailed": "Failed to get available time slots. Please try again.",
  "api.teamBooking.slotNoLongerAvailable": "Time slot no longer available",
  "api.teamBooking.slotJustBooked": "This time slot has just been booked by another customer. Please select a different time.",
  "api.teamBooking.appointmentExists": "This appointment already exists.",
  "api.teamBooking.bookedSuccessfully": "Appointment booked successfully",
  "api.teamBooking.bookingFailed": "Failed to create booking. Please try again.",
  "api.teamBooking.onlineBookingSource": "Online booking",
  "api.teamBooking.bookedViaTeam": "Booked via team page",
  "api.teamBooking.tooManyRequests": "Too many requests. Please wait a moment.",
  "api.teamBooking.startDateRequired": "startDate is required",
  "api.teamBooking.findSlotsFailed": "Failed to find available slots.",
  "api.teamBooking.serverError": "Server error",
  "api.teamBooking.memberNotFoundOrInactive": "Member not found or inactive",
  "api.auth.emailPasswordRequired": "Email and password are required",
  "api.auth.invalidEmailFormat": "Invalid email format",
  "api.auth.accountCreatedCanLogin": "Your account has been created! You can now log in.",
  "api.auth.accountCreatedAwaitApproval": "Your account has been created! You will receive a message once an administrator has approved your account.",
  "api.auth.registrationFailed": "Registration failed",
  "api.auth.sessionError": "Session error",
  "api.auth.loginSuccess": "Successfully logged in",
  "api.auth.loginFailed": "Login failed",
  "api.auth.emailRequired": "Email is required",
  "api.auth.resetLinkSentIfKnown": "If this email address is known to us, you will receive a reset link.",
  "api.auth.errorOccurred": "An error occurred",
  "api.auth.tokenMissing": "Token is missing",
  "api.auth.tokenVerifyFailed": "Could not verify token",
  "api.auth.tokenPasswordRequired": "Token and password are required",
  "api.auth.passwordMinLength": "Password must be at least 8 characters",
  "api.auth.passwordResetSuccess": "Password successfully changed. You can now log in.",
  "api.auth.passwordResetFailed": "Could not reset password",
  "api.auth.adminNotConfigured": "Admin login is not configured. Set ADMIN_USERNAME and ADMIN_PASSWORD as environment variables.",
  "api.auth.usernamePasswordRequired": "Username and password are required",
  "api.auth.loggedInAsAdmin": "Logged in as admin",
  "api.auth.invalidCredentials": "Invalid username or password",
  "api.auth.notLoggedIn": "Not logged in",
  "api.auth.noChangesSpecified": "No changes specified",
  "api.auth.profileUpdated": "Profile updated",
  "api.auth.userNotFound": "User not found",
  "api.auth.newPasswordRequired": "New password is required",
  "api.auth.passwordsDoNotMatch": "Passwords do not match",
  "api.auth.passwordSetCanLogin": "Password set! You can now also log in with email and password.",
  "api.auth.currentAndNewPasswordRequired": "Current and new password are required",
  "api.auth.newPasswordsDoNotMatch": "New passwords do not match",
  "api.auth.passwordChanged": "Password successfully changed",
  "api.subscription.notLoggedIn": "Not logged in",
  "api.subscription.noActiveSubscription": "No active subscription",
  "api.subscription.checkFailed": "Could not check subscription",
  "api.subscription.paidRequired": "Paid subscription required",
  "api.subscription.proRequired": "Pro subscription required for this feature",
  "api.subscription.businessRequired": "Business subscription required for workshop project planner",
  "api.subscription.featureCheckFailed": "Could not check feature",
  "api.subscription.customerLimitReached": "Customer limit reached",
  "api.subscription.customerLimitMessage": "You have {current} of {limit} customers. Upgrade to Solo or Pro for unlimited customers.",
  "api.subscription.limitCheckFailed": "Could not check limit",
  "api.subscription.appointmentLimitReached": "Appointment limit reached",
  "api.subscription.appointmentLimitMessage": "You have {current} of {limit} appointments this year. Upgrade to Solo or Pro for unlimited appointments.",
  "api.subscription.featureProOnly": "{feature} is only available with a Pro subscription",
  "api.mollie.paymentsNotConfigured": "Payments are not yet configured",
  "api.mollie.statusFetchFailed": "Could not retrieve status",
  "api.mollie.invalidPlan": "Invalid plan. Choose solo, pro or business.",
  "api.mollie.paymentStartFailed": "Could not start payment",
  "api.mollie.noActiveSubscription": "No active subscription found",
  "api.mollie.subscriptionCancelled": "Subscription cancelled",
  "api.mollie.cancelFailed": "Could not cancel subscription",
  "api.mollie.invalidPlanSimple": "Invalid plan",
  "api.mollie.planChanged": "Plan changed to {plan}",
  "api.mollie.changeFailed": "Could not change plan",
  "api.mollie.firstPaymentDesc": "first payment",
  "api.stripe.invalidPlan": "Invalid plan. Choose solo, pro, teams or business.",
  "api.stripe.createSessionFailed": "Could not create checkout session",
  "api.stripe.noActiveSubscription": "No active Stripe subscription found",
  "api.stripe.subscriptionCancelled": "Subscription cancelled. Access continues until end of billing period.",
  "api.stripe.cancelFailed": "Could not cancel subscription",
  "api.stripe.portalFailed": "Could not open billing portal",
  "api.stripe.statusFetchFailed": "Could not retrieve subscription status",
  "api.stripe.notConfigured": "Stripe is not configured",
  "api.customers.loadFailed": "Could not load customers",
  "api.customers.nameRequired": "Name is required",
  "api.customers.createFailed": "Could not create customer",
  "api.customers.notFound": "Customer not found",
  "api.customers.updateFailed": "Could not update customer",
  "api.customers.deleteFailed": "Could not delete customer",
  "api.customers.deleted": "Customer deleted",
  "api.customers.searchFailed": "Search failed",
  "api.customers.importFailed": "Import failed",
  "api.customers.noFileUploaded": "No file uploaded",
  "api.customers.mergeFailed": "Could not merge customers",
  "api.customers.merged": "Customers merged successfully",
  "api.pianos.loadFailed": "Could not load pianos",
  "api.pianos.brandRequired": "Brand is required",
  "api.pianos.createFailed": "Could not create piano",
  "api.pianos.notFound": "Piano not found",
  "api.pianos.updateFailed": "Could not update piano",
  "api.pianos.deleteFailed": "Could not delete piano",
  "api.pianos.deleted": "Piano deleted",
  "api.common.notLoggedIn": "Not logged in",
  "api.common.userNotFound": "User not found",
  "api.common.serverError": "Server error",
  "api.common.invalidRequest": "Invalid request",
  "api.common.accessDenied": "Access denied",
  "api.common.notFound": "Not found",
  "api.common.saveFailed": "Could not save changes",
  "api.common.saved": "Changes saved",
  "api.settings.loadFailed": "Could not load settings",
  "api.settings.saveFailed": "Could not save settings",
  "api.settings.vatNoNumber": "No VAT number provided",
  "api.settings.vatValidationFailed": "Could not validate VAT number",
  "api.settings.vatInfoFailed": "Could not load VAT info",
  "api.settings.servicesLoadFailed": "Could not load services",
  "api.settings.serviceNotFound": "Service not found",
  "api.settings.serviceLoadFailed": "Could not load service",
  "api.settings.serviceNameRequired": "Name is required",
  "api.settings.serviceCreateFailed": "Could not create service",
  "api.settings.serviceUpdateFailed": "Could not update service",
  "api.settings.serviceDeleteFailed": "Could not delete service",
  "api.settings.serviceActivateFailed": "Could not activate service",
  "api.settings.bookingLoadFailed": "Could not load booking settings",
  "api.settings.bookingSaveFailed": "Could not save booking settings",
  "api.settings.travelLoadFailed": "Could not load travel settings",
  "api.settings.travelSaveFailed": "Could not save travel settings",
  "api.settings.travelAnalyzeFailed": "Could not analyze customer base",
  "api.settings.languageNotSupported": "Language not supported",
  "api.settings.languageSaveFailed": "Could not save language setting",
  "api.settings.resetConfirmWrong": "Confirmation text is incorrect",
  "api.settings.resetSuccess": "All data has been deleted. Your settings and account have been preserved.",
  "api.settings.resetFailed": "Could not reset data",
  "api.settings.deletePasswordRequired": "Password is required",
  "api.settings.deleteAdminDenied": "Admins cannot delete their own account",
  "api.settings.deleteSuccess": "Account successfully deleted",
  "api.settings.deleteFailed": "Could not delete account",
  "api.settings.syncStatusFailed": "Could not load sync status",
  "api.settings.syncQueueFailed": "Could not load sync queue",
  "api.settings.syncVerifyFailed": "Could not verify sync",
  "api.settings.syncOrphansFailed": "Could not find orphaned events",
  "api.settings.syncMissingFailed": "Could not find missing syncs",
  "api.settings.exportFailed": "Could not export data",
  "api.settings.previewFailed": "Could not load preview",
  "api.settings.testReminderSuccess": "Test reminder sent to your email address",
  "api.settings.testReminderSendFailed": "Could not send test",
  "api.settings.testReminderError": "Could not send test reminder",
  "api.settings.historyFailed": "Could not load history",
  "api.settings.upcomingFailed": "Could not load upcoming reminders",
  "api.calendar.noGoogleConnection": "No Google connection",
  "api.calendar.tokenCheckFailed": "Could not check tokens",
  "api.calendar.loginWithGoogle": "Log in with Google",
  "api.calendar.calendarsLoadFailed": "Could not load calendars",
  "api.calendar.eventsLoadFailed": "Could not load events",
  "api.calendar.eventFieldsRequired": "Title, start and end are required",
  "api.calendar.eventCreateFailed": "Could not create event",
  "api.calendar.eventDeleteFailed": "Could not delete event",
  "api.calendar.syncSettingsLoadFailed": "Could not load sync settings",
  "api.calendar.singleProviderLimit": "You already have an active sync with {provider}. Disconnect {provider} first before enabling Google Calendar.",
  "api.calendar.syncSettingsSaveFailed": "Could not save sync settings",
  "api.calendar.disconnectFailed": "Could not disconnect",
  "api.calendar.disconnected": "Google Calendar connection disconnected",
  "api.calendar.sessionExpired": "Google session expired",
  "api.calendar.reconnectGoogle": "Log in again with Google to restore the connection",
  "api.calendar.syncStatusLoadFailed": "Could not load sync status",
  "api.calendar.syncDisabledByAdmin": "Calendar sync is temporarily disabled by the administrator",
  "api.calendar.contactSupport": "Contact support if this is unexpected",
  "api.calendar.syncRateLimit": "You can synchronize at most once every 15 minutes",
  "api.calendar.syncRateLimitHint": "Try again in {minutes} {minuteWord}",
  "api.calendar.minuteSingular": "minute",
  "api.calendar.minutePlural": "minutes",
  "api.calendar.syncInProgress": "Synchronization is already in progress",
  "api.calendar.syncInProgressHint": "Wait until the current sync is finished",
  "api.calendar.noValidGoogleConnection": "No valid Google connection",
  "api.calendar.syncNotEnabled": "Synchronization is not enabled",
  "api.calendar.maxEventsReached": "Maximum number of appointments reached ({max})",
  "api.calendar.maxEventsHint": "Delete old appointments to synchronize again",
  "api.calendar.googleApiLimit": "Google API limit reached",
  "api.calendar.waitAndRetry": "Wait a few minutes and try again",
  "api.calendar.noGoogleAccess": "No access to Google Calendar",
  "api.calendar.reauthorizeGoogle": "Give PianoPlanner permission to your calendar again",
  "api.calendar.syncFailed": "Synchronization failed",
  "api.calendar.importFailed": "Import failed",
  "api.calendar.previewFailed": "Preview failed",
  "api.calendar.forceSyncFailed": "Force sync failed",
  "api.calendar.allSynced": "All calendars are synchronized",
  "api.calendar.refreshTokenMissing": "Google Calendar: refresh token missing - log in again via Settings",
  "api.calendar.googleExpired": "Google Calendar connection expired",
  "api.calendar.appleNotConnected": "Apple Calendar not connected",
  "api.calendar.syncsPending": "{count} sync(s) pending",
  "api.calendar.microsoftNotConnected": "Microsoft Calendar not connected",
  "api.calendar.syncsPermanentlyFailed": "{count} sync(s) permanently failed",
  "api.customers.fetchError": "Could not load customers",
  "api.customers.fetchNamesError": "Could not load customer names",
  "api.customers.fetchDuplicatesError": "Could not load duplicates",
  "api.customers.mergeIdsRequired": "Target and source ID are required",
  "api.customers.mergeSuccess": "Customers merged successfully",
  "api.customers.mergeAdvancedIdsRequired": "Target ID and source IDs are required",
  "api.customers.cleanNotesFailed": "Could not clean notes",
  "api.customers.mapDataError": "Could not load map data",
  "api.customers.allAlreadyGeocoded": "All customers already have coordinates",
  "api.customers.geocodeBatchPartial": "{processed} customers processed, {remaining} remaining. Run again.",
  "api.customers.geocodeBatchDone": "{processed} customers processed.",
  "api.customers.geocodingFailed": "Geocoding failed",
  "api.customers.fetchOneError": "Could not load customer",
  "api.customers.createError": "Could not create customer",
  "api.customers.updateError": "Could not update customer",
  "api.customers.deleteError": "Could not delete customer",
  "api.customers.tokenRegenerated": "New booking link generated",
  "api.customers.tokenRegenerateError": "Could not regenerate token",
  "api.customers.smartFillLocationRequired": "Enter a city, postal code or address",
  "api.customers.smartFillLocationNotFound": "Location not found. Try a different city or postal code.",
  "api.customers.smartFillNoResults": "No customers with service interval found",
  "api.customers.smartFillSearchFailed": "Search failed",
  "api.customers.smartFillSelectAtLeastOne": "Select at least one customer",
  "api.customers.smartFillMaxInvitations": "Maximum 20 invitations at a time",
  "api.customers.smartFillCustomerNotFound": "Customer/piano not found or no email",
  "api.customers.smartFillNoInterval": "Service interval is 0",
  "api.customers.smartFillInviteFailed": "Failed to send invitations",
  "api.customers.noAddress": "Customer has no address",
  "api.customers.geocodeAddressFailed": "Could not geocode address",
  "api.customers.notesFetchError": "Could not load notes",
  "api.customers.noteRequired": "Note is required",
  "api.customers.noteSaveError": "Could not save note",
  "api.customers.noteDeleteError": "Could not delete note",
  "api.pianos.fetchError": "Could not retrieve pianos",
  "api.pianos.invitationStatusError": "Could not retrieve invitation status",
  "api.pianos.servicesFetchError": "Could not retrieve services",
  "api.pianos.fetchSingleError": "Could not retrieve piano",
  "api.pianos.created": "Piano added",
  "api.pianos.createError": "Could not create piano",
  "api.pianos.pianoIdsRequired": "pianoIds array is required",
  "api.pianos.updatesRequired": "updates object is required",
  "api.pianos.noValidFields": "No valid fields to update",
  "api.pianos.bulkUpdated": "{count} pianos updated",
  "api.pianos.bulkUpdateError": "Could not update pianos",
  "api.pianos.updated": "Piano updated",
  "api.pianos.updateError": "Could not update piano",
  "api.pianos.deleteError": "Could not delete piano",
  "api.pianos.serviceAdded": "Service record added",
  "api.pianos.serviceAddError": "Could not add service",
  "api.pianos.serviceNotFound": "Service record not found",
  "api.pianos.serviceDeleted": "Service record deleted",
  "api.pianos.serviceDeleteError": "Could not delete service",
  "api.appointments.fetchFailed": "Could not fetch appointments",
  "api.appointments.noneFound": "No appointments found",
  "api.appointments.travelTimeCalcFailed": "Could not calculate travel times",
  "api.appointments.duplicateDetectFailed": "Could not detect duplicates",
  "api.appointments.noDuplicatesFound": "No duplicates found",
  "api.appointments.pendingFetchFailed": "Could not fetch pending appointments",
  "api.appointments.pendingPaymentsFetchFailed": "Could not fetch outstanding payments",
  "api.appointments.missingAddressesFetchFailed": "Could not fetch missing addresses",
  "api.appointments.notFound": "Appointment not found",
  "api.appointments.fetchOneFailed": "Could not fetch appointment",
  "api.appointments.titleRequired": "Title is required",
  "api.appointments.startEndRequired": "Start and end time are required",
  "api.appointments.createSyncFailed": "Could not create appointment",
  "api.appointments.createFailed": "Could not create appointment",
  "api.appointments.updateFailed": "Could not update appointment",
  "api.appointments.deleteFailed": "Could not delete appointment",
  "api.appointments.completeFailed": "Could not complete appointment",
  "api.appointments.cancelFailed": "Could not cancel appointment",
  "api.appointments.statsFetchFailed": "Could not fetch statistics",
  "api.appointments.dateRequired": "Date is required",
  "api.appointments.minTwoForRoute": "At least 2 appointments with location needed for route optimization",
  "api.appointments.routeOptimizeFailed": "Could not optimize route",
  "api.appointments.noScheduleProvided": "No schedule provided",
  "api.appointments.routeApplyFailed": "Could not apply optimized route",
  "api.appointments.duplicateDeleteFailed": "Could not remove duplicates",
  "api.appointments.cleanupFailed": "Cleanup failed",
  "api.appointments.noBrokenFound": "No broken appointments found",
  "api.appointments.missingRequiredFields": "Missing required fields",
  "api.appointments.invalidDateFormat": "Invalid date format",
  "api.appointments.invalidTimeFormat": "Invalid time format",
  "api.appointments.timeSlotUnavailable": "Time slot not available",
  "api.appointments.conflictExists": "An appointment is already scheduled: {conflictWith}",
  "api.appointments.rescheduleFailed": "Failed to reschedule appointment",
  "api.appointments.rescheduled": "Appointment successfully rescheduled",
  "api.appointments.workshopStatsFailed": "Failed to get workshop stats",
  "api.appointments.mileageSummaryFailed": "Failed to get mileage summary",
  "api.appointments.paymentMarkedPaid": "Payment marked as paid",
  "api.appointments.paymentMarkFailed": "Could not mark payment",
  "api.appointments.markedCompleted": "Appointment marked as completed",
  "api.appointments.taskCompleteFailed": "Could not complete task",
  "api.appointments.defaultTitle": "Appointment",
  "api.appointments.hintDateTimeFormat": "Provide newDate (YYYY-MM-DD) and newTime (HH:MM)",
  "api.appointments.hintDateFormat": "Use YYYY-MM-DD format",
  "api.appointments.hintTimeFormat": "Use HH:MM format",
  "api.appointments.rescheduleEmailTitle": "Appointment time changed",
  "api.appointments.customerFallback": "customer",
  "api.appointments.rescheduleEmailBody": "Your appointment has been moved to a new time:",
  "api.appointments.rescheduleFrom": "From",
  "api.appointments.rescheduleTo": "To",
  "api.appointments.labelAppointment": "Appointment",
  "api.appointments.labelLocation": "Location",
  "api.appointments.rescheduleContactNote": "If this new time doesn't work for you, please don't hesitate to contact us.",
  "api.appointments.kindRegards": "Kind regards,",
  "api.appointments.rescheduleEmailSubject": "Time change: {title} - {date}",
  "api.appointments.duplicatesDeleted": "{count} duplicates removed",
  "api.appointments.noCompanyAddress": "No company address set. Please set a company address in settings first.",
  "api.appointments.routeApplyMessage": "{count} appointments updated with optimized times",
  "api.email.quotaCheckFailed": "Quota check failed",
  "api.email.emailNotConfigured": "Email not configured",
  "api.email.smtpEnvRequired": "SMTP_USER and SMTP_PASS environment variables are required",
  "api.email.noEmailProvided": "No email address provided",
  "api.email.testEmailSent": "Test email sent to {email}",
  "api.email.testEmailFailed": "Could not send test email",
  "api.email.settingsUpdated": "Email settings updated",
  "api.email.confirmationSent": "Confirmation email sent",
  "api.email.appointmentNotFound": "Appointment not found",
  "api.email.customerNoEmail": "Customer has no email address",
  "api.email.reminderSent": "Reminder email sent",
  "api.email.customerIdRequired": "customerId is required",
  "api.email.customerNotFound": "Customer not found",
  "api.email.noBookingLink": "Customer has no booking link. Generate a link first.",
  "api.email.invitationSent": "Invitation sent",
  "api.email.invitationFailed": "Could not send invitation",
  "api.email.customerAndPianoRequired": "customerId and pianoId are required",
  "api.email.pianoNotFound": "Piano not found",
  "api.email.pianoSelfContact": "This piano is set to \"Customer initiates contact\". Change the tuning interval first to send invitations.",
  "api.email.logLoadFailed": "Could not load email log",
  "api.email.noEmailsSelected": "No emails selected",
  "api.email.invalidIds": "Invalid IDs",
  "api.email.deleteEmailsFailed": "Could not delete emails",
  "api.smtp.settingsSaved": "SMTP settings saved",
  "api.smtp.settingsNotFound": "Email settings not found",
  "api.smtp.saveSettingsFirst": "Save your email settings first",
  "api.smtp.noSmtpSettings": "No SMTP settings found",
  "api.smtp.smtpSettingsTip": "Save SMTP settings first via Settings > Email",
  "api.smtp.diagnoseFailed": "Diagnosis failed",
  "api.smtp.settingsDeleted": "SMTP settings deleted",
  "api.notifications.invalidSubscription": "Invalid subscription",
  "api.notifications.saveSubscriptionFailed": "Failed to save subscription",
  "api.notifications.unsubscribeFailed": "Failed to unsubscribe",
  "api.notifications.updateSettingsFailed": "Failed to update settings",
  "api.notifications.getSettingsFailed": "Failed to get settings",
  "api.notifications.testSent": "Test notification sent",
  "api.notifications.testFailed": "Could not send notification",
  "api.notifications.testSendFailed": "Failed to send test notification",
  "api.mileage.vehicleFetchFailed": "Could not load vehicle",
  "api.mileage.vehicleSaveFailed": "Could not save vehicle",
  "api.mileage.readingsFetchFailed": "Could not load odometer readings",
  "api.mileage.dateAndReadingRequired": "Date and odometer reading are required",
  "api.mileage.invalidReading": "Invalid odometer reading",
  "api.mileage.readingSaveFailed": "Could not save odometer reading",
  "api.mileage.readingNotFound": "Odometer reading not found",
  "api.mileage.readingDeleteFailed": "Could not delete odometer reading",
  "api.mileage.tripsFetchFailed": "Could not load trips",
  "api.mileage.dateAndDistanceRequired": "Date and distance are required",
  "api.mileage.tripSaveFailed": "Could not save trip",
  "api.mileage.tripNotFound": "Trip not found",
  "api.mileage.tripUpdateFailed": "Could not update trip",
  "api.mileage.tripDeleteFailed": "Could not delete trip",
  "api.mileage.appointmentNotFound": "Appointment not found",
  "api.mileage.noChangesProvided": "No changes provided",
  "api.mileage.adjustFailed": "Could not adjust mileage",
  "api.mileage.auditLogFailed": "Could not load audit log",
  "api.mileage.reportFailed": "Could not generate mileage report",
  "api.mileage.summaryFailed": "Failed to get mileage summary",
  "api.projects.fetchFailed": "Could not load projects",
  "api.projects.statsFetchFailed": "Could not load statistics",
  "api.projects.capacityFetchFailed": "Could not load capacity",
  "api.projects.notFound": "Project not found",
  "api.projects.fetchOneFailed": "Could not load project",
  "api.projects.titleRequired": "Title is required",
  "api.projects.createFailed": "Could not create project",
  "api.projects.updateFailed": "Could not update project",
  "api.projects.deleteFailed": "Could not delete project",
  "api.projects.duplicateFailed": "Could not duplicate project",
  "api.projects.appointmentsFetchFailed": "Could not load appointments",
  "api.projects.tasksFetchFailed": "Could not load tasks",
  "api.projects.taskTitleRequired": "Task title is required",
  "api.projects.taskCreateFailed": "Could not create task",
  "api.projects.taskNotFound": "Task not found",
  "api.projects.taskUpdateFailed": "Could not update task",
  "api.projects.taskDeleteFailed": "Could not delete task",
  "api.projects.taskIdsMustBeArray": "taskIds must be an array",
  "api.projects.taskReorderFailed": "Could not reorder tasks",
  "api.projects.quoteFetchFailed": "Could not load quote",
  "api.projects.materialsFetchFailed": "Could not load materials",
  "api.projects.categoriesFetchFailed": "Could not load categories",
  "api.projects.materialNotFound": "Material not found",
  "api.projects.materialFetchFailed": "Could not load material",
  "api.projects.materialNameRequired": "Name is required",
  "api.projects.materialCreateFailed": "Could not create material",
  "api.projects.materialUpdateFailed": "Could not update material",
  "api.projects.materialDeleteFailed": "Could not delete material",
  "api.accounting.settingsLoadFailed": "Could not load settings",
  "api.accounting.settingsSaveFailed": "Could not save settings",
  "api.accounting.clientIdSecretRequired": "Client ID and Client Secret are required",
  "api.accounting.connectedSuccess": "{provider} connected successfully!",
  "api.accounting.disconnectFailed": "Could not disconnect {provider}",
  "api.accounting.noInvoicesToSync": "No invoices to synchronize",
  "api.accounting.customersFetchFailed": "Could not load customers",
  "api.accounting.invoicesFetchFailed": "Could not load invoices",
  "api.accounting.orgFetchFailed": "Could not load organization",
  "api.accounting.allFieldsRequired": "All fields are required: URL, database, username and API key",
  "api.accounting.tokenAndIdRequired": "Personal Access Token and Administration ID are required",
  "api.accounting.authFailed": "{provider} authentication failed. Check your token and settings.",
  "api.accounting.connectFailed": "Could not connect to {provider}",
  "api.accounting.loadingCustomers": "Loading customers from PianoPlanner...",
  "api.accounting.noCustomersFound": "No customers found",
  "api.accounting.rateLimitSkipped": "Skipped due to rate limit",
  "api.accounting.updateFailed": "Update failed",
  "api.accounting.noCustomersToSync": "No customers to synchronize",
  "api.accounting.noOpenInvoices": "No open synced invoices found",
  "api.accounting.accessTokenAndIdRequired": "Access Token and Company ID (Realm ID) are required",
  "api.accounting.oauthTokenAndIdRequired": "OAuth Token and Organization ID are required",
  "api.accounting.apiTokenAndSlugRequired": "API Token and Company Slug are required",
  "api.accounting.syncLogFailed": "Could not load sync log",
  "api.accounting.providerNameRequired": "Accounting package name is required",
  "api.accounting.requestReceived": "Request received",
  "api.accounting.requestSendFailed": "Request could not be sent",
  "api.team.loadFailed": "Failed to load teams",
  "api.team.nameRequired": "Team name is required",
  "api.team.createFailed": "Failed to create team",
  "api.team.accessDenied": "Access denied",
  "api.team.updateFailed": "Failed to update team",
  "api.team.noFileUploaded": "No file uploaded",
  "api.team.logoUploadFailed": "Failed to upload logo",
  "api.team.logoDeleteFailed": "Failed to delete logo",
  "api.team.bookingEnableFailed": "Failed to enable team booking",
  "api.team.bookingDisableFailed": "Failed to disable team booking",
  "api.team.memberLoadFailed": "Failed to load team members",
  "api.team.nameEmailRequired": "Name and email are required",
  "api.team.memberNotFound": "Member not found",
  "api.team.memberUpdateFailed": "Failed to update team member",
  "api.team.memberRemoved": "Team member removed",
  "api.team.memberRemoveFailed": "Failed to remove team member",
  "api.team.startEndRequired": "start and end query params required",
  "api.team.calendarLoadFailed": "Failed to load team calendar",
  "api.team.appointmentNotFound": "Appointment not found",
  "api.team.teamMemberNotFound": "Team member not found",
  "api.team.assignFailed": "Failed to assign appointment",
  "api.team.unassignedLoadFailed": "Failed to load unassigned appointments",
  "api.team.suggestionsFailed": "Failed to get suggestions",
  "api.team.selectAtLeastOneCustomer": "Select at least one customer",
  "api.team.maxInvitations": "Maximum 50 invitations at a time",
  "api.team.bookingNotEnabled": "Team booking is not enabled",
  "api.team.noCustomersFound": "No customers found",
  "api.team.invitationsFailed": "Could not send invitations",
  "api.team.absencesLoadFailed": "Failed to load absences",
  "api.team.absenceMemberNotFound": "Member not found",
  "api.team.startEndDateRequired": "Start date and end date are required",
  "api.team.endAfterStart": "End date must be after start date",
  "api.team.absenceAddFailed": "Failed to add absence",
  "api.team.absenceDeleteFailed": "Failed to delete absence",
  "api.team.memberNotFoundForLink": "Team member not found.",
  "api.team.memberNoEmail": "This team member has no email address.",
  "api.team.magicLinkSent": "Magic link sent successfully.",
  "api.team.magicLinkFailed": "Something went wrong generating the link.",
  "api.team.teamIdStartDateRequired": "teamId and startDate are required",
  "api.team.smartMatchFailed": "Failed to generate smart matches",
  "api.team.invalidFileType": "Only JPG, PNG, SVG or WebP allowed",
  "api.team.memberLimitReached": "You can add a maximum of {max} team members on your current plan",
  "api.team.memberAddFailed": "Failed to add team member",
  "api.team.invitationsSent": "{count} invitation(s) sent",
  "api.accounting.jorttInvalidCredentials": "Invalid Jortt credentials — check Client ID and Client Secret",
  "api.accounting.jorttTokenError": "Jortt token error: HTTP {status}",
  "api.accounting.jorttNotConnected": "Jortt not connected — set up Client ID and Client Secret first",
  "api.accounting.jorttApiError": "Jortt API error: HTTP {status}",
  "api.accounting.odooAuthFailed": "Authentication failed — check your URL, database, username and API key",
  "api.accounting.odooNotConnected": "Odoo not connected",
  "api.accounting.moneybirdNotConnected": "Moneybird not connected",
  "api.accounting.moneybirdAuthFailed": "Moneybird authentication failed. Check your token and administration ID.",
  "api.accounting.invalidToken": "Invalid token",
  "api.accounting.quickbooksNotConnected": "QuickBooks not connected",
  "api.accounting.quickbooksAuthFailed": "QuickBooks authentication failed. Check your Access Token and Company ID.",
  "api.accounting.invalidOrExpiredToken": "Invalid or expired token",
  "api.accounting.zohoNotConnected": "Zoho Books not connected",
  "api.accounting.zohoAuthFailed": "Zoho authentication failed. Check your OAuth Token and region.",
  "api.accounting.fikenNotConnected": "Fiken not connected",
  "api.accounting.fikenAuthFailed": "Fiken authentication failed. Check your API Token and Company Slug.",
  "api.accounting.invalidApiToken": "Invalid API token",
  "api.accounting.fikenCompanyNotFound": "Company slug not found",
  "api.accounting.syncFailed": "Synchronization failed",
  "api.accounting.invoicesSynced": "{count} invoice(s) synchronized to {provider}",
  "api.accounting.customersSynced": "{synced} customer(s) synchronized to {provider}",
  "api.accounting.customerSyncFailed": "Customer synchronization failed",
  "api.accounting.invoicesMarkedPaid": "{count} invoice(s) marked as paid from {provider}",
  "api.accounting.noNewPaymentsFound": "{count} invoices checked, no new payments found",
  "api.accounting.paymentSyncFailed": "Payment synchronization failed",
  "api.accounting.sseCustomersFound": "{count} customers found. Fetching existing {provider} contacts...",
  "api.accounting.sseContactsFetched": "{count} {provider} contacts fetched (page {page})...",
  "api.accounting.sseContactsFetchFailed": "Could not fetch existing contacts: {error}",
  "api.accounting.sseSyncStarting": "{existing} existing contacts. Starting synchronization of {total} customers...",
  "api.accounting.logInvoiceSynced": "Invoice synchronized to {provider}",
  "api.accounting.logInvoicesSynced": "{count} invoices synchronized",
  "api.accounting.logSyncPartial": "{synced} synchronized, {failed} failed",
  "api.accounting.logCustomerSynced": "Customer synchronized to {provider}",
  "api.accounting.logCustomersSynced": "{synced} customers synchronized",
  "api.accounting.logInvoicesMarkedPaid": "{count} invoice(s) marked as paid",
  "api.accounting.logNoNewPayments": "No new payments found",
  "api.accounting.contactUpdateFailed": "Update failed: {error}",
  "dashboard.syncConnectCalendarFirst": "Connect a calendar in Settings first",
  "dashboard.syncPartiallyFailed": "Sync partially failed",
  "dashboard.syncCompleted": "Sync completed",
  "dashboard.syncUpToDate": "Calendars are up-to-date ✓",
  "dashboard.syncNetworkError": "Sync failed: network error",
  "dashboard.travelTimesCalculated": "Travel times calculated for {count} appointments",
  "dashboard.travelTimeCalcFailed": "Travel time calculation failed",
  "dashboard.selectDate": "Select a date",
  "dashboard.endDateBeforeStart": "End date cannot be before start date",
  "dashboard.blockedDaysFailed": "{count} day(s) could not be blocked",
  "dashboard.cannotIdentifyAppointment": "Cannot identify appointment",
  "dashboard.rescheduledTo": "{name} rescheduled to {time}",
  "dashboard.rescheduleFailed": "Reschedule failed",
  "dashboard.somethingWentWrong": "Something went wrong",
  "dashboard.searchingAlternatives": "Searching for alternative times...",
  "dashboard.noAlternativesFound": "No alternative times found for today",
  "dashboard.couldNotLoadAlternatives": "Could not load alternative times",
  "dashboard.noAppointmentsToMove": "No appointments to move",
  "dashboard.appointmentsMarkedForMove": "{count} appointments marked for rescheduling. Use the calendar to set exact times.",
  "dashboard.confirmReschedule": "Do you want to reschedule \"{name}\"?\n\nFrom: {from}\nTo: {to}\n\nThis gives you more time to get there.",
  "dashboard.confirmMoveOptimization": "Do you want to reschedule {count} appointment(s) from {from} to {to}?",
  "dashboard.notLoggedIn": "Not logged in",
  "smartReason": {
    "sameLocation": "Same location - no travel time",
    "afterNearby": "Right after nearby appointment",
    "afterPrevious": "After previous appointment",
    "remoteAvailable": "Available for remote appointment",
    "adjacentWorkshop": "Adjacent to workshop",
    "beforeNearby": "Right before nearby appointment",
    "beforeNext": "Before next appointment",
    "beforeWorkshop": "Before workshop appointment",
    "availableSlot": "Available time slot",
    "workshopAvailable": "Available in workshop",
    "fartherAway": "(farther away)",
    "regionDay": "(region day)",
    "noMembers": "No team members available",
    "noSlots": "No available time slots"
  },
  "customerDetail": {
    "customerDataUnavailable": "Customer data unavailable",
    "customerCreated": "Customer created",
    "couldNotSaveCustomer": "Could not save customer",
    "confirmDeleteCustomer": "Are you sure you want to delete this customer? This cannot be undone.",
    "customerDeleted": "Customer deleted",
    "couldNotDeleteCustomer": "Could not delete customer",
    "pianoNotFound": "Piano not found",
    "confirmDeletePiano": "Are you sure you want to delete ",
    "pianoDeleted": "Piano deleted",
    "couldNotDeletePiano": "Could not delete piano",
    "linkCopied": "Link copied!",
    "emailStatusFailed": "Failed",
    "emailStatusSent": "Sent",
    "emailTypeConfirmation": "Confirmation",
    "emailTypeReminder": "Reminder",
    "emailTypeCancellation": "Cancellation",
    "emailTypeBooking": "Booking",
    "emailTypeInvitation": "Tuning invitation",
    "emailTypeWelcome": "Welcome email",
    "emailTypeReschedule": "Reschedule",
    "noSubject": "(no subject)",
    "emailLoadError": "Error loading email log",
    "projectStatusPlanning": "Planning",
    "projectStatusActive": "Active",
    "projectStatusPaused": "Paused",
    "projectStatusCompleted": "Completed",
    "projectStatusCancelled": "Cancelled"
  }
}
