{
  "a11y": {
    "bold": "Bold",
    "decrement": "Decrease",
    "embeddedVideo": "Embedded video",
    "findMyLocation": "Find my location",
    "home": "Home",
    "increment": "Increase",
    "italic": "Italic",
    "link": "Link",
    "maxPrice": "Maximum price",
    "minPrice": "Minimum price",
    "openPicker": "Open picker",
    "remove": "Remove",
    "underline": "Underline",
    "uploadPreview": "Uploaded file {index}",
    "zoomIn": "Zoom in",
    "zoomOut": "Zoom out"
  },
  "account": {
    "changeEmail": "Change email",
    "changePassword": "Change password",
    "emailChangeConfirmed": "Your email has been updated.",
    "emailChangeInvalid": "This confirmation link is invalid or has expired.",
    "emailChangeSent": "Confirm the change via the link sent to your new email.",
    "emailTaken": "That email is already in use.",
    "newEmail": "New email",
    "noEmail": "Not set",
    "passwordHint": "Send a reset link to your email",
    "passwordResetSent": "We sent a password reset link to your email.",
    "telegram": {
      "hint": "Get notifications and reply to guests from Telegram",
      "link": "Link Telegram",
      "linked": "Linked",
      "title": "Telegram"
    }
  },
  "activity": {
    "activityType": {
      "Culture": "Culture",
      "Education": "Education",
      "Entertainment": "Entertainment",
      "Food": "Food & Drink",
      "Nature": "Nature",
      "Sports": "Sports",
      "Wellness": "Wellness"
    },
    "create": "Create Activity",
    "cutoffHint": "A departure stops being bookable this many minutes before it starts.",
    "cutoffMinutes": "Booking cut-off, minutes",
    "duration": "Duration (minutes)",
    "label": "{count, plural, =1 {Activity} other {Activities}}",
    "perPerson": "per person",
    "person": "person",
    "schedule": {
      "addTime": "Add time",
      "booked": "{count, plural, =1 {# booked} other {# booked}}",
      "capacity": "Seats per departure",
      "created": "{count, plural, =0 {Nothing new — those departures already exist} =1 {# departure created} other {# departures created}}",
      "deleteBlocked": "This departure has bookings and cannot be deleted.",
      "disableInstead": "Disable it",
      "empty": "No departures this month yet.",
      "generate": "Create departures",
      "label": "Schedule",
      "rule": "Add departures",
      "seatsLeft": "{count, plural, =1 {# seat left} other {# seats left}}",
      "times": "Time",
      "weekdays": "Weekdays"
    },
    "validation": {
      "createError": "Failed to create activity. Please try again.",
      "updateError": "Failed to update activity. Please try again."
    }
  },
  "admin": {
    "createConfirm": "A test key is issued right away and shown only once — be ready to copy it.",
    "createConfirmTitle": "Create merchant “{name}”?",
    "createMerchant": "Create Merchant",
    "created": "Created",
    "merchantList": "Merchants",
    "merchantName": "Merchant Name",
    "regenerate": "Regenerate key",
    "regenerateConfirm": "The current key stops working immediately — every integration using it has to be updated. The new key is shown once.",
    "regenerateConfirmTitle": "Regenerate the {mode} key?",
    "walletLabel": "Label (optional)",
    "walletLabelPlaceholder": "My wallet"
  },
  "agent": {
    "bucket": {
      "earlier": "Earlier",
      "today": "Today",
      "week": "Last 7 days",
      "yesterday": "Yesterday"
    },
    "collection": {
      "count": "{count, plural, =1 {# match} other {# matches}}",
      "empty": "No matches — try refining your query",
      "error": "Could not load this set",
      "openAll": "Open all {count, plural, =1 {match} other {matches}}",
      "title": "Matches for: {query}",
      "titleNoQuery": "A curated set for you"
    },
    "command": {
      "ambiguous": "Several entries are called “{key}” — pick one: {options}",
      "arg": {
        "key": "key"
      },
      "compact": "Compress the conversation history",
      "compactUnavailable": "Nothing to compress in a new conversation yet",
      "escape": "Start a message with // to send text that begins with /",
      "forget": "Forget something the agent remembers",
      "forgetAll": "Forget everything",
      "forgetAllMessage": "The agent will forget everything it remembers about you. This cannot be undone.",
      "forgetAllTitle": "Forget everything?",
      "forgetButton": "Forget",
      "forgotten": "Forgot “{key}”",
      "forgottenAll": "Memory cleared",
      "help": "Show available commands",
      "helpTitle": "Commands",
      "limit": "Turn limit reached — try again later",
      "memory": "Show what the agent remembers",
      "memoryEmpty": "The agent does not remember anything yet",
      "memoryTitle": "What the agent remembers",
      "new": "Start a new conversation",
      "notFound": "Nothing remembered under “{key}”",
      "nothingToCompact": "Nothing to compress",
      "unknown": "No such command: /{name}"
    },
    "compaction": {
      "done": "History compressed",
      "running": "Compressing history…"
    },
    "deleteConfirm": "This conversation will be removed permanently.",
    "deleteThread": "Delete conversation",
    "error": {
      "generic": "Something went wrong",
      "threadGone": "This conversation no longer exists"
    },
    "hint": "Describe what you're looking for in plain language.",
    "inputPlaceholder": "Ask anything…",
    "newThread": "New thread",
    "quickSearch": "Quick Search",
    "searchThreads": "Search conversations",
    "summary": "Earlier in this conversation",
    "title": "Ask AI",
    "tool": {
      "createCheckoutLink": "Preparing checkout",
      "deleteUserPreference": "Forgetting a preference",
      "failed": "{name} — failed",
      "getActivity": "Looking up the activity",
      "getActivityOffers": "Checking departures",
      "getUnit": "Looking up the stay",
      "getUnitAvailability": "Checking availability",
      "getUnitOffers": "Checking rates",
      "getUserBookings": "Checking your bookings",
      "getUserMemory": "Recalling preferences",
      "saveUserPreference": "Saving preference"
    },
    "untitled": "Untitled"
  },
  "auth": {
    "errorThrottle": "Too many attempts. Please try again later.",
    "sessionExpired": "Your session has ended. Please sign in again."
  },
  "booking": {
    "addChild": "Add child",
    "adults": "Adults",
    "all": "All",
    "approve": "Approve",
    "board": {
      "AllInclusive": "All inclusive",
      "BedAndBreakfast": "Breakfast included",
      "FullBoard": "Full board",
      "HalfBoard": "Half board",
      "RoomOnly": "Room only"
    },
    "book": "Book Now",
    "cancel": "Cancel Booking",
    "cancelConfirm": "Are you sure you want to cancel this booking?",
    "childUnderOne": "Under 1",
    "childYears": "{count, plural, one {# year} other {# years}}",
    "datesUnavailable": "Selected dates are not available",
    "escrowNote": "You won't be charged yet — funds escrow on host approval.",
    "guest": {
      "checkingIn": "Checking in",
      "title": "Who's checking in"
    },
    "hostSince": "Host since {year}",
    "infants": "Infants",
    "minStay": "{count, plural, =1 {Minimum stay is # night} other {Minimum stay is # nights}}",
    "night": "{count, plural, =1 {night} other {nights}}",
    "notFound": "Booking not found",
    "openChat": "Open Chat",
    "options": {
      "board": "Meals",
      "cancellation": "Cancellation",
      "chooseDeparture": "Choose a departure",
      "chooseRoom": "Choose a room",
      "feesAtProperty": "+{amount} taxes and fees at the property",
      "feesBelow": "taxes and fees below",
      "nonRefundable": "Non-refundable",
      "otherBoard": "Other meal plan",
      "picked": "selected",
      "priceChanged": "Prices or conditions changed. Please choose again.",
      "rateCount": "{count, plural, =1 {# rate} other {# rates}}",
      "refundable": "Free cancellation",
      "slotGone": "That departure is no longer available. Please pick another.",
      "stayUnit": "/ {count, plural, =1 {night} other {# nights}}",
      "taxesIncluded": "Taxes included",
      "unavailable": "These dates just became unavailable. Try different dates.",
      "unavailableCell": "unavailable",
      "viewPhotos": "View photos"
    },
    "pay": {
      "bookAgain": "Book again",
      "bridging": "Payment is bridging to Solana — this can take a few minutes and resumes automatically.",
      "expired": "This payment window has closed. Anything already sent is being returned to your wallet.",
      "info": {
        "cctp": "USDC moves from your EVM wallet into the Solana escrow via Circle CCTP. Any refund is paid in USDC to your Solana wallet — not the EVM wallet you paid from.",
        "cctpLink": "How CCTP works",
        "solana": "Your payment is held in an on-chain escrow and released to the host after check-in. If the booking is cancelled, the full amount returns to the wallet you paid from."
      },
      "method": "Payment Method",
      "now": "Pay Now",
      "processing": "Payment accepted — confirming on-chain, this can take up to a minute.",
      "qrHint": "Scan to pay",
      "submitted": "Payment submitted",
      "window": "Payment is expected within a limited time.",
      "windowClosed": "The payment window is closing.",
      "windowLeft": "Time left to pay: {time}."
    },
    "payout": {
      "held": "In escrow · auto-payout to host after {date}",
      "label": "Payout",
      "paid": "Paid out {amount} → {address}",
      "processing": "Payout processing…",
      "refunded": "Refunded",
      "resolved": "Dispute resolved"
    },
    "pets": "Pets",
    "phase": {
      "approved": "Confirmed",
      "cancelled": "Cancelled",
      "completed": "Completed",
      "declined": "Declined",
      "dispute": "In dispute",
      "disputeFavorGuest": "Resolved for guest",
      "disputeFavorHost": "Resolved for host",
      "disputeResolving": "Dispute settling",
      "expired": "Expired",
      "paid": "In escrow",
      "pending": "Awaiting payment",
      "refunding": "Refund processing",
      "requested": "Requested"
    },
    "refund": "Refund",
    "refundConfirm": "Confirm refund",
    "refundPreview": "You'll get back {amount} {currency}",
    "refundProcessing": "Refund accepted — settling on-chain, this can take up to a minute.",
    "refundRequest": "Request refund",
    "request": "Booking request",
    "search": "Search by booking or unit ID…",
    "settled": "Paid in escrow",
    "statusApproved": "Approved",
    "statusPending": "Pending",
    "stays": "Stays",
    "supply": {
      "approved": "Confirmed with the hotel",
      "cancelDisputeOpen": "Cancellation isn't available while a dispute is open.",
      "cancelledBySupplier": "We couldn't confirm this stay with the hotel.",
      "confirming": "Confirming your stay with the hotel…",
      "note": "Pay by card. The hotel confirms your stay after payment.",
      "payTitle": "Complete payment",
      "reference": "Reference: {reference}",
      "refundNote": "Any refund follows the hotel's cancellation policy.",
      "sessionInvalid": "This payment session is no longer valid. Cancel this booking and book again."
    },
    "toSettle": "To pay in escrow",
    "tripDetails": "Trip Details"
  },
  "cancellation": {
    "addTier": "Add tier",
    "beforeDate": "Before {date}",
    "beforeHours": "{count, plural, one {# hour before check-in} other {# hours before check-in}}",
    "error": {
      "increasing": "Refund can’t increase as check-in approaches.",
      "range": "Refund must be between 0 and 100%.",
      "zeroTier": "Add exactly one tier at 0 hours (the final refund)."
    },
    "label": "Cancellation policy",
    "leadHours": "Hours before check-in",
    "preset": {
      "flexible": "Flexible",
      "moderate": "Moderate",
      "strict": "Strict"
    },
    "refund": "{percent, number, ::percent .##} refund",
    "refundPercent": "Refund %",
    "tier": "Tier {index}"
  },
  "chat": {
    "accept": "Accept",
    "bookingTitle": "Booking #{id}",
    "copy": "Copy",
    "deleteChat": "Delete chat",
    "edited": "(edited)",
    "emptyMessage": "Message cannot be empty",
    "filterAll": "All",
    "forward": "Forward",
    "forwardTitle": "Forward to…",
    "forwarded": "Forwarded",
    "forwardedFrom": "Forwarded from {username}",
    "group": {
      "addMembers": "Add members",
      "created": "Group created",
      "demoteAdmin": "Demote to member",
      "infoTitle": "Group info",
      "makeAdmin": "Make admin",
      "memberAdded": "Member added",
      "memberRemoved": "Member removed",
      "name": "Group name",
      "online": "{count} online",
      "permissions": {
        "changeInfo": "Change group info",
        "changeInfoHint": "Edit group name and avatar.",
        "deleteMessages": "Delete messages",
        "deleteMessagesHint": "Delete any message in the chat.",
        "inviteUsers": "Invite users",
        "inviteUsersHint": "Add new members to the group.",
        "manageAdmins": "Manage admins",
        "manageAdminsHint": "Promote or demote other members.",
        "pinMessages": "Pin messages",
        "pinMessagesHint": "Pin and unpin messages in the chat.",
        "removeUsers": "Remove users",
        "removeUsersHint": "Remove members from the group.",
        "saved": "Permissions updated",
        "title": "Permissions"
      },
      "removeMember": "Remove",
      "removeMemberConfirm": "Remove {username}?",
      "removeMemberHint": "They will lose access to the chat history.",
      "roleAdmin": "Admin",
      "roleOwner": "Owner",
      "updated": "Group updated",
      "uploadAvatar": "Upload avatar"
    },
    "invitePending": "{username} invited you to chat",
    "lastSeen": {
      "long": "offline for a while",
      "recent": "recently online",
      "today": "Last seen at {time}",
      "yesterday": "Last seen yesterday at {time}"
    },
    "members": "{count, plural, one {# member} other {# members}}",
    "messageDeleted": "Message deleted",
    "messagePlaceholder": "Type a message…",
    "new": {
      "ai": "New AI chat",
      "aiDesc": "Plan a trip with Pinns AI",
      "group": "New group",
      "groupDesc": "Pick up to 50 people",
      "invite": "Invite to Pinns",
      "inviteCopied": "Invite link copied",
      "inviteDesc": "Share a link — works on any device",
      "message": "New message",
      "messageDesc": "Search by username or @handle",
      "search": "Search by name or @handle…",
      "title": "Start a conversation",
      "users": "Users"
    },
    "newChat": "New chat",
    "noChatSelected": "Select a chat to start messaging",
    "online": "Online",
    "reply": "Reply",
    "replyingTo": "Replying to {username}",
    "searchChats": "Search chats…",
    "sectionBookings": "Bookings",
    "sectionDirect": "Direct",
    "sectionGroups": "Groups",
    "sortName": "By name",
    "sortRecent": "Most recent",
    "sortUnread": "Unread first",
    "system": {
      "DisputeOpened": "Dispute opened",
      "DisputeResolvedFavorGuest": "Dispute resolved in favor of the guest",
      "DisputeResolvedFavorHost": "Dispute resolved in favor of the host",
      "SupportJoined": "Support joined the chat"
    },
    "typing": "{user} is typing…",
    "typingMultiple": "{count, plural, one {# person is typing…} other {# people are typing…}}",
    "viewListing": "View listing",
    "voice": {
      "denied": "Allow microphone access in your browser to record voice messages",
      "hint": "Hold to record a voice message",
      "recording": "Recording a voice message",
      "unavailable": "Microphone is not available"
    }
  },
  "comment": {
    "empty": "No comments yet",
    "hideReplies": "Hide replies",
    "placeholder": "Add a comment…",
    "reply": "Reply",
    "replyPlaceholder": "Write a reply…",
    "viewReplies": "View replies ({count})"
  },
  "common": {
    "activities": "Activities",
    "activityType": "Activity Type",
    "add": "Add",
    "address": "Address",
    "anyTime": "any time",
    "area": "Area",
    "attach": "Attach media",
    "back": "Back",
    "balance": "Balance",
    "booking": "Booking",
    "bookings": "Bookings",
    "cancel": "Cancel",
    "chats": "Chats",
    "checkEmail": "Check your email",
    "checkIn": "Check-in",
    "checkOut": "Check-out",
    "close": "Close",
    "collapse": "Collapse",
    "completed": "Completed",
    "confirm": "Confirm",
    "contentLanguage": "Written in {language}",
    "copied": "Copied",
    "copy": "Copy",
    "country": "Country",
    "create": "Create",
    "currency": "Currency",
    "decline": "Decline",
    "defaultPlace": "Bangkok",
    "delete": "Delete",
    "deleteConfirm": "Are you sure you want to delete this?",
    "details": "Details",
    "disputes": "Disputes",
    "edit": "Edit",
    "email": "Email",
    "error": "Something went wrong. Please try again.",
    "favorites": "Favorites",
    "firstName": "First name",
    "firstNamePlaceholder": "Jane",
    "guestsCount": "{count, plural, one {1 guest} other {# guests}}",
    "hourShort": "h",
    "howItWorks": "How it works",
    "language": "Language",
    "lastName": "Last name",
    "lastNamePlaceholder": "Doe",
    "login": "Login",
    "mapArea": "Map area",
    "minuteShort": "m",
    "next": "Next",
    "ok": "OK",
    "openDetail": "Open details",
    "or": "or",
    "password": "Password",
    "pause": "Pause",
    "payments": "Payments",
    "peopleCount": "{count, plural, one {1 person} other {# people}}",
    "phone": "Phone",
    "play": "Play",
    "previous": "Previous",
    "price": "Price",
    "profile": "Profile",
    "reason": "Reason",
    "retry": "Retry",
    "save": "Save",
    "search": "Search",
    "send": "Send",
    "settings": "Settings",
    "showOnMap": "Show on map",
    "showOriginal": "Show original",
    "showTranslation": "Show translation",
    "signup": "Sign Up",
    "statistics": "Statistics",
    "status": "Status",
    "theme": {
      "dark": "Dark",
      "light": "Light"
    },
    "thisArea": "this area",
    "today": "Today",
    "total": "Total",
    "translatedFrom": "Translated from {language}",
    "username": "Username",
    "wallet": "Wallet",
    "yesterday": "Yesterday"
  },
  "confirmEmail": {
    "backToSettings": "Back to settings",
    "errorText": "This link is invalid or has expired.",
    "errorTitle": "Confirmation failed",
    "successText": "Your email address has been changed.",
    "successTitle": "Email updated",
    "title": "Email change",
    "verifying": "Confirming your new email…"
  },
  "consent": {
    "accept": "Accept",
    "text": "We use cookies to see how Pinns is used and make it better.",
    "title": "Cookies"
  },
  "create": {
    "activity": {
      "desc": "Tour, class, tasting, experience — booked per person or per group.",
      "title": "An activity"
    },
    "heading": "What do you want to list?",
    "start": "Start",
    "step1": {
      "desc": "Photos, price, rules. Goes live right away — free.",
      "title": "Describe & publish"
    },
    "step2": {
      "desc": "Guests book and pay into escrow. Chat to arrange details.",
      "title": "Get bookings"
    },
    "step3": {
      "desc": "KYC + tax info before your first payout (required by law).",
      "title": "Verify to get paid"
    },
    "subtitle": "Publishing is free and takes a few minutes. You can verify your identity and add payout details later — they're only needed before you get paid.",
    "unit": {
      "desc": "Apartment, cottage, room, B&B — anything guests can book by night.",
      "title": "A place to stay"
    }
  },
  "dateRange": {
    "selectDates": "Select dates"
  },
  "destination": {
    "activities": "{count, plural, =1 {# activity} other {# activities}}",
    "allActivities": "All activities in {city}",
    "allCountries": "All countries",
    "allStays": "All stays in {city}",
    "empty": "No destinations yet",
    "heading": "Where to stay in {city}",
    "intro": "Cities where hosts are taking bookings right now.",
    "monthly": "about {price} a month",
    "nearby": "Nearby cities",
    "popular": "Popular destinations",
    "reviews": "{count, plural, =1 {# review} other {# reviews}}",
    "search": "Search cities",
    "showAll": "Show all {count, plural, =1 {# city} other {# cities}}",
    "stays": "{count, plural, =1 {# stay} other {# stays}}",
    "title": "Destinations",
    "topActivities": "Things to do",
    "topStays": "Top places to stay"
  },
  "dispute": {
    "all": "All",
    "date": "Date",
    "favorGuest": "Favor Guest",
    "favorGuestResult": "Resolved in your favor",
    "favorHost": "Favor Host",
    "favorHostResult": "Resolved in favor of host",
    "filterOpen": "Open",
    "filterResolved": "Resolved",
    "goToDispute": "Go to Dispute",
    "noResolution": "No resolution provided",
    "notFound": "Dispute not found",
    "open": "Open Dispute",
    "outcome": "Outcome",
    "reasonPlaceholder": "Describe the issue…",
    "resolution": "Resolution",
    "resolutionPlaceholder": "Describe the resolution…",
    "resolve": "Resolve",
    "resolveConfirm": "Are you sure you want to resolve this dispute?",
    "resolving": "Verdict accepted — the arbiter is settling it on-chain.",
    "statusOpen": "Open",
    "statusResolved": "Resolved",
    "windowClosed": "Dispute window expired",
    "windowNotStarted": "Dispute window opens after check-in",
    "windowRemaining": "{hours}h {minutes}m left to open a dispute"
  },
  "empty": {
    "activities": "No activities yet",
    "bookings": "No bookings yet",
    "chats": "No chats yet",
    "conversations": "No conversations yet",
    "devices": "No other devices",
    "disputes": "No disputes yet",
    "favorites": "No favorites yet",
    "likes": "No liked posts yet",
    "listings": "No listings yet",
    "merchants": "No merchants yet",
    "messages": "No messages yet",
    "options": "Nothing found",
    "posts": "No posts yet",
    "reviews": "No reviews yet",
    "units": "No places yet",
    "users": "No users found",
    "wallets": "No wallets configured"
  },
  "error": {
    "loginFailed": "Login failed",
    "signupFailed": "Signup failed"
  },
  "escrow": {
    "disputeTextA": "An arbiter splits the amount between you and the host.",
    "disputeTextB": "Our fee stays at the rate fixed at booking.",
    "disputeTitle": "Dispute",
    "lead": "Hosts verify their identity before they can list, every agreement stays in your chat, and cancellations follow the terms you see before you book. If something goes wrong, an arbiter settles the dispute, and crypto payments wait in escrow until check-in.",
    "refundTextA": "The money goes back to your wallet —",
    "refundTextB": "in full or in part, per the cancellation terms.",
    "refundTitle": "Cancellation",
    "releaseTextA": "After check-in, minus our fee.",
    "releaseTextB": "Anyone can trigger it — we can't hold it back.",
    "releaseTitle": "Payout to the host",
    "title": "Your payment is safe."
  },
  "favorites": {
    "savedPlaces": "{count, plural, one {# saved place} other {# saved places}}"
  },
  "feed": {
    "empty": "Your feed is empty. Follow people to see their posts.",
    "scope": {
      "following": "Following",
      "nearby": "Nearby",
      "trending": "Trending"
    },
    "title": "Feed"
  },
  "filter": {
    "active": "Active",
    "apply": "Apply",
    "availability": "Availability",
    "clear": "Clear",
    "duration": "Duration",
    "durationMax": "Max minutes",
    "durationMin": "Min minutes",
    "options": "Options",
    "priceRange": "Price Range",
    "rating": "Rating",
    "sortBest": "Best",
    "stars": "Hotel stars",
    "title": "Filters"
  },
  "footer": {
    "allRights": "All rights reserved.",
    "contactLine": "Got questions? Drop us a line at <a>{email}</a>",
    "cookies": "Cookies",
    "privacy": "Privacy policy",
    "terms": "Terms of use"
  },
  "forgot": {
    "backToLogin": "Back to login",
    "sentText": "If {email} is registered, a reset link is on its way.",
    "submit": "Send reset link",
    "subtitle": "Enter your email and we'll send you a reset link.",
    "title": "Reset password"
  },
  "gallery": {
    "showAll": "Show all photos"
  },
  "home": {
    "agentCta": "Try AI search",
    "agentText": "Describe what you want in plain language — quiet villa near the sea, pet-friendly apartment for a week — and let the assistant find matches and check availability.",
    "agentTitle": "Search smarter with AI",
    "aiSearch": {
      "fusion": {
        "badge": "Hybrid",
        "caption": "Keyword matches and meaning matches merge into one list with Reciprocal Rank Fusion. Places found both ways rise to the top.",
        "text": "Keyword and meaning matches merged into one list.",
        "title": "Hybrid ranking"
      },
      "label": "Pinns AI search",
      "mapCta": "Open the map",
      "meaning": {
        "badge": "Embeddings",
        "caption": "Your request and every place are turned into embeddings. The closest by meaning come first, even when they share no words with what you typed.",
        "text": "Describe the trip in your own words — AI finds places that fit.",
        "title": "Smart search"
      },
      "rag": {
        "badge": "RAG",
        "caption": "Retrieval-augmented generation: the best matches become the assistant’s context, it checks availability and rates with its tools, and every claim in the answer points to a place.",
        "text": "Say what you want — it finds real places and gets the booking ready.",
        "title": "Just ask"
      },
      "scene": {
        "absent": "none of them says {words}",
        "absentCalm": "“calm” or “work”",
        "absentPets": "“dog” or “kids”",
        "answer": "Garden studio [1] fits best: a monthly rate, a desk by the window and free Dec 1–14 at $41 a night. Seafront cabin [3] is right on a quiet bay for $68. Jungle bungalow [2] is the quietest, but it is booked from Dec 10.",
        "capAnswer": "answer · grounded in real places",
        "capByKeywords": "by keywords",
        "capByMeaning": "by meaning · embeddings",
        "capClosest": "closest by meaning · cosine",
        "capContext": "context for the assistant",
        "capEmbedding": "query → embedding",
        "capFused": "fused · top 5",
        "capInventory": "stays and activities",
        "capKeywords": "keywords",
        "capMeaning": "meaning",
        "capRetrieved": "retrieved · top 4 by cosine",
        "capRrf": "reciprocal rank fusion",
        "capTools": "tools",
        "matched": "↳ matched by meaning:",
        "queryCalm": "somewhere calm to work for a month",
        "queryFusion": "quiet place by the sea",
        "queryPets": "a place for my dog and two kids near the water",
        "queryRag": "quiet place by the sea for two weeks in December, under $70",
        "rankKeywords": "keywords #{rank}",
        "rankMeaning": "meaning #{rank}",
        "rrf": "Σ 1 / ({k} + rank)",
        "statusFusion": "keywords + meaning → one ranking",
        "statusMeaningBusy": "comparing embeddings",
        "statusMeaningDone": "{count, plural, one {# place fits by meaning} other {# places fit by meaning}}",
        "statusRagReady": "answer ready",
        "statusRagRetrieve": "retrieving by meaning",
        "statusRagTools": "checking with tools"
      }
    },
    "communityCta": "Open feed",
    "communityEyebrow": "Community",
    "communityText": "Real moments from hosts and travellers — bakery finds, sunrise hikes, last-minute openings.",
    "communityTitle": "From travellers you follow",
    "communityTitleTrending": "Trending in the community",
    "demo": {
      "areas": {
        "banTai": "Ban Tai",
        "chaloklum": "Chaloklum",
        "haadRin": "Haad Rin",
        "haadSalad": "Haad Salad",
        "haadYuan": "Haad Yuan",
        "srithanu": "Srithanu",
        "thongNaiPan": "Thong Nai Pan",
        "thongSala": "Thong Sala"
      },
      "cities": {
        "bali": "Bali",
        "kohPhangan": "Koh Phangan"
      },
      "kinds": {
        "apartment": "apartment",
        "bungalow": "bungalow",
        "cabin": "cabin",
        "class": "class",
        "hostel": "hostel",
        "house": "house",
        "loft": "loft",
        "rental": "rental",
        "retreat": "retreat",
        "spa": "spa",
        "studio": "studio",
        "tour": "tour",
        "villa": "villa"
      },
      "places": {
        "bambooBungalow": {
          "name": "Bamboo bungalow"
        },
        "beachApartment": {
          "hit": "the sand starts behind the gate and a playground next door",
          "name": "Beach apartment",
          "text": "Ground floor, the sand starts behind the gate and a playground next door."
        },
        "beachBarLoft": {
          "name": "Beach bar loft",
          "text": "Above the busiest bar on the beach, music until late every night."
        },
        "beachHostel": {
          "name": "Beach hostel"
        },
        "boatAngThong": {
          "name": "Boat to Ang Thong",
          "text": "A day on the water with kayaking and lunch on a sandbar."
        },
        "cityLoft": {
          "name": "City loft",
          "text": "Twelfth floor in Denpasar with a gym and a coworking desk."
        },
        "cliffVilla": {
          "name": "Cliff villa"
        },
        "cookingClass": {
          "name": "Cooking class",
          "text": "Cook four Thai dishes in a family kitchen and take the recipes home."
        },
        "familyVilla": {
          "hit": "Fenced garden, pets welcome and a shallow pool",
          "name": "Family villa",
          "text": "Fenced garden, pets welcome and a shallow pool the little ones can stand in."
        },
        "gardenStudio": {
          "hit": "Monthly rate, a desk by the window",
          "name": "Garden studio",
          "text": "Monthly rate, a desk by the window and no traffic on the lane after eight."
        },
        "jungleBungalow": {
          "hit": "Only birds and the creek in the morning",
          "name": "Jungle bungalow",
          "text": "Only birds and the creek in the morning; the owner offers 30-day stays at a discount."
        },
        "nightMarketTour": {
          "name": "Night market tour",
          "text": "Two hours of street food with a local guide, twelve tastings included."
        },
        "partyBarBySea": {
          "name": "Party bar by the sea"
        },
        "partyHostel": {
          "name": "Party hostel",
          "text": "Bunk beds, a bar on the ground floor and the full moon party five minutes away."
        },
        "poolHouse": {
          "name": "Pool house"
        },
        "quietCabin": {
          "hit": "No neighbours, fast wifi",
          "name": "Quiet cabin"
        },
        "quietCoveHouse": {
          "name": "Quiet cove house"
        },
        "riceFieldHouse": {
          "hit": "the walled yard is fine for a puppy",
          "name": "Rice-field house",
          "text": "Two bedrooms with bunk beds; the walled yard is fine for a puppy too."
        },
        "scooterRental": {
          "name": "Scooter rental",
          "text": "Automatic scooters with two helmets, delivered to your door."
        },
        "seaBreezeStudio": {
          "name": "Sea breeze studio"
        },
        "seaViewVilla": {
          "hit": "a long table on the terrace and fibre internet",
          "name": "Sea-view villa",
          "text": "Three bedrooms over the bay, a long table on the terrace and fibre internet that holds a video call."
        },
        "seafrontCabin": {
          "hit": "Ten steps from a quiet bay",
          "name": "Seafront cabin"
        },
        "seashellBungalow": {
          "name": "Seashell bungalow"
        },
        "snorkelTrip": {
          "name": "Snorkel trip",
          "text": "Boat to the reef, masks included, turtles most mornings."
        },
        "spaDay": {
          "name": "Spa day",
          "text": "Massage, flower bath and tea in a garden pavilion."
        },
        "surfHostel": {
          "name": "Surf hostel",
          "text": "Dorm rooms for surfers, board storage and early breakfast at five."
        },
        "volcanoSunrise": {
          "name": "Volcano sunrise",
          "text": "A 2 am pickup, a two-hour climb and breakfast at the crater rim."
        },
        "yogaRetreat": {
          "name": "Yoga retreat",
          "text": "Silent mornings and adults only, a week of practice in the hills."
        }
      }
    },
    "destinationsAll": "All destinations",
    "destinationsTitle": "Popular destinations",
    "explore": "Explore",
    "heroSubtitle": "The whole trip in one place: find it on the map, sort it out in chat, share how it went with friends",
    "heroTitle": "Trips that actually feel local",
    "linkBook": "Book",
    "prices": {
      "axisHint": "price vs the cheapest",
      "badge": "Price calendar",
      "booked": "booked",
      "cheapest": "cheapest",
      "closed": "closed by host",
      "december": "December",
      "from": "From",
      "hint": "Hover a night to see its price",
      "january": "January",
      "newYear": "New Year",
      "nights": "{count, plural, one {# night} other {# nights}}",
      "nightsIn": "{count, plural, one {# night} other {# nights}} · {city}",
      "open": "Open",
      "openLabel": "Nights still open",
      "openNote": "of {total} nights · {window}",
      "peakLabel": "Peak vs cheapest night",
      "peakNote": "busiest vs cheapest",
      "place": "Place",
      "ratioMore": "{ratio} and more",
      "save": "Save a place",
      "savedLabel": "Cheapest saved night",
      "tableLabel": "Nightly prices",
      "text": "Prices change every night. See where they dip, save a place and book when it gets cheaper.",
      "tipCheapest": "{price} · the cheapest night",
      "tipRatio": "{price} · {ratio} the cheapest",
      "title": "Know the cheapest night"
    },
    "trending": "Trending"
  },
  "host": {
    "booking": {
      "answerBy": "reply by {date} or the request is declined",
      "chat": "Chat with guest",
      "declineConfirm": "Decline this booking request? This cannot be undone."
    },
    "calendar": {
      "pick": "Pick a listing"
    },
    "dispute": {
      "answerArbitration": "Reply to arbitration"
    },
    "kpi": {
      "awaiting": "Awaiting reply",
      "bookings": "Bookings",
      "disputes": "Open disputes",
      "products": "Listings",
      "reviewable": "Awaiting your review"
    },
    "kyc": {
      "ready": "Verified — you can publish listings"
    },
    "moderation": {
      "approve": "Approve",
      "declineReason": "Decline reason",
      "empty": "Nothing awaits moderation"
    },
    "nav": {
      "account": "Account",
      "main": "Main",
      "money": "Money",
      "products": "Listings"
    },
    "product": {
      "blocked": {
        "kyc": "Verify your identity to publish listings",
        "payout": "Add a Solana payout address to publish listings"
      },
      "createAndPublish": "Create and publish",
      "declinedReason": "Reason: {reason}",
      "deleteBlocked": "This listing has live bookings — unlist it instead",
      "deleteConfirm": "Delete this listing for good?",
      "earned": "Earned",
      "empty": "No listings yet",
      "notFound": "Listing not found",
      "publish": "Publish",
      "tab": {
        "bookings": "Bookings",
        "calendar": "Calendar",
        "reviews": "Reviews",
        "stats": "Statistics"
      },
      "unlist": "Unlist"
    },
    "queue": {
      "answer": "Reply",
      "bookingTitle": "Booking request #{id}",
      "count": "{count, plural, one {# task} other {# tasks}}",
      "disputeMeta": "Booking #{id}",
      "disputeTitle": "Dispute #{id}",
      "empty": "Nothing to do — every booking and review is handled",
      "fix": "Fix",
      "review": "Write a review",
      "reviewMeta": "Checked out {date}",
      "title": "Needs your action"
    },
    "review": {
      "empty": "Nothing to review right now",
      "outgoing": "Visible only to you — publishes in {count, plural, one {# day} other {# days}}",
      "stay": "Stay #{id}"
    },
    "schedule": {
      "pick": "Pick an activity"
    },
    "section": {
      "balance": "Balance and payouts",
      "bookings": "Bookings",
      "calendar": "Calendar and rates",
      "disputes": "Disputes",
      "kyc": "Verification and payouts",
      "moderation": "Moderation",
      "overview": "Overview",
      "products": "All listings",
      "reviews": "Reviews",
      "schedule": "Activity schedule",
      "stats": "Statistics"
    },
    "title": "Hosting"
  },
  "invoice": {
    "completed": "Payment completed successfully!",
    "expired": "Invoice has expired",
    "failed": "Payment failed",
    "payWithWallet": "Pay with Wallet",
    "processing": "Processing payment…",
    "refund": "Refund required",
    "statusTitle": "Invoice Status",
    "title": "Invoice",
    "transactionFailed": "Transaction failed",
    "transactionNotConfirmed": "Transaction not confirmed",
    "waitingForPayment": "Waiting for payment…"
  },
  "kyc": {
    "Pending": "Pending",
    "Rejected": "Rejected",
    "Unverified": "Not verified",
    "Verified": "Verified",
    "approve": "Approve",
    "approveToast": "Verification approved",
    "dateOfBirth": "Date of birth",
    "decision": "Decision",
    "docType": {
      "DriverLicense": "Driver's license",
      "IdCard": "ID card",
      "Passport": "Passport"
    },
    "document": "Document {n}",
    "documentType": "Document type",
    "documents": "Documents",
    "goVerify": "Go to verification",
    "label": "Verification",
    "legalName": "Legal name",
    "noAccess": "Verification unavailable",
    "pendingNote": "Complete the form to start verification. Supported: images and PDF.",
    "reject": "Reject",
    "rejectReason": "Rejection reason",
    "rejectReasonPlaceholder": "Reason shown to the applicant",
    "rejectToast": "Verification rejected",
    "rejectedNote": "Your submission was rejected.",
    "resubmit": "Resubmit",
    "reviewedAt": "Reviewed",
    "submit": "Submit for review",
    "submitToast": "Submitted for review",
    "title": "Identity verification",
    "underReview": "Your documents are under review.",
    "validation": {
      "required": "Fill in all fields and upload your documents"
    },
    "verifiedNote": "Your identity is verified."
  },
  "ledger": {
    "empty": "No transactions yet",
    "history": "Transaction history",
    "status": {
      "Encumbered": "On hold",
      "Pending": "Pending",
      "Settled": "Settled",
      "Voided": "Voided"
    },
    "txType": {
      "Adjustment": "Adjustment",
      "Bonus": "Bonus",
      "DirectPay": "Payment",
      "DisputeResolve": "Dispute resolution",
      "EscrowDeposit": "Escrow deposit",
      "EscrowRefund": "Refund",
      "EscrowRelease": "Payout",
      "EscrowResolve": "Dispute resolution",
      "Refund": "Refund",
      "SupplyEarned": "Supply earnings",
      "SupplyReversed": "Supply reversal",
      "Withdrawal": "Withdrawal"
    }
  },
  "legal": {
    "cookies": "Cookie Policy",
    "imprint": "Legal Notice",
    "privacy": "Privacy Policy",
    "terms": "Terms of Service",
    "updated": "Last updated {date}"
  },
  "listing": {
    "basicsLabel": "Basics",
    "completeness": "Completeness",
    "descriptionLabel": "Description",
    "livePreview": "Live preview",
    "location": "Location",
    "maxGuests": "{count, plural, =1 {# Guest} other {# Guests}}",
    "maxGuestsLabel": "Max guests",
    "media": "Photos & Videos",
    "options": {
      "add": "Add option",
      "hint": "An option is a variant of the same activity — group or private, with or without transfer — each with its own price and photos. Leave this empty to sell at a single price.",
      "item": "Option {index}",
      "label": "Options",
      "priceLocked": "Price is calculated from your options.",
      "remove": "Remove option",
      "title": "Option name"
    },
    "placeCount": "{count, plural, =1 {place} other {places}}",
    "requiredFields": "Please fill in all required fields",
    "tags": "Tags",
    "tagsPlaceholder": "Search tags…",
    "title": "Title"
  },
  "location": {
    "coordinates": "Coordinates",
    "outOfService": "This point is outside our service area. Pick a spot on land within a country.",
    "searchPlaceholder": "Search address…"
  },
  "login": {
    "continueWith": "Continue with {provider}",
    "forgotPassword": "Forgot password?",
    "heading": "Welcome back",
    "noAccount": "Don't have an account?",
    "orContinueWith": "or continue with",
    "passwordInput": "Enter password",
    "signupLink": "Sign up here",
    "subtitle": "Sign in to continue your trip",
    "title": "Login",
    "usernameInput": "Enter username",
    "welcome": "Welcome back, {name}"
  },
  "logout": {
    "allDevices": "Sign out on all devices",
    "message": "Are you sure you want to sign out?",
    "title": "Sign Out"
  },
  "map": {
    "unavailable": "The map is unavailable right now. Try again later.",
    "unsupported": "Your browser can’t display the map."
  },
  "media": {
    "aspect": "Aspect",
    "zoom": "Zoom"
  },
  "merchant": {
    "address": {
      "add": "Add address",
      "addressPlaceholder": "Solana wallet address",
      "cooldown": "Available {date}",
      "cooldownInfo": "A new address can be used for withdrawals 24 hours after it's added.",
      "empty": "No addresses yet",
      "ready": "Ready",
      "remove": "Remove address",
      "removeConfirm": "Remove this withdrawal address?",
      "title": "Withdrawal addresses"
    },
    "balance": {
      "available": "Available",
      "empty": "No funds yet — sales revenue will appear here."
    },
    "closeConfirm": "Close this merchant? It stays active until the balance is withdrawn and all escrows are settled.",
    "closeConfirmTitle": "Close merchant",
    "fee": {
      "label": "Fee",
      "max": "Between 0 and {max}% — the contract rejects anything higher",
      "note": "Applies to new bookings only — deals already open keep the rate they were created with.",
      "saved": "Fee saved — it applies to new bookings"
    },
    "keyModal": {
      "copy": "Copy key",
      "title": "Secret key for {name}",
      "warning": "Copy it now — it's shown only once and can't be recovered."
    },
    "live": {
      "activate": "Activate live",
      "activated": "Live is active. Its wallet is empty — fund it before running real payments.",
      "completed": "Live was already open — the missing custody wallet has been rebuilt. Your existing live key still works.",
      "confirm": "Activating live opens the real-money books for this merchant and issues its live key — shown once. The live custody wallet is created empty and has to be funded before it can settle anything.",
      "confirmTitle": "Activate live mode",
      "info": "Live runs alongside test — its own key, wallet and balances."
    },
    "mode": {
      "Live": "Live",
      "LiveHint": "Real money",
      "Test": "Test",
      "TestHint": "Test data"
    },
    "provision": {
      "action": "Re-apply settings",
      "confirm": "The backend compares its view of the merchant with what is written on chain and fixes the difference. Running it again is safe: if the two already agree, nothing happens.",
      "confirmTitle": "Re-apply the {mode} settings?",
      "requested": "Re-apply requested"
    },
    "provisioning": "Setting up the custody wallet and on-chain config — this usually takes a few seconds.",
    "provisioningFailed": "Setup is taking longer than usual. Press “Re-apply settings” to finish the bootstrap.",
    "status": {
      "Active": "Active",
      "Pending": "Provisioning…",
      "Terminated": "Closed",
      "Terminating": "Closing…"
    },
    "terminating": "Closing this merchant — withdrawing the balance and settling open escrows.",
    "withdraw": "Withdraw",
    "withdrawal": {
      "amount": "Amount",
      "approve": "Approve",
      "count": "{count} records",
      "date": "Date",
      "empty": "No withdrawals yet",
      "handled": "This request has already been handled.",
      "history": "Withdrawal history",
      "net": "Receiver gets {amount}",
      "noAddresses": "Add a withdrawal address and wait out the 24-hour cooldown before you can withdraw.",
      "receiver": "Receiver address",
      "receiverSelect": "Select destination address",
      "reject": "Reject",
      "status": {
        "Approved": "Approved",
        "Completed": "Completed",
        "Failed": "Failed",
        "Manual": "Manual",
        "Pending": "Pending",
        "Rejected": "Rejected",
        "Sending": "Sending",
        "Submitted": "Submitted"
      },
      "title": "Withdraw {currency}"
    }
  },
  "navbar": {
    "menu": {
      "feed": "Feed",
      "map": "Map"
    },
    "search": {
      "activities": "Activities",
      "activitiesNone": "No activities with that name",
      "agent": "Ask the assistant",
      "agentRequest": "Assistant request",
      "askAgent": "Ask the assistant “{query}”",
      "askAgentEmptyHint": "e.g. “villa with a pool under $80”",
      "askAgentHint": "Finds options from your description",
      "cancel": "Cancel",
      "clear": "Clear",
      "clearRecent": "Clear",
      "close": "Close search",
      "hotels": "Hotels",
      "hotelsNone": "No hotels with that name",
      "label": "Search",
      "nearby": "Near me",
      "nearbyHint": "Stays around you on the map",
      "nothingText": "Sounds like a trip description — the assistant will find options by meaning.",
      "nothingTitle": "No such place or hotel",
      "placeType": {
        "address": "Address",
        "city": "City",
        "country": "Country",
        "district": "District",
        "region": "Region"
      },
      "placeholder": "City, area or hotel — or describe what you’re looking for",
      "placeholderShort": "City, area or hotel",
      "places": "Places",
      "placesNone": "No places with that name",
      "popular": "Popular destinations",
      "quickStart": "Quick start",
      "recent": "Recent",
      "suggestions": "Suggestions"
    }
  },
  "notification": {
    "chatUnread": "{name} · {count, plural, =1 {# new message} other {# new messages}}",
    "comment": "{name} {others, plural, =0 {commented on your post} other {and # more commented on your post}}",
    "empty": "No notifications yet",
    "likeComment": "{name} {others, plural, =0 {liked your comment} other {and # more liked your comment}}",
    "likePost": "{name} {others, plural, =0 {liked your post} other {and # more liked your post}}",
    "post": "{name} published a new post",
    "referralRewarded": "Referral reward credited to your balance",
    "reply": "{name} {others, plural, =0 {replied to your comment} other {and # more replied to your comment}}",
    "reviewReplied": "{name} {others, plural, =0 {replied to your review} other {and # more replied to your review}}",
    "title": "Notifications"
  },
  "oauth": {
    "allow": "Allow access",
    "checking": "Checking the app…",
    "deny": "Cancel",
    "invalidText": "The link is missing required parameters. Go back to the app and try again.",
    "invalidTitle": "Invalid request",
    "requestText": "Continue only if you recognise this app.",
    "requestTitle": "{client} wants access to your account",
    "scope": {
      "bookingsRead": "See your bookings",
      "memory": "Remember your preferences",
      "none": "Search and checkout links only"
    },
    "title": "App access",
    "unknownClient": "This app or its callback address isn't registered with Pinns. Go back to the app and start again."
  },
  "page": {
    "activityDetail": {
      "description": "{title} in {city}, {country}. {price} per person.",
      "title": "{title}, {city}: from {price} per person — Pinns"
    },
    "activitySearch": {
      "description": "Tours, excursions and experiences near you. Ask the host anything in chat, book in a couple of minutes and share the trip in the feed.",
      "title": "Activities, tours and excursions — Pinns"
    },
    "cookies": {
      "description": "Which cookies and local storage Pinns uses for signing in, your language and analytics, why each one is needed, and how to change your choice at any time.",
      "title": "Cookie Policy — Pinns"
    },
    "destination": {
      "title": "{city}, {country}: hotels, stays and things to do — Pinns",
      "titlePrice": "{city}, {country}: hotels and stays from {price}, things to do — Pinns"
    },
    "destinations": {
      "description": "Cities with places to stay and things to do, booked directly with hosts and guides. Find your next trip — from buzzing capitals to quiet seaside towns.",
      "title": "Destinations — where to travel with Pinns"
    },
    "error": {
      "message": "Something went wrong on our side. Please try again.",
      "retry": "Try again",
      "title": "Something went wrong — Pinns"
    },
    "imprint": {
      "description": "Who operates Pinns, the company details behind the platform, and how to reach us about a booking, a listing, a legal notice or a press enquiry.",
      "title": "Legal Notice — Pinns"
    },
    "index": {
      "description": "Describe the trip in your own words — AI finds the stays, hotels and activities. Book in a couple of taps, pay by card or in crypto.",
      "title": "Stays, hotels and activities for your trip — Pinns"
    },
    "login": {
      "description": "Your bookings, chats with hosts, saved places and friends’ trips — right where you left them. Sign in by email, Google or GitHub.",
      "title": "Log in to Pinns — bookings, chats and saved places"
    },
    "notFound": {
      "backHome": "Go Home",
      "message": "The page you are looking for does not exist",
      "title": "Page not found — Pinns"
    },
    "place": {
      "description": "Book {product, select, Activity {tours and activities} other {hotels and stays}} in {city} online at great prices. Choose from {count, plural, one {# option} other {# options}} with real photos and reviews.",
      "title": "{product, select, Activity {Tours and activities} other {Hotels and stays}} in {city} — Pinns",
      "titlePrice": "Hotels and stays in {city} from {price} a night — Pinns"
    },
    "privacy": {
      "description": "What data Pinns collects when you book, host or chat, who receives it, how long it is kept, and how to access, correct or delete everything we hold.",
      "title": "Privacy Policy — Pinns"
    },
    "profile": {
      "description": "{name} on Pinns: the host's listings, activities and posts, reviews left by guests and a direct way to get in touch before you book.",
      "title": "{name} — profile on Pinns"
    },
    "signup": {
      "description": "Book stays and activities, share your trips in the feed. List your own place and get paid out in crypto through on-chain escrow.",
      "title": "Sign up for Pinns — stays, hotels and activities"
    },
    "terms": {
      "description": "The rules for booking stays and activities on Pinns, listing a place of your own, paying through crypto escrow, and how cancellations and refunds work.",
      "title": "Terms of Service — Pinns"
    },
    "unitDetail": {
      "description": "{title} ({type}) in {city}, {country}. From {price} per night{guests, plural, =0 {} =1 {, up to # guest} other {, up to # guests}}.",
      "title": "{title}, {city}: from {price} a night — Pinns"
    },
    "unitSearch": {
      "description": "Apartments, houses and hotels, from private hosts and hotel partners. Filters, honest guest reviews, payment by card or in crypto.",
      "title": "Stays and hotels: apartments, houses, rooms — Pinns"
    }
  },
  "payment": {
    "card": "Card",
    "crypto": "Crypto",
    "label": "Payment"
  },
  "post": {
    "comment": "Comment",
    "composer": "New post",
    "like": "Like",
    "linkCopied": "Post link copied",
    "notFound": "Post not found",
    "placeholder": "Share something…",
    "publish": "Publish",
    "share": "Share",
    "title": "Post"
  },
  "product": {
    "from": "from {price}",
    "nearby": "Nearby",
    "related": "You might also like",
    "relatedEmpty": "Nothing to show here yet",
    "relatedUnavailable": "Nothing nearby is free for these dates",
    "similar": "Similar",
    "status": {
      "Active": "Listed",
      "Declined": "Rejected",
      "Deleted": "Deleted",
      "Draft": "Draft",
      "Pending": "In review",
      "Unlisted": "Unlisted"
    }
  },
  "profile": {
    "bio": "Bio",
    "bioPlaceholder": "Tell people about yourself…",
    "birthday": "Birthday",
    "changeCover": "Change cover",
    "city": "City",
    "displayName": "Display name",
    "displayNamePlaceholder": "How your name appears",
    "follow": "Follow",
    "followers": "Followers",
    "following": "Following",
    "interests": "Interests",
    "joined": "Joined {date}",
    "languages": "Languages",
    "languagesPlaceholder": "Add languages…",
    "linkCopied": "Profile link copied",
    "message": "Message",
    "noFollows": "Nobody here yet",
    "notFound": "User not found",
    "notifyOff": "Turn off new post notifications",
    "notifyOn": "Notify about new posts",
    "phoneCountry": "Country code",
    "phonePlaceholder": "Enter your phone",
    "region": "Region",
    "saveInterests": "Save interests",
    "saveTravels": "Save travels",
    "share": "Share",
    "social": {
      "add": "Add link",
      "instagram": "Instagram",
      "selectType": "Choose network…",
      "telegram": "Telegram",
      "website": "Website",
      "x": "X"
    },
    "socialLinks": "Social links",
    "solanaAddress": "Solana payout address",
    "solanaAddressInvalid": "Not a valid Solana address",
    "solanaAddressNote": "Only a Solana wallet address is accepted — booking payouts are sent straight to it.",
    "solanaAddressPlaceholder": "Your Solana wallet address",
    "speaks": "Speaks {languages}",
    "tabs": {
      "likes": "Likes",
      "listings": "Listings",
      "posts": "Posts",
      "reviews": "Reviews"
    },
    "unfollow": "Unfollow",
    "updateSuccess": "Profile updated successfully",
    "visited": "{count, plural, =0 {Visited countries} one {Visited · # country} other {Visited · # countries}}"
  },
  "referral": {
    "admin": {
      "currency": "Bonus currency",
      "daysUnit": "days",
      "defaultRate": "Default rate",
      "deleteConfirm": "Remove this personal rate? The user falls back to the default.",
      "maxAmount": "Max bonus per booking",
      "maxBookings": "Bookings with a bonus",
      "newRate": "New personal rate",
      "percent": "Percent per booking",
      "saved": "Rate saved",
      "title": "Referral rates",
      "updated": "Updated {date}",
      "userId": "User id",
      "userRate": "Personal rate · user {id}",
      "windowDays": "Valid after sign-up"
    },
    "copied": "Invite link copied",
    "copy": "Copy invite link",
    "limitAmount": "up to {amount} per stay",
    "limitBookings": "{count, plural, =1 {their first booking} other {their first # bookings}}",
    "limitWindow": "{count, plural, =1 {within # day of signing up} other {within # days of signing up}}",
    "payout": "Credited once your friend checks out, as a bonus in your balance.",
    "terms": "Earn {percent}% of every completed booking your friends make",
    "title": "Invite a friend"
  },
  "region": {
    "action": {
      "import": "Update places",
      "rebuild": "Rebuild",
      "remove": "Remove supplier",
      "reset": "Reset cursor",
      "sync": "Run sync",
      "terminate": "Delete country"
    },
    "add": "Add country",
    "addSupplier": "Add {supplier}",
    "basemap": {
      "Detail": "Basemap: served countries",
      "World": "Basemap: world",
      "built": "Built {date} · {size}",
      "failed": "Build failed {date}: {error}",
      "notBuilt": "Not built yet",
      "rebuildStarted": "Basemap rebuild started"
    },
    "catalogSync": "Catalog sync",
    "clearHistory": "Clear history",
    "confirm": {
      "clearHistory": "Delete every finished job from the history?",
      "deleteJob": "Delete this job from history?",
      "remove": "Remove {supplier} from {country}? Its listings are unpublished.",
      "reset": "Reset the {supplier} cursor? The next sync walks the catalog from the start; imported listings stay.",
      "terminate": "Delete {country}? Supplier listings are unpublished and imported data is removed."
    },
    "importStarted": "Places update started",
    "jobStatus": {
      "Completed": "Completed",
      "Failed": "Failed",
      "Running": "Running"
    },
    "jobType": {
      "Backfill": "Backfill",
      "Incremental": "Incremental",
      "Retire": "Unpublish"
    },
    "jobs": "Job history",
    "jobsEmpty": "No jobs yet",
    "lastPage": "Crawled to page {page}",
    "metric": {
      "created": "Created",
      "deleted": "Deleted",
      "failed": "Failed",
      "pages": "Pages",
      "probed": "Probed",
      "skipped": "Skipped",
      "unchanged": "Unchanged",
      "unparsed": "Unparsed",
      "updated": "Updated"
    },
    "neverSynced": "Not crawled yet",
    "pausedByRegion": "Paused with the country",
    "places": "Places",
    "placesFailed": "Import failed {date}: {error}",
    "placesImported": "Places: {count, number}, imported {date}",
    "placesNotImported": "Places not imported yet",
    "regions": "Countries",
    "regionsEmpty": "No countries yet",
    "status": {
      "Active": "Active",
      "Paused": "Paused",
      "Terminated": "Deleted",
      "Terminating": "Deleting"
    },
    "syncOff": "Sync not enabled",
    "syncedUntil": "Synced until {date}",
    "title": "Regions",
    "world": "Rest of the world: countries and cities"
  },
  "reset": {
    "errorInvalid": "This reset link is invalid or has expired.",
    "invalidText": "This reset link is missing or malformed. Request a new one.",
    "invalidTitle": "Invalid link",
    "requestNew": "Request a new link",
    "submit": "Update password",
    "subtitle": "Choose a strong new password for your account.",
    "success": "Password updated. Please log in.",
    "title": "Set a new password"
  },
  "review": {
    "content": "Your review",
    "contentPlaceholder": "Share your experience…",
    "create": "Write a Review",
    "hidden": "Visible only to you until the other side posts or the window closes",
    "hint": {
      "1": "Terrible",
      "2": "Poor",
      "3": "Average",
      "4": "Good",
      "5": "Excellent"
    },
    "reply": "Reply",
    "replyPlaceholder": "Write a reply…",
    "replySend": "Send reply",
    "stars": "Rating",
    "title": "Reviews",
    "windowClosed": "The review window has closed"
  },
  "security": {
    "devices": {
      "current": "This device",
      "error": "Failed to load devices",
      "lastSeen": {
        "long": "Inactive for a while",
        "recent": "Active just now",
        "today": "Active at {time}",
        "yesterday": "Active yesterday at {time}"
      },
      "refresh": "Refresh",
      "revoke": "Revoke",
      "revokeConfirm": "Revoke {label}?",
      "revokeHint": "The device will be signed out immediately.",
      "revokedToast": "Device revoked",
      "title": "Active devices",
      "unknownDevice": "Unknown device",
      "unknownDeviceWithDate": "Device added {date}"
    },
    "push": {
      "denied": "Permission blocked. Open browser settings to allow notifications.",
      "label": "Push notifications",
      "unsupported": "Push notifications are not supported in this browser."
    }
  },
  "selector": {
    "searchPlaceholder": "Search…"
  },
  "settings": {
    "account": "Account"
  },
  "signup": {
    "alreadyHaveAccount": "Already have an account?",
    "checkEmailText": "We sent a verification link to {email}. Open it to activate your account.",
    "confirmPassword": "Confirm Password",
    "confirmPasswordInput": "Confirm password",
    "errorTaken": "That email or username is already taken.",
    "heading": "Create account",
    "loginLink": "Login here",
    "resend": "Resend email",
    "resent": "Verification email sent again.",
    "strength": {
      "fair": "Fair",
      "good": "Good",
      "strong": "Strong",
      "weak": "Weak"
    },
    "subtitle": "Start exploring in 30 seconds",
    "title": "Sign Up",
    "validation": {
      "confirmPasswordError": "Passwords do not match",
      "confirmPasswordSuccess": "✓ Passwords match",
      "emailError": "Please enter a valid email address",
      "emailSuccess": "✓ Valid email",
      "passwordError": "Password: 8-32 chars, uppercase, lowercase, number, special (#$^+=!*()@%&)",
      "passwordSubmit": "Password must be 8-32 characters with uppercase, lowercase, number and special character",
      "passwordSuccess": "✓ Strong password",
      "usernameError": "Username: 4-24 chars, alphanumeric, no leading _ or .",
      "usernameSubmit": "Username must be 4-24 characters, alphanumeric only, cannot start with _ or .",
      "usernameSuccess": "✓ Valid username"
    }
  },
  "stats": {
    "allCurrencies": "All",
    "approved": "Approved",
    "balance": "Balance",
    "bookingCount": "{count, plural, =1 {# booking} other {# bookings}}",
    "byCurrency": "By currency",
    "byProduct": "By product",
    "currencies": "Currencies",
    "earnings": "Earnings",
    "export": "Download statement",
    "flow": "Flow (in/out)",
    "gmv": "GMV",
    "in": "In",
    "invoices": "Invoices",
    "noData": "No data available",
    "noMerchant": "No merchant selected",
    "out": "Out",
    "paidOut": "Paid out",
    "peakCurrency": "Top: {currency}",
    "peakStatus": "Top: {status}",
    "pending": "Pending payout",
    "range": {
      "1y": "1y",
      "30d": "30d",
      "7d": "7d",
      "90d": "90d",
      "all": "All",
      "ytd": "YTD"
    },
    "refunds": "Refunds",
    "statusDistribution": "Status distribution",
    "tab": {
      "bookings": "Bookings",
      "earnings": "Earnings",
      "overview": "Overview",
      "revenue": "Platform revenue"
    },
    "takeRate": "Take rate",
    "totalBookings": "Total bookings",
    "totalCount": "{count} total",
    "transactions": "Transactions",
    "txCount": "{count, plural, =1 {# transaction} other {# transactions}}",
    "walletCount": "{count, plural, =1 {# wallet} other {# wallets}}",
    "walletsTitle": "Payment wallets"
  },
  "toast": {
    "attachment": {
      "failed": "Attachment failed: {reason}"
    },
    "booking": {
      "Approved": "Booking #{id} approved",
      "Cancelled": "Booking #{id} cancelled",
      "Completed": "Booking #{id} completed",
      "Declined": "Booking #{id} declined",
      "Expired": "Booking #{id} expired",
      "Pending": "Booking #{id} is awaiting payment",
      "Refunding": "Booking #{id} refund is processing",
      "Requested": "New booking request #{id}"
    },
    "chatInvite": "New chat invite",
    "chatMemberAddedSelf": "You were added to a chat",
    "chatMemberRemovedSelf": "You were removed from a chat",
    "deviceRevokedSelf": "This device was signed out",
    "dispute": {
      "Open": "Dispute opened for booking #{bookingId}",
      "Resolved": "Dispute on booking #{bookingId} resolved",
      "Resolving": "Dispute on booking #{bookingId} is settling"
    },
    "geo": {
      "permissionDenied": "Location access denied. Enable it in Settings → Privacy → Location Services.",
      "timeout": "Couldn't get your location in time. Try again.",
      "unavailable": "Location unavailable on this device."
    },
    "invoice": {
      "Cancelled": "Invoice #{id} cancelled",
      "Completed": "Invoice #{id} completed",
      "Expired": "Invoice #{id} expired",
      "Failed": "Invoice #{id} failed",
      "Pending": "Invoice #{id} is pending",
      "Refund": "Invoice #{id} refunded"
    },
    "merchant": {
      "active": "Your merchant is ready to accept payments",
      "terminated": "The merchant is closed",
      "walletCreated": "The custody wallet is ready"
    },
    "product": {
      "approved": "Listing #{productId} is live",
      "declined": "Listing #{productId} was declined"
    }
  },
  "unit": {
    "amenities": "Amenities",
    "amenityType": {
      "AirConditioning": "Air conditioning",
      "AirportShuttle": "Airport shuttle",
      "Balcony": "Balcony",
      "Bar": "Bar",
      "Breakfast": "Breakfast",
      "Dryer": "Dryer",
      "Elevator": "Elevator",
      "EvCharger": "EV charger",
      "Fireplace": "Fireplace",
      "Fitness": "Gym",
      "Heating": "Heating",
      "HotTub": "Hot tub",
      "Kitchen": "Kitchen",
      "LuggageStorage": "Luggage storage",
      "Parking": "Parking",
      "Pool": "Pool",
      "Restaurant": "Restaurant",
      "RoomService": "Room service",
      "Sauna": "Sauna",
      "Spa": "Spa",
      "Stove": "Stove",
      "Tv": "TV",
      "Washer": "Washer",
      "WheelchairAccessible": "Wheelchair accessible",
      "WiFi": "Wi-Fi",
      "Workspace": "Workspace"
    },
    "area": "{size} m²",
    "areaLabel": "Area",
    "bathrooms": "{count, plural, =1 {# Bathroom} other {# Bathrooms}}",
    "bathroomsLabel": "Bathrooms",
    "bedrooms": "{count, plural, =1 {# Bedroom} other {# Bedrooms}}",
    "bedroomsLabel": "Bedrooms",
    "calendar": {
      "closed": "Closed",
      "label": "Calendar",
      "legendClosed": "Closed",
      "legendImported": "From an external calendar",
      "legendOverride": "Overridden",
      "maxNights": "Max nights",
      "mergeHint": "An empty field is left as it is. Use “Clear overrides” to fall back to the base values.",
      "minNights": "Min nights",
      "pickRange": "Pick a date or a range",
      "quantity": "Rooms available",
      "reset": "Clear overrides",
      "resetConfirm": "Clear every override on the selected dates and fall back to the base values?",
      "saved": "Calendar updated",
      "scope": "Applies to",
      "scopeUnit": "The whole property",
      "selection": "{from} — {to}",
      "sync": {
        "add": "Add calendar",
        "added": "Calendar connected",
        "broken": "The link stopped working. Last successful sync: {date}. The dates it already blocked stay until it is fixed.",
        "copied": "Link copied",
        "copy": "Copy calendar link",
        "deleteConfirm": "Disconnect this calendar? Its blocked dates will be released.",
        "empty": "No external calendars yet",
        "exportHint": "Paste this link into Airbnb → Import calendar so your Pinns bookings block those dates too. They refresh it every few hours.",
        "exportTitle": "Export to other sites",
        "importHint": "In Airbnb: Listing → Availability → Sync calendars → Export. Booking and VRBO use the same format. We refresh every hour.",
        "name": "Name",
        "neverSynced": "Not synced yet",
        "syncedAt": "Synced {date} · {count, plural, =0 {no blocked ranges} =1 {# blocked range} other {# blocked ranges}}",
        "title": "External calendars",
        "url": "iCal link"
      }
    },
    "checkInTime": "Check-in time",
    "checkOutTime": "Check-out time",
    "city": "City",
    "create": "Create Unit",
    "instant": "Instant booking",
    "label": "{count, plural, =1 {Unit} other {Units}}",
    "locationHeading": "Location",
    "maxNightsLabel": "Max nights",
    "minNights": "{count, plural, =1 {min # night} other {min # nights}}",
    "minNightsLabel": "Min nights",
    "notFound": "Unit not found",
    "petsAllowed": "Pets allowed",
    "prepaid": "Prepaid",
    "property": "Property type",
    "rates": {
      "add": "Add rate",
      "enabled": "Available for booking",
      "feesAtProperty": "Fees at the property",
      "hint": "A rate is one combination of price, meals and cancellation terms — for example, breakfast included, non-refundable. Rates here sell the whole place; to sell rooms separately, price them inside each room below.",
      "item": "Rate {index}",
      "label": "Rates",
      "remove": "Remove rate"
    },
    "reviewCount": "{count, plural, =1 {# review} other {# reviews}}",
    "rooms": {
      "add": "Add room",
      "hint": "A room is a category with its own photos and prices. Leave this empty if the place is rented as a whole.",
      "item": "Room {index}",
      "label": "Rooms",
      "quantity": "Rooms of this type",
      "remove": "Remove room",
      "sizeSqm": "Size, m²",
      "title": "Room name"
    },
    "sleepsLabel": "Sleeps",
    "starRating": "{count, plural, one {# star} other {# stars}}",
    "tagsMaxReached": "Maximum {max} tags allowed",
    "unitType": {
      "Apartment": "Apartment",
      "Campsite": "Campsite",
      "Chalet": "Chalet",
      "Cottage": "Cottage",
      "Hostel": "Hostel",
      "Hotel": "Hotel",
      "House": "House",
      "Loft": "Loft",
      "Resort": "Resort",
      "Studio": "Studio",
      "Villa": "Villa"
    },
    "validation": {
      "createError": "Failed to create unit. Please try again.",
      "updateError": "Failed to update unit. Please try again."
    },
    "verifiedHost": "Verified host"
  },
  "upload": {
    "dropOrClick": "Drop files here or click to upload",
    "maxReached": "Maximum {max} files reached",
    "uploading": "Wait for the upload to finish"
  },
  "user": {
    "balance": {
      "available": "Available to withdraw",
      "empty": "Your balance is empty — funds from completed bookings (escrow payouts) will appear here.",
      "inDispute": "In Dispute",
      "inEscrow": "In escrow"
    },
    "logout": "Logout"
  },
  "verify": {
    "errorExpired": "This verification link has expired. Please sign up again.",
    "errorTaken": "This account is already verified. Please log in.",
    "errorText": "This link is invalid or has expired. Try signing up again.",
    "errorTitle": "Verification failed",
    "signupAgain": "Sign up again",
    "title": "Email verification",
    "verifying": "Verifying your email…"
  },
  "wallet": {
    "add": "Add Wallet",
    "cctp": {
      "chain": {
        "arbitrum": "Arbitrum",
        "avalanche": "Avalanche",
        "base": "Base",
        "ethereum": "Ethereum",
        "optimism": "Optimism",
        "polygon": "Polygon"
      },
      "noSolana": "Connect a Solana wallet first — refunds are paid to it",
      "step": {
        "approving": "Approve USDC in your wallet…",
        "building": "Preparing transaction…",
        "burning": "Confirm the transfer…",
        "relaying": "Bridging to Solana…"
      }
    },
    "connect": "Connect another",
    "disconnect": "Disconnect",
    "method": {
      "cctp": "EVM (CCTP)",
      "solana": "Solana"
    },
    "notConnected": "Wallet not connected",
    "step": {
      "awaiting-signature": "Confirm in your wallet…",
      "building": "Preparing transaction…"
    },
    "viewAddress": "View address on explorer",
    "viewTx": "View transaction"
  }
}
