{"analytics":{"other":"Other","page_title":"Analytics","tabs":{"reservations":"Reservations","reviews":"Reviews","store":"Guest Store","tasks":"Tasks","financials":"FinOps","staff":"Staff","groups":{"guest_experience":"Guest Experience","ops":"Operations","inbox":"Inbox"}},"filters":{"date_range":"Date Range","date_aggregate":"Group By","date_search_type_label":"Date by","properties":"Properties","booking_source":"Booking Source","reservation_status":"Status","review_source":"Review Source","review_status":"Review Status","rating":"Rating","department":"Department","department_worked":"Worked in department","task_status":"Task Status","task_priority":"Priority","assignee":"Assignee","approval_status":"Approval Status"},"occupancy_chart":{"title":"Nightly occupancy","description":"Booked nights per day within the selected date range","booked_nights":"Booked nights","peak_label":"Peak {unit}","lowest_label":"Lowest {unit}","nights_booked_count":"{count, plural, one {# night booked} other {# nights booked}}","unit":{"daily":"night","weekly":"week","monthly":"month","quarterly":"quarter"}},"kpis":{"total_reservations":"Reservations","check_ins":"Check-ins","check_outs":"Check-outs","avg_length_of_stay":"Avg Stay","cancellation_rate":"Cancellations","occupancy_rate":"Occupancy","average_daily_rate":"Daily Rate","rev_pan":"RevPAN","returning_guest_rate":"Returning Guests","avg_booking_lead_time":"Avg Lead Time (days)","total_reviews":"Total Reviews","average_rating":"Avg Rating","dispute_rate":"Dispute Rate","avg_cleanliness_rating":"Avg Cleanliness","all_time_rating":"All-Time Rating","unaddressed_reviews":"Needs Attention","review_cta_clicks":"Review Link Clicks","total_revenue":"Total Revenue","approval_rate":"Approval Rate","total_tasks":"Total Tasks","completion_rate":"Completion","avg_completion_time":"Avg Time","overdue_rate":"Overdue","blocking_tasks":"Blocking","recurring_task_completion":"Recurring","estimate_accuracy":"Est. vs Actual","total_staff":"Active Staff","avg_completion_rate":"Avg Completion Rate","avg_staff_cleanliness":"Avg Cleanliness Rating","total_spend":"Total Spend","total_estimated":"Total Estimated","budget_variance":"Budget Variance","avg_cost_per_task":"Avg Cost / Task","financial_approval_rate":"Approval Rate","avg_on_time_rate":"On-Time Rate","occupancy_excludes_unlinked":"Excludes stays not linked to a property."},"charts":{"reservations_over_time":"Reservations Over Time","by_date":"By date","by_booking_source":"By Booking Source","by_property":"By Property","showing_top":"Showing top {count}","day_of_week":"Day of the Week","day_of_week_desc":"Check-in and check-out analysis","length_of_stay":"Length of Stay","length_of_stay_desc":"Distribution by number of nights","reviews_over_time":"Reviews Over Time","by_source":"By Source","top_properties":"Top Rated Properties","highest_rated":"Highest rated","bottom_properties":"Lowest Rated Properties","needs_attention":"Needs attention","top_groups":"Top Rated Groups","highest_rated_groups":"Highest rated","bottom_groups":"Lowest Rated Groups","needs_attention_groups":"Needs attention","rating_distribution":"Rating Distribution","rating_distribution_desc":"Number of reviews by star rating","tasks_over_time":"Tasks Over Time","by_department":"By Department","by_status":"By Status","by_priority":"By Priority","priority_desc":"Task distribution by priority level","financial_spend_over_time":"Spend Over Time","financial_by_property":"Spend by Property","financial_by_department":"Spend by Department","financial_by_approval_status":"Approval Pipeline","by_rating_category":"Ratings by Category","by_rating_category_desc":"Average score per category, from the channels that break one out","by_survey_category":"By Survey Category","staff_completion_trend":"Task Completion Trend","staff_completion_trend_desc":"Tasks created vs completed over time","department_comparison":"Department Comparison","department_comparison_desc":"Completion rate by department"},"staff":{"name":"Name","departments":"Departments","department_filter_description":"Filters task activity by department. The departments under each name are the member's own department memberships, and may differ from the departments selected here.","tasks":"Tasks","completed":"Completed","completion_rate":"Completion %","on_time_rate":"On-Time %","avg_duration":"Avg Duration","reviews":"Reviews","avg_rating":"Avg Rating","task_completion":"Task Completion","latest_rating":"Latest Rating","reviews_section":"Reviews","total_reviews":"Total reviews","avg_cleanliness":"Avg cleanliness","most_recent":"Most recent","no_tasks_completed":"No tasks completed yet","no_activity":"No activity recorded for this period.","on_time":"On-Time %","cleanliness":"Cleanliness","no_tasks":"No tasks","task_leaderboard":"Task Leaderboard","recent_tasks":"Recent Tasks","recent_reviews":"Recent Reviews","untitled_task":"Untitled","status_triage":"Triage","status_not_started":"Not Started","status_in_progress":"In Progress","status_paused":"Paused","status_completed":"Completed","status_cancelled":"Cancelled"},"staff_table":{"title":"Staff Performance Leaderboard","showing_members":"{count} staff members"},"reviews_table":{"title":"Reviews","property":"Property","source":"Source","rating":"Rating","cleanliness":"Cleanliness","reservation_code":"Reservation","status":"Status","review_cta_clicked":"Clicked review link","review_cta_airbnb":"Airbnb","review_cta_external":"Custom link","date":"Date","showing_reviews":"{count} reviews","showing_range":"Showing {start}–{end} of {total}","public_review":"Public Review","private_feedback":"Private Feedback","no_reviews":"No review text available","select_status":"Select status","status_updated":"Review status updated","checkin_date":"Check-in: {date}","tasks_before_checkin":"Tasks done before this stay","tasks_before_checkin_desc":"Tasks completed 1 month before the guest's check-in. Use this list to identify who worked on the unit and when, to help determine potential causes of review issues.","no_tasks_before_checkin":"No tasks found before check-in","low":"Low","analyze":"Analyze with AI","analyzing":"Analyzing...","ai_analysis":"AI Analysis","re_analyze":"Re-analyze","analysis_error":"Analysis failed. Try again.","pros":"Pros","cons":"Cons","tasks_created":"Tasks Created ({count})","already_tracked":"Already tracked","matches":"Matches: {title}","no_tasks":"No actionable tasks found","extract":"From review","previous_page":"Previous page","next_page":"Next page","view_review":"View review details","open_guest_photo":"Open guest photo {number}"},"export":{"button":"Export CSV","loading":"Exporting...","success":"Export complete"},"empty":{"reservations":"No reservations found for the selected filters.","reviews":"No reviews found for the selected filters.","upsells":"No portal orders found for the selected filters.","store":"No store activity found for the selected filters.","tasks":"No tasks found for the selected filters.","staff":"No staff activity found for the selected filters.","financials":"No financial data found for the selected filters."},"chart_empty":{"title":"No data available","description":"Try expanding your date range or adjusting filters."},"error":{"query_failed":"Failed to load analytics data. Please try again.","export_failed":"Export failed. Please try again."},"trend":{"vs_previous_period":"Compared to the previous period of equal length","new":"New","new_tooltip":"No data in the prior period to compare against","no_data_this_period":"No activity recorded in this period"},"chart_labels":{"reservations":"Reservations","check_ins":"Check-ins","check_outs":"Check-outs","reviews":"Reviews","avg_rating":"Avg Rating","orders":"Orders","revenue":"Revenue ($)","count":"Count","created":"Created","completed":"Completed","overdue":"Overdue","tasks":"Tasks","actual":"Actual","estimated":"Estimated","spend":"Spend","completion_rate":"Completion","days_short":"{count}d","nights_short":"{count}n"},"enums":{"task_status":{"triage":"Triage","not_started":"Not Started","in_progress":"In Progress","paused":"Paused","completed":"Completed","cancelled":"Cancelled"},"task_priority":{"watch":"Watch","low":"Low","medium":"Medium","high":"High","urgent":"Urgent"},"reservation_status":{"inquiry":"Inquiry","declined":"Declined","expired":"Expired","canceled":"Canceled","closed":"Closed","reserved":"Reserved","confirmed":"Confirmed","awaiting_payment":"Awaiting Payment","blocked":"Blocked"},"booking_source":{"airbnb":"Airbnb","booking_com":"Booking.com","vrbo":"VRBO","expedia":"Expedia","american_express_travel":"American Express Travel","direct":"Direct","direct___manual":"Direct (Manual)","direct___group_booking":"Direct (Group Booking)","hopper":"Hopper","marriot_homes___villa":"Marriott Homes & Villa","home_to_go":"HomeToGo","travel_staytion":"Travel Staytion","agoda":"Agoda","whimstay":"WhimStay","trip_com":"Trip.com","blueground":"Blueground","homeaway":"HomeAway","unknown":"Unknown","google_vacation_rentals":"Google Vacation Rentals","owner_stay":"Owner Stay","employee_stay":"Employee Stay","suiteop":"SuiteOp","operations___cleaning":"Operations (Cleaning)"},"review_source":{"airbnb":"Airbnb","booking_com":"Booking.com","vrbo":"VRBO","check_in_survey":"Check-in Survey","check_out_survey":"Check-out Survey","suiteop":"SuiteOp","direct":"Direct","google":"Google"},"review_category":{"cleanliness":"Cleanliness","checkin":"Check-in","communication":"Communication","value":"Value","location":"Location","accuracy":"Accuracy"},"review_dispute_status":{"received":"Received","dispute":"Dispute","awaiting_reply":"Awaiting Reply","reviewed":"Reviewed","denied":"Denied","approved":"Approved"},"upsell_type":{"advertisement":"Advertisement","request":"Request","postcard":"Postcard","purchase":"Purchase"},"upsell_stage":{"inquiry":"Inquiry","requested":"Requested","approved":"Approved","delivered":"Delivered","denied":"Denied","awaiting_payment":"Awaiting Payment","payment_submitted":"Payment Submitted"},"cost_approval_status":{"needs_review":"Needs Review","ready_to_sync":"Ready to Sync","declined":"Declined","synced":"Synced"},"date_aggregate":{"daily":"Daily","weekly":"Weekly","monthly":"Monthly","quarterly":"Quarterly"},"date_search_type":{"check_in":"Check-in date","check_out":"Check-out date","booked_date":"Booking date","stay_date":"Stay date (occupancy)","scheduled_date":"Scheduled date","turnover":"Turnover date"}},"descriptions":{"total_across_sources":"{total} total across {count} sources","count_properties":"{count} properties","count_departments":"{count} departments","count_tasks":"{count} tasks"},"store":{"title":"Store","subtitle":"How your guest store performs, per stay.","frame_stay":"Counted against stays checking in during this period.","frame_period":"Period totals, not a linked journey — a purchase here may follow an impression from an earlier period.","currency_selector":"Display currency","multi_currency":"Amounts are shown in {currency}; no exchange rate is applied. Other currencies available in the selector: {count, plural, zero {none} one {# currency} two {# currencies} few {# currencies} many {# currencies} other {# currencies}}.","multi_currency_rollup":"Chart and per-offer amounts are shown in {currency}; {count, plural, zero {no purchases in other currencies are} one {# purchase in another currency is} two {# purchases in other currencies are} few {# purchases in other currencies are} many {# purchases in other currencies are} other {# purchases in other currencies are}} not included.","kpi":{"total_guest_revenue":"Total guest revenue","revenue":"Store revenue","revenue_sub":"Approved + settled","service_fees":"Service fees","manual_fees":"Manual charges","mandatory_fees":"Mandatory fees","non_stay_fees":"Fees without a stay","non_stay_fees_caption":"Kept on bookings that never became stays. Not included in the total above.","settled_caption":"{settled} settled · {awaiting} awaiting capture","refunds_caption":"Refunds −{amount}","clawed_back_caption":"Chargebacks −{amount}","attach_rate":"Attach rate","attach_rate_sub":"Stays that bought something","guest_revenue_per_stay":"Guest revenue per stay","revenue_per_stay":"Store revenue per stay","revenue_per_stay_sub":"Store purchases only","aov":"Average order value","ancillary_share":"Ancillary share","ancillary_share_sub":"Store's share of room + store revenue","purchases":"Purchases","purchases_sub":"Approved + settled","settled_purchases_caption":"{count, plural, zero {none settled yet} one {# settled} two {# settled} few {# settled} many {# settled} other {# settled}}","currency_conflict":"Store and waiver revenue are in different currencies, so they can't be added together."},"fees":{"title":"Fees"},"requests":{"title":"Requests & approvals","approval_rate":"Approval rate","approval_latency":"Time to decision","approval_latency_unit":"{hours, plural, zero {no hours} one {# hour} two {# hours} few {# hours} many {# hours} other {# hours}}","denied":"Declined requests","denied_sub":"You declined {amount} of guest requests."},"protection":{"title":"Guest protection","subtitle":"Damage waivers and security deposits, counted against stays checking in during this period.","waiver_revenue":"Waiver revenue","waiver_revenue_sub":"Paid waivers","waiver_count":"Waivers paid","waiver_attach":"Waiver attach","waiver_attach_sub":"Stays that paid a damage waiver","deposits_held":"Deposits held","deposits_held_sub":"Card holds — not money you've earned","deposits_held_caption":"{count, plural, zero {no active holds} one {# active hold} two {# active holds} few {# active holds} many {# active holds} other {# active holds}}","deposits_captured":"Deposits captured","deposits_captured_sub":"Held money you kept for damage","deposits_captured_caption":"{count, plural, zero {no deposits captured} one {# deposit captured} two {# deposits captured} few {# deposits captured} many {# deposits captured} other {# deposits captured}}","selection_note":"What guests chose — among guests who paid either option. Exempt or skipped guests aren't counted; all check-in flows combined.","selection_waiver":"Chose the waiver","selection_deposit":"Chose the deposit","other_currency_records":"Amounts are shown in {currency}; {count, plural, zero {no protection records are excluded} one {# protection record in another currency is not included} two {# protection records in other currencies are not included} few {# protection records in other currencies are not included} many {# protection records in other currencies are not included} other {# protection records in other currencies are not included}}.","other_currency_records_split":"Waiver amounts are shown in {waiverCurrency} and deposit amounts in {depositCurrency}; {count, plural, zero {no protection records are excluded} one {# protection record in another currency is not included} two {# protection records in other currencies are not included} few {# protection records in other currencies are not included} many {# protection records in other currencies are not included} other {# protection records in other currencies are not included}}."},"funnel":{"filter_all":"All offers","filter_label":"Filter by offer","filtered_to":"{name} only","title":"Store funnel","impressions":"Saw an offer","detail_views":"Opened one","checkouts_started":"Started checkout","checkouts_started_hint":"Attempts, not people — one guest retrying counts twice.","purchases":"Purchased","purchases_hint":"Counted on the day the guest bought — approved purchases count even before the payment is captured, and these figures update nightly.","of_first":"{pct} of step 1","of_previous":"{pct} of previous","dropoff":"{count, plural, zero {no one dropped off} one {# didn't continue} two {# didn't continue} few {# didn't continue} many {# didn't continue} other {# didn't continue}}","internal_excluded":"{count, plural, zero {No internal views excluded} one {# internal view excluded} two {# internal views excluded} few {# internal views excluded} many {# internal views excluded} other {# internal views excluded}}","internal_excluded_with_purchases":"{count, plural, zero {No internal views} one {# internal view} two {# internal views} few {# internal views} many {# internal views} other {# internal views}} · {purchases, plural, zero {no test purchases} one {# test purchase} two {# test purchases} few {# test purchases} many {# test purchases} other {# test purchases}} (−{amount}) excluded","revenue_over_time":"Store revenue over time"},"table":{"title":"Per offer","col_offer":"Offer","col_impressions":"Saw","col_detail_views":"Opened","col_checkouts":"Checkouts","col_purchases":"Purchased","col_rate":"Impression → purchase","col_revenue":"Revenue","deleted_upsell":"Deleted offer","deleted_group":"Removed offers","unnamed":"Untitled offer","rate_low_volume":"n/a — {count, plural, zero {no impressions} one {# impression} two {# impressions} few {# impressions} many {# impressions} other {# impressions}}"},"timing":{"title":"When guests buy","subtitle":"Lead time before check-in.","bucket_at_booking":"At booking","bucket_31_plus_d":"31+ days out","bucket_15_30d":"15–30 days out","bucket_8_14d":"8–14 days out","bucket_4_7d":"4–7 days out","bucket_2_3d":"2–3 days out","bucket_0_1d":"0–1 days out","bucket_in_stay":"During the stay","reference_window":"Highest-converting window","median":"Half of purchases made between booking and check-in happen within {days, plural, zero {no days} one {# day} two {# days} few {# days} many {# days} other {# days}} of check-in.","dot_strip_note":"One dot per purchase — too few to draw a distribution yet."},"benchmarks":{"hint_deadline_title":"Add a booking deadline","hint_deadline_body":"These offers earn money with no booking window set, so no deadline can ever show a guest.","hint_deadline_cta":"Set a window"},"gates":{"counts_first":"{numerator} of {denominator}","no_denominator":"—","reason_no_stays":"No stays checked in during this period.","collecting":"{collected} of {needed} impressions collected since {since}. Rates unlock as traffic builds.","no_telemetry":"Purchases and revenue here come from real charges, so those numbers are already live. What guests see in the store — offers shown, opened and taken to checkout — isn't tracked yet; the funnel and view rates start filling in once guest-side tracking ships.","preview_cta":"Review your store offers","incomplete_window":"This period isn't over yet, so it can still grow. Compared with the same period last year.","delta_points":"{value} pts"}},"financials":{"sections":{"costs_title":"Costs","costs_description":"What you spent — operating costs billed to tasks, with budget and approval status."}}},"approvals":{"title":"Costs & Approvals","tab":{"financial":"Financial","time_off":"Time Off"},"financial":{"no_pending":"Nothing awaiting approval right now.","no_pending_filtered":"No costs match the current filters.","approve":"Approve","reject":"Reject","decline":"Decline","expand":"Expand","collapse":"Collapse","select_all":"Select all","select_row":"Select row","select_shift":"Select shift","select_task":"Select task","tab_status":{"all":"All","needs_review":"Needs Review","approved":"Approved","declined":"Declined","aria_label":"Filter by review status"},"col":{"type":"Type","name":"Name","assignee":"Assignee","property":"Property","department":"Department","duration":"Duration","completion_date":"Date","total_cost":"Total Cost","labor_cost":"Labor","non_labor_cost":"Materials","cost":"Cost","row_count":"Rows","billable":"Billable","actions":"Actions","tasks":"Tasks","hours":"Hours","days":"Days","margin":"Margin","flags":"Flags","start":"Start","end":"End","task":"Task","rate_basis":"Rate basis","state":"State","status":"Status","work_hours":"Work","paid_break":"Paid break","unpaid_break":"Unpaid break"},"approved_short":"Approved","pending_short":"Pending","status_approved":"Approved","status_partial":"{pending} of {total} pending","pending_count":"{count, plural, one {# pending} other {# pending}}","day_approved_success":"{count, plural, one {# row approved} other {# rows approved}}","day_approve_failed":"Approval failed. Try again.","edit_then_reapprove_hint":"Edit time entries above and re-approve when ready — there is no separate reject action.","row_type":{"shift":"Shift","task":"Task"},"child_task_count":"{count, plural, one {# task} other {# tasks}}","margin":"margin","est":"Est","shift_approved_success":"Shift approved","shift_rejected_success":"Shift rejected","task_approved_success":"Task approved","task_declined_success":"Task declined","filter":{"type":"Type","property":"Property","department":"Department","assignee":"Assignee"},"export_csv":"Export CSV","date_range":"Date range","approve_all_pending":"{count, plural, one {Approve # pending} other {Approve all # pending}}","bulk_nothing_pending":"Selection already fully approved.","csv":{"duration_minutes":"Duration (minutes)","completion_iso":"Completion (ISO 8601)","total_cost_cents":"Total cost (cents)","billable_cents":"Billable (cents)","person":"Person","range":"Range","grand_total":"Grand total","day_header":"Day","entries":"Time entries","other_costs":"Other costs","export_failed":"Export failed. Try again.","export_all":"{count, plural, one {Export day (#)} other {Export all days (#)}}","export_selected":"{count, plural, one {Export # selected day} other {Export # selected days}}","select_day":"Select day {date}","select_all_days":"Select all days","selected_of_total":"{count} of {total} days selected","edit_cost":"Edit cost","cost_updated":"Cost updated","cost_update_failed":"Update failed. Try again."},"edit_requested":"Edited","edit_requested_tooltip":"This shift's time entries have been edited (by the worker, an admin, or via the approvals page). Review the diffs in the side panel before approving.","group_by":{"label":"Group by","none":"None","department":"Department","property":"Property","user":"User"},"group_header":{"count":"{count, plural, one {# row} other {# rows}}","billable":"billable","no_department":"No department","no_property":"Across properties","no_user":"Unassigned"},"shift_panel":{"title":"Shift","description":"Review the time entries below, edit if anything is off, then approve the day. Editing an approved entry auto-unapproves it — there's no separate reject action.","shift_cost":"Shift cost","duration":"Duration","break":"Break","time_entries":"Time entries","attributed_tasks":"{count, plural, one {# attributed task} other {# attributed tasks}}","no_entries":"No time entries on this shift.","in_progress":"in progress","edited":"Edited","auto_clocked_out":"Auto clocked out","edit_time_entry":"Edit time entry","start_time":"Start time","end_time":"End time","notes":"Notes","save":"Save","cancel":"Cancel","saved":"Time entry updated","edit_field_start":"Start","edit_field_end":"End","edit_field_notes":"Notes","entry_type":{"work":"Work","paid_break":"Paid break","unpaid_break":"Unpaid break"},"work":"Work","task_only":"Task work","view":{"list":"List","by_task":"By task","calendar":"Calendar"},"no_task_group":"General work (no task)","breaks_group":"Breaks","in_other_costs_inline":"in other costs","type":{"work":"Work","task":"Task","paid_break":"Paid break","unpaid_break":"Unpaid break"},"hide_approved":"Hide approved","expand_all":"Expand all","collapse_all":"Collapse all","table_caption":"Time entries and cost rows for this member on this day.","time_entries_band":"Time entries · {count} · {duration}","other_costs_band":"Other costs · {count, plural, one {# item} other {# items}} · {total}","manual_entry":"manual entry","day_total":"Day total","tz_notice":"All times shown in {tz}","approve_all_confirm_title":"Approve all pending costs?","approve_all_confirm_description":"This approves {count, plural, one {# pending cost} other {# pending costs}} for {member} ({range}), totaling {total}. Approved costs are marked ready to sync to payroll and billing.","approve_day_confirm_title":"Approve this day?","approve_day_confirm_description":"This approves {count, plural, one {# pending cost} other {# pending costs}} for {date}, totaling {total}. Approved costs are marked ready to sync to payroll and billing.","itemisation_unavailable":"This day's entries didn't load, so there's nothing here to review before approving.","approve_all_unitemised":"{count, plural, one {# day you opened could not be itemised} other {# days you opened could not be itemised}} — those entries failed to load, so this approves costs you have not seen."},"bulk":{"selected_count":"{count, plural, one {# item selected} other {# items selected}}","approve_title":"Approve selected?","approve_description":"{count, plural, one {Approve # item} other {Approve # items}}. Tasks marked ready to sync; shifts marked approved.","decline_title":"Decline selected?","decline_description":"{count, plural, one {Decline # task} other {Decline # tasks}}. Shift selections are skipped — use the per-row Reject for shifts.","cancel":"Cancel","confirm":"Confirm"},"bulk_approved_success":"{count, plural, one {# item approved} other {# items approved}}","bulk_approve_partial":"Some approvals failed ({failures}). Refresh and retry.","bulk_declined_success":"{count, plural, one {# task declined} other {# tasks declined}}","bulk_decline_failed":"Decline failed. Try again.","reject_dialog":{"title":"Reject shift?","description":"The employee will be notified and asked to re-submit. Tasks attributed to this shift remain pending.","reason_label":"Reason","cancel":"Cancel","confirm":"Reject"},"billable_abbrev":"billable","flag_auto_clock_out":"Auto clock-out","flag_auto_clock_out_tooltip":"At least one time entry in this period was force-closed by the system. Verify the end time matches reality.","flag_edited":"Edited"},"time_off":{"pending_count":"{count, plural, =0 {No pending time-off requests} one {# pending request} other {# pending requests}}","no_pending":"No time-off requests awaiting approval.","approve":"Approve","decline":"Decline","decline_title":"Decline time-off request?","decline_description":"{name} will be notified that their request was declined. They can submit a new request if needed.","approved_success":"Time off approved","declined_success":"Time off declined","balance_loading":"Checking balance…","balance_current":"Balance: {accrued} accrued · {used} used · {remaining} remaining","balance_projected":"If approved: {projected} remaining","unlimited_balance":"Unlimited policy"},"no_permission":"You don't have permission to view approvals. Contact your organization administrator."},"ask":{"page_title":"Ask / Do Anything","greeting":"What can I help you with?","placeholder":{"ask":"ask","do":"do","build":"build","find":"find","fix":"fix","suffix":"anything."},"input":{"attach_file":"Attach file","send":"Send","hold_to_speak":"hold to speak","shortcut_history":"history"},"voice":{"start":"Start voice input","stop":"Stop recording","recording":"Recording...","transcribing":"Transcribing...","mic_denied":"Microphone access denied","start_failed":"Failed to start recording","not_configured":"Voice transcription not configured — add OPENAI_API_KEY","transcription_failed":"Transcription failed","connection_failed":"Transcription failed — check your connection","quota_exceeded":"Voice quota exceeded — check OpenAI billing"},"history":{"title":"Conversations","new":"New conversation","no_conversations":"No conversations yet","untitled":"Untitled"},"debug":{"toggle":"Toggle tool debug"},"usage":{"tokens":"tokens","input":"Input","cache_write":"Cache Write","cache_read":"Cache Read","output":"Output","total":"Total","aria_cost_breakdown":"Token cost breakdown"},"model_picker":{"title":"Models","express":"Express","concierge":"Concierge","executive":"Executive","express_description":"Quick answers, no wait","concierge_description":"Balanced speed and depth for everyday ops","executive_description":"Deep thinking for complex decisions"},"slash":{"title":"Commands","task":"Set task context","property":"Set property context","device":"Set device context","agent":"Browse agents","new":"New conversation","help":"Show available commands","group_commands":"Commands","group_actions":"Quick Actions","group_skills":"Skills","no_results":"No matching commands","undo_description":"Reverse the last action","help_description":"Show available commands and skills","new_description":"Start a new conversation","status_description":"Operational overview — tasks, alerts, check-ins","checkins_description":"Today's check-ins and check-outs","overdue_description":"Overdue tasks that need attention","alerts_description":"Active device alerts across properties","label_undo":"undo","label_help":"help","label_new":"new","label_status":"status","label_checkins":"checkins","label_overdue":"overdue","label_alerts":"alerts"},"export":{"title":"Export","copied":"Copied!","copy_markdown":"Copy as markdown","download_md":"Download .md","print_pdf":"Print / Save as PDF","print_title":"Conversation Export","print_heading":"SuiteOp Conversation","role_user":"You","role_assistant":"Opal"},"stream":{"searching":"Searching...","found":"Found {count} results","executing":"Executing...","completed":"Completed","searching_tasks":"Searching tasks...","loading_task":"Loading task...","creating_task":"Creating task...","searching_properties":"Searching properties...","searching_reservations":"Searching reservations...","checking_devices":"Checking devices...","working":"Working...","steps_count":"{count} steps"},"card":{"untitled_task":"Untitled Task","unnamed_property":"Unnamed","unknown_guest":"Unknown Guest","unknown_device":"Unknown Device","unknown_member":"Unknown","device_online":"Online","device_offline":"Offline","verb_created":"Created","verb_updated":"Updated","verb_deleted":"Deleted","verb_done":"Done","error_occurred":"An error occurred","no_dates":"No dates","showing_count":"Showing {shown} of {total}","no_results":"No results found","more_fields":"+{count} more fields","show_more":"Show {count} more","show_less":"Show less","bed":"bed","bath":"bath"},"orbital":{"opal":"Opal"},"starters":{"tasks_today":"What tasks need attention today?","device_alerts":"Show me device alerts across all properties","create_task":"Create a maintenance task","property_status":"What's happening at my properties?","clocked_in_now":"Who's clocked in right now?","cheapest_assignee":"Find the cheapest assignee for a task","pending_approvals":"Tasks awaiting approval","upcoming_check_ins":"Today's check-ins and check-outs"},"risk":{"low":"Read operation","medium":"Write operation — confirm to proceed","high":"Destructive operation — review carefully"}},"auto_assignment":{"page":{"title":"Auto-Assignment","description":"Configure how tasks are automatically assigned to qualified staff."},"v2":{"page":{"title":"Auto-assignment","description":"Configure the engine that picks a tasker automatically when a task is created."},"tabs":{"overview":"Overview","departments":"Departments","tasker_directory":"Tasker directory","caps_limits":"Caps & limits","shifts":"Shifts","activity_log":"Activity log"},"overview":{"fires_section_title":"How auto-assignment fires","fires_section_subtitle":"It doesn't run continuously — it runs when a task asks it to.","fires_manual_title":"Manual","fires_manual_description":"\"Auto-assign\" button on a single task or via bulk action.","fires_schedule_title":"Task schedule","fires_schedule_description":"A scheduled task (recurring turnover, etc.) auto-assigns at create-time.","departments_section_title":"Departments","departments_section_subtitle":"{count, plural, =0 {No departments} one {# department configured} other {# departments configured}} · click a row to manage","departments_empty_title":"No departments yet","departments_empty_description":"Create a department to configure auto-assignment rules.","departments_empty_cta":"Go to Departments","table_department":"Department","table_engine":"Engine","table_members":"Members","table_last_fired":"Last fired","engine_on":"On","engine_warn":"On — config issue","engine_off":"Off","members_format":"{total, plural, one {# member} other {# members}}","members_assignable_format":"{total} ({assignable} assignable)","last_fired_never":"—","row_aria_label":"Configure {name} auto-assignment"},"coming_soon":{"title":"Coming soon","description":"We're still building this view. For now, manage this inside each department's configuration."},"taskers":{"section_title":"Tasker directory","section_subtitle":"Members across teams, with their auto-assign settings.","scope_note":"This view manages auto-assign settings only. To invite users, change roles, or grant property access, go to {settingsLink}.","scope_link":"Settings › Users","search_placeholder":"Search by name or email…","department_filter_all":"All departments","table_member":"Member","table_departments":"Departments","table_properties":"Properties","table_role":"Role","all_properties":"All","properties_count":"{count, plural, one {# property} other {# properties}}","no_departments":"—","empty_title":"No taskers yet","empty_description":"Add members to a department to populate this directory.","row_aria_label":"Open auto-assign settings for {name}"},"multi_dept_sheet":{"dept_count_badge":"{count, plural, =0 {No departments} one {# department} other {# departments}}","no_departments":"This member is not in any departments yet.","member_missing":"This member was removed from {dept}.","save_dept":"Save {dept}","close":"Close"}},"tabs":{"departments":"Department Rules","property_access":"Property Access"},"department":{"assign_by":"Assign by","break_ties_by":"Break ties by","assignable_staff":"Assignable Staff","manage_members":"Manage members","no_members_warning":"No members — auto-assignment won't work.","empty_title":"No departments yet","empty_description":"Create a department to configure auto-assignment rules.","create_department_link":"Go to Departments","save":"Save","cancel":"Cancel","saved":"Department assignment rules saved.","members_sheet_title":"{name} Members"},"method":{"none":"None"},"property":{"search_placeholder":"Search properties...","group_filter_placeholder":"All groups","column_property":"Property","column_group":"Group","column_staff":"Staff with Access","manage":"Manage","no_staff_warning":"No staff assigned","all_properties_badge":"All properties","dialog_title":"Property Access — {name}","dialog_group":"Group: {group}","dialog_indirect_access":"{count} staff have access via property groups or all-properties scope","dialog_individual_access":"Individual Access","dialog_no_individual":"No individual property access configured.","add_access":"Add individual access...","remove":"Remove","save":"Save","cancel":"Cancel","saved":"Property access updated.","plus_overflow":"+{count}","save_failed":"Some changes could not be saved. Please try again."},"trigger":{"auto_assign":"Auto-assign","auto_assign_single":"Auto-assign","auto_assign_bulk":"Auto-assign","deselect_all":"Deselect all","confirm_title":"Reassign existing assignees?","confirm_description":"{assigned} of {total} selected tasks are already assigned. Auto-assign will reassign them. Continue?","confirm_action":"Continue","toast_single_success":"Task assigned to {name}.","toast_single_no_candidates":"No qualified candidates found.","toast_bulk_success":"Assigned {assigned}. {failed, plural, one {# task could not be assigned.} other {# tasks could not be assigned.}}","toast_bulk_all_success":"{count, plural, one {# task assigned successfully.} other {# tasks assigned successfully.}}","select_all":"Select all","select_row":"Select row","auto_assign_unassigned_count":"Auto-assign {count} unassigned","review_before_assigning":"Review before assigning","auto_assign_options":"Auto-assign options","select_all_note":"{count, plural, one {# task selected on this page.} other {# tasks selected on this page.}}","select_all_matching":"Select all {count} matching","select_all_truncated":"Selected the first {count} matching tasks.","select_all_error":"Couldn't select all matching tasks. Please try again."},"scheduler":{"assignment_section":"Assignment","auto_assign_label":"Auto-assign tasks","auto_assign_description":"Automatically assign created tasks to qualified staff using department rules"},"reasoning":{"assigned_largest_deficit":"Assigned — largest unmet deficit ({deficitHours, number, ::.0}h)","tied_geo_break_same_building":"Tied; same-building tiebreaker won","tied_geo_break_min_distance":"Tied; closer to other same-day work ({distanceKm, number, ::.0}km)","tied_lower_in_batch_count":"Tied at target; lower in-batch count won","tied_stable_user_id":"Tied; stable order tiebreak","all_passed_filter_capped":"All eligible candidates hit their cap","filter_failed_no_candidates_in_department":"No staff are members of this department","filter_failed_no_eligible_members_in_department":"Department members exist but none are auto-assign-eligible","filter_failed_no_property_access":"No staff have access to this property","filter_failed_no_qualified_candidates":"No staff with the required skill match the property + department","filter_failed_on_time_off":"All eligible staff are on approved time-off for this date","filter_failed_unavailable_day":"No eligible staff are scheduled to work this day of the week","filter_failed_cap_exceeded":"All eligible staff have hit their per-day cap","filter_failed_persist_failed":"Assignment failed unexpectedly — retry manually","filter_failed_dept_auto_assign_disabled":"Auto-assignment is turned off for this department","task_missing_required_fields":"Task is missing department, property, or due date","assigned_from_list_property":"Assigned from this property's list","assigned_from_list_property_group":"Assigned from the property group's list","assigned_from_list_department":"Assigned from the department's list","assigned_from_list_template":"Assigned from this task type's list","template_territory_fallback":"Assigned from the task type's list — nobody on it covers this property","fence_stopped_search":"The list is limited to specific people, so the search stopped there","filter_failed_not_on_eligibility_list":"The configured lists leave nobody eligible here","filter_failed_only_managers_in_department":"Everyone eligible here is an owner or manager — automatic assignment skips them for housekeeping","assigned_over_capacity":"Assigned while over their daily hours cap","assigned_prior_assignee":"Assigned — this replaces a cancelled task they already had","prior_assignee_unavailable":"The previous assignee of the replaced task is unavailable today"},"picker":{"suggested":"Suggested","suggested_replacement":"Suggested replacement","cannot_suggest":"Can't auto-assign"},"failure_reason":{"no_candidates_in_department":"No candidates in department","no_eligible_members_in_department":"No eligible members in department","no_property_access":"No property access","no_qualified_candidates":"No qualified candidates","on_time_off":"On time off","unavailable_day":"Unavailable day","cap_exceeded":"Cap exceeded","persist_failed":"Persist failed","dept_auto_assign_disabled":"Auto-assignment disabled","not_on_eligibility_list":"Not on the eligibility list","only_managers_in_department":"Only owners or managers"},"draft":{"title":"Review auto-assignments","summary":"{total, plural, one {# task} other {# tasks}} · {proposed} with a proposed assignee · {attention, plural, =0 {none need attention} one {# needs attention} other {# need attention}}","currently":"Currently {name}","someone":"someone","untitled_task":"Untitled task","pick_placeholder":"Choose assignee…","assign_action":"Assign {count}","preview_error":"Couldn't preview assignments. Please try again.","commit_success":"{count, plural, one {# task assigned} other {# tasks assigned}}.","commit_error":"Couldn't assign tasks. Please try again.","empty_title":"Nothing to assign","empty_description":"Select one or more tasks to preview their assignees.","empty_filtered":"No tasks match this filter.","banner_badge":"Draft","banner_title":"Reviewing {count, plural, one {# auto-assignment} other {# auto-assignments}}","banner_summary":"{ready} ready · {reassignments} reassignments · {attention, plural, =0 {none need a pick} one {# needs a pick} other {# need a pick}}","banner_cannot_assign":"{count, plural, one {# can't be auto-assigned} other {# can't be auto-assigned}}","review_toggle":"Review before assigning","proposed_to":"Reassigning from {name}","accept_all":"Accept all suggestions","discard":"Discard","change":"Change","pick_someone":"Pick someone…","columns":{"task":"Task","status":"Status","current":"Current","proposed":"Proposed","department":"Department"},"status":{"new":"New","reassign":"Reassign","no_match":"No match"},"filter":{"all":"All","reassignments":"Reassignments","attention":"Needs attention"},"failure":{"no_candidates_in_department":"No candidates in department","no_eligible_members_in_department":"No eligible members in department","no_property_access":"No property access","no_qualified_candidates":"No qualified candidates","on_time_off":"All eligible staff on time off","unavailable_day":"No staff scheduled this day","cap_exceeded":"All eligible staff at their cap","persist_failed":"Couldn't save assignment","dept_auto_assign_disabled":"Auto-assignment disabled for department","only_managers_in_department":"Only owners/managers in department"}},"assignee_why":{"label":"Why this person?","title":"Why this assignee"}},"auto_assignment_dept":{"page":{"title":"Auto-assignment","description":"Per-user config now lives inline. Click any row to edit skills, availability, and caps without leaving this page.","load_error":"Failed to load department configuration."},"header":{"auto_assign_label":"Auto-assignment","on":"on","off":"off","test_button":"Test on today's tasks"},"subtabs":{"rule":"Rule","members":"Members","caps":"Caps & limits"},"rule":{"section_title":"Assignment rule","section_description":"How the engine picks a candidate. Geo proximity always breaks ties.","options":{"workload_name":"Workload","workload_desc":"Fewest hours today","rotation_name":"Round-robin","rotation_desc":"Even rotation"},"tiebreak":"<b>Geo proximity</b> always breaks ties — closest cleaner to the property wins.","advanced":"Advanced — soft caps, custom tiebreaker, skill weighting","members_section_title":"Members","members_section_description":"Only members of {dept} are candidates.","members_count_with_pto":"{count} members · {pto} on time-off until {date}","members_count":"{count} members","manage":"Manage","cancel":"Cancel","save":"Save","round_robin_preview":"Round-robin (preview): cycles members in submission order. Not yet validated by research — leave off unless your team explicitly asked for it."},"members":{"search_placeholder":"Search members…","members_count":"{count} members","on_time_off_count":"{count} on time-off","view_only_badge":"View only","add_member":"Add member","manager_only_badge":"Manager · view-only","columns":{"staff":"Staff","skills":"Skills","availability":"Weekly availability","status":"Status","select_all":"Select all","select_row":"Select row"},"no_skills":"No skills","empty_title":"No members in {dept} yet","empty_description":"Auto-assignment needs at least one member to route tasks to. Add staff to this department to get started.","empty_cta":"Add members","bulk_selected":"{count} selected","bulk_selected_announcement":"{count, plural, one {# member selected} other {# members selected}}","bulk_deselect":"Deselect","bulk_add_skill":"Add skill","bulk_set_availability":"Set availability","bulk_set_caps":"Set caps","edit_member_aria":"Edit member","cap_badge_hours":"≤ {n}h/day"},"status":{"available":"Active","on_time_off":"On time-off · until {date}","inactive":"Inactive"},"sheet":{"close":"Close","save":"Save changes","cancel":"Cancel","dept_context":"Editing for <b>{dept}</b> · {count} of {total} departments","switch_dept":"Switch to {dept}","time_off_banner":"On time-off until <b>{date}</b>. Auto-assignment will skip this person until they return.","manager_only_note":"This person manages but isn't assigned tasks. Make them a member to enable skills, availability, and caps for assignment.","skills_section_title":"Skills","skills_section_desc":"Tasks with a required skill only go to members who have it. <b>Skills are global</b> — they apply across all of {firstName}'s departments.","skills_manage_link":"Manage org skills","skills_add":"Add skill","skills_usage":"{count} tasks this week required <b>{skill}</b>.","availability_section_title":"Weekly availability","availability_section_desc":"Recurring days {firstName} normally works. <b>Per-department</b> — the same person can be Mon–Fri here, weekends-only in another team.","availability_summary_full":"Available <b>every day</b>.","availability_summary_none":"Not available any day.","availability_summary_some":"Available <b>{days}</b>.","availability_summary_off":"Off {days}.","availability_recurring_note":"This is a <b>recurring pattern</b>, not a calendar. For one-off time off, use <a>Time-off requests</a>.","availability_overlap_note":"Has approved time-off {start} – {end}. Engine will skip this person regardless of weekly availability.","caps_section_title":"Soft caps · optional","caps_section_desc":"Engine prefers candidates under cap. Override: hold ⇧ when manually assigning.","caps_max_hours_label":"Max hours per day","caps_no_cap":"No cap","caps_inherits_hours":"Inherits {hours}h/day","history_section_title":"Recent assignments · last 7 days","history_section_desc":"How {firstName} has been routed. Tap to expand.","history_view_full":"View full log","history_avg_per_day":"Avg/day","history_hours":"Hours","history_declined":"Declined","history_on_time":"On-time","history_person_fallback":"this person","history_placeholder_note":"Declined and on-time land with offer mode.","day_short_mon":"Mon","day_short_tue":"Tue","day_short_wed":"Wed","day_short_thu":"Thu","day_short_fri":"Fri","day_short_sat":"Sat","day_short_sun":"Sun","caps_dept_default_label":"Department default:","caps_hours_per_day":"{hours}h/day","skills_remove_aria":"Remove {skill}","skills_remove_unwired":"Skill removal not yet wired in v2 — use the global Skills page.","role_badge_member":"Member","role_badge_manager_view_only":"Manager · view-only"},"test_dialog":{"title":"Auto-assign preview","description":"What the engine would do for these tasks. No assignments are written.","winner_label":"Would assign to","no_winner":"No qualified candidate","reasoning":"Reasoning","close":"Close","empty":"No tasks to preview","load_error":"Failed to load preview: {message}","untitled_task":"Untitled task","assigned_to":"Would assign to","engine_trace_summary":"Engine trace"},"chips":{"aria_label":"Why the engine picked this candidate","skill_match":"skill match","available_day":"available today","within_cap":"within cap ({max})","within_cap_no_max":"within cap","workload_balanced":"workload-balanced","tiebreak_geo":"tiebreak: closest to property"},"caps":{"section_title":"Department defaults","section_description":"Members inherit these unless their own caps are set.","max_hours_label":"Max hours per day","save":"Save","no_cap_placeholder":"No cap","cancel":"Cancel"},"save_bar":{"unsaved":"You have unsaved changes","save":"Save","discard":"Discard"},"toast":{"saved":"Saved","save_failed":"Could not save changes","bulk_updated":"{updated} members updated","bulk_updated_with_skips":"{updated} updated, {skipped} skipped","test_failed":"Could not preview"},"bulk_dialogs":{"cancel":"Cancel","apply":"Apply","add_skill_title":"Add skill to {count} members","add_skill_description":"Members who already have the skill will be skipped.","add_skill_label":"Skill","add_skill_placeholder":"Pick a skill","add_skill_apply":"Add to {count}","availability_title":"Set weekly availability for {count} members","availability_description":"This is a recurring pattern. Members on approved time-off will still be excluded for those specific dates.","availability_weekdays":"Weekdays","availability_weekends":"Weekends","availability_all_days":"All days","set_caps_title":"Set caps for {count} members","set_caps_description":"Leave a field blank to clear that cap. The engine prefers candidates under cap; ⇧ when assigning manually overrides.","set_caps_max_hours_label":"Max hours per day","set_caps_no_cap":"No cap"}},"department_hub":{"page":{"subtitle":"Roster, rules, templates, and triggers — all in one place.","load_error":"Couldn't load this department. Please refresh."},"breadcrumb":{"label":"Breadcrumb","departments":"Departments"},"header":{"auto_assign_label":"Auto-assign","on":"On","off":"Off","view_tasks":"View tasks"},"toc":{"nav_label":"Department sections","roster":"Roster","templates":"Templates","triggers":"Triggers","settings":"Settings","eligibility":"Auto-assignment","skills":"Skills"},"roster":{"title":"Roster","description":"Members assigned to this department and their per-dept config.","column_eligibility":"Auto-assign","eligibility_toggle_aria":"Toggle auto-assign eligibility for {name}","eligibility_on":"On","eligibility_off":"Off","eligibility_help":"When on, this member is auto-assigned tasks for this department. Turning it off keeps them on the roster — you can still assign them manually.","eligibility_help_aria":"Auto-assign eligibility help","eligibility_manager_excluded":"Manager — not auto-assigned","eligibility_manager_excluded_help":"Owners and managers are never picked by auto-assign for housekeeping tasks. You can still assign them by hand.","manager_badge":"Manager","row_menu_aria":"Row actions","open_profile":"Open profile","promote_to_manager":"Promote to manager","demote_to_member":"Demote to member"},"templates":{"title":"Templates","description":"Task templates owned by {dept}.","new_template":"New template","items":"{count, plural, one {# item} other {# items}}","duration_minutes":"{minutes} min","duration_hours":"{hours}h","duration_hours_minutes":"{hours}h {minutes}min","empty_title":"No templates yet","empty_description":"Templates pre-fill checklist items, photo requirements, and assignment defaults so creating recurring tasks takes seconds."},"triggers":{"title":"Triggers","description":"How tasks land in this department.","read_only_aria":"Read-only","last_fired":"Last fired {time}","manual":{"label":"Manual","count":"{count, plural, one {# task last 30d} other {# tasks last 30d}}","empty_hint":"No manual tasks recently.","always_wired":"Always wired"},"schedules":{"label":"Schedules","count":"{count, plural, one {# active schedule} other {# active schedules}}","empty_hint":"No schedules feeding this department."},"workflows":{"label":"Agents","count":"{count, plural, one {# active agent} other {# active agents}}","empty_hint":"No agents feeding this department."}},"settings":{"title":"Settings","description":"Department configuration — name, colour, and lifecycle.","basics":{"title":"Basics","description":"How the department appears across the app, and whether the engine assigns its tasks.","name_label":"Name","color_label":"Colour","auto_assign_label":"Auto-assignment","auto_assign_description":"When on, the engine picks taskers for {dept} tasks automatically. When off, tasks land unassigned and can only be picked manually. The pill in the page header mirrors this state.","auto_assign_on":"On","auto_assign_off":"Off"},"assignment":{"title":"Assignment policy","description":"Decides who the engine picks first when multiple candidates qualify.","tiebreaker_label":"Tiebreaker:","tiebreaker_desc":"When two taskers tie on workload balance, the one closer to the property's geofence wins."},"caps":{"title":"Daily limits","description":"Default caps each member inherits unless they set their own.","max_hours_label":"Max hours per day","no_limit":"No limit","help":"A member's own limit overrides these defaults. Leave blank for no limit."},"danger":{"title":"Danger zone","description":"Archiving stops new task creation. Existing tasks remain.","archive_button":"Archive department"},"save":"Save changes","cancel":"Discard","archive_confirm_title":"Archive this department?","archive_confirm_description":"{dept} will stop receiving auto-assigned tasks. Members and templates remain untouched.","archive_success":"Department archived","archive_failed":"Couldn't archive — please retry."},"skills":{"title":"Skills","description":"What people can be certified to do. A template that requires a skill only assigns to holders — at the properties they cover.","new_skill":"New skill","empty":"No skills yet. Create one, require it on a template, and give it to the people who qualify.","column_skill":"Skill","column_department":"Department","column_holders":"Holders","column_templates":"Templates","org_wide":"Org-wide","holder_count":"{count, plural, one {# person} other {# people}}","template_count":"{count, plural, one {# template} other {# templates}}","create_title":"New skill","edit_title":"Edit {skill}","dialog_description":"Name, what it means, and where it belongs.","name_label":"Name","name_placeholder":"Deep-clean certified","description_label":"Description","description_placeholder":"What does holding this skill mean?","description_hint":"Written for a person — and it is also what automated skill matching will read later.","department_label":"Department","toast_saved":"Skill saved","toast_deleted":"Skill deleted","toast_delete_blocked":"A template still requires this skill — clear it there first.","toast_failed":"Could not save the skill"}},"eligibility":{"section":{"title":"Auto-assignment","description":"Who covers which properties. Department default: all {count} members — properties without a list fall back to it automatically.","edit_department_list":"Edit department list","bulk_set":"Bulk set…","dispatch_assign":"Assign automatically","dispatch_offer":"Offer to the team","coming_soon":"Coming soon","search_placeholder":"Search properties…","counts":"{groups, plural, one {# group} other {# groups}} · {properties, plural, one {# property} other {# properties}}","column_property":"Property","column_covered_by":"Covered by (effective)","column_source":"Source","nobody_listed":"Nobody listed","people_count":"{count, plural, one {# person} other {# people}}","only_these":"Only these people","group_property_count":"{count, plural, one {# property} other {# properties}}","no_group_list":"No group list — department default ({count})","department_default_count":"Department default ({count})","source_group_list":"Group list","source_department":"Department default","source_override":"Override","source_from_group":"from {group}","edit":"Edit","add_list":"Add list","warning_fenced_empty":"Closed with nobody on it — no task here will be assigned","warning_no_access":"Closed, and nobody on this list can reach it","warning_all_inactive":"Everyone on this list is deactivated","skills_banner":"Skills layer on top of auto-assignment. The list says who covers a home; templates that require a skill pick from these people who hold it — e.g. {template} → {skill} ({holders} of {total}). Manage skills on members & templates.","skills_legend":"= holds a skill some templates in this department require · Skill-gated templates here: {templates} · Capacity (how many people per job) lives on the template's Capacity tab.","warning_no_skill_holder":"No one here holds {skill}","dispatch_label":"Dispatch","group_by_label":"Group by","group_by_value":"Group: Property group","filter_label":"Filter","filter_all":"All sources","group_crew_chip":"{group} crew · {count, plural, one {# person} other {# people}}","group_crew_inherited":"{group} crew ({count})","expand_group":"Expand group","collapse_group":"Collapse group"},"sheet":{"title":"Auto-assignment · {target}","fenced_label":"Only these people","fenced_hint":"Leave this off to try them first and let anyone else pick it up when they cannot.","empty_fenced":"Nobody is listed, so no task here will be assigned until someone is added.","empty_unfenced":"Nobody is listed, so the whole department is eligible.","unknown_person":"Unknown person","grant_access":"Grant access","remove_person":"Remove {name}","no_one_left":"Everyone in this department is already on the list.","add":"Add","available_heading":"Add someone else","available_more":"{count, plural, one {# more person — search to find them} other {# more people — search to find them}}","apply_to":"Apply to","apply_property":"This property only","apply_group":"The whole group","remove_list":"Remove list","skill_none":"No skills","skills_note":"Skills still apply on top. {template} requires {skill} — {count, plural, =0 {nobody on this list holds it} one {# person on this list holds it} other {# people on this list hold it}}.","people_heading":"People · {count, plural, =0 {none selected} one {# selected} other {# selected}}","add_people_placeholder":"Add people…","no_access_inline":"{name} doesn't have access to this property — they won't be assignable until it's granted.","more_people":"+{count} more","subtitle_property_override":"{department} · currently Override (was: {origin})","subtitle_property_inherit":"{department} · currently {origin}","subtitle_group":"{department} · group list · applies to {count, plural, one {# property} other {# properties}}{overrides, plural, =0 {} one { (# keeps its override)} other { (# keep their override)}}","subtitle_department":"{department} · the default pool every property falls back to","fenced_hint_property":"Never widen to the {group} crew or the department, even if everyone here is unavailable — the task is flagged instead.","fenced_hint_property_nogroup":"Never widen to the department, even if everyone here is unavailable — the task is flagged instead.","fenced_hint_group":"Tasks at {group} never widen to the rest of {department}. A property override inside the group can still name someone else explicitly.","apply_group_badge":"{group} · {count, plural, one {# property} other {# properties}}","skills_note_property":"Skills still apply on top. A {template} here requires {skill} — {count, plural, =0 {nobody on this list qualifies} one {only # person on this list qualifies} other {# people on this list qualify}}. Other tasks can go to anyone on the list.","skills_note_list":"Skill coverage in this list: {skill} — {count} of {total}. If they're all off, {template} tasks here go unassigned and get flagged.","manage_skills_link":"Manage skills on the template →"},"toast":{"saved":"List saved","save_failed":"Could not save the list","bulk_saved":"List applied to {count} targets","removed":"List removed","access_granted":"Access granted","grant_failed":"Could not grant access"},"add":{"title":"Bulk set","description":"Pick the properties or groups that should share one list. You will choose the people next.","kind_label":"Applies to","kind_property":"Property","kind_group":"Property group","search_placeholder":"Search…","more_results":"{count, plural, one {# more property matches — refine your search} other {# more properties match — refine your search}}","no_targets":"Nothing available — everything here already has a list, or none exist yet","continue":"Continue","continue_count":"Continue with {count}","n_targets":"{count} targets"}},"billing":{"page_title":"Billing","banner":{"trialing":"You're on a 30-day trial. {daysRemaining} days remaining.","past_due":"Payment failed. Please update your payment method to avoid service interruption.","canceled":"Your subscription has been canceled.","no_subscription":"No active subscription. Contact support for assistance.","no_plan_yet":"No plan is active yet. Your account is fully usable; your SuiteOp contact will set up your plan.","not_configured":"Billing is not configured for this organization."},"plan_summary":{"title":"Plan Summary","status":"Status","details_unavailable":"Plan details are unavailable. Contact support for assistance.","billing_period":"Billing Period","next_invoice":"Next Invoice","amount":"Amount","trial_ends":"Trial Ends","status_active":"Active","status_trialing":"Trial","status_past_due":"Past Due","status_canceled":"Canceled","status_incomplete":"Incomplete","status_unpaid":"Unpaid","status_paused":"Paused","payment_method":"Payment Method","card_ending":"{brand} ending in {last4}","card_ending_with_exp":"{brand} ending in {last4} (exp {exp_month}/{exp_year})"},"usage":{"title":"Usage Overview","active_properties":"Active Properties","active_devices":"Active Devices","per_unit":"{amount}/unit","ai_credits":{"title":"AI Credits","description":"Your monthly AI allowance. Informational only — your usage isn’t limited.","used":"Used this month","used_of_allowance":"{used, number} of {allowance, number} credits","meter_label":"AI credits used this month","period":"{month} · {days, plural, one {# day left} other {# days left}}","unavailable":"AI usage isn’t available right now."}},"address":{"title":"Billing Address","company_name":"Company Name","company_name_placeholder":"Acme Properties LLC","vat":"VAT Number","vat_placeholder":"EU123456789","street":"Street Address","city":"City","state":"State / Region","postal_code":"Postal Code","country":"Country","billing_email":"Billing Email","billing_email_hint":"Invoices and receipts are sent here. Changing the organization owner does not change it.","save":"Save Address","saving":"Saving…","save_success":"Billing address updated","stripe_sync_failed":"Saved, but Stripe could not be updated. Please try again."},"invoices":{"title":"Recent Invoices","date":"Date","amount":"Amount","status":"Status","download":"Download PDF","empty":"No invoices yet","status_paid":"Paid","status_open":"Open","status_draft":"Draft","status_void":"Void","status_uncollectible":"Uncollectible"},"portal":{"title":"Manage Subscription","description":"Update your plan, payment methods, or cancel your subscription.","loading":"Loading subscription management…","error":"Unable to load subscription management. Please try again."},"error":{"load_failed":"Unable to load billing information. Please try again.","retry":"Retry"}},"blacklist":{"title":"Guest blacklist","description":"Manage organization-wide guest safety records and review immutable match history.","loading":"Loading blacklist…","access_denied":{"title":"Blacklist access unavailable","description":"You need reservation management permission and access to all properties in this organization."},"actions":{"add":"Add profile","edit":"Edit","archive":"Archive","restore":"Restore","erase":"Erase personal data","export":"Export CSV","export_profiles":"Profiles only","export_with_match_history":"Profiles with match history","cancel":"Cancel","save":"Save","saving":"Saving…","import":"Import CSV"},"filters":{"search":"Search guests or reasons","status":"Profile status","all":"All statuses","recent_matches":"Matched in the last {days} days"},"status":{"active":"Active","inactive":"Inactive","erased":"Personal data erased"},"table":{"guest":"Guest","identifiers":"Identifiers","reason":"Reason","matches":"Matches","created_by":"Created by","status":"Status","updated":"Updated"},"empty":{"title":"No blacklist profiles found","description":"Change the filters or add a documented guest safety record."},"create":{"title":"Add blacklist profile","description":"Create an organization-wide record. A matching active profile is shown instead of being merged.","duplicate_candidate":"An active profile already holds one of these identifiers. Nothing was created — opening that profile instead."},"form":{"first_name":"First name","last_name":"Last name","reason":"Documented reason","reason_help":"Record the operational reason. This is visible only to authorized organization-wide staff.","email":"Email (optional)","phone":"Phone (optional)","government_id":"Government ID (optional)","government_id_help":"The original value is converted to a protected fingerprint and is not retained.","identifiers":"Protected identifiers","identifiers_immutable":"Existing identifiers are masked and cannot be reconstructed in the browser."},"profile":{"title":"{name}","loading":"Loading profile…","description":"Profile details and immutable match evidence","erased_name":"Erased profile","reason":"Reason","identifiers":"Protected identifiers","match_history":"Match history","signals":"Signals:","no_matches":"No matches have been recorded.","activity":"Profile activity","no_activity":"No profile activity has been recorded.","candidate_group":"{count, plural, one {One other reservation matches this name} other {{count} other reservations match this name}}","match_reservation_fallback":"View reservation","match_no_reservation":"Reservation no longer available"},"identifier":{"email":"Email","phone":"Phone","government_id":"Government ID","reservation_name":"Reservation name","confirmed_name":"Confirmed name","id_name":"ID name","billing_name":"Billing name"},"decision":{"automatic_review":"Automatic review","candidate_alert":"Candidate alert"},"outcome":{"observed":"Observed; no access change","candidate_only":"Candidate only","reviewed":"Reservation sent to review","checked_in_alert":"Urgent alert; access preserved","evidence_only":"Evidence only"},"activity":{"blacklist":{"profile_created":"Profile created","profile_updated":"Profile updated","profile_archived":"Profile archived","profile_restored":"Profile restored","profile_erased":"Personal data erased","profile_backfilled":"Legacy profile imported"}},"toast":{"archived":"Profile archived","restored":"Profile restored","erased":"Personal data for this profile has been permanently erased."},"confirm":{"archive":{"title":"Archive this profile?","description":"Archived profiles stop participating in future matching. Existing evidence remains immutable.","action":"Archive"},"restore":{"title":"Restore this profile?","description":"The profile becomes active and eligible reservations are scanned again.","action":"Restore"},"erase":{"title":"Permanently erase personal data?","description":"Names, reason, and identifiers are removed. The anonymous evidence tombstone cannot be restored.","action":"Erase personal data"}},"import":{"title":"Import profiles from CSV","description":"Review the file before anything is added to the registry. Nothing is saved until you press Import.","columns":"Columns: {columns}. The first line must be the header row.","choose_file":"Choose file","template":"Download template","empty":"The file has a header but no profile rows.","issues":"Rows that cannot be imported","refused":"Rows the import refused","issue_line":"Line {line}: {message}","importing":"Importing…","submit":"{count, plural, one {Import # profile} other {Import # profiles}}","preview":{"line":"Line"},"error":{"unterminated_quote":"A quoted value is never closed, so the rest of the file cannot be read. Fix the quotes and upload it again.","malformed_quote":"A quote in this line is misplaced, so the values around it cannot be read correctly. Fix the quoting and upload the file again.","header_missing":"The header row is missing these columns: {columns}.","looks_like_export":"This looks like a blacklist EXPORT, not an import file. An export keeps every identifier in one packed column that this importer cannot read, so importing it would create name-only duplicates. Download the template and fill that in instead.","unreadable_file":"This file could not be read. It may have been moved or deleted since you chose it, or it may be a folder rather than a file. Choose it again.","missing_field":"First name, last name and reason are all required.","government_id_unavailable":"This workspace cannot store government ID identifiers. Remove the column or clear the value.","too_many_rows":"The file holds {count} profiles and at most {max} can be imported at once. Split it into smaller files.","invalid_row":"This row cannot be imported.","duplicate_column":"The header row names these columns more than once: {columns}. Each column may appear only once, so remove the duplicates and upload the file again.","wrong_column_count":"This line holds {actual} values but the header names {expected} columns, so its values would be read under the wrong headings. A value containing a comma must be wrapped in quotes."},"refused_reason":{"duplicate_existing":"A profile in this organization already holds one of these identifiers. Nothing was changed.","duplicate_in_batch":"Another row in this file holds the same identifier. This row was not imported.","government_id_unavailable":"This workspace cannot store government ID identifiers.","unknown":"This row could not be imported."},"toast":{"imported":"{count, plural, one {# profile imported} other {# profiles imported}}","partial":"{created} imported · {failed} refused","all_failed":"{count, plural, one {Nothing imported — # row refused} other {Nothing imported — # rows refused}}"}}},"chat":{"title":"Opal","header_cta":"Opal AI","open_opal_ai":"Open Opal AI","new_conversation":"New conversation","placeholder":"Ask Opal...","send":"Send","confirmation":{"title":"Confirm action","approve":"Approve","reject":"Reject","expired":"This action has expired","approved_label":"Action approved and executed","rejected_label":"Action rejected by user"},"status":{"thinking":"Thinking...","thinking_words":{"thinking":"Thinking...","pondering":"Pondering...","reasoning":"Reasoning...","analyzing":"Analyzing...","considering":"Considering...","processing":"Processing...","contemplating":"Contemplating...","brainstorming":"Brainstorming...","figuring_it_out":"Figuring it out...","connecting_dots":"Connecting the dots...","piecing_together":"Piecing it together...","crunching":"Crunching...","mulling_it_over":"Mulling it over...","working_through_it":"Working through it...","cooking_something_up":"Cooking something up..."},"error":"Something went wrong. Please try again.","no_messages":"Start a conversation with Opal"},"input":{"attach_file":"Attach file","hold_to_speak":"Hold to speak"},"voice":{"mic_denied":"Microphone access denied","start_failed":"Failed to start recording","not_configured":"Voice not configured — add OPENAI_API_KEY","transcription_failed":"Transcription failed — try again","connection_failed":"Connection failed — check your network","quota_exceeded":"Voice quota exceeded — check OpenAI billing"},"slash":{"undo_description":"Reverse the last action","help_description":"Show available commands and skills","new_description":"Start a new conversation","status_description":"Operational overview — tasks, alerts, check-ins","checkins_description":"Today's check-ins and check-outs","overdue_description":"Overdue tasks that need attention","alerts_description":"Active device alerts across properties"},"resize_handle":"Resize chat panel","reservation_context":{"clear":"Clear reservation context","fallback":"Reservation context"},"session":{"load_error":"Failed to load conversation","new":"New chat","history":"Chat history","no_sessions":"No previous conversations","untitled":"Untitled conversation"},"entity":{"not_found":"Entity no longer available","not_available":"N/A","task_due":"Due:","task_assigned":"Assigned:","device_battery":"Battery:","department_members":"Members: {count}","department_inactive":"Inactive: {count}","department_on_time_off":"On time-off: {count}"},"error":{"stream_failed":"Opal encountered an error. Please try again."},"debug":{"toggle":"Toggle tool debug","args":"Args","result":"Result"},"usage":{"tokens":"tokens","input":"Input","cache_write":"Cache Write","cache_read":"Cache Read","output":"Output","total":"Total","aria_cost_breakdown":"Token cost breakdown"},"starter":{"greeting":"How can I help you today?","tasks_overview":"Show me all open tasks","property_status":"What's the status of my properties?","create_task":"Create a maintenance task"},"action_card":{"approve":"Approve","reject":"Reject","status_approved":"Approved","status_rejected":"Rejected","status_superseded":"Superseded","superseded_hint":"This proposal is out of date and was not run. Ask Opal to propose it again.","status_failed":"Failed","failed_hint":"This action could not be completed. Ask Opal to try again.","status_unresolved":"Not confirmed","unresolved_hint":"Opal could not confirm this approval — it may already have been handled. Check the result before asking Opal to propose it again.","awaiting_persist_hint":"Saving this proposal…","persist_failed_hint":"This proposal was not saved, so there is nothing to approve. Ask Opal to propose it again.","persist_unknown_hint":"Opal could not confirm this proposal was saved. Reload the page, or ask Opal to propose it again.","zone_resolving":"Confirming the property's time zone…","zone_unavailable":"Property time zone unavailable. Times are shown in the organization's time zone.","status_executing":"Executing...","value_yes":"Yes","value_no":"No","value_cleared":"Cleared","user_approved":"Approved","user_rejected":"Rejected","email_preview":"Email preview","enum_check_in_state_checked_in":"Checked In","enum_check_in_state_checked_out":"Checked Out","enum_check_in_state_not_checked_in":"Not Checked In","enum_code_display_dynamic":"Dynamic Code","enum_code_display_fixed":"Static Code","enum_code_display_import":"Import from PMS","enum_code_type_group_fixed_code":"Group Static Code","enum_code_type_manual_code":"Manual Code","enum_code_type_property_fixed_code":"Property Static Code","enum_code_type_reservation_dynamic_code":"Reservation Access Code","enum_compensation_type_hourly":"Hourly","enum_compensation_type_per_task_flat":"Flat per task","enum_compensation_type_per_task_hourly":"Hourly per task","enum_compensation_type_salaried":"Salaried","enum_element_category_arrival":"Arrival","enum_element_category_completion":"Completion","enum_element_category_general":"General","enum_field_cleaning_status":"Cleaning","enum_field_inspection_status":"Inspection","enum_field_readiness_status":"Readiness","enum_group_code_display_dynamic":"Dynamic Code","enum_group_code_display_fixed":"Static Code","enum_group_code_display_import":"Import from PMS","enum_mode_cool":"Cool","enum_mode_heat":"Heat","enum_mode_heat_cool":"Heat Cool","enum_mode_off":"Off","enum_occupancy_method_dashboard":"Dashboard","enum_occupancy_method_guest_portal":"Guest Portal","enum_occupancy_method_remote_control":"Remote Control","enum_occupancy_method_smart_lock":"Smart Lock","enum_occupancy_method_workflow_action":"Workflow Action","enum_pms_provider_airbnb":"Airbnb","enum_pms_provider_avaibook":"Avaibook","enum_pms_provider_avantio":"Avantio","enum_pms_provider_beds24":"Beds24","enum_pms_provider_bentral":"Bentral","enum_pms_provider_calry":"Connected PMS","enum_pms_provider_ciirus":"Ciirus","enum_pms_provider_cloudbeds":"Cloudbeds","enum_pms_provider_direct":"Direct","enum_pms_provider_elina":"Elina","enum_pms_provider_fantasticstay":"FantasticStay","enum_pms_provider_guesty":"Guesty","enum_pms_provider_homhero":"Homhero","enum_pms_provider_hospitable":"Hospitable","enum_pms_provider_hostaway":"Hostaway","enum_pms_provider_hostex":"Hostex","enum_pms_provider_hostfully":"Hostfully","enum_pms_provider_hostfully_sandbox":"Hostfully (Sandbox)","enum_pms_provider_hostify":"Hostify","enum_pms_provider_jurny":"Jurny","enum_pms_provider_lodgify":"Lodgify","enum_pms_provider_lodgix":"Lodgix","enum_pms_provider_mews":"Mews","enum_pms_provider_opera":"Oracle Hospitality OPERA","enum_pms_provider_ownerrez":"OwnerRez","enum_pms_provider_resly":"Resly","enum_pms_provider_smily":"Smily","enum_pms_provider_smoobu":"Smoobu","enum_pms_provider_streamline":"Streamline","enum_pms_provider_suiteop":"SuiteOp","enum_pms_provider_tokeet":"Tokeet","enum_pms_provider_track":"Track","enum_pms_provider_uplisting":"Uplisting","enum_pms_provider_your_rentals":"Your Rentals","enum_pms_provider_zeevou":"Zeevou","enum_priority_high":"High","enum_priority_low":"Low","enum_priority_medium":"Medium","enum_priority_urgent":"Urgent","enum_priority_watch":"Watch","enum_role_admin":"Admin","enum_role_custom":"Custom","enum_role_field_supervisor":"Field Supervisor","enum_role_field_team_member":"Field Team Member","enum_role_manager":"Manager","enum_role_member":"Member","enum_role_owner":"Owner","enum_role_viewer":"Viewer","enum_status_awaiting_payment":"Awaiting Payment","enum_status_blocked":"Blocked","enum_status_canceled":"Canceled","enum_status_cancelled":"Cancelled","enum_status_closed":"Closed","enum_status_completed":"Completed","enum_status_confirmed":"Confirmed","enum_status_declined":"Declined","enum_status_expired":"Expired","enum_status_in_progress":"In Progress","enum_status_inquiry":"Inquiry","enum_status_not_started":"Not Started","enum_status_paused":"Paused","enum_status_reserved":"Reserved","enum_status_triage":"Triage","enum_trigger_building_policy_changed":"Building Policy Changed","enum_trigger_checkin":"Checkin","enum_trigger_checkout":"Checkout","enum_trigger_cleaning_declared":"Cleaning Declared","enum_trigger_declaration_skipped":"Declaration Skipped","enum_trigger_inspection_declared":"Inspection Declared","enum_trigger_maintenance_derived":"Maintenance Derived","enum_trigger_property_created":"Property Created","enum_trigger_readiness_recalc":"Readiness Recalc","enum_trigger_reservation_cancelled":"Reservation Cancelled","enum_type_check_in":"Check In","enum_type_check_out":"Check Out","enum_type_checklist":"Checklist","enum_type_condition":"Condition","enum_type_count":"Count","enum_type_dropdown":"Dropdown","enum_type_photo":"Photo","enum_type_rating":"Rating","enum_type_text":"Text","enum_type_yes_no":"Yes No","enum_value_clean":"Clean","enum_value_dirty":"Dirty","enum_value_failed_inspection":"Failed","enum_value_inspected":"Inspected","enum_value_inspection_waived":"Waived","enum_value_not_inspected":"Not Inspected","enum_value_not_ready":"Not Ready","enum_value_occupied":"Occupied","enum_value_ready":"Ready","enum_value_unknown":"Unknown","param_address_override":"Address Override","param_assignee_user_id":"Assignee User","param_bathroom_count":"Bathroom Count","param_bed_count":"Bed Count","param_bedroom_count":"Bedroom Count","param_booking_source_id":"Booking Source","param_catalog_id":"Catalog","param_check_in":"Check In","param_check_in_description_id":"Check In Description","param_check_in_state":"Check In State","param_check_out":"Check Out","param_checklist_items":"Checklist Items","param_city":"City","param_code":"Code","param_code_display":"Code Display","param_code_entry_key":"Code Entry Key","param_code_type":"Code Type","param_code_validation_key":"Code Validation Key","param_collaborators":"Collaborators","param_column":"Column","param_compensation_type":"Compensation Type","param_confirm_shared_grant_deletion":"Confirm Shared Grant Deletion","param_confirmation_code":"Confirmation Code","param_country_code":"Country Code","param_cover_image_url":"Cover Image Url","param_credentials":"Credentials","param_custom_address":"Custom Address","param_declaration":"Declaration","param_default_check_in_hour":"Default Check In Hour","param_default_check_in_minute":"Default Check In Minute","param_default_check_out_hour":"Default Check Out Hour","param_default_check_out_minute":"Default Check Out Minute","param_default_hourly_rate_cents":"Default Hourly Rate Cents","param_department_id":"Department","param_department_ids":"Department","param_description":"Description","param_device_id":"Device","param_due":"Due","param_element_category":"Element Category","param_element_instance_id":"Element Instance","param_email":"Email","param_email_template_id":"Email Template","param_end_time":"End Time","param_est_time":"Est Time","param_eta_check_in":"Eta Check In","param_eta_check_out":"Eta Check Out","param_external_reservation_id":"External Reservation","param_field":"Field","param_first_name":"First Name","param_fixed_code":"Fixed Code","param_formatted_address":"Formatted Address","param_group_code_display":"Group Code Display","param_group_code_entry_key":"Group Code Entry Key","param_group_code_validation_key":"Group Code Validation Key","param_group_id":"Group","param_guest_count":"Guest Count","param_guest_email":"Guest Email","param_guest_first_name":"Guest First Name","param_guest_last_name":"Guest Last Name","param_guest_phone":"Guest Phone","param_has_check_in_instruction_timer":"Has Check In Instruction Timer","param_hide_timer_hours":"Hide Timer Hours","param_house_rules_id":"House Rules","param_images":"Images","param_instruction":"Instruction","param_internal_access_notes":"Internal Access Notes","param_is_access_displayed":"Is Access Displayed","param_is_address_hidden":"Is Address Hidden","param_is_backup_swap_disabled":"Is Backup Swap Disabled","param_is_blocking":"Is Blocking","param_is_bookable":"Is Bookable","param_is_code_override_fixed":"Is Code Override Fixed","param_is_inspection_required":"Is Inspection Required","param_is_offline":"Is Offline","param_is_tap_to_unlock_enabled":"Is Tap To Unlock Enabled","param_is_unit_code_disabled":"Is Unit Code Disabled","param_is_wifi_hidden":"Is Wifi Hidden","param_kind":"Kind","param_last_name":"Last Name","param_latitude":"Latitude","param_longitude":"Longitude","param_max_guests":"Max Guests","param_member_id":"Member","param_mode":"Mode","param_name":"Name","param_nickname":"Nickname","param_note":"Note","param_occupancy_method":"Occupancy Method","param_option_set_id":"Option Set","param_permission_to_enter":"Permission To Enter","param_permissions":"Permissions","param_photo_ai_verification_prompt":"Photo Ai Verification Prompt","param_pms_provider":"Pms Provider","param_portal_settings_id":"Portal Settings","param_postal_code":"Postal Code","param_priority":"Priority","param_property_group_id":"Property Group","param_property_group_ids":"Property Group","param_property_id":"Property","param_property_ids":"Property","param_public_edit_token":"Public Edit Token","param_public_enabled":"Public Enabled","param_replace":"Replace","param_required_skill_id":"Required Skill","param_reservation_id":"Reservation","param_review_request_overrides":"Review Request Overrides","param_review_request_url":"Review Request Url","param_role":"Role","param_scope_all_properties":"Scope All Properties","param_server_id":"Server","param_skill_ids":"Skill","param_sort_order":"Sort Order","param_source_text":"Source Text","param_start_time":"Start Time","param_state":"State","param_status":"Status","param_street_address":"Street Address","param_subtotal_cents":"Subtotal Cents","param_task_id":"Task","param_temperature":"Temperature","param_template_id":"Template","param_timezone":"Timezone","param_title":"Title","param_to_value":"To Value","param_trigger":"Trigger","param_type":"Type","param_unit_number":"Unit Number","param_value":"Value","param_video_url":"Video Url","param_wifi_name":"Wifi Name","param_wifi_password":"Wifi Password","param_workflow_id":"Workflow","tool_addEntityScopes":"Add Entity Scopes","tool_addPropertyScope":"Add Property Scope","tool_addTaskRequirement":"Add Task Requirement","tool_addTemplateChecklistItem":"Add Template Checklist Item","tool_addTemplateGroup":"Add Template Group","tool_applyTemplateToTask":"Apply Template to Task","tool_assignDeviceToProperty":"Assign Device to Property","tool_assignPortalToProperty":"Assign Portal to Property","tool_cancelReservation":"Cancel Reservation","tool_createCode":"Create Code","tool_createDepartment":"Create Department","tool_createElementCatalogEntry":"Create Element Catalog Entry","tool_createInstruction":"Create Instruction","tool_createPortal":"Create Portal","tool_createPortalBranding":"Create Portal Branding","tool_createPortalManual":"Create Portal Manual","tool_createPortalManualCategory":"Create Portal Manual Category","tool_createPrecheckStep":"Create Precheck Step","tool_createPropertyElement":"Create Property Element","tool_createPropertyGroup":"Create Property Group","tool_createReservation":"Create Reservation","tool_createTask":"Create Task","tool_createTemplate":"Create Template","tool_createTranslation":"Create Translation","tool_createUpsell":"Create Upsell","tool_create_email_template":"Create Email Template","tool_create_workflow":"Create Workflow","tool_deleteCode":"Delete Code","tool_deleteInstruction":"Delete Instruction","tool_deletePortalManualCategory":"Delete Portal Manual Category","tool_deleteTask":"Delete Task","tool_initializeLanguageTranslations":"Backfill Language Translations","tool_inviteMember":"Invite Member","tool_lockDevice":"Lock Device","tool_modify_email_template":"Modify Email Template","tool_modify_workflow":"Modify Workflow","tool_publish_workflow":"Publish Workflow","tool_removeEntityScopes":"Remove Entity Scopes","tool_removePropertyScope":"Remove Property Scope","tool_remove_workflow_plugin":"Remove Workflow Plugin","tool_reorderInstruction":"Reorder Instruction","tool_reorderUpsell":"Reorder Upsell","tool_reorderPortalManualCategories":"Reorder Portal Manual Categories","tool_setDeviceMode":"Set Device Mode","tool_setDeviceTemperature":"Set Device Temperature","tool_set_workflow_scopes":"Set Workflow Scopes","tool_setup_workflow_plugin":"Set Up Workflow Plugin","tool_suspendMember":"Suspend Member","tool_unlockDevice":"Unlock Device","tool_updateCheckInState":"Update Check-In State","tool_updateCode":"Update Code","tool_updateDepartment":"Update Department","tool_updateElementCatalogEntry":"Update Element Catalog Entry","tool_updateEmailTemplate":"Update Email Template","tool_updateEntityScopes":"Update Entity Scopes","tool_updateInstruction":"Update Instruction","tool_updateMember":"Update Member","tool_updateMemberRole":"Update Member Role","tool_updateMemberScopes":"Update Member Scopes","tool_updatePortal":"Update Portal","tool_updatePortalBranding":"Update Portal Branding","tool_updatePortalManual":"Update Portal Manual","tool_updatePortalManualCategory":"Update Portal Manual Category","tool_updatePrecheckStep":"Update Precheck Step","tool_updateProperty":"Update Property","tool_updatePropertyElement":"Update Property Element","tool_updatePropertyGroup":"Update Property Group","tool_updatePropertyStatus":"Update Property Status","tool_updateReservation":"Update Reservation","tool_updateTask":"Update Task","tool_updateTaskRequirement":"Update Task Requirement","tool_updateTaskStatus":"Update Task Status","tool_updateTemplate":"Update Template","tool_updateTemplateChecklistItem":"Update Template Checklist Item","tool_updateTemplateGroup":"Update Template Group","tool_updateUpsell":"Update Upsell","tool_update_workflow":"Update Workflow"},"history":{"title":"Conversations","new":"New conversation","no_conversations":"No conversations yet","untitled":"Untitled"},"export":{"title":"Export","copied":"Copied!","copy_markdown":"Copy as markdown","download_md":"Download .md","print_pdf":"Print / Save as PDF","print_title":"Conversation Export","print_heading":"SuiteOp Conversation","role_user":"You","role_assistant":"Opal"},"stream":{"searching":"Searching...","found":"Found {count} results","executing":"Executing...","completed":"Completed","searching_tasks":"Searching tasks...","loading_task":"Loading task...","creating_task":"Creating task...","searching_properties":"Searching properties...","searching_reservations":"Searching reservations...","checking_devices":"Checking devices...","searching_agents":"Searching agents...","loading_agent":"Loading agent...","creating_agent":"Creating agent...","updating_agent":"Updating agent...","modifying_agent":"Editing agent steps...","publishing_agent":"Publishing agent...","awaiting_approval":"Proposing an action...","preparing_tools":"Preparing tools...","working":"Working...","steps_count":"{count} steps"},"card":{"untitled_task":"Untitled Task","unnamed_property":"Unnamed","unknown_guest":"Unknown Guest","unknown_device":"Unknown Device","unknown_member":"Unknown","device_online":"Online","device_offline":"Offline","verb_created":"Created","verb_updated":"Updated","verb_deleted":"Deleted","verb_done":"Done","error_occurred":"An error occurred","no_dates":"No dates","showing_count":"Showing {shown} of {total}","no_results":"No results found","more_fields":"+{count} more fields","show_more":"Show {count} more","show_less":"Show less","bed":"bed","bath":"bath","priority_urgent":"Urgent","priority_high":"High","priority_medium":"Medium","priority_low":"Low","status_confirmed":"Confirmed","status_pending":"Pending","status_cancelled":"Cancelled","status_checked_in":"Checked in","status_checked_out":"Checked out"}},"check_in_builder":{"page":{"title":"Check-in instructions","breadcrumb_settings":"Settings","breadcrumb_current":"Check-in instructions"},"mode":{"apply":"Apply to multiple","sub_manage":"Edit each property’s check-in instructions.","check_in":"Check-in","check_out":"Check-out"},"targets":{"heading":"Targets","x_of_set":"{set} of {total} set","search_placeholder":"Search properties…","all":"All properties","ungrouped":"Ungrouped","loading":"Loading properties…","empty":"No properties yet.","property":"Property","this_property":"this property","has_steps":"set","n_selected":"{count} selected"},"steps":{"insert_variable":"Insert variable","empty":"No steps yet — add your first step."},"vars":{"door_code":"Door / access code","wifi_name":"WiFi network","wifi_password":"WiFi password","guest_name":"Guest name","checkin_time":"Check-in time","checkout_time":"Check-out time","address":"Property address","host_name":"Host name"},"preview":{"mobile":"Mobile","desktop":"Desktop","enlarge":"Enlarge","enlarge_title":"Desktop preview","label":"Live guest preview","previewing_as":"Preview for {name} · {arrival}","welcome":"Welcome, {name}","footer":"Each guest sees their own door code, WiFi and times filled in automatically.","empty":"Add a summary or steps to see the guest preview.","not_set":"not set","per_reservation":"per reservation","empty_instructions":"Add instructions to see the guest preview.","demo_unlock_toast":"Guests can tap to unlock here"},"apply":{"paste_placeholder":"Paste your check-in instructions here…","error":"Something went wrong applying. Please try again.","untitled_step":"Untitled step","editing_one":"Editing {name}","composing_many":"Composing for {count, plural, one {# property} other {# properties}}","paste_format":"Paste & format","format_steps_cta":"Format as steps","format_summary_cta":"Use as summary","summary_label":"Summary","summary_placeholder":"Add an overview shown above the steps…","steps_label":"Steps · {count}","step_title_placeholder":"Step title","step_body_placeholder":"Describe this step…","add_step":"Add a step","replace_warning":"Replaces existing instructions on {count} of {total} selected.","save_cta":"Save","apply_cta":"Apply to {count, plural, one {# property} other {# properties}}","applied_toast":"Applied to {count, plural, one {# property} other {# properties}}","video_placeholder":"Video link (optional)","remove_image":"Remove image","seed_error_title":"Couldn’t load this property","seed_error_body":"We couldn’t load this property’s instructions. Refresh before editing — saving now could overwrite the real set.","seed_error_retry":"Retry","format_empty":"Opal couldn’t pull anything usable from that text — try rephrasing, or add steps manually.","format_truncated":"Opal could only fit part of that text — the list below keeps the first steps, with long ones shortened. Your paste is still here: add the rest by hand, or trim it and try again."},"vars_source":{"reservation":"From the reservation","property":"From property settings","organization":"From your organization","lock":"From the smart lock"},"vars_set_link":"Set →","vars_per_reservation":"per reservation","manage":{"select_prompt_title":"Select a property","select_prompt_body":"Pick a property or group on the left to view and edit its check-in instructions."}},"code":{"empty":"No access codes on this device","timezone_hint":"Times are in {zone}","status_tooltip":{"pending":"Sending code to the lock…","queued_for_sync":"Lock is offline. Code queued for sync.","awaiting_code":"Lock received the request, waiting for confirmation","installed":"Code is on the lock, activates on {startTime}","scheduled":"Code is scheduled, installs on {startTime}","active":"Code is working now, expires on {endTime}","expired":"Code time window has passed","failed":"Installation failed — check this code and retry it if it's still needed.","pending_deletion":"Removing code from the lock…","failed_deletion":"Removal failed — contact support or retry manually","unknown":"Status unknown"},"actions":{"sync_codes":"Sync Codes","reveal_code":"Reveal code","hide_code":"Hide code","refresh":"Refresh","retry":"Retry","delete":"Delete"},"action_unavailable":{"no_lock":"No lock sits behind this code, so there is nothing to install, retry or remove. That is normal for fixed and imported codes.","no_permission":"You do not have permission to manage lock codes.","demo_device":"This is a demo device. Actions here would report success without changing anything on the lock.","read_only_provider":"This provider manages its own codes. SuiteOp can list them but never change them.","provider_unsupported":"This lock cannot hold access codes.","lock_not_provisioned":"This lock is not set up for code management yet.","lock_provisioning":"Setup is running on this lock right now. Wait for it to finish.","push_disabled":"Code writing is turned off for this integration account.","not_failed":"There is nothing to retry — this code has no failed attempt, or it is already deleted.","queued_for_sync":"This code is waiting for the lock to come back online. It will be sent automatically once the lock reconnects, so there is nothing to retry by hand.","window_elapsed":"This code's validity window has passed, so reinstalling it would put a code on the lock that opens nothing. Issue a new code instead.","not_retryable":"This is a property master or checkout code, installed on its own schedule rather than issued for a stay. Retrying it here would not be the right repair — check the property's code settings instead.","reservation_ineligible":"This reservation has ended, so its door code is no longer being installed. There is no access left to restore here.","discovered_code":"This code was found on the lock rather than issued by SuiteOp, so it cannot be acted on individually. Codes like this are cleared together by provisioning the lock again with unknown codes removed.","imported_only":"This code was imported and never installed by SuiteOp, so there is nothing to reinstall.","shadow_credential":"This entry records a backup code being shared; it is not a code of its own. Recovery goes through backup-code management.","immutable_credential":"This lock's provider creates the PIN itself, so a retry would produce a different code rather than this one. SuiteOp will not swap the guest's code silently — issue a new code if that is what you want.","provider_cannot_update":"This lock's provider can add a code but never change one — its codes are fixed once they reach the lock and can only be left to expire. Delete this code and create a new one instead.","retry_in_progress":"An attempt is already running. Wait for it to finish.","deletion_in_progress":"This code is already being removed from the lock.","deletion_retry_on_device":"Retrying this one removes the code from the lock, and it may be shared with other devices or stays. Open the lock's Codes tab to see exactly what it removes and confirm there.","backup_not_confirmed":"This backup code is not confirmed on the lock yet, so it cannot be shared with a reservation. You can still open it to review its details.","not_backup":"This action applies to backup codes only."},"create":{"title":"Add Access Code","code_label":"Code","label":"Label","start_time":"Start Time","end_time":"End Time","default_label":"Manual code","generate_pin":"Generate PIN","generation_unavailable":"PIN generation is unavailable for this device. Enter a PIN manually.","provider_generated":"The provider generates the PIN when you save.","window_label":"Access period","window_permanent":"Immediate access · No expiry","window_bounded":"Scheduled start and end","window_start_only":"Scheduled start · No expiry","window_unavailable":"This device does not support this access period."},"delete":{"title":"Delete Code","description":"Are you sure you want to delete this access code? This action cannot be undone.","shared_description":"This code is part of one Access Grant shared by {count} devices: {devices}. Deleting it will remove the code from every listed device. This action cannot be undone.","shared_reservations_description":"This code is shared: {count, plural, one {# other reservation is} other {# other reservations are}} currently using it. Deleting it removes the PIN from the lock for them too. This action cannot be undone.","also_shared_with_reservations":"It is also in use by {count, plural, one {# other reservation} other {# other reservations}}, who lose the door with it.","shared_external_description":"This code belongs to an Access Grant created outside SuiteOp and shared across locks. Deleting it removes the entire grant, including any lock that has not synced yet and is therefore not listed. Known devices ({count}): {devices}. This action cannot be undone."},"toast":{"created":"Access code created","synced":"Codes synced","refreshed":"Code refreshed","retry_queued":"Retry queued","retry_started":"Retry started","deleted":"Access code deleted"},"backup_swap":{"action":"Assign backup code","assigned":"A backup code is assigned to this reservation for {device}.","confirm_description":"Assign {backupCode} to this reservation for {device}. This will replace the reservation's current code on that device.","description":"Choose a backup code to assign to this reservation for {device}.","empty":"No eligible backup codes are available for {device}.","load_error":"Backup codes for {device} could not be loaded. Try again.","loading":"Loading backup codes for {device}…","not_available":"A backup code cannot be assigned to this reservation for that device.","select_label":"Backup code for {device}","select_placeholder":"Choose a backup code","shared_grant":"This code is part of an Access Grant shared by several locks, so it cannot be replaced on its own. Delete the shared grant and issue a new code instead.","success":"Backup code assigned to the reservation.","unavailable":"Backup-code assignment is unavailable for {device}.","unnamed_option":"Backup code {number}","unreadable_shares":"This backup code has a sharing record that cannot be read, so it cannot be assigned until someone resolves it."},"backup_management":{"action":"Manage backup code","description":"Review where this backup code is shared and who can use it.","load_error":"The backup-code details could not be loaded. Try again.","used":"Used","unused":"Unused","expiration":"Expiration","reservation_sharing":"Share with reservations","reservation_sharing_description":"Allow this code to replace an eligible reservation code.","disable_guard":"Remove the {count} linked reservation(s) before turning reservation sharing off.","malformed_description":"{count} stored sharing record(s) cannot be read. This code will not be assigned to new reservations while they remain. Remove them to put it back in service.","malformed_entry":"Unreadable record {position}","withheld_unexplained":"This backup code is withheld from new reservations because of a sharing record that cannot be read. The record is no longer shown here, so contact support to put the code back in service.","remove_malformed_title":"Remove unreadable record?","remove_malformed_description":"Remove unreadable record {position}? Its contents cannot be shown, this cannot be undone, and the code returns to the backup pool once the last one is gone. Rotate the PIN first if its holder is still unknown.","residual_access_description":"The backup PIN for {code} is still programmed on this lock. Unit access was disabled for a stay that had been given this code, so anyone who already knows it may still be able to get in. Review or rotate this code before you share it again.","reservations_tab":"Reservations ({count})","manual_tab":"Manual shares ({count})","linked_reservations":"Linked reservations","share_again":"Share code again","sharing_disabled":"Turn on reservation sharing and save before choosing a reservation.","sharing_withheld":"Sharing is unavailable while a stored sharing record cannot be read. Remove the unreadable record above to put this code back in service.","sharing_withheld_unexplained":"Sharing is unavailable while a stored sharing record cannot be read. That record is no longer shown here, so contact support to put this code back in service.","search_reservations":"Search eligible reservations","share":"Share code","manual_note":"Share note","manual_expiration":"Expiration","add_manual":"Add manual share","manual_shares":"Manual shares","legacy":"Legacy","unlink_title":"Remove reservation share?","unlink_description":"Remove this code from {reservation}? No replacement will be created automatically. The reservation will open next so you can follow up.","unlink_confirm":"Remove and open reservation","share_title":"Share backup code?","share_description":"Share this backup code with {reservation}? This will replace the reservation's current code on this device.","share_confirm":"Share code","share_row":"Share this code with {reservation}","unlink_row":"Remove this code from {reservation}","remove_manual_row":"Remove manual share: {note}","remove_malformed_row":"Remove unreadable record {position}"},"no_expiry":"No expiry","source_label":{"user":"User code","staff":"Staff code","reservation":"Reservation code","manual":"Manual","backup":"Backup code","unknown":"Other code","master":"Master code","checkout":"Checkout code","synced_backup_code":"Synced backup code"}},"common":{"save":"Save","saved":"Saved","error_card_setup":"Card setup failed. Please try a different payment method.","entity_tabs":{"details":"Details","assignment":"Assignment"},"save_failed":"Failed to save changes","save_partial_failure":"Some items failed to save","cancel":"Cancel","discard":"Discard","keep_editing":"Keep editing","unsaved_changes_title":"Discard unsaved changes?","unsaved_changes_description":"Your changes will be lost. This can't be undone.","delete":"Delete","delete_attachment_title":"Delete attachment?","delete_attachment_description":"This file will be permanently deleted and cannot be recovered.","edit":"Edit","duplicate":"Duplicate","create":"Create","add":"Add","archived":"archived","confirm":"Confirm","back":"Back","go_back":"Go back","go_back_to":"Go back to {name}","close":"Close","select":"Select…","search":"Search","reset":"Reset","filters":"Filters","clear_filter":"Clear filter","clear_filter_named":"Clear {label} filter","loading":"Loading…","processing":"Processing…","creating":"Creating…","saving":"Saving…","uploading":"Uploading…","sending":"Sending…","view_all":"View all","actions":"Actions","row_activate_hint":"Press Enter or Space to open","drag":"Drag to reorder","resize_panel":"Resize panel","previous":"Previous","next":"Next","showing_results":"Showing {start}–{end} of {total, plural, one {# result} other {# results}}","showing_results_capped":"Showing {start}–{end} of {cap, number}+ results","count_capped":"{cap, number}+","showing_groups":"Showing {start}–{end} of {total, plural, one {# group} other {# groups}}","page_of":"Page {page} of {totalPages}","page_number":"Page {page}","no_results":"No results found","no_options_found":"No options found","search_filter_placeholder":"Search {label}…","clear_search":"Clear search","clear_selection":"Clear selection","clear_date":"Clear date","try_again":"Try again","department_archived_hint":"This department is archived. Pick another department to continue.","department_archived_notice":"This department is archived.","department_absent_hint":"This department is no longer available. Pick another department.","department_template_unavailable_hint":"This template's department is no longer available. Pick another template.","department_unconfirmed_hint":"We couldn't confirm this department.","something_went_wrong":"Something went wrong","page_not_found":"Page not found","back_to_home":"Back to home","error_500_description":"An unexpected error occurred. Please try again later.","error_404_description":"The page you’re looking for doesn’t exist or has been moved.","unknown":"Unknown","connected_pms":"Connected PMS","remove":"Remove","remove_item":"Remove {label}","archive":"Archive","restore":"Restore","link":"Link","unlink":"Unlink","lock":"Lock","unlock":"Unlock","access_code":"Access code","refresh":"Refresh","beta":"Beta","detail":"Detail","yes":"Yes","no":"No","required":"Required","optional":"Optional","info":"Info","active":"Active","inactive":"Inactive","password_strength":{"weak":"Weak","fair":"Fair","good":"Good","strong":"Strong","excellent":"Excellent"},"error":"Error","validation_error":"Validation error: {field}","unexpected_error":"An unexpected error occurred","rate_limited":"Too many requests — slow down for a moment and try again.","ai_budget_exhausted":"AI features are paused — this month's AI credits are used up. They reset at the start of next month; see AI Credits under Billing.","network_error":"Could not reach the server. Please try again.","session_expired":"Your session has expired. Please sign in again.","no_permission":"You don’t have permission to view this page. Contact your organization administrator.","no_access":"No access","no_access_description":"You don’t have permission to view this. Contact your organization administrator.","action_not_permitted":"This action wasn’t completed because you don’t have permission. Contact your organization administrator.","language_switcher":{"label":"Change language"},"menu":"Menu","saved_views":"Saved Views","saved_views_empty":"No saved views yet","saved_views_unsaved":"Unsaved changes","not_saved_in_views":"Saved views don't change this filter — it keeps the setting you chose.","saved_views_save_as":"Save as…","saved_views_save_as_title":"Save View","saved_views_save_as_description":"Give this filter set a name so you can quickly apply it later.","saved_views_name_placeholder":"View name","saved_views_updated":"View updated","saved_views_created":"View saved","saved_views_favorites":"Favorites","saved_views_all":"All","saved_views_no_favorites":"You don't have any favorite views","saved_views_edit_title":"Edit View","saved_views_edit_description":"Change the name or visibility of this saved view.","saved_views_visibility":"Visibility","saved_views_visibility_org":"Organization","saved_views_visibility_private":"Private","saved_views_set_default":"Set as default","saved_views_unset_default":"Remove default","saved_views_deleted":"View deleted","saved_views_delete_title":"Delete View","saved_views_delete_description":"Are you sure you want to delete this saved view? This action cannot be undone.","saved_views_add_favorite":"Add to favorites","saved_views_remove_favorite":"Remove from favorites","date_preset":{"last_7_days":"Last 7 Days","last_30_days":"Last 30 Days","last_3_months":"Last 3 Months","last_6_months":"Last 6 Months","last_12_months":"Last 12 Months","today":"Today","tomorrow":"Tomorrow","this_week":"This Week","next_week":"Next Week","this_month":"This Month","next_3_days":"Next 3 Days","next_7_days":"Next 7 Days","next_14_days":"Next 14 Days","next_30_days":"Next 30 Days","next_3_months":"Next 3 Months","select_preset":"Quick select...","date_type":"Date type","aggregate":"Group by"},"column_picker":{"trigger":"Columns","visible_columns":"Visible columns","hidden_columns":"Hidden columns","show_all":"Show all","hide_all":"Hide all","reset_to_defaults":"Reset to defaults","column_count":"{count, plural, one {# column} other {# columns}}"},"name":"Name","multi_lang_input":{"saved":"Translation saved","saved_and_translating":"Saved — translation started.","translation_started":"Translation started","translating":"Translating…","method_auto":"Auto","method_manual":"Manual","save_and_translate":"Save & Translate","unsaved_changes":"Unsaved changes","permission_denied":"You don’t have permission to edit this translation. Contact your organization administrator.","shared_read_only":"This content is shared with properties outside your access, so it’s read-only to you.","flush_failed":"This translated text couldn’t be saved, so nothing was saved.","personal_language_hint":"{language} is not enabled for this organization. You can write content manually, but auto-translation won’t target this language.","showing_english_fallback":"No {language} translation yet. Showing English — type to add a translation.","deferred_badge":"Deferred","deferred_hint":"Other languages will be auto-translated after saving.","field_label_fallback":"This field","flush_over_limit":"{field} exceeds the character limit and can't be saved.","flush_missing_create_meta":"{field} is missing its translation configuration and can't be saved."},"smart_photo_input":{"tab_upload":"Upload","tab_link":"Link","tab_unsplash":"Unsplash","tab_icon":"Icon","drop_or_click":"Drop an image here or click to browse","choose_file":"Choose file","max_size":"Max {size} MB","url_placeholder":"Paste image URL…","load":"Load","load_failed":"Could not load image from this URL","search_placeholder":"Search Unsplash photos…","photo_by":"Photo by","no_results":"No photos found","crop_title":"Crop Image","free":"Free","crop":"Crop","replace":"Replace","file_too_large":"File is too large","fetch_failed":"Failed to fetch image","crop_failed":"Failed to crop image"},"user_selector":{"placeholder":"Search for a user…","no_results":"No users found","me_suffix":"(me)"},"picker_actions":{"select_all":"Select all ({count})","deselect_all":"Deselect all ({count})","selected_count":"{count, plural, =0 {None selected} one {# selected} other {# selected}}","select_all_row":"Select all","select_only":"Select only"},"property_picker":{"placeholder":"Select properties…","search_placeholder":"Search properties…","no_results":"No properties found","selected_count":"{count, plural, one {# property selected} other {# properties selected}}","clear_all":"Clear all"},"from_catalog":"From catalog","linked_instances":"Linked instances","attachment_manual":"Manual","attachment_warranty":"Warranty","attachment_photo":"Photo","attachment_receipt":"Receipt","attachment_other":"Other","attachments":"Attachments","attachment_type":"Type","drop_files":"Drop files here or click to upload","file_size_limit":"Max 25 MB per file","upload_failed":"Upload failed","file_too_large":"File exceeds the 25 MB limit","all":"All","description":"Description","quantity":"Quantity","serial_number":"Serial Number","make":"Make","model":"Model","notes":"Notes","collaborators_picker":{"placeholder":"Add collaborators…","search_placeholder":"Search members…","empty_label":"No members found.","selected_count":"{count} selected"},"member_picker":{"placeholder":"Select a member…","search_placeholder":"Search members…","empty_label":"No members found.","unassign_label":"Unassigned","multi_placeholder":"Select members…","other_members":"Other members"},"rich_text_editor":{"bold":"Bold","italic":"Italic","underline":"Underline","strikethrough":"Strikethrough","heading_2":"Heading 2","heading_3":"Heading 3","bullet_list":"Bullet list","ordered_list":"Ordered list","link":"Link","unlink":"Remove link","link_prompt":"Enter URL","placeholder":"Type '/' for commands...","hint":"Type / for commands — select text for formatting","slash":{"text":"Text","text_desc":"Plain text paragraph","heading_1":"Heading 1","heading_1_desc":"Large section heading","heading_2":"Heading 2","heading_2_desc":"Medium section heading","heading_3":"Heading 3","heading_3_desc":"Small section heading","bullet_list":"Bullet List","bullet_list_desc":"Unordered list","ordered_list":"Numbered List","ordered_list_desc":"Ordered list with numbers","quote":"Quote","quote_desc":"Block quote","code_block":"Code Block","code_block_desc":"Code snippet","image":"Image","image_desc":"Embed an image from URL","image_url_prompt":"Enter image URL","divider":"Divider","divider_desc":"Horizontal line separator","heading_placeholder":"Heading"}},"icon_picker":{"search":"Search icons...","select":"Select icon","showing":"Showing {count} of {total}","suggested":"Suggested","brand_preview":"As guests see it, across your brands","brand_preview_more":"{count, plural, one {more brand} other {more brands}}"},"coming_soon":{"title":"Coming Soon","billing":"Billing and subscription management is coming soon.","white_labeling":"White labeling customization is coming soon.","settings":"Account and app settings are coming soon.","schedule":"Task scheduling is coming soon.","tasks_dashboard":"Task dashboard overview is coming soon.","inbox":"Unified messaging inbox is coming soon.","refer":"Referral program is coming soon.","upsells":"Upsell request management is coming soon.","transactions":"Transaction management is coming soon.","service_fee":"Service fee management is coming soon.","workflow_log":"Agent execution log is coming soon."},"week_strip":{"aria_available":"{day}: available","aria_unavailable":"{day}: unavailable"},"no_results_filtered":"No results match your filters","no_results_on_page":"No results on this page","clear_filters":"Clear all filters","app_update_available":"A new version of this app is available.","app_update_refresh":"Refresh","app_update_stale_title":"This app was updated","app_update_stale_description":"This page could not load because a new version was deployed. Refresh to continue.","realtime_paused":"Live updates paused — reconnecting…","address_lookup_failed":"Couldn't load that address. Please try again.","language_suggestion":{"message":"Your browser's language is {language}. Would you like to switch?","switch":"Switch to {language}","dismiss":"Dismiss"},"upload":{"invalid_image_type":"Unsupported file type. Please use JPG, PNG, WebP, HEIC, HEIF, or GIF.","invalid_file_type":"Unsupported file type. Please use an image, PDF, or Word/Excel document.","image_too_large":"Image is too large. Please use a file under {size} MB."},"support":{"label":"Support","unread":"{count, plural, one {# unread message} other {# unread messages}}"},"group_expand":"Expand group","group_collapse":"Collapse group","rows_per_page":"Rows per page","time_picker":{"hour":"Hour","minute":"Minute","period":"AM/PM"},"feedback":{"label":"Send feedback","title":"Send feedback","description":"Tell us what is broken, missing, or could be better. We read every message.","kind_label":"Type","kind_bug":"Bug","kind_idea":"Idea","kind_improvement":"Improvement","body_label":"Your feedback","body_placeholder":"What happened, and what did you expect?","capture_screen":"Capture this screen","add_screenshot":"Add screenshot","remove_screenshot":"Remove screenshot","screenshot_notice":"Screenshots may show guest details. Remove them if so.","send":"Send","sent":"Thanks, we received your feedback.","error":"We could not send your feedback. Please try again.","upload_failed":"A screenshot failed to upload. Remove it and try again.","unsupported_file":"Only JPEG, PNG, WebP, HEIC, HEIF and GIF images are supported.","file_too_large":"Each screenshot must be under {size} MB.","screenshot_cap":"You can attach up to {max} screenshots.","upload_in_progress":"Please wait for the current screenshot to finish uploading.","record_screen":"Record screen","recording_hint":"Talk through what you see — we transcribe your narration.","remove_recording":"Remove recording","recording_notice":"The recording may show guest details. Remove it if so.","recording_cap":"Recordings stop automatically after {minutes} minutes.","video_too_large":"The recording is too large to attach. Record a shorter one.","recording_unsupported":"Screen recording is not supported in this browser. Use Chrome or Edge.","recording_failed":"We could not start the recording.","mic_unavailable":"Microphone access was refused, so the recording has no narration.","video_upload_failed":"The recording failed to upload. Remove it and try again.","hud":{"aria_label":"Screen recording controls","mic_level":"Microphone level","mic_off":"Microphone off","pause":"Pause recording","resume":"Resume recording","stop":"Stop and attach","discard":"Discard recording"},"errors":{"rate_limited":"You have sent a lot of feedback recently. Please try again later."}},"outbound_mute":{"banner":"Outbound communications are paused for this account since {date}. Nothing is sent — messages, notifications, integrations and payments — until SuiteOp resumes it.","refused":"Outbound communications are paused for this account, so nothing was sent. Contact SuiteOp support to resume them."},"legacy_link":{"title":"This link is from the old app","body_task":"This task did not carry over to the new SuiteOp. Tasks stayed in the old app, so this link can't be opened here.","body_photo_upload":"This photo upload did not carry over to the new SuiteOp. Photo uploads stayed in the old app, so this link can't be opened here.","body_generic":"This link is from the old SuiteOp and can't be opened here.","continue":"Continue to SuiteOp"}},"dashboard":{"welcome":"Welcome back, {firstName}","welcome_anonymous":"Welcome back","overview":"Here's your operations overview","alerts":{"page_title":"Alerts","subtitle":"Sensor events from the last 24 hours","active":"Active","resolved":"Resolved","suppressed_quiet_hours":"Suppressed · quiet hours","empty_title":"No alerts","empty_description":"No sensor events in the last 24 hours.","merchandising":{"eyebrow":"Environmental monitoring","title":"Catch problems before they become guest complaints","description":"SuiteOp brings noise and climate alerts into the same operation your team already uses. Netatmo hardware has a one-time device cost, followed by a lightweight SuiteOp device subscription designed to be more accessible than many standalone monitoring alternatives.","talk_to_specialist":"Talk to a SuiteOp specialist","explore_devices":"Explore devices","noise_title":"Noise awareness","noise_description":"See sustained noise events early enough for your team to respond.","climate_title":"Climate visibility","climate_description":"Monitor temperature, humidity, and CO₂ from one place.","workflow_title":"Operational follow-through","workflow_description":"Turn alerts into consistent action across properties and teams.","netatmo_available":"Netatmo is available today","coming_soon":"Minut and more integrations are coming soon"},"type":{"noise":"Noise","temperature":"Temperature","humidity":"Humidity","co2":"CO2","air_quality":"Air quality","disconnect":"Disconnected","low_battery":"Low battery"},"filter":{"type":"Type","property":"Property","status":"Status","group":"Group"},"columns":{"type":"Type","property":"Property","device":"Device","reading":"Reading","status":"Status","started":"Started","updated":"Last update","group":"Group"},"detail":{"title":"Alert detail","device":"Device","property":"Property","reading":"Reading","escalation":"Escalation","started":"Started","resolved_at":"Resolved","last_reading":"Last reading","current":"Current","duration":"Duration","duration_minutes":"{count}m","duration_hours":"{count}h","duration_days":"{count}d","guest":"Guest","report_title":"Sensor alert report","report_generated":"Generated {date}","window_event":"Event","threshold_line":"{metric} threshold","history":"Reading history","no_chart":"No reading history for this alert type.","mark_resolved":"Mark resolved","resolving":"Resolving…","resolved_toast":"Alert resolved","resolve_error":"Could not resolve the alert. Please try again.","not_found":"Alert not found","not_found_description":"This alert may have been resolved or removed.","back":"Back to alerts","no_escalation_yet":"No escalation yet","methodology_title":"About this data","methodology_provenance":"Readings in this report were captured automatically by a commercial-grade environmental sensor ({device}) installed at the property, at approximately 5-minute intervals.","methodology_privacy":"The sensor measures ambient sound pressure levels (decibels) only — it does not and cannot record audio, voices, or conversations. Guest privacy is fully preserved.","methodology_integrity":"Values are shown exactly as reported by the device, without modification.","export_noise_report":"Create noise report","export_report":"Create alert report","event_title":"{type} event"},"escalation_1":"1st alert","escalation_2":"2nd alert","escalation_3":"3rd alert (final)"},"filters":{"all_properties":"All Properties","property":"Property","property_group":"Group","select_date":"Select date","today":"Today","refresh":"Refresh"},"widgets":{"attention":{"title":"Needs attention","need_action":"need action","review_all":"Review all","snooze_all":"Snooze all","failed_codes":"{count, plural, one {# failed code} other {# failed codes}}","to_review":"{count, plural, one {# to review} other {# to review}}","charges":"{count, plural, one {# charge} other {# charges}}","messages":"{count, plural, one {{display} message} other {{display} messages}}","all_properties":"All properties","approvals":"{count, plural, one {# approval} other {# approvals}}","low_battery":"{count, plural, one {# low battery} other {# low battery}}","all_clear":"Nothing needs attention"},"reservations":{"title":"Reservations","todays_movement":"Today's movement","check_ins":"{count, plural, one {check-in} other {check-ins}}","check_outs":"{count, plural, one {Check-out} other {Check-outs}}","out_count":"{count, plural, one {# out} other {# out}}","booked":"{count, plural, one {Booked} other {Booked}}","booked_count":"{count, plural, one {# booked} other {# booked}}","occupied":"{count, plural, one {Occupied} other {Occupied}}","check_ins_tab":"Check-ins","check_outs_tab":"Check-outs","code_failed":"Code failed","verify":"Verify","all_reservations":"All reservations","more":"more"},"verification":{"title":"Verification status","subtitle":"Guest verification","no_review":"Nothing to review","empty_message":"No reservations to verify for this day yet.","all_reservations":"All reservations"},"tasks":{"title":"Tasks","overdue":"overdue","overdue_label":"Overdue","today":"Today","this_week":"this week","my":"My","team":"Team","new":"New","all_my_tasks":"All my tasks","calendar":"Calendar","untitled_task":"Task"},"properties":{"title":"Properties","ready":"ready","readiness":"Readiness","ready_for_next_guest":"ready for next guest","not_ready":"Not ready","occupied":"Occupied","all_units":"All units","devices":"Devices"},"inbox":{"title":"Inbox","unread":"{count, plural, one {unread} other {unread}}","unread_count":"{count, plural, one {{display} unread message} other {{display} unread messages}}","open_inbox":"Open inbox","all_properties":"All properties"},"folio":{"title":"Folio","charges":"Charges","action_required":"Action req","action_required_count":"{count, plural, one {# charge needs action} other {# charges need action}}","completed":"Completed","paid30d":"Paid 30d","all_charges":"All charges","reservations":"Reservations","other_currencies":"+{count, plural, one {# more currency} other {# more currencies}}"},"devices":{"title":"Devices","online":"online","low_battery":"Low battery","low_battery_count":"{count, plural, one {# low battery} other {# low battery}}","low":"Low","offline":"Offline","offline_count":"{count, plural, one {# offline} other {# offline}}","devices_label":"devices","devices_link":"Devices","alerts":"Alerts","more_types":"{count} more device types","types":{"lock":"Locks","thermostat":"Thermostats","sensor":"Sensors","door_window_sensor":"Door/window sensors","sound_system":"Sound systems","hub":"Hubs","light":"Lights","camera":"Cameras","repeater":"Repeaters","unknown":"Other"}},"approvals":{"title":"Approvals","awaiting_you":"awaiting you","timesheets":"Timesheets","charges":"Charges","all_approvals":"All approvals"},"shifts":{"title":"Shifts","on_now":"On now","on_today":"on today","presence_live":"Clocked in now","presence_scheduled":"Scheduled now","presence_off":"Not scheduled now","presence_hint":"From the roster — clock-ins are not shown here.","overdue_count":"{count, plural, one {# overdue task} other {# overdue tasks}}","overdue_tooltip":"Tasks assigned to this member that are past due today","progress_count":"{done}/{total} tasks","progress_tooltip":"Tasks completed today out of tasks scheduled during this member's shift","also_working":"Also working","on_shift":"on shift","clock_in":"Clock in","clocked_in_toast":"Clocked in","none_today":"No shifts today","not_on_shift":"Not on shift","you":"You","member":"Member","schedule":"Schedule","my_timesheet":"My timesheet"},"workflows":{"title":"Agents","today":"Today","time_ago":"{time} ago","runs":"Runs","failed":"Failed","failed_today":"failed today","success":"Success","view_log":"View log","rules":"Rules","log":"Log"},"analytics":{"title":"Analytics","occupancy":"Occupancy","adr":"ADR","revpar":"RevPAR","dashboard":"Dashboard","change_metric":"Change metric","metric":"Metric","range":"Range","category":"Category","custom_title":"Custom title (optional)","configure_add_title":"Add analytics tile","add":"Add","analytics_count":"{count} of {max}","analytics_limit_reached":"Limit of {max} analytics tiles reached","nights_booked_trend":"Nights booked trend","review_volume_trend":"Review volume trend","orders_trend":"Orders trend","tasks_completed_trend":"Tasks completed trend","overdue_tasks_trend":"Overdue tasks trend","spend_trend":"Spend trend","task_volume_trend":"Task volume trend","metrics":{"occupancy_rate":"Occupancy","average_daily_rate":"Avg daily rate","rev_pan":"RevPAN","total_revenue":"Revenue","total_reservations":"Reservations","check_ins":"Check-ins","check_outs":"Check-outs","avg_length_of_stay":"Avg length of stay","cancellation_rate":"Cancellation rate","returning_guest_rate":"Returning guests","avg_booking_lead_time_days":"Booking lead time","total_reviews":"Reviews","average_rating":"Avg rating","dispute_rate":"Dispute rate","public_review_cta_clicks":"Review link clicks","avg_cleanliness_rating":"Avg cleanliness","approval_rate":"Approval rate","total_tasks":"Tasks","completion_rate":"Completion rate","avg_completion_time_hours":"Avg completion time","overdue_rate":"Overdue rate","blocking_tasks":"Blocking tasks","recurring_task_completion_rate":"Recurring completion rate","estimate_accuracy":"Estimate accuracy","total_staff":"Staff","avg_completion_rate":"Avg completion rate","avg_on_time_rate":"Avg on-time rate","total_spend":"Total spend","total_estimated":"Total estimated","budget_variance":"Budget variance","avg_cost_per_task":"Avg cost per task","upsell_revenue_cents":"Store revenue","attach_rate":"Attach rate","revenue_per_stay_cents":"Revenue per stay","aov_cents":"Average order value","ancillary_share_pct":"Ancillary share","purchases":"Purchases","requests_approval_rate":"Request approval rate","requests_avg_approval_hours":"Avg. approval time"}},"alerts":{"title":"Environmental alerts","active_now":"Active now","noise":"Noise","temp":"Temp","humidity":"Humidity","co2":"CO₂","alert_label":"alert","all_alerts":"All alerts"},"ui":{"customize":"Customize","reset":"Reset","done":"Done","add_widgets":"Add widgets","add_widget":"Add {name}","remove":"Remove","small":"Small","large":"Large","move_up":"Move up","move_down":"Move down","save_error":"Couldn’t save your layout. Please try again.","save_success":"Layout saved"}}},"department":{"page":{"title":"Departments","archived":"Archived","subtitle":"Manage departments and team assignments","search_placeholder":"Search departments...","show_archived":"Show archived","new_department":"New Department","empty_title":"No departments yet","no_departments":"No departments in this category","add_in_category":"Add department","add_to_category":"Add department to this category"},"category":{"cleans":"Housekeeping","maintenance":"Maintenance","inspections":"Inspections","guest_experience":"Guest Experience","other":"Other","count":"{count} departments"},"columns":{"name":"Name","managers":"Managers","members":"Members","active_tasks":"Active Tasks","auto_assign":"Auto-assign","auto_assign_on":"On","auto_assign_off":"Off"},"create":{"title":"New Department","select_category":"Select a category","select_category_desc":"Choose the type of work this department handles","name_label":"Name","name_placeholder":"e.g., Maintenance","description_label":"Description","description_placeholder":"What does this department handle?","color_label":"Color","change_category":"change","submit":"Create Department","cancel":"Cancel","created":"Department created"},"detail":{"back":"Departments","edit":"Edit","save":"Save","cancel":"Cancel","archive":"Archive","archive_confirm_title":"Archive Department","archive_confirm_desc":"This will hide the department from active views. Existing tasks will not be affected.","settings":"Settings","not_found":"Department not found","load_error":"Failed to load department","delete":"Archive Department","delete_confirm_title":"Archive Department","delete_confirm_desc":"This will hide the department from active views. Existing tasks will not be affected.","auto_assignment":"Auto-assignment"},"settings":{"category":"Category","color":"Color","blocking_priority":"Blocking Priority","blocking_not_set":"Not set","auto_assignment":"Assignment Method","off":"Off","priority_watch":"Watch","priority_low":"Low","priority_medium":"Medium","priority_high":"High","priority_urgent":"Urgent","is_maintenance":"Issues Department","is_maintenance_yes":"Yes","is_maintenance_no":"No","is_maintenance_desc":"Receives maintenance tickets and issue reports"},"members":{"title":"Team Members","add":"Add Member","name":"Name","manager":"Manager","member":"Member","remove":"Remove","save":"Save Changes","will_remove":"Will be removed on save","manager_desc":"Can assign and review tasks in this department","member_desc":"Can be assigned tasks in this department","show_all":"Show all ({count})","show_less":"Show less","no_members":"No members assigned to this department","no_members_desc":"Add team members to assign tasks to this department.","add_first":"Add a Member"},"tasks":{"title":"Active Tasks","task_name":"Task","assignee":"Assignee","status":"Status","priority":"Priority","due_date":"Due Date","no_tasks":"No active tasks","no_tasks_desc":"Tasks created in this department will appear here.","view_all":"View all tasks","unassigned":"Unassigned","new_task":"New Task","load_error":"Failed to load tasks"},"templates":{"title":"Linked Templates","no_templates":"No templates linked","no_templates_desc":"Templates associated with this department will appear here.","items":"{count} items","duration":"{minutes}m"},"config":{"title":"Configuration"}},"device":{"page_title":"Devices","search_placeholder":"Search devices…","empty_message":"No devices found","empty_description":"Connect your first device to get started.","spotlight":{"eyebrow":"Device management","title":"Make every connected device part of the guest journey","description":"SuiteOp brings locks, thermostats, and sensors into the same operation as reservations and check-in.","remote_unlock":"Remote unlock for guests","backup_swap":"Automatic backup-code swaps","checkin_controls":"Device controls in check-in steps","multi_entry":"Multi-entry access across units and common areas","explore_integrations":"Start importing your devices now","talk_to_specialist":"Talk to a specialist","coming_soon":"Opal controls your devices today — guest-requested control coming soon","dismiss":"Dismiss device management spotlight","learn_more":"Learn more about device management","locks":{"eyebrow":"Smart locks","title":"Make every arrival easier with connected locks","description":"Bring guest access, backup codes, and multi-entry stays into the same operation as reservations and check-in.","checkin_controls":"Lock controls in check-in steps","coming_soon":"Opal locks and unlocks today — guest-requested access coming soon"},"thermostats":{"eyebrow":"Smart thermostats","title":"Keep every stay comfortable from anywhere","description":"Adjust climate remotely, give guests control in their portal, and keep settings within the limits you choose.","remote_control":"Remote temperature and mode control","guest_controls":"Guest climate controls in the portal","limits":"Heating and cooling limits","readings_alerts":"Temperature readings and alerts","coming_soon":"Opal sets temperature and mode today — guest-requested climate control coming soon"},"sensors":{"eyebrow":"Smart sensors","title":"Spot property issues before guests report them","description":"Monitor noise, temperature, humidity, and CO₂ across your properties from one place.","property_alerts":"Property-level environmental alerts","quiet_hours":"Noise and quiet-hours monitoring","thresholds":"Temperature and humidity thresholds","co2_alerts":"CO₂ readings and alerts","coming_soon":"Minut and more integrations coming soon"}},"online":"Online","offline":"Offline","archived":"Archived","columns":{"name":"Name","device_name":"Device Name","public_name":"Guest-facing name","type":"Type","property":"Property","status":"Status","ecosystem":"Ecosystem","provider":"Provider","battery":"Battery","last_time_check":"Last Time Check","control":"Control","linked_properties":"Linked Properties","no_property":"No property assigned","control_none":"None","archived":"Archived","assign_for_alerts":"Assign to a property to enable alerts"},"controls_none":"No controls available for this device","detail":{"title":"Device Details","back":"Back to Devices","not_found":"Device not found","not_found_description":"This device may have been removed or you don't have access.","unnamed":"Unnamed Device","device_info":"Device Info","name":"Name","type":"Type","ecosystem":"Ecosystem","provider":"Provider","battery":"Battery","remote_controls":"Remote Controls","remote_enabled":"Enabled","remote_disabled":"Disabled","muted":"Muted","muted_yes":"Yes","muted_no":"No","status_label":"Status","status_archived":"Archived","linked_properties":"Linked Properties","no_linked_properties":"Not linked to any property.","search_properties":"Search properties…","link_property":"Link Property","link_title":"Link Property","link_description":"Link \"{property}\" to \"{device}\"?","unlink_title":"Unlink Property","unlink_description":"Are you sure you want to unlink \"{name}\" from this device?","archive_title":"Archive Device","archive_description":"Are you sure you want to archive \"{name}\"?","restore_title":"Restore Device","restore_description":"Are you sure you want to restore \"{name}\"?","select_type":"Select type","select_ecosystem":"Select ecosystem","lock_command":"Lock","unlock_command":"Unlock","slide_to_unlock":"Slide to Unlock","slide_to_lock":"Slide to Lock","temp_decrease":"Decrease temperature","temp_increase":"Increase temperature","temp_commit":"Set temperature","archive_device":"Archive","restore_device":"Restore","offline_warning":"Device is offline. Controls are unavailable.","archived_warning":"This device is archived.","danger_zone":"Danger Zone","edit_name":"Edit device name","save_name":"Save name","category":"Category","category_placeholder":"Select category…","use_element_name":"Use element name","use_element_name_description":"Show the property element name instead of the category in the guest portal","select_element":"Select element...","what_guests_see":"What guests see","what_guests_see_description":"Choose how this device is labeled in the guest portal.","guest_label_mode_category":"Category","guest_label_mode_room":"Room name","guest_label_category_field":"Category","guest_label_room_field":"Room or area","preview":"Preview","hide_preview":"Hide preview","guest_portal_preview_caption":"In the guest portal","guest_portal_preview_online":"Online"},"categories":{"unit_door":"Unit Door","building_entrance":"Building Entrance","front_door":"Front Door","back_door":"Back Door","side_door":"Side Door","garage":"Garage","gate":"Gate","elevator":"Elevator","mailbox":"Mailbox","storage":"Storage","parking":"Parking","swimming_pool":"Swimming Pool","fitness_center":"Fitness Center","rooftop":"Rooftop","laundry_room":"Laundry Room","common_area":"Common Area","interior":"Interior","exterior":"Exterior","other":"Other"},"tabs":{"controls":"Controls","codes":"Codes","readings":"Readings","settings":"Settings","history":"History","activity":"Activity"},"controls":{"lock_state_locked":"Locked","lock_state_unlocked":"Unlocked","lock_control":"Lock control","swipe_to_unlock":"Swipe to Unlock","swipe_to_lock":"Swipe to Lock","battery_label":"Battery","battery_last_update":"Last update: {date}","battery_replacement":"Battery Replacement","battery_last_replaced":"Last replaced: {date}","battery_not_replaced":"N/A","mark_as_replaced":"Mark as replaced","status_label":"Status","refresh_status":"Refresh status","last_check":"Last time check: {date}","device_access":"Device access","device_access_description":"You are currently logged in as a SuiteOp user. You have full device access.","device_access_active":"Active","thermostat_label":"Climate control","current_temperature":"Current temperature","target_temperature":"Target temperature","mode_label":"Mode","mode_heat":"Heat","mode_cool":"Cool","mode_heat_cool":"Auto","mode_off":"Off","set_mode":"Set mode","mode_custom":"Custom","system_mode":"System mode","system_off":"System off","system_off_hint":"Turn on the system to adjust temperature.","heating_target":"Heating target","heating_target_hint":"The system heats until the room reaches {temperature}{unit}.","cooling_target":"Cooling target","cooling_target_hint":"The system cools until the room reaches {temperature}{unit}.","auto_range":"Auto range","heat_to":"Heat to","cool_to":"Cool to","auto_range_hint":"The system maintains the room between {heat}{unit} and {cool}{unit}.","provider_mode":"Provider mode","provider_mode_value":"Reported by provider: {mode}","provider_mode_hint":"{mode} is reported by the thermostat provider. Choose a standard mode below to override it.","provider_mode_read_only_hint":"{mode} is reported by the thermostat provider. Mode changes are not available for this thermostat.","switching_mode":"Switching to {mode}","switching_mode_hint":"Waiting for the thermostat to confirm. Last confirmed mode: {mode}.","apply_mode":"Apply {mode}","mode_confirmation_timeout":"The thermostat has not confirmed the mode change yet. Refresh the device before trying again.","confirmation_timeout":"The lock has not confirmed this command yet. Refresh the device before trying again.","confirmation_timeout_short":"Not confirmed yet. Refresh the device.","provider_unavailable":"The provider reports this action is unavailable","decrease_temperature":"Decrease temperature","increase_temperature":"Increase temperature","save_temperature":"Save temperature","save_mode":"Save mode","tap_to_lock":"Tap to Lock","syncing":"Syncing…","locking":"Locking…","unlocking":"Unlocking…"},"settings":{"title":"Settings","archive":"Archive","disable_staff_access":"Disable staff access","disable_staff_access_description":"Disable staff access. If selected, this lock will no longer attempt to push staff codes. Only backup codes and guest codes will be created. Existing staff codes will be removed from the lock.","push_offline_codes":"Push offline codes","push_offline_codes_description":"Send guest codes to this lock on its offline lane, so they keep working when the lock is not connected. Existing online codes are left alone until you convert them.","battery_threshold":"Battery threshold","battery_threshold_description":"Battery threshold percentage (must be between 1 and 99). The system will send notifications when the battery drops below this level.","device_private":"Device is private","device_public":"Device is public","notifications_enabled":"Notifications enabled","notifications_enabled_description":"Notifications enabled. You will receive alerts & notifications (offline, code issues etc.) for this device.","notifications_muted":"Notifications muted","notifications_muted_description":"Device muted. You will not receive alerts & notifications for this device.","remote_controls_enabled":"Remote controls enabled","remote_controls_enabled_description":"Remote control of this device for staff and guests is enabled.","remote_controls_disabled":"Remote controls disabled","remote_controls_disabled_description":"Remote control of this device for staff and guests is disabled.","checkin_buffer":"Check-in buffer override","checkin_buffer_description":"Override organization check-in buffer (code will start X minutes before check-in time).","checkout_buffer":"Check-out buffer override","checkout_buffer_description":"Override organization check-out buffer (code will end X minutes after check-out time).","save":"Save Settings","saving":"Saving…","general":"General","advanced":"Advanced","danger_zone":"Danger Zone","notifications":"Notifications","remote_controls":"Remote Controls","staff_access":"Staff Access","minutes_abbreviation":"min","sensor_thresholds":"Sensor Thresholds","temperature_min":"Min {unit}","temperature_max":"Max {unit}","humidity_min":"Min %","humidity_max":"Max %","co2_max":"Max ppm","noise_max":"Max dB","quiet_hours":"Quiet Hours","quiet_hour_start":"Start hour","quiet_hour_end":"End hour","quiet_hours_description":"Noise alerts are sent only during these hours, when guests should be quiet","temperature_limits":"Temperature Limits","heat_mode_limits":"Heat mode limits","cool_mode_limits":"Cool mode limits","temperature_limits_description":"SuiteOp automatically restores the nearest limit when the setpoint moves outside this range.","heat_range":"Heat Range","cool_range":"Cool Range","temperature_range_hint":"Allowed: {min}{unit} – {max}{unit}","recommended":"Recommended: {value}","use_recommended":"Use recommended values","noise_zones":"40 quiet · 70 loud · 90 very loud","co2_zones":"~420 outdoor · 1000+ stuffy · 2000+ poor","alert_outside_range":"Alert outside this range","clear":"Clear","quiet_hours_summary":"Noise alerts active {start} – {end}","threshold_value":"{metric} threshold","threshold_min":"Minimum {metric}","threshold_max":"Maximum {metric}","guest_portal_visibility":"Guest portal visibility","guest_portal_on_description":"Shown in the guest portal. Guests staying at a linked property can see this device — and operate it when remote controls are on.","guest_portal_off_description":"Internal only. Hidden from guests and visible to your team. Turn on to show it in the guest portal.","internal_device_callout":"This is an internal device. Sensors, hubs, and cameras are never shown to guests — they stay private to your team.","time_format_12h":"AM/PM","time_format_24h":"24h","read_only":"You can view these settings, but changing them needs the Modify devices permission."},"convert_offline":{"title":"Convert existing codes to the offline lane?","description":"These guest codes are live on this lock’s online lane and expire in the future. Convert them so they keep working after the switch, or leave them and only new codes go offline.","column_code":"Code","column_guest":"Guest","column_window":"Window","column_status":"Status","column_action":"Action","convert":"Convert","convert_all":"Convert all ({count})","retry":"Retry","cancel":"Cancel","close":"Close","queued":"Queued","queued_notice":"These conversions have started. Each code moves to the offline lane once the lock confirms it — the Codes tab shows where each one ended up.","failed":"Failed","ineligible":"No longer eligible","no_reservation":"No reservation","no_permission":"You need the Manage lock codes permission to convert these codes. You can still turn the setting on and save it.","blocked_notice":"Codes without a Convert button can’t be moved automatically. Handle them from the Codes tab.","blocked_push_disabled":"Code push is off for this lock.","push_disabled_notice":"Code push is off for this lock, so none of these codes can be converted right now. You can still turn the setting on and save it — new codes will use the offline lane.","list_truncated":"Only the first {count} codes are shown. Convert these, then turn this setting on again to see the rest.","blocked_discovered_code":"Found on the lock, not created here.","blocked_impact_unavailable":"We couldn't check what this code affects.","blocked_backup_residual":"Leftover backup code.","blocked_shared_grant":"{count, plural, one {Shared with # other stay, which would lose access.} other {Shared with # other stays, which would lose access.}}","update_failed":"Couldn’t turn on offline codes, so nothing was converted.","convert_failed":"Couldn’t convert these codes. Some may already have started — the Codes tab shows where each one ended up.","partial_failure":"Some codes were not converted. Check the rows marked Failed.","stale_notice":"Some codes changed while this dialog was open and are no longer eligible. Close this, then turn the setting on again to see the current list."},"org_muted":{"description":"Device changes are paused while outbound communications are paused for this organization. Status, readings, and synchronization remain available."},"push_disabled":{"description":"Device changes are paused for this integration account. Status, readings, and synchronization remain available.","link_local_description":"Link {property} locally? SuiteOp will not provision this lock until device changes are re-enabled."},"provisioning":{"cannot_title":"Cannot Provision Lock","cannot_description":"Link this lock to a property before provisioning. Provisioning prepares the lock for SuiteOp-managed access.","recovery_title":"This lock still needs provisioning","recovery_description":"It is linked to a property but SuiteOp has not installed its managed access yet.","provision_now":"Provision Lock Now","progress_title":"Provisioning in Progress","progress_description":"SuiteOp is preparing access codes on this lock. This usually takes up to 15 minutes. Code actions will become available automatically.","confirm_title":"Provision Lock?","confirm_description":"SuiteOp will take over code management for this lock and reconcile its access.","confirm_action":"Provision Lock","disconnect_warning":"Disconnect this lock from its previous lock manager before continuing to avoid conflicting code changes.","effect_preserve_master":"Preserve the master code","effect_reset_managed":"Reset SuiteOp-managed non-master codes","effect_backup":"Create three backup access codes","effect_reservations":"Install access for current and future confirmed reservations","effect_users":"Reinstall authorized team member codes","master_code_invite":"Record the master code first so provisioning knows which PIN to keep.","master_code_label":"Master code","master_code_saved":"Master code saved","master_code_unsaved":"Not saved yet — press Save, or this code is discarded when you confirm.","delete_unknown_label":"Delete unknown codes","delete_unknown_description":"Also remove provider codes SuiteOp does not recognize. This is off by default.","permission_required":"The Manage lock codes permission is required to provision this lock.","toast_started":"Lock provisioning started","reinstall_user_codes":"Reinstall User Codes","reinstall_queued":"User code reconciliation queued","link_devices":"Link devices","link_devices_description":"Select every device to link to this property.","no_devices_available":"No unlinked devices are available.","devices_linked":"Devices linked"},"assignment":{"manage":"Manage assignments","description":"Select the devices assigned to this property. Changes are applied only when you save.","search_placeholder":"Search devices","counts":"{selected} selected · {total} devices","pending_changes":"{links} to link · {unlinks} to unlink","loading":"Loading devices…","no_results":"No matching devices.","load_error":"Devices could not be loaded.","saved":"Device assignments saved","save_error":"Device assignments could not be saved. Refresh and try again."},"codes":{"provisioned":"Lock provisioned on {date}","install_code":"Install code","unsupported":"This lock does not support access codes.","filter_all":"All","filter_reservation":"Reservation","filter_user":"User","filter_backup":"Backup","filter_unknown":"Unknown","filter_manual":"Manual"},"readings":{"temperature":"Temperature","humidity":"Humidity","co2":"CO₂","noise":"Noise Level","door_status":"Door Status","last_reading":"Last reading: {date}","status_normal":"Normal","status_warning":"Warning","status_alert":"Alert","status_unknown":"Unknown","door_open":"Open","door_closed":"Closed","no_readings":"No sensor readings available","view_history":"View History","range_6h":"6h","range_24h":"24h","range_7d":"7d","range_30d":"30d","no_history_data":"No historical data for this period","chart_loading":"Loading chart data…","ambient_temperature":"Ambient Temperature","cooling_setpoint":"Cooling Setpoint","heating_setpoint":"Heating Setpoint","thermostat_mode":"Mode"},"history":{"unknown":"Unknown","load_more":"Load more","no_events":"No access events yet","error":"Failed to load access events","filter_all":"All","filter_lock_unlock":"Lock / Unlock","filter_code_changes":"Codes","filter_status":"Status"},"activity":{"title":"Activity","empty":"No activity recorded yet","filter_all":"All","filter_access":"Lock/Unlock","filter_command":"Commands","filter_webhook":"Status","load_more":"Load more","error":"Failed to load activity","empty_filtered":"No activity matches this filter","filters":"Device activity filters","filter_category":"Category","filter_outcome":"Outcome","filter_actor":"Initiator","filter_action":"Action","filter_all_categories":"All categories","filter_all_outcomes":"All outcomes","filter_all_actors":"All initiators","filter_all_actions":"All actions","category_access":"Access","category_command":"Commands","category_code":"Access codes","category_configuration":"Settings","category_lifecycle":"Lifecycle","category_state":"Status and readings","category_sync":"Sync","category_auth":"Connection","category_error":"Provider errors","outcome_pending":"Pending","outcome_success":"Succeeded","outcome_error":"Failed","outcome_skipped":"Skipped","outcome_denied":"Denied","outcome_invalid":"Invalid code","outcome_timed_out":"Timed out","actor_organization_user":"Organization user","actor_guest":"Guest","actor_automation":"SuiteOp automation","actor_scheduler":"SuiteOp scheduler","actor_provider":"Provider","actor_suiteop_system":"SuiteOp","actor_ai_proposed":"AI-proposed","actor_unknown":"Unknown initiator","initiator":"Initiator","initiated_by":"Initiated by {name}","subject":"For","code_used":"Code used","code_source":"Code source","method":"Method","changed_fields":"Changed","error_action":"Retry the action or reconnect the provider if the issue continues.","retry":"Try again","pagination":"Device activity pages","page_info":"Page {current} of {total}","action_lock_access":"Lock access","action_lock_lock":"Lock command","action_lock_unlock":"Unlock command","action_lock_unlock_authorized":"Unlock authorized","action_thermostat_set_temperature":"Set temperature","action_thermostat_set_mode":"Set thermostat mode","action_device_command_result":"Command result","action_device_refresh_status":"Refresh device status","action_device_sync_started":"Device sync started","action_device_sync_succeeded":"Device sync completed","action_device_sync_failed":"Device sync failed","action_device_auth_refreshed":"Connection refreshed","action_device_state_changed":"Device state changed","action_device_created":"Device created","action_device_archived":"Device archived","action_device_unarchived":"Device restored","action_device_battery_replaced":"Battery replaced","action_device_linked_to_property":"Linked to property","action_device_unlinked_from_property":"Unlinked from property","action_device_room_assigned":"Assigned to room","action_device_room_unassigned":"Removed from room","action_device_insert":"Device created","action_device_update":"Device settings updated","action_device_delete":"Device deleted","action_lock_code_created":"Access code created","action_lock_code_updated":"Access code updated","action_lock_code_deletion_requested":"Access code deletion requested","action_lock_code_deleted":"Access code deleted","action_lock_code_installed":"Access code installed","action_lock_code_failed":"Access code operation failed","action_lock_code_pending":"Access code operation pending","action_lock_code_backup_unlinked_unit_disabled":"Backup code unlinked after unit access disabled","action_lock_code_retry_requested":"Access code retry requested","action_webhook_registered":"Provider webhook connected","action_webhook_deregistration_failed":"Provider webhook disconnection failed","action_device_state_readback":"Device state readback","action_device_disconnected":"Device went offline","action_device_reconnected":"Device came back online","action_seam_devices_missing":"Devices missing from provider","action_netatmo_sync_completed":"Netatmo sync completed","action_netatmo_sync_failed":"Netatmo sync failed","action_device_post_connect_failed":"Post-connection device setup failed","action_command_poll":"Command status check","action_device_state_poll":"Device state check","action_code_push":"Access code delivery","action_code_update":"Access code update","action_access_grant_reissue":"Access method reissue","action_code_delete":"Access code removal","action_code_sync":"Access code sync","action_lock_provision":"Lock setup","action_user_codes_reconcile":"User code check","action_managed_codes_reconcile":"Managed code check","action_backup_codes_maintain":"Backup code upkeep","method_keypad":"Keypad","method_manual":"Manual","method_command":"Remote command","method_remote":"Remote","method_lock":"Lock","method_unlock":"Unlock","method_incorrect_code":"Incorrect code","method_rfid":"RFID","method_card":"Access card","code_source_reservation":"Reservation","code_source_user":"Organization user","code_source_backup":"Backup code","code_source_master":"Master code","code_source_unknown":"Unknown","code_source_checkout":"Checkout","code_source_manual":"Manual","code_source_synced_backup_code":"Synced backup code","code_source_staff":"Staff","field_name":"Name","field_type":"Device type","field_ecosystem":"Ecosystem","field_enable_remote_controls":"Remote controls","field_is_muted":"Muted","field_is_staff_code_disabled":"Staff codes","field_is_public":"Guest visibility","field_category":"Category","field_use_element_name":"Room name","field_device_config":"Device settings","field_room_assignment":"Room assignment"},"toast":{"updated":"Device updated","archived":"Device archived","restored":"Device restored","archive_busy":"Another change to this device is still being applied. Wait a moment and try again.","lock_sent":"Lock command sent","lock_failed":"Failed to send lock command","unlock_sent":"Unlock command sent","unlock_failed":"Failed to send unlock command","linked":"Property linked","unlinked":"Property unlinked","battery_replaced":"Battery marked as replaced","mode_sent":"Thermostat mode updated","mode_failed":"Failed to update thermostat mode","temperature_sent":"Temperature command sent","temperature_failed":"Failed to send temperature command","status_refreshed":"Device status refreshed","refresh_failed":"Failed to refresh device status","temperature_out_of_range":"Temperature is outside the configured limits","temperature_limits_partial":"All four temperature limits (heat min/max, cool min/max) must be filled or all left empty","permission_denied":"Your change wasn't saved — it needs the Modify devices permission."},"header":{"battery_tooltip":"Battery: {level}% — Last update: {date}","multiple_properties":"+{count} more"},"filter":{"property":"Property","group":"Group","provider":"Provider","status":"Status","low_battery":"Low Battery","needs_attention":"Needs attention"},"organization_settings":{"action":"Settings","title":"Smart lock preferences","description":"Configure organization-wide access-code behavior for locks, reservations, and connected systems.","read_only":"You can view these settings, but only organization managers can change them.","code_section":"Code generation","code_section_description":"Choose the length and source of newly generated access codes.","staff_code_length":"Staff code length","staff_code_length_description":"Random staff codes use 4 to 8 digits.","guest_code_length":"Guest code length","guest_code_length_description":"New guest and backup codes use 4 to 8 digits.","guest_generation":"Guest access code generation","guest_generation_description":"Choose how SuiteOp generates a code for each new reservation.","guest_generation_random":"Random digits (recommended)","guest_generation_phone":"Last digits of the phone number","timing_section":"Access timing","timing_section_description":"Set how long reservation codes remain active around check-in and check-out.","checkin_buffer":"Check-in buffer (minutes)","checkin_buffer_description":"Activate the code this many minutes before check-in.","checkout_buffer":"Check-out buffer (minutes)","checkout_buffer_description":"Keep the code active this many minutes after check-out.","sync_section":"Connected systems","sync_section_description":"Control which SuiteOp changes are sent to your property management system.","push_code_to_pms":"Push SuiteOp access codes to the PMS","push_code_to_pms_description":"Send future SuiteOp-generated guest codes to supported PMS accounts.","push_times_to_pms":"Push SuiteOp check-in and check-out changes to the PMS","push_times_to_pms_description":"Send future reservation-time changes made in SuiteOp to supported PMS accounts.","disable_backup_swapping":"Turn off automatic backup code swapping","disable_backup_swapping_description":"Do not replace an inactive reservation code with an active backup code near check-in.","temperature_unit":"Temperature unit","temperature_fahrenheit":"Fahrenheit","temperature_celsius":"Celsius","saving":"Saving…","saved":"Smart lock preferences saved","save_error":"Couldn’t save smart lock preferences. Please try again."},"bulk_select":{"action":"Bulk edits","selected_count":"{count, plural, one {# device selected} other {# devices selected}}","clear":"Clear","edit_selected":"Edit {count, plural, one {# device} other {# devices}}","select_all_page":"Select all on page","select_row":"Select device"},"bulk_edit":{"title":"Bulk edit devices","description":"Apply changes across multiple devices at once. Only the fields you fill in are updated.","applies_to_selected":"Changes apply to the devices you selected.","option_no_change":"No change","on":"On","off":"Off","section_general":"General","section_general_subtitle":"Visibility and behavior for every selected device.","muted_label":"Muted","desc_muted":"Muted devices stop sending alert notifications (thresholds are still recorded).","remote_controls_label":"Remote controls","desc_remote_controls":"Allows staff to control the device remotely (lock/unlock, set temperature). Only applies to controllable devices — locks, thermostats, lights, and sound systems.","public_label":"Guest visibility","desc_guest_visibility":"Shows the device in the guest portal so guests can see or use it. Only locks, thermostats, and lights can be guest-visible.","staff_codes_disabled_label":"Disable staff codes","desc_staff_code_disabled":"Prevents staff access codes from being issued to this lock. Locks only.","section_monitoring":"Monitoring & alerts","section_monitoring_subtitle":"Alert thresholds and quiet hours for monitoring devices (sensors). Only thresholds you set are applied — blank means untouched.","section_locks":"Locks","section_locks_subtitle":"Only applies to locks.","section_thermostats":"Thermostats","section_thermostats_subtitle":"Setpoint limits guests and staff can choose. Only applies to thermostats; all four bounds must be set together.","limits_incomplete":"Set all four limits, or none.","battery_label":"Battery threshold (%)","co2_label":"CO₂ threshold (ppm)","noise_label":"Noise threshold (dB)","min_temperature_label":"Min temperature","max_temperature_label":"Max temperature","min_humidity_label":"Min humidity (%)","max_humidity_label":"Max humidity (%)","quiet_start_label":"Quiet hours start","quiet_end_label":"Quiet hours end","confirm_title":"Apply bulk edit?","confirm_description":"{count, plural, one {This updates the fields you set on # device. It can’t be undone.} other {This updates the fields you set on # devices. It can’t be undone.}}","confirm_apply":"Apply changes","confirm_applies":"{applicable} of {total} selected devices","confirm_applies_none":"none of the selected devices support this","toast_success":"{count, plural, one {# device updated} other {# devices updated}}","toast_error":"Couldn’t apply the bulk edit. Please try again.","desc_battery":"Alerts when a device's battery drops below this level. Applies to battery-powered devices — locks and sensors."},"demo":{"badge":"Demo","hint_title":"These are demo devices.","hint_body":"Open one and try the controls — lock a door, change the temperature, browse the readings. Nothing here is connected to real hardware.","read_only":"This is a demo device. The controls work, but nothing here can be changed or saved.","action_unavailable":"Not available on a demo device."},"enums":{"thermostat_modes":{"asleep":"Asleep","auto":"Auto","autowithreset":"Auto (with reset)","autowitheco":"Auto (with Eco)","autochangeover":"Auto Changeover","autochangeoveractive":"Auto Changeover (active)","autocool":"Auto Cool","autoheat":"Auto Heat","auxheatonly":"Aux Heat Only","auxiliaryemergencyheat":"Auxiliary Emergency Heat","away":"Away","cool":"Cool","custom":"Custom","dryair":"Dry Air","eco":"Eco","emergency_heat":"Emergency Heat","emergencyheat":"Emergency Heat","emergencyheatactive":"Emergency Heat (active)","energysavecool":"Energy Save Cool","energysaveheat":"Energy Save Heat","fanonly":"Fan Only","frostguard":"Frostguard","furnace":"Furnace","heat":"Heat","heatingoff":"Heating Off","home":"Home","in":"In","manual":"Manual","moistair":"Moist Air","off":"Off","out":"Out","resume":"Resume","rush_hour":"Rush Hour","rushhour":"Rush Hour","schedule":"Schedule","southernaway":"Southern Away","heatcool":"Heat/Cool","dayoff":"Day Off"}}},"element":{"arrival":"Arrival","balcony":"Balcony","basement":"Basement","bathroom":"Bathroom","bedroom":"Bedroom","beds":"Beds","closet":"Closet","completion":"Completion","dining_room":"Dining Room","entrance":"Entrance","exterior":"Exterior","family_room":"Family Room","fireplace":"Fireplace","fitness_center":"Fitness Center","game_room":"Game Room","garage":"Garage","general":"General","half_bathroom":"Half Bathroom","hallway":"Hallway","hot_tub":"Hot Tub","kitchen":"Kitchen","laundry":"Laundry","laundry_room":"Laundry Room","living_room":"Living Room","loft":"Loft","miscellaneous":"Miscellaneous","nursery":"Nursery","office":"Office","outdoor_kitchen":"Outdoor Kitchen","pantry":"Pantry","porch":"Porch","rooftop":"Rooftop","sofa_bed":"Sofa Bed","staircase":"Staircase","storage_room":"Storage Room","swimming_pool":"Swimming Pool","terrace":"Terrace","theatre_room":"Theatre Room","utility_room":"Utility Room","yard":"Yard","bar_stool":"Bar Stool","bed":"Bed","bunk_bed":"Bunk Bed","chair":"Chair","coffee_table":"Coffee Table","crib":"Crib","desk":"Desk","dining_chair":"Dining Chair","dining_table":"Dining Table","dresser":"Dresser","high_chair":"High Chair","ironing_board":"Ironing Board","luggage_rack":"Luggage Rack","nightstand":"Nightstand","sofa":"Sofa","table":"Table","tv_stand":"TV Stand","wardrobe":"Wardrobe","air_conditioner":"Air Conditioner","air_purifier":"Air Purifier","bathtub":"Bathtub","ceiling_fan":"Ceiling Fan","coffee_maker":"Coffee Maker","dishwasher":"Dishwasher","doorbell":"Doorbell","dryer":"Dryer","floor_fan":"Floor Fan","fridge":"Fridge","garbage_disposal":"Garbage Disposal","hair_dryer":"Hair Dryer","heater":"Heater","iron":"Iron","kettle":"Kettle","lockbox":"Lockbox","microwave":"Microwave","oven":"Oven","router":"Router","safe":"Safe","shower":"Shower","sink":"Sink","smart_lock":"Smart Lock","sound_system":"Sound System","stove":"Stove","thermostat":"Thermostat","toaster":"Toaster","toilet":"Toilet","tv":"TV","vacuum":"Vacuum","washer":"Washer","water_heater":"Water Heater","ev_charger":"EV Charger","fire_pit":"Fire Pit","firewood_rack":"Firewood Rack","grill":"Grill","hot_tub_cover":"Hot Tub Cover","kayak":"Kayak","outdoor_lighting":"Outdoor Lighting","outdoor_shower":"Outdoor Shower","patio_furniture":"Patio Furniture","pool_equipment":"Pool Equipment","pool_fence":"Pool Fence","trash_bins":"Trash Bins","baby_gate":"Baby Gate","co_detector":"CO Detector","fire_blanket":"Fire Blanket","fire_escape_ladder":"Fire Escape Ladder","fire_extinguisher":"Fire Extinguisher","first_aid_kit":"First Aid Kit","life_jacket":"Life Jacket","noise_sensor":"Noise Sensor","smoke_alarm":"Smoke Alarm","bath_mat":"Bath Mat","beach_towel":"Beach Towel","blanket":"Blanket","comforter":"Comforter","curtains":"Curtains","duvet_cover":"Duvet Cover","hand_towel":"Hand Towel","mattress_pad":"Mattress Pad","mattress_protector":"Mattress Protector","pillow":"Pillow","robe":"Robe","sheets":"Sheets","shower_curtain":"Shower Curtain","towel":"Towel","washcloth":"Washcloth","charging_station":"Charging Station","cleaning_supplies":"Cleaning Supplies","cutting_board":"Cutting Board","games_puzzles":"Games & Puzzles","knife_set":"Knife Set","paper_goods":"Paper Goods","toiletries":"Toiletries","hvac":"HVAC","appliance":"Appliance","furniture":"Furniture","fixture":"Fixture","electronics":"Electronics","plumbing":"Plumbing","safety":"Safety","part":"Part","accessory":"Accessory","supply":"Supply","component":"Component","consumable":"Consumable","spare_part":"Spare Part"},"email_templates":{"title":"Email templates","email_white_labeling":"Email white labeling","search_placeholder":"Search templates","new_template":"New template","list_empty":"No templates yet — start with “New template”.","blocks_hint":"Drag any block onto the canvas to add it.","canvas_empty_title":"Pick a template to start editing","canvas_empty_sub":"Or create a new one. Templates power agent emails — variables resolve at send time.","left_rail":{"templates":"Templates","blocks":"Blocks"},"groups":{"guest_journey":"Guest journey","upsell":"Upsell","operations":"Operations","post_stay":"Post-stay","uncategorized":"Other"},"blocks":{"heading":"Heading","paragraph":"Paragraph","image":"Image","button":"Button","access":"Code & WiFi","upsell":"Upsell","columns":"Columns","divider":"Divider","list":"List","qr":"QR code","spacer":"Spacer","social":"Social","reservation_card":"Reservation","property_card":"Property","checkin_instructions":"Check-in","brand_footer":"Brand footer","markdown":"Markdown","video":"Video","quote":"Quote","code":"Code","review_request":"Review request","quick_links":"Quick links","promo_code":"Promo code"},"new":{"title":"Create a new template","subtitle":"Pick how you want to start.","recommended":"Recommended","working":"Working...","back":"Back","category":"Category","scratch_default_name":"Untitled template","scratch_title":"From scratch","scratch_sub":"Start with an empty canvas and add blocks yourself.","scratch_action":"Open editor","ai_title":"Ask Opal","ai_sub":"Describe the email — Opal drafts it block-by-block for you.","ai_action":"Draft with Opal","ai_prompt_placeholder":"e.g. A welcome email for new bookings…","ai_prompt_required":"Describe what you want first","ai_status_drafting":"Drafting outline…","ai_status_subject":"Writing subject line…","ai_status_blocks":"Building blocks…","ai_status_finalizing":"Almost ready…","existing_title":"From existing","existing_sub":"Duplicate a template you already use as a base.","existing_action":"Duplicate","existing_pick":"Pick a template…","existing_pick_required":"Pick a template to duplicate","existing_none":"No templates to duplicate yet","existing_search_placeholder":"Search templates by name or subject…","existing_no_matches":"No templates match your search","existing_selected":"Selected","html_title":"Paste HTML","html_sub":"Migrate an existing email — paste raw HTML and edit it.","html_action":"Open editor","html_paste_placeholder_short":"Paste HTML or leave blank","ai_preview_title":"Email preview","ai_preview_hint":"Opal drafted this. Use it as-is or try a different prompt.","ai_preview_subject":"Subject","ai_use":"Use this template","ai_reject":"Try a different prompt","ai_unavailable_title":"AI is unavailable","ai_unavailable_body":"Opal couldn't draft a template right now. Try again, or start from scratch.","ai_try_again":"Try again","ai_start_scratch":"Start from scratch"},"editor":{"back":"Back","subject":"Subject","subject_placeholder":"Welcome to your stay","subject_required_warning":"No subject — emails fall back to the template name","category":"Category","category_aria":"Template category","preview_alt":"Email preview","html_label":"HTML","show_html":"Show HTML","hide_html":"Hide HTML","vars_used":"{count, plural, one {# variable used} other {# variables used}}","live":"Live","not_live":"Not live","not_saved":"Couldn't save changes","load_failed":"Couldn't load this template.","unsaved_warning":"Your changes are not saved yet. Leave this page and lose them?","saving":"Saving…","saved_never":"Never saved","saved_seconds":"{count, plural, =1 {Saved 1s ago} other {Saved #s ago}}","saved_minutes":"{count, plural, =1 {Saved 1m ago} other {Saved #m ago}}","saved_hours":"{count, plural, =1 {Saved 1h ago} other {Saved #h ago}}","lint":{"issue_count":"{count, plural, one {# issue} other {# issues}}","popover_title":"Check before sending","popover_subtitle":"Your changes were saved. These may not work as expected when the email is sent.","field_subject":"Subject","field_body":"Body","code":{"unknown_variable":"\"{token}\" isn't a recognized variable — it will be blank when the email is sent.","unknown_variable_casing":"\"{token}\" has the wrong capitalization — use \"{suggestion}\".","unknown_modifier":"\"{token}\" uses an unsupported modifier — it will be sent as plain text.","unsafe_href":"\"{token}\" will render as a dead link."}},"header":{"variables":"Variables","send_test":"Send test","send_test_pending":"Sending…","more_actions":"More actions","delete":"Delete template","undo":"Undo","redo":"Redo"},"sidebar":{"assistant":"Assistant","variables":"Variables","properties":"Properties"},"variables":{"insert_title":"Variables","hint":"Click any variable to copy it. Paste into a block field.","copied":"Copied {token}","copy_failed":"Couldn't copy — try selecting and copying manually.","group_label":{"general":"General","property":"Property","device":"Device","reservation":"Reservation","upsell":"Upsell","review":"Review","opportunity":"Opportunity","all":"All"},"requirement_badge":{"property":"property","reservation":"reservation","device":"device","task":"task","upsell":"upsell","review":"review","opportunity":"opportunity"}},"assistant":{"initial_message":"I can help warm up tone, shorten copy, translate, or generate A/B subject lines. What do you want to try?","typing":"Assistant is typing…","composer_placeholder":"Ask the assistant…","quick_actions":"Quick actions","quick_warm":"Make this email warmer","quick_short":"Shorten by 30%","quick_translate":"Translate to Spanish","quick_ab":"Generate A/B subject lines","apply_to_canvas":"Apply to canvas","error_fallback":"I couldn't reach the AI service — try again in a moment."},"toast":{"save_failed":"Couldn't save changes — retrying…","save_conflict":"Someone else changed this template. Re-apply your edit to the latest version.","deleted":"Template deleted","test_sent":"Test email sent to {recipient}"},"inspector":{"empty_title":"No block selected","empty_sub":"Click any block on the canvas to edit its properties.","document":{"title":"Email settings","hint":"Select a block to edit it, or adjust the page-wide look here.","background_color":"Page background","content_background":"Content background","content_width":"Content width (px)","border_radius":"Corner radius (px)","font_family":"Font","font":{"sans":"Modern sans-serif","system":"System default","serif":"Serif","mono":"Monospace"}},"align":"Alignment","align_left":"Align left","align_center":"Align center","align_right":"Align right","kinds":{"heading":"Heading","paragraph":"Paragraph","image":"Image","button":"Button","list":"List","divider":"Divider","columns":"Columns","markdown":"Markdown","access":"Access details","upsell":"Upsell card","qr":"QR code","spacer":"Spacer","social":"Social links","reservation_card":"Reservation card","property_card":"Property card","checkin_instructions":"Check-in instructions","brand_footer":"Brand footer","video":"Video","quote":"Quote","code":"Code","review_request":"Review request","quick_links":"Quick links","promo_code":"Promo code"},"heading":{"text":"Text","level":"Level","level_h1":"H1 — Largest","level_h2":"H2 — Default","level_h3":"H3 — Small"},"paragraph":{"text":"Text"},"image":{"src":"Source URL","alt":"Alt text","alt_placeholder":"Describe the image","width":"Width (px)","width_placeholder":"Auto / leave blank for full width","preview":"Preview","upload":"Upload","replace":"Replace image","uploading":"Uploading…","upload_failed":"Couldn't upload the image — try again."},"button":{"label":"Label","href":"Link","color":"Background color"},"list":{"style":"Style","bullet":"Bulleted","number":"Numbered","items":"Items","add":"Add item","remove":"Remove"},"divider":{"no_props":"Divider has no properties (id: {id})."},"columns":{"left":"Left column","right":"Right column","gap":"Column gap (px)"},"markdown":{"source":"Markdown source"},"access":{"heading":"Heading","show_wifi":"Show WiFi credentials","show_wifi_desc":"Adds the WiFi network and password line.","note":"Door code, WiFi network, and password resolve from '{{'access.*'}}' at send time."},"upsell":{"pick_from_catalog":"Linked upsell","pick_placeholder":"Pick an upsell from your catalog…","pick_hint":"Auto-fills title, description, price, CTA, and image. Edit any field after.","pick_hint_live":"Title, description, price, CTA, and image are pulled from the linked upsell at send time. Update the upsell in your catalog to change the email content.","preview":"Preview","loading":"Loading upsell…","unavailable":"This upsell is unavailable and will be left out of the email. Pick another from your catalog.","load_failed":"Couldn't load this upsell preview — it will still be included when the email is sent.","retry":"Try again","empty_title":"No upsell linked","empty_sub":"Pick an upsell from your catalog to fill this card.","no_image":"No image set on this upsell"},"qr":{"data":"QR content","size":"Size (px)"},"spacer":{"height":"Height (px)"},"social":{"links":"Links","add_link":"Add link","platform_instagram":"Instagram","platform_facebook":"Facebook","platform_x":"X","platform_linkedin":"LinkedIn","platform_tiktok":"TikTok","platform_youtube":"YouTube"},"reservation_card":{"note":"Auto-fills guest, property, and dates from the agent context at send time.","show_portal_button":"Show 'Manage your stay' button"},"property_card":{"note":"Auto-fills cover image, name, and address from the property the agent is bound to.","show_map_link":"Show 'Get directions' link"},"checkin_instructions":{"note":"Pulls the door code, WiFi, and arrival time from the property + reservation context.","show_door_code":"Show door code","show_wifi":"Show WiFi credentials","show_arrival_window":"Show arrival window"},"brand_footer":{"note":"Renders your org's logo, callout, and social links from Settings → Brand. No tunables here."},"video":{"thumbnail_url":"Thumbnail URL","href":"Video link","caption":"Caption"},"quote":{"text":"Text","attribution":"Attribution","attribution_placeholder":"Optional — name, source, or role"},"code":{"label":"Label","value":"Code value"},"review_request":{"cta_label":"Button label","cta_href":"Button link","show_stars":"Show 5-star icons"},"quick_links":{"note":"Pick which destinations to surface — common shortcuts for guests after they receive the email.","kind_manage_stay":"Manage stay","kind_wifi":"WiFi","kind_map":"Map","kind_contact":"Contact","kind_house_manual":"House manual"},"promo_code":{"tagline":"Tagline","code":"Code","expiry":"Expiry note","expiry_placeholder":"e.g. Valid until 12/31"}},"blocks":{"insert":"Insert block","empty_title":"Start with a block","empty_sub":"Drag and drop, or pick one to begin.","section":{"primitives":"Basic blocks","custom":"SuiteOp blocks"},"palette":{"heading":"Heading","paragraph":"Paragraph","image":"Image","button":"Button","list":"List","divider":"Divider","columns":"Columns","markdown":"Markdown","access":"Code & WiFi","upsell":"Upsell card","qr":"QR code","spacer":"Spacer","social":"Social links","reservation_card":"Reservation card","property_card":"Property card","checkin_instructions":"Check-in instructions","brand_footer":"Brand footer","video":"Video","quote":"Quote","code":"Code","review_request":"Review request","quick_links":"Quick links","promo_code":"Promo code"},"rail_hint":"Click a block to add it to the canvas.","rail_disabled":"Convert this template to blocks to use the palette.","moving_block":"Moving block…","drag_handle":"Drag handle","delete_block":"Delete block","image_placeholder":"Click to select, then set image URL in Properties","door_code":"Door code","qr_preview_alt":"QR code preview","social_empty":"Add a social link to preview","reservation_title":"Reservation","property_title":"Property","checkin_instructions_title":"Check-in instructions","review_request_prompt":"How was your stay?","quick_links_empty":"Toggle a link in the inspector to preview"},"opal_suggestions":"Opal suggestions","delete":{"title":"Delete email template","description":"Permanently delete \"{name}\". This can't be undone — agents referencing it will fail to send.","fallback_name":"this template","cancel":"Cancel","confirm":"Delete template","workflow_warning":"Used by {count, plural, one {# agent} other {# agents}} — remove the template there before deleting:"},"send_test_dialog":{"title":"Send test email","description":"Pick a sender and recipient. Variables are filled with sample data so the test reads like a real send.","sender":"From","sender_placeholder":"Pick a verified sender…","no_senders":"No verified senders yet — configure one in Settings → White Labeling → Email Domain.","recipient":"Send to","recipient_placeholder":"you@example.com","cancel":"Cancel","submit":"Send test","submit_pending":"Sending…","language":"Language","language_default":"Default"},"variants":{"default":"Default","add":"Add language","delete_aria":"Delete {language} variant","name_locked":"Name and category are set on the default language.","delete_title":"Delete language variant?","delete_body":"Remove the {language} variant of this template? Sends in {language} will fall back to the default language. This can't be undone.","delete_cancel":"Cancel","delete_confirm":"Delete variant"},"canvas_label":"Blocks","convert_to_blocks":"Convert to blocks","legacy_convert_confirm":"Convert this template to blocks? Your existing HTML will be cleared and you'll start fresh.","start":{"title":"How do you want to start?","subtitle":"Pick a starting point — you can switch later only by creating a new template.","blocks_option":"Drag-and-drop blocks","html_option":"Paste HTML","html_paste_placeholder":"Paste your full email HTML here. Common sources: MJML output, BeeFree export, Mailchimp HTML export."},"history":{"title":"Version history","description":"Restore an earlier saved version of this template.","empty":"No saved versions yet.","version_label":"Version {version}","current_badge":"Current","by_author":"by {name}","unknown_author":"Unknown","preview_label":"Preview","subject_label":"Subject","restore":"Restore","restoring":"Restoring…","restored_toast":"Restored to this version","button":"History"},"recovery":{"replaced":"Your unsaved edits were replaced and never saved.","restore":"Restore my edits","restored":"Your edits were restored and are saving now."},"preview_desktop":"Desktop preview","preview_mobile":"Mobile preview","preview":{"toggle":"Preview","frame_title":"Email preview with sample data","subject_label":"Subject","loading":"Building preview…","failed":"Couldn't build the preview. Your edits are safe — switch back to keep editing.","missing_tooltip":"No sample value — this renders empty"}},"quick_actions":{"improve_copy":{"label":"Improve copy","prompt":"Improve the copy of this email — make it clearer, warmer, and more engaging while preserving the structure and any variable tokens."},"make_concise":{"label":"Make it concise","prompt":"Make this email more concise — keep the message and the variables, cut the fluff."},"add_cta":{"label":"Add a CTA","prompt":"Add a clear call-to-action button to this email near the bottom. Pick a sensible href (use '{{'reservation_portal_link'}}' if appropriate)."},"translate_es":{"label":"Translate to Spanish","prompt":"Translate every text-bearing block in this email to Spanish. Preserve all variable tokens (e.g. '{{'guest_first_name'}}') exactly as written."},"suggest_subject":{"label":"Better subject line","prompt":"Write a better subject line for this email and apply it. Use the modify_email_template tool — it can update the subject directly."},"block":{"text_rewrite":{"label":"Rewrite","prompt_template":"Rewrite the {kind} block with id {id} — keep the structure of the email and all other blocks unchanged."},"text_shorter":{"label":"Make shorter","prompt_template":"Make the {kind} block with id {id} shorter and tighter. Keep all variable tokens. Don't change other blocks."},"text_friendlier":{"label":"Make friendlier","prompt_template":"Rewrite the {kind} block with id {id} in a warmer, more personable tone. Keep all variable tokens. Don't change other blocks."},"heading_alternatives":{"label":"3 alternatives","prompt_template":"Suggest 3 alternative headings for the {kind} block with id {id}, then pick the best one and apply it. Don't change other blocks."},"heading_punchy":{"label":"Make punchy","prompt_template":"Make the {kind} block with id {id} punchier and more attention-grabbing. Don't change other blocks."},"button_cta":{"label":"Suggest CTA copy","prompt_template":"Suggest better label copy for the button block with id {id}. The label should be 2-4 words and action-oriented. Don't change other blocks."},"image_alt":{"label":"Suggest alt text","prompt_template":"Write descriptive alt text for the image block with id {id}. Don't change other blocks."}}}},"esign":{"variable_picker":{"add_variable":"Add variable","title":"Add variable","instruction":"Click a variable to copy to clipboard, then paste into the input field.","search_placeholder":"Search variables...","copied_toast":"Variable copied to clipboard","copy_failed":"Failed to copy to clipboard","no_results":"No matching variables","category_all":"All","category_reservation":"Reservation","category_property":"Property","category_general":"General"},"variables":{"guest_full_name":"Guest Full Name","guest_first_name":"Guest First Name","guest_last_name":"Guest Last Name","guest_email":"Guest Email","reservation_phone":"Guest Phone","check_in_date":"Check-in Date","check_in_time":"Check-in Time","check_out_date":"Check-out Date","check_out_time":"Check-out Time","check_in_eta":"Estimated Arrival Time","check_out_eta":"Estimated Departure Time","reservation_code":"Confirmation Code","reservation_id":"Reservation ID","reservation_nights":"Number of Nights","reservation_source":"Booking Source","reservation_payout":"Reservation Total Price","guest_count":"Guest Count","reservation_portal_link":"Portal Link","property_nickname":"Property Nickname","property_title":"Property Name","property_address_full":"Property Full Address","listing_street":"Street Address","listing_city":"City","listing_country":"Country","listing_max_occupancy":"Max Occupancy","bedroom_count":"Bedroom Count","property_wifi_name":"WiFi Name","property_wifi_password":"WiFi Password","date_now":"Current Date"}},"financials":{"title":"Financials","table":{"task_name":"Task","property":"Property","total_cost":"Total Cost","est_cost":"Estimate","variance":"Variance","over_budget":"+{amount} over","under_budget":"{amount} under","assignee":"Assignee","due_date":"Due Date","department":"Department","empty_state":"No tasks to review","empty_state_description":"Tasks with costs will appear here for review","select_all":"Select all","select_row":"Select row","cost":"Cost","billable":"Billable","total_billable":"Total Billable"},"status":{"needs_review":"Needs Review","approved":"Approved","declined":"Declined","all":"All"},"actions":{"approve":"Approve","decline":"Decline","approve_count":"{count, plural, one {Approve # task ({total})} other {Approve # tasks ({total})}}","decline_count":"{count, plural, one {Decline # task} other {Decline # tasks}}","edit":"Edit","save":"Save","cancel":"Cancel"},"side_panel":{"costs":"Costs","costs_and_billing":"Costs & Billing","description":"Cost details for this task","added_by":"Added by {name}","auto_calculated":"Auto-calculated from rate","auto_calculated_for":"Auto-calculated from rate · {name}","labor_warning":{"no_compensation_type":"Member has no compensation type configured — labor not calculated. Set their pay model on the member page.","no_rate_configured":"No matching rate rule found for this member's pay model — labor recorded as $0."},"math":{"per_piece_flat":"{rate} (per-task flat — {source})","per_hour":"{hours}h × {rate}/hr ({source})","source":{"task_rate_override":"task override","member_scope_rate":"member-scope rate","property_scope_rate":"property-scope rate","base_rate":"base rate","member_profile_rate":"member profile rate"}},"view_task":"View Task","no_costs":"No costs recorded","costs_load_error":"Failed to load costs","view_receipt":"View attachment","receipt_photo":"Receipt photo","file":"File","attachments_count":"{count, plural, one {# attachment} other {# attachments}}","billable_updated":"Billable rate updated","billable_update_failed":"Failed to update billable rate","actual_label":"Actual","subtotal_actual":"Subtotal — Actual","subtotal_projected":"Subtotal — Projected","total_projected":"Total (projected)","projected_caption":"labor still accruing","projected_caption_in_progress":"labor in progress","cost_label":"Cost","cost_estimated_pill":"Estimated","cost_legend":"Estimated is your up-front guess. Projected updates live as labor accrues and becomes the actual cost once the task is complete. Billable is what you charge, which can differ from labor cost.","cost_legend_aria":"What these cost amounts mean"},"cost_form":{"add_cost":"Add Cost","edit_cost":"Edit Cost","type":"Cost Type","category":"Category","type_flat":"Flat Rate","type_quantity":"Unit Cost","type_duration":"Hourly Rate","kind_label":"What are you adding?","kind_manual":"Material / expense","kind_manual_hint":"A one-off expense, receipt, or material charge for this task.","kind_labor":"Labor cost","kind_labor_hint":"What the worker is paid for this task. Optionally pair with a billable rate.","kind_chip_labor":"Labor","kind_chip_manual":"Material","labor_type":"Labor type","labor_row_title":"Labor cost","rate_override_active":"Rate override","projected_label":"Projected","projected_for_member":"Projected for {name}","projected_viewer_share":"Projected for you — your share only. The team total needs permission to view other members.","projected_viewer_excluded":"Other team members’ labor is not included in this total.","labor_saved":"Labor cost saved","billable_rate_section":"Billable rate","billable_strategy":"Billable strategy","add_billable_rate":"Add billable rate","remove_billable_rate":"Remove billable rate","markup_percent":"Markup %","salaried_warning":"This assignee is salaried. Saving a labor cost will add it on top of their salary. Confirm?","confirm_apply":"Confirm and save","delete_labor_title":"Remove labor cost?","delete_labor_description":"The labor cost (and any paired billable rate) will be removed and the task will fall back to its configured rate.","cancelled_frozen_title":"Costs are final","cancelled_frozen_description":"This task was cancelled, so its costs are kept as a historical record. Reopen the task to change its rate.","cancelled_no_reprice":"This task was cancelled. Reopen it to change its rate.","shape_label":"Pricing shape","rate_amount":"Rate","fixed_amount":"Amount","description":"Description","amount":"Amount","unit_cost":"Unit Cost","quantity":"Quantity","attachments":"Receipts & Attachments","upload_file":"Upload File","max_attachments_exceeded":"Maximum {max} files allowed","uploading":"Uploading...","upload_failed":"File upload failed","files_uploaded":"{count, plural, one {# file} other {# files}} attached","remove_file":"Remove","save":"Save Cost","delete":"Delete Cost","some_files_skipped":"Some files were skipped (wrong format or too large)","labor_internal_amount":"Internal: {amount}","labor_billable_amount":"Billable: {amount}","rate_per_hour":"Rate per hour","duration_minutes":"Estimated duration (minutes)","duration_minutes_hint":"Used to preview the labor cost. Actual cost is computed from clocked time at completion.","duration_label_readonly":"Tracked task time","duration_minutes_value":"{minutes} min","duration_not_tracked":"Not tracked yet","duration_caption":"Uses the task's actual tracked time at completion. For a fixed amount, switch to per-piece-flat.","computed_labor_cost":"Estimated labor cost","computed_billable_amount":"Estimated billable"},"confirmation":{"approve_title":"Approve Tasks","approve_description":"Are you sure you want to approve {count} tasks totaling {total}?","decline_title":"Decline Tasks","decline_description":"Are you sure you want to decline {count} tasks?","delete_title":"Delete Cost","delete_description":"This cost will be permanently removed.","confirm":"Confirm","cancel":"Cancel"},"timer":{"duration":"Duration","total_labor":"Total Labor Cost","per_hour":"/hr","hours_value":"{hours} hrs"},"filter":{"property":"Property","department":"Department","assignee":"Assignee"},"bulk":{"selected_count":"{count, plural, one {# task} other {# tasks}} selected","selected_total":"Total: {total}"},"rates":{"tab_title":"Rates & Billable Strategy","base_rate":"Base Rate","base_rate_org_wide":"ORG-WIDE","base_rate_description":"Default rate for all properties unless overridden","no_base_rate":"No base rate configured for this template","set_base_rate":"Set Base Rate","property_overrides":"Property Rates","search_properties":"Search properties...","filter_all":"All properties","filter_has_override":"Has override","filter_using_base":"Using base rate","rate_status":"Rate Status","property_group":"Property Group","bedrooms":"Bedrooms","bathrooms":"Bathrooms","elements":"Elements","bulk_set_rates":"Bulk Set Rates","bulk_selected_count":"Selected ({count})","bulk_apply_count":"Apply to {count} Properties","source_override":"Override","source_base":"Base rate","source_no_rate":"No rate","edit_rate":"Edit Rate","rate_type":"Rate Type","per_piece_flat":"Flat per task","hourly":"Hourly (member rate)","per_piece_hourly":"Hourly per task","internal_rate":"Rate","per_piece_flat_suffix":"/ piece","hourly_suffix":"/ hour","effective_date":"Effective Date","effective_date_help":"Previous rates are preserved as history","estimated_time":"Estimated Time","minutes":"minutes","time_display":"{hours}h {minutes}m","billable_section":"Billable rate","billable_none":"Not set","billable_none_description":"Internal cost only — no billable rate configured.","billable_pass_through":"Pass through at cost","billable_pass_through_description":"Bill exactly what it costs — no margin","billable_fixed":"Fixed amount","billable_fixed_description":"Charge a set price regardless of internal cost","billable_cost_plus":"Cost + markup","billable_cost_plus_description":"Add a percentage on top of internal cost","billable_fixed_rate":"Fixed billable hourly rate","billable_fixed_rate_description":"Bill hours at a specific rate (independent of cost)","markup_percent":"Markup Percentage","billable_total":"Billable total","margin":"Margin","internal_cost":"Internal cost","markup_amount":"Markup","showing_count":"Showing {shown} of {total} properties · {overrides} overrides","save_rate":"Save Rate","org_wide_rate_requires_org_wide_access":"Setting a rate that applies to every property requires organization-wide property access. Ask an administrator to change it.","rate_tooltip":"Used for per-task contractors only (compensated per-piece or per hour on the task). Team members with a fixed hourly rate on their profile fall back to their profile rate instead. Billing is configured separately below.","rate_type_tooltip_hourly":"Hourly internal cost comes from each member's profile rate. Configure a billable rate below to charge customers — the billable rate can differ from internal cost.","rate_type_tooltip_per_piece_flat":"A flat dollar amount paid per task. Used with per-task-flat-comp contractors. Set the internal cost (what you pay) and an optional billable rate.","rate_type_tooltip_per_piece_hourly":"An hourly rate paid per task. Used with per-task-hourly-comp contractors who bill by time. Set the internal hourly rate and an optional billable rate.","markup_preview_hourly_internal":"Per member's profile rate","markup_preview_hourly_billable":"Per member's rate × {markupPercent}","rate_type_label":{"hourly":"Hourly (member rate)","per_piece_flat":"Flat per task","per_piece_hourly":"Hourly per task"},"no_base_rate_short":"No base rate configured","member_overrides":"member overrides","property_overrides_count":"property overrides","show_all":"Show all","collapse":"Collapse","property_override_label":"Property","member_override_label":"Member","member_property_override_label":"Member + Property","add_member_override":"Add member override","member_override_sheet_title":"Add override","member_picker_label":"Member","member_picker_placeholder":"Search members...","member_picker_empty":"No members found","member_required":"Pick a member before saving an override.","member_rate_type_override_notice":"{memberName} is normally paid {defaultRateType}. This override pays them {rateType} for this template — useful when one specific template (e.g. a deep clean) needs a different pay model.","member_salaried_no_override":"Salaried members are paid a fixed amount regardless of task — member-scoped rate overrides aren't applicable to them.","member_rate_type_locked":"Locked to {rateType} because {memberName} is paid {compType}.","remove_override":"Remove override","override_deleted":"Override removed","hourly_desc":"Billable strategy for hourly employees.","per_piece_flat_desc":"Flat payment per task. Split equally across non-salaried assignees.","per_piece_hourly_desc":"Hourly rate paid per assignee's own time on the task. Not split.","hourly_explainer":"Hourly team members are paid from their personal hourly rate (set on each member's profile). Configure a billable rate here to control what you charge the owner — the billable rate can differ from the internal cost.","hourly_billable_configured":"Billable configured","hourly_no_billable":"No billable strategy","configure_hourly_billable":"Configure hourly billable","create_rate":"Create rate","edit_rate_primary":"Edit rate","view_hourly_members":"View hourly members","hourly_members_title":"Hourly team members","hourly_members_empty":"No active hourly members.","view_members_for_rate_type":"View team members","view_members_short":"View members","members_for_rate_type_title":"Team members paid {rateType}","members_for_rate_type_empty":"No active members fall under this rate type.","no_rate_set":"No rate set","property_picker_label":"Property (optional)","property_picker_placeholder":"Any property","property_picker_help":"Adding a property creates a member + property combined override (most-specific scope).","rate_type_picker_help_member_first":"Select a member first.","tab_label_billable_strategy":"Rates & Billable Strategy","section":{"internal_cost":"Internal cost","billable_rate":"Billable rate","base_count":"{count} of 3 set","property_overrides_count":"{count} of {total} customized","member_count":"{count, plural, one {# member} other {# members}}","member_rate_count":"{count, plural, one {# rate} other {# rates}}","recommended":"Recommended","advanced":"Advanced"},"scope":{"base":"Base rate","override":"Override","property":"Property","member":"Member","property_member":"Property + Member"},"cta":{"create_base":"Create base rate","edit_base":"Edit base rate","set_hourly_billable":"Set hourly billable rate","set_per_piece_flat":"Set per-piece flat rate","set_per_piece_hourly":"Set per-piece hourly rate"},"preview":{"internal_explainer":"Internal cost is what you pay the worker.","billable_explainer":"Billable rate is what you charge the owner."},"table":{"not_set":"—"},"hourly_internal_per_member":"Per member","hourly_internal_explainer":"Hourly internal cost comes from each member's personal hourly rate (set on their profile). You can still configure a billable rate below to control what you charge the owner.","per_piece_flat_explainer":"A flat amount paid per task — typically used with contractors. Set the internal cost (what you pay the worker) and an optional billable rate (what you charge the owner).","per_piece_hourly_explainer":"An hourly rate paid per task — typically used with contractors who bill by time. Set the internal hourly rate and an optional billable rate.","overrides_section_title":"Overrides","billable_mark_up_needs_internal":"This strategy requires an internal rate (base or override) to mark up. Set an internal rate first.","base_rates_section_title":"Base rates","base_rates_section_description":"Base rates apply when no property or member-specific override is configured. Set them so newly added properties have a sensible default.","property_rates_section_description":"Override the base rate for a specific property — useful when one property's costs differ from the rest (e.g. larger units, premium properties).","member_specific_rates_title":"Member-specific rates","member_specific_rates_description":"Rates that apply only to specific employees. A rate scoped to a member and a property (combined) takes precedence over a member-only override, which takes precedence over a property override, which takes precedence over the base rate.","no_member_overrides":"No member-specific rates yet. Most operators only need property rates; add a member override when a specific employee should be paid or charged differently.","member_rate_scope_member_only":"All properties","member_rate_scope_property":"At {property}","property_has_member_overrides":"{count, plural, one {# member rate} other {# member rates}}","property_has_member_overrides_tooltip":"This property has member-specific rate overrides — see the Member-specific rates section below.","properties_empty_title":"No properties yet","properties_empty_description":"Add properties to configure per-property rate overrides.","properties_filtered_empty_title":"No matching properties","properties_filtered_empty_description":"No properties match the current filters. Try clearing them."},"compensation":{"title":"Compensation","type":"Compensation Type","type_hourly":"Hourly","type_per_task":"Per Task","type_salaried":"Salaried","type_hybrid":"Hybrid","default_hourly_rate":"Default Hourly Rate","requires_clock_in":"Requires clock-in to shifts","shift_clock_in_grace_minutes":"Clock-in grace period (minutes)","shift_clock_in_grace_minutes_help":"Override the org default. Leave blank to fall back.","shift_allow_unscheduled_clock_in":"Allow unscheduled clock-in","shift_allow_unscheduled_clock_in_help":"Override the org default. Leave blank to fall back.","location_tracking_requirement_label":"Location tracking","location_tracking_requirement_inherit":"Use organization default","location_tracking_requirement_required":"Required to clock in","location_tracking_requirement_optional":"Optional","location_tracking_requirement_exempt":"Exempt (never tracked)","save":"Save","org_default":"Org default","clock_in_disabled_note":"Clock-in disabled for this member — grace period and unscheduled rules don't apply.","type_salaried_help":"No per-task internal cost is tracked. Their compensation lives on payroll. Billing strategies still apply to tasks they complete.","hourly_rate_required_error":"An hourly rate is required for hourly team members.","requires_clock_in_help_hourly":"Required for accurate pay. Starting a task auto-opens a shift if one isn't already active, so all on-clock time counts toward the timesheet.","requires_clock_in_hourly_warning":"Hourly team members without clock-in will appear as $0 labor cost in financials. Only disable this if you are tracking their time another way.","comp_tab":{"hourly":"Hourly","per_task":"Per-Task","salaried":"Salaried","set_later":"Set later"},"set_later_warning":"No compensation type configured. Tasks completed by this member will produce $0 labor and a \"missing compensation type\" warning in financials until you set their pay model.","comp_subtype":{"flat":"Flat per task","flat_description":"A fixed amount per task completion (split across non-salaried assignees).","hourly":"Hourly, Per-task Rate","hourly_description":"Hourly rate tied to each task's template, not the member's own default."}},"preview":{"preview_as_header":"Preview as…","preview_sheet_description":"See the internal cost and billable rate for a given assignee and property.","pick_primary_member":"Primary assignee","collaborators":"Collaborators","pick_property_optional":"Property (optional)","no_property":"(No property)","preview_results":"Computed cost","no_labor_emitted":"No labor cost emitted for this configuration.","billable_to_customer":"Billable rate","search_members":"Search assignees...","no_members_found":"No assignees found.","calculated_for_one_hour":"Calculated for 1 hour of work.","calculated_for_minutes":"Calculated for {minutes} minutes of estimated work.","search_properties":"Search properties...","no_properties_found":"No properties found.","internal_cost":"Internal cost","billable_rate":"Billable rate","internal_cost_explainer":"Internal cost: what you pay your team","billable_rate_explainer":"Billable rate: what you charge the owner","no_billable":"No billable rate configured","source":{"hourly_member_rate":"from member’s personal rate","per_task_flat_split":"per-task flat split","per_task_hourly":"per-task hourly","rate_override_flat":"task override (flat)","rate_override_hourly":"task override (hourly)","no_rate_configured":"no rate configured","no_compensation_type":"no compensation type set"},"source_tier":{"member_profile_rate":"from member’s personal rate","member_scope_rate":"from member override","property_scope_rate":"from property override","base_rate":"from base rate","task_rate_override":"from task override"}},"cost_types":{"labor":"Labor","material":"Material","expense":"Expense","other":"Other"},"warnings":{"no_billable_config_for_rate_type":"No billable rate — $0 will be billed for this rate type.","no_base_rate_for_rate_type":"No base rate configured — internal cost will be $0 for this rate type unless a property/member override applies.","members_missing_payroll_rate":"{count, plural, one {# hourly member has no payroll rate set. They will be paid $0 until configured.} other {# hourly members have no payroll rate set. They will be paid $0 until configured.}}","no_members_for_comp_type":"Base rate configured but no active members have this compensation type."},"override":{"title":"Set cost for this task","labor_override":"Labor cost","billable_override":"Billable rate","chip_labor_override":"Labor","chip_billable_override":"Billable","override_rate":"Internal rate","override_billable":"Billable rate","rate_cents":"Rate in cents","rate_type":"Rate type","billable_strategy":"Billable strategy","fixed_cents":"Fixed amount (cents)","markup_percent":"Markup %","reason":"Reason (required)","saved":"Saved","salaried_warning":"This assignee is salaried. Saving a labor cost will add it on top of their salary. Confirm?","confirm_apply":"Confirm and save","cancel":"Cancel","save":"Save","delete_title":"Remove cost?","delete_description":"This cost will be removed and the task will fall back to its configured rate.","default_remove_reason":"Removed from task detail"}},"folio":{"title":"Folio","subtitle":"All charges and payments across reservations.","no_guest":"(No guest)","no_property":"No property","load_more":"Load more","loading":"Loading…","expand_all":"Expand all","collapse_all":"Collapse all","active_filters":{"type_label":"Type: {type}","dates_range":"Dates: {from} – {to}","dates_from":"Dates: from {from}","dates_to":"Dates: until {to}","property_label":"Property: {name}","reservation_label":"Reservation: {code} · {guest}","showing_free":"Showing free items","remove_aria":"Remove filter"},"page_total":{"label":"Total (shown)","mixed":"Mixed"},"kpi":{"none":"—","completed":"Completed","completed_tooltip_label":"What does \"Completed\" mean?","completed_this_month":"{amount} this month","completed_none":"None this month","action_required":"Action required","action_required_tooltip_label":"What does \"Action required\" mean?","action_at_stake":"{amount} at stake","other_currencies":"+{count, plural, one {# more currency} other {# more currencies}}","action_none":"Nothing waiting on you"},"filters":{"hide_free_label":"Hide free items","hide_free_help":"Hide charges with no amount ($0 upsells and complimentary items).","show_free_label":"Show free items","buckets":{"complete":"Complete","action_required":"Action required"},"types":{"upsell":"Upsell","manual":"Manual","fee":"Fee","damage_waiver":"Waiver","damage_deposit":"Deposit"},"search_placeholder":"Search guest, reservation, description…","clear":"Clear filters","date_range_label":"Check-in dates","date_range_placeholder":"Any dates","date_range_clear":"Clear dates","properties_placeholder":"All properties","properties_selected":"{count, plural, one {# property} other {# properties}}","reservation_placeholder":"Filter by reservation","reservation_search_placeholder":"Search code or guest…","reservation_cleared":"Clear reservation filter","reservation_pill":"{code} · {guest}","open_filters":"Filters","active_count":"{count}","section_type":"Type","section_date_range":"Check-in dates","section_properties":"Properties","section_reservation":"Reservation","section_options":"Options","clear_all":"Clear filters","done":"Done"},"fee_types":{"airbnb_resolution":"Airbnb Resolution","credit_card":"Credit card"},"columns":{"guest":"Guest","reservation":"Reservation","description":"Description","type":"Type","amount":"Amount","status":"Status","payment":"Payment status","created":"Created","sort_ascending":"Sort by {column} ascending","sort_descending":"Sort by {column} descending","open":"Open details","select_all":"Select all on page","select_row":"Select row"},"bulk":{"selected_count":"{count, plural, one {# charge selected} other {# charges selected}}","approve":"Approve","deny":"Deny","clear":"Clear selection","approved_toast":"{count, plural, one {Approved # charge} other {Approved # charges}}","denied_toast":"{count, plural, one {Denied # charge} other {Denied # charges}}","partial_failure":"{count, plural, one {# charge failed to update} other {# charges failed to update}}","deny_skipped_payment_in_flight":"{count, plural, one {# charge was skipped — its payment is still resolving} other {# charges were skipped — their payments are still resolving}}","confirm_title_approve":"Approve completed charges?","confirm_title_deny":"Deny completed charges?","confirm_body":"{resolved} of {count} selected charges are already decided or settled. Changing their status updates the workflow only — it won't capture or refund money. Continue?","confirm_cancel":"Cancel","release_prompt_title":"Release auth-holds?","release_prompt_body":"{count, plural, one {# denied charge still has a hold on the guest's card.} other {# denied charges still have holds on their guests' cards.}} Release them so the funds aren't tied up for denied requests.","release_prompt_confirm":"Release","release_prompt_skip":"Skip","release_done_toast":"{count, plural, one {Released # hold} other {Released # holds}}","release_partial_failure":"{count, plural, one {# hold failed to release} other {# holds failed to release}}"},"amount":{"free":"Free","refunded":"−{amount} refunded"},"actions":{"approve":"Approve","deny":"Deny","capture":"Capture","refund":"Refund","mark_delivered":"Mark delivered"},"empty_state":{"title":"No charges match these filters.","clear_filters":"Clear filters","subtitle":"Try a different status or clear filters to see everything.","welcome_title":"No charges yet.","welcome_subtitle":"When guests purchase upsells or fees are added to reservations, they'll appear here."},"error_state":{"title":"Something went wrong loading charges.","subtitle":"Please try again. If the problem persists, contact support.","retry":"Retry"},"group_by_reservation_label":"Group by reservation","view_mode_label":"View mode","view_mode":{"list":"List","grouped":"Grouped"},"group_by":{"none":"No grouping","reservation":"Group by reservation","property":"Group by property","type":"Group by type"},"group_header":{"charges_count":"{count, plural, one {# charge} other {# charges}}","total":"Total: {amount}","mixed_currency":"Mixed","expand":"Expand group","collapse":"Collapse group"},"export":{"button":"Export CSV","loading":"Exporting…","error":"Couldn't export folio data. Please try again."},"stuck_charges":{"title":"Stuck GuestyPay charges","description":"Charges GuestyPay has not finished confirming, plus authorization holds nothing will release. Read-only here.","error_title":"Couldn't load stuck charges","error_description":"Try again in a moment.","error_retry":"Retry","load_more":"Load more","col_age":"Waiting","col_amount":"Amount","col_state":"State","col_reason":"Reconcile outcome","col_handles":"Guesty references","state_processing":"Processing","state_hold":"Uncaptured authorization hold","state_hold_hint":"Held on the guest's card with no release deadline.","reason_unconfirmed":"Guesty has not confirmed this charge","reason_hold_awaiting_operator":"Confirmed hold — capture or release it from the charge","reason_unknown":"Reconcile refused, reported as “{reason}”","handle_intent":"Payment intent","handle_charge":"Charge","handle_reservation":"Reservation","handle_missing":"Not recorded","reason":{"authorization_hold":"Authorization only — Guesty has not captured it","ambiguous_ledger_match":"Several Guesty payments match this charge","charge_id_only_match":"Matched on the charge reference alone — not enough to settle","amount_mismatch":"Guesty confirmed a different amount","currency_mismatch":"Guesty confirmed a different currency","refund":"Guesty has refunded this payment","chargeback":"This payment has been charged back","record_refunded":"A refund is on this record — reconcile it by hand","unreadable":"Guesty could not be reached on the last check","unbound_payment":"Guesty lists a payment we cannot match to a record — reconcile it by hand"}}},"get_started":{"state":{"not_ready":"Not ready yet","ready":"Ready · not optimized","optimized":"Ready & optimized","live":"Live"},"header":{"not_ready_title":"{count, plural, =1 {Finish setting up · 1 step to go live} other {Finish setting up · # steps to go live}}","not_ready_sub":"Your properties are in. A couple of things left before your guest links can go on.","not_ready_sub_gate":"Start by connecting your PMS — it brings your properties in and unlocks the rest of setup.","ready_title":"You are ready to go live","ready_sub":"Every required step is done. Recommended items never hold you back.","optimized_title":"You are all set","optimized_sub":"Required and recommended done — guests get the full experience.","live_title":"Your links are live","live_sub":"Guests can open their portal. Keep improving whenever you like.","legend_required":"Needed to go live · {done} of {total}","legend_recommended":"Recommended · {done} of {total}","track_aria":"Setup progress: {requiredDone} of {requiredTotal} required steps and {recommendedDone} of {recommendedTotal} recommended steps complete"},"sections":{"done":"Done","required":"Needed to go live","required_badge":"Required","required_left":"{count, plural, =1 {1 left} other {# left}}","recommended":"Recommended","recommended_meta":"stronger portal","foundation":"Foundation","path_progress":"{done} of {total} set up"},"row":{"edit":"Edit","add_account":"Add account","done_pill":"Done","top_pick":"Top pick","cta":{"properties":"Connect","groups":"Group","instructions":"Add","portals":"Set up","payments":"Connect","waiver":"Set up","upsells":"Set up","manuals":"Set up","guides":"Review","agreement":"Set up","task_templates":"Review","task_team":"Invite","device_provider":"Connect","device_map":"Assign","device_codes":"Review","task_departments":"Create","task_scheduling":"Set up"},"mcp_pill":"Do it faster with MCP"},"items":{"properties":{"name":"Add properties","description":"{count} imported from {pms}","description_todo":"Connect the system that runs your listings and import every property, reservation and calendar.","description_generic":"{count, plural, one {# property} other {# properties}} imported"},"groups":{"name":"Property groups","description":"Group properties by building or market — access, portals and tasks from one set."},"instructions":{"name":"Check-in instructions","description":"Paste what you send today — Opal formats it and applies it across your groups."},"portals":{"name":"Set up your portal","description":"What your guests open — create one per area, since local guides attach to the portal. Add your branding, or keep our defaults."},"payments":{"name":"Connect payments","description":"One account-level connection — needed for deposits, upsells and charges."},"waiver":{"name":"Damage waiver or deposit","description":"Add a deposit hold, waiver fee, or insurance as a verification step."},"upsells":{"name":"Set up upsells","description":"Sell early check-in, late checkout and add-ons from the guest portal."},"manuals":{"name":"House manuals","description":"The full property guide — appliances, house rules, amenities — per property or shared."},"guides":{"name":"Local guides","description":"Recommend the area to your guests — activities, restaurants, coffee and bars near each portal."},"agreement":{"name":"Rental agreement","description":"Have guests sign before they get access. Added as a verification step."},"task_templates":{"name":"Task templates","description":"Turnover, inspection and maintenance checklists — start from ours or bring your own."},"task_team":{"name":"Invite your team","description":"Cleaners and inspectors get the mobile app — tasks land in their pocket."},"device_provider":{"name":"Connect a lock provider","description":"Seam, SmartThings, Schlage and more — one connection brings your locks in."},"device_map":{"name":"Assign locks to properties","description":"Match each lock to its property so codes reach the right door."},"device_codes":{"name":"Guest code settings","description":"When codes are issued and revoked around each stay — the defaults work for most."},"task_departments":{"name":"Create your departments","description":"Cleaning, maintenance, inspections — teams and tasks organize by department."},"task_scheduling":{"name":"Auto-scheduling rules","description":"Decide which tasks each reservation creates — a cleaning after checkout, an inspection before arrival."}},"strength":{"label":"Launch strength {done} of {total}"},"go_live":{"title":"Send your portal links","sub_locked":"Finish the required steps, then send your links through your PMS.","sub_armed":"Everything's ready — put your portal link in your PMS messages and you're live.","cta":"Go live","waiting_on":"Waiting on:","live_title":"Your links are on","live_sub":"Guests with upcoming stays can open their portal.","needs_admin":"An admin needs to send the links"},"preflight":{"title":"The last step — send your portal links","subtitle":"SuiteOp doesn't send guest messages yet, so your PMS delivers the portal link. Two minutes, once.","step_copy":"Copy your portal link","step_paste":"Paste it into your {pms} booking-confirmation and pre-arrival messages","copy":"Copy","copied":"Copied","copy_failed":"We couldn't copy the link. Select it and copy it by hand.","guide":"How to do this in {pms}","footnote":"When SuiteOp's unified inbox launches we will send these for you, and this step disappears.","cancel":"Not yet","confirm":"I've added it — we're live","confirm_failed":"We couldn't record that. Nothing has changed — try again in a moment.","variable_note":"Replace [reservation_id] with the matching reservation variable in {pms} — every PMS names it differently, and the guide below shows the exact one. The rest of the link never changes.","variable_note_generic":"Replace [reservation_id] with the matching reservation variable in your PMS — every system names it differently. The rest of the link never changes.","step_paste_generic":"Paste it into your booking-confirmation and pre-arrival messages","guide_generic":"How to do this"},"confirmed":{"title":"Your links are live","body":"Guests with upcoming stays can now open their portal, verify, and see their check-in instructions. Share links through your PMS messages — automated sending is coming soon.","next":"See what's next","recorded":"Went live {timestamp} · recorded to your account timeline"},"banner":{"waiting_on":"Waiting on:","ready_hint":"Nothing is blocking you — turn on your links whenever you are ready.","optimize_hint":"A few recommended items left to reach a fully optimized portal.","cta_open":"Open setup","cta_ready":"Go live"},"footer":{"scope":"Covers your {count} properties from {pms}.","scope_generic":"Covers your {count, plural, one {# property} other {# properties}}."},"guide":{"eyebrow":"Setup","back":"Back to setup","dismiss_aria":"Dismiss setup guide","properties":"Your listings are here — pick the ones you want in the Listings section below and Quick Add turns each into a property. Nothing imports on its own.","groups":"Create groups that match how you operate — by building or market. Access, portals and tasks follow the group.","instructions":"Open a property, add its check-in steps, and fill the per-property fields like wifi and door codes.","portals":"Create a portal for each area you operate — local guides attach to the portal — then assign its properties and add your branding.","payments":"Connect your payment processor here. One connection covers deposits, upsells and charges.","waiver":"In your portal's verification steps, add a damage deposit step — deposit hold, waiver fee, or insurance.","upsells":"Create your first upsell — early check-in and late checkout are the usual winners.","manuals":"Add a house manual — appliances, house rules, amenities — so guests stop asking.","guides":"Add local recommendations for each portal's area — activities, restaurants, coffee and bars.","agreement":"In your portal's verification steps, add an agreement step so guests sign before they get access.","task_templates":"Start from our standard turnover and inspection templates, then adjust the checklists to how you operate.","task_team":"Invite your cleaners and inspectors — they get the mobile app and see their tasks immediately.","device_provider":"Connect your lock provider here, then head back — your locks import automatically.","device_map":"Match each lock to its property so guest codes reach the right door.","device_codes":"Review when codes are issued and revoked around each stay — the defaults work for most teams.","task_departments":"Create a department for each kind of work — cleaning, maintenance, inspections. Teams and templates hang off them.","task_scheduling":"Create a rule for each task a reservation should generate — like a cleaning after every checkout."},"gate":{"hint":"Connect your PMS first — every other step needs your properties."},"readiness":{"title":"Launch readiness","summary":"{ready} of {total} ready · {gaps} with gaps","computed_note":"computed on effective assignment — portal, tag, or direct","back":"Back to setup","link_view":"View by property","no_group":"no group","no_portal":"no portal","more_ready":"{count} more properties — all ready","floor_note":"The first four columns are the go-live floor · the rest feed strength","col":{"property":"Property","group":"Group","instructions":"Instructions","verification":"Verification","portal":"Portal","upsells":"Upsells","guides":"Guides","waiver":"Waiver / deposit","strength":"Strength"},"legend":{"covered":"covered (via any path)","required":"required & missing","recommended":"recommended & missing","not_in_plan":"not in this account's plan"},"chip":{"ready":"Ready","blocked":"{count, plural, =1 {Blocked · 1 missing} other {Blocked · # missing}}","gap":"Gap · {reason}"},"reason":{"wifi_missing":"wifi missing","verification_off":"verification off"}},"mcp":{"title":"Set up with your AI assistant","body":"Connect your assistant to SuiteOp's MCP server and let it draft your check-in steps, house manuals and upsells for you.","cta":"Open developer settings"},"tabs":{"portal":"Guest portal","tasks":"Tasks","devices":"Devices"},"module":{"sub_locked":"Finish the steps above and this switches on.","tasks":{"section":"Set up tasks","title":"Turn on auto-scheduling","sub_armed":"Your rules are ready — new reservations start creating their tasks.","cta":"Turn on","live_title":"Auto-scheduling is on","live_sub":"Reservations create tasks from your rules automatically."},"devices":{"section":"Set up devices","title":"Start device management","sub_armed":"Guest codes start issuing for upcoming stays.","cta":"Start","live_title":"Device management is on","live_sub":"Codes are issued and monitored for every stay."}},"goals":{"checkin":"Let your guests check in","verify":"Verify your guests","optimize":"Advanced optimization"},"load_error":{"title":"We couldn't load your setup","body":"This is a problem on our side, not with your account — nothing has been lost. Try again in a moment.","retry":"Try again"}},"guest_portal":{"landing":{"default_welcome":"Welcome to your stay","cta":"Access your stay","powered_by":"Powered by SuiteOp"},"check_in_instructions":{"title":"Step-by-step check-in instructions","subtitle":"Everything you need to get into your place.","empty":"Your host hasn't added check-in instructions yet.","locked_title":"Check-in details coming soon","locked_description":"Your check-in instructions will be available on {date} at {time}.","locked_precheck_title":"Complete pre-check-in first","locked_precheck_description":"Your check-in instructions will be available once you finish pre-check-in.","locked_fee_title":"Payment required","locked_fee_description":"Your check-in instructions will be available once your outstanding fees are paid.","locked_review_title":"Your information is under review","locked_review_description":"We're reviewing the information you submitted — your check-in details will appear here once the review is complete. If you have any questions, message your host.","expired_title":"Reservation completed","expired_description":"Your stay has ended, so the check-in instructions and access code are no longer available."},"verify":{"title":"Access Your Stay","subtitle":"Enter your booking details to continue","confirmation_code":"Confirmation Code","last_name":"Last Name","submit":"Access Portal","error_invalid":"Invalid confirmation code or last name","error_unavailable":"We couldn't reach the server. Please try again in a moment.","error_expired":"Your session has expired. Please verify again.","error_link_expired":"This link is no longer valid or has expired.","error_link_expired_help":"Enter your booking details below to request a new link and access your stay.","error_not_ready":"This stay isn't ready yet.","error_not_ready_help":"Your booking details are correct, but your host is still setting up this property. Please contact them to get access.","loading":"Verifying...","error_rate_limited":"Too many attempts. Please try again in {time}."},"nav":{"your_stay":"Your Stay","your_rental":"Your Rental","get_access":"Get Access","local_guide":"Local Guide","access":"Access","suite":"Suite","explore":"Explore","services":"Services","manuals":"Manuals","guides":"Guides","reservations":"Stays","all_reservations":"All reservations","help":"Help","chat":"Chat","past_purchases":"Past purchases"},"precheck_prompt":{"not_now":"Not now"},"verification_banner":{"title":"A few steps to go","message":"It only takes a couple of minutes — do it now and your check-in instructions will be ready and waiting for your arrival.","under_review":"Pre-check-in submitted. Verification is under review; no further action is needed right now."},"rating":{"title_experience":"Rate your arrival experience","title_cleanliness":"Rate the cleanliness of the space","comments_label":"Additional comments","comments_placeholder":"Type here...","photos_label":"Add photos","arrival_notice":"Only confirm once you've arrived at the property.","confirm_checkin":"Confirm arrival","not_checked_in":"I have not arrived at the property yet","star_1":"Terrible","star_2":"Poor","star_3":"It was okay","star_4":"Good","star_5":"It was great","improvement":{"title":"What could we improve?","check_in_process":"Arrival & access","communication":"Communication","quality":"Cleanliness & quality","other":"Something else"}},"locks":{"offline_warning":"This lock is currently offline","lock_sent":"Lock command sent","lock_failed":"Failed to lock device","unlock_sent":"Unlock command sent","unlock_failed":"Failed to unlock device","swipe_to_unlock":"Swipe to Unlock","tap_to_view":"Tap to view available locks"},"troubleshoot":{"code_not_working":"My code is not working","title":"Code not working?","description":"Having trouble with your access code? You can request a backup code or contact support.","description_contact_only":"Having trouble with your access code? Contact support and we'll help.","get_backup_code":"Get backup code","contact_support":"Contact support","contact_support_description":"Backup codes are not yet available. Please contact your property manager for assistance.","support_phone":"Call {phone}","support_email":"Email {email}","new_code_issued":"New code issued!","new_code_description":"Your new access code is:","error_title":"Unable to assign a new code","error_description":"Please contact support for assistance.","lock_model":"Lock: {model}","code_window":"Valid {window}","shared_grant_error":"This door's code is issued together with the other doors on your stay, so it can't be replaced on its own. Please contact your host."},"stay":{"precheckin_pending":"Pre-check-in pending","nights_left":"{count, plural, one {# night left} other {# nights left}}","check_in":"Check-in","check_out":"Check-out","guests":"{count, plural, one {# guest} other {# guests}}","access_code":"Access Code","tap_to_copy":"Tap to copy","copied":"Copied!","wifi":"WiFi","wifi_network":"Network","wifi_password":"Password","copy":"Copy","quick_access":"Quick Access","safety_rules":"Safety Rules","directions":"Directions","check_in_status":"Check-in Status","suite_info":"Suite Info","checkin_incomplete":"Check-in incomplete","checkin_steps_done":"{done} of {total} steps done","coming_soon":"Coming soon","code_not_available":"Access code not yet available","arriving_in_days":"{count, plural, one {Arriving in # day} other {Arriving in # days}}","good_morning":"Good morning, {name}","good_afternoon":"Good afternoon, {name}","good_evening":"Good evening, {name}","guest_portal_label":"Guest Portal","enhance_your_stay":"Enhance Your Stay","view_all":"View All","add_to_reservation":"Add to reservation","limited_availability":"Limited Availability","guest_favorite":"Guest Favorite","quick_actions":"Quick Actions","manuals_label":"Manuals","guides_label":"Guides","check_in_label":"Check-in","check_out_label":"Check-out","your_stay":"Your Stay","confirmation":"Confirmation","check_in_time":"3:00 PM","check_out_time":"11:00 AM","property_type":"Property","view_digital_key":"VIEW DIGITAL KEY","digital_checkin":"Digital Check-in","complete_checkin_desc":"Complete your check-in before arrival","welcome":"Welcome","house_rules":"House Rules","quick_access_uber":"Uber","quick_access_report_an_issue":"Report an issue","quick_access_find_parking":"Find parking","quick_access_find_parking_justpark":"JustPark","quick_access_rent_baby_gear":"Rent baby gear","unit":"Unit {number}","map_title":"Map of the property location","celebrate":"Celebrate","reservation_section":"Reservation","reservation_id":"ID","reservation_status":"Status","reservation_status_value":"{status, select, confirmed {Confirmed} canceled {Canceled} expired {Expired} inquiry {Inquiry} declined {Declined} closed {Closed} reserved {Reserved} awaiting_payment {Awaiting payment} blocked {Blocked} other {Unknown}}","purchases_label":"Purchases","address_hidden_hint":"Address hidden until verification"},"access":{"title":"Access Codes","door_code":"Door Code","no_code":"No access code is assigned to your stay yet — contact your host if you're arriving soon.","tap_to_copy":"Tap to copy","copied":"Copied to clipboard","copy_value":"Copy {label}","valid_until":"Valid until {date}","before_arrival_title":"Before you arrive","before_arrival_description":"Complete these steps to unlock your check-in instructions and door code.","check_in_guide":"Check-in guide","verification_pending_title":"Verification is pending","verification_pending_description":"Your information has not been verified. Please contact your property manager, or click here to complete your pre-checkin details in order to view your check-in information.","verification_under_review_title":"Verification under review","verification_under_review_description":"You completed pre-check-in. The property team is reviewing your information, and no further action is needed right now. We'll contact you if anything else is required.","complete_verification":"Complete verification","building_access":"Building access","unit_access":"Unit access","status_active":"Active","status_not_active_yet":"Not active yet","status_scheduled":"Scheduled for installation","status_failed":"Installation failed","status_pending":"Installation in progress","see_check_in_instructions":"Step-by-step instructions","code_not_working":"Code not working?","request_backup":"Request new code","requesting":"Requesting...","copy_failed":"Failed to copy","status_expired":"Expired","status_unavailable":"Unavailable","status_unknown":"Status unknown","access_revoked_title":"Access unavailable","access_revoked_description":"Your access code was removed. Please contact your host for help getting in.","access_revoked_partial":"One of your locks was removed. If a code below doesn't work, contact your host.","contact_host":"Contact host","see_check_out_instructions":"See check-out instructions","address_hidden_title":"Address revealed after verification","address_hidden_description":"Your property's full address and directions will appear here once you've completed verification.","code_locked_timer":"Your access code and check-in details unlock on {date} at {time}.","code_locked_fee":"Your access code unlocks once your outstanding fees are paid.","device_controls_locked":"Device controls are unavailable while your check-in access is locked.","declined_title":"Verification not approved","declined_description":"Your verification wasn't approved, so check-in details are unavailable for now. Please contact your host for next steps.","declined_host_note_label":"Message from your host","review_host_note_label":"Message from your host","stay_ended_title":"Your stay has ended","stay_ended_body":"Thanks for staying with us! You can still browse your receipts and get help from this page."},"suite":{"title":"Your Suite","description":"About this property","address":"Address","open_in_maps":"Directions","check_in_instructions":"Check-in Instructions","house_rules":"House Rules","wifi":"WiFi","wifi_network":"Network","wifi_password":"Password","amenities":"Amenities","bedrooms":"{count, plural, one {# Bedroom} other {# Bedrooms}}","bathrooms":"{count, plural, one {# Bathroom} other {# Bathrooms}}","about":"About","control_your_stay":"Control your stay","device_categories":{"lock":"Locks","thermostat":"Thermostats","light":"Lights"},"other":"Other","see_details":"See details","wifi_hidden_hint":"WiFi details appear here once your check-in is unlocked."},"devices":{"empty":"No devices available","unnamed":"Unnamed device","online":"Online","offline":"Offline","offline_warning":"This device is currently offline","low_battery":"Low battery: {level}%","controls_locked_title":"Controls unavailable","controls_locked_timer":"Device controls unlock on {date} at {time}.","controls_locked_fee":"Device controls unlock once your outstanding fees are paid.","controls_locked_precheck":"Device controls will be available once you finish pre-check-in.","controls_locked_expired":"Your stay has ended, so device controls are no longer available.","controls_locked_declined":"Your verification wasn't approved, so device controls are unavailable. Please contact your host."},"thermostat":{"mode_sent":"Thermostat update sent","mode_failed":"Failed to update thermostat","temperature_sent":"Temperature update sent","temperature_failed":"Failed to update temperature"},"light":{"state_label":"Light","state_on":"On","state_off":"Off","read_only_hint":"Status updates automatically. Lighting controls coming soon."},"manuals":{"title":"House Manuals","empty":"No manuals available","value_unavailable":"Not available yet","empty_content":"The host hasn't added content to this manual yet."},"check_in":{"before_arrival_subtitle":"Finish these steps to unlock your stay details","progress":"{done} of {total} completed","step_done":"Done","step_up_next":"Up next","step_completed":"Completed","step_in_review":"Pending review","step_waived":"Waived","step_skipped":"Skipped","step_pending":"Pending","step_locked":"Locked","step_failed":"This step could not be completed. Please contact support.","complete_button":"Complete Check-in","complete_success":"You're all set!","complete_subtitle":"Your check-in is complete. Enjoy your stay!","confirm_failed":"We couldn't finish your check-in. Please try again.","review_submitted_title":"Pre-check-in submitted","review_submitted_subtitle":"The property team is reviewing your information. No further action is needed right now.","review_return_to_stay":"Return to your stay","back_to_portal":"Back to Portal","details_title":"Your check-in details","details_subtitle":"Everything you completed before your arrival.","details":{"completed_on":"Completed on {date}","signed_on":"Signed on {date}","signed_by":"Signed by {name}","download_pdf":"Download PDF","download_success":"Your signed agreement has been downloaded.","download_failed":"We couldn't download your agreement. Please try again.","deposit_held_on":"Security deposit of {amount} held on {date}","waiver_paid_on":"Damage waiver of {amount} paid on {date}","damage_declined_on":"Declined on {date}","fee_paid_on":"Paid on {date}","view_past_purchases":"See in Past purchases","arrival_time":"Arriving around {time}","child":"Child","no_answer":"Not answered"},"offers_title":"We think you'll like these","offers_title_one":"We think you'll like this","offers_subtitle":"Add something to your stay — or continue and browse later.","offers_continue":"Continue to your stay","confirm_reservation":"Confirm reservation","confirm_reservation_aria":"Confirm reservation and unlock access","acknowledge":"Acknowledge","automatic_step_message":"This step is handled automatically","start_precheckin":"Start pre-check-in","your_details":{"title":"Your Details","description":"Contact details for the main guest staying","first_name":"First Name","last_name":"Last Name","email":"Email","phone":"Phone","email_marketing_consent":"I would like to receive marketing emails and special offers.","email_marketing_consent_help":"You can unsubscribe at any time.","eta":"Estimated Arrival Time","eta_window_hint":"Not before {time}","save":"Save Details","save_failed_navigation_confirm":"We couldn't save your details. Leave this page anyway?","main_guest_differs":"The main guest is different from the booking contact","main_guest_differs_help":"Tick this if the person staying isn't the person who made the booking. We'll keep the booking contact as it is and record the main guest separately."},"identity_check":{"title":"Identity Check","description":"Verify your identity with a photo ID and selfie","consent_heading":"Identity authentication","consent_person":"You must be the main guest for this stay, and your name should match the details confirmed at check-in","consent_ml":"We use machine learning, computer vision, and AI for a forensic identity authentication","consent_privacy":"Your information will be used by SuiteOp and its verification service providers for identity authentication purposes only.","consent_time":"This process only takes a couple minutes","consent_agree":"I agree to SuiteOp's Terms of Use and Privacy Policy","desktop_no_phone":"No mobile phone available? Reach out to your property manager for assistance.","id_type_passport":"Passport","id_type_drivers_license":"Drivers License","id_type_identification_card":"Identification Card","id_type_secure":"Safe, encrypted identity verification","capture_front":"Front","capture_back":"Back","capture_single_page":"Photo page","capture_retake":"Retake","processing_text":"Verifying your identity...","waiting":"Your files were securely received. This page will update automatically when verification is complete.","rate_limited":"Too many verification attempts. Please try again in {seconds, plural, one {# second} other {# seconds}}.","result_passed":"Identity verified","result_review":"Your ID is being reviewed by the property team","result_failed":"Verification failed","result_retry":"Try again","crash_title":"Identity check unavailable","crash_description":"Something went wrong on this step. Try again, or continue with the rest of your check-in.","upload_failed":"We couldn't upload your photo. Please check your connection and try again.","error_subject_changed":"The main guest on this booking changed, so these photos can't be used. Please start the ID check again for the new main guest.","continue":"Continue","next":"Next","verification_note":"Please complete identity verification to proceed","front_id":"Front of ID","upload_prompt":"Upload a clear photo","selfie":"Selfie","submit":"Submit","change":"Change","back_id":"ID Back","submit_failed":"We couldn't submit your verification. Please try again.","progress_step":"Step {current} of {total}","back":"Back","doc_type_heading":"Choose your document","doc_type_subtitle":"You'll need an official government ID","prepare_heading":"Prepare your document","prepare_subtitle":"You'll photograph both sides. Make sure every detail is readable.","prepare_subtitle_single_page":"You'll photograph the photo page, then take a selfie. Make sure every detail is readable.","prepare_ready":"Have your physical ID with you","prepare_light":"Find bright, even lighting","prepare_surface":"Place it on a flat, contrasting surface","prepare_glare":"Avoid glare and shadows","prepare_corners":"Keep all four corners in the frame","prepare_original":"Use the original document — no copies or screen photos","camera_open":"Take photo","camera_upload_instead":"Upload from device instead","camera_close":"Close camera","camera_shutter":"Take photo","camera_torch":"Toggle flashlight","camera_zoom_level":"Zoom {level}","camera_hint_id_front":"Position the front of your document in the frame","camera_hint_id_back":"Position the back of your document in the frame","camera_hint_id_single_page":"Position the photo page of your document in the frame","camera_hint_selfie":"Center your face in the oval","camera_hint_readable":"All details must be easily readable","camera_denied_heading":"Camera access needed","camera_denied_body":"Allow camera access in your browser settings, then try again.","camera_denied_inapp":"Opened this link inside another app? Open it in your browser instead.","camera_capture_failed":"We couldn't capture the photo. Please try again.","qr_scan_hint":"Prefer your phone? Scan this code with your phone's camera to continue there.","qr_only_heading":"Continue on your phone","qr_only_body":"This step needs live photos taken with your phone camera. Scan the code with your phone to continue securely.","review_heading_id":"Check your photo","review_heading_selfie":"Check your selfie","review_photo_alt_id":"The document photo you just took","review_photo_alt_selfie":"The selfie you just took","review_use":"Use this photo","review_warning_blurry":"The photo looks blurry — consider retaking it","review_warning_too_dark":"The photo looks too dark — find more light","review_warning_too_bright":"The photo looks overexposed — reduce direct light","selfie_heading":"Take a selfie","selfie_subtitle":"We'll match it with your document photo","processing_long":"This is taking longer than expected — hang tight, we're still checking.","processing_continue_invite":"No need to wait here — we'll keep checking in the background.","processing_continue_action":"Continue with your check-in","error_decode":"We couldn't read that image ({format}). Please use a JPG or PNG photo.","error_network":"We couldn't upload your photos. Check your connection and try again.","error_manual_upload_not_allowed":"File uploads aren't allowed for this step — please take live photos.","error_document_type_not_allowed":"That document type isn't accepted for this step. Please go back and choose a different one.","error_too_many_attempts":"Too many attempts. Please contact your host to continue.","error_demo_org_refused":"ID verification is turned off for this demo property, so we can't check your ID here. Please contact your host to finish check-in.","error_org_muted_refused":"ID verification is paused for this property right now, so we can't check your ID here. Please contact your host to finish check-in.","error_too_large":"That image is too large. Please choose a photo under 40MB.","copy_link_button":"Copy sign-in link","qr_share_warning":"This code signs you in to your portal — don't share or screenshot it.","qr_only_email_fallback":"Can't scan? Open the check-in link from your booking email on your phone.","result_review_retryable":"We couldn't verify your ID","reason_barcode_unreadable":"We couldn't read the barcode on the back of your ID. Please retake that photo.","reason_mrz_invalid":"We couldn't read the machine-readable strip on your document. Please retake the photo.","reason_unclear":"Some details on your ID weren't clear enough to read. Please retake the photos in good light.","reason_unavailable":"We couldn't complete the check just now. Please try again.","reason_expired":"This document appears to have expired. Please use a valid one.","reason_not_official":"Please use an official government-issued ID.","reason_no_face":"This ID has no photo of you on it. Please use an ID that shows your photo.","reason_selfie_mismatch":"Make sure the selfie is of you, taken live, and that the ID is yours.","reason_name_mismatch":"Make sure the ID belongs to the person named on the booking.","reason_generic":"We couldn't verify this document. Please retake your photos in good light."},"agreement":{"title":"Agreement","description":"Review and accept the terms","checkbox_label":"I agree to the terms and conditions","full_name":"Full Name (Signature)","full_name_placeholder":"Type your full name","agree_button":"I Agree","agreed":"You have agreed to the terms","sign_document":"Send Document","sign_document_description":"Complete the signer details below and submit to receive the agreement for signing.","signer_slots_mandatory":"All {count, plural, one {# signer} other {# signers}} must be filled before submitting.","signer_slots_optional":"This agreement has {count, plural, one {# signer slot} other {# signer slots}}. Fill in at least the primary signer.","signer_required":"Required","signer_optional":"Optional","primary_signer":"Signer 1","additional_signer":"Signer {index}","signer_name_label":"Full name","signer_name_placeholder":"Full name here...","signer_email_label":"Email address","signer_email_placeholder":"Email address","signer_adult":"Adult","signer_child":"Child","signer_child_info":"Child signers don't need an email address","signer_clear":"clear","is_child_label":"Minor (no email)","duplicate_email":"Duplicate email not allowed","invalid_email":"Please enter a valid email address","mandatory_all_required":"All signer details are required before you can submit.","preparing_title":"Preparing Your Document","preparing_description":"Your agreement is being prepared. This usually takes a few seconds.","document_sent_title":"Agreement Sent","document_sent_description":"The agreement has been sent to the signers. Please check your email and sign the document.","signer_status_signed":"Signed","signer_status_pending":"Awaiting","signer_status_minor":"Minor","resend_button":"Resend Agreement","resend_success":"Reminder sent to unsigned signers","resend_error":"We couldn't resend the agreement. Please try again.","document_completed_title":"Agreement Signed","document_completed_description":"All signers have completed the agreement."},"additional_questions":{"title":"Additional Questions","description":"Please answer the following questions","placeholder":"Additional questions will appear here","submit":"Submit Answers","yes":"Yes","no":"No","optional":"Optional","select_placeholder":"Select an answer","answer_required":"Please answer all required questions"},"other_guests":{"title":"Other Guests","description":"Add any additional guests staying with you","guest_name":"Guest Name","guest_number":"Guest {number}","add_guest":"Add Guest","remove_guest":"Remove guest","no_additional":"No additional guests added","phone":"Phone (optional)","is_child_label":"This guest is a child","id_upload_label":"Photo ID","id_required":"Please upload a photo ID for each adult guest.","id_upload_failed":"We couldn't upload the photo ID. Please check your connection and try again.","id_on_file":"Photo ID already uploaded — choose a file to replace it.","save":"Save and continue","email_optional":"Email (optional)","share_title":"Let them fill in their own","share_description":"Share one link. Whoever opens it picks their spot and adds their own details.","share_button":"Share link","share_copied":"Link copied","share_failed":"We couldn't share the link. Please try again.","share_message":"Add your details for our upcoming stay","none_allowed":"Your booking doesn't list anyone else. If more people are coming, let your host know."},"payment":{"received":"Payment received","still_processing":"Your payment is still being processed. We'll update this step as soon as it's confirmed — please don't pay again.","check_again":"Check again","authentication_required_title":"Your bank needs you to confirm this payment","authentication_required_body":"Approve it wherever your bank asked — usually in your banking app or by text message — then tap Check again. Please don't pay again while it's waiting.","protection_declined":"Protection declined","try_another_card":"Try another card","errors":{"declined":"Your card was declined. Try another card or contact your bank.","network":"Your connection was interrupted. Your payment may still be safe to retry.","generic":"We couldn't complete the payment. Please try another card or try again.","step_not_ready":"This step isn't ready yet. Please contact your host.","payment_disputed_repayable":"That payment is being disputed, so it can't be completed. The fee is still due — you can pay it again.","payment_reversed":"That payment was reversed, so it didn't go through. You can try the payment again below.","payment_failed":"That payment didn't go through, so this fee is still due. You can try the payment again below.","decline_unavailable":"Declining coverage isn't available for this step anymore. Please choose one of the protection options above.","payment_held":"You already have a protection payment on this step, so it can't be changed here. Message your host to have it refunded or released first.","payment_refund_pending":"Your host has already started refunding this payment. It can take a little while to clear — please check back shortly.","payment_unsubmitted":"We couldn't update your protection choice just now. Please try again in a moment.","settlement_superseded":"Your protection choice was changed in another tab. Reload this page to continue.","stay_ended":"This stay has already ended, so this step can't be changed here anymore. Please contact your host if you need help.","verification_declined":"Your ID verification wasn't approved, so this step can't be paid. This isn't a problem with your card — please contact your host to continue check-in.","org_muted":"This property isn't accepting payments right now, so we couldn't take this one. Please contact your host to finish check-in.","card_features_ineligible":"Your card wasn't charged. Please enter your card details once more to place the deposit."},"reload_page":"Reload the page","secure_charged":"Secure payment · charged now","secure_hold":"Secure payment · a hold, not a charge"},"damage_deposit":{"title":"Damage Protection","description":"Damage protection for your stay","amount_label":"Deposit amount","subtitle":"Choose between a Security Deposit or Damage Waiver","choose_protection":"Choose your protection option","choose_protection_desc":"Select how you'd like to handle potential damages during your stay","waiver_title":"Damage Waiver","waiver_popular":"Most Popular","waiver_one_time":"one-time fee","waiver_bullet_1":"Covers accidental damages up to set limit","waiver_bullet_2":"Non-refundable, no deposit needed","waiver_bullet_3":"Best for peace of mind during your stay","deposit_title":"Security Deposit","deposit_refundable":"fully refundable","deposit_bullet_1":"Held until {days, plural, =0 {checkout} one {# day after checkout} other {# days after checkout}}","deposit_bullet_2":"Charged if damage occurs","deposit_bullet_3":"For the extra-careful traveler","deposit_charge_bullet_1":"Charged now, refunded within {days, plural, =0 {checkout} one {# day after checkout} other {# days after checkout}}","deposit_charge_bullet_2":"Your bank may take 5-10 business days to show the refund","deposit_charge_bullet_3":"For the extra-careful traveler","deposit_consent":"By placing this deposit you agree that we may re-authorize this hold on the same card while your reservation is active and until {days, plural, =0 {checkout} one {# day after checkout} other {# days after checkout}}. The hold is released automatically if no damage is claimed.","deposit_consent_charge":"By placing this deposit you agree that your card will be charged now and the deposit refunded within {days, plural, =0 {checkout} one {# day after checkout} other {# days after checkout}} if no damage is claimed. Your bank may take 5-10 business days to show the refund.","deposit_consent_renewal_fallback":"If the hold can't be renewed during your stay, the deposit may be charged and refunded the same way.","view_terms":"View terms and conditions","help_notice":"Need help deciding? Feel free to contact us for any questions.","payment_prompt":"Please provide your credit card information to process the {type} for your reservation.","charge_notice_waiver":"You will be charged a non-refundable damage waiver of {amount}.","charge_notice_deposit":"A refundable hold of {amount} will be placed on your card.","processing":"Processing payment...","process_button":"Process Payment","process_button_amount":"Pay {amount}","price_cap":"Waiver price capped at {amount} per stay","wait_until":"Available to pay {date}","unavailable":"This option is not currently available.","decline_title":"Decline Coverage","decline_desc":"I accept responsibility for any accidental damages during my stay","decline_continue":"Continue without coverage","payment_error":"Payment failed. Please try again."},"mandatory_fee":{"title":"Required fees","description":"Required fee for your stay","amount_label":"Fee amount","subtitle":"Settle the mandatory fees below to continue with check-in.","required_note":"Required to check in","pay_cta":"Pay now","pay_cta_amount":"Pay {amount}","total":"Total","checking":"Checking payment status…"},"background_check":{"title":"Background Check","description":"A quick background screening is part of your check-in","consent_text":"As part of the check-in process, we conduct a background screening to ensure the safety of all guests. This includes a criminal records search and global watchlist check.","consent_agree":"I give my consent to run a background check with information provided. I authorize Authenticate.com to Obtain a Consumer Report (available here).","form_subtitle":"Please provide the following information for verification","first_name":"First Name","last_name":"Last Name","middle_name":"Middle Name","dob":"Date of Birth","email":"Email","phone":"Phone","address":"Street Address","city":"City","state":"State","zip_code":"Zip Code","ssn":"SSN (last 4 digits)","ssn_placeholder":"Last 4 digits","submit":"Submit for Verification","processing":"Running background check...","continue_verification":"Continue verification","result_clear":"Background check clear","result_flagged":"Background check requires review","criminal_record":"Criminal Record","watchlist":"Global Watchlist","clear":"Clear","flagged":"Flagged","error_title":"Background check failed","contact_support":"We could not complete your background check. Please contact support for help.","fields_required":"Please fill in all required fields before submitting.","try_again":"Try Again"},"authority_reporting":{"title":"Guest Registration","description":"Government-required guest registration","children_count_prompt":"How many of your {guestCount} guests are under 18?","children_label":"children","children_decrement":"Fewer children","children_increment":"More children","continue":"Continue","adult_label":"Adult","child_label":"Minor","guest_n_of_total":"Guest {n} of {total}","prev_guest":"Previous","next_guest":"Next","prefilled_from_id":"Prefilled from the ID you scanned. Please check every field before continuing.","first_name":"First Name","last_name":"Last Name","middle_name":"Second Last Name","nationality":"Nationality","residency":"Country of residence","date_of_birth":"Date of Birth","sex":"Sex","email":"Email","document_type":"Document Type","document_number":"Document Number","document_support_number":"Support Number","address":"Address","administrative_division":"Province (Spain)","municipality":"Municipality (Spain)","zip_code":"Postal Code","province":"Province","city_text":"City","kinship_label":"Relationship to the main guest","select_placeholder":"Select...","required":"This field is required","incomplete_guest":"Guest {n} is still missing some required details. Please complete this guest before reviewing.","save_and_next":"Save & Next Guest","save_and_review":"Save & Review All","review_subtitle":"Please review all guest information before submitting.","minor_label":"Minor","submit_registration":"Submit Registration","status_pending":"Registration Submitted","status_pending_desc":"Awaiting government confirmation. This may take a few minutes.","status_accepted":"Registration Accepted","status_accepted_desc":"Your guest registration has been confirmed by the authorities.","status_rejected":"Registration Rejected","status_rejected_desc":"Your registration was not accepted. Please contact the property manager.","submission_failed":"We could not submit your registration. Please try again or contact the property manager.","submission_not_configured":"This property isn't set up for guest registration yet. Please contact the property manager.","invalid_payload":"Some guest details are missing or invalid — please review each guest and try again.","document_types":{"PASSPORT":"Passport","NATIONAL_ID":"National ID (DNI)","FOREIGNER_RESIDENCY_PERMIT":"Foreign Residency Permit","SPANISH_RESIDENCE_PERMIT":"Spanish Residence Permit"},"sexes":{"MALE":"Male","FEMALE":"Female"},"kinship_options":{"HJ":"Child","HR":"Sibling","NI":"Grandchild","BN":"Great-Grandchild","SB":"Nephew/Niece","CD":"Brother/Sister-in-law","OT":"Other"},"main_guest":"Main guest","already_provided":"We already have these","already_provided_help":"You gave us these earlier in check-in. Change anything that isn't right.","nothing_missing":"We have everything we need for this guest.","same_address_as":"Use the same address as {name}","review_all_fields":"Review all details","edit_guest":"Edit {name}’s details"},"screen_and_protect":{"title":"Screen & Protect","description":"Security screening in progress"},"document_upload":{"title":"Document Upload","description":"Upload required documents","review_banner":"We'll review your document. We'll reach out if we need more information.","confirm":"Confirm","continue":"Continue","reviewing":"Reviewing your document…","slow_decision":"We're processing your verification. This may take a little longer than usual.","waiting":"Your files were securely received. This page will update automatically when verification is complete.","rate_limited":"Too many verification attempts. Please try again in {seconds, plural, one {# second} other {# seconds}}.","errors":{"bad_mime":"Accepts JPG, PNG, or PDF.","too_large":"File must be 10 MB or smaller.","upload_failed":"Upload failed. Please try again.","infra_error":"We had trouble reading your document. Please try again.","manual_review":"Your upload couldn't be verified. Our team will follow up.","verification_failed":"We couldn't verify your file. Please upload a different file and try again.","try_again":"Please upload another file.","unknown":"Something went wrong. Please try again."}},"suggestions":{"from_booking":"We filled in some details from your reservation. Check them and correct anything that's wrong.","from_id_check":"We filled in some details from your ID check. Check them and correct anything that's wrong.","removed_by_retention":"Some details were removed under the property's data-retention settings."},"draft":{"saved":"Draft saved","saving":"Saving…","failed":"We couldn't save your draft. Your answers are still here — please try again.","conflict_title":"This form changed somewhere else","conflict_body":"Your answers haven't been saved yet. Copy anything you want to keep, then reload to get the latest version.","conflict_reload":"Reload the form","discard_and_reload":"Discard your saved draft and reload","discard_confirm":"Your saved draft can't be used any more. Discard it and load the latest version? Anything on screen that you haven't copied will be lost.","leave_confirm":"You have answers you haven't saved. Leave without saving?","conflict_reset":"A member of staff reopened this form, so what you were working on no longer matches it.","conflict_party":"The list of guests on this reservation changed while you were filling this in.","conflict_newer":"Another tab or device saved a newer version of this form after you opened it.","conflict_completed":"This step is already finished, so there is nothing left to save a draft of.","conflict_expired":"Your saved draft has expired.","resumed":"These are the answers you saved but haven't submitted yet."},"id_check_changed":{"title":"Details changed after the ID check","body":"You changed some details after your ID was checked. That's fine — you don't need to do the check again."},"hub":{"count":"{done} of {total}","sheet_eyebrow":"Step {number} · of {total}","start":"Start this step","continue":"Continue this step","resume_hint":"Resume where you left off","not_started":"Not started","in_progress":"In progress","action_needed":"Action needed","minutes":"About {count, plural, one {# minute} other {# minutes}}","guide_eyebrow":"Unlocks when you're done","guide_title":"Your arrival guide","guide_body":"Door code and check-in instructions from your host.","guide_door_code":"Door code","guide_instructions":"Check-in instructions","guide_unlocked_eyebrow":"Unlocked","done_beat_title":"{step} — done","done_beat_next":"Opening {step}.","hero_begins":"Your stay begins {day}","hero_begins_today":"Your stay begins today","hero_in_stay":"Enjoy your stay","days_to_go":"{count, plural, one {# day to go} other {# days to go}}","subtitle":"{count, plural, one {One quick step} other {# quick steps}}, any order.","all_done":"All done","your_steps":"Your steps","count_done":"{done} of {total} done","hero_check_in_at":"Check-in {day} from {time}","guide_unlocked_title":"See check-in instructions","guide_body_locked":"Door code and check-in instructions. Unlocks when the required steps are done.","nights":"{count, plural, one {# night} other {# nights}}","guests":"{count, plural, one {# guest} other {# guests}}","your_stay":"Your stay","meta_check_in":"Check-in","meta_check_in_value":"From {time}","meta_days_to_go":"Days to go","message_host":"Message your host","finish_on_mobile":"Finish on mobile","finish_on_mobile_body":"Scan with your phone's camera to pick up exactly where you left off.","back_to_steps":"Back to steps","rail_hint":"Tap any step to jump to it. Your progress is saved.","up_next_summary":"Up next · Step {number} of {total}","retry":"Retry","next_step":"Next: {step}","add_details":"Add details","guest_you":"You","add_name_and_id":"Add name and ID","child":"Child","back_to_guests":"Back to guests","done_editing":"Done","guests_added":"{done} of {total} guests added"}},"check_out":{"title":"Check-out","subtitle":"We hope you enjoyed your stay. Please leave a quick review before you go.","cleaning_rating":"How was the cleanliness?","experience_rating":"How was your overall experience?","review_placeholder":"Tell us about your stay (optional)","confirm_button":"I have checked out","success_title":"Thank you!","success_message":"Safe travels. We hope to see you again soon.","star_label":"{count, plural, one {# star} other {# stars}}","review_cta_title":"Enjoyed your stay?","review_cta_message":"It would mean a lot if you shared your experience publicly.","review_cta_airbnb_message":"You'll be taken to Airbnb, where you can review your stay from the Trips section.","review_cta_button":"Leave us a review","review_cta_airbnb_button":"Review on Airbnb","rating_dialog_title":"How was your stay?","copy_review":"Copy review","star_cue_1":"Unacceptable","star_cue_2":"Serious problems","star_cue_3":"Significant problems","star_cue_4":"Many things need attention","star_cue_5":"Great stay","your_review_label":"Your review"},"upsells":{"subtitle":"Curated additions for a perfect visit.","empty":"No extras just yet","empty_body":"We're preparing extras for your stay — check back soon, or head back to your stay for now.","empty_cta":"Back to your stay","free":"Free","not_available":"Not Available","not_available_yet":"Not available yet","error_outside_booking_window":"This add-on isn't available to book right now.","error_payment_in_progress":"A payment for this add-on is already being processed.","error_amount_changed":"The price of this add-on changed while you were checking out. Please start the purchase again.","error_quantity_out_of_range":"The quantity available for this add-on changed while you were checking out. Please start the purchase again.","error_request_awaiting_approval":"You've already requested this add-on and it hasn't been confirmed yet. The property will be in touch — there's no need to request it again.","error_hold_still_live":"Your request for this add-on was declined, but the hold on your card hasn't been released yet. Please contact your host — requesting it again would place a second hold.","payments_unavailable":"Payments are temporarily unavailable. Please try again later or contact your host.","error_scheduling_required":"Please choose a date and time for this add-on before adding it to your stay.","error_scheduling_outside_stay":"That date and time is outside your stay. Please choose one between your check-in and your check-out.","error_option_selection_required":"Please choose an option for this add-on before adding it to your stay.","error_already_added":"You've already added this to your stay. To change it, please contact your host.","error_free_add_failed":"We couldn't add this to your stay. Please try again or contact your host.","no_longer_available":"No longer available","requestable_on":"Requestable on {date}","purchasable_on":"Purchasable on {date}","close_detail":"Close detail","premium_addon":"Premium Add-on","back_to_services":"Back to services","offer_unavailable_title":"This offer isn't available for your stay right now.","offer_unavailable_body":"It may have been removed, or it's outside its booking window. Take a look at what else is available.","your_property":"Your Property","about_service":"About This Service","flexible_timing":"Flexible Timing","flexible_timing_desc":"Book anytime during your stay","guaranteed":"Guaranteed","guaranteed_desc":"Confirmed instantly","whats_included":"What's Included","included_item_1":"Full service as described","included_item_2":"Available during your entire stay","included_item_3":"Instant confirmation & support","popular":"Popular","badge_picked_count":"{count, plural, one {# guest picked this recently} other {# guests picked this recently}}","badge_recent_pick":"Picked recently","status_on_request":"Request now","owned_added":"Added","owned_requested":"Requested","status_instant_confirmation":"Instant confirmation","urgency_bookable_countdown":"Ends in {hours}h {minutes}m","urgency_bookable_countdown_hours":"Ends in {hours}h","urgency_bookable_countdown_minutes":"Ends in {minutes}m","urgency_bookable_until":"Available until {datetime}","urgency_availability":"Available for your stay","risk_charged_only_if_approved":"Charged only if approved.","rate_limited":"You're browsing faster than we can keep up. Give it a moment and try again.","per_night_reframe":"≈ {perNight}/night × {nights, plural, one {# night} other {# nights}}","cta_keep_your_place":"Keep your place longer","cta_settle_in_early":"Settle in early","service_fee":"Service fee","select_and_pay":"Select and Pay","add_to_stay":"Add to Stay","select_an_option":"Select an option","secure_payment":"Secure payment · Powered by SuiteOp","request_submitted":"Request submitted! We'll be in touch shortly.","price_breakdown":"Price Breakdown","per_unit":"Per unit","per_night":"Per night","per_guest_per_night":"Per guest per night","per_night_capped_at":"{price} / night — capped at {cap}","per_guest_per_night_capped_at":"{price} / guest / night — capped at {cap}","fixed_price":"Fixed price","total":"Total","quantity":"Quantity","nights":"nights","guests":"guests","required":"Required","view_link":"Visit","purchase":"Purchase","request":"Request","request_not_guaranteed_note":"Charged only if approved. A {amount} authorization hold will be placed on your card for {itemName}.","request_not_guaranteed_note_no_amount":"Charged only if approved. An authorization hold will be placed on your card for {itemName}.","resume_title":"Pick up where you left off","resume_line_item":"{quantity} × {title} · {amount}","resume_finish":"Finish","resume_dismiss":"Dismiss","existing_charge_title":"Already on your stay","existing_charge_purchased":"You purchased {quantity} × {itemName} on {date}","existing_charge_requested":"You requested {quantity} × {itemName} on {date}","charge_stage_viewed":"Viewed","charge_stage_requested":"Requested","charge_stage_pending":"Pending","charge_stage_approved":"Approved","charge_stage_denied":"Denied","charge_stage_awaiting_payment":"Awaiting payment","charge_stage_payment_submitted":"Payment submitted","charge_stage_paid":"Paid","charge_stage_claimed":"Claimed","charge_stage_delivered":"Delivered","charge_stage_refunded":"Refunded","recommended":"Recommended","add":"Add","from_price":"From {price}","field_text_placeholder":"Type your answer","field_number_placeholder":"Enter a number","category_featured":"Featured","category_add_ons":"Add-ons","category_visits_and_tours":"Visits & Tours","category_experiences":"Experiences","category_upgrade_your_stay":"Upgrade Your Stay","category_services":"Services","category_shop_your_stay":"Shop Your Stay","category_partners":"Partners","category_other":"Other","postcard_recipient_title":"Mail this postcard to","postcard_name":"Recipient name","postcard_sender_title":"Your address","postcard_sender_help":"This will be printed as the sender address on the postcard.","postcard_sender_name":"Sender name","postcard_address_search":"Start typing an address","postcard_supported_countries":"Postcards can be sent only to addresses in the United States, Canada, the United Kingdom, or Australia.","postcard_line1":"Street address","postcard_line2":"Apartment, suite (optional)","postcard_city":"City","postcard_state":"State","postcard_zip":"ZIP code","postcard_message":"Wish you were here! We’re having the best time…","postcard_missing_fields_hint":"Choose an image and complete the recipient and sender addresses to send your postcard.","send_postcard":"Send Postcard","postcard_image_title":"Choose a picture","postcard_image_upload":"Your photo","postcard_image_uploading":"Uploading…","postcard_image_upload_failed":"We couldn't upload that photo. Try a JPG or PNG under 5 MB.","postcard_image_upload_rate_limited":"You've added a lot of photos in a short time. Please try again later.","postcard_error_recipient_required":"Add the recipient's name and full mailing address before sending.","postcard_error_sender_required":"Add your full sender address before sending.","postcard_error_image_required":"Choose a postcard image before continuing.","postcard_error_invalid_image":"We couldn't use that photo. Upload it again and retry.","postcard_error_image_missing":"That photo didn't finish uploading. Add it again to send your postcard.","postcard_error_invalid_country":"That country isn't one we can mail to. Pick one from the list.","postcard_error_claim_limit":"You've sent the most postcards we can include with this stay.","postcard_error_send_failed":"We couldn't send your postcard. Please try again.","postcard_send_timeout":"Your postcard is taking longer than usual to send.","postcard_send_unconfirmed":"We couldn't confirm whether your postcard went out.","postcard_claim_success":"Your postcard is on its way!","add_for_free":"Add for free","added_free_success":"Added to your stay!","scheduling_title":"Choose a date and time","scheduling_help":"Pick when during your stay you'd like this.","scheduling_missing_hint":"Choose a date and time to continue","permission_to_enter_optional":"I authorize entry to the unit to fulfill this request, whether I am present or not. I confirm that any pets will be safely crated or removed before the service.","permission_to_enter_required":"I authorize entry to the unit to fulfill this request, whether I am present or not, and understand it cannot be fulfilled otherwise. I confirm that any pets will be safely crated or removed before the service.","permission_to_enter_missing_hint":"Authorize entry to continue"},"guides":{"title":"Local Guides","empty":"No guides available for your stay","back_to_guides":"Back to guides","items_empty":"No recommendations in this guide yet","rating_count":"{count, plural, one {# review} other {# reviews}}","view_on_map":"View on Map","visit_website":"Visit Website","what_we_love":"What We Love","overview":"Overview","choose_your_guide":"Choose your guide","intro":"Our local team put together a list of local recs, must-sees, secret gems, and unique hole-in-the-walls. We hope you'll love those spots as much as we do!","locations":"{count} {count, plural, one {Location} other {Locations}}","back_to_home":"Back to home","view_list":"List","view_map":"Map","map_frame_title":"Map of local recommendations","reserve_a_table":"Reserve a table now","visit_site":"Visit site","hours_directions":"Hours & directions","address":"Address","reviews_count":"{count, plural, one {# review} other {# reviews}}","no_pins":"No locations on the map yet — operator hasn’t added coordinates.","item_not_found_title":"This recommendation isn’t available","item_not_found_body":"Your host may have removed it, or it isn’t part of your stay’s guide. Browse the guides to see what’s available."},"events":{"title":"Events","all_categories":"All","empty":"No events available for your stay","no_results":"No events match this category","free":"Free","close_detail":"Close detail","view_on_map":"View on Map","view_event":"View Event","categories":{"entertainment":"Entertainment","business":"Business","trips_and_adventures":"Trips & Adventures","food_and_drinks":"Food & Drinks","sports":"Sports","parties":"Parties","festivals":"Festivals","music":"Music"}},"reservations":{"title":"Your Reservations","empty":"No reservations found","empty_upcoming_title":"You have no upcoming stay","empty_upcoming_subtitle":"Start planning your next stay!","empty_completed_title":"You have no completed stay yet","empty_completed_subtitle":"Past stays will appear here.","empty_cancelled_title":"No cancelled stays","empty_cancelled_subtitle":"We'll list any cancelled reservations here.","find_reservation":"Find reservation","back_to_my_reservations":"Back to my reservations","sign_in":"Sign-in","unknown_property":"Unknown property","confirmation":"Confirmation","status_upcoming":"Upcoming","status_active":"Active","status_past":"Past","status_completed":"Completed","status_cancelled":"Cancelled"},"help":{"title":"Help & Support","subtitle":"Need assistance? Reach out to us through any of the channels below.","email":"Email","phone":"Phone","whatsapp":"WhatsApp","text":"Text Message","report_issue":"Report an Issue","report_issue_description":"Let us know if something needs attention","report_issue_button":"Submit Report","faq_title":"Frequently Asked Questions","faq_placeholder":"FAQ content coming soon","header_title":"Let us know how we can help","call_us":"Call us","text_us":"Text us","email_us":"Email us","open_a_ticket":"Open a ticket","open_a_ticket_description":"Raise a ticket to fix the issue","no_contact_options":"This host hasn't added contact details yet.","whatsapp_us":"WhatsApp us"},"checkout":{"title":"Complete Payment","processing":"Processing payment...","request_authorization_hold_notice":"You won't be charged yet. This is a request — we'll place a temporary hold of {amount} on your card and only charge it if your {itemName} request is approved. If it's declined, the hold is released.","success_title_for":"Payment submitted for {itemName}","success_title_request_for":"{itemName} requested","success_line_item":"{quantity} × {itemName} · {amount}","success_line_item_hold":"{quantity} × {itemName} · {amount} hold","success_next_step":"We'll confirm it shortly. You can find it under <link>Past purchases</link>.","success_next_step_request":"You'll only be charged if the host approves. Track it under <link>Past purchases</link>.","success_next_offer_label":"While you're here","success_done":"Done","error":"Payment failed. Please try again.","pay":"Pay Now","pay_button":"Pay {amount}","back":"Back","secure_notice":"Payments are processed securely via {provider}","close":"Close","error_init_payment_form":"Failed to initialize payment form","error_payment_failed":"Payment failed","error_load_payment_form":"Failed to load payment form","error_payment_error":"Payment error","error_extract_payment_id":"Unable to extract payment ID from client secret","qty_x_unit_total":"{qty} × {unit} = {total}"},"common":{"back":"Back","loading":"Loading...","error":"Something went wrong","retry":"Try again","powered_by":"Powered by SuiteOp","facebook":"Facebook","instagram":"Instagram","linkedin":"LinkedIn","close":"Close","menu":"Menu","contact_bubble_aria":"Contact your host","step_label":"Step {number}","error_amount_not_representable":"This amount cannot be charged in its currency. Please contact your host."},"chat":{"title":"Message your host","placeholder":"Type a message…","empty":"Send us a message about your stay.","send":"Send","send_error":"Couldn't send your message. Please try again.","unread":"Unread messages","subtitle":"We'll reply right here","attach_photo":"Attach file","remove_attachment":"Remove attachment","attachment_limit":"You can attach up to 10 files.","attachment_too_large":"File is too large (max 25MB).","attachment_type_unsupported":"That file type isn't supported.","attachment_upload_failed":"Couldn't upload your file. Please try again.","download_attachment":"Download attachment","today":"Today","yesterday":"Yesterday","sending":"Sending…","send_failed_retry":"Couldn't send. Tap to retry","rate_limited":"You're sending messages too quickly. Please wait a moment.","disabled":"Chat isn't available for this stay.","starters":{"wifi":"What's the WiFi password?","checkout":"What time is check-out?","parking":"Where can I park?","recommendations":"Any local recommendations?"},"home":{"greeting":"Hi {name} 👋","greeting_question":"How can we help?","send_title":"Send us a message","send_subtitle":"We usually reply in a few minutes","resume_title":"Back to your conversation","resume_subtitle":"Pick up where you left off","questions_label":"Common questions","other_ways_label":"Other ways to reach us","browse_help":"Browse help","browse_help_value":"Manuals & guides","back":"Back"},"receipt_delivered":"Delivered","receipt_read":"Read","translation_skipped":"This message wasn't translated, so it's shown as your host wrote it.","translation_content_unavailable":"The full message couldn't be loaded for translation, so it's shown as your host wrote it.","translation_too_long":"This message was too long to translate, so it's shown as your host wrote it.","show_original":"Show original","show_translation":"Show translation","reply":"Reply","edit":"Edit","edited":"edited","editing":"Editing message","replying_to":"Replying to {author}","cancel_action":"Cancel","save_edit":"Save changes","reply_you":"You","reply_unavailable":"Message unavailable","reply_attachment":"Attachment","edit_error":"Couldn't save the change. Please try again."},"ticket":{"title":"Open a ticket","contact_number":"Contact number","priority":"Priority","priority_low":"Low","priority_medium":"Medium","priority_high":"High","priority_urgent":"Urgent","issue_in_detail":"Issue in detail","issue_placeholder":"Type here...","attach_image":"Attach image","click_to_upload":"Click to upload a file","submit":"Submit a ticket","submitting":"Submitting…","success":"Ticket submitted","error":"Could not submit ticket","description_required":"Please describe the issue","uploading":"Uploading…","error_upload":"Could not upload image","error_too_many_images":"You can attach up to {max} images","error_image_too_large":"Image is too large (max 10MB)","error_image_type":"Only image files are allowed","error_image_not_owned":"That photo isn't one of your uploads. Please remove it and try again.","reply_placeholder":"Type a message…","send":"Send","send_error":"Couldn't send your message. Please try again.","empty_thread":"No messages yet","host_label":"Host","my_tickets":"My tickets","unread_reply":"New reply","ticket_label":"Support ticket","status_received":"Received","status_in_progress":"In progress","status_resolved":"Resolved","status_closed":"Closed","reported":"Reported {time}","your_report":"What you reported","photos":"Photos","updates":"Updates","no_updates":"No updates yet. We'll reply here."},"fees_banner":{"message":"{count, plural, one {You have # fee requiring review.} other {You have # fees requiring review.}}","cta":"View details"},"fees_due":{"blocking_title":"Payment required to check in","blocking_description":"Pay {amount} to unlock your access code and check-in details.","blocking_description_multi":"Settle your outstanding fees to unlock your access code and check-in details.","soft_title":"You have fees to pay","soft_description":"{amount} is due on your reservation.","soft_description_multi":"You have outstanding fees on your reservation.","pay_cta":"Pay now","view_cta":"View & pay"},"fees_and_charges":{"title":"Fees & payments","description":"Review requests and pay outstanding service fees on your reservation.","section_mandatory":"Mandatory Fees","section_optional":"Optional","section_requests":"Requests","requested_on":"Requested {date}","request_status_pending":"Pending","request_status_approved":"Approved","request_status_declined":"Declined","request_status_processing":"Processing","added_by_property_manager":"Added by property manager","badge_required":"Required","badge_paid":"Paid","pay_now":"Pay Now","total_label":"Total","empty_state":"No fees to display for this reservation.","view_past_purchases":"View past purchases","checkout_title":"Checkout","checkout_total_label":"Total to pay:","checkout_submit":"Authorize the charge","checkout_cancel":"Cancel","toast_payment_submitted":"Payment submitted — it will be confirmed shortly","error_pay_now_failed":"Could not start payment. Please try again.","error_confirm_failed":"Payment could not be confirmed. Contact support.","error_guestypay_unsupported":"This fee uses GuestyPay — please contact your host to settle it.","remove":"Remove","toast_charge_removed":"Charge removed","error_remove_failed":"Could not remove charge. Please try again.","section_pending_approval":"Pending approval","section_approved_held":"Approved — held on your card","badge_pending_approval":"Pending approval","pending_approval_note":"Already authorized on your card — you'll only be charged if the host approves.","pending_approval_no_hold_note":"The host still needs to approve this request — you haven't been charged.","requested_by_you":"Requested by you","badge_held":"Held"},"receipts":{"title":"Past Purchases","subtitle":"Purchases, requests, deposits and refunds for this stay.","back":"Back","empty_title":"No purchases yet","empty_subtitle":"Items you pay for during your stay will show up here.","view_receipt":"View receipt","refunded_label":"Refunded","net_label":"Net charge","total_label":"Net total","badge_refunded":"Refunded","badge_partial_refund":"Partial refund","badge_paid":"Paid","badge_claimed":"Claimed","badge_delivered":"Delivered","badge_disputed":"Disputed","badge_reversed":"Reversed","badge_failed":"Failed","label_damage_waiver":"Damage Waiver","label_security_deposit":"Security Deposit","section_deposits":"Deposits & holds","section_purchases":"Purchases & requests","section_fees":"Property fees","item_security_deposit":"Security deposit","item_damage_waiver":"Damage waiver","held_until":"Held until {date}","badge_denied":"Denied","badge_pending_approval":"Pending approval","badge_awaiting_payment":"Awaiting payment","badge_payment_submitted":"Payment submitted","badge_requested":"Requested","badge_held":"Held","badge_released":"Released","badge_captured":"Captured","badge_processing":"Processing"},"check_out_instructions":{"title":"Check-out instructions","subtitle":"Everything you need before you head out.","empty":"Your host hasn't added check-out instructions yet.","locked_title":"Check-out details coming soon","locked_description":"Your check-out instructions will be available on {date} at {time}.","locked_precheck_title":"Complete pre-check-in first","locked_precheck_description":"Your check-out instructions will be available once you finish pre-check-in.","locked_fee_title":"Payment required","locked_fee_description":"Your check-out instructions will be available once your outstanding fees are paid.","locked_declined_description":"Your verification wasn't approved, so your check-out instructions are unavailable for now. Please contact your host for next steps.","locked_review_description":"We're reviewing the information you submitted — your check-out instructions will appear here once the review is complete. If you have any questions, message your host.","stay_ended_description":"Thanks for staying with us! Your check-out instructions are no longer available."},"companion_invite":{"title":"Join the stay","description":"Add your details so your host knows who's staying.","pick_spot":"Which guest are you?","spot_has_id":"ID on file","full":"Every guest spot is taken. Ask the main guest to make room for you.","submit":"Add me to the stay","submit_failed":"We couldn't add you. Please try again.","done_title":"You're on the list","done_description":"Thanks, {name}! Your details were added to the stay.","invalid_title":"This link isn't working","invalid_description":"It may have expired, or the stay has ended. Ask the main guest for a new link.","join_title":"Join {name}'s stay","someone_else":"Someone else","someone_else_hint":"Add me as a new guest","spots_taken":"All spots are taken. Ask {name} to add you."}},"impersonation":{"viewing_as":"Viewing as {name} — impersonated by {impersonator}.","exit":"Exit impersonation"},"inbox":{"title":"Inbox","filters":{"tab":{"all":"All","todo":"To do","waiting_on_guest":"Waiting","follow_up":"Follow up","done":"Done","archived":"Archived"},"unread_only":"Unread only","no_reservation":"No reservation","no_assignee":"Nobody assigned","hide_waiting_on_guest":"Hide \"Waiting on guest\"","hide_notifications":"Hide notifications","hide_notifications_tooltip":"Hides threads where every message came from an automation. One reply brings a thread back. Connectors that don't flag automated messages are unaffected.","search_placeholder":"Search by guest or confirmation...","channel_all":"All channels","group":{"email":"Email","sms":"SMS","whatsapp":"WhatsApp","airbnb":"Airbnb","booking_com":"Booking.com","vrbo":"Vrbo","web":"Portal","internal":"Team"},"clear":"Clear filters","menu":"Filter","scope":{"all":"All","mine":"My inbox","unknown":"Unknown","escalations":"Escalations"},"group_label":{"listing_group":"Listing group","booking_channel":"Channel","source":"Source","reservation_status":"Reservation status","check_in_date":"Check-in date","check_out_date":"Check-out date","label":"Label"},"check_in_state":{"checked_in":"Checked in","checked_out":"Checked out"},"see_all_channels":"See all ({count} more)","connect_channel":"Set up","no_channel_traffic":"No messages yet","chip":{"listing_groups":"{count} listing groups","channels":"{count} channels","sources":"{count} sources","unknown_source":"Unavailable source","statuses":"{count} statuses","remove":"Remove {label}","unknown_listing_group":"Unavailable listing group","labels":"{count} labels","unknown_label":"Label unavailable"},"no_listing_groups":"No listing groups yet","no_sources":"No connected sources yet","label_all":"All labels","label_section":"Labels","search_placeholder_internal":"Search by member..."},"rail":{"label":"Inboxes","all":"All inboxes","mine":"My inbox","escalations":"Escalations","agent_help":"Agent needs your help","drafts":"Drafts","delayed":"Delayed reply","unassigned":"Unassigned","archived":"Archived"},"conversation":{"no_selection":"Select a conversation to view messages","no_conversations":"No conversations yet","new_conversation":"New conversation","assign":"Assign","unassign":"Unassign","status":"Status","reservation_details":"Reservation details","view_reservation":"View reservation","unknown_guest":"Unknown guest","contact_threads":"{count, plural, one {# thread} other {# threads}}","no_messages":"No messages yet","back":"Back","attachment_preview":"Attachment","awaiting_guest_reply":"Waiting for the guest to reply","awaiting_first_response":"Waiting for first response","draft_prefix":"Draft:","booked_on":"Booked on {source}","no_matches":"No conversations match your filters","selected_hidden":"This conversation is hidden by your filters","no_unknown_contacts":"No messages from unknown senders","no_unassigned":"Nothing waiting to be filed","no_unassigned_hint":"Threads with no inbox yet — the ones we could not match to a stay, and any an operator parked here.","no_delayed":"Every thread is inside its reply target","no_delayed_hint":"Threads appear here when a guest has waited longer than their inbox allows.","no_todo":"You're all caught up","no_todo_hint":"Nothing is waiting for a reply. New guest messages appear here.","stay_tabs":{"label":"Stays by this guest","untitled_stay":"Stay","thread_stay":"This conversation's stay","open_thread":"Open its conversation","nights":"{count, plural, one {# night} other {# nights}}"},"merge_contacts":{"title":"Merge contacts","subtitle":"Two records, one person · this cannot be undone","open":"Merge with another contact…","search_placeholder":"Search by name, email or phone","likely_same":"Likely the same person","results":"Results","loading":"Loading…","no_candidates":"No possible duplicates found.","unnamed":"Unnamed contact","compare":"Compare","stay_count":"{count, plural, one {# stay} other {# stays}}","suggestions_note":"Suggestions only — an exact email or the same provider guest id already merges automatically during sync, so anything listed here is deliberately a judgement call.","which_survives":"Which record survives","keeps_everything":"Keeps everything","will_be_deleted":"Will be deleted","disagree":"Where they disagree — pick what to keep","disagree_note":"Only differing fields are listed. The deleted record's values are gone after this — anything not picked here is not kept anywhere.","what_moves":"What moves onto the surviving contact","warning":"This cannot be undone. The deleted contact's row is removed once everything is moved. Reservations and conversations keep their history — they simply point at the surviving contact.","cancel":"Cancel","confirm":"Merge into {name}","merged":"Contacts merged","reason":{"same_phone":"same phone","similar_name":"similar name","search":"search result"},"field":{"firstName":"First name","lastName":"Last name","email":"Email","phone":"Phone"},"moves":{"reservations":"Reservations","conversations":"Conversations","identities":"Provider identities","authorizedUsers":"Authorised users","activityLogs":"Activity log entries"}},"open_row_aria":"Open conversation with {name}","open_tasks_aria":"{count, plural, one {# open task on this stay} other {# open tasks on this stay}}","seen":"Seen","no_team_chats":"No team chats yet","no_team_chats_hint":"Start one with New chat. Team messages stay inside SuiteOp — a guest never sees them."},"compose":{"character_count":"{count, number} of {max, number} characters","truncated_to_limit":"That text was trimmed to {max, number} characters — the rest wasn't kept.","translation_too_long":"The translation came back longer than {max, number} characters, so your draft was left as you wrote it.","draft_channel_gone":"This draft was written for {channel}, which this thread no longer offers — it will go out on {now} unless you pick another channel.","placeholder":"Type a message...","read_only":"You can read this conversation, but not reply to it.","send":"Send","channel_select":"Channel","sends_via":"Via {provider}","channels_in_thread":"Used in this thread","channels_available":"Also available","attach_file":"Attach file","templates":"Templates","no_templates":"No templates","remove_attachment":"Remove attachment","download_attachment":"Download attachment","attachment_too_large":"File is too large (max 25 MB)","attachment_type_unsupported":"That file type isn't supported","attachment_upload_failed":"Couldn't upload the file. Please try again.","replying_to":"Replying to {author}","editing":"Editing message","cancel_action":"Cancel","save_edit":"Save changes","edit_failed":"Couldn't save the change. Please try again.","push_blocked":{"org_muted":"Outbound communications are paused for this account, so nothing was sent. Contact SuiteOp support to resume them.","disabled":"Sending messages to {provider} is turned off, so messages on this channel won't reach the guest.","unsupported":"{provider} doesn't support sending messages from SuiteOp, so messages on this channel won't reach the guest.","no_pms":"This conversation isn't linked to a connected PMS, so messages on this channel won't be delivered.","open_settings":"Turn it on in the integration settings","disconnected":"The {provider} connection isn't active, so messages on this channel won't reach the guest.","open_integration":"Check the integration","attachments_only":"Attachments can't be delivered on this channel — send them on the portal chat."},"typing_one":"{name} is typing…","typing_many":"{count} people are typing…"},"status":{"todo":"To do","waiting_on_guest":"Waiting on guest","follow_up":"Follow up","done":"Done","archived":"Archived"},"stay":{"past":"Past","checking_out":"Checking out","current":"Current","checking_in":"Checking in","upcoming":"Upcoming","future":"Future","canceled":"Canceled","inquiry":"Inquiry"},"delivery":{"delivered":"Delivered","failed":"Failed to send","failed_no_reason":"Failed to send — no reason was reported","not_sent_yet":"Not sent yet","pending":"Sending...","retry":"Retry","sent":"Sent","skipped":"Not delivered","skipped_account":"Not delivered — the PMS connection wasn't active","skipped_attachments":"Not delivered — attachments can't be sent to the PMS","skipped_no_pms":"Not delivered — no PMS linked to this reservation","skipped_push_disabled":"Not delivered — sending to the PMS is turned off","skipped_unsupported":"Not delivered — the PMS can't receive messages"},"channel":{"email":"Email","sms":"SMS","whatsapp":"WhatsApp","airbnb":"Airbnb","web":"Portal","email_pms":"Email (PMS)","sms_pms":"SMS (PMS)","whatsapp_pms":"WhatsApp (PMS)","booking_com_pms":"Booking.com (PMS)","vrbo_pms":"Vrbo (PMS)"},"error":{"conversation_gone":"This conversation is no longer available.","load_failed":"Failed to load. Please try again."},"time":{"just_now":"Just now","today":"Today","yesterday":"Yesterday"},"snooze":{"title":"Snooze until","in_1_hour":"1 hour","in_3_hours":"3 hours","tomorrow_9am":"Tomorrow 9 AM","next_week":"Next week","custom":"Pick date & time","apply":"Apply","scheduled":"Snoozed until"},"ai":{"suggest":"Suggest reply","failed":"Couldn't generate a suggestion","menu":"AI assistant","analyze_now":"Analyse the conversation"},"actions":{"trigger_follow_up":"Resurface now","reply":"Reply","edit":"Edit","menu":"Message actions"},"list":{"loading_more":"Loading more…","ungrouped":"No property group","group_unavailable":"Other group","folder_aria":"{name}, {count, plural, one {# conversation} other {# conversations}}, {unread, plural, =0 {none unread} other {# unread}}","overdue":"Waiting for a reply","overdue_since":"Waiting since {since}","agent_needs_help":"{name} needs your help","agent_help_dismiss_aria":"Mark as handled"},"translate":{"toggle":"Translate","translated_from":"Translated from {language}","show_original":"Show original","show_translation":"Show translation","draft":"Translate draft","failed":"Couldn't translate. Please try again.","too_long":"Too long to translate — showing the original","content_unavailable":"Not translated — the full message couldn't be loaded","skipped":"Not translated","no_translation":"That draft is already in your language","original":"Original","read_thread_in":"Read this thread in","draft_to":"Translate draft to {language}","to_guest":"Guest's language ({language})"},"needs_help":{"badge":"Needs help","banner":"Someone is stuck on this thread","raise":"Needs help","resolve":"Resolved","reason_label":"What are you stuck on?","reason_placeholder":"Optional — what does this need?","cancel":"Cancel","confirm":"Escalate"},"notes":{"title":"Internal notes","not_visible":"— not visible to the guest","empty":"No internal notes yet","placeholder":"Add a note for your team…","add":"Add note","save":"Save","edit":"Edit note","delete":"Delete note","edited":"edited","removed_author":"Removed user","delete_confirm_title":"Delete this note?","delete_confirm_body":"The note is removed for everyone on your team. This cannot be undone."},"message":{"edited":"edited","notification":"Notification"},"reply":{"unavailable":"Message unavailable","from_team":"Team","from_guest":"Guest","attachment":"Attachment"},"events":{"not_visible":"Only your team can see this","someone":"Someone","assigned":"{actor} assigned {target}","assigned_self":"{actor} took this conversation","unassigned":"{actor} unassigned {target}","unassigned_self":"{actor} left this conversation","status_changed":"{actor} moved this to {status}","status_changed_system":"Moved to {status}","inbox_changed":"{actor} moved this to {inbox}","inbox_changed_unassigned":"{actor} moved this back to Unassigned","needs_help_raised":"{actor} flagged this as needing help","needs_help_raised_with_reason":"{actor} flagged this as needing help: {reason}","needs_help_raised_system":"Opal flagged this as needing help: {reason}","needs_help_resolved":"{actor} cleared the needs-help flag","task_created_with_title":"{actor} created task “{title}” from the AI recap","task_filed_by_agent_with_title":"{agent} filed task “{title}” from its recap","task_filed_by_agent":"{agent} filed a task from its recap","the_agent":"The inbox agent","task_created":"{actor} created a task from the AI recap","verification_reset":"{actor} reset a verification step from the AI recap: {reason}","verification_reset_plain":"{actor} reset a verification step from the AI recap","checked_in":"{actor} completed check-in from the AI recap: {reason}","checked_in_plain":"{actor} completed check-in from the AI recap","task_assigned":"{actor} assigned task “{title}” to {target}","task_assigned_untitled":"{actor} assigned a task to {target}","task_started":"{actor} started task “{title}”","task_started_untitled":"{actor} started a task","task_completed":"{actor} completed task “{title}”","task_completed_untitled":"{actor} completed a task","task_cancelled":"{actor} cancelled task “{title}”","task_cancelled_untitled":"{actor} cancelled a task","task_verified":"Photo check passed on task “{title}”","task_verified_untitled":"Photo check passed on a task","task_flagged":"Photo check flagged task “{title}”","task_flagged_untitled":"Photo check flagged a task","note_source":{"proposal":"Why — from the AI recap that proposed it","model":"Why — as the AI recap read the thread"},"load_failed":"The team-only history couldn't be loaded.","assigned_system":"Auto-assigned to {target}"},"sound":{"mute":"Mute new-message sounds","unmute":"Unmute new-message sounds"},"inboxes":{"move":"Move to…","names":{"guests":"Guest Inbox","owners":"Owner Inbox","vendors":"Vendor Inbox","internal":"Team Inbox"}},"analysis":{"title":"AI recap","analyze":"Analyse","reanalyze":"Re-analyse","reanalyze_no_new":"No new messages since the last analysis","empty":"No recap yet. Analyse to summarise this conversation and suggest next steps.","stale":"New messages since","failed":"Couldn't analyse this conversation","load_failed":"The recaps couldn't be loaded.","generated_at":"Updated {time}","outstanding":"Still open","outstanding_before_reply":"Still open before the reply","read_before_reply":"{name} has replied since — this read is from before that reply","read_before_reply_person":"A reply has gone out since — this read is from before that reply","use_reply":"Use suggested reply","create_task":"Create task","state":{"queued":"Waiting for the guest to finish…","running":"Reading the conversation…","queued_until":"Waiting for the guest to finish — reads {when}"},"reason":{"nothing_to_analyze":"Nothing to analyse yet — the guest hasn't written anything to summarise.","model_unavailable":"The AI service didn't answer. Try again in a moment.","model_malformed":"The AI returned an unusable answer. Try again.","messages_unavailable":"Some messages couldn't be loaded, so nothing was analysed.","interrupted":"The analysis stopped before it finished. Try again."},"urgency":{"low":"Low","normal":"Normal","high":"High","emergency":"Emergency"},"intent":{"maintenance":"Maintenance","access":"Access","booking":"Booking","billing":"Billing","question":"Question","complaint":"Complaint","other":"Other"},"sentiment":{"positive":"Positive","neutral":"Neutral","negative":"Negative"},"retry":"Retry analysis","expand":"Expand","collapse":"Collapse","history_show":"Show earlier analyses ({count})","history_hide":"Hide earlier analyses","prior_filed":"Already filed from earlier recaps","working_hint":"Reading the conversation with its reservation and property context…","confidence":"Confidence {value}","why":"Why this read","tab":{"recap":"Recap","reasoning":"Reasoning","reply":"Reply","task":"Task","feedback":"Feedback","actions":"Actions"},"feedback":{"prompt":"Was this recap useful? Your notes train future analyses — they never change this one.","helpful":"Helpful","not_helpful":"Not helpful","placeholder":"What did it get wrong, or right?","saved":"Feedback saved","failed":"Couldn't save your feedback","saved_at":"Saved {time}","short_prompt":"Was this useful?"},"translate":"Translate recap","translate_failed":"Couldn't translate the recap","action_record_failed":"Couldn't record that action — the recap may still offer it.","save_template":"Save as template","template_saved":"Template saved","template_title":"Template name","template_body":"Template text","actions":{"apply":"Apply","flag":"Flag","draft_it":"Draft it","set_status":"Set status to {status}","snooze_until":"Snooze until {time}","snooze_elapsed":"This time has already passed — re-run the recap for a fresh suggestion.","escalate":"Ask for help on this thread","assign_to":"Assign to {name}","send_portal_link":"Send the guest their portal link","portal_draft":"You can find everything for your stay here: {url}","skill_swap_backup_code":"Swap to a backup code on {device}","skill_reinstall_device_codes":"Re-push codes to {device}","done":"Done","reset_step":"Reset {step}","check_in":"Mark the stay checked in"},"task_created":"Task created","about":"About this read","offers":"Suggested next steps","sources":"Sources read","sources_count":"{count, plural, one {# record} other {# records}}","count_tasks":"Tasks: {count}","count_tasks_remaining":"Tasks: {remaining} of {total}","count_actions":"Actions: {count}","count_actions_remaining":"Actions: {remaining} of {total}","apply_all":"Apply selected","apply_all_done":"Done: {names}.","apply_all_partial":"Carried out: {applied}. Still waiting: {remaining}.","apply_all_pending_only":"Still waiting: {remaining}.","apply_all_failed":"Carried out: {applied}. Could not be carried out: {failed}.","apply_all_failed_only":"Could not be carried out: {failed}.","prior_filed_short":"already filed","confidence_label":"Confidence","unsure_title":"Opal needs your help","cannot_act_title":"Opal cannot do this on its own","unsure_no_reason":"This run recorded no reasoning.","unsure_open":"What I couldn't settle","skill_help_title":"{name} checked and needs you","skill_checked":"What {name} checked","skill_needs":"What {name} needs from you","skill_resolved":"Checked {skill}","skill_label_calendar":"the calendar","skill_label_inquiry":"the listing","skill_label_payments":"the charges","skill_label_access":"the door codes","skill_label_luggage":"the luggage options","skill_label_check_in_instructions":"the check-in steps","skill_label_checkout_departure":"the checkout rules","skill_label_wifi":"the wifi details","skill_label_parking":"the parking rules","skill_label_climate":"the heating and cooling","skill_label_local_recommendations":"the neighbourhood notes","skill_label_item_request":"the inventory","skill_label_pet_policy":"the pet rules","skill_label_stay_extension":"the extra nights","skill_label_date_change":"the new dates","skill_label_cancellation_refund":"the cancellation terms","skill_label_stay_quote":"the quote","skill_label_dirty_arrival":"the turnover","skill_label_maintenance":"the fault","skill_label_lost_and_found":"the lost item","skill_label_gas_odor":"the gas report","skill_label_bot_accusation":"the thread","skill_label_guest_feedback":"the feedback","skill_label_unknown_question":"the listing facts","draft_waiting":"Draft waiting for you","draft_in_composer":"The draft is in the composer.","draft_unused":"Draft not used — the reply was written without it.","draft_stranded":"Draft no longer offered — the thread moved on before anyone used it.","below_bar":"below the bar at {bar}","show_in_thread":"Show in thread","what_changed":"What changed","reset_confirm_description":"Reset the step so the guest can do it again. If this reservation is declined or needs review, that decision stays as it is unless you reopen the verification.","reset_keep_decision":"Keep the decision","check_in_review_description":"This stay needs a deliberate decision before check-in, and checking the guest in stops automatic access revocation for it. Continue?","check_in_failed":"Couldn't mark the stay checked in","task_needs_department":"{title} — waiting on a department","task_needs_property":"{title} — waiting on a property","task_needs_choice":"{title} — waiting on your choice","task_duplicate_outcome":"{title} — already open","task_reused_outcome":"{title} — linked to the existing task","task_reuse_title":"Similar work is already open","task_reuse_description":"“{title}” looks like work already open on this property. Point the recap at one of them, or file it as separate work.","task_reuse_create":"File as separate work","task_reuse_existing":"Use this one"},"new_conversation":{"subtitle":"Reservation {code} · no messages yet","empty":"No messages yet. The first one you send starts the conversation.","placeholder":"Write the first message…","send":"Send","unavailable":"This reservation isn't available.","not_permitted":"You don't have permission to start conversations."},"views":{"save":"Save view","saved":"View saved","save_failed":"View couldn't be saved. Please try again.","new_label":"Save current filters as","name_placeholder":"View name","save_as_new":"Save as new view","update_short":"Save","discard":"Discard","delete_named":"Delete \"{title}\"","saved_here":"Saved views"},"labels":{"applied_by_ai":"Applied by AI — remove it and it will not come back on its own","manage":"Edit labels","manage_taxonomy":"Manage labels","empty":"No labels defined yet. Create them in Settings.","load_failed":"Couldn't load labels.","settings":{"title":"Inbox labels","description":"Topic pills for conversations. The AI applies them as guest messages arrive; anyone can add or remove them on a thread.","new_label":"New label","ai_hint":"The description tells the AI when a label applies — write it as the rule you would give a teammate.","created":"Label created","updated":"Label updated","deleted":"Label deleted","duplicate_name":"A label with this name already exists","load_failed":"Couldn't load your labels.","empty":"No labels yet. Start from a suggestion or create your own.","suggestions":"Quick add:","add_all":"Add all","all_created":"{count, plural, one {# label added} other {# labels added}}","name":"Name","description_label":"When it applies","description_placeholder":"e.g. Guest asks to arrive before the listed check-in time","color":"Color","escalates":"Escalate when applied","escalates_hint":"Raises the conversation for help and hands it to the inbox's escalation manager. For the ones nobody should have to notice twice — a safety issue, a lock-out.","escalates_badge":"Escalates","create_title":"New label","edit_title":"Edit label","editor_description":"Shown as a pill on conversations and offered to the AI classifier.","delete_title":"Delete this label?","delete_description":"\"{name}\" comes off every conversation and the AI stops applying it. This cannot be undone.","starter":{"emergency":{"name":"Emergency","description":"Safety issue, lock-out, flooding, no heat or water"},"early_check_in":{"name":"Early check-in request","description":"Guest asks to arrive before the listed check-in time"},"late_check_out":{"name":"Late check-out request","description":"Guest asks to leave after the listed check-out time"},"payment_issue":{"name":"Payment issue","description":"Charges, refunds, deposits or billing questions"},"high_revenue":{"name":"High-revenue guest","description":"Long stay or high booking value — handle with extra care"},"maintenance_issue":{"name":"Maintenance issue","description":"Something in the unit is broken or not working: appliance, plumbing, heating, AC, Wi-Fi"},"cleaning_issue":{"name":"Cleaning issue","description":"Unit not clean on arrival, missing linens or towels, housekeeping complaint"},"access_issue":{"name":"Access issue","description":"Guest cannot get in: door code, lockbox, keys, gate or parking access"},"lost_and_found":{"name":"Lost & found","description":"Guest left something behind or asks about a forgotten item"},"guest_complaint":{"name":"Guest complaint","description":"Guest is unhappy with the stay: noise, neighbours, service or expectations not met"},"booking_change":{"name":"Booking change","description":"Extend or shorten the stay, move dates, add guests or cancel"},"stay_question":{"name":"Question about the stay","description":"How things work, amenities, parking, directions or local recommendations"},"damage_report":{"name":"Damage report","description":"Damage to the unit reported by or caused by the guest — a deposit claim may follow"}}},"applied_by_member":"Added by someone on the team."},"marks":{"agent":{"title_queued":"{name} reads this {when}","title_soon":"{name} reads this shortly","title_running":"{name} is reading this now","meaning_queued":"{name} waits for the guest to finish writing, then reads the thread and drafts a reply. Every new guest message restarts the wait.","meaning_running":"{name} is reading the conversation and drafting a reply. This usually takes under a minute.","expected_at":"Expected at {time}","chip_running":"Reading…","chip_soon":"soon"},"language":{"title":"Guest writes in {language}","meaning":"Detected from the guest's own messages, so the thread can go to someone who reads it. It is not their account language."},"contact_threads":{"title":"{count, plural, one {# thread with this contact} other {# threads with this contact}}","meaning":"Counted across your whole inbox, including threads your current filters hide. Open the thread to reach the others."},"label":{"meaning":"A topic from your organisation's own list.","action":"Only this label"},"status":{"meaning":{"todo":"Nobody has picked this up yet.","waiting_on_guest":"The guest has been answered — the thread is waiting on them, not on the team.","follow_up":"Left to come back to. The guest is not waiting on a reply right now.","done":"Handled. Nothing further is expected on this thread.","archived":"Filed away. Still searchable, but out of the working list."},"action":"Only this status"},"stay":{"title":{"checking_in":"Arriving today","current":"Mid-stay","checking_out":"Leaving today","upcoming":"Arriving soon","future":"Booked further out","past":"Stay finished","inquiry":"Enquiry, not booked","canceled":"Reservation canceled"},"meaning":{"checking_in":"Today is this guest's check-in day.","current":"Today falls between this guest's check-in and check-out dates, and is neither the arrival nor the departure day.","checking_out":"Today is this guest's check-out day.","upcoming":"The guest arrives within the next {days} days.","future":"The guest arrives more than {days} days from now.","past":"This stay's check-out date has passed.","inquiry":"Nobody booked this. The dates are the ones the guest asked about, not a reservation.","canceled":"The reservation was canceled, so this stay will not happen — whatever its dates say."},"timezone":"Dates and state worked out in {timezone}, the property's own calendar — not yours.","action":"Only these stays"}},"usage":{"tokens":"tokens","input":"Input","cache_write":"Cache Write","cache_read":"Cache Read","output":"Output","total":"Total","aria_cost_breakdown":"Token cost breakdown"},"panel":{"tab_pulse":"Pulse","pulse_title":"Opal read this thread","verification_title":"Verification","verification_done":"Done","verification_not_done":"Not done","verification_no_steps":"This stay asks the guest for no verification steps.","load_failed_pending":"Loading…","tab_reservation":"Stay","tab_guests":"Guests","tab_notes":"Notes","tab_tasks":"Tasks","no_reservation":"This conversation isn't linked to a stay.","no_permission":"You don't have access to this.","no_tasks":"No tasks for this guest.","guest_needs_reservation":"Contact details come from the linked stay.","value_none":"—","copy":"Copy","copied":"Copied","toggle_details":"Details","field_labels":"Labels","field_history":"History","story_title":"How it went","story_summary":"{reads, plural, one {# read} other {# reads}} · {tasks, plural, =0 {no tasks} one {# task} other {# tasks}}","story_read":"Read {n} of {total}","story_outstanding":"{count, plural, one {# thing still open} other {# things still open}}","story_step":{"filed":"Filed","assigned":"Assigned","started":"Started","completed":"Completed","cancelled":"Cancelled","verified":"Verified","flagged":"Flagged","pending":"Not yet"},"story_checkin":"Check-in","story_checkin_progress":"{done} of {total} done","story_checkin_waived":"Waived by {who} · {time}","story_checkin_status":{"not_started":"Not started","pending":"Pending","in_progress":"In progress","completed":"Completed","failed":"Failed","blocked":"Blocked","waived":"Waived","skipped":"Skipped"},"story_expand":"Show the full recap","story_collapse":"Hide the full recap","field_assignees":"Assignees","load_failed":"Couldn't load this tab.","tasks_withheld":"{count, plural, one {# more task not shown} other {# more tasks not shown}}"},"routing":{"settings":{"escalation_rules_add":"Add rule","escalation_rules_description":"When an escalated conversation carries one of these labels, it goes to that rule's target instead of the target above — whoever escalated it, and whether or not the label escalates on its own. Order matters only when a conversation carries two labels with rules; then the first rule in this list decides.","escalation_rules_label_placeholder":"Pick a label","escalation_rules_move_down":"Move rule down","escalation_rules_move_up":"Move rule up","escalation_rules_no_labels":"No labels yet. Create one in Inbox labels, then it can be routed here.","escalation_rules_remove":"Remove rule","escalation_rules_target_placeholder":"Pick a person or department","escalation_rules_title":"By label","escalation_target_department_hint":"Whoever manages this department","tab_assignment":"Assignment","tab_escalation":"Escalation","tab_first_reply":"First reply","tab_people":"People","title":"Inbox routing","description":"Give an arriving conversation an owner automatically, instead of leaving it for whoever looks first.","load_failed":"Couldn't load your inboxes.","save_failed":"Couldn't save your changes.","saved":"Routing settings saved","auto_assign_label":"Auto-assign new conversations","auto_assign_description":"Pick an owner when someone writes in on an unassigned conversation.","no_operators_warning":"Auto-assign is on, but nobody is set as an operator for this inbox — conversations will stay unassigned until you pick a department or some people below.","operators_title":"Operators","operators_description":"Only these people receive auto-assigned conversations. Pick a department to include everyone in it — now and as people join — or name individuals, or both.","departments_label":"Departments","departments_placeholder":"Add a department","departments_empty":"No departments yet.","people_label":"People","people_placeholder":"Add a person","people_empty":"Nobody on your team can open the inbox yet.","escalation_manager_label":"Escalations go to","escalation_manager_placeholder":"The routing departments' manager","escalation_manager_hint":"An escalated conversation goes here as well as to whoever already has it. Pick a person, or a department to use whoever manages it. Leave empty to use the manager of the departments above.","rules_title":"How the pick is made","rules_description":"Rules run in order, top first. The first one that separates two operators decides. Turn a rule off to leave it out.","move_up":"Move {rule} up","move_down":"Move {rule} down","rule":{"group_affinity":{"label":"Knows the property group","hint":"Prefer someone already handling a conversation in the same property group."},"least_loaded":{"label":"Fewest open conversations","hint":"Spread the load — prefer whoever is carrying the least."},"round_robin":{"label":"Longest without one","hint":"Take turns — prefer whoever has gone longest since their last conversation."}},"max_open_label":"Open conversations per human agent","max_open_placeholder":"No limit","max_open_hint":"Once someone holds this many open conversations, new ones go to somebody else. If everyone is at their limit, a conversation stays unassigned until someone picks it up; with a first-reply target set, inbox managers are alerted when it goes unanswered. Leave empty for no limit.","response_target_label":"First-reply target (minutes)","response_target_placeholder":"No target","response_target_hint":"A thread nobody has answered within this many minutes is flagged for attention in the list. Leave empty to set no target.","department_people":"{count, plural, =0 {no people yet} one {# person} other {# people}}","disabled_hint":"Arriving conversations stay unassigned until you turn this on.","bench_size":"Up to {count, plural, one {# person} other {# people}} can be picked.","limits_title":"Limits","limits_description":"Optional. Leave blank to set no limit.","rules_unused":"Not used","rules_tiebreak_hint":"The first rule that separates two operators decides.","mode_simple":"Simple","mode_advanced":"Advanced","mode_simple_hint":"Defaults handle the order and limits.","mode_advanced_hint":"Order the rules and set limits yourself.","who_answers_title":"Who answers","who_answers_description":"Pick a department to include everyone in it — now and as people join — or name individuals, or both. Open a department to leave someone out.","share_title":"How work is shared","share_description":"One rule decides who gets the next conversation.","share_advanced_hint":"Advanced mode stacks these in order and adds a per-person cap.","reply_within":"Reply within","reply_within_none":"No target","reply_within_minutes":"{minutes} min","reply_within_hour":"1 h","next_up_title":"Next up","next_up_description":"Who the rules would pick right now.","next_up_empty":"Nobody is eligible right now. Check the roster and the cap.","next_up_loading":"Working it out…","next_up_property_label":"If the conversation is about","next_up_property_none":"No property","next_up_open":"{open} open","next_up_open_of":"{open} of {cap} open","next_up_since":"{ago} since last","next_up_never":"never assigned","next_up_group_match":"knows this group","next_up_no_group":"no group match","next_up_gets_next":"Gets the next one","next_up_at_cap":"At the cap","next_up_footnote":"Updates as you change the rules and limits. Nothing is assigned until someone writes in.","department_members":"{name} · {count, plural, one {# person} other {# people}}, {picked} receive conversations","department_include_everyone":"Include everyone","department_excluded_here":"Excluded here","department_members_hint":"Unticked people stay in the department; they just won't be picked for this inbox. Someone who joins the department later is included automatically.","department_members_empty":"Nobody in this department can open the inbox yet.","except_person":"except {name}","member_caps_title":"Personal caps","member_caps_hint":"Override the limit above for one person — someone working a half day, or still learning the ropes. Only people added by name can have one.","member_cap_label":"Open conversations for {name}","availability_title":"Availability","availability_description":"Who counts as available when a conversation arrives.","respect_availability_label":"Skip people who are off","respect_availability_hint":"Leaves out anyone on approved time off, outside their scheduled shift, or on a weekday they don't work in their department.","require_clock_in_label":"Only people who are clocked in","require_clock_in_hint":"Turn on if your team clocks in and out. Someone not clocked in, or on a break, isn't picked.","then_connector":"then"}},"agents":{"settings":{"title":"Inbox agents","description":"An agent decides what the inbox AI is allowed to do on its own — draft a reply for you, or send it.","tab_agents":"Agents","tab_skills":"Skills","tab_tools":"Tools","new_agent":"New agent","create_title":"New agent","edit_title":"Edit agent","name":"Name","autonomy":"Autonomy","confidence":"Confidence to reply","confidence_hint":"The agent replies on its own only when it is at least this sure.","confidence_badge":"{percent}% or higher","unsure_line":"Mark as unsure below","unsure_hint":"Replies under this line still go out on their own. The thread marks them with an amber rail and shows Opal's reasoning.","unsure_badge":"Unsure under {percent}%","can_create_tasks":"File proposed tasks","can_create_tasks_hint":"Let the agent open the tasks its analysis proposes, instead of leaving them as suggestions.","instructions":"House style","instructions_hint":"Optional. Tone, phrases to avoid, when to escalate instead of answering.","instructions_placeholder":"Always greet the guest by name. Never promise a late checkout — escalate instead.","reply_delay":"Reply delay (minutes)","reply_delay_hint":"How long the agent waits after the guest's last message before it reads the thread and drafts or sends a reply. A longer pause reads more like a person; a shorter one answers sooner.","empty":"No agents yet.","created":"Agent created","updated":"Agent updated","deleted":"Agent retired","delete_title":"Retire this agent?","delete_description":"\"{name}\" comes off {inboxes, plural, one {# inbox} other {# inboxes}} and {conversations, plural, one {# conversation} other {# conversations}}, and stops replying. Its past replies stay in the threads.","duplicate_name":"An agent with this name already exists.","load_failed":"Could not load agents.","save_failed":"Couldn't save the agent. Please try again.","usage_inboxes":"{count, plural, one {# inbox} other {# inboxes}}","usage_conversations":"{count, plural, one {# conversation} other {# conversations}}","applies_everywhere":"Applies wherever this agent answers.","name_hint":"Shown beside every reply it sends, and in the thread picker.","answers_inboxes":"Answers {inboxes}","answers_none":"Not assigned yet","histogram_caption":"At {percent}%, {count} of the last {total} drafts would have gone out without you.","histogram_caption_unsure":"At {percent}%, {count} of the last {total} drafts would have gone out without an unsure mark.","histogram_empty":"No drafts yet — the bar is set blind until the agent writes a few.","dry_run_title":"Dry run · newest guest message","dry_run_draft":"The agent would reply","dry_run_in":"In","dry_run_picker":"In — Inbox for the dry run","dry_run_empty":"Nothing analysed in this inbox yet.","dry_run_see_why":"Open thread","verdict_would_send":"Would send · {percent}%","verdict_would_hold":"Would hold for you · {percent}%","verdict_would_suggest":"Would suggest · {percent}%","verdict_below_floor":"Below the floor · {percent}%","skills_description":"Skills your agents can run before they answer. Each one is a record you edit here, and any number of agents can share it.","skills_hint":"Which of your skills this agent may run before it answers. Each one reads more of your data and spends extra model calls.","skills_new":"New skill","skills_pick":"Pick a skill to edit it, or create one.","skills_empty":"No skills yet.","skills_manage":"Edit skills","skill_retire_note":"Retiring a skill takes it off every agent that runs it.","skill_agents":"{count, plural, one {# agent} other {# agents}}","skill_kind":"What it does","skill_name":"Name","skill_name_hint":"How you will recognise it when you point an agent at it.","skill_create_title":"New skill","skill_edit_title":"Edit skill","skill_save":"Save skill","skill_duplicate":"Duplicate","skill_copy_name":"{name} (copy)","skill_created":"Skill created","skill_updated":"Skill updated","skill_deleted":"Skill retired","skill_save_failed":"Couldn't save the skill. Please try again.","skill_delete_title":"Retire this skill?","skill_delete_description":"\"{name}\" comes off {agents, plural, one {# agent} other {# agents}}. They stop running it.","skill_teach":"Teach this skill","skill_teach_hint":"Your own standing instruction for this skill — the house rules it must follow, and when to hand over instead of answering.","skill_teach_placeholder":"Never grant an early check-in before 13:00 on a turnover day — hand it to a person instead.","skill_taught":"Taught","skill_view_instructions":"Instructions","skill_view_activity":"Activity","skill_activity_empty":"No agent has run this skill in this period.","skill_activity_runs":"{count, plural, one {# run} other {# runs}}","skill_activity_agents":"{count, plural, one {# agent ran it} other {# agents ran it}}","skill_activity_recent":"Recent runs","skill_activity_chart":"Runs per day","skill_activity_steps":"{count, plural, one {# step} other {# steps}}","skill_activity_status":"{status, select, resolved {Answered} needs_human {Handed to a person} not_applicable {Not its business} other {Unknown}}","skill_tools":"What it can look up","skill_tools_hint":"Every lookup is read-only and pinned to this thread's own stay. More of them is more the skill can check, and more it pays to read.","skill_tools_default_note":"Using the defaults for this skill type","skill_tools_reset":"Reset to defaults","skill_tools_cleared":"Clearing every box puts this skill back on the defaults for its type — there is no “no lookups” setting. Tick at least one to keep a set of your own.","skill_when_to_use":"When to use this skill","skill_when_to_use_hint":"The agent reads this to choose between the skills it has — say it in the guest's own words.","skill_when_to_use_builtin_caption":"The agent currently reads:","skill_when_to_use_default_note":"Using the built-in wording for this skill type","skill_when_to_use_reset":"Reset to the built-in wording","skill_tool_get_stay_label":"The stay","skill_tool_get_stay_hint":"Status, dates, the effective check-in and check-out times, and the house hours.","skill_tool_list_neighbouring_stays_label":"Stays either side","skill_tool_list_neighbouring_stays_hint":"Who is in the unit the night before and the night after this one.","skill_tool_list_turnover_tasks_label":"Turnover cleans","skill_tool_list_turnover_tasks_hint":"The clean between two stays: when it is scheduled and who is on it.","skill_tool_list_stay_upsells_label":"Paid add-ons","skill_tool_list_stay_upsells_hint":"Extras the guest can buy for this stay, with their prices.","skill_tool_check_availability_label":"Availability","skill_tool_check_availability_hint":"Whether the unit is free on given dates, on our own rows and on the connected calendar.","skill_tool_get_quote_label":"Price quote","skill_tool_get_quote_hint":"What a stay on those dates would cost, and the cancellation policy that comes with it.","skill_tool_get_property_facts_label":"Listing facts","skill_tool_get_property_facts_hint":"Bedrooms, capacity, amenities, the mapped inventory and the house rules.","skill_tool_get_wifi_label":"Wi-Fi","skill_tool_get_wifi_hint":"The unit's network name, and whether this guest may be told the password.","skill_tool_find_property_label":"Find a unit by name","skill_tool_find_property_hint":"Turns the name a guest typed into one of your own listings.","skill_tool_list_stay_charges_label":"Charges and payments","skill_tool_list_stay_charges_hint":"What was charged on this stay, and which payments went through.","skill_tool_get_payment_policy_label":"Payment policy","skill_tool_get_payment_policy_hint":"The deposit, the mandatory fees and the cancellation terms on this stay.","skill_tool_list_stay_codes_label":"Door codes","skill_tool_list_stay_codes_hint":"The stay's codes and their real state — never the code itself.","skill_tool_list_entry_events_label":"Entry log","skill_tool_list_entry_events_hint":"Recent entries and refusals, and whether the lock can still be reached.","tools_description":"The lookups your agents can call, one list for the whole organization. Every one is read-only and pinned to the thread's own stay; a skill names them by these labels.","tool_default_for":"On by default for","tool_used_by":"Used by","tool_unused":"No skill uses this yet.","skill_calendar_label":"Check the calendar","skill_calendar_hint":"Reads the reservation and the cleaning schedule before promising a time.","skill_inquiry_label":"Answer a booking inquiry","skill_inquiry_hint":"Checks the listing, the inventory, availability and a quote before answering someone who has not booked yet.","skill_payments_label":"Explain a charge","skill_payments_hint":"Reads the stay's charges, payments, deposit hold and fee catalogue before answering a money question — and hands anything about a refund to you.","skill_access_label":"Help a guest get in","skill_access_hint":"Checks the stay's door codes, the lock and the entry log, and proposes a backup code or a re-push for you to approve.","skill_luggage_label":"Store luggage","skill_luggage_hint":"Reads the stay, the stays either side and the turnover clean before saying where bags can wait — and hands the arrangement itself to you.","skill_check_in_instructions_label":"Send check-in instructions","skill_check_in_instructions_hint":"Reads the stay, the listing and the state of the door codes before resending the arrival steps — and hands a guest already stuck at the door to you.","skill_checkout_departure_label":"Explain checkout","skill_checkout_departure_hint":"Reads the stay and the house rules before explaining the checkout time and what to leave behind — and hands anything the listing does not say to you.","skill_wifi_label":"Fix the wifi","skill_wifi_hint":"Reads the listing's network details and the stay before walking a guest through a restart — and hands a line that is genuinely down to you.","skill_parking_label":"Sort out parking","skill_parking_hint":"Reads the parking rules on the listing and the stay before telling a guest where to leave the car — and hands a permit or a towed car to you.","skill_climate_label":"Heating and cooling","skill_climate_hint":"Reads the listing's heating and cooling notes and the stay before talking a guest through the thermostat — and hands a unit that will not run to you.","skill_local_recommendations_label":"Recommend something nearby","skill_local_recommendations_hint":"Reads the listing's own neighbourhood notes before suggesting anywhere, and never invents a place they do not mention.","skill_item_request_label":"Handle an item request","skill_item_request_hint":"Reads the listing's inventory, the stay and the paid add-ons before answering a request for something extra — and hands the delivery to you.","skill_pet_policy_label":"Answer a pet question","skill_pet_policy_hint":"Reads the house rules, the payment policy and what was charged before answering a pet question — and hands a new pet fee to you.","skill_stay_extension_label":"Extend a stay","skill_stay_extension_hint":"Checks the stay, the night after and a quote before saying whether a guest can stay on — and hands the booking change to you.","skill_date_change_label":"Move a booking","skill_date_change_hint":"Checks the stay, whether the new dates are free and what they would cost — and hands the move itself to you.","skill_cancellation_refund_label":"Handle a cancellation","skill_cancellation_refund_hint":"Reads the stay, its charges and the cancellation terms before explaining what cancelling would cost — and hands every refund to you.","skill_stay_quote_label":"Quote a stay","skill_stay_quote_hint":"Finds the unit a guest named, checks the dates and quotes them — and never states a price no quote returned.","skill_dirty_arrival_label":"Handle a dirty arrival","skill_dirty_arrival_hint":"Reads the stay and the turnover clean before answering someone who walked into a dirty unit — and hands the recovery to you at once.","skill_maintenance_label":"Troubleshoot something broken","skill_maintenance_hint":"Reads the stay and the listing before walking a guest through the one thing they can try — and hands anything needing a visit to you.","skill_lost_and_found_label":"Find a lost item","skill_lost_and_found_hint":"Reads the stay, the entry log and the listing before answering about something left behind — and hands the search and the postage to you.","skill_gas_odor_label":"Respond to a gas smell","skill_gas_odor_hint":"Looks nothing up: it hands you the safety instruction to pass on, and gives the thread to a person every time.","skill_bot_accusation_label":"Hand over on a bot accusation","skill_bot_accusation_hint":"Looks nothing up: it never argues and never denies what it is, and gives the thread to a person every time.","skill_guest_feedback_label":"Acknowledge feedback","skill_guest_feedback_hint":"Reads the stay before acknowledging what a guest thought of it — and leaves anything still broken or unclean to the skills that can act on it.","skill_unknown_question_label":"Escalate an unknown question","skill_unknown_question_hint":"The last resort: reads the listing and the stay, answers only what they plainly say, and hands everything else to you.","skill_tools_none":"This skill answers from the conversation alone. It has no lookups.","retire":"Retire","save_agent":"Save agent","col_delay":"Delay","col_answers":"Answers","section_timing":"Timing","section_abilities":"Abilities","delay_minutes":"{count} min","delay_custom":"Custom","abilities_count":"{count} of {total} on","abilities_description":"What the agent may do beyond writing the reply itself.","ability_tasks_short":"Tasks","ability_status_short":"Status","ability_status_label":"Move the conversation status","ability_status_hint":"Resolve, snooze or reopen the conversation once it has answered.","close_mode_label":"When the agent has answered","close_mode_hint":"Only applies when the agent may move the status. It never changes who receives the reply.","start_from":"Start from a style","start_from_hint":"Pick a starting point, then edit the wording. Your edits never change the original.","use_style":"Use this","style_in_use":"In use","style_custom":"Your own wording","style_none":"Not set","replace_style_title":"Replace your wording?","replace_style_description":"“{name}” overwrites the house style you have typed. This cannot be undone.","create_hint":"Start from a ready-made style, then change anything you like.","create_assign_note":"Nothing reaches a guest until you assign this agent to an inbox.","duplicate_name_of":"{name} copy","flow_guest":"Guest","flow_draft":"Draft","flow_you_send":"You send","flow_gate":"≥ {percent}%","flow_sent":"Sent","flow_held":"Held","flow_always_sent":"Always sent","preset_concierge_label":"Concierge","preset_concierge_hint":"Formal and precise. Confirms nothing it cannot check, and escalates anything about money.","preset_concierge_body":"Address the guest by surname until they use a first name themselves. Confirm every time in the property’s local time zone and repeat the date back.\n\nNever promise a late checkout, a refund or a discount. Say it is being checked and escalate to the property manager instead.","preset_soft_label":"Soft bot","preset_soft_hint":"Warm and casual, first names, short sentences. Says when it is unsure instead of guessing.","preset_soft_body":"Greet the guest by first name and keep it warm and short — two or three sentences.\n\nWhen you are not sure of an answer, say so and tell them someone will come back to them. Never guess at a time, a price or a door code.","preset_direct_label":"Straight to the point","preset_direct_hint":"Two lines at most: the answer, then the next step.","preset_direct_body":"Answer in two lines at most: the answer first, then what happens next. No pleasantries and no filler.\n\nIf the answer needs checking, say who is checking it and by when.","skill_description":"Description","skill_description_hint":"One line for your own list. The agent never reads this.","skill_body":"Instructions","skill_body_hint":"The full procedure the agent follows once it has picked this skill: what to check, in what order, what to say, and when to hand over to a person. Name a lookup the way the Tools tab lists it.","skill_body_builtin_caption":"The agent currently follows:","skill_body_default_note":"Using the built-in procedure for this skill type","skill_body_reset":"Reset to the built-in procedure","skill_enabled":"Enabled","skill_enabled_hint":"Off keeps the skill and its agents, but the agent stops offering it until you turn it back on.","skill_tags":"Tags","skill_tags_hint":"Comma-separated. For grouping your own list only.","skill_disabled_badge":"Off","tool_enabled":"On for this organization","tool_disabled_note":"Off — no skill can call this lookup until it is turned back on.","tool_access_read":"Read","skill_body_add_tool":"Add a lookup","skill_body_mention_hint":"Type @ anywhere in the procedure to name one of the agent’s lookups.","skill_body_no_tool":"No lookup by that name","skill_body_tool_group":"Lookups the agent can call","dry_run_open":"Try it","dry_run_tool_title":"Try {name}","dry_run_skill_title":"Try “{name}”","dry_run_tool_hint":"Runs this lookup against a real thread and shows the data the agent would read. Nothing is saved and nothing is sent.","dry_run_skill_hint":"Runs the whole skill against a real thread and shows which lookups it reached. Nothing is saved, no reply is drafted and nothing is sent — but the run costs model calls, the same as a live one.","dry_run_search":"Search conversations","dry_run_no_threads":"No conversations to try this on","dry_run_change_thread":"Change","dry_run_run":"Run","dry_run_ok":"Answered","dry_run_failed":"Failed","dry_run_duration":"took {ms} ms","dry_run_steps":"{count} steps","dry_run_tokens":"{count} tokens used","dry_run_on_builtin":"Built-in procedure","dry_run_calls":"Lookups it called","dry_run_no_calls":"It called none — the procedure answered from the thread alone.","dry_run_report":"Report"},"autonomy":{"suggest_only":{"label":"Suggest only","description":"Drafts a reply and waits. Nothing is sent without you."},"high_confidence":{"label":"Reply when confident","description":"Sends on its own only above the confidence bar. Below it, the draft waits for you."},"autonomous":{"label":"Fully autonomous","description":"Replies to every guest on its own. Nobody reads the message first."}},"close_mode":{"needs_human_only":{"label":"Close the threads it finished","description":"Resolves a conversation when its own answer settled the question. Threads that still need a person stay open."},"reply_to_everything":{"label":"Leave every thread open","description":"Still answers, parks and snoozes, but never resolves — so you can send the last word yourself."}},"stats":{"title":"Activity","window":"Period","window_days":"{days} days","drafted":"Replies drafted","auto_sent":"Sent by agent","accepted":"Sent as written","edited":"Edited, then sent","unused":"Not used","pending":"Awaiting a reply","empty":"Nothing drafted in this period.","load_failed":"Could not load activity."},"assign":{"title":"Which agent answers which inbox","description":"A conversation can override this, but this is the setting that decides most of them.","scope_required":"Setting an inbox default needs access to every property. Ask an owner or admin to change it.","empty":"No inboxes yet.","none":"No agent","updated":"Inbox updated","failed":"Couldn't update {inbox}. Your pick is kept — try again.","picker":"Agent for {inbox}","save":"{count, plural, one {Save # assignment} other {Save # assignments}}"},"sent_by":"Sent by {name}","sure":"{percent} sure","under_bar":"under the bar","thread":{"label":"Opal","inherit":"Use inbox default","aria":"Opal — Agent for this conversation"},"assist":{"accepted":"Sent with co-pilot","edited":"Sent with co-pilot · edited"},"sent_by_human":"Sent by human","why":{"title":"Why Opal sent this","confidence":"Confidence","no_reasoning":"No reasoning was recorded for this reply."},"console":{"confidence_bar":"Confidence · bar {bar}","sent_unattended":"sent unattended · {time} · no one read this first","held":"held · {points, plural, one {# point} other {# points}} under the bar · nothing sent","held_no_bar":"held · nothing sent","had_written":"{name} had written","replaced":"{count, plural, one {# sentence replaced} other {# sentences replaced}}","as_written":"sent as written","draft_was":"draft was {percent} sure"},"draft":{"title":"{name} drafted · not sent","send_as_is":"Send as is","edit":"Edit","dismiss":"Dismiss","failed":"That didn't go through. Try again.","send":"Send","cancel":"Cancel","open_in_composer":"Open in composer"}},"overview":{"title":"Opal in the inbox","subtitle":"Last {days} days · {threads} threads answered","window":"Period","window_days":"{days} days","load_failed":"Could not load the overview.","empty_title":"Nothing to measure yet","empty_body":"No thread has been answered in this period. Once Opal or your team starts replying, the numbers appear here.","kpi_handled":"Handled by Opal","kpi_handled_sub":"of answered threads, no human","kpi_response":"Median first response","kpi_response_human":"People: {value}","kpi_response_no_human":"No human replies in this period","kpi_escalated":"Escalated to a person","kpi_escalated_sub":"of {threads} threads","kpi_corrected":"Corrected after send","kpi_corrected_sub":"{pct}% of Opal's replies","paused_title":"Why Opal paused","paused_count":"{count} escalations","paused_empty":"Opal did not pause on anything in this period.","channels_title":"Coverage by channel","channels_empty":"No replies went out in this period.","source_title":"How replies were sent","source_total":"{count, plural, one {# message} other {# messages}}","source_empty":"No replies went out in this period.","source_ai_auto":"Opal sent on its own","source_ai_assisted":"Opal drafted, a person sent","source_no_recorded_ai":"No recorded AI","source_bar_value":"<ltr>{count} · {pct}%</ltr>","source_row_aria":"{label}: {count, plural, one {# message} other {# messages}}. Show them.","source_disclosure":"Messages sent before Opal, or synced from a PMS, carry no AI record and land in “No recorded AI”. Messages that were never delivered — failed or skipped — are not counted at all.","source_drilldown_window":"Last {days} days","source_drilldown_count":"{shown} of {total}","source_drilldown_empty":"No messages in this bucket.","source_drilldown_load_failed":"Could not load these messages.","source_drilldown_more":"Load more","source_drilldown_loading":"Loading…","source_drilldown_unknown_sender":"Unknown sender","footnote":"Every number here is measured from your own threads. Corrections do not yet become rules Opal can learn from, so that panel is absent rather than estimated.","spend_title":"What Opal costs","spend_runs":"{count, plural, one {# run} other {# runs}}","spend_load_failed":"Could not load spend.","spend_kpi_total":"Total","spend_kpi_total_sub":"vs the previous period","spend_kpi_per_run":"Per run","spend_kpi_unpriced":"Unpriced runs","spend_kpi_unpriced_warn":"on a model with no published rate — missing from the total","spend_kpi_unpriced_ok":"every run is priced","spend_chart_series":"Cost","spend_trend_title":"By day","spend_trend_empty":"Not enough days to draw a trend yet.","spend_by_model_title":"By model","spend_col_model":"Model","spend_col_runs":"Runs","spend_col_tokens":"Tokens","spend_col_cost":"Cost","spend_model_unknown":"unknown","spend_unpriced":"no rate","spend_by_agent_title":"Top agents by spend","spend_agent_none":"No agent","skills_title":"Skills","skills_runs":"{count, plural, one {# run} other {# runs}}","skills_load_failed":"Could not load skill usage.","skills_empty":"No skill ran in this period.","skills_col_skill":"Skill","skills_col_runs":"Runs","skills_col_credits":"Credits","skills_footnote":"Credits cover the whole run: the skill's lookups and the reply Opal drafted from what it found. Skills are part of the inbox, so they are not taken from your monthly AI credits."},"bulk":{"selected":"{count, plural, one {# conversation selected} other {# conversations selected}}","select_row_aria":"Select conversation with {name}","toast":{"status":"{count, plural, one {# conversation} other {# conversations}} moved to {status}","assigned":"{count, plural, one {# conversation} other {# conversations}} assigned","moved":"{count, plural, one {# conversation} other {# conversations}} moved to {inbox}","analyzing":"Analyzing {count, plural, one {# conversation} other {# conversations}}","partial":"{ok} of {total} updated · {failed} failed","all_failed":"{count, plural, one {# conversation} other {# conversations}} failed to update"},"confirm":{"archive":{"title":"Archive {count, plural, one {# conversation} other {# conversations}}?","description":"They leave every default view at once. You will find them again under Archived, and can move them back from there.","action":"Archive {count}"}},"actions":{"status":"Status","move":"Move to","analyze":"Analyze","analyze_count":"Analyze {count}"},"status_hint":"Waiting on guest is set for you when you reply.","assign_limit":"Select {limit} or fewer conversations to assign.","analyze_hint":"{count, plural, one {# conversation has} other {# conversations have}} no recap yet. {skipped, plural, =0 {} one {# is skipped.} other {# are skipped.}}","analyze_none":"{count, plural, one {This conversation already has a recap} other {These conversations already have a recap}}. Open one to re-analyze it."},"legend":{"title":"What the marks mean","trigger":"Legend","unread":"Unread","recap":"AI summary — rows without one show the last message","recap_stale":"AI summary may not cover the latest messages","agent_needs_help":"The agent could not settle this thread and is waiting for a person","agent_working":"{name} is reading this thread now, or will at the time shown","attachment":"Last message is an attachment","awaiting_guest":"Waiting on the guest to reply","language":"Guest's language","open_tasks":"Open tasks on this stay"},"analytics":{"title":"Inbox analytics","subtitle":"Last {days} days · how the team is doing","tab_team":"Team","tab_opal":"Opal","load_failed":"Could not load inbox analytics.","empty_title":"Nothing to measure yet","empty_body":"No thread has been assigned in this period. Once conversations are routed to people, the numbers appear here.","kpi_assigned":"Threads assigned","kpi_open":"Open right now","kpi_open_sub":"across everyone, any age","kpi_waiting":"Guests waiting","kpi_waiting_sub":"no reply yet","kpi_escalations":"Escalations raised","operators_title":"By operator","operators_footnote":"Response time only counts replies sent through SuiteOp. A reply sent from your PMS carries no author, so \"—\" means unmeasured, not slow.","col_operator":"Operator","col_assigned":"Assigned","col_closed":"Closed","col_open":"Open","col_waiting":"Waiting","col_oldest_wait":"Oldest wait","col_overdue_now":"Late now","col_late_replies":"Late replies","col_response":"Median reply","col_escalations":"Escalated","escalations_title":"Escalations by month","escalations_sub":"Last 12 months","escalations_empty":"Nobody has escalated a thread in the last year."},"team_chat":{"new_chat":"New chat","title":"New team chat","search_placeholder":"Search members...","empty":"No members found"},"member_chat":{"header":"Operations team","empty":"No messages yet","composer_placeholder":"Write a message","send":"Send","read":"Read","edited":"edited","editing_banner":"Editing message","replying_to":"Replying to {name}","reply_unavailable":"Original message unavailable","cancel":"Cancel","load_failed":"Couldn't load your messages"},"forward":{"action":"Forward","dialog_title":"Forward message","search_placeholder":"Search conversations","empty":"No conversations found","banner":"Forwarding a message from {name}","banner_unknown":"Forwarding a message","tag":"Forwarded"}},"integration":{"page_title":"Integrations","connected":"Connected","not_connected":"Not Connected","status_active":"Active","status_pending":"Pending","status_expired":"Expired","status_error":"Error","status_disconnected":"Disconnected","status_unknown":"Unknown","status_needs_reauth":"Needs Reconnection","status_ownership_conflict":"Owned by another organization","category_label":"Category: {category}","last_synced":"Last synced: {date}","never_synced":"Never synced","manage":"Manage","connect":"Connect","connecting":"Connecting…","search_placeholder":"Search integrations...","no_results":"No integrations found matching your search.","accounts_count":"{count, plural, one {# account} other {# accounts}}","health_connected":"Connected","health_attention":"Needs attention","health_pending":"Connecting","health_unknown":"Not verified","health_unknown_hint":"This connection has not been confirmed recently. It will show as connected after a successful sync.","health_degraded":"Limited functionality","health_ownership_conflict":"Owned elsewhere","health_ownership_conflict_hint":"Another organization holds this account's connection, so its events may be delivered there instead. Open the account for details.","unlisted_accounts_notice":"{count, plural, one {# connected account is not shown in this catalog} other {# connected accounts are not shown in this catalog}}","unlisted_accounts_providers":"Affected: {providers}","no_accounts":"No accounts connected","no_accounts_description":"Add an account to get started.","add_account":"Add Account","manage_account":"Manage Account","coming_soon_title":"Coming Soon","coming_soon_description":"{provider} integration is coming soon. We're working on adding support.","legacy_provider_name":"{name} (Legacy)","account_fallback_name":"Account","account_not_found":"Integration account not found.","account_fetch_error":"Failed to load integration account. Please try again.","edit_account_name":"Edit account name","disconnect_title":"Disconnect {provider}","disconnect_description":"Are you sure you want to disconnect {provider}? SuiteOp will stop syncing with this account and it will no longer appear in your integrations.","disconnect_adopted_airbnb_warning":"This account is linked to the host's own existing Airbnb connection. Disconnecting deletes that connection at Airbnb — the host's real, pre-existing link, not one SuiteOp created — and stops the legacy SuiteOp app that still relies on it. This cannot be undone from SuiteOp; the host would have to reconnect Airbnb from scratch.","disconnect_live_codes_warning":"{count, plural, one {# guest door code is active right now. Disconnecting removes it from the lock, so that guest loses access immediately.} other {# guest door codes are active right now. Disconnecting removes them from the locks, so those guests lose access immediately.}}","disconnect_reservations_warning":"{count, plural, one {# reservation on this account's listings will be permanently deleted. This cannot be undone.} other {# reservations on this account's listings will be permanently deleted. This cannot be undone.}}","disconnect_tasks_warning":"{count, plural, one {# scheduled task generated from those reservations will be cancelled.} other {# scheduled tasks generated from those reservations will be cancelled.}}","disconnect_preflight_checking":"Checking what disconnecting will permanently remove from this account…","disconnect_preflight_unknown":"Could not check what disconnecting will remove. It permanently deletes the reservations on this account's listings, cancels the scheduled tasks generated from them, and removes any guest door codes that are active.","disconnect_impact_loading":"Checking whether this account is used by active background checks…","disconnect_blocked_description":"{count, plural, one {This account cannot be disconnected because the following active background check uses it. Deactivate or reassign the step first.} other {This account cannot be disconnected because the following active background checks use it. Deactivate or reassign these steps first.}}","background_check_step_fallback":"Background Check step","disconnect":"Disconnect","sync_devices":"Sync Devices","sync_templates":"Sync Templates","syncing":"Syncing…","more_actions":"More Actions","sync_webhook":"Sync Webhook","catalog_load_error":"Failed to load integrations. Please try again.","account_load_error":"Failed to load account. Please try again.","account_content_coming_soon":"Account management coming soon.","completing_connection":"Completing connection…","category":{"access_control":"Access Control","operations":"Operations","access":"Home Automation","payment":"Payment","upsells":"Upsells","pms":"Property Management Systems","documents":"Documents & E-Signature"},"docusign":{"title":"DocuSign","description":"Send documents for e-signature directly from SuiteOp."},"smartthings_next_location":{"title":"Add another SmartThings location?","description":"SmartThings connects one location at a time. Add another location if this account has more locations.","add_button":"Add another location","done_button":"Done"},"toast":{"connected_success":"Successfully connected {provider}","connect_failed":"Failed to start OAuth flow","no_permission":"You don’t have permission to manage integrations. Contact your organization administrator.","sync_success":"Devices synced successfully","sync_failed":"Failed to sync devices","sync_failed_reason":"Failed to sync devices: {reason}","sync_unconfirmed":"Could not confirm whether device sync finished — refresh in a moment to see the result.","sync_connected":"Connected — devices synced successfully","sync_connected_failed":"Connected, but failed to sync devices. Try \"Sync Devices\" manually.","templates_sync_success":"Templates synced successfully","templates_sync_failed":"Failed to sync templates","templates_sync_connected":"Connected — templates synced successfully","templates_sync_connected_failed":"Connected, but failed to sync templates. Try \"Sync Templates\" manually.","disconnect_success":"{provider} disconnected","disconnect_failed":"Failed to disconnect","disconnect_retry":"The account is still finishing in-flight sync work. Try disconnecting again in about 30 seconds.","disconnect_blocked":"Deactivate or reassign the active background checks before disconnecting this account.","lock_sent":"Lock command sent","lock_failed":"Failed to lock device","unlock_sent":"Unlock command sent","unlock_failed":"Failed to unlock device","pms_connected_success":"Successfully connected {provider}","pms_connect_failed":"Failed to connect {provider}","sync_listings_success":"Listing sync started","sync_listings_failed":"Failed to sync listings","sync_reservations_success":"Reservation sync started","sync_reviews_success":"Review sync started","sync_conversations_success":"Conversation sync started","pms_disconnect_success":"{provider} account disconnected","pms_disconnect_failed":"Failed to disconnect account","name_updated":"Account name updated","name_update_failed":"Failed to update account name","webhooks_resubscribed":"Webhooks re-subscribed successfully","custom_fields_init_success":"Custom fields initialized","custom_fields_init_failed":"Failed to initialize custom fields","webhook_sync_success":"Webhook subscription registered","webhook_sync_failed":"Failed to register webhook subscription","webhook_sync_partial":"Webhook registered for {registered} of {total} locks — try again to cover the rest","webhook_sync_no_targets":"No locks to register — the provider reported none for this account","webhook_deleted":"Webhook deleted","push_enabled":"Push enabled — data will be written back to the provider","push_disabled":"Push disabled — account is now read-only","push_toggle_failed":"Failed to toggle push","channel_sync_warning":"Connected, but channel sync failed. Click \"Sync Channels\" to retry.","routing_kv_warning":"Connected, but inbound event routing could not be set up — incoming messages may not reach SuiteOp. Try disconnecting and reconnecting; if the warning comes back, contact support.","webhook_setup_failed_warning":"Connected, but SuiteOp could not subscribe to this account's device events — device activity may not appear. If this warning persists, contact support.","webhook_setup_partial_warning":"Connected, but SuiteOp could not subscribe to every device's events — some device activity may not appear. If this warning persists, contact support.","connect_warning_unknown":"Connected, but the provider reported a warning we don't recognise. If something isn't working, contact support.","oauth_failed_generic":"Could not start the OAuth flow. Please try again."},"connect_error":{"forbidden":"You don't have permission to connect an integration. Ask an organisation admin.","credentials":"{provider} rejected those credentials. Check them and try again.","unavailable":"Couldn't reach {provider}. Please try again shortly.","unknown_title":"Couldn't connect","unknown":"We couldn't connect {provider}. Please try again, or contact support if this keeps happening."},"push_toggle":{"label":"Push enabled","disabled_label":"Push disabled — read-only"},"device_content":{"unnamed_device":"Unnamed Device","no_devices":"No devices synced yet — or none are assigned to properties you can access.","devices_error":"Failed to load devices. Please try again.","last_synced":"Last synced {time}","never_synced":"Never synced","sync_failed":"Last sync failed {time}","sync_failed_earlier":"An earlier sync failed {time}","sync_failed_reason":"Last sync failed {time}: {reason}","sync_failed_earlier_reason":"An earlier sync failed {time}: {reason}","columns":{"name":"Name","controls":"Controls","battery":"Battery","online":"Online","actions":"Actions"},"lock":"Lock","unlock":"Unlock","remote_controls_disabled":"Remote controls are disabled for this device","push_controls":{"title":"Push controls","description":"Choose whether SuiteOp may change physical devices connected through this account.","label":"Allow device changes","enabled_help":"Commands and managed code changes are allowed.","disabled_help":"Reads and sync continue, but commands and code changes are paused.","catch_up_scheduled":"Catch-up scheduled: {provisioningScheduled} locks to provision and {reconciliationScheduled} locks to reconcile.","confirm_enable_title":"Enable device changes?","confirm_enable_description":"SuiteOp will provision linked locks and reconcile managed codes. Unknown, provider-native, and master codes will be preserved.","confirm_disable_title":"Disable device changes?","confirm_disable_description":"Device commands and code changes will stop. Status reads and synchronization will continue."}},"dormakaba":{"warning_title":"Important: Before connecting your Dormakaba account","warning_intro":"Dormakaba data-access constraints make some SuiteOp features behave differently. Review these lock-code limitations:","warning_confirm_title":"Confirm your user level.","warning_confirm_description":"Open the connected account and make sure one user level is selected. Verify its check-in and check-out times match the window SuiteOp should use.","warning_scope_title":"Scope of integration.","warning_scope_description":"SuiteOp only generates guest and reservation codes. Continue to create and manage staff, contractor, and master codes in Oracode Live.","warning_after_code_title":"After SuiteOp generates a code.","warning_after_code_description":"If the displayed code is still four digits or empty after a few minutes and a device sync, check Oracode Live. An existing code may need to be removed there or used as the guest code.","warning_footer":"These steps help keep Dormakaba provisioning reliable.","warning_dismiss":"Don’t show this again","user_level_title":"Dormakaba user level","user_level_description":"SuiteOp uses one user level for this entire organization. Reservation codes must match its schedule exactly.","user_level_load_error_title":"Couldn’t load the user level","user_level_load_error":"Sync devices and try again.","no_user_levels_title":"No supported user levels found","no_user_levels_description":"Sync devices to import the user levels configured in Oracode Live.","no_common_user_levels_title":"No user level is shared by all accounts","no_common_user_levels_description":"This organization uses one user level for all {accountCount} Dormakaba accounts, and no guest-compatible level is available on every one of them. Align the user levels in Oracode Live, then sync again.","unsynced_account_title":"A connected Dormakaba account has not synced yet","unsynced_account_description":"This organization uses one user level for all {accountCount} Dormakaba accounts, so none can be offered until every account has reported its levels. Sync the devices on each account.","selection_required_title":"Select one user level","selection_required_description":"Access-code creation remains blocked until the organization has one user level selected.","choose_user_level":"Organization user level","choose_user_level_placeholder":"Select a user level","user_level_option":"{name} (prefix {prefix})","save_user_level":"Save user level","saving":"Saving…","user_level_save_success":"Dormakaba user level saved","user_level_save_error":"Couldn’t save this user level. Sync devices and try again.","prefix":"Prefix","check_in":"Check-in time","check_out":"Check-out time","access_24_hour":"Has 24-hour access?","max_access_length":"Maximum access length","timezone":"Time zone","yes":"Yes","no":"No","days_14":"14 days","days_31":"31 days"},"esign":{"templates_title":"Templates","templates_count":"{count, plural, one {# template} other {# templates}}","sync_templates":"Sync Templates","syncing_templates":"Syncing…","no_templates_title":"No templates synced","no_templates_description":"Templates will appear here after syncing.","template_signers":"{count, plural, one {# signer} other {# signers}}","template_fields":"{count, plural, one {# field} other {# fields}}","test_page":"Test Page","webhook_dialog_title":"Webhook Configuration","webhook_dialog_description":"Manage real-time event notifications.","create_webhook":"Create Webhook","webhook_not_configured":"No webhook configured","webhook_connect_id":"Connect ID","webhook_events":"Events","toast":{"templates_synced":"Templates synced successfully","webhook_created":"Webhook created successfully"},"template_cc":"{count, plural, one {# CC} other {# CCs}}","template_renamed":"Template renamed","template_rename_failed":"Failed to rename template","click_to_rename":"Click to rename","save":"Save","cancel":"Cancel","account_info":"Account Info","account_id":"Account ID","account_email":"Email","status":"Status","last_synced":"Last Synced","connected_at":"Connected","never_synced":"Never","sync_actions":"Sync Actions","webhooks_title":"Webhooks","resubscribe":"Re-subscribe","resubscribing":"Re-subscribing…","no_webhook":"No webhook configured","no_webhook_consequence":"Completed signatures will not reach SuiteOp until a webhook is registered. Templates and sending are unaffected.","webhook_resubscribed":"Webhook re-subscribed successfully","webhook_resubscribe_failed":"Failed to re-subscribe webhook","webhook_provider_managed":"SuiteOp Sign registers the webhook when the account is connected. Disconnect and reconnect the account to change or restore it.","team_name":"Team Name","webhook_load_error":"Failed to load webhook status"},"ical":{"add_account_title":"Connect iCal Feed","add_account_description":"Paste your iCal calendar URL and select the property to sync reservations.","calendar_url":"Calendar URL","calendar_url_placeholder":"https://example.com/calendar.ics","property":"Property","property_placeholder":"Select a property…","connect_account":"Save & Sync","connecting":"Validating…","sync_reservations":"Sync Reservations","syncing_reservations":"Syncing…","edit_property":"Edit Property","edit_property_description":"Select a new property to link with this iCal feed. Existing reservations will be moved to the new property.","save_property":"Save","saving_property":"Saving…","update_and_sync":"Update & Sync","calendar_url_label":"iCal URL","last_synced_label":"Last Synced","last_checked_label":"Last Checked","never_checked":"Never","auto_refresh_note":"This feed refreshes automatically about once an hour.","sync_retrying_title":"Last refresh failed","sync_retrying_description":"We could not read this calendar feed on the last attempt. Automatic retries continue — no action needed yet.","sync_failed_title":"This calendar feed is not reachable","sync_failed_description":"Repeated attempts to read this feed have failed, so reservations are no longer up to date. Check that the feed URL is still valid in the source calendar and paste a new one if it was revoked. Automatic retries continue in the meantime.","last_error_at":"Last failure","feed_limits_title":"What a calendar feed can and cannot do","feed_limits_body":"This feed provides reservation dates only. It carries no guest contact details and no messaging, SuiteOp cannot write changes back to the channel, and updates arrive on a refresh cycle rather than instantly.","error_code":{"network":"We could not connect to the calendar host.","timeout":"The calendar host took too long to respond.","http_error":"The calendar host rejected the request — the feed URL may have been revoked.","invalid_feed":"The URL no longer returns a valid calendar feed.","blocked_url":"This feed URL points somewhere we will not fetch from.","feed_too_large":"The calendar feed is too large to process.","unknown":"The last refresh failed for an unknown reason."},"connect_error":{"authorization":"We couldn't access this calendar. The link may have been revoked, or it may not grant access — open your calendar's sharing settings, copy a fresh private export link, and paste it here.","server_error":"The calendar provider is having trouble. Nothing is wrong with your link — please try again shortly.","network":"Unable to reach this URL. Please check it and try again.","timeout":"The calendar host took too long to respond.","http_error":"The calendar host rejected this request. Check that the link is still valid, then try again.","blocked_url":"This feed URL points somewhere we will not fetch from.","feed_too_large":"The calendar feed is too large to process.","invalid_feed":"This URL does not contain a valid iCal feed.","no_reservations":"No reservations found in this feed. Only blocked dates were detected.","already_connected":"This iCal feed is already connected.","unknown":"We couldn't connect this calendar feed. Please try again, or contact support if this keeps happening.","no_property_access":"You don't have access to that property. Pick one you manage, or ask an organisation admin."},"property_label":"Linked Property","reservations_title":"Synced Reservations","no_reservations":"No reservations synced yet. Click \"Sync Reservations\" to pull reservations from this feed.","error_unreachable":"Unable to reach this URL. Please check it and try again.","error_invalid_feed":"This URL does not contain a valid iCal feed.","error_no_reservations":"No reservations found in this feed. Only blocked dates were detected.","error_already_connected":"This iCal feed is already connected.","error_throttle":"Sync already initiated. Try again in {minutes, plural, one {# minute} other {# minutes}}.","columns":{"confirmation_code":"Confirmation Code","check_in":"Check-in","check_out":"Check-out","nights":"Nights","source":"Source","guest":"Guest"},"toast":{"connect_success":"iCal feed connected and sync initiated!","sync_success":"Reservation sync initiated!","sync_failed":"Couldn't start the sync. Please try again.","update_property_success":"Property updated successfully","update_property_failed":"Couldn't update the property. Please try again.","forbidden":"You don't have permission to manage this integration. Ask an organisation admin.","url_copied":"URL copied to clipboard","copy_failed":"Failed to copy URL","no_property_access":"You don't have access to that property. Pick one you manage, or ask an organisation admin."}},"needs_reauth_title":"Reconnection Required","needs_reauth_description":"This integration's authorization has expired or been revoked. Please reconnect to restore functionality.","ownership_conflict_title":"This account belongs to another organization","ownership_conflict_description":"The {provider} account you connected is already connected to another organization, so it can't be used here. Reconnecting won't resolve it — contact support if you think this is a mistake.","routing_conflict_title":"Another organization holds this connection","routing_conflict_description":"Another organization has already connected this {provider} account and holds its event routing, so events for it may be delivered to them instead of here. If they disconnect it, reconnecting will restore this connection — otherwise contact support.","needs_reauth_action":"Reconnect","credential_missing_title":"This connection has lost its credentials","credential_missing_description":"SuiteOp no longer holds the sign-in details for this {provider} connection, so nothing can sync and messages on it won't reach the guest — even though it still shows as active. Reconnect to restore it.","station_read_title":"Weather stations not synced","station_read_description":"This {provider} connection was authorized before SuiteOp supported weather stations, so they are not included. Reconnecting the account adds them — your existing devices keep working.","scope_gap_title":"Some permissions are missing","scope_gap_description":"This {provider} connection was authorized before SuiteOp asked for every permission it now uses, so these features are unavailable: {features}. Reconnecting grants them — everything else keeps working.","scope_gap_feature_photo_upload":"guest ticket photos","scope_gap_feature_channel_leave":"removing the bot from a channel","scope_gap_feature_direct_messages":"direct messages with the assistant","pms":{"account_info":"Account Info","external_id":"External Account ID","status":"Status","last_synced":"Last Synced","created_at":"Connected","sync_actions":"Sync Actions","sync_listings":"Sync Listings","syncing_listings":"Syncing listings…","sync_reservations":"Sync Reservations","syncing_reservations":"Syncing reservations…","sync_reviews":"Sync Reviews","syncing_reviews":"Syncing reviews…","sync_conversations":"Sync Conversations","syncing_conversations":"Syncing conversations…","listing_count":"{count, plural, one {# listing} other {# listings}}","reservation_count":"{count, plural, one {# reservation} other {# reservations}}","listings_title":"Listings ({count})","listings_summary":"{listed} listed · {unlisted} unlisted · {mapped} mapped","no_listings":"No listings synced yet. Click \"Sync Listings\" to pull listings from your PMS.","no_listings_match":"No listings match your filters.","mapped":"Mapped","unmapped":"Unmapped","listed":"Listed","unlisted":"Unlisted","inactive":"Deactivated","search_listings":"Search listings…","filter_mapped":"Mapped","filter_unmapped":"Unmapped","filter_listed":"Listed","filter_unlisted":"Unlisted","filter_active":"Active","filter_inactive":"Deactivated","select_all":"Select all","select_row":"Select row","select_all_truncated":"Selected the first {count, number} unmapped listings — the most that can be selected at once ({total, number} unmapped listings match your filters). Create these, then select all again for the rest.","select_all_failed":"Couldn't select all matching listings. Please try again.","selected_count":"{count, plural, one {# listing selected} other {# listings selected}}","hotel":"Hotel","hotel_room":"Hotel room","hotel_name":"Hotel: {name}","quick_add":"Quick Add","bulk_create":"{count, plural, one {Create # Property} other {Create # Properties}}","property_created":"Property \"{name}\" created","bulk_created":"{count, plural, one {# property created} other {# properties created}}","bulk_errors":"{count, plural, one {# listing failed} other {# listings failed}}","create_failed":"Failed to create property from listing","bulk_create_failed":"Failed to create properties from listings","view_property":"View Property","webhooks_title":"Webhooks","resubscribe_webhooks":"Re-subscribe","resubscribing":"Re-subscribing…","no_webhooks":"No webhook subscriptions. Click \"Re-subscribe\" to register webhooks.","webhooks_unavailable":"Could not read webhook subscriptions from the provider. This is not the same as having none — try again shortly.","webhooks_platform_managed":"Webhooks for this integration are managed by SuiteOp at the app level. Reservation, message, and review events are delivered automatically through the SuiteOp edge gateway — there's nothing to configure here.","custom_fields_title":"Custom Fields","custom_fields_description":"SuiteOp-managed fields in your PMS used for portal links and checkout status. Initialized automatically on connect; re-initialize if they've been deleted or a new key is added.","custom_fields_initialize":"Initialize","custom_fields_reinitialize":"Re-initialize","custom_fields_initializing":"Initializing…","custom_fields_none_initialized":"Not yet initialized.","status_active":"Active","status_error":"Error","status_disconnected":"Disconnected","status_needs_reauth":"Needs Reconnection","status_pending":"Pending","status_expired":"Expired","columns":{"mapped":"Mapped","listed":"Listed","name":"Name","beds":"Beds","bedrooms":"Bedrooms","bathrooms":"Bathrooms","guests":"Guests","property":"Property"},"push_controls":{"title":"Push Controls","description":"Control which data SuiteOp pushes back to your PMS. The global switch overrides all per-operation toggles.","enable_push_label":"Enable push (write data back)","enable_push_description":"When off, this account is read-only — SuiteOp pulls data but never writes back.","read_only_help":"Push is currently disabled. All write-back operations are paused until you re-enable it.","disabled_by_global_help":"Disabled because the global push switch is off.","op_unsupported_help":"This provider can't accept this write-back, so SuiteOp won't send it. Changes still apply inside SuiteOp.","toggle_success":"Push setting updated","toggle_failed":"Failed to update push setting","unsupported_help":"This integration is read-only — the provider accepts no write-back from SuiteOp, so there is nothing to configure here. Data flows one way: into SuiteOp.","confirm_enable_title":"Enable PMS writes?","confirm_enable_description":"SuiteOp will be allowed to send the selected updates to this PMS account.","confirm_disable_title":"Disable PMS writes?","confirm_disable_description":"SuiteOp will stop all outbound writes to this PMS account. Inbound synchronization will continue.","confirm_update_title":"Save PMS push controls?","confirm_update_description":"SuiteOp will use these operation settings for future PMS writes.","op":{"messages":{"label":"Messages","description":"Send guest messages back to the PMS inbox."},"access_code":{"label":"Access codes","description":"Push lock codes onto the reservation."},"reservation_times":{"label":"Check-in / check-out times","description":"Push planned arrival and departure times back to the reservation."},"update_guest":{"label":"Guest details","description":"Push guest profile updates (name, email, phone) back to the PMS."},"portal_link":{"label":"Guest portal link","description":"Push the guest portal URL onto the reservation."},"property_status":{"label":"Property status","description":"Push cleaning and turnover status changes back to the listing."},"reservation_status":{"label":"Reservation status","description":"Push reservation status changes (confirmed, cancelled) back to the PMS."},"custom_fields":{"label":"Custom fields","description":"Push SuiteOp values into PMS custom fields."},"charges":{"label":"Charges","description":"Push upsells and other charges to the reservation invoice."}},"record_external_payments":{"label":"Record external payments in Guesty","description":"When a guest pays an upsell or deposit through Stripe or Hyperswitch, also record the payment on the Guesty reservation ledger so the synced charge shows as paid. GuestyPay payments are excluded. Off by default."}},"select_all_none":"Every listing matching your filters is already a property — nothing left to select.","filter_mapping_label":"Mapping status","filter_listed_label":"Listing status","filter_active_label":"PMS status","filter_room_type":"Room type","filter_city":"City","filter_building":"Building","filter_tags":"Tags","facet_truncated":"{label} (first {count})","group_by_label":"Group listings by","group_by_none":"No grouping","group_by_roomType":"Group by room type","group_by_city":"Group by city","group_by_hotel":"Group by building","group_none":"Not specified","select_group_truncated":"Selected the first {count} of {total} in this group. Create them, then select the group again for the rest.","select_group":"Select all listings in {name}","group_listings_count":"{count, plural, one {# listing} other {# listings}}","picker":{"search_placeholder":"Search listings by name","unmapped_only":"Hide already imported","no_match":"No listings match. Clear the search or show imported ones.","listed_only":"Hide unlisted","syncing":"Your listings are still syncing — they'll appear here in a moment.","load_error":"Your listings couldn't be loaded."}},"stripe":{"add_account_title":"Connect Stripe Account","add_account_description":"Enter your Stripe API keys to connect your account for payment processing.","nickname":"Account Nickname","nickname_placeholder":"e.g. Production, Test","nickname_required":"A nickname is required","secret_key":"Secret Key","secret_key_placeholder":"sk_example_xxxxxxxxxxxx","secret_key_required":"Secret key is required","secret_key_invalid":"Secret key must start with sk_","publishable_key":"Publishable Key","publishable_key_placeholder":"pk_example_xxxxxxxxxxxx","publishable_key_required":"Publishable key is required","publishable_key_invalid":"Publishable key must start with pk_","connect_account":"Connect Account","connecting":"Connecting…","account_info":"Account Info","connected_account_id":"Connected Account ID","email":"Email","country":"Country","currency":"Currency","charges_enabled":"Charges Enabled","payouts_enabled":"Payouts Enabled","connected_at":"Connected","quick_links":"Quick Links","open_dashboard":"Open Stripe Dashboard","manage_payments":"Manage Payments"},"guesty":{"add_account_title":"Add new Guesty account","add_account_description":"Enter your Guesty integration token from the Partner Dashboard.","integration_token":"Integration Token","integration_token_placeholder":"Paste your integration token here","integration_token_required":"Integration token is required","connect_account":"Connect Account","connecting":"Connecting…"},"viator":{"connect_title":"Connect Viator","connect_description":"Add your Viator Partner ID so imported activities link to your own affiliate account. Without one, links use SuiteOp's partner account.","partner_id_label":"Viator Partner ID","partner_id_placeholder":"P12345678","partner_id_hint":"Find it in the Viator Partner Center under Account. One letter followed by 8 digits.","connect":"Connect","connecting":"Connecting…","toast_connected":"Viator Partner ID connected","toast_connect_failed":"Could not connect the Viator Partner ID"},"zapier":{"connect_title":"Connect Zapier","connect_description":"Create a new Zapier connection to automate workflows between SuiteOp and 5,000+ apps.","display_name_label":"Display Name","display_name_placeholder":"e.g. My Zapier Account","generate_key":"Generate API Key","generating":"Generating…","private_integration_note":"Our Zapier integration is currently private. Click the link below to add it to your Zapier account.","install_zapier_app":"Install Zapier Application","post_install_instructions":"Once added, use the credentials below in Zapier's authentication step to finalize the connection and start creating triggers.","credentials_title":"Your Zapier Credentials","org_id_label":"Organization ID (Username)","api_key_label":"API Key (Password)","copied":"Copied to clipboard","credentials_instructions":"Store these credentials securely. You can view them again from the account detail page while the account is awaiting setup.","credentials_downloaded":"Credentials downloaded","download_credentials":"Download Credentials","done":"Done","awaiting_setup":"Awaiting Setup","pending_instructions":"This account hasn't been connected to Zapier yet. Complete the setup by installing the Zapier app and entering your credentials.","resume_setup":"Resume Setup","resume_setup_title":"Resume Zapier Setup","resume_setup_description":"Use these credentials to complete your Zapier connection.","view_credentials":"View Credentials","view_credentials_title":"Zapier Credentials","view_credentials_description":"Use these credentials to connect or reconnect triggers in Zapier.","account_info":"Account Info","status":"Status","connected":"Connected","triggers_count":"{count, plural, one {# trigger} other {# triggers}}","triggers_title":"Triggers ({count})","no_triggers":"No triggers configured for this account.","search_triggers":"Search triggers…","url_copied":"URL copied to clipboard","copy_url":"Copy webhook URL","status_active":"Active","status_error":"Error","status_disconnected":"Disconnected","status_needs_reauth":"Needs Reconnection","status_pending":"Pending","status_expired":"Expired","sort_name":"Name","sort_type":"Type","sort_date":"Date","trigger_name":"Name","trigger_type":"Type","webhook_url":"Webhook URL","created_at":"Created","actions":"Actions","test_trigger":"Send test payload","test_trigger_success":"Test payload sent successfully (HTTP {status})","manage_in_zapier":"Manage in Zapier","manage_in_zapier_hint":"To add, remove, or pause triggers, manage your Zaps directly in Zapier.","toast_account_created":"Zapier account created","toast_create_failed":"Failed to create Zapier account","toast_rename_failed":"Failed to rename trigger","copy_failed":"Failed to copy to clipboard","test_trigger_failed_invalid_url":"Test failed — this trigger's webhook URL isn't valid. Recreate the trigger in Zapier.","test_trigger_failed_account_disconnected":"Test failed — this Zapier account is disconnected. Reconnect it to send test payloads again.","test_trigger_failed_embedded_credentials":"Test failed — the webhook URL can't contain a username or password.","test_trigger_failed_blocked_host":"Test failed — the webhook URL points to a private or internal address, which SuiteOp won't call.","test_trigger_failed_delivery":"Test failed — SuiteOp couldn't reach the webhook. Check the integration activity log for details.","test_trigger_failed_http":"Test failed — the webhook answered HTTP {status}.","test_trigger_request_failed":"The test couldn't be run. Please try again."},"juspay":{"merchant_id":"Merchant ID","profile_id":"Profile ID","connected_at":"Connected","dashboard":"Hyperswitch Dashboard","dashboard_description":"Manage members, routing rules, analytics, and other settings in the Hyperswitch dashboard.","open_dashboard":"Open Dashboard","register_team_member":"Register Team Member","profile_subtitle":"Profile: {profileId}","welcome_title":"Account Created!","welcome_description":"Your Hyperswitch payment account has been set up successfully.","welcome_email_notice":"You will receive an email within the week with instructions to set up your Hyperswitch dashboard account, where you can manage team members, configure routing rules, and view analytics.","welcome_next_steps":"In the meantime, you can attach this payment account to your upsells and deposits to start accepting payments.","search_placeholder":"Search profiles…","columns":{"nickname":"Profile Name","profile_id":"Profile ID","status":"Status","default":"Default"},"tabs":{"all":"All","active":"Active","inactive":"Inactive","default":"Default"},"empty_state":{"title":"No matching profiles","subtitle":"Try adjusting your search or status filter.","clear_filters":"Clear filters"}},"guest_admin":{"import_properties":"Import Properties","connect_property":"Connect Property","no_properties":"No properties connected","no_properties_description":"Import properties via CSV or connect them one by one.","property_name":"Property Name","display_name":"Display Name","address":"Address","address_1":"Address Line 1","address_2":"Address Line 2","address_3":"Address Line 3","address_search_placeholder":"Search for an address…","postcode":"Postcode","country":"Country","state":"State / Province","city":"City","government_type":"Reporting Authority","government_type_none":"None","external_housing_code":"Establishment Code","external_housing_code_id_policial":"Establishment Code (ID Policial)","external_housing_unit":"Establishment Unit","emergency_contact_phone":"Emergency Contact Phone","payment_method":"Payment Method","renter_code":"Landlord/Renter Code","owner_fiscal_code":"NIE/NIF (fiscal) code","ses_username":"SES API Username (ends with WS)","ses_password":"SES API Password","ses_credentials_required":"Enter the SES API username, password and NIE/NIF to save this property — GuestAdmin never returns SES credentials, so they cannot be filled in for you.","use_customer_ses":"Use Customer SES Info","gov_verify_verified":"GOV Verify: Verified","gov_verify_failed":"GOV Verify: Failed","vendor_credentials_loading":"Loading credential fields…","vendor_credentials_unchanged":"Unchanged unless filled","vendor_credential_username":"Username","vendor_credential_password":"Password","vendor_credential_api_key":"API Key","vendor_credential_access_key":"Access Key","vendor_credential_establishment_code":"Establishment Code (IDUB)","vendor_credential_establishment_code_invalid":"The Establishment Code must be 12 to 14 digits.","authority_SES":"SES (Spain)","authority_mossos":"Mossos (Spain)","authority_ertainza":"Ertzaintza (Spain)","authority_siba_sef":"SIBA SEF (Portugal)","authority_allogiaweb":"AllogiaWeb (Italy)","authority_ubyport":"UbyPort (Czech Republic)","vendor_credentials_link_first":"Link this property to a SuiteOp property first — credentials are saved through the linked property.","vendor_credentials_required_missing":"Fill every required credential field.","step_basic":"Basic Info","step_location":"Location","step_government":"Government Reporting","create_property":"Create Property","creating":"Creating...","import_title":"Import Properties","import_description":"Upload a CSV file to import multiple properties at once.","download_template":"Download Template","upload_csv":"Upload CSV","drop_csv":"Drop CSV file here or click to browse","importing":"Importing...","import_progress":"Importing {current} of {total}...","import_success":"Successfully imported {count} properties","import_error":"Failed to import {count} properties","import_complete":"Import complete: {success} succeeded, {failed} failed","import_stopped":"Import stopped: {imported} of {total} imported","status_active":"Active","status_inactive":"Inactive","gov_verified":"Verified","gov_failed":"Failed","gov_pending":"Pending","gov_unreported":"—","gov_retry_verification":"Retry verification","gov_retry_queued":"Verification re-queued.","load_error":"Failed to load properties. Please try again.","select_country":"Select a country...","select_state":"Select a state...","select_city":"Select a city...","city_none_for_state":"GuestAdmin lists no cities for this state, so none is sent.","select_government_type":"Select authority type...","connect_title":"Connect Property","connect_description":"Add a new property to GuestAdmin.","edit_title":"Edit Property","edit_description":"Update the GuestAdmin property details","saving":"Saving...","save_changes":"Save Changes","create_and_link":"Create & Link","step_basic_desc":"Property name and address","step_location_desc":"Country, state, and city","step_government_desc":"Government reporting configuration","customer_id":"Customer ID","valid_rows":"{count, plural, one {# valid row} other {# valid rows}}","errors_found":"{count, plural, one {# error} other {# errors}} found","reupload":"Re-upload","submit_import":"Import All","csv_note":"CSV columns must match the template. All required fields must be filled.","csv_empty_file":"The CSV file is empty.","csv_unterminated_quote":"Line {line}: A quoted value is never closed, so the rest of the file cannot be read. Fix the quotes and upload it again.","csv_malformed_quote":"Line {line}: A quote in this line is misplaced, so the values around it cannot be read correctly. Fix the quoting and upload the file again.","csv_row_required":"Line {line}: {column} is required.","csv_row_invalid":"Line {line}: {column} has an invalid value.","csv_row_digits_only":"Line {line}: {column} must contain digits only.","csv_row_establishment_code_10_digits":"Line {line}: {column} must be exactly 10 digits.","csv_row_establishment_code_idub_digits":"Line {line}: {column} must be 12 to 14 digits.","csv_row_unsupported_authority":"Line {line}: {value} is not a supported Reporting Authority.","preview_rows":"{count, plural, one {Preview (# row)} other {Preview (# rows)}}","toast":{"created":"Property created successfully","create_failed":"Failed to create property","updated":"Property updated"},"review_description":"Review the property details before creating.","field_required":"Required","linked_to":"Linked to","link_to_property":"Link to SuiteOp property...","link_success":"Property linked","unlink_success":"Property unlinked","delete_property":"Delete property","delete_title":"Delete property?","delete_description":"{name} will be deleted in GuestAdmin and unlinked from its SuiteOp property. This cannot be undone from SuiteOp.","delete_confirm":"Delete","delete_success":"Property deleted","search_properties":"Search properties...","linked_property":"Linked Property","status_label":"Status","prefill_from_property":"Pre-fill from SuiteOp property","prefill_no_properties":"No SuiteOp properties available to pre-fill from.","select_suiteop_property":"Select a property...","search_placeholder":"Search properties…","columns":{"property_name":"Property Name","address":"Address","linked_property":"Linked Property","status":"Status","actions":"Actions","government":"Reporting Status"},"tabs":{"all":"All","linked":"Linked","unlinked":"Unlinked","inactive":"Inactive","gov_failed":"Gov. issues"},"empty_state":{"title":"No matching properties","subtitle":"Try adjusting your search or status filter.","clear_filters":"Clear filters"},"error_state":{"title":"Couldn't load properties","subtitle":"Something went wrong fetching your GuestAdmin properties.","retry":"Try again"}},"authenticate":{"connect_title":"Connect Authenticate.com","connect_description":"Enter your API key and Company Access Code from your Authenticate.com portal settings.","api_key_label":"API Key","api_key_placeholder":"Enter your API key","company_access_code_label":"Company Access Code","company_access_code_placeholder":"Enter your company access code","connect_account":"Connect Account","connect_success":"Authenticate.com account connected successfully","connect_error":"Failed to connect Authenticate.com account","account_info":"Account Info","status":"Status","connected_date":"Connected","company_access_code":"Company Access Code","test_bgc":"Test Background Check","open_portal":"Open Authenticate.com Portal","test_page_title":"Test Background Check","test_page_description":"Submit a test background check and inspect the API response payload.","no_account_selected":"No account selected. Please navigate here from an Authenticate.com account page.","form_title":"Background Check Form","field_first_name":"First Name","field_last_name":"Last Name","field_middle_name":"Middle Name","field_dob":"Date of Birth","field_email":"Email","field_phone":"Phone","field_house_number":"House Number","field_street_name":"Street Name","field_city":"City","field_state":"State","field_zip_code":"ZIP Code","field_country_code":"Country Code","field_ssn":"SSN","optional":"optional","run_background_check":"Run Background Check","session_created":"Background check session created","session_create_error":"Failed to create background check session","create_session_response":"Create Session Response","check_status":"Check Status","get_test_result":"Get Test Result","status_response":"Session Status Response","test_result_response":"Test Result Response","status_check_error":"Failed to check session status","test_result_error":"Failed to get test result","show_raw_response":"Show Raw JSON","dob_placeholder":"MM/DD/YYYY","field_user_access_code":"User Access Code","field_status":"Status","field_has_criminal_record":"Has Criminal Record","field_has_watchlist_record":"Has Global Watchlist Record","field_face_match_score":"Face Match Score","field_id_verification_status":"ID Verification Status","field_is_ssn_verified":"SSN Verified","begin_verification":"Begin Verification","verify_no_token":"No verification token received from Authenticate.com","verify_error":"Failed to get verification token","verify_url_hint":"Verification opened in a new tab at:","validating_title":"Verifying credentials","validating_description":"Checking your API key with Authenticate.com…","validated_title":"Credentials verified","error_invalid_key_title":"Invalid API key","error_invalid_key_description":"The API key was rejected by Authenticate.com. Double-check it in your portal settings and try again.","error_unreachable_title":"Could not reach Authenticate.com","error_unreachable_description":"Authenticate.com is not responding. Please try again in a few minutes.","error_invalid_company_code_title":"Invalid Company Access Code","error_invalid_company_code_description":"The Company Access Code does not match the API key. Check your Authenticate.com portal settings and try again.","error_conflict_title":"Account already connected","error_conflict_description":"An Authenticate.com integration is already connected for this organization.","actions_title":"Actions","webhooks_title":"Webhooks","no_webhooks":"No webhook registered. Reconnect the account to register a webhook.","error_misconfigured_title":"Integration not configured","error_misconfigured_description":"Authenticate.com isn't fully set up in this environment yet, so your credentials can't be verified. Contact support."},"activity":{"title":"Activity","description":"Activity feed for {accountName}","empty":"No activity recorded yet","error":"Failed to load activity","load_more":"Load more","page_info":"Page {current} of {total}","filter_all":"All","filter_success":"Success","filter_pending":"Pending","filter_error":"Errors","filter_skipped":"Skipped","filter_stranded":"Stranded claims","view_payload":"View payload","direction_inbound":"Inbound","direction_outbound":"Outbound","error_label":"Error","duration_label":"Duration","reservation_id_label":"Reservation ID","correlation_id_label":"Correlation ID","close":"Close activity feed","category_sync":"Sync","category_webhook":"Webhook","category_push":"Push","category_lifecycle":"Lifecycle","category_command":"Command","category_access":"Access","category_auth":"Auth","actor_user":"User","actor_system":"System","actor_scheduler":"Scheduler","actor_webhook":"Webhook","artifact_empty":"No payload data available","event_pms_listings_sync_enqueued":"Listing sync queued","event_pms_listings_page_synced":"Listing page synced","event_pms_listings_sync_succeeded":"Listing sync completed","event_pms_listings_sync_failed":"Listing sync failed","event_pms_custom_fields_sync_succeeded":"Custom field sync completed","event_pms_custom_fields_sync_failed":"Custom field sync failed","event_pms_reservations_sync_enqueued":"Reservation sync queued","event_pms_reservations_page_synced":"Reservation page synced","event_pms_reservations_sync_succeeded":"Reservation sync completed","event_pms_reservations_sync_failed":"Reservation sync failed","event_pms_reviews_sync_enqueued":"Review sync queued","event_pms_reviews_page_synced":"Review page synced","event_pms_reviews_sync_succeeded":"Review sync completed","event_pms_reviews_sync_failed":"Review sync failed","event_pms_conversations_sync_enqueued":"Message sync queued","event_pms_conversations_page_synced":"Message page synced","event_pms_conversations_sync_succeeded":"Message sync completed","event_pms_conversations_sync_failed":"Message sync failed","event_pms_routing_repair_failed":"Channel routing repair failed","event_pms_webhooks_events_missing":"Webhook events missing at provider","event_pms_credentials_rotated":"Integration API key rotated","event_pms_integration_state_changed":"Integration status changed","event_pms_webhooks_silence":"Webhooks silent while reservations changed","event_device_routing_post_connect_failed":"Post-connection device setup failed","event_device_sync_started":"Device sync started","event_device_sync_succeeded":"Device sync completed","event_device_sync_failed":"Device sync failed"},"guestypay":{"sync_accounts":"Sync Accounts","syncing":"Syncing…","sync_success":"Payment accounts synced from Guesty","no_guesty":"No active Guesty integration found. Connect Guesty first.","no_accounts":"No payment accounts synced","no_accounts_description":"Click Sync Accounts to fetch your GuestyPay payment accounts.","provider_id":"Provider ID","search_placeholder":"Search providers…","columns":{"nickname":"Nickname","provider_id":"Provider ID","status":"Status"}},"brivo":{"connect_title":"Connect Brivo","connect_description":"Enter your Brivo account credentials to connect your access control system.","username_label":"Username","username_placeholder":"Enter your Brivo username","password_label":"Password","password_placeholder":"Enter your Brivo password","connect_account":"Connect Account","connect_success":"Brivo account connected successfully","validating_title":"Validating Credentials","validating_description":"Checking your Brivo credentials…","validated_title":"Credentials Validated","error_invalid_credentials_title":"Invalid Credentials","error_invalid_credentials_description":"The username or password you entered is incorrect. Please check your credentials and try again.","error_unreachable_title":"Service Unavailable","error_unreachable_description":"Unable to reach Brivo. Please check your connection and try again.","error_conflict_title":"Account Already Connected","error_conflict_description":"This Brivo account is already connected to your organization."},"hostaway":{"connect":{"title":"Connect Hostaway","description":"Enter your Hostaway Account ID and API key. We'll exchange them for an access token and keep it refreshed.","connect_button":"Connect Account","connecting":"Connecting…","account_id_label":"Account ID","account_id_placeholder":"90907","account_id_help":"Your numeric Hostaway Account ID, shown in Settings → Hostaway API.","api_key_label":"API key","api_key_placeholder":"0000000000000000000000000000000000000000000000000000000000000000","api_key_help":"In your Hostaway dashboard, open Settings → Hostaway API and create an API key. We store it encrypted and use it to mint access tokens for syncing."},"account_id_required":"Account ID is required","account_id_invalid":"Account ID must be numeric","api_key_required":"API key is required"},"slack":{"account_info":"Account Info","workspace_name":"Workspace Name","team_id":"Team ID","status":"Status","status_needs_reauth":"Photo uploads unavailable","needs_reauth_title":"Slack can't upload photos","needs_reauth_description":"Slack is still connected, but guest-ticket photos cannot be uploaded without the files:write permission. Reconnect Slack to grant it — everything else keeps working, and tickets still post without their photos.","last_synced":"Last Synced","created_at":"Created","default_account":"Default","set_as_default":"Set as Default","set_as_default_success":"Account set as default","set_as_default_failed":"Failed to set as default","actions":"Actions","channels_synced_count":"{count, plural, one {# channel synced} other {# channels synced}}","sync_channels":"Sync Channels","syncing_channels":"Syncing channels...","channels_title":"Channels ({count})","no_channels":"No channels synced","no_channels_description":"Click Sync Channels to fetch your Slack channels","search_channels_placeholder":"Search channels...","no_channels_match":"No channels match your search","channel_private":"Private","channel_archived":"Archived","channels_stale_warning":"Your channel list may be outdated. Sync to refresh.","notification_routing":"Notification Routing","notification_routing_description":"Map notification categories to Slack channels. When an event occurs, SuiteOp posts to the assigned channel.","configure_routing":"Configure Notification Routing","mapping_saved":"Notification routing saved","categories_routed_count":"of {total} categories routed","none_assigned":"Not configured","last_minute_threshold":"Last-Minute Reservation Threshold","last_minute_threshold_description":"Reservations with less notice than this are flagged as last-minute","last_minute_threshold_unit":"hours","category_noise":"Noise Alerts","category_noise_description":"Noise threshold exceeded on monitored devices","category_devices":"Device Operations","category_devices_description":"Device offline, low battery, reconnect, code push failures","category_upsells":"Upsell Activity","category_upsells_description":"New upsell opportunities and completions","category_guest_portal":"Guest Portal","category_guest_portal_description":"Guest portal submissions, support tickets, verification","category_reviews":"Reviews","category_reviews_description":"New guest reviews (negative reviews 4 stars or below)","category_check_in":"Check-In","category_check_in_description":"Guest check-in events","category_check_out":"Check-Out","category_check_out_description":"Guest check-out events","category_reservations":"Reservations","category_reservations_description":"New and last-minute reservations","category_custom":"Custom","category_custom_description":"Custom agent-triggered messages","sync_channels_success":"Channels synced successfully","sync_channels_failed":"Failed to sync channels","mention_info":"@mention @{displayName} in any channel or send a direct message to interact with Opal AI","enable_mention_channels":"Enable @Mention in Channels","enable_mention_channels_description":"Select channels to add the bot to. The bot must be in a channel to receive @mentions.","bot_active_channels_count":"{count, plural, one {Bot active in # channel} other {Bot active in # channels}}","join_channels_success":"Bot added to {count, plural, one {# channel} other {# channels}}","join_channels_failed":"Failed to add bot to {count, plural, one {# channel} other {# channels}}","leave_channels_success":"Bot removed from {count, plural, one {# channel} other {# channels}}","save_channel_changes":"Save Changes","no_changes":"No changes to save","private_channel_note":"Private channels require a manual /invite in Slack","manually_added":"Added from Slack","remove_bot_note":"To remove the bot from a channel, use /remove @SuiteOp in Slack","workspace_members":"Workspace members","workspace_members_description":"Match each Slack member to their SuiteOp account so Opal can answer them.","workspace_members_count":"{count, plural, one {# member} other {# members}}","workspace_members_empty":"No members found","workspace_members_error":"Could not load the Slack workspace members.","workspace_member_suggested":"Suggested: {name}","workspace_member_not_linked":"Not linked","workspace_member_linked":"Slack member linked","workspace_member_unlinked":"Slack member unlinked. A verified email match can link them again automatically.","workspace_member_link_failed":"Could not update the Slack member link"},"airbnb":{"vendor_token_missing":"Airbnb connections are temporarily unavailable. Our team has been notified — please try again shortly.","vendor_token_invalid":"SuiteOp could not authenticate with Hospitable Connect. Our team has been notified — please try again shortly.","permission_required":"You don’t have permission to manage integrations. Contact your organization administrator.","state_invalid":"This connection link is no longer valid. Start the Airbnb connection again from the integrations page.","customer_missing":"We couldn’t find the Connect record for this Airbnb connection. Start the connection again from the integrations page.","email_required":"Your SuiteOp account needs an email address before you can connect Airbnb. Add one to your profile and try again.","no_channel_connected":"Airbnb hasn’t confirmed this connection yet. If you cancelled the authorisation, or this Airbnb account is already connected elsewhere, start again from the integrations page.","channel_already_connected":"This Airbnb account is already connected to another account in your organization.","account_not_pending":"This Airbnb connection can no longer be completed — the account was disconnected or has expired. Start the connection again from the integrations page.","account_not_resumable":"Our team set up this Airbnb connection, so it can’t be resumed here. It should finish shortly — contact support if it doesn’t.","account_already_active":"This Airbnb connection has already finished — it’s now active.","account_busy":"This Airbnb connection is busy finishing another update. Wait a moment, then check again.","routing_ownership_conflict":"This Airbnb connection, or one of its listing channels, is registered to a different SuiteOp workspace. Contact support to have it released, then start the Airbnb connection again from the integrations page.","connect":{"title":"Connect Airbnb","description":"Connect your Airbnb account directly to SuiteOp through Hospitable Connect.","help_redirect":"You’ll be sent to Hospitable to authorise your Airbnb account. Sign in with the Airbnb account that owns the listings you want in SuiteOp.","help_link_expiry":"The authorisation link is valid for five minutes, so finish in one go. If it expires, simply start again.","help_owner_only":"Only listings where your Airbnb user is the owner are imported. Co-hosted listings won’t appear — the owner has to connect them from their own Airbnb account.","help_vs_hospitable":"This connects Airbnb directly. If you manage your properties in Hospitable, use the separate Hospitable integration instead.","connect_button":"Continue to Airbnb","redirecting":"Redirecting to Airbnb…","start_failed":"Could not start the Airbnb connection. Please try again."},"callback":{"title":"Connecting Airbnb","completing":"Finalizing the connection…","success":"Connected! Redirecting to your account…","finishing":"Almost there — Airbnb hasn’t confirmed the connection yet.","finishing_hint":"Airbnb hasn’t confirmed the connection yet — wait a moment and check again. If it still doesn’t come through, start the connection again from the integrations page.","busy_hint":"Nothing was lost — the connection is still in progress. There is no need to start over.","denied":"Airbnb did not grant access. Please try again.","missing_params":"This connection link is missing required information. Start the Airbnb connection again from the integrations page.","complete_failed":"Could not finalize the Airbnb connection. Please try again.","check_again":"Check again","back_to_integration":"Open the Airbnb integration"},"pending":{"title":"This Airbnb connection was never finished","description":"The Airbnb authorization on Hospitable was not completed, so nothing is syncing yet. Resume to pick up where you left off, or disconnect to remove it.","resume_action":"Resume connection"}},"hospitable":{"connect":{"title":"Connect Hospitable","description":"Connect your Hospitable account via OAuth to sync properties, reservations, and reviews.","help":"We use OAuth 2.0 — no password required. You will be redirected to Hospitable to approve access.","help_redirect":"After approving, you will be brought back to SuiteOp automatically.","connect_button":"Continue with Hospitable","redirecting":"Redirecting to Hospitable…"},"webhook_banner":{"title":"Webhook URL (reserved by SuiteOp)","description":"Hospitable delivers events to this URL for the current environment. It is registered on the SuiteOp OAuth app and should not be changed."}},"pms_oauth":{"callback":{"title":"Connecting {provider}","exchanging":"Finalizing the connection…","success":"Connected! Redirecting to your account…","denied":"{provider} did not grant access. Please try again.","missing_params":"OAuth callback is missing required parameters.","exchange_failed":"Could not finalize the {provider} connection. Please try again.","error_hint":"Something went wrong. Please close this tab and try again from the integrations page.","unsupported_provider":"This integration does not use the OAuth connect flow."}},"quick_actions":{"diagnose_failures":{"label":"Diagnose failures","prompt":"Look at the recent integration activity for this provider and surface any failures or stuck syncs."},"last_sync":{"label":"Last sync status","prompt":"When was the last successful sync for this integration and what was synced?"}},"mews":{"access_token_required":"Access token is required","platform_address_invalid":"Enter a valid Mews platform address starting with https://","services_required":"Pick at least one service to sync","rate_budget_exhausted":"Too many recent requests to Mews for this account. Wait a moment and try again.","connect":{"title":"Connect Mews","description":"Paste the access token Mews issued to SuiteOp for this property, then choose which services to sync.","access_token_label":"Access token","access_token_placeholder":"00000000000000000000000000000000-0000000000000000000000000000000","access_token_help":"In Mews, open Marketplace → SuiteOp → Integration and copy the access token issued for this property. We store it encrypted and never show it again.","platform_address_label":"Platform address","platform_address_placeholder":"https://api.mews.com","platform_address_help":"Leave empty for the production Mews platform. Only change this if Mews gave you a different address, such as the demo platform.","services_label":"Services to sync","services_help":"Pick only the accommodation services whose bookings are guest stays. Mews also sells parking, restaurants, tours and meeting rooms as reservable services — anything you leave unselected is never synced, and selecting nothing means no reservations are imported.","services_placeholder":"Select services","services_loading":"Loading services…","services_empty":"No reservable services found for this property.","connect_button":"Connect Account","connecting":"Connecting…","success_toast":"Successfully connected Mews","services_load":"Load services from Mews","services_error":"Could not read services with this token. Check the token, or enter service IDs manually below.","services_unnamed":"Unnamed service","services_stay_badge":"Guest stays","services_not_stay_badge":"Not accommodation","services_summary":"{count, plural, one {# category} other {# categories}} · {types}","services_manual_toggle":"Enter service IDs manually"}},"sync_runs":{"tab_label":"Sync activity","title":"Scheduled runs","description":"Every scheduled sync — when it ran, how much it moved, and what failed.","empty":"No scheduled run has been recorded yet.","showing_recent":"Showing the {count} most recent runs — older runs are not listed here","column_status":"Status","column_job":"Job","column_started":"Started","column_duration":"Duration","column_moved":"Moved","moved_summary":"{written} written of {seen} seen","dropped":"{count} dropped","failure_detail":"Failure detail","retry":"Retry","retry_queued":"Retry queued — the new run appears once a worker picks it up.","retry_failed":"Could not retry this run.","status_running":"Running","status_succeeded":"Succeeded","status_partial":"Partial","status_failed":"Failed","status_cancelled":"Cancelled","status_stale":"Stale","kind_pms_reconcile_reservations":"Reservation cross-check (all connections)","kind_pms_reconcile_account":"Reservation cross-check (single connection)","kind_pms_sync_listings":"Listing sync","kind_pms_sync_reservations":"Reservation sync","kind_pms_sync_conversations":"Message sync","kind_pms_reconcile_reviews":"Review cross-check (all connections)","kind_pms_reconcile_conversations":"Message cross-check (all connections)","kind_pms_reconcile_account_conversations":"Message cross-check (single connection)","kind_pms_sync_reviews":"Review sync","kind_pms_ical_refresh":"Calendar feed refresh","kind_device_webhook_inbox":"Device event intake","kind_device_code_reconcile":"Access code cross-check","kind_device_code_verify":"Access code verification","kind_device_code_activation_dispatch":"Access code activation check","kind_device_health_refresh":"Device health refresh","kind_integration_health_check":"Connection health check","kind_netatmo_poll":"Netatmo device sync","kind_smartthings_pat_poll":"SmartThings device sync (token connections)","kind_payment_reconcile":"Payment cross-check","kind_billing_subscription_reconcile":"Subscription cross-check","kind_sync_window_refresh":"Sync window refresh","kind_translation_content_reconciliation":"Translation cross-check","kind_portal_branding_kv_reconcile":"Guest portal branding refresh","kind_metered_usage_poster":"Usage reporting","kind_mirror_outbox":"Data mirror delivery","panel_error_title":"Sync activity unavailable","panel_error_description":"This connection's run history could not be loaded. Try again shortly."},"listing_mapping":{"tab_label":"Mapping","title":"Listing mapping","description":"Which provider listing each property pulls from. An unmapped listing keeps receiving reservations that nothing local claims.","empty":"No listings match this filter.","search_placeholder":"Search listings…","filter_unmapped":"Unmapped only","filter_mapped":"Mapped only","filter_all":"All listings","column_listing":"Listing","column_provider_id":"Provider ID","column_property":"Property","pick_property":"Map to a property…","map":"Map","unmap":"Unmap","mapped":"Listing mapped.","unmapped":"Listing unmapped.","map_failed":"Could not map this listing.","unmap_failed":"Could not unmap this listing.","panel_error_title":"Mapping unavailable","panel_error_description":"The listing mapping could not be loaded. Try again shortly.","not_mapped":"Not mapped","showing_count":"Showing {shown} of {total} listings — narrow the search to see the rest","properties_error":"The property list could not be loaded — mapping is unavailable until it can be read.","properties_truncated":"Showing the first {shown} of {total} properties — search to find the rest.","filter_label":"Filter listings"}},"integration_diagnostics":{"tab_label":"Diagnostics","panel_description":"Live health signals for this integration. Updates automatically every 30 seconds.","panel_error_title":"Unable to load diagnostics","panel_error_description":"Something went wrong rendering the diagnostics panel. Reload the page or try again in a minute.","query_error_title":"Could not load this signal","status_ok":"OK","status_warn":"Warning","status_error":"Error","checked_at":"Last checked {time}","loading":"Loading…","never":"Never","none":"None","empty":"No data","token":{"title":"Token status","description":"Authentication credentials for this account.","has_token_true":"Access token present","has_token_false":"No access token stored","undecryptable_short":"Stored token undecryptable","undecryptable_title":"Stored access token cannot be decrypted","undecryptable_description":"This usually means the encryption key rotated or the stored ciphertext is corrupted. Reconnect the account to re-encrypt a fresh token.","type_label":"Auth type","type_oauth_client_credentials":"OAuth client credentials","type_refresh_token":"OAuth refresh token","type_link":"Linked account","type_static_token":"Long-lived token","type_unknown":"Unknown","expires_at":"Expires at","expires_in":"Expires in","expires_in_seconds":"{seconds, plural, one {# second} other {# seconds}}","expires_in_minutes":"{minutes, plural, one {# minute} other {# minutes}}","expires_in_hours":"{hours, plural, one {# hour} other {# hours}}","expires_in_days":"{days, plural, one {# day} other {# days}}","expired":"Expired","never_expires":"No expiry","last_refreshed_at":"Last refreshed","last_refresh_error":"Last refresh error","credential_rejected_label":"Credential rejected","credential_rejected_value":"The provider rejected this credential on {time}. Contact support if this persists."},"webhooks":{"title":"Webhook health","description":"Inbound webhook subscriptions and recent activity.","subscriptions_count":"{count, plural, one {# subscription} other {# subscriptions}}","secret_present":"Signed","secret_missing":"Unsigned","no_subscriptions":"No webhook subscriptions registered","platform_managed_label":"Managed at the OAuth app level","platform_managed_description":"Hospitable delivers events through a single platform-wide webhook handled by the SuiteOp edge gateway. Nothing is registered per account — the recent inbound events below are the best signal that routing is healthy.","recent_events_title":"Recent inbound events (last 7 days)","recent_events_empty":"No inbound events recorded in the last 7 days","event_last_seen":"Last received {time}","event_count_7d":"{count, plural, one {# delivery} other {# deliveries}} in 7 days","message_events_ok":"Guest-message webhooks: last ingested {time}","message_events_missing":"No inbound guest-message webhook has been ingested in the last 7 days despite {count, plural, one {# stay} other {# stays}} overlapping that window — check the provider's message webhook subscription, and the integration error log for rejected deliveries"},"push":{"title":"Push health","description":"Outbound operations over the last 24 hours.","push_enabled":"Push enabled","push_disabled":"Push is disabled — outbound operations are turned off for this account.","total_last_24h":"Total last 24h","label_success":"Success","label_failed":"Failed","label_skipped":"Skipped","empty":"No push activity in the last 24 hours.","first_error_sample":"Latest error"},"listing_parity":{"title":"Listing parity","description":"Compares listings stored locally against the PMS.","local_count":"Local listings","remote_count":"Remote listings","diff":"Difference","remote_unavailable":"Could not reach PMS to fetch listing count.","sampled_at":"Sampled {time}"},"reservation_parity":{"title":"Reservation parity","description":"Compares reservations checking in over the last 30 days, stored locally against the PMS.","local_count":"Local reservations","remote_count":"Remote reservations","diff":"Difference","remote_unavailable":"Could not reach PMS to fetch reservation count.","reason":"Details","reason_axes_not_comparable":"{provider} counts cannot be compared: this connector's reservation count is not scoped to a check-in window over the synced listings, so a difference would measure the two groups rather than the sync.","reason_no_fetch_registered":"No reservation fetch is registered for the {provider} connector.","reason_scope_over_limit":"The property scope of {count} listings exceeds the {limit}-property single-request limit.","reason_walk_budget_exhausted":"Counting the remote reservations stopped after {pages} pages / {seconds} seconds, so no remote total is available for this check.","reason_count_mismatch":"Local and remote differ by {diff} over the same check-in window and listing scope.","reason_remote_failed":"Could not reach the PMS: {detail}","sampled_at":"Sampled {time}"},"signature_stats":{"title":"Webhook signature verification","description":"Rejected signatures detected by the webhook guard.","rejections_last_hour":"Rejections (last hour)","rejections_last_24h":"Rejections (last 24h)","by_reason_title":"By reason","reason_invalid_hmac":"Invalid HMAC","reason_stale_timestamp":"Stale timestamp","reason_missing_or_unverifiable":"Missing or unverifiable","reason_unknown":"Unknown","none":"No rejected signatures in the last 24 hours."},"config":{"title":"Configuration","description":"Account-level flags and provider configuration.","push_enabled_label":"Push enabled","account_status_label":"Account status","true":"Yes","false":"No","empty":"No provider configuration set."},"runner":{"title":"Live diagnostics (SuiteOp staff)","description":"Creates and cancels a disposable reservation to validate the entire integration end-to-end. Takes up to 60 seconds.","run_button":"Run live diagnostics","running":"Running…","last_run":"Last run {time}","overall_success":"All steps passed","overall_failure":"Some steps failed","overall_warning":"Completed with warnings","mutation_error_title":"Diagnostics run failed before completing","step_duration":"{ms}ms","status_pass":"Pass","status_fail":"Fail","status_skipped":"Skipped","status_warn":"Warning","no_detail":"No detail provided","provider_detail_label":"Raw response from the provider","unsupported_provider":"Live diagnostics only support Guesty accounts today. The flow creates and cancels a real reservation through Guesty-specific endpoints, so it cannot run for this provider.","detail":{"unknown_provider":"Unknown provider “{provider}” — no connector is registered for it.","provider_not_supported":"Live diagnostics do not support {provider} yet; only Guesty is implemented.","no_access_token":"No access token available — reconnect the account first.","webhooks_unsupported":"This provider does not expose webhook management.","no_webhooks_registered":"The provider has no webhooks registered for this account.","webhooks_no_match":"The provider has {providerTotal, plural, one {# webhook} other {# webhooks}}, but none match the webhook ids stored on this account.","webhooks_matched":"{matched} of {providerTotal} provider webhooks match the ids stored on this account.","webhooks_events_missing":"{matched, plural, one {# matching webhook is} other {# matching webhooks are}} registered, but {missingCount, plural, one {# event we subscribe to is} other {# events we subscribe to are}} missing at the provider: {missingEvents}. Press Re-subscribe to restore the subscription.","no_listings":"The provider returned no listings.","listings_fetched":"Fetched {count, plural, one {# listing} other {# listings}}; using “{listing}”.","custom_fields_unsupported":"This provider does not expose custom fields.","custom_fields_none":"The provider returned no custom fields and none are configured on this account.","custom_fields_summary":"The provider returned {count, plural, one {# custom field} other {# custom fields}}; {configuredCount, plural, one {# is} other {# are}} configured on this account.","no_active_listing":"No active listing available — the fake reservation cannot be created.","provider_rejected_create":"The provider rejected the reservation create with HTTP {httpStatus}.","create_response_missing_id":"The provider accepted the create but returned no reservation id.","reservation_created":"Created reservation {reservationId} (confirmation code {confirmationCode}).","missing_external_reservation_id":"No external reservation id — the create step did not populate the run context.","fetch_reservation_unsupported":"This provider's connector cannot fetch a single reservation.","synced_via_webhook":"Synced back by webhook as reservation {reservationId}.","synced_via_fetch":"No webhook arrived within {timeoutMs}ms; synced back by direct fetch as reservation {reservationId}.","inbox_unsupported":"This provider does not expose inbox messaging.","no_conversation":"The provider created no conversation for the fake reservation, so there is nothing to send to.","message_no_external_id":"The provider accepted the message but returned no external message id.","message_round_tripped":"Message {externalMessageId} round-tripped back through the webhook with delivery status {deliveryStatus}.","message_delivery_failed":"Message {externalMessageId} was dispatched but its inbox row landed as failed.","message_not_ingested":"Message {externalMessageId} was dispatched, but no inbox row appeared for conversation {conversationId} within {timeoutMs}ms.","no_local_reservation":"No local reservation row to push against.","no_baseline_check_in_date":"No baseline check-in date from the create step.","no_linked_property":"The fake reservation has no linked property, so there is nothing to update.","access_code_pushed_no_mirror":"Access code pushed ({activityStatus}); no custom-field mirror is configured on this account.","access_code_pushed_with_mirror":"Access code pushed ({activityStatus}) and the custom-field mirror was enqueued ({mirrorStatus}).","cleaning_status_verified":"Cleaning status pushed ({activityStatus}); the local value was still “clean” {timeoutMs}ms later, so nothing echoed back.","cleaning_status_echo_regression":"Echo-loop regression: the local cleaning status is “{cleaningStatus}” after the push instead of “clean”.","no_reservation_to_cancel":"No fake reservation id to cancel.","provider_rejected_cancel":"The provider rejected the cancellation with HTTP {httpStatus}.","cancelled_via_connector":"The fake reservation was cancelled through the connector.","cancelled_via_http":"The fake reservation was cancelled over raw HTTP (status {httpStatus}).","activity_recorded":"The {eventType} activity log recorded status {activityStatus}.","activity_failed":"The {eventType} activity log recorded an error.","activity_skipped":"The {eventType} activity was skipped.","activity_timeout":"No {eventType} activity log row appeared within {timeoutMs}ms.","run_timed_out":"The diagnostics run exceeded its {timeoutMs}ms budget.","provider_error":"The provider returned an error.","unexpected_error":"The step failed with an unexpected error."},"steps":{"connect":"Connect & refresh token","list_webhooks":"List webhooks","get_listings":"Fetch listings","list_custom_fields":"List custom fields","create_reservation":"Create fake reservation","sync_back":"Sync reservation back","send_message":"Send inbox message","update_dates":"Push reservation dates","push_guest_update":"Push guest details","push_access_code":"Push access code (+ custom-field mirror)","push_charge":"Push charge","update_cleaning_status":"Push cleaning status","cancel_reservation":"Cancel fake reservation"}}},"integrations":{"page_title":"Integrations","page_description":"Connect third-party services to your SuiteOp workspace.","oauth":{"authenticating":"Authenticating…","creating_account":"Creating your account…","success":"Connected successfully!","redirecting":"Redirecting…","error_title":"Connection Failed","error_description":"Something went wrong while connecting your account.","try_again":"Try Again","unsupported_provider":"This provider uses a different connection flow."},"oauth_redirect":{"forwarding":"Finishing connection…","sign_in":"Sign in","back_to_integrations":"Back to integrations","errors":{"provider_denied":{"title":"Authorization declined","description":"The provider reported that the authorization was cancelled or denied. Please try connecting again."},"missing_params":{"title":"Missing authorization data","description":"The callback is missing required parameters. Please start the connection again from the integrations page."},"unknown_region":{"title":"Session not found","description":"We couldn't determine your workspace region. Please sign in again and retry the connection."},"forwarding_failed":{"title":"Couldn't finish connecting","description":"We couldn't forward the authorization to the correct region. Please try again from the integrations page."},"oauth_state_expired":{"title":"Authorization expired","description":"This authorization link has expired or was already used. Please start the connection again from the integrations page."},"generic":{"title":"Connection failed","description":"We couldn't finish connecting your account. Please try again from the integrations page."}}},"docusign":{"title":"DocuSign","description":"Connect your DocuSign account directly to SuiteOp","connect":"Connect","connected":"Connected","accounts_connected":"{count} {count, plural, one {account} other {accounts}} connected","disconnect":"Disconnect","dialog":{"title":"Connect DocuSign","description":"Link your DocuSign account to send documents for e-signature directly from SuiteOp.","connect_button":"Connect to DocuSign"},"disconnect_confirm":{"title":"Disconnect DocuSign","description":"Are you sure you want to disconnect your DocuSign account? Templates and webhook configuration will be removed."},"detail":{"page_title":"DocuSign Integration","account_info":"Account Info","account_name":"Account Name","account_email":"Email","account_id":"Account ID","status":"Status","connected_at":"Connected","last_synced":"Last Synced","never_synced":"Never","webhook":"Webhook","webhook_configured":"Webhook configured","webhook_not_configured":"No webhook configured","create_webhook":"Create Webhook","manage_webhooks":"Manage Webhooks","webhook_dialog_title":"Webhooks","webhook_dialog_description":"Manage webhook configuration for real-time DocuSign updates.","connect_id":"Connect ID","events":"Events","no_webhook_description":"Create a webhook to receive real-time updates from DocuSign.","templates_title":"Templates","templates_count":"{count} {count, plural, one {template} other {templates}}","no_templates_title":"No synced templates","no_templates_description":"Sync your DocuSign templates to see them here.","sync_templates":"Sync Templates","syncing_templates":"Syncing…","template_signers":"{count} {count, plural, one {signer} other {signers}}","template_fields":"{count} {count, plural, one {field} other {fields}}"},"oauth":{"authenticating":"Authenticating with DocuSign…","creating_account":"Creating your account…","success":"Connected successfully!","redirecting":"Redirecting…","error_title":"Connection Failed","error_description":"Something went wrong while connecting your DocuSign account.","try_again":"Try Again"},"toast":{"connected":"DocuSign account connected","disconnected":"DocuSign account disconnected","webhook_created":"Webhook created","templates_synced":"Template sync started"}},"slack":{"description":"Team messaging with @mention AI assistant and real-time notifications"},"authenticate_com":{"description":"Automate background checks"},"zapier":{"description":"Connect your Zapier account directly to SuiteOp"},"documenso":{"description":"Connect your SuiteOp Sign Account"},"guest_admin":{"description":"Guest registration & authority reporting"},"viator":{"description":"Connect your Viator account directly to SuiteOp"},"stripe":{"description":"A fully integrated suite of payments products"},"guestypay":{"description":"Property-management-focused payments solution, integrated with Guesty"},"juspay":{"description":"Payment processing and orchestration platform"},"schlage":{"description":"Smart locks by Allegion — lock/unlock, battery monitoring, and device management"},"schlage_legacy":{"description":"Schlage smart locks connected via Seam"},"august":{"description":"August smart locks — direct integration with lock/unlock, PIN management, and webhooks"},"august_legacy":{"description":"August smart locks connected via Seam"},"netatmo":{"description":"Noise & environment monitoring with Air Quality Monitors and Weather Stations — noise, CO2, temperature, humidity"},"smartthings":{"description":"Samsung SmartThings hub — locks, thermostats, sensors, and switches"},"nest":{"description":"Google Nest thermostats — temperature control and monitoring"},"remotelock":{"description":"A new way to think about your property's doors"},"salto":{"description":"Smart lock automation for Salto"},"keynest":{"description":"Physical key pickup and drop-off with provider-generated collection codes"},"igloohome_direct":{"description":"Smart locks with offline PIN support and bridge connectivity"},"igloohome":{"description":"Smart lock connectivity from IglooHome via Seam"},"yale":{"description":"Yale smart locks — direct integration with lock/unlock, PIN management, and webhooks"},"yale_legacy":{"description":"Yale smart locks (North America) connected via Seam"},"yale_home":{"description":"Smart lock automation for Yale (Other)"},"ecobee":{"description":"Thermostat Automation"},"kwikset":{"description":"Smart lock automation with Kwikset"},"tt_lock":{"description":"Smart lock automation for TT Lock"},"nuki":{"description":"Smart lock automation for Nuki"},"omnitec":{"description":"Smart lock automation for gateway-connected Omnitec locks"},"tedee":{"description":"European smart door locks"},"lockly":{"description":"Smart locks"},"dormakaba":{"description":"Automate your entry system with Dormakaba"},"wyze":{"description":"Automate your entry system with Wyze"},"brivo":{"description":"Smart Home & Multifamily Home Automation"},"guesty":{"description":"Automates and streamlines every aspect of your rental business"},"airbnb":{"description":"Connect your Airbnb account directly to SuiteOp"},"hospitable":{"description":"Connect your Hospitable account directly to SuiteOp"},"hostaway":{"description":"Connect your Hostaway account directly to SuiteOp"},"hostify":{"description":"Connect your Hostify account directly to SuiteOp"},"ownerrez":{"description":"Connect your OwnerRez account directly to SuiteOp"},"uplisting":{"description":"Connect your Uplisting account directly to SuiteOp"},"lodgix":{"description":"Connect your Lodgix account directly to SuiteOp"},"lodgify":{"description":"Connect your Lodgify account directly to SuiteOp"},"smoobu":{"description":"Connect your Smoobu account directly to SuiteOp"},"beds24":{"description":"Connect your Beds24 account directly to SuiteOp"},"fantasticstay":{"description":"Connect your FantasticStay account directly to SuiteOp"},"hostfully":{"description":"Connect your Hostfully account to SuiteOp"},"avaibook":{"description":"Connect your Avaibook account to SuiteOp"},"cloudbeds":{"description":"Unified platform delivering 360-value across all aspects of your hotel"},"smily":{"description":"Automate your operation with Smily PMS"},"your_rentals":{"description":"Automate your operation with YourRentals"},"direct":{"description":"User-friendly software transforming STR management"},"hostex":{"description":"Connect your Hostex account to SuiteOp"},"zeevou":{"description":"Connect your Zeevou account to SuiteOp"},"track":{"description":"Connect your Track account to SuiteOp"},"resly":{"description":"Connect your Resly account to SuiteOp"},"elina":{"description":"Connect your Elina account to SuiteOp"},"streamline":{"description":"Import your properties and reservations from Streamline"},"tokeet":{"description":"Connect your Tokeet account to SuiteOp"},"ciirus":{"description":"Connect your Ciirus account to SuiteOp"},"hostfully_sandbox":{"description":"Connect your Hostfully (Sandbox) account to SuiteOp"},"avantio":{"description":"Connect your Avantio account to SuiteOp"},"homhero":{"description":"Connect your Homhero account to SuiteOp"},"bentral":{"description":"Connect your Bentral account to SuiteOp"},"ical":{"description":"Imports reservation dates from a calendar feed on a regular refresh. No guest contact details, no guest messaging, and no write-back to the channel."},"mews":{"description":"Cloud-based hospitality management platform"},"opera":{"description":"Oracle Hospitality OPERA property management system"},"calry":{"description":"PMS accounts connected through Calry"},"microsoft_teams":{"description":"Team messaging with @mention AI assistant and channel notifications"},"google_chat":{"description":"Workspace messaging with @mention AI assistant and space notifications"},"whatsapp":{"description":"Guest messaging with AI-powered replies and automated notifications"},"chat_link":{"confirm_title":"Connect your chat account","confirm_description":"Connect {platform} account {externalUserId} in {organizationName} to your signed-in SuiteOp account? Only continue if this is your chat account and you requested this link.","confirm_button":"Connect my account","connecting":"Connecting your chat account…","success_title":"Account connected","success_description":"Your {platform} account is now connected to {organizationName}. You can go back to {platform} and message the assistant.","go_to_dashboard":"Go to dashboard","expired_title":"This link is no longer valid","expired_description":"This link has expired or was already used. Message the assistant again to get a new one.","forbidden_title":"Wrong account","forbidden_description":"That workspace belongs to an organization you're not a member of. Sign in with the right account and open the link again.","forbidden_signed_in_as":"You're signed in as {email}.","switch_account":"Switch account","invalid_title":"This link isn't valid","invalid_description":"This link is incomplete or was mistyped. Send the assistant another message to get a new one.","error_title":"Something went wrong","error_description":"We couldn't connect your chat account. Please try again in a moment.","platform":{"slack":"Slack","microsoft_teams":"Microsoft Teams","google_chat":"Google Chat","whatsapp":"WhatsApp"}}},"mcp_servers":{"page_title":"Tools","page_description":"Add new actions to your agents by connecting external tools.","search_placeholder":"Search tools...","your_integrations":"Your tools","browse_integrations":"Browse tools","connect_button":"Connect","manage_button":"Manage","no_results":"No tools match your search.","tool_count_label":"{count, plural, one {# action} other {# actions}}","status":{"connected":"Connected","disconnected":"Disconnected","error":"Error"},"categories":{"all":"All","project_management":"Project Management","communication":"Communication","crm":"CRM","productivity":"Productivity","developer_tools":"Developer Tools","custom":"Custom"},"integrations":{"catalog":{"linear":{"name":"Linear","description":"Create and manage issues, projects, and cycles","api_key_label":"API Key","api_key_help":"Find this in Linear → Settings → API"},"notion":{"name":"Notion","description":"Create pages, update databases, and manage content","api_key_label":"Integration Token","api_key_help":"Create at notion.so/my-integrations"},"slack":{"name":"Slack","description":"Send messages, manage channels, and post updates","bot_token_label":"Bot Token","bot_token_help":"Find in Slack → App Settings → OAuth"},"github":{"name":"GitHub","description":"Create issues, manage PRs, and track repositories","token_label":"Personal Access Token","token_help":"Create at github.com/settings/tokens"},"zapier":{"name":"Zapier","description":"Bridge thousands of apps (QuickBooks, Google Sheets, Notion, Twilio, HubSpot, ...) through your Zapier account","server_url_label":"MCP Server URL","server_url_help":"Copy your server URL from Zapier's MCP settings page (mcp.zapier.com)","api_key_label":"Bearer Token","api_key_help":"Optional — only needed if your Zapier MCP server uses a separate bearer token instead of a URL-embedded secret"},"google_sheets":{"name":"Google Sheets","description":"Read and write spreadsheet data","credentials_label":"Service Account JSON","credentials_help":"Download from Google Cloud Console"},"guesty":{"name":"Guesty","description":"Property management system tool","client_id_label":"Client ID","client_id_help":"Find in Guesty → Settings → API","client_secret_label":"Client Secret","client_secret_help":"Find in Guesty → Settings → API"},"custom":{"name":"Custom MCP Server","description":"Connect any MCP-compatible server with a URL","url_label":"Server URL","url_help":"The SSE or HTTP endpoint of your MCP server","auth_type_label":"Authentication","auth_none":"No auth","auth_bearer":"Bearer token","auth_api_key":"API key","bearer_token_label":"Bearer token","bearer_token_help":"Sent as an Authorization header with the Bearer prefix added for you — paste just the token.","api_key_label":"API key","api_key_help":"Sent as-is as the value of the header above — no prefix is added.","header_name_label":"Header name","header_name_help":"The header the key is sent under. Keep Authorization, or use your server's name, e.g. X-API-Key."}}},"connect_dialog":{"title":"Connect {name}","connecting":"Connecting and discovering actions...","connection_failed":"Could not connect. Please check your credentials.","permission_denied":"Your plugin wasn't connected — it needs the Manage organization permission.","connect_button":"Connect","success_title":"Connected!","success_description":"{count, plural, one {Found # action.} other {Found # actions.}}","success_actions":"{count, plural, one {# action has been added to your agents.} other {# actions have been added to your agents.}}","done_button":"Done"},"detail":{"subtitle":"Manage this tool","available_actions":"Available Actions","tool_summary":"{enabled} of {total} actions enabled","refresh_tools":"Refresh","no_tools":"No actions discovered yet. Use Refresh to scan for actions.","danger_zone":"Danger Zone","disconnect_warning":"Disconnecting this tool will remove all its actions. Agents using these actions may break.","disconnect_button":"Disconnect","disconnected":"Tool disconnected","search_tools":"Search tools...","rename":"Rename","rename_saved":"Tool renamed","rename_empty_error":"Name cannot be empty","rename_reserved_error":"This name is reserved for a catalog tool"},"detail_page":{"back":"Back to Tools","not_found":"Tool not found.","test_connection":"Test Connection","test_success":"Connection successful","test_failed":"Connection failed","param_count":"{count, plural, one {# param} other {# params}}"},"tools_refreshed":"Actions refreshed","cancel":"Cancel","back":"Back","save":"Save","logo_label":"Tool logo","logo_saved":"Logo saved","logo_save_error":"Could not save the logo"},"member":{"transfer_ownership":{"action":"Transfer ownership","title":"Transfer ownership to {name}?","description":"{name} becomes the owner of this organization and you become an Admin. You cannot undo this yourself — only the new owner can transfer ownership back.","billing_notice":"Billing does not move: you stay the billing contact for this organization.","confirm_label":"Type {email} to confirm","email_mismatch":"That email address does not match.","confirm_button":"Transfer ownership","success":"{name} is now the owner of this organization.","error_forbidden":"Only the current owner can transfer ownership, and only to an active Admin.","error_account_not_set_up":"This member must finish setting up their account before they can become the owner.","error_not_found":"That member is no longer part of this organization.","error_conflict":"Ownership changed while you were confirming. Reload the page and try again.","error_generic":"Ownership could not be transferred. Please try again."},"empty_message":"No members found","view_profile":"View Profile","empty_description":"Invite your first team member to get started.","search_placeholder":"Search members…","status":{"invited":"Invited","active":"Active","inactive":"Inactive"},"unknown_member":"Unknown","type_badge_internal":"Internal","side_panel":{"open_full_page":"Open full page","close":"Close","loading_member":"Loading member","dept_count":"{count, plural, =0 {No departments} one {# department} other {# departments}}","suspended_badge":"Suspended","access_summary_desc":"Editable in full page — groups + per-property checklist.","edit_property_access":"Edit property access","show_code":"Show code","hide_code":"Hide code","no_code_assigned":"No code assigned yet.","custom_perms_full_page":"Per-permission editing for the Custom role lives on the full page.","edit_custom_permissions":"Edit custom permissions"},"tab_external":"External","filter":{"status":"Status","department":"Department","property_group":"Property Group","role":"Role"},"invite_member":"Invite Member","page_title":"Members","columns":{"departments":"Departments","last_seen":"Last Seen","joined":"Joined","status":"Status","scope_all":"All properties","agent_paused":"Paused","scope_none":"No access","scope_groups_count":"{count, plural, one {# group} other {# groups}}","last_seen_never":"Never","last_seen_unavailable":"Not available","scope_access":"Property Access","member":"Member","scope_properties_count":"{count, plural, one {# property} other {# properties}}","role":"Role","agent_always_on":"24/7"},"type_badge_external":"External","detail":{"not_found_description":"This member does not exist or you do not have access.","property_group_access":"Property Group Access","covered_by_group":"via {groupName}","joined":"Joined","randomize_code":"Randomize","revoke_all_access":"Revoke All Access","department_name":"Department","properties_load_error":"Failed to load properties.","load_failed":"Failed to load member","no_results":"No results found.","department_member":"Member","scope_all_label":"Access all properties","last_active":"Last Active","suspend_member":"Suspend Member","private_code_disabled":"Access codes are disabled for this member.","properties_placeholder":"Search properties…","reset_password_confirm":"Are you sure you want to send a password reset email to {name}?","permissions_auto":"Permissions are automatically managed by the {role} role.","permissions_drift":"This member's saved permissions no longer match the {role} role.","permissions_drift_missing":"Not granted: {permissions}","permissions_drift_extra":"Granted beyond the role: {permissions}","permissions_drift_fix":"The boxes show what this member can actually do.","permissions_drift_reset":"Reset to {role} defaults","permissions_drift_reset_unavailable":"Your current access can't restore the {role} defaults here. Ask an organization administrator who can manage this member, or contact support.","reset_password":"Reset Password","search_permissions":"Search permissions…","suspend_title":"Suspend {name}","properties_label":"Properties","tab":{"general":"General","compensation":"Compensation","departments":"Departments","access":"Access","auto_assign":"Auto-assign","permissions":"Permissions"},"hierarchy_warning":"You cannot manage members with equal or higher roles.","suspended_profile_read_only":"This member is suspended, so these fields cannot be edited.","role_label":"Role","revoke_confirm":"This will revoke {name}'s staff access codes. Codes added manually on a device are not affected.","manage_permissions":"Manage Permissions","change_code":"Change Code","not_found":"Member not found","department_manager":"Manager","scope_all_description":"This member can access all properties in the organization.","phone":"Phone","scope_all_owner_admin":"Owners always have access to all properties.","email":"Email","property_groups_label":"Property Groups","first_name":"First Name","auto_assign_title":"Auto-assignment rules","auto_assign_description":"How this member participates in auto-assignment, per department. Skills are global; availability and caps are per-department.","reset_password_description":"Send a password reset email to this member.","last_name":"Last Name","property_groups_placeholder":"Search property groups…","code_assigned":"New code assigned","assigned_departments":"Assigned Departments","enable_access_code":"Enable access code","save_changes":"Save Changes","property_group_load_error":"Failed to load property groups.","private_code":"Access Code","danger_zone":"Danger Zone","code_collision":"This code is already taken. Please choose another one.","suspend_description":"This will suspend the member, revoke all access codes, clear permissions, and remove property group access.","primary_language":"Primary language","other_languages":"Other languages spoken","other_languages_hint":"Used to route guest conversations to someone who can reply in the guest's language.","show_code":"Show code","hide_code":"Hide code","code_generation_pending":"Generating a secure access code…","resync_access_codes":"Re-sync access codes","show_all_accesses":"{count, plural, =0 {Show all accesses (0)} one {Show all accesses (#)} other {Show all accesses (#)}}","unnamed_device":"Unnamed device","redelete_code":"Delete again","reinstall_code":"Reinstall","no_device_accesses":"No device access codes yet.","change_code_description":"Enter a 4–8 digit code or let SuiteOp generate one.","code_placeholder":"4–8 digits","generate_random_code":"Generate random code","access_list_error":"Could not load device access codes. Existing codes may still be installed.","access_still_live":"This code may still open the lock — it could not be removed remotely.","access_list_truncated":"Showing the first {shown} of {total}."},"type_badge_agent":"Agent","invite":{"submit_bulk":"Import Members","description":"Add a new member to your organization.","email":"Email","first_name":"First Name","upload_csv":"Upload CSV","bulk_note":"Settings from Access, Departments, and Permissions tabs will apply to all imported members.","mode_bulk":"Bulk Import","back":"Back","last_name":"Last Name","mode_individual":"Individual","errors_found":"{count, plural, one {# error found} other {# errors found}}","title":"Invite Member","submitting":"Inviting…","next":"Next","submit":"Invite Member","reupload":"Re-upload File","valid_rows":"{count, plural, one {# valid member} other {# valid members}}","tab":{"general":"General","departments":"Departments","access":"Access","permissions":"Permissions"},"toast":{"validation_failed":"Please fix the errors below before sending the invite."},"download_template":"Download Template","import_failures":{"title":"{count, plural, one {# row was not imported} other {# rows were not imported}}","created":"{count, plural, one {# member was imported} other {# members were imported}}","entry":"Line {line} ({email}) — {reason}"},"import_error":{"duplicate_in_batch":"This email appears more than once in the file","already_member":"Already an active member of this organization","role_not_assignable":"You cannot assign or manage this role","unknown":"Could not be imported — try again, or contact support if it keeps happening"},"csv":{"line":"Line {line}: {message}","empty_file":"The file is empty.","unterminated_quote":"A quoted value is never closed, so the rest of the file cannot be read. Fix the quotes and upload it again.","malformed_quote":"A quote in this line is misplaced, so the values around it cannot be read correctly. Fix the quoting and upload the file again.","short_columns":"Expected {expected} columns ({columns}).","missing_field":"A required field is missing.","invalid_email":"Invalid email address: {email}"}},"toast":{"suspended":"Member suspended","imported":"{count, plural, one {# member imported} other {# members imported}}","role_updated":"Role updated","code_assigned":"Access code assigned","invited":"Member invited","resent":"Invitation resent","scopes_updated":"Assignments updated","compensation_updated":"Compensation updated","access_revoked":"Staff access codes revoked","password_reset_sent":"Password reset email sent","password_reset_use_forgot":"Couldn't send the reset from here — ask the member to use “Forgot password” on the sign-in page","password_reset_failed":"Failed to send password reset email","compensation_failed":"Failed to update compensation","name_updated":"Member name updated","access_enabled":"Access code enabled","access_resync_started":"Access code re-sync started","import_partial":"{created} imported · {failed} failed","import_all_failed":"{count, plural, one {# row could not be imported} other {# rows could not be imported}}"},"permission_section":{"inbox":"Inbox","access_codes":"Access & Lock Codes","account":"Account","integrations":"Integrations","workflows":"Agents","tasks":"Tasks","payments":"Payments","organization":"Organization","users":"Users","analytics":"Analytics & Logs","booking_engine":"Booking Engine","dashboard":"Dashboard","properties":"Properties & Groups","portals":"Portal Settings","devices":"Devices","events":"Events","task_templates":"Task Templates","shifts":"Shifts & Time Tracking","reservations":"Reservations","guest_ids":"Guest IDs"}},"migration":{"page_title":"Account migration","no_permission":"You do not have permission to view account migration.","stages_notice":"Connect, Disposition and Dry run are live. The later stages have no panel yet.","stepper":{"aria_label":"Migration stages","step_of":"Step {current} of {total}: {stage}","view_stage":"View {stage} — {state}","select_stage":"Select a stage to view","state_done":"Completed","state_current":"In progress","state_upcoming":"Not started","state_blocked":"Blocked","state_failed":"Failed","state_stalled":"Stalled"},"stages":{"connect":"Connect","disposition":"Disposition","dry_run":"Dry run","commit":"Commit","bindings":"Bindings","parity":"Parity","verify":"Verify","accept":"Accept","delta":"Delta","cutover":"Cutover","disable_v1":"Disable V1"},"panel":{"read_only_notice":"Read-only view of a completed stage.","coming_soon":"This stage's panel is not built yet.","not_built_badge":"Not built"},"connect":{"live_notice":"This step is live — it reads and writes this account's real V1 binding.","intro":"Bind this account to the V1 organization it is migrating from. Enter the V1 organization ID and the email address of its owner; we look the pair up in V1 and show you the organization name before anything is written.","legacy_bubble_id_label":"V1 organization ID","legacy_bubble_id_hint":"Copy it from the V1 app or from the support ticket.","owner_email_label":"V1 owner email","owner_email_hint":"Must be an owner or admin of that V1 organization.","lookup_submit":"Look up this organization","begin_title":"Start the migration run","begin_intro":"Every step of a migration is recorded on a run, so this account needs one before it can be bound. Starting a run does nothing else: no V1 data is read, and nothing in this account is changed.","begin_submit":"Begin migration","begin_previous_stalled":"The previous migration run went quiet and was closed automatically. Starting again is safe — nothing was written, and a binding that was already made is permanent and unaffected.","confirm_title":"Is this the right organization?","confirm_intro":"Check the name against the account you are migrating.","org_name_label":"V1 organization name","no_org_name":"This V1 organization has no name.","org_name_refresh_failed":"We could not read the organization name from V1 again, so the name above may be out of date. Look the pair up once more before you confirm it.","irreversible_warning":"Binding is permanent. This account cannot be re-pointed at another V1 organization afterwards, and this V1 organization cannot be bound anywhere else.","confirm_submit":"Confirm and bind","change_details":"Change these details","bound_title":"Bound to V1","bound_confirmed_at_label":"Confirmed","bound_name_unconfirmed":"Not recorded — this binding has not been confirmed on a run.","bound_immutable_notice":"This binding is permanent and cannot be changed here.","bound_unconfirmed_notice":"This account is bound, but no confirmation record was found for it. Do not start a run — ask engineering to check it.","blocked_title":"Binding is not available yet","blocked_no_run":"This account has no active migration run, and the binding has to be recorded on one. Your staff account cannot start a run — ask a SuiteOp engineer to start one for this account, then reload this page."},"residency":{"title":"Data residency clearance","intro":"This account's data is stored outside the United States, and its V1 data can only be read through a US-hosted connection. Record the basis that was agreed with this customer when their account was set up. This step does not decide anything — it records what was already decided, and nothing in V1 can be read until it is on file.","basis_label":"Basis agreed with the customer","basis_placeholder":"Choose the basis","basis_hint":"If you do not know which applies, ask the person who set this account up. Do not guess.","basis_dpa_sccs":"Data processing agreement with standard contractual clauses","basis_customer_consent":"The customer explicitly agreed to this transfer","basis_region_local_read_path":"The data is read from this customer's own region","basis_other":"Something else — describe it below","note_label":"Details","note_hint":"The agreement reference, the ticket, or a sentence a colleague could check later. Required if you chose “Something else”.","submit":"Record clearance","blocked_body":"This account needs a data residency clearance before anything in V1 can be read, and your staff account cannot record one. Ask a SuiteOp engineer to record it, then reload this page.","recorded_intro":"The basis on file for reading this account's V1 data from the United States.","recorded_basis_label":"Basis","recorded_at_label":"Recorded","withdraw_submit":"Withdraw clearance"},"stats":{"title":"Migration run","current_stage":"Current stage","mode":"Mode","started":"Started","last_activity":"Last activity","phase":"Phase","phases":{"guests":"Guests","lock_codes":"Lock codes","reservations":"Reservations"},"progress_of_seen":"Processed of records seen","records_seen":"Records seen","records_written":"Records written","records_skipped":"Skipped","records_failed":"Failed","no_run":"No migration run is open for this account yet.","no_run_stalled":"The previous migration run went quiet and was closed. Start a new one from the Connect step."},"run_status":{"running":"Running","writing":"Writing","finalizing":"Finalizing","rolling_back":"Rolling back","stalled":"Stalled","completed":"Completed","failed":"Failed"},"run_mode":{"dry_run":"Dry run","live":"Live"},"census":{"live_notice":"This step is live — it counts this account's real V1 data. Nothing is written.","unbound_title":"Bind this account first","unbound_body":"Counts come from the V1 organization this account is bound to. Open the Connect step, bind it, then come back here.","counting":"Counting this account's V1 data…","counting_no_progress":"No progress for {minutes} minutes. If the worker restarted, this count picks itself up again within about 11 minutes — you do not need to press anything.","idle_body":"No count has been taken for this migration run yet. Counting reads every V1 data type this account holds — it runs in the background and can take a few minutes on a large account.","run_submit":"Count V1 data","generated_at":"Counted {at}","counted_rows":"Rows counted so far: {count}","recount_submit":"Re-run census","count_remaining_submit":"Count remaining ({count})","unscoped_notice":"Types that could not be scoped to one account, so they were not counted: {count}","failed_notice":"Types whose count failed for a reason a re-run will not fix — ask engineering to look: {count}","too_large_notice":"Types too large to count through the proxy, so the figure shown is an estimate for the whole V1 table: {count}","total_migrate":"Migrate","total_exclude":"Exclude","total_re_derive":"Re-derive","total_undecided":"No decision","total_unscoped":"Not scoped","column_entity":"Entity","column_count":"Rows","column_decision":"Decision","column_reason":"Reason","column_v2_target":"V2 destination","column_status":"Status","decision_migrate":"Migrate","decision_exclude":"Exclude","decision_re_derive":"Re-derive","decision_none":"No decision","status_ok":"Counted","status_timeout":"Timed out","status_error":"Failed","status_not_org_scoped":"Not scoped","status_skipped":"Not counted yet","status_too_large":"Too large to count","not_scoped_no_org_column":"This V1 type has no organization column, so it cannot be counted for one account.","not_scoped_ambiguous_org_column":"This V1 type carries more than one organization column, so which account owns a row would be a guess.","not_scoped_unrepresentable_name":"This V1 type's name cannot be used in a query safely.","count_unknown":"Not counted","estimated_all_accounts":"≈{count} rows in the whole V1 table, all accounts","from_earlier_press":"From an earlier count, {ago}","view_sample":"View rows","view_sample_for":"View sample rows for {entity}","sample_title":"Sample rows — {entity}","sample_description":"Up to {count} rows, showing only the columns that are safe to display. Door codes, keys, passwords and tokens are never read.","sample_empty":"This account has no rows in this V1 type.","sample_error":"We could not read sample rows for this type.","sample_unavailable":"This V1 type is very large or the V1 database is busy right now, so the sample read did not finish. Try again in a moment.","sample_superseded":"Another sample of this type replaced this one, so this request no longer has an answer. Close this panel and press View rows again to see the latest sample.","value_empty":"Empty","policy_window_rows":"Only the last {months} months migrate","policy_window_media":"Rows migrate in full; media older than {months} months does not"},"dispositions":{"reasons":{"task_instances":"DEC-14 — task instances do not migrate; V2 generates go-forward work from schedules. Template-classified rows re-curate separately (MIG-052B).","booking_engine":"DEC-15 — the booking-engine family is not carried to V2.","platform_internal":"Platform-internal debug/log type with no cross-cutover consumer — V1 operational history, not customer data.","alexa_feature_gap":"V2 has no Alexa feature — the one true V1 feature gap, a drop-or-build product decision rather than a migration gap.","vestigial":"Vestigial in V1 — the vendor/feature is not integrated in V2.","transient":"Transient bookkeeping — the concept is superseded in V2, with no history worth moving.","superseded_in_code":"Superseded by a V2 code-level successor rather than a table.","folded_into_devices":"Folded into the device's vendor configuration by design — the V1 satellite type has no V2 table of its own.","folded_into_workflow_definition":"Folded into the workflow rule's saved definition by design — the V1 node type has no V2 table of its own.","rederived_projection":"A derived projection V2 rebuilds from live rows, so copying V1's snapshot would ship stale data that then never refreshes.","log_retention_window":"DEC-11 — log-class history is carried for the last 12 months before cutover. Rows older than that are excluded by policy, and the row accounting counts them per type.","verification_media_window":"DEC-12 — every verification row is carried with its metadata, but the media files behind rows older than 12 months are not: the V1 CDN links stop resolving at sunset. The file reconciliation that checks this lands in Increment 4."}},"errors":{"legacy_bubble_id_required":"Enter the V1 organization ID.","owner_email_required":"Enter the email address of the V1 organization owner.","owner_email_invalid":"Enter a valid email address.","no_active_run":"This account has no active migration run, and the binding has to be recorded on one. Start a migration run on this step, then confirm the binding again.","ownership_mismatch":"That email address is not an owner or admin of that V1 organization. Check both values and try again.","org_name_mismatch":"The confirmed organization name does not match the one we found. Review the name shown and confirm it again.","binding_conflict":"This organization is already bound to a different V1 organization, or that V1 organization is already bound elsewhere. A binding cannot be changed once set.","binding_required":"This organization is not bound to a V1 organization yet.","binding_unconfirmed":"Confirm the V1 organization binding before starting this migration run.","operator_not_authorized":"Your staff account cannot bind a V1 organization. Ask a SuiteOp engineer to run this step.","operator_tier_insufficient":"Your staff account is not cleared for this migration step. Ask a SuiteOp engineer to run it.","region_mismatch":"This account's data is stored in another region, so its V1 data cannot be read from here. Open this page on that region's dashboard, or ask a SuiteOp engineer.","rate_limited":"Too many migration lookups from this account in a short time. Wait a moment and try again.","proxy_unavailable":"We could not reach V1 to check that organization. Nothing was changed — try again in a moment.","proxy_misconfigured":"The V1 read service is not configured for this environment, so nothing can be read from V1 here. Pressing again will not help — ask a SuiteOp engineer.","proxy_busy":"V1 reads are at capacity right now, so this count was refused rather than queued behind other accounts. Nothing was changed — try again in a few minutes.","archive_encrypt_failed":"We could not encrypt this account's V1 rows for the migration archive, so that page was rolled back and nothing was saved twice. The migration will pick up where it left off — try again in a moment, and if it keeps happening ask a SuiteOp engineer.","bind_check_queued":"The V1 check is still waiting its turn behind other reads — nothing has been asked of V1 yet and nothing was changed. Leave the details as they are and press Check again in a minute.","run_unavailable":"The migration run this binding would be recorded on is no longer active. Reload the page and try again.","run_not_active":"This migration run is no longer active. Ask a SuiteOp engineer to start a new migration run for this account, then try again.","migration_session_required":"This account's migration details can only be read during an active SuiteOp staff session. Open this page from the admin console, or ask a SuiteOp engineer to run this step.","v1_table_required":"Choose a V1 entity to sample.","unknown_v1_table":"Sample rows are not available for that V1 entity.","missing_write_table":"This write step did not name a V1 entity, so there was nothing to write. Ask a SuiteOp engineer.","unmapped_write_target":"That V1 entity has no V2 destination in the migration field map, so its rows cannot be written. Ask a SuiteOp engineer.","sample_limit_invalid":"Ask for between 1 and 20 sample rows.","residency_clearance_required":"This account's data is stored outside the United States, so its V1 data cannot be read until a data residency clearance is recorded on the Connect step.","residency_basis_required":"Choose the basis that was agreed with this customer.","residency_note_required":"Describe the basis you chose.","residency_note_too_long":"Keep the details under 2000 characters.","residency_not_required":"This account's data is stored in the United States, so no residency clearance applies to it.","residency_already_recorded":"A residency clearance is already recorded for this account. Withdraw it first if the basis has changed.","residency_clearance_missing":"There is no residency clearance to withdraw for this account. Reload the page to see the current state.","enqueue_failed":"We could not queue that request. Nothing was changed — try again in a moment.","decision_disposition_required":"Choose what happens to this type.","decision_reason_required":"An excluded type needs a written reason.","decision_reason_too_long":"That reason is too long.","decision_tables_required":"Select at least one type.","decision_tables_too_many":"Too many types in one assignment.","decision_unknown_table":"That type is not in this account's census.","decision_table_not_scoped":"That type could not be scoped to this account, so it takes no decision.","census_required":"Run the census before recording decisions.","unreconcilable_v1_table":"Row accounting cannot walk that V1 type, so its rows could not be checked. Escalate to engineering.","region_at_capacity":"This region is already migrating as many accounts at once as its connection to V1 allows. Nothing is lost — wait a moment and start again.","no_stalled_run":"This account has no stalled migration run to resume. Reload the page to see its current state.","resume_heartbeat_warm":"This run was marked stalled but is still reporting activity, so resuming it now could leave two writers on the same account. Wait a few minutes and try again.","active_run_exists":"This account already has a migration run in progress, so a second one cannot be started. Reload the page to see it.","no_failable_run":"This account has no migration run to force-fail. Reload the page to see its current state.","run_already_terminal":"This migration run has already finished. There is nothing left to force-fail.","no_run_to_export":"This account has no migration run, so there is no ledger to export.","no_run_to_retry":"This account has no migration run, so there is nothing to retry.","force_fail_confirmation_mismatch":"The confirmation text does not match. Retype it exactly, in capitals.","force_fail_reason_required":"Write a short reason — it is the only record of why this run was force-failed.","force_fail_reason_too_long":"This reason is too long. Keep it under 500 characters.","write_item_id_missing":"The migration could not match a row to its ledger entry, so it stopped rather than record the wrong one. Nothing was written for that page.","write_item_id_ambiguous":"The migration found two ledger entries for the same record, so it stopped rather than guess which one to update. Nothing was written for that page.","write_result_ambiguous":"A row came back both written and failed, so the migration stopped rather than lose track of it. Nothing was written for that page.","payload_unreadable":"We could not read this record's extracted V1 data, so nothing was written for it. Re-run the extract for this entity, then start the write again.","item_not_in_run":"This record is not part of this migration run, so it was not written.","write_failed":"This record could not be written. It stays in the queue and the next write attempt will pick it up.","write_no_service_for_table":"The migration does not yet know how to write this kind of record, so it stopped rather than report a page it never wrote. Nothing was written for that page.","write_service_returned_no_result":"The record was sent to be saved but came back with neither a result nor a reason, so the migration treated it as not written rather than assume it succeeded.","write_missing_provenance_key":"A row was missing the information the migration uses to recognise it again, so it was skipped rather than risk creating a duplicate on a later attempt.","write_row_rejected":"The database refused this row, so it was not written. The rest of the page was unaffected.","write_conflict_row_unreadable":"This record matches one that already exists but is not visible to this account, so the migration could not link the two. Nothing was written for it.","write_duplicate_arbiter_key":"Another record already used the same identifying details, so only the first one was saved and this one was not. Merge or correct the duplicate in the old system and try again.","write_row_org_mismatch":"This record belongs to a different organisation than the one this migration is connected to, so it was not written. Nothing was refused by the database — check which account the run is linked to before retrying.","write_credential_column_refused":"This record carries a saved password or access key, which this step cannot move safely, so it was not written. Nothing about the record is wrong; it can be migrated once credential handling is switched on.","write_viator_partner_slot_taken":"This organization already has a different Viator Partner ID connected in SuiteOp, so this V1 one was not written. Keep the connected one, or change it in Integrations and migrate again.","write_not_attempted":"The migration never reached this row, so nothing was written for it. It can be retried.","write_service_import_failed":"The part of SuiteOp that owns this kind of record could not save it, so nothing was written for it. The details are in the run log.","write_email_identity_taken":"This person's email address already belongs to a deleted SuiteOp account, so no new account could be created for them. Restore or release that account, then migrate them again.","write_email_unusable":"This person has no usable email address in V1, so no account could be created for them. Add one in V1 and migrate them again.","write_email_duplicate_in_page":"Two V1 users share this email address once letter case is ignored, and SuiteOp allows one account per address. Only the first was migrated — merge or correct them in V1.","write_legacy_id_conflict":"A SuiteOp account with this email already belongs to a different V1 user, so this one was left alone. That is normal when the same person appears in two V1 organizations."},"decisions":{"intro":"Decisions are saved on this run — they survive a reload and carry forward if the run is restarted.","decision_for":"Decision for {entity}","decision_for_selection":"Decision for {count, plural, one {# selected type} other {# selected types}}","reason_label":"Reason","reason_hint":"Required when a type is excluded. It is what the next person reads instead of a blank.","source_map":"From the standard map","source_operator":"Decided here","select_row":"Select {entity}","select_all":"Select every listed type","selected_count":"{count, plural, one {# type selected} other {# types selected}}","bulk_title":"Assign the selected types","bulk_apply":"Apply to selection","change_for":"Change the decision for {entity}","unavailable":"Decisions could not be loaded.","filter_group":"Filter by decision","filter_all":"All types","filter_label":"Search types","filter_placeholder":"Search by name or V1 table","filter_showing":"Showing {shown} of {total}","filter_clear":"Clear filter","filter_empty":"No type matches this filter.","selection_hidden":"{count, plural, one {# selected type is hidden by this filter and will still be assigned} other {# selected types are hidden by this filter and will still be assigned}}","cannot_decide":"Your staff role can read these decisions but not change them."},"coverage":{"title":"Decision coverage","gates_nothing_yet":"Coverage is reported here but blocks nothing yet — it will gate the dry run once that stage exists.","complete":"Every type this account holds rows in has a decision.","missing_title":"{count, plural, one {# type with rows has no decision} other {# types with rows have no decision}}","missing_body":"Nothing may be migrated for these until somebody decides. Each is listed with the rows at stake.","unknown_title":"{count, plural, one {# type has no decision and no count} other {# types have no decision and no count}}","unknown_body":"The latest count established no number for these types, so they cannot be called covered either way. A figure in the table may come from an earlier count, which this check does not read. Count them again, then decide.","excluded_title":"{count, plural, one {# type excluded by policy} other {# types excluded by policy}}","excluded_body":"Every exclusion carries the decision it rests on — never a silent skip.","column_policy":"Policy","rows":"{count, plural, one {# row} other {# rows}}","more_not_listed":"{count, plural, one {# more not listed} other {# more not listed}}"},"accounting":{"title":"Row accounting","gates_nothing_yet":"Accounting is reported here but blocks nothing yet — it will gate the dry run once that stage exists.","idle_body":"Nothing has been accounted for on this run yet.","view_only":"Your access can read this report but not run it.","generated_at":"Checked {at}","run_submit":"Run accounting","rerun_submit":"Re-run accounting","running":"Walking the V1 ids of every extracted type and matching each one against what this run archived. This can take several minutes.","empty_body":"Nothing has been extracted on this run yet, so there is nothing to account for. Accounting covers the types this run archived that are also set to migrate.","balanced":"Every row this run archived is accounted for.","partial":"No rows are missing from the types that could be checked, but {count, plural, one {# type could not be confirmed} other {# types could not be confirmed}}. See the table below.","unaccounted_body":"{count, plural, one {# V1 row has no entry in the ledger for this run} other {# V1 rows have no entry in the ledger for this run}} and would be left behind. Export the list to see exactly which.","skipped_notice":"{count, plural, one {# type was not reached before the time budget ran out} other {# types were not reached before the time budget ran out}}. Run accounting again to cover them.","export_submit":"Export unaccounted","deferred_checks":"Money and compliance-file reconciliation are not covered here — they land in Increment 4.","column_entity":"Type","column_v1":"In V1","column_archived":"Archived","column_unaccounted":"Unaccounted","column_status":"Result","not_walked":"Not walked","count_agrees":"Independent count agrees","count_disagrees":"Independent count says {count, number} — run accounting again; a disagreement that persists is not a live write","count_drift":"Independent count says {count, number} — a live V1 write during the walk","count_uncountable":"Too large to count","count_unavailable":"Count unavailable","ids_truncated":"{count, plural, one {only the first # id is listed} other {only the first # ids are listed}}","orphaned":"{count, plural, one {# archived row V1 no longer holds} other {# archived rows V1 no longer holds}}","explained_row":"{state} {count, number}","status_balanced":"Balanced","status_unaccounted":"Rows unaccounted","status_count_mismatch":"Counts disagree","status_failed":"Could not check","status_skipped":"Not reached","state_pending":"Extracted","state_claimed":"In progress","state_written":"Written","state_skipped":"Skipped","state_excluded":"Excluded","state_quarantined":"Quarantined","state_failed":"Failed","state_merged":"Merged","csv_entity":"Type","csv_table":"V1 table","csv_source_id":"V1 row id","csv_unaccounted_total":"Unaccounted total for this type","unreadable":"This account has an accounting result, but it could not be read. Run accounting again.","policy_window_rows":"Policy: only the last {months} months of this type migrate — older rows are excluded by decision, not by accident.","policy_window_media":"Policy: every row migrates, but media older than {months} months does not. The file check lands in Increment 4."},"outbound":{"active":"Outbound active","paused_since":"Outbound paused since {date}"},"dry_run":{"intro":"What would happen if this migration ran for real — per type, from the rows this run has already extracted.","idle_body":"No results have been produced for this run yet.","view_only":"Your access can read these results but not rebuild them.","generated_at":"Built {at}","census_at":"V1 counts from the census taken {at}.","census_missing":"No V1 counts are available for this run yet — run the census to fill the “In V1” column.","run_submit":"Build results","rerun_submit":"Rebuild results","refusal_no_active_run":"This migration run is no longer active. Start a new run before rebuilding the results.","stalled_notice":"These results belong to a run that stalled at {at}. Resume it or start a new run.","closed_notice":"These results belong to a run that ended at {at}. Start a new run to rebuild them.","read_failed":"These results could not be read. Try again in a moment.","unreadable":"This run has results, but they could not be read. Rebuild them.","empty_body":"Nothing has been extracted on this run yet, so there is nothing to preview. This is not a clean bill of health — it means the dry run has not reached any type.","all_clear":"No blocking findings in the checks that ran: {count, plural, one {# row would be written} other {# rows would be written}}. Not every check runs yet, so this is not a full pre-flight.","blocked_notice":"{count, plural, one {# row cannot be written as mapped} other {# rows cannot be written as mapped}}. Open a type below to see why.","unvalidated_notice":"{count, plural, one {# row has not been checked yet} other {# rows have not been checked yet}}, so these results are incomplete. Rebuild them once the dry run has validated every row.","column_entity":"Type","column_v1":"In V1","column_extracted":"Extracted","column_planned":"Would write","column_planned_help":"Rows this run recorded as carrying no blocking finding. A warning is listed with the findings below rather than subtracted here, and a row nothing has checked is counted in its own column — so this number can stay the same while the findings list is not empty.","column_planned_help_aria":"About the Would write column","column_blocked":"Blocked","column_not_written":"Not written","column_unchecked":"Not checked","not_counted":"Not counted","disposition_exclude":"Not migrating","disposition_re_derive":"Rebuilt in V2","findings_none":"None","coverage_no_writer":"Record-shape checks did not run: SuiteOp does not migrate this data type yet.","coverage_unavailable":"Record-shape checks could not run on this pass.","coverage_nothing_to_check":"Nothing to check on this pass.","findings_toggle":"{errors, plural, one {# error} other {# errors}} · {warnings, plural, one {# warning} other {# warnings}}","severity_error":"Blocking","severity_warning":"Warning","finding_items":"{findings, plural, one {# finding} other {# findings}} across {items, plural, one {# row} other {# rows}}","finding_ids":"V1 rows: {ids}","finding_truncated":"(only {count} are listed)","export_submit":"Export results","deferred_checks":"Money and compliance-file reconciliation are not covered here — they land in Increment 4. They are not the only checks still to come.","unchecked_keys":"{count, plural, one {# unique key was not checked} other {# unique keys were not checked}} on these types — their index shapes cannot be probed safely.","unchecked_cross_page_keys":"{count, plural, one {# unique key was not checked} other {# unique keys were not checked}} for duplicates across this run's pages.","unchecked_names_toggle":"Show the key names","csv_kind":"Row type","csv_entity":"Type","csv_table":"V1 table","csv_v1":"In V1","csv_extracted":"Extracted","csv_planned":"Would write","csv_blocked":"Blocked","csv_not_written":"Not written","csv_unchecked":"Not checked","csv_code":"Finding code","csv_severity":"Severity","csv_findings":"Findings","csv_items":"Rows affected","csv_ids":"V1 row ids","csv_truncated":"Id list truncated"},"findings":{"source_id_missing":"This V1 record has no ID, so nothing can be matched to it.","legacy_bubble_id_column_missing":"The destination table has no column to record the V1 ID in.","organization_reference_missing":"This V1 record names no organization, so it cannot be attributed to this account.","organization_mismatch":"This V1 record belongs to a different organization than the one being migrated.","source_field_unresolved":"No V1 column was found for this mapped field.","source_field_ambiguous":"Several V1 columns match this mapped field, so the right one is unclear.","reference_not_a_lookup":"This field is mapped as a link, but the V1 value does not point at another record.","reference_destination_unknown":"This link points at a destination SuiteOp no longer has.","reference_target_unknown":"The linked V1 record was not found.","reference_list_into_scalar_column":"This field holds several links, but the destination column takes only one.","required_reference_missing":"A required link is missing, so this record cannot be written.","unresolved_reference":"The linked record has not been migrated yet, so this link cannot be filled in.","id_map_target_unsupported":"Links to this kind of record are not supported yet.","fk_target_excluded_null":"The linked record is excluded from the migration, so this link is left empty.","value_type_unexpected":"The V1 value is not the kind of value this field takes.","value_not_numeric":"The V1 value is not a number.","value_not_integer":"The V1 value is not a whole number.","invalid_timestamp":"The V1 value is not a valid date and time.","epoch_zero_date":"This V1 date is empty and would be migrated as 1 January 1970.","timestamp_unit_suspect":"This date looks converted from the wrong unit and would land in the wrong century.","money_out_of_range":"This amount is outside the range the destination field can hold.","address_unparsable":"The V1 address could not be read, so the address fields were left empty.","address_point_unsupported":"The V1 map coordinates are in an unrecognised format and were not imported.","option_set_value_unmapped":"This V1 choice has no SuiteOp equivalent, so the field is left empty.","option_set_value_unknown":"This V1 choice is not one the mapping knows, so the field is left empty.","option_set_value_excludes_row":"This V1 choice means the record is not migrated at all.","missing_required_field":"A required field was never filled in, so this record cannot be written.","target_table_unknown":"This record is aimed at a table SuiteOp no longer has.","shape_schema_unavailable":"The destination has no validation rules yet, so this record's shape cannot be proven.","shape_unknown_column":"This record names a column the destination table does not have, and the value would be dropped.","shape_generated_column_written":"This record writes to a column the database fills in itself, which it refuses.","shape_invalid":"This value fails the checks the destination applies when a record is created.","date_not_converted":"This date was never converted out of its raw V1 format.","date_invalid":"This is not a valid date and time.","date_out_of_plausible_range":"This date is far outside the range a migrated record can hold, which usually means a conversion error.","date_only_malformed":"This date is not written as YYYY-MM-DD.","time_malformed":"This time of day is not written as HH:MM.","timezone_unresolvable":"This is not a time zone SuiteOp can use, so every time on this record would be wrong.","option_set_destination_stale":"The mapping for this choice points at a column the schema no longer has, so nothing about it was checked.","option_set_value_dropped":"This V1 choice maps to a value, but the record would be written without it.","option_set_value_mismatch":"The record would be written with a different value than this V1 choice maps to.","option_set_value_coerced":"This V1 choice has no equivalent, but the record would be written with a value anyway.","option_set_excluded_row_written":"This V1 choice means the record should not be migrated, but it would be written.","pms_external_id_absent":"This record is linked to a PMS but carries no PMS ID, so the next sync would create a duplicate.","pms_identity_incomplete":"Part of the key the PMS sync matches on is missing, so the next sync would create a duplicate.","pms_account_unstamped":"This record is not stamped with a PMS account, so an ordinary sync has to repair it later.","viator_partner_id_invalid":"The Viator Partner ID on this record is not a valid ID, so its upsell links would credit nobody. Ask the operator for theirs and connect it in Integrations.","viator_partner_id_absent":"This Viator account carries no Partner ID, so it would take the organization's only Viator slot while crediting nobody.","fee_pricing_source_missing":"This fee product's price settings did not come across, so there is no price to write.","fee_charge_type_unsupported":"This fee is charged in a way the new fee step does not know how to price yet.","money_exceeds_column_range":"This amount is larger than the destination field can hold, so no cap was recorded.","required_money_exceeds_column_range":"This amount is larger than the destination field can hold, and a price has no substitute, so this record was not imported.","translation_link_deferred":"The translated text for this record is linked later, by the translation step.","entity_not_curated":"No mapping has been written for this V1 data type, so none of its fields were checked.","entity_excluded_by_policy":"This V1 data type is excluded from the migration, but this record would still be written.","reference_missing_in_v2":"No SuiteOp record matches the V1 record this link points at, so the link would be left empty.","reference_pending_earlier_wave":"The linked record is migrating in an earlier wave of this run, so it will exist by the time this row is written. Nothing to fix.","unique_probe_unavailable":"The duplicate check could not run for this row, so this key is unchecked — neither clean nor in conflict.","unique_collision_same_run":"Another row in this migration claims the same unique key. The two would merge, and which one wins is your decision.","unique_collision_existing_row":"A record already in SuiteOp claims the same unique key. The two would merge, and which one wins is your decision.","workflow_definition_missing":"This automation's steps could not be rebuilt, so it was held back instead of imported. Rebuild the rule in the workflow editor, or re-run the import once the cause is fixed.","workflow_definition_invalid":"The rebuilt steps for this automation do not form a valid workflow, so it was held back instead of imported. Rebuild the rule in the workflow editor, or re-run the import once the cause is fixed.","email_invalid":"The V1 email address is not a usable address, so this person would get an account nobody can sign in to."},"recovery":{"title":"Recovery","description":"Controls for a migration run that stopped. Nothing here is automatic — each control says what it will do before it does it.","target":"Current run: {status} · last heartbeat {heartbeat} · {ledger, plural, =0 {no ledger rows} one {# ledger row} other {# ledger rows}}.","no_run":"This account has no migration run yet, so there is nothing to recover. Start a run on the Connect step first.","cancel":"Cancel","resume_title":"Resume this migration","resume_effect":"Opens a new run that picks up from where the stalled one stopped, carrying its position in the data. The stalled run and everything it already wrote are left exactly as they are.","resume_button":"Resume migration","resume_confirm_title":"Resume from where this run stopped?","resume_confirm_body":"A new run will continue from the stalled run's last recorded position. Nothing already written is changed, and nothing is undone. The stalled run stays on record so you can still see where it stopped.","resume_confirm_action":"Resume migration","resume_done":"Migration resumed. A new run is continuing from where the stalled one stopped.","retry_title":"Re-queue the rows that failed","retry_effect":"{count, plural, =0 {No rows on this run are failed or quarantined, so there is nothing to re-queue.} one {Puts # failed or quarantined row back in the queue and clears its retry delay, so it is attempted again.} other {Puts # failed or quarantined rows back in the queue and clears their retry delay, so they are attempted again.}}","retry_button":"Re-queue failed rows","retry_confirm_title":"Re-queue the failed rows?","retry_confirm_body":"{count, plural, one {# row} other {# rows}} will go back to pending and be attempted again from the start. Rows that already succeeded are not touched, and nothing is removed from the ledger.","retry_confirm_action":"Re-queue rows","retry_done":"{count, plural, =0 {No rows needed re-queueing.} one {# row is back in the queue.} other {# rows are back in the queue.}}","export_title":"Export the ledger","export_effect":"Downloads a CSV with one line per record this run handled — its source table and id, what happened to it, and where it landed. Personal data from the records themselves is not included. {count, plural, =0 {This run has no ledger rows yet.} one {# row.} other {# rows.}}","export_button":"Export ledger (CSV)","export_truncated":"The file stops at {count} rows — this run's ledger is longer. Ask engineering for the full export.","force_fail_title":"Force-fail this run","force_fail_effect":"Marks this run failed so the account is no longer held by it and a new migration can be started. {count, plural, =0 {The ledger is kept.} one {All # ledger row is kept.} other {All # ledger rows are kept.}}","force_fail_not_rollback":"This is not a rollback. Anything this run already wrote into SuiteOp stays written, and nothing is reversed.","force_fail_button":"Force-fail run","force_fail_dialog_title":"Force-fail this migration run?","force_fail_dialog_body":"The run will be marked failed and will stop holding this account. {count, plural, =0 {Its ledger is preserved for audit.} one {Its # ledger row is preserved for audit.} other {All # of its ledger rows are preserved for audit.}}","force_fail_confirmation_label":"Type {token} to confirm","force_fail_confirmation_hint":"Retype {token} exactly, in capitals.","force_fail_reason_label":"Why are you force-failing this run?","force_fail_reason_hint":"Recorded against your name in the migration audit trail. Afterwards the run says only “failed” — this is the only record of why.","force_fail_submit":"Force-fail this run","force_fail_done":"Run marked failed. {count, plural, =0 {The ledger was preserved.} one {# ledger row was preserved.} other {# ledger rows were preserved.}}"},"waves":{"title":"Commit progress","no_run":"No commit run is in progress.","no_waves":"No waves have been extracted yet.","overall_label":"{settled} of {total} ledger rows processed","overall_aria":"Overall commit progress","elapsed_label":"Running for {elapsed}","elapsed_hm":"{hours}h {minutes}m","elapsed_ms":"{minutes}m {seconds}s","full_but_running":"Every ledger row has been processed. The run is still {status} and is finished only when the server says so.","settled_but_attention":"No ledger rows are left in flight, but {attention, plural, one {# row still needs attention} other {# rows still need attention}}. The run is still {status} and is finished only when the server says so.","wave_label":"Wave {wave}","current":"In progress","attention":"Attention: {count}","wave_done":"Done — {written} of {total} written","wave_counts":"{settled} of {total} processed · {written} written","wave_aria":"Wave {wave} progress","stalled_title":"This run has stalled","stalled_body":"The server stopped hearing from this migration run and closed it out. Nothing is being written right now. Resume it to pick up where it left off.","activity_title":"Live activity","activity_empty":"Waiting for the next update…","activity_line":"{written} written · {settled} processed · {attention, plural, one {# needs attention} other {# need attention}}"}},"milestones":{"page_title":"Milestones","hero":{"milestones_unlocked":"Milestones Unlocked","nearest_milestone":"Nearest Milestone","all_cleared":"All cleared!","complete":"Complete","away":"Just {remaining} away!","almost_there":"Almost there — {remaining} to go","keep_pushing":"{remaining} to go","no_milestones":"Start using SuiteOp to unlock milestones"},"feed":{"title":"Just Unlocked","live":"Live","level":"Level {level}","max_level":"Max Level","new_tag":"New","empty_title":"No milestones yet","empty_description":"Start using SuiteOp to unlock your first milestone.","ago_days":"{count}d ago","ago_weeks":"{count}w ago"},"filters":{"all":"All","upsells_and_waivers":"Upsells","tasks":"Tasks","reviews":"Reviews","reservations":"Reservations","portal":"Portal","operations":"Operations","devices":"Devices","flex_stats":"Flex"},"card":{"level":"Level {level}","max":"Max","locked":"Locked","coming_soon":"Coming Soon","coming_soon_description":"This milestone will be available in a future update.","progress":"{percent}%","share":"Share milestone","in_progress":"In Progress","up_next":"Up next","first_goal_cta":"Reach {value} to unlock this badge."},"celebration":{"title":"Milestone Unlocked","share_linkedin":"Share on LinkedIn","counter":"{current} of {total}","next":"Next","back":"Back","done":"Done","close":"Close celebrations","announce":"Milestone {current} of {total}: {name}","level":"Level {level} of {total}","max_level":"Max level reached","collection":"{unlocked} of {total} milestones","unlocked_on":"Unlocked {date}","ladder":"Milestone progress","to_level":"{amount} to Level {level}"},"share":{"title":"Share on LinkedIn","preview_label":"Your LinkedIn Post","copy":"Copy","copied":"Copied!","share_button":"Share on LinkedIn","tip":"Tip: Add a team photo for 3x engagement","copy_and_open":"Copy & open LinkedIn","paste_hint":"LinkedIn can't accept a pre-written post, so we'll copy yours — paste it into the composer, then type @SuiteOp and pick us from the dropdown to tag us.","next_stop":"Next stop, {value}.","attribution":"Tracked with SuiteOp."},"empty":{"no_milestones":"No milestones match the selected filters."},"error":{"query_failed":"Failed to load milestones. Please try again."},"definitions":{"total_upsell_conversions":{"metric_name":"Total Upsell Conversions","fun_name":"Conversion King","share_opener":"{value} upsell conversions.","share_impact":"Across {total_properties_managed} properties, every one a guest who said yes to something that improved their stay.","share_how":"Conversions follow relevance. Offer the right thing and the ask stops feeling like a sale."},"best_waiver_conversion_rate":{"metric_name":"Best Waiver Conversion Rate","fun_name":"Sharp Shooter","share_opener":"{value} waiver conversion rate.","share_impact":"Across {total_properties_managed} properties.","share_how":"Right offer, right moment, no friction. That is the whole formula."},"total_damage_waiver_revenue":{"metric_name":"Total Damage Waiver Revenue","fun_name":"Shield Master","share_opener":"{value} in damage waiver revenue.","share_impact":"Across {total_properties_managed} properties, protection that pays for itself.","share_how":"One less deposit conversation with guests, and one less argument after checkout."},"total_upsell_revenue":{"metric_name":"Total Upsell Revenue","fun_name":"Upsell Ace","share_opener":"{value} in upsell revenue.","share_impact":"Earned across {total_properties_managed} properties, on rooms that were already booked.","share_how":"Nothing here came from adding doors. It came from asking at the right moment."},"total_upsell_and_waiver_revenue":{"metric_name":"Total Upsell & Waiver Revenue","fun_name":"Revenue Rocket","share_opener":"{value} in upsell and waiver revenue.","share_impact":"Across {total_properties_managed} properties, none of it from raising prices.","share_how":"Same inventory, better offers. That is the entire play."},"top_upsell_sold":{"metric_name":"Top Upsell Sold","fun_name":"Best Seller","share_opener":"{value} — our biggest single upsell yet.","share_impact":"Across {total_properties_managed} properties and {total_upsell_conversions} conversions.","share_how":"Guests will pay for things that genuinely improve a trip. The trick is offering them."},"highest_revenue_day":{"metric_name":"Highest Revenue Day","fun_name":"Peak Day","share_opener":"{value} in revenue in a single day.","share_impact":"Across {total_properties_managed} properties.","share_how":"Peaks are not luck. They are what happens when pricing, availability and operations line up."},"lockouts_prevented":{"metric_name":"Lockouts Prevented","fun_name":"Lockout Legend","share_opener":"{value} lockouts prevented.","share_impact":"Across {total_properties_managed} properties, arrivals that never turned into a 2am phone call.","share_how":"Access that just works is the cheapest guest experience there is. Nobody remembers the door that opened."},"total_tasks_completed":{"metric_name":"Total Tasks Completed","fun_name":"Task Titan","share_opener":"{value} tasks completed.","share_impact":"Cleans, inspections, restocks and repairs across {total_properties_managed} properties.","share_how":"The work a guest never sees is the work they would notice first if it stopped."},"best_completion_rate":{"metric_name":"Best Completion Rate (Month)","fun_name":"Precision Pro","share_opener":"{value} task completion rate in a month.","share_impact":"Across {total_properties_managed} properties and {total_tasks_completed} tasks completed.","share_how":"Completion rate really measures whether the schedule was honest in the first place."},"total_task_hours_logged":{"metric_name":"Total Task Hours Logged","fun_name":"Hour Hero","share_opener":"{value} hours logged on property work.","share_impact":"Across {total_properties_managed} properties and {total_tasks_completed} tasks.","share_how":"Hours are the one input you cannot fake. Everything else follows from where they go."},"most_tasks_single_day":{"metric_name":"Most Tasks in Single Day","fun_name":"Daily Dominator","share_opener":"{value} tasks completed in a single day.","share_impact":"Across {total_properties_managed} properties.","share_how":"Big days are won by the schedule, not by heroics."},"total_reviews_collected":{"metric_name":"Total Reviews Collected","fun_name":"Review Royalty","share_opener":"{value} guest reviews collected.","share_impact":"Across {total_properties_managed} properties.","share_how":"Reviews do not arrive on their own. Asking well, at the right moment, is most of it."},"all_time_average_rating":{"metric_name":"All-Time Average Rating","fun_name":"Guest Whisperer","share_opener":"{value} average rating, all time.","share_impact":"Across {total_properties_managed} properties and {total_reviews_collected} reviews.","share_how":"A rating this steady is not about peaks. It is about not having bad stays."},"total_five_star_reviews":{"metric_name":"Total 5-Star Reviews","fun_name":"Five-Star Factory","share_opener":"{value} five-star reviews.","share_impact":"From {total_properties_managed} properties, backed by {total_tasks_completed} completed tasks no guest ever saw.","share_how":"Reviews are not won at checkout. They are won by everything that quietly worked beforehand."},"best_monthly_average_rating":{"metric_name":"Best Monthly Average Rating","fun_name":"Peak Performer","share_opener":"{value} average rating in a month.","share_impact":"Across {total_properties_managed} properties.","share_how":"A month without a single bad stay takes more coordination than any one great stay."},"highest_reviews_single_month":{"metric_name":"Highest Reviews in Single Month","fun_name":"Month of Stars","share_opener":"{value} reviews in a single month.","share_impact":"Across {total_properties_managed} properties.","share_how":"Volume like this only happens when guests are asked while the stay is still fresh."},"consecutive_months_above_4_5":{"metric_name":"Consecutive Months Above 4.5★","fun_name":"Consistency Crown","share_opener":"{value} consecutive months above 4.5 stars.","share_impact":"Across {total_properties_managed} properties and {total_reviews_collected} reviews.","share_how":"Consistency is harder than excellence. One bad month erases three good ones."},"total_nights_sold":{"metric_name":"Total Nights Sold","fun_name":"Night Owl","share_opener":"{value} nights sold.","share_impact":"Across a portfolio of {total_properties_managed} properties.","share_how":"Filling a calendar is the easy half. Filling it with the right stays is the other."},"total_reservations_confirmed":{"metric_name":"Total Reservations Confirmed","fun_name":"Booking Boss","share_opener":"{value} reservations confirmed.","share_impact":"Across a portfolio of {total_properties_managed} properties.","share_how":"Every one priced, approved, prepared and handed over without a hitch."},"total_check_ins_processed":{"metric_name":"Total Check-ins Processed","fun_name":"Welcome Warrior","share_opener":"{value} check-ins processed.","share_impact":"Across {total_properties_managed} properties.","share_how":"Arrival is the part of a stay a guest remembers in detail. It is worth over-engineering."},"total_check_outs_processed":{"metric_name":"Total Check-outs Processed","fun_name":"Farewell Captain","share_opener":"{value} check-outs processed.","share_impact":"Across {total_properties_managed} properties and {total_tasks_completed} tasks.","share_how":"Every checkout starts a clock. What happens next decides the following guest's stay."},"highest_single_day_check_ins":{"metric_name":"Highest Single-Day Check-ins","fun_name":"Peak Arrivals","share_opener":"{value} check-ins in a single day.","share_impact":"Across {total_properties_managed} properties.","share_how":"Turnover days are where an operation finds out whether its systems are real."},"best_average_daily_rate":{"metric_name":"Best Average Daily Rate","fun_name":"Rate Raiser","share_opener":"{value} average daily rate.","share_impact":"Across {total_properties_managed} properties.","share_how":"Rate follows what a stay is actually worth. Improve the stay and the number follows."},"total_30_plus_day_stays":{"metric_name":"Total 30+ Day Stays","fun_name":"Extended Stay Elite","share_opener":"{value} stays of 30 days or more.","share_impact":"Across {total_properties_managed} properties.","share_how":"Long stays reward operations that are boring in the best way: reliable, quiet, consistent."},"total_portal_loads":{"metric_name":"Total Portal Loads","fun_name":"Portal Powerhouse","share_opener":"{value} guest portal loads.","share_impact":"Across {total_properties_managed} properties and {total_reservations_confirmed} reservations.","share_how":"Every load is a question a guest answered without having to message anyone."},"upsell_approval_rate":{"metric_name":"Upsell Approval Rate","fun_name":"Approval Machine","share_opener":"{value} upsell approval rate.","share_impact":"On {total_upsell_and_waiver_revenue} in upsell and waiver revenue across {total_properties_managed} properties.","share_how":"When guests say yes this often, the offer is not the clever part. The timing is."},"total_properties_managed":{"metric_name":"Total Properties Managed","fun_name":"Portfolio King","share_opener":"{value} properties under management.","share_impact":"{total_tasks_completed} tasks and {total_reservations_confirmed} reservations to keep them running.","share_how":"Doors are the easy part to count. The system behind them is what makes the next batch possible."},"total_users_on_platform":{"metric_name":"Total Users on Platform","fun_name":"Team Builder","share_opener":"{value} people on the platform.","share_impact":"Coordinating {total_properties_managed} properties and {total_tasks_completed} tasks.","share_how":"Software does not run a property. People do, and this is how many it takes."},"hours_saved_for_operators":{"metric_name":"Est. Hours Saved for Operators","fun_name":"Time Saver","share_opener":"An estimated {value} hours saved.","share_impact":"Across {total_properties_managed} properties and {total_tasks_completed} tasks.","share_how":"Time saved is not time removed from the job. It is time moved to the parts that need a human."},"total_iot_device_commands":{"metric_name":"Total IoT Device Commands","fun_name":"IoT Commander","share_opener":"{value} device commands sent.","share_impact":"Across {total_properties_managed} properties.","share_how":"Locks, thermostats and sensors doing what they are told, so nobody has to drive over and do it."},"countries_active":{"metric_name":"Countries Active","fun_name":"Globe Trotter","share_opener":"Operating in {value} countries.","share_impact":"Across {total_properties_managed} properties.","share_how":"Every market has its own rules, its own guests and its own idea of what normal looks like."},"longest_perfect_rating_streak":{"metric_name":"Longest Great-Rating Streak","fun_name":"Streak Keeper","share_opener":"{value} days without a single rating below 4 stars.","share_impact":"Across {total_properties_managed} properties and {total_five_star_reviews} five-star reviews.","share_how":"Streaks like this are not luck. They are what consistency looks like when nothing breaks."},"total_precheck_steps_completed":{"metric_name":"Pre-Check-In Steps Completed","fun_name":"Smooth Operator","share_opener":"{value} pre-check-in steps completed before arrival.","share_impact":"Across {total_properties_managed} properties, every one a question nobody had to answer at the door.","share_how":"Ask early and the arrival takes care of itself."},"total_id_verifications":{"metric_name":"ID Verifications Passed","fun_name":"Trust Builder","share_opener":"{value} guest identities verified.","share_impact":"Across {total_properties_managed} properties, every one checked before the door ever opened.","share_how":"Trust is cheaper to establish up front than to recover afterward."},"total_agreements_signed":{"metric_name":"Rental Agreements Signed","fun_name":"Signed & Sealed","share_opener":"{value} rental agreements signed digitally.","share_impact":"Across {total_properties_managed} properties, none of them chased down by hand.","share_how":"No printers, no chasing, no unsigned stays."},"portal_adoption_rate":{"metric_name":"Guest Portal Adoption","fun_name":"Self-Serve Star","share_opener":"{value} guest portal adoption.","share_impact":"Across {total_properties_managed} properties.","share_how":"Answers guests find themselves are calls that never ring."},"total_guest_messages_handled":{"metric_name":"Guest Messages Handled","fun_name":"Inbox Hero","share_opener":"{value} guest messages answered.","share_impact":"Across {total_properties_managed} properties, every reply a stay kept on track.","share_how":"A fast answer beats a perfect one. Guests are asking because they are already unsure."},"total_shifts_completed":{"metric_name":"Shifts Completed","fun_name":"Clockwork Crew","share_opener":"{value} shifts completed.","share_impact":"Across {total_properties_managed} properties, the schedule held and the team showed up.","share_how":"Coverage is a planning problem long before it becomes a staffing one."},"lock_codes_delivered":{"metric_name":"Lock Codes Delivered","fun_name":"Keymaster","share_opener":"{value} door codes delivered automatically.","share_impact":"Across {total_properties_managed} properties, and nobody drove over with a key.","share_how":"Access should arrive before the guest does, not after they call."},"upsell_funnel_conversion":{"metric_name":"Upsell Browse-to-Buy Rate","fun_name":"Smart Seller","share_opener":"{value} upsell browse-to-buy rate.","share_impact":"Across {total_properties_managed} properties.","share_how":"The right offer shown at the right moment. Browsing was never the problem."}},"active":{"title":"Closest active milestones","start_title":"Start here","start_hint":"Your first milestones — progress appears as your team works."}},"navigation":{"approvals_badge_scope":"Pending approvals across all properties you can access","groups":{"platform":"Platform","operations":"Operations","workflows":"Agents","communication":"Communication","configuration":"Configuration","guest_portal":"Guest Portal","general":"General"},"items":{"home":"Home","get_started":"Setup","ask":"Opal","properties":"Properties","devices":"Devices","alerts":"Alerts","reservations":"Reservations","reservation_list":"Reservation list","blacklist":"Blacklist","tasks":"Tasks","my_tasks":"My Tasks","dashboard":"Dashboard","all_tasks":"All Tasks","calendar":"Calendar","schedule":"Schedule","opportunities":"Opportunities","auto_assignment":"Auto-assignment","templates":"Templates","financials":"Financials","approvals":"Costs & Approvals","departments":"Departments","scheduler":"Scheduler","workflows":"Agents","workflow_rules":"Agents","log":"Logs","analytics":"Analytics","analytics_dashboard":"Dashboard","milestones":"Milestones","inbox":"Inbox","inbox_opal":"Opal","portals":"Portals","settings":"Settings","translations":"Translations","white_labeling":"White Labeling","notifications":"Notifications","integrations":"Integrations","refer_and_earn":"Refer & Earn","rewards":"Rewards","organization":"Organization","members":"Members","billing":"Billing","workflow_plugins":"Tools","help":"Help Center","profile":"Profile","property_groups":"Groups","catalog":"Element Catalog","portal_config":"Portal Config","payments":"Payments","brands":"Brands","verify":"Verify","manuals_nav":"Manuals","events_nav":"Events","guides":"Guides","upsells_nav":"Upsells","postcards":"Postcards","shifts":"Shifts","my_timesheet":"My Timesheet","time_off":"Time Off","shift_dashboard":"Shift Dashboard","shift_schedule":"Shift Schedule","shift_settings":"Settings","folio":"Folio","email_templates":"Email templates","developer":"Developer","observability":"Observability","new":"New","qa_session":"QA Session","start_qa_session":"Start QA Session","qa":"QA","messages":"Messages"},"breadcrumb":{"home":"Home","detail":"Detail","collapsed":"Hidden steps: {trail}"},"user_menu":{"profile":"Profile","theme":"Theme","light":"Light","dark":"Dark","system":"System","system_mode":"System Mode","light_mode":"Light Mode","dark_mode":"Dark Mode","log_out":"Log out"}},"notifications":{"title":"Notifications","section_filter_label":"Filter by section","unread_indicator":"Unread","unread_badge":"{count, plural, =0 {No unread} one {1 unread} other {# unread}}","view_all":"View all","mark_all_read":"Mark all as read","dismiss":"Dismiss","loading_more":"Loading more…","occurrences":"×{count} occurrences","buckets":{"today":"Today","yesterday":"Yesterday","this_week":"Earlier this week","earlier":"Earlier"},"sections":{"all":"All","task":"Tasks","reservation":"Reservations","guest":"Guests","device":"Devices","noise":"Noise","commerce":"Commerce","automation":"Automation","system":"System"},"empty":{"title":"You're all caught up","body":"No notifications yet. When something needs your attention, it will appear here.","archived_title":"No archived notifications","archived_body":"Notifications you archive will appear here."},"page":{"title":"Notifications","subtitle_empty":"No unread notifications.","subtitle_unread":"{count, plural, one {# unread notification} other {# unread notifications}}","show_all":"Show all","show_unread_only":"Show unread only","manage_preferences":"Preferences","select":"Select","cancel_select":"Cancel selection","select_all":"Select all","clear_selection":"Clear selection","selected_count":"{count, plural, one {# selected} other {# selected}}","archive_selected":"Archive ({count})","archived_toast":"{count, plural, one {# notification archived} other {# notifications archived}}","archive_failed":"Couldn't archive the selection. Try again.","view_archived":"Archived","view_inbox":"Inbox","subtitle_archived":"Viewing archived notifications","restore_selected":"Restore ({count})","restored_toast":"{count, plural, one {# notification restored} other {# notifications restored}}","restore_failed":"Couldn't restore the selection. Try again.","restore_superseded_toast":"{count, plural, one {# notification stayed archived — another one took its place} other {# notifications stayed archived — others took their place}}"},"restore":"Restore","restore_superseded":"Another notification has taken its place, so it stays archived."},"onboarding":{"flow":{"title":"Add your properties","stage_of":"Stage {current} of {total}","complete":"Setup complete"},"steps":{"connect":"Add your properties","groups":"Opal suggests your groups","entry":"Groups accepted · check-in next","workspace":"Set up check-in instructions","done":"Property setup complete","dashboard":"Your dashboard · finish setting up"},"actions":{"back":"Back","next":"Next"},"connect":{"eyebrow":"Step 1 · Add your properties","heading":"Connect your PMS to bring in your properties","intro":"Pick the system that runs your listings today. One connection imports your properties, listings, reservations and calendars — no manual data entry.","intro_detected":"Pick the system that runs your listings today. We detected {pms} from your sales call. One connection imports your properties, listings, reservations and calendars — no manual data entry.","pms_fallback":"your PMS","detected_chip":"Detected","imports_blurb":"Imports properties, listings, reservations and calendars","connect_pms":"Connect {pms}","connect":"Connect","scope_note":"Locks, upsells and the rest are set up separately — this flow focuses on getting your properties in, grouped, and ready to check guests in.","success":{"title":"{pms} connected","opal":"Opal:","body":"Imported your properties, reservations and calendars. Next I'll suggest property groups for your review.","continue":"Continue to grouping"},"search_placeholder":"Search property management systems…","search_empty":"No systems match your search.","import":{"title":"Connected to {pms} — now bring in your properties","body":"Your {pms} listings are syncing. Choose which ones become properties in SuiteOp — that is what unlocks the rest of setup.","cta":"Open full {pms} settings"},"connected":{"title":"Connected to {pms}","title_generic":"Your PMS is connected","body":"Add another system below if you run more than one — otherwise carry on.","continue":"Continue"}},"stages":{"add":"Add your properties","group":"Group your properties","instr":"Set up check-in instructions"},"setup_pill":{"label":"Setup","progress":"{done} of {total}","aria_label":"Setup progress: {done} of {total} stages complete"},"workspace":{"title":"Set up check-in instructions","back_title":"Back to setup","crumb_properties":"Properties","crumb_instructions":"Check-in instructions","step_of":"Step 3 of 3","properties":"Properties","x_of_set":"{set} of {total} set","search_placeholder":"Search properties…","set":"Set","not_set":"Not set","scope":{"applying_to":"Applying to","menu_heading":"Choose what this applies to","opt_one":"This property only","opt_selected":"Selected properties","opt_group":"A whole group","opt_all":"All properties","meta_one":"ATX Loft · 1 property","meta_selected":"{count, plural, one {# selected} other {# selected}} in the panel","meta_group":"{group} · {total, plural, one {# property} other {# properties}}","meta_all":"Every property · {total}","one_label":"ATX Loft","one_sub":"this property only","selected_label":"Selected properties","selected_sub":"the properties you checked","group_label":"{group} group","group_sub":"the whole group inherits one set","all_label":"All properties","all_sub":"every property in your portfolio"},"paste":{"heading":"Your check-in instructions","insert_variable":"Insert variable","vars_heading":"Optional · fills per property","empty_title":"Paste what you already have","empty_body":"Copy your existing check-in notes from Airbnb, your PMS, or a doc into the box below. I'll format them into clean steps — I won't invent anything you didn't write.","textarea_placeholder":"Paste your check-in instructions here…","hint":"Most hosts just paste plain text. A <v>'{{'variable'}}'</v> like the door code is optional — Opal fills it per property.","format_cta":"Format with Opal & apply","formatting":"Opal is formatting…"},"vars":{"door_code":"Door / access code","wifi_name":"WiFi network","wifi_password":"WiFi password","guest_name":"Guest name","checkin_time":"Check-in time","checkout_time":"Check-out time","address":"Property address","parking":"Parking","host_name":"Host name"},"result":{"formatted_steps":"Opal's formatted steps","edit":"Edit","preview":"Preview","access_code_block":"Access code block","auto_filled":"auto-filled per property"},"apply":{"formatted_title":"Opal formatted your notes into {count, plural, one {# clean step} other {# clean steps}}","formatted_body":"Apply to <target></target> — {sub}.","apply_cta":"Apply to {count, plural, one {# property} other {# properties}}","applied_title":"Applied to {count, plural, one {# property} other {# properties}}","applied_body":"Each property fills in its own door code, WiFi and times. Re-paste and reformat anytime to update them all.","finish_cta":"Finish property setup","scope_unsupported":"Scoped apply is coming soon — switch to All properties to apply for now."},"preview":{"label":"Live guest preview","previewing_as":"Previewing as {name} · {arrival}","welcome":"Welcome, {name}","footer":"Each guest sees their own door code, WiFi and times filled in automatically."},"fine_tune":{"open":"Fine-tune steps & media","hide":"Hide step editor","editor_title":"Step editor","editor_sub":"Reorder steps","move_up":"Move up","move_down":"Move down","line_count":"{count, plural, one {# line} other {# lines}}"},"ungrouped":"Ungrouped","loading_properties":"Loading properties…","no_properties":"No properties found","continue":"Continue","skip":"Skip for now"},"groups":{"eyebrow":"Step 3 · Review your groups","title":"Opal suggested your property groups","intro":"Groups control who on your team can see which properties — and let you share one entry code, guest portal, and task scope across units that belong together. Opal grouped by building first so shared front-door codes work, then by market. Review and adjust.","suggest_intro":"I'll group your {count, plural, one {# imported property} other {# imported properties}} by building, then market.","suggest_intro_no_count":"I'll group your imported properties by building, then market.","suggest_cta":"Suggest groups with Opal","thinking_title":"Opal is analyzing your properties…","thinking_basis":"Grouping {basis}…","count_summary":"{groups, plural, one {# group} other {# groups}} · {properties, plural, one {# property} other {# properties}}","basis":{"building":"By building, then market","market":"By market","type":"By type"},"by_chip":{"building":"by building","market":"by market","type":"by type"},"units":"{count, plural, one {# unit} other {# units}}","badge":{"entry_code":"Shared entry code","guest_portal":"Shared guest portal","task_scope":"Task scope","team_access":"Team access"},"adjust_note_opal":"Opal:","adjust_hint":"Rename any group, move a property to another group, or remove a property from grouping. Add a new group below, or delete one to free up its properties. Nothing is saved until you accept.","rename":"Rename group","move_to":"Move to…","ungroup":"Remove from grouping","add_group":"Add a group","new_group_name":"New group","untitled":"Untitled group","delete_group":"Delete group","delete_group_title":"Delete this group — its properties move to ungrouped","empty_group":"No properties yet — move some here.","ungrouped_title":"Ungrouped","ungrouped_hint":"These properties won't be in a group when you accept. Move any back into a group below.","duplicate_name":"Two groups have the same name. Rename one before accepting.","accept":"Accept these groups","accepting":"Accepting…","empty":"No groups to suggest yet. Add properties first.","error":"We couldn't load suggested groups. Try again.","accept_forbidden":"Only someone with access to every property can accept a grouping, because it changes which properties your teammates can reach. Ask an admin or an owner to finish this step.","accept_failed":"We couldn't save these groups. Try again.","accept_no_permission":"You don't have permission to change properties, so you can't accept a grouping. Ask an admin or an owner to finish this step.","continue_without_grouping":"Continue without grouping","how_title":"How groups work","how_access_title":"Control team access.","how_access_body":"Group membership decides who on your team can reach which properties in SuiteOp. Put people who shouldn't see every property into separate groups.","how_shared_title":"Share instructions & codes.","how_shared_body":"A group can hold a shared access code (individual properties can still have their own), plus check-in / out steps and manuals when the guest instructions are the same.","how_hint":"Units in the same building usually belong together.","toggle_properties":"Show or hide this group's properties","back":"Back","skip":"Skip grouping","nothing_to_group":"Nothing to group yet","nothing_to_group_hint":"Groups organise properties you've brought in — so there's nothing to do here until some are.","nothing_to_group_cta":"Go back and add properties"},"entry":{"accepted":"Groups accepted","title":"One step left: your check-in instructions","subtitle":"{count, plural, one {Your <strong># property group</strong> is} other {Your <strong># property groups</strong> are}} set — each one shares an entry code, a guest portal, and a task scope. Now set up how guests get in.","next_step":"Next step","next_title":"Set up check-in instructions","next_body":"Paste your existing check-in notes — from Airbnb, your PMS, or a doc — and Opal formats them into clean steps you apply across a whole group at once.","next_cta":"Set up check-in instructions"},"tracker":{"heading":"Property setup","count":"{done} of {total} done","add":{"name":"Add properties","sub":"Connect your PMS · import properties"},"group":{"name":"Grouping","sub":"Opal-suggested property groups"},"instr":{"name":"Check-in instructions","sub":"Paste & format your instructions","not_set_sub":"Not set · paste & format your instructions"},"pill":{"done":"Done","in_progress":"In progress","set_up":"Set up","not_set":"Not set","edit":"Edit"}},"done":{"title":"Property setup complete","subtitle":"Your properties are in, grouped, and your check-in instructions are set. Guests can be checked in across your portfolio.","recap":{"properties":{"title":"Properties added","detail":"{count, plural, one {# property} other {# properties}} imported"},"groups":{"title":"Grouping accepted","detail":"{count, plural, one {# group} other {# groups}} · access, portal & tasks from one set"},"instructions":{"title":"Check-in instructions set","detail_applied":"Applied to {count, plural, one {# property} other {# properties}} · auto-filled per property","title_todo":"Check-in instructions","detail_todo":"Not set up yet"},"edit":"Edit"},"review_instructions":"Review check-in instructions","back_to_setup":"Back to setup","title_partial":"Your properties are ready","subtitle_partial":"Here's where your setup stands. Anything still open is waiting on your setup list."},"finish":{"title":"Finish setting up · pick up where you left off","progress":"{done} of {total} done · {pct}%","pct":"{pct}%","section_continue":"Continue property setup","section_done":"Done","done_pill":"Done","section_for_you":"For you · from your sales calls","opal_prioritized":"<strong>Opal</strong> prioritized these from your sales calls.","from_sales_call":"from your sales call","section_more":"More you can add","more_footer":"Available whenever you want them.","set_up":"Set up","opens":"opens {dest}","done":{"add":{"name":"Add properties","sub":"120 imported from Guesty"},"group":{"name":"Property groups","sub":"grouped · access, portal & tasks from one set"},"instr":{"name":"Check-in instructions","sub":"formatted by Opal · applied across groups"}},"todo":{"add":{"sub":"Connect your PMS · import properties"},"group":{"sub":"Opal-suggested property groups"},"instr":{"sub":"Not set · paste & format your instructions"}},"todos":{"upsells":{"name":"Set up upsells","hint":"Settings › Portals › Upsells"},"verification":{"name":"Guest verification","hint":"Settings › Portals › Verify"},"portal":{"name":"Guest portal & branding","hint":"Settings › Portals › Brands"},"tasks":{"name":"Turnover tasks & auto-assign","hint":"Settings › Task templates"},"payments":{"name":"Connect payments","hint":"Settings › Payments"},"team":{"name":"Invite your team","hint":"Organization › Members"},"locks":{"name":"Connect locks & devices","hint":"Devices"},"messages":{"name":"Automated messages","hint":"Agents"}},"edit":"Edit"},"tour":{"show_me":"Show me how","resume_at":"Resume · step {current} of {total}","replay":"Replay tour","step_of":"Step {current} of {total}","why_label":"Why this matters","skip":"Skip tour","back":"Back","next":"Next","done":"Got it"},"tours":{"upsells":{"steps":{"0":{"title":"Sell early check-in and late check-out","body":"Accounts start with three upsells already created — Early Check-in, Late Check-out and Mid-stay Clean. Let's price them and turn them on, or add your own if they're gone — about four minutes.","why":"Guests already ask for early check-in, late check-out and mid-stay cleans. Right now you're doing them for free."},"1":{"title":"Your upsells live here","body":"Your upsells live here. Filter by type to find the starter three — Early Check-in, Late Check-out and Mid-stay Clean. Nothing listed? The next two steps add one.","why":"They were created inactive and priced free, so they're invisible to guests until you change both."},"2":{"title":"Start from a template","body":"Browse the template gallery for ready-made upsells — parking, luggage storage, pet fees — with copy already written.","why":"Faster than writing from scratch, and the wording is already tested on real guests."},"3":{"title":"Or add your own","body":"Add an upsell, set a charge type and price, then switch it Active.","why":"An upsell left on the default 'free' charge type earns nothing even once it's live — price it before you activate it."}}},"verification":{"steps":{"0":{"title":"How guest verification works","body":"Every reservation opens a pre-check-in the guest completes before arrival. Each step you enable is one thing they must clear — identity, an agreement, a deposit. Only when the required steps pass does the door code get issued.","why":"The check runs BEFORE access exists, so a guest who fails never gets in. That ordering is the whole protection — a check after arrival is just paperwork."},"1":{"title":"Add the steps you need","body":"Identity check is already on. Add an agreement, a damage deposit or a background check here. Each step gets its own scope: all properties, a group, or specific ones.","why":"The defaults only prove who the guest is. An agreement and a deposit are what cover the unit itself when something goes wrong."},"2":{"title":"Scope decides who sees it","body":"When you open a step, set which properties it applies to. A deposit on your penthouse doesn't have to apply to the studio.","why":"One rule per portfolio is what makes operators give up on verification — they don't want to ask a two-night studio guest for a $500 hold."},"3":{"title":"Then watch it run","body":"Completed and failed pre-check-ins land under Verification status on your dashboard. Anything flagged waits for your review instead of auto-issuing a code.","why":"You only look at the exceptions. The clean ones move themselves along, which is the point of turning this on."}}},"portal":{"steps":{"0":{"title":"How the guest portal works","body":"Every reservation gets a portal link carrying your check-in instructions, door code, upsells and guide. A brand controls how that page looks; a portal decides what goes on it. You already have one of each from signup.","why":"This is the only SuiteOp surface your guest ever sees. Out of the box it carries your org name but our look."},"1":{"title":"Your brand lives here","body":"Open your default brand to set the logo, accent colour and footer. Add more brands if you run distinct property collections under separate names.","why":"One brand per collection is how a manager with two portfolios keeps them from looking like the same company to guests."},"2":{"title":"Your own domain","body":"You're already live on your-slug.guestportal.suiteop.com. White labeling is where you point a domain you own at it instead.","why":"The auto-provisioned address works today, so this is an upgrade you can make whenever — not a blocker for going live."},"3":{"title":"Brands attach to portals","body":"A brand does nothing on its own — assign it to a portal, and every reservation using that portal renders in it.","why":"Editing a brand nobody assigned is the most common way this looks broken: the settings save, and the guest page never changes."}}},"tasks":{"steps":{"0":{"title":"How turnover tasks work","body":"A template is a recipe: a trigger (usually checkout), a checklist, and an assignment rule. When a reservation hits the trigger, SuiteOp creates the real task from the template and routes it to whoever the rule names.","why":"Without a template, every turnover is you sending a message. With one, checkout does it — including the ones you'd have forgotten."},"1":{"title":"Create the template","body":"Name it, pick the trigger, and add the checklist items your cleaners actually work through. Photo-proof items are how completion gets evidenced.","why":"The checklist is what makes the work auditable later — a task marked done with no items proves nothing happened."},"2":{"title":"Give it an assignment rule","body":"Set the department or the specific people it routes to, and scope the template to a property group.","why":"A template with no assignment rule still creates tasks — unassigned ones, sitting in a queue nobody is looking at."},"3":{"title":"Then it runs itself","body":"New tasks appear under Tasks, on the assignee's mobile app, and on your dashboard. You only touch the ones that go wrong.","why":"That's the payoff: you stop dispatching and start exception-handling."}}},"payments":{"steps":{"0":{"title":"How payments work here","body":"SuiteOp doesn't hold money. You connect your own processor account, and upsell charges, damage-deposit holds and fees run through it directly to you.","why":"Until an account is connected, an active upsell can be requested by a guest but never actually charged — the request just sits there."},"1":{"title":"Connect the account","body":"Add an account, pick your processor, and complete its connect flow. Set the default currency while you're here.","why":"Currency is per account: getting it wrong means guests see prices in a currency you don't settle in."},"2":{"title":"Then verify it","body":"Run a test charge before a real guest is on the other end, and check the account shows as active.","why":"A connection that authenticated but can't capture looks identical to a working one until the first real booking fails."}}},"team":{"steps":{"0":{"title":"How team access works","body":"Each person gets their own login and a role in THIS organization. The role plus a property scope decides what they see — a cleaner sees their own jobs on the mobile app, not your revenue.","why":"Tasks are assigned to people. A shared login breaks assignment, shift clock-in and the audit trail all at once."},"1":{"title":"Send an invite","body":"Invite by email, pick the role, and assign the department they work in.","why":"The department is what auto-assignment routes on later — an invite without one means their tasks have nowhere to land."},"2":{"title":"Scope them to properties","body":"Limit them to specific properties or a group. Leave it open only for people who genuinely cover everything.","why":"Scope is the difference between a cleaner seeing three buildings' worth of guest details and seeing only their own."},"3":{"title":"They finish it themselves","body":"The invite email walks them through setting a password. Until they accept, they show as pending here.","why":"Nobody has to share credentials to get somebody working — which is the failure mode this replaces."}}},"locks":{"steps":{"0":{"title":"How door codes work","body":"You connect a lock provider once. SuiteOp then imports your devices, and for each reservation it mints a PIN, pushes it to that property's lock, and revokes it at checkout — automatically.","why":"This is the payoff of everything else: no key handoff, no lockbox, no 2am phone call from somebody standing outside."},"1":{"title":"Connect the provider","body":"Integrations is where the lock ecosystem — Seam, Schlage, Nest and the rest — gets authorized. Connect the account that owns your locks.","why":"One authorization covers the whole portfolio; you don't pair devices one at a time."},"2":{"title":"Your devices land here","body":"After the sync, every lock, hub, thermostat and sensor shows up on this page with its battery and online state.","why":"Battery and connectivity are visible here on purpose — a dead lock is a guest who can't get in, and you want to know first."},"3":{"title":"Map each lock to its property","body":"Open a device and set the property it belongs to. Then issue a test code to prove the round trip.","why":"An unmapped lock never receives a reservation's code. It sits there looking perfectly connected and does nothing."}}},"messages":{"steps":{"0":{"title":"How automated messages work","body":"An agent is a trigger plus an action: when a reservation reaches some point — booked, day before arrival, checkout — it sends the message you wrote, on the channel you picked.","why":"Most guest messages are the same four questions. Automating them means the guest gets their door code without having to ask for it."},"1":{"title":"Create an agent","body":"Start from a template or build one. Pick the trigger and write the message; merge fields fill in the guest's name, code and times per reservation.","why":"Merge fields are why one message covers every reservation instead of you retyping the door code each time."},"2":{"title":"Set the timing and channel","body":"Timing is relative to the reservation — 24 hours before check-in, an hour after checkout. Choose where it sends.","why":"Send a check-in message too early and the code isn't minted yet; the timing is doing real work, not cosmetics."},"3":{"title":"Publish it","body":"Nothing sends until the agent is published. Runs and failures then show up under Agents and on your dashboard.","why":"An unpublished agent looks completely configured and is completely inert — the single most common reason this seems broken."}}}},"import":{"eyebrow":"Step 2 · Bring in your properties","heading":"Choose which {pms} listings become properties","heading_generic":"Choose which listings become properties","account_label":"Importing from","intro":"Pick the ones you want to manage in SuiteOp — the rest won't take it personally.","done_title":"Your properties are in","done_body":"Add more below if you want, or carry on — you can always come back.","continue":"Continue to grouping","no_account":"No property management system is connected yet. Go back a step to connect one.","back":"Back","skip":"Skip for now"}},"opportunities":{"page":{"title":"Opportunities","description":"AI-surfaced improvement items from guest reviews","help_text":"Opportunities are automatically created when AI analyzes guest reviews. Triage them into tasks to track remediation. For guest-reported problems, use Report an Issue instead."},"tabs":{"open":"Open","in_progress":"In Progress","watch":"Watch","completed":"Completed","dismissed":"Dismissed"},"filters":{"search":"Search opportunities...","property":"Property","department":"Department","priority":"Priority","impact":"Impact","last_reported":"Last Reported","min_stays":"Minimum stays","min_stays_option":"{count}+ stays","property_group":"Property group","scope":"Scope"},"columns":{"property":"Property","title":"Title","department":"Department","priority":"Priority","impact":"Impact","last_reported":"Last Reported","just_now":"Just now","stays":"Stays","new":"New","has_linked_task":"Linked task","tasks":"Tasks","no_tasks":"No task","task_count":"{count, plural, one {# task} other {# tasks}}"},"a11y":{"select_all":"Select all","select_row":"Select row"},"impact":{"low":"Low","medium":"Medium","high":"High","critical":"Critical"},"priority":{"watch":"Watch","low":"Low","medium":"Medium","high":"High","urgent":"Urgent"},"kpis":{"open_period":"Open · {period}","period_default":"Last 30 days","period_since":"Since {date}","period_through":"From 30 days ago through {date}","avg_resolution":"Avg. Resolution","top_department":"Top Department","recurring":"Recurring","no_data":"No data yet","duration_under_minute":"under a minute","duration_hours":"{count}h","duration_days":"{count}d"},"detail":{"title":"Opportunity","last_reported":"Last reported on {date}","property_link":"Property","re_opened":"Re-opened","move_to":"Move to","linked_task":"Linked Task","link_existing":"Link existing open task ({count} similar)","go_to_task":"Go to task","unlink_task":"Unlink task","open_reservation":"Open reservation","due_label":"Due","no_linked_task":"No task linked","select_task":"Select a task...","status":"Status","select_department":"Assign department","select_priority":"Set priority","stays_affected":"{count, plural, one {# stay affected} other {# stays affected}}","save_routing":"Save changes","cancel_routing":"Discard","evidence_header":"{count, plural, one {# guest reported this} other {# guests reported this}}","evidence_showing":"Showing {shown} of {total}","evidence_empty":"No guest reports recorded yet","evidence_reports":"{count, plural, one {# report} other {# reports}}","evidence_unknown_stay":"Stay not identified","task_history":"{count, plural, one {# task raised for this} other {# tasks raised for this}}","link_existing_search":"Link an existing task","search_tasks_placeholder":"Search tasks at this property…","no_matching_tasks":"No matching open tasks","raise_task":"Raise a task","raise_task_prefilled":"Title, department and priority are already filled in from this issue — review and create.","link_existing_instead":"Link an existing task instead","raise_another_task":"Raise another task","no_existing_tasks":"No existing tasks found for this issue"},"actions":{"updated":"Opportunity updated","dismissed":"{count, plural, one {# opportunity dismissed} other {# opportunities dismissed}}","bulk_updated":"{count} opportunities updated","task_created":"Task created and linked","task_created_not_linked":"Task created, but it could not be linked to this issue — link it from the panel","task_linked_not_moved":"Task created and linked, but the issues could not be moved to In progress","link_task":"Link","task_linked":"Task linked","task_unlinked":"Task unlinked"},"dismiss_dialog":{"title":"Dismiss Opportunity","dismiss_single":"Dismiss this opportunity only","dismiss_matching":"Dismiss this one and every open opportunity you can access at this property with the same title and scope ({count} will be dismissed)","cancel":"Cancel","confirm":"Dismiss"},"create_task":{"title":"Title","description":"Description","department":"Department","priority":"Priority","due_date":"Due Date","assignee":"Assignee","submit":"Create task","collaborators":"Collaborators","reset":"Reset"},"bulk":{"selected":"{count, plural, one {# opportunity selected} other {# opportunities selected}}","move_to":"Move to","set_department":"Department","set_priority":"Priority","create_task":"Create task","create_task_description":"{count, plural, one {One opportunity will be linked to this task.} other {# opportunities will be linked to this task — completing it closes them all.}}"},"empty":{"open":"No open opportunities. New ones appear here when AI spots recurring themes in your guest reviews.","other":"Nothing here yet."},"scope":{"operation":"Operation-wide","unit":"This unit","portfolio":"Portfolio-wide"},"grouping":{"label":"Group by","none":"No grouping","property":"Property","property_group":"Property group","department":"Department","priority":"Priority","no_property":"No property","no_property_group":"No property group","no_department":"No department","no_priority":"No priority"},"severity":{"safety":"Safety","habitability":"Habitability","experience":"Experience","preference":"Preference"},"link_source":{"identity":"Same issue","title_match":"Matching title","ai":"AI match"}},"organization":{"switcher":{"label":"Organizations","property_operations":"Property Operations","regions_unavailable":"Couldn't load organizations in {regions}. Some may be missing.","create":"Create Organization"},"billing":{"page_title":"Billing"},"create":{"page_title":"Create organization","page_description":"Set up a new organization for your account.","name_label":"Organization name","name_placeholder":"Acme Properties","subdomain_label":"Guest portal subdomain","subdomain_placeholder":"acme-stays","subdomain_help":"Guests will use this address to reach their portal.","region_label":"Hosting region","region_description":"Where this organization will be hosted.","billing_address_label":"Billing address","billing_address_required":"Please select a billing address.","billing_address_incomplete":"Please select a more complete address — some of the details we need are missing from this one.","payment_title":"Payment method","payment_subtitle":"Optional — add a card now or continue without one.","button_create":"Create organization","success":"Created {name}","error":"Failed to create the organization. Please try again.","region_us_label":"Americas (US)","region_eu_label":"Europe (EU)","region_apac_label":"Asia Pacific (APAC)","billing_address_placeholder":"Search for an address..."}},"payments":{"page_title":"Payment Accounts","page_description":"Manage your payment provider accounts and configurations.","add_account":"Add Account","edit_account":"Edit Account","account_details":"Account Details","account_unavailable":"This account is no longer available.","stale_row_notice":"This account was changed elsewhere, so your edits can no longer be saved over it. Your draft is kept here — refreshing discards it and loads the latest values.","refresh_failed_notice":"We couldn't check this account for changes just now, so it may have been updated elsewhere. If it was, saving will be refused rather than overwriting it.","stale_row_refresh_failed_clause":"We also couldn't check just now whether it has changed again since.","stale_row_gone_notice":"This account was changed elsewhere and has since been deleted, so your edits can no longer be saved. Your draft is kept here until you close this panel.","account_read_failed_notice":"We couldn't load this account just now, so there is nothing to edit yet. This doesn't mean the account was deleted — try again.","update_conflict":"This account was changed somewhere else while you were editing. Nothing was saved — reopen the account to load the latest version and make your change again.","intent_payment_account_conflict":"This payment was already recorded on a different payment account. Nothing was charged again — contact support to sort it out.","create_account":"Create Account","no_accounts":"No payment accounts configured yet.","no_accounts_description":"Add a payment account to start processing payments.","delete_title":"Delete Payment Account","delete_description":"Are you sure you want to delete this payment account? This action cannot be undone.","select_provider_title":"Select Payment Provider","select_provider_description":"Choose a payment provider to connect.","stripe_description":"Connect your Stripe account via secure OAuth. No API keys needed.","guesty_pay_description":"Configure GuestyPay with your account details.","guesty_pay_sync_description":"Sync payment accounts from your connected Guesty integration.","guesty_pay_connect_first":"You need a connected Guesty account to sync GuestyPay.","guesty_pay_go_to_integrations":"Go to Guesty integration","sync_from_guesty":"Sync from Guesty","syncing":"Syncing...","juspay_description":"Multi-processor payment orchestration via Hyperswitch.","juspay_already_connected":"JusPay is already connected — one JusPay account per organization.","juspay_error":{"already_connected":"JusPay is already connected for this organization — reload the page to see the account.","unavailable":"JusPay is not available on this environment — contact support.","generic":"JusPay setup failed. Leave this step and come back to try again, and contact support if the problem continues."},"connect_via_oauth":"Connect with Stripe","configure_manually":"Configure","one_click_setup":"Set Up","connecting":"Connecting...","connected_account_id":"Connected Account ID","connected_via":"Connected via","oauth_label":"OAuth","manual_label":"Manual","disconnect":"Disconnect","disconnect_title":"Disconnect Stripe Account","disconnect_description":"This will remove the payment account. You can reconnect at any time.","columns":{"nickname":"Nickname","provider":"Provider","status":"Status","default":"Default","actions":"Actions"},"actions":{"make_default":"Make default"},"provider":{"stripe":"Stripe","guesty_pay":"GuestyPay","juspay":"JusPay"},"status":{"active":"Active","inactive":"Inactive"},"fields":{"provider":"Provider","nickname":"Nickname","external_account_id":"External Account ID","publishable_key":"Publishable Key","currency_code":"Currency Code","is_active":"Active","is_default":"Default Account","provider_config":"Provider Configuration","not_default":"Not the default","is_default_help_current":"Guest payments that are not tied to a specific account are taken on this one.","is_default_help_other":"To make this the account guest payments fall back to, choose Make default on its row.","external_account_id_help":"Set by the provider when the account was connected — it cannot be changed here."},"placeholders":{"nickname":"Enter a nickname for this account","publishable_key":"e.g. pk_live_...","currency_code":"e.g. usd"},"toast":{"created":"Payment account created successfully.","updated":"Payment account updated successfully.","deleted":"Payment account deleted successfully.","connected":"Stripe account connected successfully.","hyperswitch_created":"Hyperswitch account created successfully.","guesty_pay_synced":"GuestyPay accounts synced successfully.","guesty_pay_synced_none":"No GuestyPay processors found on your Guesty account — nothing was imported.","processors_synced":"{count, plural, one {Synced # processor from Hyperswitch.} other {Synced # processors from Hyperswitch.}}","processors_sync_failed":"Failed to sync processors from Hyperswitch.","hyperswitch_create_failed":"Failed to create the Hyperswitch account or profile.","default_updated":"Default payment account updated.","default_update_failed":"Could not change the default payment account.","delete_failed":"Could not delete the payment account."},"hyperswitch_processors_title":"{nickname} — Payment Processors","hyperswitch_processors_description":"Manage the payment processors connected to this Hyperswitch account.","hyperswitch_processors_error":"Failed to load processor configuration.","processors":{"synced_title":"Synced processors","synced_subtitle":"Processors SuiteOp has recorded for this account.","sync_button":"Sync from Hyperswitch","syncing":"Syncing…","load_error":"Failed to load synced processors.","empty_title":"No processors synced yet","empty_subtitle":"Sync from Hyperswitch to pull in the connectors configured below.","methods_label":"Methods","config_title":"Configure connectors","config_subtitle":"Add or edit connectors in the embedded Hyperswitch control center.","status":{"active":"Active","inactive":"Inactive","disabled":"Disabled"}},"juspay_dashboard_title":"JusPay / Hyperswitch","juspay_dashboard_description":"Manage your Hyperswitch dashboard and payment processors.","open_hyperswitch_dashboard":"Open Dashboard","manage_processors_for":"Processors: {nickname}","welcome_title":"Your Hyperswitch account is ready","welcome_description":"We have created a Hyperswitch merchant account for your organization.","welcome_email_notice":"You will receive an activation email from Hyperswitch shortly. Follow the instructions to set a password and access your dashboard.","welcome_next_steps":"Once activated, use the Manage Processors button below to connect your preferred payment processors (Stripe, Adyen, etc.).","search_placeholder":"Search accounts…","tabs":{"all":"All","active":"Active","inactive":"Inactive","default":"Default"},"empty_state":{"title":"No accounts match your filters","subtitle":"Try adjusting your search or clearing filters to see all accounts.","clear_filters":"Clear filters"},"badge":{"default":"Default","oauth":"OAuth","extended_auth_eligible":"30-day holds","extended_auth_ineligible":"7-day holds","extended_auth_hint":"Whether Stripe grants extended (30-day) authorizations on this account. Learned from the first deposit; ask Stripe to enable it (IC+ / lodging MCC) if it shows 7-day.","webhook_key_missing":"Webhook key missing","webhook_key_missing_hint":"This Hyperswitch account has no webhook signing key, so payment notifications are being rejected. SuiteOp retries the repair when you open this page, at most once every 15 minutes; if reloading over the next hour does not clear it, contact support."},"open_dashboard":"Dashboards","open_stripe_dashboard":"Open Stripe Dashboard","open_juspay_dashboard":"Open JusPay Dashboard","open_guesty_dashboard":"Open Guesty Dashboard","wallets":{"title":"Apple Pay & Google Pay","description":"Let guests pay in one tap on your guest portal. We register your portal addresses with Stripe on the account that takes the money.","activate":"Turn on","save":"Save changes","deactivate":"Turn off","on_badge":"On","off_badge":"Off","link_label":"Also offer Stripe Link","link_help":"Link lets returning guests check out with saved details. Turning wallets on switches your checkout to Stripe's recommended payment set, which includes Link unless you turn it off here.","addresses_title":"Your portal addresses","status_active":"Ready","status_pending":"Waiting on Stripe","status_unknown":"Not registered yet","status_pending_help":"Stripe checks each address before wallets appear. This usually takes a moment — reopen this page to refresh.","needs_account":"Finish connecting your Stripe account first — wallets are granted on the connected account that takes the money.","needs_hostname":"Your guest portal has no address yet, so there is nothing for Stripe to verify.","activated_toast":"Apple Pay and Google Pay are on","deactivated_toast":"Apple Pay and Google Pay are off","error_toast":"Could not update wallet payments","load_error":"We could not load your wallet settings.","retry":"Try again","error":"Could not load wallet payments"}},"portal":{"brands_search_placeholder":"Search brands…","brands_status_label":"Status","brands_status_all":"All brands","brands_status_in_use":"In use","brands_status_unused":"Unused","brands_status_default":"Default only","brands_sort_default_first":"Default first","brands_sort_name_asc":"Name (A–Z)","brands_sort_name_desc":"Name (Z–A)","brands_sort_updated_desc":"Recently updated","brands_sort_updated_asc":"Oldest updated","brands_filter_no_results":"No brands match your filters.","page_title":"Portal Configuration","tab_portals":"Portals","tab_brands":"Brands","portals_add":"New Portal","portals_search_placeholder":"Search portals…","portals_search_no_results":"No portals match your search.","portals_sort_default_first":"Default first","portals_sort_name_asc":"Name (A–Z)","portals_sort_name_desc":"Name (Z–A)","portals_empty_title":"No portals yet","portals_empty_description":"Create your first portal template to configure the guest experience.","portals_col_name":"Name","portals_col_default":"Default","portals_col_email":"Support Email","portals_col_branding":"Brand","portals_col_properties":"Properties","portals_col_verification":"Verification","portals_col_upsells":"Upsells","portals_col_guides":"Guides","portals_cell_verification_active":"Active {active}/{total}","portals_cell_verification_disabled":"Disabled","portals_cell_upsells":"{count, plural, =0 {No upsells} one {1 upsell} other {# upsells}}","portals_cell_guides":"{count, plural, =0 {No guide lists} one {1 guide list} other {# guide lists}}","portals_scope_groups":"{count, plural, one {1 group} other {# groups}}","portals_scope_tags":"{count, plural, one {1 tag} other {# tags}}","portals_delete_title":"Delete Portal","portals_delete_confirm":"This will permanently delete this portal configuration. Properties using it will be unlinked.","portals_delete_blocked_title":"Can't delete portal","portals_delete_review_action":"Review portal","portal_config_section_danger":"Danger Zone","portal_config_delete_label":"Delete this portal","portal_config_delete_button":"Delete Portal","portals_delete_impact_loading":"Checking what depends on this portal…","portals_delete_blocked_default":"This is your default portal. Set another portal as default before deleting it.","portals_delete_blocked_properties":"{count, plural, one {1 property is still assigned to this portal} other {# properties are still assigned to this portal}}. Reassign them before deleting it.","portals_delete_blocked_assignments":"{count, plural, one {1 property group or tag is still assigned to this portal} other {# property groups or tags are still assigned to this portal}}. Reassign them before deleting it.","portals_delete_scope_warning":"Deleting it will also remove {items} assigned to this portal.","portals_delete_scope_upsells":"{count, plural, one {1 upsell} other {# upsells}}","portals_delete_scope_precheck":"{count, plural, one {1 verification step} other {# verification steps}}","portals_delete_scope_guides":"{count, plural, one {1 guide list} other {# guide lists}}","portals_delete_scope_events":"{count, plural, one {1 event} other {# events}}","portal_sheet_create_title":"New Portal","portal_sheet_edit_title":"Edit Portal","portal_header_subtitle_create":"Create a new portal","portal_header_properties_count":"{count, plural, =0 {No properties} one {1 property} other {# properties}}","portal_section_identity":"Identity","portal_section_support":"Support Contact","portal_section_features":"Features","portal_section_special_offer":"Special Offer","portal_field_name":"Portal Name","portal_field_branding":"Brand","portal_field_branding_none":"No brand","portal_branding_create_shortcut":"Create new brand","portal_field_support_email":"Support Email","portal_field_support_phone":"Phone","portal_field_support_whatsapp":"WhatsApp","portal_field_support_text":"Text Phone","portal_field_precheckin":"Pre-checkin","portal_field_precheckin_prompt":"Pre-check-in prompt","portal_field_precheckin_prompt_placeholder":"e.g. Before we can share your check-in details, please complete a few quick steps.","portal_field_ticketing":"Ticketing","portal_field_review_request":"Review Request (checkout)","portal_field_review_request_checkin":"Review Request (checkin)","portal_field_confetti":"Confetti on Success","portal_field_cart_abandonment":"Cart Abandonment","portal_field_special_offer_active":"Enable Special Offer","portal_field_special_offer_url":"Offer URL","portal_field_default":"Default Portal","portal_field_default_locked_helper":"This is your default portal. Set another portal as default to change it.","portal_field_default_scoped_helper":"Only a member with access to every property can set the default portal.","portal_field_support_notes":"Internal Support Notes","portal_field_excluded_quick_access":"Excluded Quick Access","portal_field_special_offer_title":"Offer Title","portal_field_special_offer_title_placeholder":"e.g. 20% off your next stay","portal_field_special_offer_type":"Offer Type","portal_field_special_offer_type_placeholder":"e.g. Discount, Free Upgrade","portal_field_special_offer_cta":"Call-to-action Text","portal_field_special_offer_cta_placeholder":"e.g. Claim Offer","portal_field_special_offer_image":"Cover Image","portal_field_special_offer_image_helper":"Shown on the offer card. JPG or PNG, max 5 MB.","portal_section_quick_access":"Quick Access","portal_quick_access_description":"Select the quick access shortcuts to show in the guest portal.","portal_quick_access_type_uber":"Uber","portal_quick_access_type_report_an_issue":"Report an issue","portal_quick_access_type_find_parking":"Find parking","portal_quick_access_type_find_parking_justpark":"JustPark","portal_quick_access_type_rent_baby_gear":"Rent baby gear","portal_section_assignments":"Assignments","portal_assignments_note":"Upsell and guide assignments are managed through the Upsells and Guides tabs. Property assignment is done from the Properties page.","portal_section_assigned_properties":"Assigned Properties","portal_no_assigned_properties":"No properties assigned. Assign from the Properties page.","portal_tab_general":"General","portal_tab_precheckin":"Pre-Checkin","portal_tab_properties":"Properties","portal_badge_required":"Required","portal_badge_optional":"Optional","portal_section_essential":"Essential Information","portal_section_contact":"Contact Options","portal_section_features_integrations":"Features & Integrations","portal_helper_name":"Internal name for this portal","portal_helper_branding":"Select a brand profile","portal_helper_support_email":"Primary contact email for guests","portal_helper_phone":"For phone support","portal_helper_text":"For SMS support","portal_helper_whatsapp":"For WhatsApp support","portal_field_preferred_method":"Preferred Communication Method","portal_helper_preferred_method":"This option adds a contact button to the bottom-right of the guest portal.","portal_method_whatsapp":"WhatsApp","portal_method_text":"Text Message","portal_method_phone":"Phone","portal_helper_preferred_method_locked":"Options with a lock badge require a phone number to be added in the fields above before they can be selected.","portal_helper_support_notes":"Internal notes","portal_helper_precheckin":"Enable the pre-checkin flow for guests","portal_helper_precheckin_prompt":"Shown to guests on the verification screen. Leave blank to use the default message.","portal_helper_ticketing":"Enable guest support ticketing","portal_helper_review_request":"Request review after checkout","portal_helper_review_request_checkin":"Request review after checkin","portal_helper_confetti":"Show confetti animation on completion","portal_helper_cart_abandonment":"Offer guests back a purchase they started but didn't complete","portal_helper_special_offer_url":"Link to the special offer page","portal_precheckin_note":"Pre-checkin steps are managed in the Verify tab.","portal_unsaved":"Unsaved","portal_block_kind_identity":"Identity","portal_block_kind_content":"Content","portal_block_kind_behavior":"Behavior","portal_block_kind_promotion":"Promotion","portal_block_kind_layout":"Layout","portal_block_kind_scope":"Scope","portal_block_kind_activity":"Record","record_activity_title":"Activity","record_activity_empty":"No activity yet","record_activity_unavailable":"Activity couldn't be loaded","record_activity_created":"created this record","record_activity_updated":"updated this record","record_activity_deleted":"deleted this record","record_activity_imported_from":"imported from {source}","record_activity_system":"System","record_activity_via_support":"via SuiteOp Support","portal_block_kind_flow":"Flow","portal_block_kind_visual":"Visual","portal_block_kind_domain":"Domain","portal_block_kind_danger":"Danger","portal_block_kind_configuration":"Configuration","portal_block_kind_map":"Map","portal_block_kind_rules":"Rules","portal_block_kind_translations":"Translations","portal_block_kind_when":"When","portal_block_kind_conditional":"Conditional","portal_block_kind_options":"Options","portal_block_kind_where":"Where","portal_block_kind_detail":"Detail","portal_block_kind_anchor":"Anchor","portal_block_kind_filter":"Filter","portal_block_kind_results":"Results","portal_precheckin_steps_title":"Pre-Checkin Steps","portal_precheckin_steps_helper":"Steps run in the order shown. Edit each in the Verify tab.","portal_precheckin_steps_manage":"Manage in Verify tab","portal_precheckin_steps_empty":"No pre-checkin steps yet.","portal_precheckin_step_active":"Active","portal_precheckin_step_disabled":"Disabled","scope_no_scope_warning":"Assign this to at least one property, or it won’t appear anywhere.","scope_selection_required":"Select at least one item in an enabled scope, or turn the scope off to leave this rule unassigned.","portal_properties_assignment_note":"Property assignment is managed from the Properties page.","portal_properties_upsell_guide_note":"Upsell and guide assignments are managed from their respective tabs.","portal_properties_description":"Select which properties use this portal configuration.","portal_property_assigned":"Property assignment updated","brands_add":"New Brand","brands_customurl_hint":"Manage typography, SEO, and custom domains under <link>White-Labeling</link>.","brands_empty_title":"No brands yet","brands_empty_description":"Create a brand profile to customize the portal appearance.","brands_col_name":"Name","brands_col_logo":"Logo","brands_col_palette":"Colour palette","brands_col_default":"Default","brands_col_portals":"Portals","brands_delete_title":"Delete Brand","brands_delete_confirm":"This will permanently delete this brand. Portal settings using it will have their branding cleared.","brands_delete_impact_loading":"Checking whether this brand can be deleted…","brands_delete_blocked_title":"Can't delete brand","brands_delete_blocked_default":"This is your default brand. Make another brand the default before deleting it.","brand_delete_in_use":"{count, plural, one {1 portal currently uses this brand. Deleting it will leave that portal without a brand (it will fall back to the default).} other {# portals currently use this brand. Deleting it will leave those portals without a brand (they will fall back to the default).}}","brand_sheet_title":"Branding preferences","brand_sheet_create_title":"New Brand","brand_sheet_created_pending_title":"Brand created","brand_header_subtitle_created_pending":"Created — save still pending","brand_pill_created_pending":"Save pending","brand_created_pending_note":"This brand has been created. Review what's still pending and save to try again. To change the callout, finish saving and then reopen the brand.","brand_created_discard_title":"Discard pending changes?","brand_created_discard_description":"The brand has already been created and will remain. Only the edits and images you haven't saved yet will be discarded.","brand_sheet_edit_title":"Edit Brand","brand_header_subtitle_create":"Create a new brand","brand_header_used_by_portals_count":"{count, plural, =0 {Used by no portals} one {Used by 1 portal} other {Used by # portals}}","brand_section_brand_identity":"Brand Identity","brand_section_identity":"Identity","brand_section_colors":"Colors","rich_text_brand_custom_colors":"Brand & custom colors","rich_text_custom_colors":"Custom colors","rich_text_highlight":"Highlight","brand_section_visual_assets":"Visual Assets","brand_section_white_labeling":"White Labeling","brand_section_social":"Social Media","brand_section_footer_preview":"Footer Preview","brand_badge_required":"Required","brand_badge_optional":"Optional","brand_white_labeling_note":"Custom URL/domain is managed in Settings > White Labeling.","brand_field_callout_message":"Callout message","brand_field_callout_message_placeholder":"Enter the callout message guests will see","brand_footer_preview_label":"Footer Preview","brand_footer_logo_placeholder":"No logo set","brand_footer_powered_by":"Powered by SuiteOp","brand_footer_callout_placeholder":"Callout message will appear here","brand_logo_hint":"White version on transparent background, 4:2 ratio","brand_logo_preview_label":"Logo Preview","brand_section_callout_message":"Callout Message","brand_callout_message_description":"Message displayed at the bottom of all guides.","brand_social_description":"Your social media links will appear in the footer of your guest portal.","brand_section_usage":"Usage","brand_usage_placeholder":"Portal usage statistics will be available once the branding is saved.","brand_section_danger":"Delete brand","brand_delete_label":"Delete this brand","brand_delete_helper":"Removes it from all portals and templates.","brand_delete_button":"Delete Brand","brand_field_name":"Company Name","brand_field_name_helper":"Public name for this brand","brand_field_nickname":"Nickname","brand_field_nickname_helper":"Internal reference name","brand_field_text_color":"Text Color","brand_field_text_color_helper":"Main text color","brand_field_primary_color":"Primary Color","brand_field_primary_color_helper":"Used for CTAs and active elements","brand_field_background_color_helper":"The page behind your portal. Cards, borders and quiet text adjust to match.","brand_field_background_color":"Background","brand_background_suggestion_dismiss":"Not now","brand_background_suggestion_apply":"Apply","brand_background_suggestion_body":"This brand’s colours look like they were chosen for a dark portal. Apply {color} as the background?","brand_background_suggestion_title":"Built for a dark background?","portal_name_taken":"A portal with this name already exists.","brand_contrast_aa_warning":"Low contrast between the text colour and the page background ({ratio}:1). WCAG AA recommends at least 4.5:1.","brand_contrast_tooltip_pass":"Contrast against the page background: {ratio}:1 — meets the recommended minimum.","brand_contrast_tooltip_fail":"Contrast against the page background: {ratio}:1 — below the recommended minimum.","brand_contrast_warning_text":"This text colour may be hard to read on the page background. WCAG AA recommends at least 4.5:1.","brand_contrast_warning_ui":"This colour is close to the page background, so shapes filled with it may be hard to see. WCAG recommends at least 3:1.","brand_contrast_warning_ui_label":"Text placed on this colour falls below the 4.5:1 WCAG AA recommends. The portal picks the label shade automatically to match how a fill of this colour is normally used, so a slightly darker or lighter shade of the colour itself is what fixes this.","brand_field_secondary_color":"Secondary Color","brand_field_secondary_color_helper":"Used for the selected tab and secondary buttons","brand_field_footer_color":"Footer Color","brand_field_footer_color_helper":"Background color for portal footer","brand_field_logo_url":"Logo URL","brand_field_background_image":"Cover Image","brand_field_background_image_helper":"Shown behind the guest portal home screen. JPG or PNG, max 5 MB.","brand_field_facebook":"Facebook","brand_field_linkedin":"LinkedIn","brand_field_instagram":"Instagram","brand_field_default":"Mark as default","brand_field_show_powered_by":"Show \"Powered by SuiteOp\" tagline","brand_field_show_powered_by_helper":"Disable on enterprise plans to fully white-label the guest portal footer.","brand_field_custom_url":"Linked custom URL","brand_field_custom_url_helper":"This brand's colors render on the guest portal at this domain. New brands use your organization's default domain until you pick another.","brand_field_custom_url_link_hint":"Create or edit white-label URLs in <link>Settings > White Labeling</link>.","verify_type_picker_title":"Select Step Type","verify_type_picker_description":"Choose the type of verification step to add to your pre-checkin flow.","verify_step_your_details":"Guest Details","verify_step_your_details_description":"Collect and verify key guest details including email, arrival time, and more.","verify_step_additional_questions":"Additional Questions","verify_step_additional_questions_description":"Use pre-arrival questions to personalize guest stays. Responses can trigger notifications or manual review.","verify_step_other_guests":"Other Guests","verify_step_other_guests_description":"The primary guest adds other travelers' details for communication and re-marketing.","verify_step_agreement":"Agreement","verify_step_agreement_description":"Require guests to sign agreements with dynamic variables. Connect DocuSign for more options.","verify_step_identity_check":"Identity Check","verify_step_identity_check_description":"Guests upload ID and selfie. SuiteOp verifies details match and flags fraud risks.","verify_step_background_check":"Background Check","verify_step_background_check_description":"Enable criminal record checks via Authenticate.com. Fees apply.","verify_step_authority_reporting":"Authority Reporting","verify_step_authority_reporting_description":"Automatic reporting of guest information to local authorities via GuestAdmin.","verify_step_screen_and_protect":"Screen & Protect","verify_step_screen_and_protect_description":"Screen guests against watchlists and databases for property protection","verify_step_damage_deposit":"Protection — Waiver & Deposit","verify_step_damage_deposit_description":"Configure damage waiver and security deposit options.","verify_step_mandatory_fee":"Mandatory Fee","verify_step_mandatory_fee_description":"Charge guests a mandatory fee during the pre-checkin process.","verify_step_document_upload":"Document Upload","verify_step_document_upload_description":"Request guests to upload documents such as parking passes, pet vaccination records, or signed rental agreements.","tab_verify":"Verify","verify_add":"New Step","verify_search_placeholder":"Search steps…","verify_filter_step_type_label":"Step Type","verify_filter_status_label":"Status","verify_filter_no_results":"No steps match your filters.","verify_filter_property_label":"Property","verify_filter_group_label":"Group","verify_filter_portal_label":"Portal","verify_filter_tag_label":"Tag","verify_filter_assignment_label":"Assignment","verify_filter_assigned":"Assigned","verify_filter_unassigned":"Unassigned","verify_empty_title":"No precheck steps yet","verify_empty_description":"Create pre-checkin verification steps for your guests.","verify_col_nickname":"Nickname","verify_col_step_type":"Step Type","verify_col_active":"Status","verify_col_scope":"Scope","verify_scope_unassigned":"Unassigned","verify_scope_portals":"{count, plural, one {1 portal} other {# portals}}","verify_scope_properties":"{count, plural, one {1 property} other {# properties}}","verify_scope_groups":"{count, plural, one {1 group} other {# groups}}","verify_scope_tags":"{count, plural, one {1 tag} other {# tags}}","verify_delete_title":"Delete Step","verify_delete_confirm":"This will permanently delete this precheck step. Properties using it will be unlinked.","verify_delete_impact_loading":"Checking for guests currently on this step…","verify_delete_blocked_title":"Can't delete step","verify_delete_blocked_guests":"{count, plural, one {1 guest is completing this step right now} other {# guests are completing this step right now}}. Wait for them to finish, or deactivate the step instead of deleting it.","verify_delete_deactivate_action":"Deactivate step","verify_section_danger":"Danger Zone","verify_readonly_hint":"View-only access — ask an admin to make changes.","verify_delete_label":"Delete this step","verify_delete_button":"Delete Step","verify_sheet_create_title":"New Precheck Step","verify_sheet_edit_title":"Edit Precheck Step","verify_save_confirm_title":"Publish this step to guests?","verify_save_confirm_description":"This step is Active, so saving makes it live immediately to the guests it applies to — including any of them with pre-check-in open right now. Guest-facing text that was already published keeps your latest edits even if you cancel; text added for the first time is kept only when you save the step.","verify_save_confirm_action":"Save & publish","verify_save_confirm_inactive_title":"Save this step?","verify_save_confirm_inactive_description":"This step is Inactive, so guests won't see it — it must be marked Active before it can reach them. Guest-facing text that was already published keeps your latest edits even if you cancel; text added for the first time is kept only when you save the step.","verify_save_confirm_inactive_action":"Save step","verify_header_subtitle_create":"Create a new precheck step","verify_field_nickname":"Nickname","verify_field_nickname_hint":"Internal reference only — guests never see this.","verify_field_display_title":"Public step name","verify_field_display_title_hint":"What guests see as the step heading. Leave empty to use the default name for this step type.","verify_field_active":"Active","verify_field_active_hint":"Turn off to keep the step as a draft. Only active steps are shown to guests.","verify_field_guest_description":"Guest description","verify_field_guest_description_hint":"Optional text shown to guests at the top of this step. Leave blank to use the default description.","verify_field_step_type":"Step Type","verify_field_step_type_placeholder":"Select step type","verify_field_manual_review":"Hold for staff review","verify_field_manual_review_hint":"When this step flags a submission, the guest waits for a team member to approve it. Switch off and flagged submissions complete on their own.","verify_section_common":"Common Fields","verify_section_source_rules":"Source Rules","verify_section_source_rules_description":"Control when this step applies based on reservation attributes.","verify_source_card_los":"Length of Stay","verify_source_card_los_min":"Min nights","verify_source_card_los_max":"Max nights","verify_source_card_los_mode_label":"Length of stay rule","verify_source_card_los_mode_any":"Any length of stay","verify_source_card_los_mode_at_most":"Short stays only","verify_source_card_los_mode_at_least":"Long stays only","verify_source_card_los_mode_between":"Stays in a set range","verify_source_card_los_summary_at_most":"Shown only for stays of {max, plural, one {# night} other {# nights}} or fewer.","verify_source_card_los_summary_at_least":"Shown only for stays of {min, plural, one {# night} other {# nights}} or more.","verify_source_card_los_summary_between":"Shown only for stays of {min} to {max, plural, one {# night} other {# nights}}.","verify_source_card_lead_time":"Booking Lead Time","verify_source_card_lead_time_mode_label":"Booking lead time rule","verify_source_card_lead_time_mode_any":"Any booking lead time","verify_source_card_lead_time_mode_at_most":"Last-minute bookings only","verify_source_card_lead_time_mode_at_least":"Bookings made well in advance only","verify_source_card_lead_time_mode_between":"Bookings made in a set range","verify_source_card_lead_time_min":"Min days before","verify_source_card_lead_time_max":"Max days before","verify_source_card_lead_time_summary_at_most":"Shown only when the guest booked {max, plural, one {# day} other {# days}} or fewer before check-in.","verify_source_card_lead_time_summary_at_least":"Shown only when the guest booked {min, plural, one {# day} other {# days}} or more before check-in.","verify_source_card_lead_time_summary_between":"Shown only when the guest booked between {min} and {max, plural, one {# day} other {# days}} before check-in.","precheck_error_lead_time_inverted":"The maximum must be at least the minimum — an inverted range would hide this step from every guest.","precheck_error_los_inverted":"The maximum must be at least the minimum — an inverted range would hide this step from every guest.","verify_source_card_booking_sources":"Booking Sources","verify_source_inclusion_type_aria":"Booking Sources — Mode","verify_source_inclusion_all_except_selected":"All sources, except selected","verify_source_inclusion_only_selected":"Only selected sources","verify_source_card_booking_sources_hint_exclude":"Click to exclude sources","verify_source_card_booking_sources_hint_include":"Click to include sources","verify_source_card_exclude_returning":"Exclude Returning Guests","verify_source_card_always_show":"Always Show This Step","verify_source_card_always_show_hint":"When on, this step is always shown to guests, overriding all source rules below (booking source, length of stay, booking lead time, and returning guests).","verify_booking_source_airbnb":"Airbnb","verify_booking_source_booking_com":"Booking.com","verify_booking_source_vrbo":"VRBO","verify_booking_source_expedia":"Expedia","verify_booking_source_american_express_travel":"Amex Travel","verify_booking_source_direct":"Direct","verify_booking_source_direct_manual":"Direct (Manual)","verify_booking_source_direct_group_booking":"Direct (Group)","verify_booking_source_hopper":"Hopper","verify_booking_source_marriott_homes_villas":"Marriott H&V","verify_booking_source_home_to_go":"HomeToGo","verify_booking_source_travel_staytion":"Travel Staytion","verify_booking_source_agoda":"Agoda","verify_booking_source_whimstay":"Whimstay","verify_booking_source_trip_com":"Trip.com","verify_booking_source_blueground":"Blueground","verify_booking_source_homeaway":"HomeAway","verify_booking_source_unknown":"Unknown","verify_booking_source_google_vacation_rentals":"Google VR","verify_booking_source_owner_stay":"Owner Stay","verify_booking_source_employee_stay":"Employee Stay","verify_booking_source_suiteop":"SuiteOp","verify_booking_source_operations_cleaning":"Ops (Cleaning)","verify_section_your_details":"Your Details Configuration","verify_section_your_details_description":"Configure what information is collected from guests.","verify_details_email_required":"Require Email","verify_details_email_consent":"Request Email Consent","verify_details_eta":"Request Estimated Arrival Time","verify_section_identity_check":"Identity Check Configuration","verify_identity_document_types":"Identification Type","verify_identity_document_types_placeholder":"Choose some options...","verify_identity_document_types_note":"Guests can only submit the document types you select. At least one must stay enabled.","verify_identity_document_type_passport":"Passport","verify_identity_document_type_drivers_license":"Driver's licence","verify_identity_document_type_identification_card":"ID card","verify_identity_manual_upload":"Allow Manual ID Upload","verify_identity_sex_offender":"Sex Offender Database Check","verify_identity_sex_offender_note":"Charged $0.25 per verification","verify_identity_ssn_hidden":"Hide SSN Field","verify_identity_distance_override":"Local Guest Distance (km)","verify_identity_distance_override_placeholder":"Default","verify_section_damage_deposit":"Security Deposit Configuration","verify_section_damage_deposit_description":"Configure security deposit collection settings.","verify_deposit_enabled":"Enable Security Deposit","verify_deposit_amount":"Deposit Amount (cents)","verify_deposit_amount_hint":"Enter amount in cents (e.g. 10000 = $100.00)","verify_deposit_days_before":"Days Before Check-in to Charge","verify_deposit_days_before_helper":"Number of days before check-in to collect the deposit","damage_deposit_section_title":"Protection — Waiver & Deposit","damage_deposit_section_description":"Both options offer protection, but they work differently. A security deposit is a refundable hold charged upfront and covers damages after checkout, while a damage waiver is a non-refundable fee that limits guest liability without tying up their funds.","damage_waiver_title":"Damage Waiver","damage_waiver_description":"A damage waiver is a non-refundable fee that covers accidental damages up to a set limit, giving guests peace of mind that minor accidents are fully covered.","damage_waiver_amount_label":"Damage waiver amount","damage_waiver_pricing_basis_aria":"Damage waiver amount — Charged per","damage_waiver_pricing_basis_per_night":"per night","damage_waiver_pricing_basis_per_guest":"per guest","damage_waiver_pricing_basis_per_stay":"per stay","damage_waiver_pricing_basis_hint_per_night":"The guest pays this amount for every night of the stay.","damage_waiver_pricing_basis_hint_per_guest":"The guest pays this amount for every guest on the booking, however long they stay.","damage_waiver_pricing_basis_hint_per_stay":"The guest pays this amount once, whatever the length of the stay or the number of guests.","damage_waiver_payment_account":"Payment account","damage_waiver_guest_description":"Description","damage_waiver_guest_description_hint":"Optional description displayed to your guests above the payment screen.","damage_waiver_max_amount":"Maximum amount per reservation","damage_waiver_make_optional":"Make Waiver Optional","damage_waiver_make_optional_hint":"Guests can decline the waiver and accept responsibility for damages instead.","damage_waiver_make_optional_deposit_conflict":"Unavailable while the security deposit is enabled — guests choose between the waiver and the deposit, so coverage can't be declined.","damage_waiver_min_los":"Minimum Length of stay to display damage waiver","damage_waiver_min_los_hint":"Only valid if both the security deposit and waiver are enabled","security_deposit_title":"Security Deposit","security_deposit_description":"A security deposit is a refundable hold placed via a selected payment account to cover potential damages during a stay. If the card network's hold window ends before the release date, the hold is re-authorized before checkout — never after. The hold is released automatically the configured number of days after checkout unless you capture it; if there's damage, capture any amount and the remainder is released.","security_deposit_amount_label":"Amount","security_deposit_payment_account":"Payment account","security_deposit_guest_description":"Description","security_deposit_guest_description_hint":"Optional description displayed to your guests above the payment screen.","security_deposit_delay":"Delay deposit until X days before check-in","security_deposit_delay_days":"Days before check-in","security_deposit_release_days":"Days after checkout to release the hold","security_deposit_release_days_hint":"0–28. The hold is released automatically this many days after checkout unless captured. Default 3.","security_deposit_charge_stays_over_nights_label":"Charge instead of hold for stays longer than","security_deposit_charge_stays_over_nights_suffix":"nights","security_deposit_charge_stays_over_nights_placeholder":"Never","security_deposit_charge_stays_over_nights_hint":"For longer stays the deposit is charged when the guest pays and refunded automatically after checkout unless you claim damage. Stripe keeps its processing fee.","security_deposit_capture_on_renewal_failure":"If a hold can't be renewed, charge the deposit instead","security_deposit_capture_on_renewal_failure_hint":"Charged deposits are refunded automatically after checkout unless you claim damage. Stripe keeps its processing fee.","verify_section_other_guests":"Other Guests Configuration","verify_section_other_guests_description":"Configure guest registration requirements.","verify_guests_require_all":"Require All Guest Information","verify_guests_require_id_upload":"Request Photo ID From All Adult Guests","verify_guests_require_id_upload_description":"Adults must upload a photo ID when completing guest registration.","verify_section_screen_and_protect":"Screen & Protect Configuration","verify_screen_and_protect_note":"Guest screening is handled automatically by Truvi Screen & Protect.","verify_section_background_check":"Background Check Configuration","verify_bgc_medallion_workflow_id":"Preferred Medallion Workflow ID","verify_bgc_medallion_workflow_id_helper":"Enter the workflow ID from your Authenticate.com dashboard.","verify_bgc_ssn_hidden":"Hide SSN Field","verify_bgc_ssn_hidden_helper":"When enabled, the SSN input field will be hidden from the guest during the background check step.","verify_bgc_integration_note":"Connect your Authenticate.com account in Settings > Integrations to enable background checks.","verify_bgc_connect_link":"Open Authenticate.com integration","verify_bgc_account_label":"Authenticate.com Account","verify_bgc_account_helper":"Select the connected Authenticate.com account to use for background checks.","verify_bgc_account_placeholder":"Select account...","verify_bgc_configuration_warning_title":"Background check configuration needs attention","verify_bgc_configuration_warning_description":"{count, plural, one {# active background check has no connected Authenticate.com account and is being skipped for guests.} other {# active background checks have no connected Authenticate.com account and are being skipped for guests.}}","verify_section_mandatory_fee":"Mandatory Fee Configuration","verify_fee_payment_account_label":"Payment account","verify_fee_payment_account_helper":"Payment account that will collect the fee at check-in.","verify_fee_subtitle_label":"Intro shown to guests","verify_fee_subtitle_hint":"Optional. Appears above the fee list on the guest pre-checkin screen.","verify_fee_products_label":"Fees","verify_fee_products_empty":"No fees yet. Add one to charge it at check-in.","verify_fee_add_action":"Add fee","verify_fee_save_action":"Save fee","verify_fee_delete_action":"Delete fee","verify_fee_discard_action":"Discard","verify_fee_draft_badge":"Draft","verify_fee_product_untitled":"Untitled fee","verify_fee_product_inactive_badge":"Inactive","verify_fee_product_saved":"Fee saved","verify_fee_product_save_error":"Couldn't save fee","verify_fee_product_deleted":"Fee deleted","verify_fee_product_delete_error":"Couldn't delete fee","verify_fee_product_title_label":"Title","verify_fee_product_title_placeholder":"City tax","verify_fee_product_description_label":"Description","verify_fee_product_charge_type_label":"Charge type","verify_fee_product_charge_type_hint":"How your guests will be able to purchase the item.","verify_fee_product_charge_type_fixed_price":"Fixed amount","verify_fee_product_charge_type_price_per_night":"Price per night","verify_fee_product_charge_type_price_per_quantity":"Price per guest","verify_fee_product_charge_type_price_per_guest_per_night":"Price per guest per night","verify_fee_product_base_price_label":"Amount","verify_fee_product_price_per_night_label":"Price per night","verify_fee_product_price_per_guest_label":"Price per guest","verify_fee_product_price_per_guest_per_night_label":"Price per guest per night","verify_fee_product_base_price_hint_currency":"Price displayed to a guest. Will always use the currency of the payment account linked to it.","verify_fee_product_max_priced_nights_label":"Max Nights","verify_fee_product_max_priced_nights_hint":"The maximum number of nights used in the price calculation.","verify_fee_product_max_priced_qty_label":"Max Guests","verify_fee_product_max_priced_qty_hint":"The maximum number of guests used in the price calculation.","verify_fee_product_max_price_label":"Maximum price","verify_fee_product_max_price_hint":"Maximum that can be calculated.","verify_fee_product_per_night_short":"night","verify_fee_product_per_guest_short":"guest","verify_fee_product_per_guest_per_night_short":"guest/night","verify_fee_calc_title":"Price Calculator","verify_fee_calc_hint":"Preview the price a guest will see at check-in.","verify_fee_calc_nights":"Nights","verify_fee_calc_guests":"Guests","verify_fee_calc_total":"Guest will pay","verify_section_additional_questions":"Additional Questions Configuration","verify_question_text":"Question Text","verify_question_required":"Required","verify_question_remove":"Remove question","verify_question_type":"Answer Type","verify_question_type_free_form":"Free Form Input","verify_question_type_single_select":"Single Select","verify_question_type_multi_select":"Multi Select","verify_question_type_yes_no":"Yes / No","verify_question_options":"Options","verify_question_add_option":"Add option","verify_question_add":"Add question","verify_question_empty":"No questions yet. Add your first question above.","verify_question_optional":"Optional","verify_question_text_placeholder":"Enter your question...","verify_question_help_text_placeholder":"Help text (optional)","verify_question_option_placeholder":"Option {number}","verify_option_flag_review":"Flag for review","verify_option_send_notification":"Send notification","verify_option_feature_upsells":"Feature upsells","verify_option_upsells_label":"Upsells","verify_option_upsells_placeholder":"Select upsells to feature...","verify_question_untitled":"Untitled question","verify_question_expand":"Expand question","verify_question_collapse":"Collapse question","verify_question_visibility":"Visibility","verify_question_visibility_always":"Always show","verify_question_visibility_when":"Show when: {question}","verify_question_condition_cleared":"{count} visibility {count, plural, one {rule} other {rules}} cleared","verify_question_condition_values":"Show when the answer is","verify_question_flag_when":"Flag when the answer is","verify_question_yes":"Yes","verify_question_no":"No","verify_question_responses":"Responses ({count})","verify_question_responses_empty":"No responses yet","verify_question_responses_masked_note":"Previews are masked — full answers are on each reservation's verification panel","verify_section_agreement":"Agreement Configuration","verify_agreement_tab_simple":"Simple","verify_agreement_tab_docusign":"DocuSign","verify_agreement_tab_documenso":"SuiteOp Sign","verify_agreement_contract_text":"Contract Text","verify_agreement_contract_text_placeholder":"e.g. I agree to the rental terms and conditions.","verify_agreement_variables_note":"You can use dynamic variables: guest_name, property_name, check_in_date, check_out_date, reservation_id. Wrap them in double curly braces.","verify_agreement_docusign_note":"Configure your DocuSign integration in Settings > Integrations.","verify_agreement_documenso_note":"Configure your Documenso integration in Settings > Integrations.","verify_agreement_template_id":"Template ID","verify_agreement_template_picker_label":"Choose Template","verify_agreement_template_placeholder":"Select a template...","verify_agreement_sync_templates":"Sync templates","verify_agreement_sync_success":"Templates synced successfully","verify_agreement_template_signer_option":"{count, plural, one {# signer} other {# signers}}","verify_agreement_signer_count":"Your template has {count, plural, one {# signer} other {# signers}}","verify_agreement_signing_order":"Signing order: {order}","verify_agreement_mandatory_toggle":"Make signing mandatory for all signers","verify_agreement_mandatory_description":"When enabled, guests must fill all signer slots before submitting","verify_agreement_prefill_title":"Template Fields (Prefill)","verify_agreement_prefill_description":"Set default values for read-only fields. Use the variable picker to auto-fill with reservation data.","verify_agreement_title_label":"Title","verify_agreement_title_description":"Optional heading shown above the signer form in the guest portal. Hidden if left empty.","verify_agreement_title_placeholder":"e.g. Rental Agreement","verify_agreement_subtitle_label":"Subtitle","verify_agreement_subtitle_description":"Instructions shown to the guest above the signer fields. Defaults to prompting guests to fill in signer details.","verify_agreement_subtitle_placeholder":"e.g. Please review and sign the rental agreement","verify_agreement_no_account":"No {provider} accounts connected.","verify_agreement_connect_link":"Connect one in Integrations","verify_agreement_account_label":"Account","verify_agreement_account_placeholder":"Select an account…","verify_step_type_mandatory_fee":"Mandatory Fee","verify_other_type_note":"Additional configuration for this step type can be managed via the API.","verify_advanced_note":"Source exclusion rules, LOS rules, and step-specific configuration (identity check, deposits, agreements, etc.) can be configured via the API.","verify_step_type_main":"Main","verify_step_type_your_details":"Your Details","verify_step_type_additional_questions":"Additional Questions","verify_step_type_other_guests":"Other Guests","verify_step_type_agreement":"Agreement","verify_step_type_identity_check":"Identity Check","verify_step_type_background_check":"Background Check","verify_step_type_damage_deposit":"Protection — Waiver & Deposit","verify_step_type_additional_files":"Additional Files","verify_step_type_document_upload":"Document Upload","verify_step_type_authority_reporting":"Authority Reporting","verify_step_type_screen_and_protect":"Screen & Protect","tab_postcards":"Postcards","postcards_add":"New Postcard","postcards_empty_title":"No postcards yet","postcards_empty_description":"Create postcard templates for your guests.","postcards_col_name":"Name","postcards_col_cover":"Cover","postcards_search_placeholder":"Search postcards…","postcards_filter_status_label":"Status","postcards_delete_title":"Delete Postcard","postcards_delete_confirm":"This will permanently delete this postcard template.","postcards_delete_impact_loading":"Checking whether this postcard can be deleted…","postcards_delete_blocked_title":"Can't delete postcard","postcards_delete_blocked_upsells":"{count, plural, one {This postcard is used by 1 upsell} other {This postcard is used by # upsells}}. Unlink it before deleting.","postcards_delete_view_upsells":"View upsells","postcard_header_subtitle_create":"Create a new postcard","manual_header_subtitle_create":"Create a new manual","postcard_sheet_create_title":"New Postcard","postcard_sheet_edit_title":"Edit Postcard","postcard_field_name":"Name","postcard_field_cover_url":"Cover Image URL","postcard_field_cover_url_placeholder":"https://...","postcard_field_cover_url_hint":"Upload a cover image in 6:4 aspect ratio for best results.","postcard_cover_preview_label":"Preview","postcard_cover_preview_alt":"Postcard cover image preview","postcard_no_cover_image":"No cover image","postcard_field_active_label":"Active","postcard_field_active_helper":"Inactive templates stay listed but can't be picked for new upsells. Existing upsells keep working.","postcard_section_danger":"Danger Zone","postcard_delete_label":"Delete this postcard","postcard_delete_button":"Delete Postcard","postcard_section_details":"Details","tab_manuals":"Manuals","manuals_add":"New Manual","manuals_read_only":"Read-only","manuals_search_placeholder":"Search manuals…","manuals_empty_title":"No manuals yet","manuals_empty_description":"Create a manual to provide instructions for your guests.","manuals_col_nickname":"Nickname","manuals_col_category":"Category","manuals_col_updated":"Updated","manuals_category_untitled":"Untitled category","manuals_col_active":"Status","manuals_filter_category_label":"Category","manuals_filter_category_all":"All categories","manuals_filter_display_mode_label":"Display mode","manuals_filter_display_mode_all":"All display modes","manuals_filter_status_label":"Status","manuals_filter_property_label":"Property","manuals_filter_group_label":"Group","manuals_filter_tag_label":"Tag","manuals_no_matches":"No manuals match the current filters.","manuals_clear_filters":"Clear filters","manuals_delete_title":"Delete Manual","manuals_delete_confirm":"This will permanently delete this manual.","manual_section_danger":"Danger Zone","manual_delete_label":"Delete this manual","manual_delete_button":"Delete Manual","manual_sheet_create_title":"New Manual","manual_sheet_edit_title":"Edit Manual","manual_section_basic_info":"Basic Info","manual_section_details":"Details","manual_section_content":"Content","manual_section_category":"Category","manual_section_property":"Property Assignment","manual_image_note":"Image upload available after creation.","manual_api_note":"Multi-language title, description, and cover image can be configured via the API.","manual_assignment_note":"Property and group assignments for this manual are managed from the Properties page.","manual_field_nickname":"Nickname","manual_field_nickname_helper":"Internal name, not visible to guests","manual_nickname_duplicate_warning":"Another manual already uses this name.","manual_field_property":"Property","manual_field_property_placeholder":"Select a property","manual_field_active":"Active","manual_field_display_mode":"Display Mode","manual_field_display_mode_helper":"How content is displayed to guests","manual_display_mode_multi_lingual_text":"Multi-lingual Text","manual_display_mode_pms_variable":"PMS Variable","manual_field_category":"Category","manual_field_category_helper":"Select a category for this manual","manual_field_category_none":"No category","manual_field_category_manage":"Manage","manage_categories_title":"House manual categories","manage_categories_subtitle":"Group manuals into sections on the guest portal","manage_categories_block_kind_list":"Library","manage_categories_block_title_list":"Existing categories","manage_categories_block_kind_add":"New","manage_categories_block_title_add":"Add a category","manage_categories_count":"{count, plural, one {# category} other {# categories}}","manage_categories_column_name":"Categories","manage_categories_empty":"No categories yet — add one below.","manage_categories_untitled":"(Untitled)","manage_categories_legacy_hint":"This category was created before multi-language support. Recreate it to add translations.","manage_categories_reorder_locked_row":"This category is used by manuals on properties outside your access, so it can't be reordered.","manage_categories_edit_locked_row":"You can't edit or delete this category because it's used by manuals on properties outside your access.","manage_categories_reorder_locked_list":"Reordering is unavailable because {count, plural, one {# category is} other {# categories are}} used by manuals on properties outside your access.","manage_categories_add_title":"Add new category","manage_categories_add_helper":"Categories help group manuals on the guest portal.","manage_categories_add_placeholder":"Enter category title…","manage_categories_rename_done":"Done","manage_categories_delete_title":"Delete category?","manage_categories_delete_confirm":"Delete \"{name}\"? This can't be undone.","manage_categories_delete_in_use":"{count, plural, one {# manual uses} other {# manuals use}} this category. Reassign before deleting.","manual_field_video_url":"Video URL","manual_field_video_preview":"Preview","manual_field_video_url_helper":"YouTube or Vimeo link","manual_field_description":"Internal notes (troubleshooting)","manual_field_description_helper":"Staff-only troubleshooting notes — never shown to guests.","manual_section_translations":"Guest-Facing Content","manual_section_image":"Image","manual_field_image_helper":"Shown on guest portal manual cards. JPG or PNG, max 5 MB.","manual_section_custom_field":"Custom Field","manual_section_visibility":"Visibility","manual_visibility_always_show":"Always show this manual","manual_visibility_always_show_hint":"When enabled, every guest with access to this property can see it.","manual_visibility_verification_title":"Verification status","manual_visibility_verification_description":"Show only when the reservation has one of the selected verification statuses.","manual_field_custom_field_helper":"Select which Custom Field to display. This will replace the description, and will not be translated to all languages. Make sure to keep the field up to date on all properties.","manual_field_custom_field_placeholder":"Select a custom field…","manual_field_custom_field_empty":"No custom fields available yet. Create one to use this display mode.","manual_field_guest_title":"Title (guest-facing)","manual_field_guest_title_placeholder":"Enter guest-facing title","manual_field_guest_description":"Description (guest-facing)","manual_field_guest_description_placeholder":"Enter guest-facing description","manual_inactive_notice":"This manual is Inactive — guests won't see it.","manual_scope_read_only_notice":"This manual is used on properties outside your access, so it's read-only for you. Ask an admin with access to those properties to make changes.","tab_events":"Events","events_add":"New Event","events_search_placeholder":"Search events…","events_empty_title":"No events yet","events_empty_description":"Create local area events to show guests in the portal.","events_col_nickname":"Nickname","events_col_category":"Category","events_col_date_range":"Dates","events_col_price":"Price","events_col_active":"Status","events_delete_title":"Delete Event","events_delete_confirm":"This will permanently delete this event.","event_section_danger":"Danger Zone","event_delete_label":"Delete this event","event_delete_button":"Delete Event","event_sheet_create_title":"New Event","event_header_subtitle_create":"Create a new event","event_sheet_edit_title":"Edit Event","event_section_basic_info":"Basic Info","event_section_date_time":"Date & Time","event_section_details":"Details","event_section_location":"Location","event_section_schedule":"Schedule & Pricing","event_field_nickname":"Nickname","event_field_nickname_helper":"Internal name for this event","event_field_category":"Category","event_field_category_helper":"Choose event category","event_field_category_none":"No category","event_field_active":"Active","event_inactive_notice":"This event is Inactive — guests won't see it.","event_field_url":"Event URL","event_field_url_helper":"Link to external event website","event_field_starts_at":"Start Date","event_field_ends_at":"End Date","event_field_start_time":"Start Time","event_field_start_time_helper":"e.g. 8AM","event_field_start_time_placeholder":"e.g. 8AM","event_field_end_time":"End Time","event_field_end_time_helper":"e.g. 10PM","event_field_end_time_placeholder":"e.g. 10PM","event_field_price":"Price","event_section_translations":"Guest-Facing Content","event_section_image":"Cover Image","event_image_helper":"Shown on guest portal event cards. JPG or PNG, max 5 MB.","event_field_guest_title":"Title (guest-facing)","event_field_guest_title_placeholder":"Enter guest-facing title","event_field_guest_description":"Description (guest-facing)","event_field_guest_description_placeholder":"Enter guest-facing description","event_field_guest_location":"Location (guest-facing)","event_field_guest_location_placeholder":"Enter guest-facing location","event_translations_fallback_hint":"Guests see this content in their own language when available, and fall back to English otherwise.","event_section_portal_assignment":"Portal Assignment","event_portal_assignment_note":"Select which portals display this event to guests.","event_no_portals_available":"No portals available. Create a portal first.","event_category_entertainment":"Entertainment","event_category_business":"Business","event_category_performances":"Performances","event_category_trips_and_adventures":"Trips & Adventures","event_category_food_and_drinks":"Food & Drinks","event_category_sports":"Sports","event_category_parties":"Parties","event_category_festivals":"Festivals","event_category_workshops":"Workshops","event_category_music":"Music","event_category_exhibitions":"Exhibitions","event_category_health_and_wellness":"Health & Wellness","event_category_dance":"Dance","event_category_fashion":"Fashion","event_category_art":"Art","event_category_fine_arts":"Fine Arts","event_category_theatre":"Theatre","event_category_photography":"Photography","event_category_cooking":"Cooking","event_category_comedy":"Comedy","event_category_kids":"Kids","event_category_hackathons":"Hackathons","event_category_other":"Other","event_no_portals":"No portals available. Create a portal first.","toast":{"portal_created":"Portal created","portal_scope_apply_refused":"The portal was created, but its property assignments couldn't be saved — you don't have access to every property this portal serves. Open the portal to set them, or ask an admin.","portal_scope_apply_row_refused":"The portal was created, but some assignments couldn't be saved — you can only assign groups and tags whose properties are all in your access. Open the portal and adjust the selection.","portal_scope_apply_failed":"Couldn't apply property/group assignments","portal_updated":"Portal updated","portal_update_conflict":"This portal was changed elsewhere. We loaded the latest version and kept your unsaved edits — review and save again.","portal_create_conflict":"Another portal became the default while you were saving, so this portal wasn't created. Review and save again.","portal_unavailable":"This portal can no longer be edited from here.","guide_list_unavailable":"This guide list can no longer be edited from here.","guide_item_unavailable":"This recommendation can no longer be edited from here.","precheck_step_unavailable":"This step can no longer be edited from here.","portal_save_forbidden":"You do not have permission to make this change.","portal_save_failed":"We could not save this portal. Check your changes and try again.","portal_deleted":"Portal deleted","brand_created":"Brand created","brand_updated":"Brand updated","brand_update_conflict":"This brand was changed elsewhere. We loaded the latest version and kept your unsaved edits — review and save again.","brand_deleted":"Brand deleted","brand_delete_blocked_default":"Can't delete the default brand. Make another brand the default first.","brand_callout_save_failed":"Couldn't save the callout message — try again.","brand_background_upload_retry":"Couldn't upload the background image — press Save to try again.","verify_created":"Precheck step created","verify_updated":"Precheck step updated","precheck_step_update_conflict":"This step was changed elsewhere. We loaded the latest version and kept your unsaved edits — review and save again.","verify_deleted":"Precheck step deleted","verify_deactivated":"Precheck step deactivated","verify_delete_blocked_in_progress":"Can't delete this step yet — one or more guests are completing it right now. Wait for them to finish, or deactivate the step so new guests don't see it.","postcard_created":"Postcard created","postcard_updated":"Postcard updated","postcard_update_conflict":"This postcard was changed elsewhere. We loaded the latest version and kept your unsaved edits — review and save again.","postcard_deleted":"Postcard deleted","postcard_referenced_by_upsell":"Can't delete this postcard — an upsell is still using it. Unlink it from that upsell first.","manual_created":"Manual created","manual_updated":"Manual updated","manual_update_conflict":"This manual was changed elsewhere. We loaded the latest version and kept your unsaved edits — review and save again.","manual_read_only_scope":"This manual is no longer available for you to edit. It may have been removed, or it may now cover properties outside your access.","manual_deleted":"Manual deleted","event_created":"Event created","event_updated":"Event updated","event_update_conflict":"This event was changed elsewhere. We loaded the latest version and kept your unsaved edits — review and save again.","event_deleted":"Event deleted","guide_list_created":"Guide list created","guide_list_scope_apply_failed":"Couldn't apply property/portal assignments","guide_list_scope_apply_refused":"The guide list was created, but some assignments couldn’t be saved — you can only assign properties you have access to, and groups, tags and portals whose properties are all in your access. Adjust the selection and save again.","scope_apply_parent_refused":"The assignments couldn't be saved — this item is no longer available to you. Close it, reopen the list, and try again.","guide_list_updated":"Guide list updated","guide_item_created":"Guide item created","guide_item_updated":"Guide item updated","guide_update_conflict":"This guide was changed elsewhere. We loaded the latest version and kept your unsaved edits — review and save again.","upsell_created":"Upsell created","upsell_scope_apply_failed":"Couldn't apply property/portal assignments","upsell_updated":"Upsell updated","upsell_update_conflict":"This upsell was changed elsewhere. We loaded the latest version and kept your unsaved edits — review and save again.","upsell_translation_link_failed":"Saved — but some guest-facing text could not be attached. Check the highlighted fields.","upsell_archived":"Upsell archived","upsell_restored":"Upsell restored","upsell_image_upload_failed":"Couldn't upload the image — try again.","guide_list_deleted":"Guide list deleted","guide_item_deleted":"Guide item deleted","duplicated":"Duplicated successfully","manuals_bulk_deleted":"Selected manuals deleted","manuals_bulk_updated":"Selected manuals updated","category_created":"Category created","category_deleted":"Category deleted","manuals_bulk_reassigned":"Selected manuals reassigned","manuals_bulk_reassign_failed":"Some manuals could not be reassigned","manuals_bulk_update_failed":"Some manuals could not be updated","manuals_bulk_delete_failed":"Some manuals could not be deleted","events_bulk_activated":"Selected events activated","events_bulk_deactivated":"Selected events deactivated","events_bulk_deleted":"Selected events deleted","events_bulk_update_failed":"Couldn't update some events","events_bulk_delete_failed":"Couldn't delete some events","upsell_saved_draft":"Saved as draft","upsell_published":"Upsell published","upsell_order_saved":"Order saved","upsell_order_failed":"Could not save the new order"},"tab_guides":"Guides","tab_upsells":"Upsells","guide_list_sheet_create_title":"New Guide List","guide_list_sheet_edit_title":"Edit Guide List","guide_list_header_subtitle_create":"Create a new guide","guide_list_sheet_created_pending_title":"Guide list created","guide_list_header_subtitle_created_pending":"Created — assignments still pending","guide_list_pill_created_pending":"Assignments pending","guide_list_created_pending_note":"This guide list has been created. Review the pending assignments and save to try again. To change the guest name, finish saving and then reopen the list.","guide_list_created_discard_title":"Discard pending changes?","guide_list_created_discard_description":"The guide list has already been created and will remain. Only the edits and assignments you haven't saved yet will be discarded.","guide_list_header_recommendations_count":"{count, plural, =0 {No recommendations} one {1 recommendation} other {# recommendations}}","guide_list_recommendations_search_aria":"Search recommendations","guide_list_recommendations_search_placeholder":"Search recommendations…","guide_list_section_basic":"Basic Info","guide_list_field_nickname":"Nickname","guide_list_field_guest_name":"Guest-facing name","guide_list_field_guest_name_placeholder":"What guests see in their portal","guide_item_sheet_create_title":"New Guide Item","guide_item_sheet_edit_title":"Edit Guide Item","guide_item_section_basic":"Basic Info","guide_item_section_ratings":"Ratings","guide_item_section_price":"Price","guide_item_field_price":"Price tier","guide_item_field_website":"Website","guide_item_field_rating":"Rating","guide_item_field_ratings_count":"Number of reviews","guide_item_field_google_place_id":"Google Place ID","guide_item_field_google_maps_url":"Google Maps Link","guide_item_note_api":"Title, overview, 'What we love', and short description (multi-language) can be configured via the API.","guide_item_section_location":"Location","guide_item_field_address":"Address","guide_item_address_use_typed":"Can't find it on Google? Use the address as typed","guide_item_address_no_map":"No map location — won't appear on the guest map","guide_item_placeholder_address":"Search for a place or address...","guide_item_helper_address":"Search to auto-fill address, coordinates, and Google Maps link","guide_item_section_ratings_price":"Ratings & Price","guide_item_section_content":"Content","guide_item_image_note":"Image upload available after creation.","guide_item_note_content":"Title, overview, and descriptions (multi-language) can be configured via the API.","guide_item_section_categories":"Categories","guide_item_note_categories":"Category assignments can be managed via the API.","guide_list_note_name":"Internal label your team sees in the dashboard. Guests see the guest-facing name.","guide_list_field_cover_image":"Cover Image","guide_list_field_cover_image_hint":"Displayed as the header image for this guide list in the portal.","guide_list_section_items":"Items","guide_list_section_danger":"Danger Zone","guide_list_delete_label":"Delete this guide and all its recommendations","portal_delete_helper_undone":"Cannot be undone.","portal_pill_destructive":"Destructive","guide_list_delete_button":"Delete Guide List","guide_item_helper_website":"Business website","guide_item_helper_maps_url":"Direct maps link","guide_item_helper_place_id":"For Google Places integration","guide_item_helper_rating":"0–5 scale","guide_item_helper_ratings_count":"Number of reviews","guide_item_helper_price":"1–4 ($–$$$$)","guide_item_field_title":"Title","guide_item_field_categories":"Categories","guide_item_helper_categories":"Tags shown to guests; auto-filled when importing from Google","guide_item_field_short_description":"Short Description","guide_item_field_image_url":"Image URL","guide_item_placeholder_title":"e.g. Best Coffee Downtown","guide_item_placeholder_short_description":"A brief description for guests...","guide_item_helper_image_url":"Direct link to an image (upload coming soon)","postcard_helper_name":"Template name","upsell_sheet_create_title":"New Upsell","upsell_sheet_created_pending_title":"Upsell created","upsell_header_subtitle_created_pending":"Created — setup still pending","upsell_pill_created_pending":"Setup pending","upsell_created_discard_title":"Discard pending changes?","upsell_created_discard_description":"The upsell has already been created and will remain. Only the edits, rules, and assignments you haven't saved yet will be discarded.","upsell_sheet_edit_title":"Upsell: {nickname}","upsell_header_subtitle_create":"Create a new upsell","upsell_status_active":"Active","upsell_status_inactive":"Inactive","upsell_feature_featured":"Featured","upsell_feature_requires_notes":"Requires notes","upsell_feature_requires_scheduling":"Requires scheduling","upsell_missing_required_intro":"Complete these before saving:","upsell_description_recommended_hint":"Add a description so guests know what they're purchasing.","upsell_description_recommended_free_hint":"Add a description so guests know what they're getting.","upsell_request_save_requirements":"Requests also need a charge type and notification method.","upsell_section_identity":"Identity","upsell_section_content":"Content","upsell_section_postcard":"Postcard template","upsell_section_postcard_description":"Pick the postcard the guest sees in their portal.","upsell_section_pricing_description":"Charge model, prices, and quantity limits.","upsell_section_notifications_description":"Where the request notification is delivered.","upsell_section_visibility":"Visibility","upsell_section_visibility_master":"Visibility & Bookability","upsell_field_nickname":"Nickname","upsell_field_nickname_helper":"Internal name only.","upsell_field_type":"Type","upsell_field_type_helper":"How guests request the upsell.","upsell_field_type_placeholder":"Select type","upsell_type_description_advertisement":"Shown as an ad in the portal. No guest action required.","upsell_type_description_request":"Guest submits a request. Requires staff approval.","upsell_type_description_postcard":"Guest sends a postcard via the portal.","upsell_type_description_purchase":"Guest purchases directly. Payment collected immediately.","upsell_field_category":"Category","upsell_field_category_helper":"Choose upsell category.","upsell_field_category_placeholder":"Select category","upsell_field_active":"Active","upsell_field_featured":"Featured","upsell_boosters_label":"Conversion boosters","upsell_boosters_helper":"Show live popularity, recency, deadline, and price-framing touches on this offer when the real numbers support them. Turning this off never hides required disclosures.","upsell_field_title":"Title","upsell_field_title_helper":"Guest-facing title for this upsell.","upsell_field_title_note":"Multi-language, configured after creation","upsell_field_description":"Description","upsell_field_description_helper":"Guest-facing description.","upsell_field_cta":"Button label","upsell_field_cta_helper":"Optional. Overrides the button guests see. Leave blank to show “{defaultLabel}”.","upsell_field_description_note":"Multi-language, configured after creation","upsell_field_image":"Image","upsell_field_image_note":"Cover image uploaded after creation","upsell_field_image_select":"Select image","upsell_field_image_change":"Change image","upsell_field_edit_note":"Title, description, and image edits happen on the upsell's detail page.","upsell_field_image_edit_note":"Image is managed on the upsell's detail page.","upsell_section_pricing":"Pricing","upsell_field_payment_account":"Payment account","upsell_field_payment_account_helper":"Select which payment account receives the payment. Falls back to the organization default if not set.","upsell_field_payment_account_org_default":"Use organization default","upsell_field_payment_account_placeholder":"Select payment account","upsell_section_behavior":"Behavior","upsell_section_notifications":"Notifications","upsell_field_requires_notes":"Requires guest notes","upsell_field_requires_scheduling":"Requires scheduling","upsell_field_charge_type":"Charge Type","upsell_field_charge_type_placeholder":"Select charge type","upsell_charge_type_free":"Free","upsell_charge_type_price_per_quantity":"Price Per Quantity","upsell_charge_type_price_per_night":"Price Per Night","upsell_charge_type_fixed_price":"Fixed Price","upsell_charge_type_price_by_option":"Price By Option","upsell_charge_type_price_per_guest_per_night":"Price Per Guest Per Night","upsell_charge_type_free_note":"No price collected — guests can add this upsell without paying. Payment, prices, and quantities are not used.","upsell_by_option_base_price_note":"Every guest also pays a {amount} base price on top of the options below. Set it through the API or an import — it is not editable here.","upsell_by_option_max_price_note":"Every guest pays at most {amount}, whatever the options below add up to. Set it through the API or an import — it is not editable here.","upsell_field_base_price":"Price","upsell_field_base_price_helper":"Enter price in dollars (e.g. 25.00).","upsell_field_max_price":"Max price","upsell_field_min_quantity":"Min Quantity","upsell_field_max_quantity":"Max Quantity","upsell_field_custom_quantifier":"Customize quantifier","upsell_field_custom_quantifier_helper":"Swap the generic \"Quantity\" label for a unit name guests will recognize (e.g. bottles, tickets).","upsell_field_quantifier_label":"Quantifier label","upsell_field_quantifier_label_placeholder":"e.g. bottles, tickets, passes","upsell_field_notification_method":"Notification Method","upsell_field_notification_method_placeholder":"Select notification method","upsell_notification_email":"Email","upsell_notification_slack":"Slack","upsell_notification_sms":"SMS","upsell_field_email_notification_text":"Email Address","upsell_field_notification_text":"Phone Number","upsell_field_slack_channel":"Slack Channel","upsell_field_slack_channel_placeholder":"Select a Slack channel","upsell_field_slack_channel_org_default":"Use organization default","upsell_field_slack_channel_empty":"No Slack channels connected — add a Slack integration in Settings → Integrations.","upsell_notification_slack_connect_hint":"Connect Slack in Settings > Integrations to see channels","upsell_notification_slack_note":"Slack channel configured in organization settings","upsell_section_property_assignment":"Assign upsells to your properties","upsell_property_assignment_note":"Property assignment via portals, tags, or individual properties is managed from the Properties page.","upsell_section_bookability":"Bookability","upsell_booking_source_airbnb":"Airbnb","upsell_booking_source_booking_com":"Booking.com","upsell_booking_source_vrbo":"VRBO","upsell_booking_source_expedia":"Expedia","upsell_booking_source_american_express_travel":"American Express Travel","upsell_booking_source_direct":"Direct","upsell_booking_source_direct_manual":"Direct (Manual)","upsell_booking_source_direct_group_booking":"Direct (Group Booking)","upsell_booking_source_hopper":"Hopper","upsell_booking_source_marriott_homes_villas":"Marriott Homes & Villas","upsell_booking_source_home_to_go":"HomeToGo","upsell_booking_source_travel_staytion":"Travel Staytion","upsell_booking_source_agoda":"Agoda","upsell_booking_source_whimstay":"Whimstay","upsell_booking_source_trip_com":"Trip.com","upsell_booking_source_blueground":"Blueground","upsell_booking_source_homeaway":"HomeAway","upsell_booking_source_unknown":"Unknown","upsell_booking_source_google_vacation_rentals":"Google Vacation Rentals","upsell_booking_source_owner_stay":"Owner Stay","upsell_booking_source_employee_stay":"Employee Stay","upsell_booking_source_suiteop":"SuiteOp","upsell_booking_source_operations_cleaning":"Operations (Cleaning)","upsell_dynamic_pricing_title":"Dynamic Pricing Fields","upsell_dynamic_pricing_description":"Define option fields that affect the final price. Guests will fill these out when purchasing.","upsell_dynamic_add_field":"Add Field","upsell_dynamic_remove_field":"Remove field","upsell_dynamic_field_title":"Field Title","upsell_dynamic_field_title_placeholder":"e.g. Size, Duration, Add-on","upsell_dynamic_field_required":"Required","upsell_dynamic_field_type":"Option format","upsell_dynamic_field_type_placeholder":"Select type","upsell_dynamic_field_type_text":"Text","upsell_dynamic_field_type_number":"Number","upsell_dynamic_field_type_time":"Time","upsell_dynamic_choices":"Choices","upsell_dynamic_add_choice":"Add Choice","upsell_dynamic_remove_choice":"Remove choice","upsell_dynamic_choice_title_placeholder":"Choice label","upsell_dynamic_choice_number_placeholder":"e.g. 2","upsell_dynamic_choice_time_placeholder":"Select a time","upsell_dynamic_choice_price_delta":"Price delta (cents)","upsell_dynamic_choice_price_delta_placeholder":"e.g. 500","upsell_dynamic_price_preview":"Price Preview","upsell_dynamic_price_preview_base":"Base price","upsell_dynamic_price_preview_sample":"Sample options","upsell_dynamic_price_preview_total":"Estimated total","upsell_dynamic_note":"Dynamic fields are saved separately after the upsell is created.","upsell_dynamic_backend_note":"Field data will be persisted once the backend endpoint is available.","upsell_visibility_advanced_note":"Advanced visibility rules (LOS, seasonal, booking window) can be configured via the API.","guides_add_list":"New Guide List","guides_empty_title":"No guide lists yet","guides_empty_description":"Create a guide list to recommend local attractions and restaurants.","guides_no_matches_title":"No guide lists match your filters","guides_no_matches_description":"Try adjusting or clearing the filters above.","guides_search_placeholder":"Search guide lists…","guides_filter_category_label":"Category","guides_filter_status_label":"Status","guides_filter_portal_label":"Portal","guides_col_nickname":"Nickname","guides_col_category":"Category","guides_col_updated":"Updated","guides_col_items":"Items","guides_col_assignments":"Assignments","guides_cell_assignments":"{count, plural, =0 {Unassigned} one {1 assignment} other {# assignments}}","guide_list_field_category":"Category","guide_list_category_none":"No category","guide_list_category_food_and_drink":"Food & drink","guide_list_category_things_to_do":"Things to do","guide_list_category_shopping":"Shopping","guide_list_category_nightlife":"Nightlife","guide_list_category_outdoors":"Outdoors","guide_list_category_transit":"Transit","guide_list_category_services":"Services","guide_list_category_essentials":"Essentials","guides_expand":"View items","guides_collapse":"Hide items","guides_items_title":"Guide Items","guides_add_item":"New Item","guides_items_empty":"No items in this guide list yet.","guides_items_empty_title":"No items yet","guides_items_empty_description":"Add items manually or import nearby places from Google.","guides_item_untitled":"Untitled item","guides_item_col_title":"Name","guides_item_col_website":"Website","guides_item_col_rating":"Rating","guides_item_col_price":"Price","guides_delete_list_title":"Delete Guide List","guides_delete_list_confirm":"This will permanently delete this guide list and all its items.","guides_delete_item_title":"Delete Guide Item","guides_delete_item_confirm":"This will permanently delete this guide item.","upsells_add":"New Upsell","upsells_empty_title":"No upsells yet","upsells_empty_description":"Create upsell items to offer guests additional services.","upsells_archived_empty_title":"No archived upsells","upsells_archived_empty_description":"Upsells you archive will show up here, restorable at any time.","upsells_col_nickname":"Nickname","upsells_col_type":"Type","upsells_col_category":"Category","upsells_col_active":"Status","upsells_col_featured":"Featured","upsells_col_created":"Created","upsells_col_order":"Order","upsells_reorder_move_up":"Move up","upsells_reorder_move_down":"Move down","upsells_reorder_unsaved":"Unsaved order changes","upsells_reorder_save":"Save order","upsells_badge_featured":"Featured","upsells_status_label":"Status","upsells_status_archived":"Archived","upsells_archive_title":"Archive Upsell","upsells_archive_confirm":"Archive “{name}”? It will be hidden from guests, but its data and purchase history are kept — you can restore it any time.","upsells_archived_banner_title":"This upsell is archived","upsells_archived_banner_description":"Guests can't see or purchase it. Restore to make it visible again.","upsell_section_danger":"Danger Zone","upsell_archive_label":"Archive this upsell","upsell_archive_button":"Archive Upsell","upsell_archive_helper":"Hides this upsell from guests but keeps its data and purchase history. You can restore it any time.","upsells_search_placeholder":"Search upsells…","upsells_search_aria":"Search upsells by name","upsells_type_filter_all":"All types","upsells_no_matches_title":"No upsells match these filters","upsells_no_matches_description":"Try adjusting your search or filters to find what you are looking for.","upsells_remove_filter_aria":"Remove filter","upsells_filtered_by_template":"Using design: {name}","upsell_type_advertisement":"Advertisement","upsell_type_request":"Request","upsell_type_postcard":"Postcard","upsell_type_purchase":"Purchase","upsell_category_add_ons":"Add-ons","upsell_category_visits_and_tours":"Visits & Tours","upsell_category_experiences":"Experiences","upsell_category_upgrade_your_stay":"Upgrade Your Stay","upsell_category_services":"Services","upsell_category_shop_your_stay":"Shop Your Stay","upsell_category_other":"Other","upsell_category_partners":"Partners","visibility_section_bookability":"Advanced Bookability Settings","visibility_section_bookability_description":"Control when guests can purchase this upsell (still visible but not purchasable outside window).","visibility_section_advanced":"Advanced Visibility Settings","visibility_section_advanced_description":"Control when this upsell is visible to guests. All conditions must be met.","visibility_label_from":"From","visibility_label_to":"To","visibility_field_offset":"Offset","visibility_field_granularity":"Granularity","visibility_error_sources_required":"Select at least one booking source to use this rule.","visibility_error_booking_window_anchors_required":"Set both the start and end of the booking window.","visibility_error_verification_status_required":"Select at least one verification status.","visibility_always_show_toggle":"Always Show This Upsell","visibility_always_show_toggle_hint":"When on, this upsell is always visible and bookable. Turn off to configure booking window, relative date, seasonal, length of stay, and other rules below.","precheck_error_sources_required":"Select at least one booking source — an empty list would hide this step from every guest.","precheck_error_identity_document_types_required":"Select at least one identification type — guests could not complete this step otherwise.","scope_load_error":"Couldn't load the current assignments — changes are paused until they load.","scope_save_refused":"Some of those assignments couldn't be saved — you can only assign groups, tags and portals whose properties are all in your access. Your selection has been reset to what's saved.","scope_save_parent_refused":"This item is no longer available to you, so its assignments can't be changed. Your selection has been reset to what's saved.","visibility_field_time_definition":"Time","visibility_field_anchor":"Anchor","visibility_granularity_hour":"Hours","visibility_granularity_day":"Days","visibility_time_at":"At","visibility_time_before":"Before","visibility_time_after":"After","visibility_anchor_check_in":"Check-in","visibility_anchor_check_out":"Check-out","visibility_rule_relative":"Relative","visibility_rule_seasonal":"Seasonal","visibility_rule_booking_source":"Booking Source","visibility_rule_gap_night":"Gap Night","visibility_rule_turn_day":"Turn Day","visibility_rule_length_of_stay":"Length of Stay","visibility_field_inclusion_type":"Inclusion type","visibility_inclusion_all_except":"All except selected","visibility_inclusion_only_selected":"Only selected","visibility_field_sources":"Booking sources","visibility_sources_group_org":"Your booking sources","visibility_sources_group_other":"Other channels","visibility_sources_placeholder":"Search booking sources…","visibility_turn_day_check_in":"Hide when check-in is on a turn day","visibility_turn_day_check_in_description":"Hide this upsell when another reservation is checking out on the same date this guest checks in.","visibility_turn_day_check_out":"Hide when check-out is on a turn day","visibility_turn_day_check_out_description":"Hide this upsell when another reservation is checking in on the same date this guest checks out.","visibility_gap_night_before":"Require gap before arrival","visibility_gap_night_after":"Require gap after departure","visibility_gap_night_unit":"nights","visibility_gap_night_before_toggle":"Require gap before arrival","visibility_gap_night_after_toggle":"Require gap after departure","visibility_gap_night_before_helper_prefix":"Only show if the room is vacant for","visibility_gap_night_before_helper_suffix":"nights before check-in.","visibility_gap_night_after_helper_prefix":"Only show if the room is vacant for","visibility_gap_night_after_helper_suffix":"nights after check-out.","visibility_gap_night_to":"to","visibility_gap_mode_at_least":"At least","visibility_gap_mode_at_most":"At most","visibility_gap_mode_between":"Between","visibility_gap_mode_exactly":"Exactly","visibility_gap_night_no_neighbor_note":"Stays with no neighboring booking always qualify.","visibility_los_description":"Only show for reservations within this length of stay range.","visibility_los_nights":"nights","visibility_month_january":"January","visibility_month_february":"February","visibility_month_march":"March","visibility_month_april":"April","visibility_month_may":"May","visibility_month_june":"June","visibility_month_july":"July","visibility_month_august":"August","visibility_month_september":"September","visibility_month_october":"October","visibility_month_november":"November","visibility_month_december":"December","visibility_save_note":"Visibility rules are saved when you save the upsell.","visibility_card_booking_window_title":"Booking Window","visibility_card_booking_window_description":"Controls when guests can purchase this upsell — it stays visible outside the window, but the button greys out and isn't bookable.","visibility_card_relative_date_title":"Relative Date","visibility_card_relative_date_description":"Show or hide based on how many days before/after check-in or check-out.","visibility_card_length_of_stay_title":"Length of Stay","visibility_card_length_of_stay_description":"Only show for reservations within a specific night range.","visibility_card_seasonal_title":"Seasonal","visibility_card_seasonal_description":"Restrict visibility to specific date ranges during the year, based on the reservation's check-in date.","visibility_card_booking_source_title":"Booking Source","visibility_card_booking_source_description":"Include or exclude guests based on where they booked.","visibility_card_turn_day_title":"Turn Day","visibility_card_turn_day_description":"Hide on days when check-in or check-out overlaps with another reservation.","visibility_card_gap_night_title":"Gap Night","visibility_card_gap_night_description":"Control visibility based on vacant nights before or after the reservation.","visibility_bw_show_from":"Bookable from","visibility_bw_show_until":"Bookable until","visibility_bw_days":"days","visibility_rd_show_from":"Show from","visibility_rd_show_until":"Show until","visibility_los_min":"Min nights","visibility_los_max":"Max nights","visibility_seasonal_from":"From date","visibility_seasonal_to":"To date","visibility_seasonal_add":"Add season","visibility_seasonal_remove":"Remove","visibility_seasonal_multi_note":"The upsell will be visible during any of the seasons defined above.","visibility_seasonal_repeats_note":"Seasons repeat every year.","visibility_seasonal_crosses_year":"This season crosses into the next year (for example, December to February).","visibility_seasonal_incomplete_window":"Set both a From and To date, otherwise this season is ignored.","visibility_anchor_before_check_in":"Before check-in","visibility_anchor_after_check_in":"After check-in","visibility_anchor_before_check_out":"Before check-out","visibility_anchor_check_in_time":"At check-in time","visibility_anchor_check_out_time":"At check-out time","visibility_direction_before":"Before","visibility_direction_at":"At","visibility_direction_after":"After","visibility_time_unit_hour":"hours","visibility_time_unit_day":"days","visibility_inclusion_all_except_selected":"All except selected","scope_section_title":"Property & Group Assignment","scope_saved":"Saved","scope_properties":"Properties","scope_groups":"Property Groups","scope_portals":"Portals","scope_tags":"Tags","scope_properties_description":"Limit to specific properties","scope_groups_description":"Limit to specific property groups","scope_portals_description":"Limit to specific portal configurations","scope_tags_description":"Limit to specific tags","scope_selected_count":"{count} selected","scope_create_note":"Assignment available after creation.","assignment_section_title":"Property Assignment","assignment_properties":"Properties","assignment_groups":"Property Groups","assignment_tags":"Tags","assignment_selected_count":"{count} selected","assignment_note":"Property, group, and tag scoping is saved via the assignment API.","assignment_no_items":"No items available.","google_places_import_button":"Import from Google","google_places_added":"Added","google_places_not_configured":"Google Places search requires GOOGLE_MAPS_API_KEY. Configure in Settings > Integrations.","google_places_search_placeholder":"Address or neighborhood, e.g. 123 Main St or Austin TX","google_places_address_placeholder":"123 Main St, Austin TX","google_places_field_address":"Address","google_places_field_distance":"Distance","google_places_field_type":"Type","google_places_field_sort":"Sort by","google_places_sort":{"relevance":"Relevance","distance":"Nearest","rating":"Highest rated","reviews":"Most reviewed"},"google_places_pick_address_hint":"Pick an address from the suggestions to search nearby places.","google_places_results_count":"{count} places found","google_places_type_any":"Any type","google_places_type":{"restaurant":"Restaurant","cafe":"Cafe","bar":"Bar","bakery":"Bakery","night_club":"Nightclub","tourist_attraction":"Tourist attraction","museum":"Museum","park":"Park","art_gallery":"Art gallery","amusement_park":"Amusement park","zoo":"Zoo","aquarium":"Aquarium","shopping_mall":"Shopping mall","supermarket":"Supermarket","clothing_store":"Clothing store","book_store":"Bookstore","gym":"Gym","spa":"Spa","pharmacy":"Pharmacy","movie_theater":"Movie theater","bowling_alley":"Bowling alley"},"event_import_button":"Import Events","event_import_title":"Import Events","event_import_provider_ticketmaster":"Ticketmaster","event_import_provider_allevents":"AllEvents","events_source_imported":"Imported","event_import_field_location":"Location","event_import_location_placeholder":"e.g. Austin, TX","event_import_field_start_date":"Start Date","event_import_field_end_date":"End Date","event_import_field_category":"Category","event_import_search_by":"Search by","event_import_category_placeholder":"Select a category","event_import_tm_category_music":"Music","event_import_tm_category_sports":"Sports","event_import_tm_category_arts":"Arts & Theatre","event_import_tm_category_family":"Family","event_import_tm_category_film":"Film","event_import_tm_category_miscellaneous":"Miscellaneous","event_import_field_keyword":"Keyword","event_import_keyword_placeholder":"e.g. concert, festival","event_import_search":"Search","event_import_api_required":"Requires API key configuration.","event_import_tm_note":"Configure your Ticketmaster API key in Settings > Integrations to search events.","event_import_field_city":"City / Destination","event_import_city_placeholder":"e.g. New York","event_import_allevents_note":"Configure your AllEvents API key in Settings > Integrations to search events.","upsells_from_template":"From Template","template_gallery_title":"Upsell Templates","template_gallery_description":"Choose a template to quickly create a new upsell with pre-filled settings.","template_free":"Free","template_use":"Use Template","template_early_checkin_name":"Early Check-in","template_early_checkin_description":"Allow guests to check in before standard time.","template_late_checkout_name":"Late Check-out","template_late_checkout_description":"Extend checkout time for a relaxed departure.","template_airport_transfer_name":"Airport Transfer","template_airport_transfer_description":"Private car service to/from the airport.","template_welcome_basket_name":"Welcome Basket","template_welcome_basket_description":"Curated local snacks and drinks on arrival.","template_pet_fee_name":"Pet Fee","template_pet_fee_description":"Allow guests to bring their furry friends.","template_pool_heating_name":"Pool Heating","template_pool_heating_description":"Heat the pool for a comfortable swim.","template_grocery_delivery_name":"Grocery Delivery","template_grocery_delivery_description":"Pre-stocked fridge with guest preferences.","template_local_experience_name":"Local Experience","template_local_experience_description":"Book curated local tours and activities.","template_bike_rental_name":"Bike Rental","template_bike_rental_description":"Explore the area on two wheels.","template_spa_service_name":"In-Room Spa","template_spa_service_description":"Professional massage and spa treatments.","upsell_postcard_template":"Postcard Template","upsell_postcard_template_helper":"Select a postcard design for this upsell.","upsell_postcard_template_empty":"No postcard templates available","upsell_postcard_template_create":"Create postcard template","upsell_postcard_template_selected":"Selected","manuals_bulk_select_all":"Select all","manuals_bulk_selected":"{count, plural, one {# selected} other {# selected}}","manuals_bulk_set_status":"Set Status","manuals_bulk_delete_title":"Delete Selected Manuals","manuals_bulk_delete_confirm":"This will permanently delete {count, plural, one {# manual} other {# manuals}}. This action cannot be undone.","truvi_section_title":"Screen & Protect","truvi_section_description":"Automate guest verification and protect your portfolio. Truvi uses AI to flag high-risk bookings before check-in and provides damage coverage for every reservation.","truvi_protection_level":"Protection Level","truvi_protection_level_hint":"Choose the level of coverage that best fits your property and guest needs.","truvi_per_booking":"{price} per booking","truvi_extra_nights_hint":"Covers the first {nights} nights. Longer stays add {price} per additional night.","truvi_per_night":"{price} per night","truvi_pricing_mode":"Pricing model","truvi_mode_per_booking":"Per booking","truvi_mode_per_booking_hint":"Flat fee per reservation","truvi_mode_per_night":"Per night","truvi_mode_per_night_hint":"Charged for each night of the stay","truvi_mode_auto":"Automatic","truvi_mode_auto_hint":"Picks the cheaper model for each stay — per night under {nights} nights, per booking from {nights} on.","truvi_mode_auto_hint_generic":"Picks the cheaper model for each reservation, based on its length.","truvi_from_price":"from {price}","truvi_compare_toggle":"Compare pricing models","truvi_compare_stay_length":"Stay length","truvi_compare_nights":"{nights, plural, one {# night} other {# nights}}","truvi_compare_cheaper":"Cheaper","truvi_compare_breakeven":"Per booking is the cheaper model for stays of {nights}+ nights.","truvi_compare_breakeven_never":"Per night is the cheaper model at every stay length.","truvi_trigger":"Trigger","truvi_trigger_always":"Always — screen every reservation","truvi_trigger_waiver_linked":"When guest purchases damage waiver","truvi_trigger_waiver_linked_declinable":"Your damage-waiver step lets guests decline. Guests who decline will not be screened — you can still screen them individually from the reservation.","truvi_damage_waiver_ok":"An active damage-waiver step is ready to trigger screening after payment.","truvi_damage_waiver_missing_step":"Add an active, enabled damage-waiver step with a positive amount and an active payment account before using this trigger.","truvi_damage_waiver_missing_payment_account":"The damage-waiver step is active, but it needs an active payment account before it can trigger screening.","truvi_email_ok":"Guest details step is active — guest name and email will be collected during check-in for Truvi screening.","truvi_email_missing_step":"No active \"Guest Details\" step found. Truvi requires guest name and email to screen. Add a Guest Details verification step to ensure email is collected during check-in, or screening may be skipped.","truvi_claims_link":"Claims Portal","truvi_footer":"Protection provided by Truvi. Incidents are processed within 5-7 business days.","truvi_view_terms":"View terms","status_active":"Active","status_inactive":"Inactive","document_upload_subtitle_label":"Subtitle","document_upload_subtitle_placeholder":"What document should the guest upload?","document_upload_subtitle_help":"Shown to guests on the upload screen. Use it to explain what document you need (e.g., parking pass, pet vaccination record, signed rental agreement).","document_upload_ai_toggle_label":"AI Document Verification","document_upload_ai_toggle_help":"When enabled, each upload is automatically checked against your verification prompt below. Passing uploads mark the rule complete; failed uploads are routed to manual review with the AI's analysis attached.","document_upload_prompt_label":"AI Verification Prompt","document_upload_prompt_placeholder":"Describe what makes an upload valid.","document_upload_prompt_help":"The AI checks each upload against this description. For example: a valid parking pass showing the guest's license plate and an expiration date on or after the check-in date.","document_upload_sort_order_hint":"Heads up: this rule runs before 'Your Details', so the AI can only cross-check against the PMS-supplied name. Guest-entered names are not available to it.","portal_special_offer_note":"Multi-language offer title, type, CTA text, and cover image can be configured after creation.","brand_visual_assets_note":"Background cover image and callout message can be configured after creation.","brand_background_image_note":"Background cover image can be uploaded after creation.","brand_callout_message_note":"Multi-language callout is configured after creation via the translations system.","brand_callout_message_placeholder":"Welcome to our property...","brand_callout_message_create_hint":"Save the brand first, then you can add a multi-language callout message.","verify_fee_payment_account_note":"Configure payment accounts in Settings > Payments","verify_fee_title":"Fee Title","verify_fee_description":"Description","verify_fee_price":"Price (cents)","verify_fee_add":"Add fee","event_location_api_note":"Location and geo-coordinates can be configured via the API.","event_image_note":"Cover image can be configured via the API.","event_api_note":"Multi-language title, description, and cover image can be configured via the API.","guide_list_note_api":"Public name (multi-language), cover image, and visibility settings can be configured via the API after creation.","upsell_field_public":"Public","upsell_section_advanced_bookability":"Advanced bookability settings","upsell_field_exclude_booking_sources":"Booking source exclusions","upsells_browse_templates":"Browse templates","upsells_col_updated":"Updated","upsells_col_price":"Price","upsells_price_free":"Free","upsells_price_from":"From {price}","upsells_category_label":"Category","visibility_rule_delete_aria":"Delete this rule","visibility_rule_delete_title":"Delete visibility rule","visibility_rule_delete_confirm":"This will permanently remove this visibility rule from the upsell. You can re-enable the same rule type later, but its current configuration will be lost.","visibility_rule_deleted_toast":"Visibility rule deleted","upsells_bulk_select_all":"Select all","upsells_bulk_selected":"{count, plural, one {# selected} other {# selected}}","upsells_bulk_activate":"Activate","upsells_bulk_deactivate":"Deactivate","upsells_bulk_updated_toast":"Updated {count, plural, one {# upsell} other {# upsells}}","upsells_bulk_archived_toast":"Archived {count, plural, one {# upsell} other {# upsells}}","upsells_bulk_restored_toast":"Restored {count, plural, one {# upsell} other {# upsells}}","upsells_bulk_failed_toast":"Failed on {count, plural, one {# upsell} other {# upsells}}","upsells_pagination_summary":"Showing {start}–{end} of {total, plural, one {# upsell} other {# upsells}}","upsells_pagination_page":"Page {page}","google_places_select_all":"Select all visible","google_places_select_row":"Select place","google_places_selected_count":"{count, plural, one {# selected} other {# selected}}","google_places_import_selected":"{count, plural, one {Import # selected} other {Import # selected}}","google_places_bulk_imported":"{count, plural, one {Imported # item} other {Imported # items}}","google_places_bulk_failed":"{count, plural, one {Failed to import # item} other {Failed to import # items}}","google_places":{"rate_limited_title":"Google Places rate limit","rate_limited_body":"Google's Places API is throttling us. Try again in a minute.","upstream_error_title":"Google Places unavailable","upstream_error_body":"Google's Places API returned an unexpected error. Try again shortly."},"template_gallery_search_placeholder":"Search templates","template_gallery_type_filter":"Filter by type","template_gallery_category_filter":"Filter by category","template_gallery_no_matches":"No templates match these filters","template_preview":"Preview","template_preview_use_button":"Use this template","google_places_overlay_title":"Import from Google","google_places_overlay_subtitle_create":"Search Google and add recommendations to this guide.","guide_item_header_subtitle_edit":"Editing recommendation in {guideName}","event_import_field_distance":"Distance","event_import_distance_placeholder":"Any distance","event_import_distance_miles":"{miles} miles","event_import_assign_portals":"Assign to portals","event_import_assign_portals_placeholder":"Select portals…","event_import_searching":"Searching…","event_import_location_required":"Enter a location to search","event_import_added_toast":"Added “{title}”","event_import_already_imported_toast":"“{title}” was already imported","event_import_already_imported_scoped_toast":"“{title}” was already imported — added to the selected portals","event_import_connect_hint":"Add a Ticketmaster API key to enable search.","event_import_connect_hint_allevents":"Add an AllEvents API key to enable search.","event_import_location_placeholder_allevents":"City, State, Country — e.g. Austin, Texas, United States","event_import_no_results":"No events found","event_import_no_results_hint":"Try a different location, dates, or keyword.","event_import_no_results_hint_allevents":"AllEvents needs City, State, Country (e.g. Austin, Texas, United States). Try a wider date range.","event_import_results_count":"{count} found","event_import_select_all":"Select all","event_import_selected_count":"{count} selected","event_import_select_row":"Select event","event_import_import_selected":"Import {count} selected","event_import_load_more":"Load more","event_import_loading_more":"Loading…","event_import_load_more_failed":"Couldn't load more results","event_import_bulk_imported":"Imported {count, plural, one {# event} other {# events}}","event_import_bulk_failed":"{count, plural, one {# event failed to import} other {# events failed to import}}","event_import_bulk_already_imported":"{count, plural, one {# event was already imported} other {# events were already imported}}","event_import_bulk_already_imported_scoped":"{count, plural, one {# event was already imported — added to the selected portals} other {# events were already imported — added to the selected portals}}","event_import_from":"From","event_import_add":"Add","event_import_added":"Added","event_import_see_on":"See on {provider}","upsell_import_partner_label":"Import from partner","upsell_import_viator":"Viator","upsell_import_viator_sub":"Import local tours & activities as ads","viator_import_title":"Import Local Activities","viator_import_city":"City","viator_import_city_placeholder":"e.g. New York City","viator_import_city_required":"Enter a city to search","viator_import_search":"Search","viator_import_searching":"Searching…","viator_import_from":"From","viator_import_add":"Add","viator_import_added":"Added","viator_import_added_toast":"Added “{title}”","viator_import_reviews":"({count} reviews)","viator_import_see_on":"See on Viator","viator_import_results_count":"{count} found","viator_import_no_results":"No activities found","viator_import_no_results_hint":"Try a different city.","viator_import_connect_hint":"Add a Viator API key to enable search.","event_field_currency":"Currency","event_field_currency_helper":"Currency for the price shown to guests","event_field_currency_none":"No currency","event_currency_USD":"USD — US Dollar","event_currency_EUR":"EUR — Euro","event_currency_GBP":"GBP — British Pound","event_currency_CAD":"CAD — Canadian Dollar","event_currency_AUD":"AUD — Australian Dollar","event_currency_JPY":"JPY — Japanese Yen","manuals_bulk_set_category":"Set Category","manuals_bulk_category_none":"No category","manuals_bulk_reassign":"Reassign","manuals_bulk_reassign_title":"Reassign Selected Manuals","manuals_bulk_reassign_description":"Set the property, property-group and tag assignments for {count, plural, one {# manual} other {# manuals}}. This replaces their existing assignments.","manuals_bulk_reassign_apply":"Apply assignments","manuals_bulk_reassign_confirm_title":"Replace assignments?","manuals_bulk_reassign_confirm":"This replaces the property, property-group and tag assignments on {count, plural, one {# manual} other {# manuals}}. Any dimension you left unset will be cleared on every selected manual. This cannot be undone.","events_filter_status_label":"Status","events_filter_status_all":"All statuses","events_filter_status_upcoming":"Upcoming","events_filter_status_past":"Past","events_past_badge":"Past","events_filter_category_label":"Category","events_filter_category_all":"All categories","events_filter_date_label":"Date","events_filter_date_all":"Any date","events_filter_date_this_week":"This week","events_filter_date_this_month":"This month","events_filter_property_label":"Property","events_filter_property_all":"All properties","events_filter_group_label":"Group","events_filter_group_all":"All groups","events_filter_portal_label":"Portal","events_filter_portal_all":"All portals","events_filter_tag_label":"Tag","events_filter_tag_all":"All tags","events_clear_filters":"Clear filters","events_no_matches":"No events match your filters","events_bulk_select_all":"Select all","events_bulk_selected":"{count, plural, one {# selected} other {# selected}}","events_bulk_activate":"Activate","events_bulk_deactivate":"Deactivate","events_bulk_delete_title":"Delete selected events","events_bulk_delete_confirm":"{count, plural, one {Delete # event? This action cannot be undone.} other {Delete # events? This action cannot be undone.}}","upsell_title_required_warning":"A guest-facing title is required.","upsell_translation_link_failed":"This guest-facing text could not be attached to the offer. Finish the offer's setup, then edit and save this text again.","upsell_inactive_warning":"This upsell is Inactive — guests won't see it in the portal until it's marked Active.","upsell_publish_prompt_title":"Save as draft or publish?","upsell_publish_prompt_description":"This upsell is currently Inactive. Guests won't see it in the portal until it's marked Active.","upsell_publish_prompt_save_draft":"Save as Draft","upsell_publish_prompt_mark_active":"Mark Active & Publish","upsell_publish_prompt_active_title":"Publish these changes?","upsell_publish_prompt_active_description":"This upsell is Active — saving will publish these changes and make them live to guests immediately.","upsell_publish_prompt_confirm_publish":"Publish","upsells_status_filter_value":"Status: {value}","upsells_category_filter_value":"Category: {value}","portal_field_chat":"Guest chat","portal_helper_chat":"Let guests message the host from the portal","upsells_missing_payment_account":"No payment account — this upsell charges but nothing can collect the payment.","verify_step_missing_payment_account":"No payment account — this step charges but nothing can collect the payment.","upsell_guest_text_locked_after_create":"This offer was already created. Its guest text is edited from the offer itself — finish saving, then reopen it to change the title, description, or button label.","duplicate_save_first":"Save your changes before duplicating","visibility_time_unit_label":"Unit","visibility_direction_label":"Direction","visibility_anchor_label":"Relative to","upsell_field_asks_permission_to_enter":"Request permission to enter","upsell_field_asks_permission_to_enter_helper":"Shows guests a checkbox authorizing entry to the unit to fulfill this offer.","upsell_field_requires_permission_to_enter":"Make authorization mandatory","upsell_field_requires_permission_to_enter_helper":"Guests cannot continue until they tick the box.","upsell_field_permission_to_enter_text":"Authorization text","upsell_field_permission_to_enter_text_helper":"Optional. Overrides the sentence guests read next to the checkbox. Leave blank to use the SuiteOp default.","upsell_feature_asks_permission_to_enter":"Asks permission to enter","upsell_feature_requires_permission_to_enter":"Requires permission to enter","verify_identity_policy":"ID check policy","verify_identity_policy_legend_ignore":"This check doesn't run","verify_identity_policy_legend_fail":"The guest gets one more try, then it goes to your team","verify_identity_policy_legend_review":"The guest is stopped and it goes to your team, no retry","verify_identity_policy_precedence":"If any problem found is set to Stop and review, the guest is stopped immediately — a retry is offered only when every problem is set to Allow one retry.","verify_identity_policy_outcome_ignore":"Disabled","verify_identity_policy_outcome_review":"Stop and review","verify_identity_policy_outcome_fail":"Allow one retry","verify_identity_policy_tally":"{fail} retry · {review} review · {ignored} disabled","verify_identity_policy_always_on":"Always on","verify_identity_policy_always_on_hint":"Proven fraud. This one always runs and can't be changed — your team can still let the guest through.","verify_identity_policy_no_retry_hint":"A retake can't change where the guest lives, so Allow one retry isn't offered — Stop and review hands it to your team without a retry.","verify_identity_policy_off_explained":"A disabled check never runs, so it can never stop a guest. It shows on the result as skipped, so you can tell it apart from one that passed.","verify_identity_policy_row_document_fake":"The ID looks fake or altered","verify_identity_policy_row_document_fake_covers":"The document isn't a genuine government-issued ID","verify_identity_policy_row_document_expired":"The ID has expired","verify_identity_policy_row_document_expired_covers":"Expiry date has already passed","verify_identity_policy_row_unreadable_document":"We couldn't read the ID","verify_identity_policy_row_unreadable_document_covers":"Blur, an unrecognised document type, an unreadable name, or a machine-readable strip or barcode that wouldn't decode","verify_identity_policy_row_selfie_mismatch":"The selfie doesn't match the ID","verify_identity_policy_row_selfie_mismatch_covers":"A different face, or a photo of the ID used in place of a selfie","verify_identity_policy_row_name_mismatch":"The name doesn't match the booking","verify_identity_policy_row_name_mismatch_covers":"Compared against the guest name on the reservation","verify_identity_policy_row_guest_is_local":"The guest lives near the property","verify_identity_policy_row_guest_is_local_covers":"The address on the ID is close to the property","verify_identity_policy_row_no_face_on_document":"The ID has no photo of the holder","verify_identity_policy_row_no_face_on_document_covers":"The document has no portrait on it","verify_identity_policy_row_no_face_on_document_note":"These IDs are accepted today, so this row starts on Disabled — nothing is checked, and the result shows it as skipped. Set it to Stop and review or Allow one retry and guests with those IDs start being stopped.","verify_identity_policy_row_identity_details_unreadable":"Some ID details couldn't be read","verify_identity_policy_row_identity_details_unreadable_covers":"An unreadable date of birth or document number","verify_identity_policy_row_identity_details_unreadable_note":"These IDs are accepted today, so this row starts on Disabled — nothing is checked, and the result shows it as skipped. Set it to Stop and review or Allow one retry and guests with those IDs start being stopped.","verify_authority_required_fields_title":"Guest details to collect","verify_authority_required_fields_help":"Every filing already requires the fields marked always. Tick any extra detail you want each guest asked for — you can add to the list, never remove what the authority requires.","verify_authority_field_always":"Always","verify_authority_field_firstName":"First name","verify_authority_field_lastName":"Last name","verify_authority_field_middleName":"Middle name","verify_authority_field_nationality":"Nationality","verify_authority_field_dob":"Date of birth","verify_authority_field_sex":"Sex","verify_authority_field_email":"Email","verify_authority_field_documentType":"Document type","verify_authority_field_documentNumber":"Document number","verify_authority_field_documentSupportNumber":"Document support number","verify_authority_field_address1":"Address","verify_authority_field_stateId":"State or region","verify_authority_field_cityId":"City (list)","verify_authority_field_zipCode":"Postal code","verify_authority_field_province":"Province","verify_authority_field_city":"City","verify_authority_field_kinshipRelationship":"Relationship to main guest"},"precheck_retention":{"title":"Check-in data retention","description":"Choose how long to keep what guests give you during online check-in. Each category is kept for its own number of days, counted from the booking's checkout.","category":{"highSensitivity":{"label":"Identity and uploads","examples":"Identity document details and numbers, date of birth, ID photos and selfies, every file a guest uploads, and free-text answers — which can contain anything a guest chose to type."},"personal":{"label":"Contact details","examples":"Names, email addresses, phone numbers, home addresses and nationality."},"operational":{"label":"Check-in history","examples":"When check-in happened and how it turned out, with no personal details. Removing this history does not change a booking's current check-in status, and the records that link a booking to its property, its guests and its access are always kept."}},"days_hint":"Days after checkout.","drafts_note":"Unfinished forms expire after the shorter of the identity and uploads period and the contact details period, counted from the guest's last explicit save.","shortening_warning":"Shortening a period also removes information that is already older than the new limit — that happens at the next cleanup, not immediately. Removed information cannot be recovered.","exceptions_note":"These periods cover the copies collected during check-in. They do not apply to the booking itself or to a guest's saved profile, and four things are kept separately on their own rules: reports already filed with an authority, signed agreements, payment records, and a guest's refusal of marketing consent.","save":"Save retention periods","save_success":"Retention periods saved"},"precheck_step":{"display_title_english_required":"Add the English public step name first — other languages are translated from it.","update_conflict":"This step was changed elsewhere. Reload it and save again."},"profile":{"page_title":"Profile","tabs":{"general":"General","notifications":"Notifications","security":"Security"},"notifications":{"quiet_hours_title":"Quiet hours","quiet_hours_enable":"Enable quiet hours","quiet_hours_description":"Suppress non-urgent notifications during a daily window. Urgent alerts always go through.","quiet_hours_start":"Start","quiet_hours_end":"End","quiet_hours_timezone":"Timezone (IANA)","matrix_title":"Notification events","matrix_description":"Pick which channels each event should reach you on. Unchecked rows stay quiet on that channel.","event_column":"Event","channels":{"email":"Email","sms":"Text","push":"Push","in_app":"In-app","slack":"Slack"},"groups":{"task":"Tasks","reservation":"Reservations","device":"Devices","commerce":"Commerce","guest":"Guest verification","system":"System","other":"Other"},"types":{"task_assigned":{"label":"Task assigned","description":"A task is assigned to you."},"task_collaborator":{"label":"Added as collaborator","description":"You are added as a collaborator on a task."},"task_commented":{"label":"New comment on task","description":"Someone comments on a task you are involved in."},"task_mentioned":{"label":"Mentioned in a comment","description":"Someone mentions you in a task comment."},"task_completed":{"label":"Task completed","description":"A task you were assigned is completed by someone else."},"task_assignee_changed":{"label":"Task reassigned","description":"A task previously assigned to you is reassigned."},"task_triage":{"label":"New issue reported","description":"A field worker reports an issue that needs triage."},"reservation_created":{"label":"New reservation","description":"A new reservation is booked."},"reservation_cancelled":{"label":"Reservation cancelled","description":"A reservation is cancelled."},"check_in_changed":{"label":"Check-in changed","description":"A reservation's check-in date is changed."},"check_out_changed":{"label":"Check-out changed","description":"A reservation's check-out date is changed."},"date_changed":{"label":"Reservation dates changed","description":"A reservation's dates are changed."},"property_changed":{"label":"Property changed","description":"A reservation is moved to a different property."},"precheck_notification":{"label":"Flagged pre-check answer","description":"A guest submits a pre-check answer that requires staff attention."},"inbox_response_overdue":{"label":"Guest waiting too long","description":"A guest has waited past an inbox's first-reply target with no answer."},"inbox_escalated":{"label":"Escalated to you","description":"A conversation was escalated and handed to you as its manager."},"inbox_escalation_unassigned":{"label":"Escalation with nobody to take it","description":"A conversation was escalated but no eligible manager was available to take it."},"inbox_agent_needs_help":{"label":"Opal needs help","description":"Opal could not finish a conversation and asked for a person to take over."},"blacklist_match":{"label":"Blacklist match","description":"A reservation matches a blacklisted guest profile."},"reservation_review":{"label":"Reservation needs review","description":"A reservation on your property is held for staff review."},"device_offline":{"label":"Device offline","description":"A device stops responding to the cloud."},"battery_low":{"label":"Battery low","description":"A device's battery drops below the alert threshold."},"lock_jammed":{"label":"Lock jammed","description":"A smart lock reports a jammed state and needs physical inspection."},"temperature_alert":{"label":"Temperature alert","description":"Temperature falls outside the safe range."},"humidity_alert":{"label":"Humidity alert","description":"Humidity falls outside the configured range."},"co2_alert":{"label":"CO2 alert","description":"CO2 rises above the configured maximum."},"noise_alert":{"label":"Noise alert","description":"A noise sensor exceeds the alert threshold."},"upsell_requested":{"label":"Guest requested an upsell","description":"A guest submits a request-type upsell that needs approval."},"payment_failed":{"label":"Payment failed","description":"A submitted payment fails while processing."},"payment_disputed":{"label":"Payment disputed","description":"A guest disputes a captured payment (chargeback)."},"deposit_renewal_failed":{"label":"Deposit hold renewal failed","description":"A security deposit hold could not be renewed before it expired."},"deposit_renewal_fallback_charged":{"label":"Deposit charged after renewal failed","description":"A security deposit was charged in full because its hold renewal failed."},"deposit_auto_refund_failed":{"label":"Deposit refund failed","description":"An automatic security deposit refund failed to process."},"guest_manual_review":{"label":"Guest requires manual review","description":"An automated ID check flags a guest for manual review."},"guest_message":{"label":"Guest message","description":"A guest sends a message from the portal chat."},"internal_message":{"label":"Team chat message","description":"A teammate sends you a message in the team chat."},"member_invited":{"label":"New member invited","description":"An admin invites someone new to the organization."},"integration_disconnected":{"label":"Integration disconnected","description":"An integration loses its connection or is removed."},"custom":{"label":"Custom","description":"Custom notification."},"notification_sent":{"label":"Notification sent","description":"Meta event — internal use."},"daily_digest_morning":{"label":"Daily digest (morning)","description":"A morning summary of the tasks you have due today."},"daily_digest_evening":{"label":"Daily digest (evening)","description":"An evening reminder of tasks still outstanding for the day."}},"unsaved_changes":"You have unsaved changes.","all_saved":"All changes saved.","discard_button":"Discard changes","reset_button":"Reset to defaults","test_button":"Send test","test_sending":"Sending…","test_sent_email":"Test email sent to {recipient}","test_sent_sms":"Test SMS sent to {recipient}","test_failed":"Couldn't send the test. Please try again.","test_no_email":"Add an email address to your profile first.","test_email_disabled":"Turn on email notifications and save before testing.","test_no_phone":"Add a phone number to your profile first.","test_phone_not_verified":"Verify your phone number before testing.","test_sms_disabled":"Turn on text notifications and save before testing.","reset_confirm_title":"Reset notification preferences?","reset_confirm_description":"All per-event channel toggles will return to their defaults (enabled). Quiet hours settings are not changed.","reset_toast":"Notification preferences reset to defaults","channels_title":"Delivery channels","channels_description":"Turn a channel off here to silence it globally. Unchecking a channel hides it from the events matrix below.","channel_status":{"email_on":"Active","email_off":"Muted","sms_on":"Active","sms_off":"Muted","sms_unverified":"Verify phone to enable","sms_unverified_hint":"Verify a phone number before enabling text notifications.","push_not_configured":"Coming soon","push_not_configured_hint":"Push notifications land when the mobile app ships — no setup yet.","push_device_opt_in":"Device-managed","push_device_opt_in_hint":"Push is enabled per-device when you grant notification permission in the SuiteOp mobile app. Check the boxes below to choose which events ping your phone.","verify_phone":"Verify phone"},"phone_verification":{"verified":"Verified","not_verified":"Not verified — won't receive SMS","send_code_button":"Send verification code","sending":"Sending…","code_sent_hint":"Enter the 6-digit code sent to {phone}.","code_sent_toast":"Verification code sent to {phone}","code_input_label":"Verification code","verify_button":"Verify","verifying":"Verifying…","resend_button":"Resend","resend_cooldown":"Resend in {seconds}s","verified_toast":"Phone number verified","send_failed":"Couldn't send verification code. Try again in a moment.","code_incorrect":"That code doesn't match. Double-check the digits.","code_expired":"The code expired. Send a new one.","code_attempts_exhausted":"Too many incorrect attempts. Send a new code.","modal_title":"Verify a phone for text notifications","modal_description":"Enter a US or Canada (+1) mobile number. We'll text you a 6-digit code to confirm it.","phone_label":"Mobile number","region_unsupported":"Text notifications are available only for US and Canada (+1) numbers."},"save_channels":"Save channels","channels_saved":"Channels saved","channels_unsaved":"Unsaved channel changes"},"general":{"personal_info":"Personal Information","first_name_label":"First Name","last_name_label":"Last Name","email_label":"Email","email_managed":"Email is managed through your authentication provider.","phone_label":"Phone","language_label":"Language","language_placeholder":"Select language","save_changes":"Save Changes","notification_preferences":"Notification Preferences","email_notifications":"Email Notifications","email_notifications_description":"Receive notifications via email","sms_notifications":"SMS Notifications","sms_notifications_description":"Receive notifications via text message","spoken_languages_label":"Languages you speak","spoken_languages_hint":"Shown first when translating an inbox conversation, and used to route guest messages to someone who can answer."},"security":{"change_password":"Change Password","current_password_label":"Current Password","current_password_incorrect":"Current password is incorrect","new_password_label":"New Password","confirm_password_label":"Confirm New Password","update_password":"Update Password","updating_password":"Updating…","password_update_failed":"Failed to update password: {message}","set_password":"Set a Password","set_password_description":"Your account doesn’t have a password yet. We’ll email a link to {email} so you can set one and sign in with your email address as well.","set_password_cta":"Set a password","has_password_load_error":"We couldn’t check your password settings. Try again in a moment.","mfa_title":"Two-Factor Authentication","mfa_description":"Add an extra layer of security to your account using an authenticator app.","mfa_enabled":"Two-factor authentication is enabled.","mfa_disabled":"Two-factor authentication is not enabled.","mfa_status_enabled":"Enabled","mfa_status_disabled":"Disabled","mfa_enable":"Enable 2FA","mfa_disable":"Disable 2FA","mfa_setup_title":"Set up authenticator app","mfa_setup_instructions":"Scan this QR code with your authenticator app (e.g. Google Authenticator, Authy), then enter the 6-digit code to verify.","mfa_secret_label":"Manual entry key","mfa_secret_copied":"Secret key copied to clipboard","mfa_verify_label":"Verification code","mfa_verify_placeholder":"000000","mfa_verify_submit":"Verify and enable","mfa_verify_submitting":"Verifying…","mfa_verify_error":"Invalid code. Please try again.","mfa_enroll_failed":"Failed to start 2FA setup. Please try again.","mfa_enrolled_success":"Two-factor authentication enabled successfully.","mfa_cancel_setup":"Cancel","mfa_disable_title":"Disable two-factor authentication","mfa_disable_description":"Enter your password to confirm disabling 2FA. Your account will be less secure.","mfa_disable_password_label":"Current password","mfa_disable_password_incorrect":"Password is incorrect","mfa_disable_confirm":"Disable 2FA","mfa_disable_confirming":"Disabling…","mfa_disable_success":"Two-factor authentication disabled.","mfa_disable_failed":"Failed to disable 2FA: {message}","mfa_qr_alt":"QR code for authenticator app","mfa_manual_toggle":"Can’t scan? Enter key manually","mfa_backup_codes_title":"Save your backup codes","mfa_backup_codes_description":"Store these codes in a safe place. Each code can be used once to sign in if you lose access to your authenticator app.","mfa_backup_codes_copy":"Copy codes","mfa_backup_codes_copied":"Backup codes copied to clipboard","mfa_backup_codes_done":"I’ve saved my codes","mfa_load_failed":"Failed to load MFA settings. Please refresh."},"avatar":{"change":"Change avatar","invalid_type":"Please upload a PNG, JPEG, GIF, or WebP file","too_large":"Avatar must be smaller than 5 MB","upload_failed":"Failed to upload avatar. Please try again."},"toast":{"updated":"Profile updated","password_updated":"Password updated successfully","avatar_updated":"Avatar updated"},"active_sessions":{"title":"Active sessions","subtitle":"Devices currently signed in to your account","this_device":"This device","unusual_sign_in":"Unusual sign-in","active_now":"Active now","minutes_ago":"{count, plural, one {# minute ago} other {# minutes ago}}","hours_ago":"{count, plural, one {# hour ago} other {# hours ago}}","yesterday_at":"Yesterday at {time}","absolute_date":"{date}","ip_address":"IP address","revoke":"Revoke","revoke_disabled_current":"Use the sign-out button to end this session","revoke_all":"Sign out all other devices","revoke_confirm_title":"Sign out this device?","revoke_confirm_body":"The browser at {device} in {location} will be signed out immediately.","revoke_confirm_action":"Sign out","revoke_all_confirm_title":"Sign out all other devices?","revoke_all_confirm_body":"Every device except the one you're using right now will be signed out.","revoke_all_confirm_action":"Sign out everywhere else","load_error":"Couldn't load your sessions.","retry":"Retry","unknown_location":"Unknown location","unknown_device":"Unknown device"},"delete_account":{"title":"Delete account","description":"Permanently delete your SuiteOp account. Your past work stays with each organization, no longer linked to you.","memberships_heading":"Your organizations","region_label":"{region}","role_owner":"Owner","leave_button":"Leave this organization","delete_button":"Delete my account","still_a_member":"You belong to {count} organizations. Leave each one from inside it, then come back here to delete your account.","owner_blocked_title":"You own an active organization","owner_blocked_body":"You own {orgs}. An organization's owner cannot be removed, and ownership cannot be transferred. Contact support to close it before deleting your account.","org_unresolved_title":"We can't confirm your current organization","org_unresolved_body":"Something went wrong loading your current organization, so we can't safely build the confirmation step. Refresh the page and try again.","regions_unavailable_title":"Some organizations could not be loaded","regions_unavailable_body":"We could not reach {regions}, so we cannot confirm which organizations you belong to. Deleting an account is permanent, so this is blocked until it loads.","region_unavailable":"We couldn't reach every region to confirm your organizations, so your account was not deleted. Please try again shortly.","error_home_region":"Your account can only be deleted from the region that holds it, and this isn't it. Please contact SuiteOp support.","error_not_deletable":"Your account can't be deleted right now. Please try again shortly, and contact SuiteOp support if it keeps happening.","error_unavailable":"Account deletion is temporarily unavailable. Please try again shortly.","error_invalid_password":"That password is incorrect.","error_generic":"Something went wrong and your account was not deleted. Please try again.","retry":"Try again","leave_modal_title":"Leave {org}?","leave_modal_body":"You will lose access to {org} immediately. Your completed work stays with the organization. An administrator can invite you back.","leave_confirm_label":"Type the organization's name to confirm","leave_confirm_button":"Leave organization","name_mismatch":"That doesn't match the organization's name.","delete_modal_title":"Delete your account?","delete_modal_body":"This cannot be undone. You will leave {org}, your profile will be erased, and you will be signed out of every device.","delete_modal_body_orgless":"This cannot be undone. Your profile will be erased, and you will be signed out of every device.","delete_modal_retained":"Your completed tasks, shifts and messages stay with the organization, no longer linked to you.","delete_password_label":"Current password","password_required":"Enter your current password.","delete_email_label":"Type {email} to confirm","email_mismatch":"That doesn't match your account email.","delete_confirm_button":"Delete my account permanently","cancel":"Cancel","left_success":"You have left {org}.","deleted_success":"Your account has been deleted.","leave_failed":"Could not leave the organization: {message}","delete_failed":"Could not delete your account: {message}","partial_failure":"You have left {org}, but your account could not be deleted: {message}","partial_failure_warning":"Keep this dialog open until deletion finishes — closing it now leaves your account undeleted.","membership_remains_guidance":"You still belong to at least one organization. Open it and leave from inside it, then come back here to delete your account.","session_stale":"For your security, deleting your account needs a recent sign-in — and this session is too old.","session_expired_guidance":"Sign out and sign in again, then come back here to delete your account.","session_expired_guidance_stranded":"Sign out and sign in again to finish deleting your account. If you can no longer reach this page, contact SuiteOp support.","session_check_failed":"We couldn't confirm how recently you signed in. Please try again."}},"property":{"page_title":"Properties","add_property":"Add Property","add_group":"Add Group","search_placeholder":"Search properties…","filter":{"properties":"Properties","tags":"Tags","archived":"Archived"},"status_active":"{count, plural, one {# Active} other {# Active}}","status_disabled":"{count, plural, one {# Disabled} other {# Disabled}}","empty_message":"No properties found","empty_description":"Get started by adding your first property.","bulk_edit":{"action":"Bulk edits","title":"Bulk edit properties","description":"Apply changes across multiple properties at once. Only the fields you fill in are updated — everything else is left untouched.","too_many_properties":"Select at most {max} properties at a time.","applies_to_selected":"Changes apply to the properties you selected.","section_property_info":"Property information","section_property_info_subtitle":"Tags and guest-facing links.","tags_label":"Tags","op_add":"Add tags","op_remove":"Remove tags","tags_search_placeholder":"Search tags…","tags_empty":"No tags found.","tags_selected_count":"{count, plural, one {# tag selected} other {# tags selected}}","review_link_label":"Review link","section_network":"Network & device settings","section_network_subtitle":"WiFi credentials for the selected properties.","wifi_name_label":"WiFi name","wifi_password_label":"WiFi password","section_validation":"Validation & entry","section_validation_subtitle":"How access codes are validated and shown to guests.","code_type_label":"Code type","option_no_change":"No change","validation_code_label":"Validation code","entry_code_label":"Entry code","section_check_times":"Check-in/Check-out times","section_check_times_subtitle":"Default hours and instruction visibility.","check_in_hour_label":"Default check-in hour","check_out_hour_label":"Default check-out hour","timer_label":"Display check-in instruction timer","timer_on":"On","timer_off":"Off","hide_timer_hours_label":"Hours to display instructions","toast_success":"{count, plural, one {# property updated} other {# properties updated}}","toast_tags":"{count, plural, one {# tag assignment changed} other {# tag assignments changed}}","toast_error":"Couldn't update properties. Please try again.","toast_error_status_after_edit":"Field changes were saved, but the status update failed — please retry the status change.","access_notes_label":"Internal access notes","confirm_title":"Apply bulk edit?","confirm_description":"This updates the fields you set on {count, plural, one {# property} other {# properties}}. It can't be undone.","confirm_apply":"Apply changes","guest_portal_label":"Guest portal","section_status":"Operational status","section_status_subtitle":"Declare cleaning or inspection status for every selected property — the same as changing it on each property page.","status_impact_note":"Each property gets an activity-log entry and its readiness is recalculated.","status_impact_pms_syncs":"Cleaning status also syncs to your PMS.","status_impact_pms_unsupported":"Cleaning status will not reach the PMS for {count} of the selected properties — their provider does not accept it. The update still applies in SuiteOp.","status_impact_pms_unknown":"Cleaning status also syncs to your PMS for providers that accept it — which of the matching properties those are can't be checked for a filter-based selection. The update still applies in SuiteOp.","status_cleaning_label":"Cleaning status","status_inspection_label":"Inspection status","too_many_for_status":"Status can be changed on at most {max} properties at a time.","toast_status":"{count, plural, one {# status change applied} other {# status changes applied}}","toast_status_partial":"{count, plural, one {# property couldn't be updated} other {# properties couldn't be updated}}","section_building":"Building access","section_building_subtitle":"Shared building or common-area door code for the selected properties. Only affects properties that belong to a building (property group).","building_impact_warning":"Changes which code guests use on shared building doors. Codes already issued to guests and building locks stay active until each property's next reservation issues new ones.","building_override_label":"Building code override","building_override_on":"On — property sets its own building code","building_override_off":"Off — property inherits the building's code","building_code_type_label":"Building code type","building_validation_code_label":"Building validation code","building_entry_code_label":"Building entry code","confirm_impact_building":"Building access: codes already issued stay active until each property's next reservation.","confirm_impact_status":"Status: writes activity-log entries and recalculates readiness.","clear_action":"Clear","clear_undo":"Undo clear","cleared_placeholder":"Will be cleared on save","confirm_impact_clear":"{count, plural, one {Clears # field} other {Clears # fields}} on every selected property.","clear_portal":"Remove portal assignment","clear_code_type":"Clear code type","clear_building_code_type":"Remove building code (use the building's settings)","clear_time":"Clear default time","summary_cleared":"Will be cleared","summary_tags_add":"{count, plural, one {Add # tag} other {Add # tags}}","summary_tags_remove":"{count, plural, one {Remove # tag} other {Remove # tags}}","hide_timer_hours_requires_timer":"Hours to display applies only when this edit turns the instruction timer on."},"columns":{"name":"Name","location":"Location","readiness":"Readiness","cleaning":"Cleaning","inspection":"Inspection","maintenance":"Maintenance","capacity":"Capacity","locks":"Locks","thermostats":"Thermostats","sensors":"Sensors","access":"Access","devices":"Devices","status":"Status","group":"Group"},"access_type":{"dynamic":"Dynamic","fixed":"Static","import":"PMS Import","none":"No access"},"grouped":{"unassigned":"Unassigned","properties_count":"{count, plural, one {# property} other {# properties}}","devices_count":"{count, plural, one {# device} other {# devices}}","no_properties":"No properties in this group","grouping_unavailable":"Property groups couldn't load, so this list isn't grouped. Every property is still shown.","settings":"Settings","offline_count":"{count, plural, one {# offline} other {# offline}}","low_battery_count":"{count, plural, one {# low battery} other {# low battery}}","disabled_badge":"Disabled","showing_range":"Showing {from}–{to} of {total}"},"capacity":{"beds":"{count, plural, one {# bed} other {# beds}}","baths":"{count, plural, one {# bath} other {# baths}}","guests":"{count, plural, one {# guest} other {# guests}}","sleeps_from_elements":"Sleeps {count} from elements"},"group":{"create_title":"Create Property Group","create_description":"Group properties together for easier management.","name_label":"Group Name","name_placeholder":"Enter group name","add_to_all_members_label":"Add to all members","add_to_all_members_description":"Grant all current organization members access to this group.","submit":"Create Group","submitting":"Creating…"},"create":{"title":"Create Property","description":"Add a new property to your organization.","step_of":"Step {current} of {total}","step_basic":"Basic Info","step_capacity":"Capacity & Spaces","step_details":"Details","optional_step":"All fields on this step are optional.","nickname_label":"Nickname","nickname_placeholder":"Enter property nickname","address_section":"Address","address_label":"Property Address","address_placeholder":"Search for an address…","address_required":"Address is required","unit_number_label":"Unit Number","unit_number_placeholder":"e.g. Suite 100, Apt 2B","pms_listing_label":"PMS Listing","pms_listing_placeholder":"Search listings to pre-fill…","property_group_label":"Property Group","property_group_placeholder":"Search groups…","create_group_inline":"+ Create group","capacity_section":"Capacity","bedrooms_label":"Bedrooms","bathrooms_label":"Bathrooms","beds_label":"Beds","max_guests_label":"Max Guests","elements_section":"Spaces & Elements","elements_description":"Select the spaces and features this property has. The bedrooms and bathrooms you entered above are added automatically, each as its own room. Arrival, Completion, and General are always included.","elements_mandatory":"Always included","elements_add":"Add a space","elements_increase":"Add one more {name}","elements_decrease":"One fewer {name}","elements_remove":"Remove {name}","cover_photo_label":"Cover Photo","cover_photo_select":"Choose photo","cover_photo_change":"Change photo","cover_photo_remove":"Remove photo","wifi_name_label":"WiFi Name","wifi_name_placeholder":"Network name","wifi_password_label":"WiFi Password","wifi_password_placeholder":"Network password","house_rules_label":"House Rules","house_rules_placeholder":"Enter house rules…","back":"Back","next":"Next","submit":"Create Property","submitting":"Creating…","cover_preview":"Cover preview","no_listings":"No listings found"},"detail":{"back":"Back to Properties","not_found":"Property not found","not_found_description":"This property may have been removed or you don't have access.","overview_tab":"Overview","events_tab":"Events","monitoring_tab":"Monitoring","settings_tab":"Settings","devices_tab":"Devices","property_info":"Property Info","check_in_wifi":"Check-in & WiFi","check_in_time":"Check-in Time","check_in_hour_placeholder":"e.g. 15","check_out_time":"Check-out Time","check_out_hour_placeholder":"e.g. 11","wifi_name":"WiFi Name","wifi_password":"WiFi Password","no_check_in_wifi":"No check-in or WiFi details configured.","linked_devices_placeholder":"Linked devices will appear here.","delete_title":"Delete Property","delete_description":"Delete \"{name}\"? It moves to Archived and disappears from lists, pickers and search. Its reservations, tasks and instructions stay linked to it, and you can restore it at any time.","delete_permanent":"Archives the property. Its history is kept and you can restore it later.","validation_blocked":"Please fix the highlighted fields before saving.","name_label":"Name","nickname_label":"Nickname","street_address_label":"Street Address","city_label":"City","state_label":"State","postal_code_label":"Postal Code","country_code_label":"Country Code","timezone_label":"Timezone","timezone_unset":"Not set — scheduling uses UTC","timezone_change_hint":"Changing the timezone updates this property's default check-in and check-out times. Existing reservations and tasks keep their scheduled time.","address":"Address","bedrooms":"Bedrooms","bathrooms":"Bathrooms","max_guests":"Max Guests","group_label":"Property Group","group_placeholder":"Select a group…","group_none":"None","owner_label":"Owner","owner_placeholder":"Select an owner…","owner_none":"None","owner_new":"New owner","owner_edit":"Edit owner","owner_dialog_create_title":"New owner","owner_dialog_edit_title":"Edit owner","owner_name_label":"Name","owner_notes_label":"Notes","owner_delete":"Delete owner","owner_delete_confirm_title":"Delete this owner?","owner_delete_confirm_body":"{name} will be removed and unassigned from every unit. This cannot be undone.","owner_deleted":"Owner deleted","unit":"Unit","access_type_label":"Access Type","disabled_banner":"This property has been disabled.","danger_zone":"Danger Zone","disable_property":"Disable Property","enable_property":"Enable Property","disable_description":"Disabled properties are hidden from all lists and operations.","disable_consequences":"Disabling removes this property from billing, stops its guest portal, and halts task and automation generation.","enable_description":"Re-enable this property to make it active again.","disable_confirm":"Are you sure you want to disable \"{name}\"? It will be removed from billing, its guest portal will stop working, and tasks and automations will stop generating for it.","enable_confirm":"Are you sure you want to re-enable \"{name}\"?","settings_property":"Property","settings_details":"Details","settings_instructions":"Instructions","settings_assignment":"Assignment","network_details":"Network Details","wifi_copy_to_others":"Copy to other properties","wifi_copy_title":"Copy WiFi Credentials","wifi_copy_description":"Select the properties you want to copy the WiFi name and password to.","wifi_copy_success":"{count, plural, one {WiFi credentials copied to # property} other {WiFi credentials copied to # properties}}","wifi_import_pms":"Import from PMS","house_rules":"House Rules","house_rules_empty":"No house rules have been set for this property.","house_rules_placeholder":"Enter house rules for guests…","description":"Description","description_empty":"No description has been set for this property.","description_edit_description":"Multilingual description used by your booking engine. The guest portal does not display it.","description_placeholder":"Write a description for guests…","instructions_placeholder":"Check-in and check-out instruction management will be available here.","status_changes":"Status Changes","entries_exits":"Entries & Exits","noise_events":"Noise Events","status_changes_empty_title":"No status changes","status_changes_empty_description":"Property status change history from the last 30 days will appear here.","entries_empty_title":"No access entries","entries_empty_description":"Lock access events will appear here once devices are connected.","noise_empty_title":"No noise events","noise_empty_description":"Noise monitoring events will appear here once sensors are connected.","devices_empty_title":"No devices linked","devices_empty_description":"Devices linked to this property will appear here.","upcoming_reservations":"Upcoming Reservations","reservations_empty_title":"No upcoming reservations","reservations_empty_description":"Upcoming guest reservations will appear here.","night_count":"{count}n","view_in_pms":"View in PMS","house_manuals":"House Manuals","house_manuals_add":"Add","house_manuals_create_new":"Create New Manual","house_manuals_import":"Import Existing","house_manuals_empty_title":"No house manuals","house_manuals_empty_description":"House manuals for this property and its group will appear here.","house_manuals_group_section":"Inherited from Group","manual_status_active":"Active","manual_status_inactive":"Inactive","manual_linked":"Manual linked to property","manual_unlinked":"Manual unlinked from property","manual_created":"Manual created","manual_updated":"Manual updated","manual_deleted":"Manual deleted","manual_editor_title_create":"Create House Manual","manual_editor_title_edit":"Edit House Manual","manual_nickname":"Nickname","manual_nickname_placeholder":"e.g. Wi-Fi Instructions","manual_active":"Active","manual_category":"Category","manual_category_placeholder":"Select a category…","manual_category_manage":"Manage categories","manual_display_mode":"Display Mode","manual_display_mode_multi_lingual_text":"Multi-lingual Text","manual_display_mode_pms_variable":"PMS Variable","manual_video_url":"Video URL","manual_video_url_placeholder":"https://youtube.com/…","manual_internal_description":"Internal Description","manual_delete_confirm_title":"Delete Manual","manual_delete_confirm_description":"Are you sure you want to delete this manual? This action cannot be undone.","manual_import_title":"Import Manual","manual_import_search":"Search manuals…","tasks_button":"Tasks","tasks_panel_title":"Property tasks","tasks_panel_subtitle":"Audit recent activity and review upcoming tasks for this property.","tasks_create":"Create task","tasks_empty_title":"No tasks match","tasks_empty_description":"Try widening the date range or clearing filters.","tasks_preset_today":"Today","tasks_preset_week":"This week","tasks_preset_overdue":"Overdue","tasks_preset_all":"All","tasks_filter_status":"Status","tasks_filter_department":"Department","tasks_filter_assignee":"Assignee","tasks_more_filter_hint":"More results available — refine filters to narrow the list.","recent_activity":"Recent Activity","device_online":"Online","device_offline":"Offline","tags_title":"Tags","tags_empty":"No tags assigned to this property.","tags_add_placeholder":"Search or create tags…","tags_create_new":"Create \"{name}\"","images_title":"Property Images","images_empty":"No images uploaded yet.","images_upload":"Upload Image","delete_image":"Delete image","delete_image_title":"Delete Image","delete_image_description":"Are you sure you want to delete this image? This action cannot be undone.","images_alt_placeholder":"Describe this image…","elements_title":"Spaces & Elements","elements_empty":"No custom elements added.","elements_add":"Add Element","elements_mandatory":"Mandatory","element_name_label":"Name","element_name_placeholder":"e.g. Master Bedroom","element_description_label":"Description","element_description_placeholder":"Describe this space or element…","element_delete_title":"Delete Element","element_delete_description":"Are you sure you want to remove this element? This action cannot be undone.","pms_listing_title":"PMS Listing","pms_listing_empty":"No PMS listing linked.","pms_listing_provider":"Provider","pms_listing_linked":"Linked to","settings_tab_property":"Property","settings_tab_details":"Details","settings_tab_instructions":"Access & Check-in","settings_tab_guest_portal":"Guest Experience","code_management_title":"Property Access","code_management_description":"Configure how access codes are generated and displayed to guests.","disable_unit_code_label":"Disable unit code","disable_unit_code_description":"Hide the unit's own door code from the guest and don't provision it. The building code is independent and keeps working.","code_display_label":"Code Type","code_display_placeholder":"Select code type","code_display_dynamic":"Dynamic Code","code_display_dynamic_hint":"Unique codes generated per reservation.","code_display_fixed":"Static Code","code_display_fixed_hint":"A pre-set code on the lock, shown to all guests — not generated or synced.","code_display_import":"Import from PMS","code_display_import_hint":"Codes are pulled from your PMS.","pms_import_capability_unlinked":"No PMS listing is linked. Import from PMS will remain empty until a listing is connected.","pms_import_capability_native_pull":"SuiteOp can import reservation access codes from {providers}. A code appears after the PMS supplies one.","pms_import_capability_conditional_pull":"For {providers}, SuiteOp imports only codes clearly owned by the PMS. SuiteOp-written codes are ignored to prevent feedback loops.","pms_import_capability_round_trip_only":"For {providers}, SuiteOp can only read the access code in SuiteOp's own custom field. This is not a native PMS door-code import.","pms_import_capability_unsupported":"{providers} does not expose a supported reservation access-code field. Import from PMS will remain empty.","pms_import_capability_unverified":"SuiteOp can read a generic access-code field for {providers}, but populated codes have not been verified. Confirm with a test reservation.","code_entry_key_label":"Entry Code","code_entry_key_placeholder":"e.g. 1234#","fixed_code_missing_title":"Static code required","property_fixed_code_missing":"This property uses a static code, but no entry code is configured. Reservations will not show a unit access code until one is added.","building_fixed_code_missing":"This building override uses a static code, but no entry code is configured. Reservations will not show a building access code until one is added.","inherited_group_fixed_code_missing":"This property inherits a static building code, but the property group has no entry code. Add one in the group's Access settings.","fixed_code_missing_action":"Add static code","open_group_access_action":"Open group access settings","code_validation_key_label":"Confirmation Key","code_validation_key_placeholder":"e.g. #","code_validation_key_description":"Key to confirm personal code entry. Max 8 characters.","provision_warning_title":"Change Code Type?","provision_warning_description":"This property has existing access codes configured. Changing the code type may affect how codes are generated and require reconfiguration.","disable_unit_code_warning_title":"Disable unit code?","disable_unit_code_warning_description":"SuiteOp hides the unit code and revokes it on the door: it retires the door codes it manages on this property's unit locks and asks the locks to delete them — including for guests currently staying. A PIN already sent to your PMS or posted in a booking-channel message thread is not cleared; update it there yourself. This is not a guarantee that every PIN stops opening the door: codes SuiteOp does not manage stay put (a static code set on the lock, a shared backup code), and a managed one can also remain when device updates are off for the account or the code is shared with another lock or stay. The building code is independent and keeps working.","building_access_title":"Building Access Override","building_access_description":"Override the building-level access code inherited from the property group.","building_access_override_label":"Override Building Access Code","building_access_override_description":"Show guests this unit's own building access code instead of the code set on the building.","building_access_inherited":"Inherited from property group.","building_access_no_group":"Assign this property to a group to configure building access.","internal_notes_title":"Internal Access Notes","internal_notes_description":"Staff-only notes displayed on tasks assigned to this property.","internal_notes_placeholder":"e.g. Alarm code: 1234, key under doormat, gate requires buzzer…","review_request_title":"Review Request","review_request_description":"Where guests are redirected to leave a review after checkout.","review_request_url_label":"Review URL","review_request_url_placeholder":"https://g.page/your-property/review","review_request_overrides_title":"Override by booking site","review_request_overrides_description":"Send guests from a specific booking site to a different review destination.","review_request_override_source_label":"Booking site","review_request_override_add":"Add override","review_request_override_remove":"Remove override","review_request_airbnb_hint":"Airbnb guests without an override or default URL are directed to Airbnb's review section (under Trips).","checkin_timer_label":"Check-in Instruction Timer","checkin_timer_description":"Show a countdown timer on the guest portal after pre-check-in.","checkin_timer_explainer_precheckin":"Check-in instructions are always hidden from guests until they complete pre-check-in.","checkin_timer_explainer_timer":"Enable the timer to keep them hidden even after pre-check-in is complete, until a set number of hours before check-in.","checkin_timer_hours_label":"Hours before check-in","checkin_timer_hint":"Guests will see check-in instructions starting {hours} hours before their check-in time.","backup_swap_label":"Disable Backup Code Swapping","backup_swap_description":"Turn off automatic replacement of failed door codes, and prevent guests from requesting a new code from the portal.","checkin_summary_title":"Check-in Summary","checkin_summary_description":"Keep it short — shown next to the guest's access code. Around 150 characters.","checkin_summary_placeholder":"e.g. Enter this code at the front door — welcome!","group_checkin_summary_title":"Building Check-in Summary","group_checkin_summary_description":"Inherited from the property group. This read-only summary applies to all properties in the building.","custom_fields_title":"Custom Fields","custom_fields_empty":"No custom fields configured.","custom_fields_description":"Custom metadata imported from your PMS.","house_rules_edit_label":"House Rules","house_rules_edit_description":"Multilingual house rules shown to guests.","assignment_portal_title":"Portal & Guest Experience","assignment_portal_label":"Guest Portal","assignment_portal_placeholder":"Select a portal…","assignment_portal_clear":"Clear selected portal","assignment_portal_description":"Link this property to a guest-facing portal.","assignment_chekin_title":"GuestAdmin Integration","assignment_chekin_property_label":"GuestAdmin Property","assignment_chekin_room_label":"GuestAdmin Room","assignment_chekin_not_configured":"GuestAdmin integration is not configured.","ga_select_property":"Select a GuestAdmin property","ga_linked_to":"Linked to","ga_linked_details_unavailable":"Linked — details unavailable","ga_linked_details_unavailable_description":"This GuestAdmin link was made before property groups existed, so its details can't be shown. Unlink it, then create a new GuestAdmin property to link.","ga_link_button":"Link Property","ga_unlink_button":"Unlink","ga_link_success":"Property linked to GuestAdmin","ga_unlink_success":"Property unlinked from GuestAdmin","ga_no_properties":"No GuestAdmin properties found. Import or create properties in the GuestAdmin integration page.","ga_create_and_link":"Create New GuestAdmin Property","assignment_portal_saved":"Portal assignment updated.","assignment_portal_cleared":"Portal assignment removed.","assignment_portal_none":"No portal assigned","assignment_col_nickname":"Nickname","assignment_col_status":"Status","assignment_col_assignment":"Assignment","assignment_status_active":"Active","assignment_status_disabled":"Disabled","assignment_level_property":"Property","assignment_level_portal":"Portal","assignment_level_tag":"Tag","assignment_precheck_title":"Pre-Check-in Steps","assignment_precheck_count":"Pre-Check-in Steps ({count})","assignment_precheck_empty":"No pre-check-in steps assigned to this property.","assignment_precheck_manage":"Manage steps","assignment_precheck_description":"Required guest verification steps before arrival.","assignment_upsells_title":"Active Upsells","assignment_upsells_count":"Active Upsells ({count})","assignment_upsells_empty":"No upsells assigned to this property.","assignment_upsells_manage":"Manage upsells","assignment_upsells_description":"Guest upsell offerings available at this property.","open_in_maps":"Open in Maps","pms_unlinked_title":"PMS Listing Unlinked","pms_unlinked_description":"This property's PMS listing could not be found. The listing may have been removed from your PMS.","pms_refresh":"Refresh PMS Link","pms_sync_from":"Sync from PMS","pms_sync_cover":"Cover Photo","pms_sync_wifi":"WiFi Credentials","pms_sync_nickname":"Nickname","pms_sync_success":"Field synced from PMS successfully.","pms_refresh_success":"PMS listing refresh started. This may take a moment.","address_hidden_label":"Hide address until verified","address_hidden_description":"Hide the exact address from guests until they complete verification. Your team always sees it.","inspection_required_label":"Inspection Required","inspection_required_description":"Require inspection before property is marked as ready.","elements_tab":"Elements","elements_add_area":"Add Area","elements_add_item":"Add Item","elements_add_sub_item":"Add Sub-item","elements_select_type":"Select type","elements_search_type":"Search...","elements_no_type_found":"No type found.","elements_no_type_hint":"Element types come from your catalog.","elements_manage_types":"Manage element types","elements_create_type":"Create \"{name}\"","elements_creating_type":"Creating type...","elements_linking_catalog":"Linking...","elements_manage_catalog":"Manage Catalog","elements_empty_title":"No elements yet","elements_empty_readonly":"No shared elements","elements_empty_description":"Add your first area to start building this property's space hierarchy.","elements_shared_title":"Shared Elements from {groupName}","elements_shared_link":"Manage in group settings","elements_quick_add_placeholder":"Enter name...","elements_delete_title":"Delete Element","elements_delete_title_named":"Delete \"{name}\"?","elements_delete_description":"This will also delete all child elements. This action cannot be undone.","elements_delete_mandatory":"Mandatory areas cannot be deleted.","elements_from_catalog":"From catalog","elements_sleeping_capacity":"Sleeps","elements_link_catalog":"Link to Catalog","elements_unlink_catalog":"Unlink","elements_view_catalog":"View in Catalog","elements_create_catalog":"Create new catalog entry","elements_child_count":"{count, plural, one {# item} other {# items}}","elements_sub_item_count":"{count, plural, one {# sub-item} other {# sub-items}}","elements_quantity":"×{count}","elements_no_children":"No items yet","elements_level_area":"Area","elements_level_item":"Item","elements_level_sub_item":"Sub-item","elements_description":"Description","elements_quantity_label":"Quantity","elements_serial_number":"Serial Number","elements_make":"Make","elements_model":"Model","elements_notes":"Notes","elements_warranty_expires":"Warranty Expires","elements_last_serviced":"Last Serviced","elements_items_section":"Items","elements_sub_items_section":"Sub-items","elements_unsaved":"Unsaved","elements_advanced":"Advanced","elements_linked_devices":"Linked Devices","elements_has_device":"Has linked device","access_options_title":"Access options","settings_tab_operations":"Operations","operations_title":"Operations","review_request_airbnb_default_chip":"Link to Airbnb review","review_request_airbnb_override":"Override","review_request_override_reset":"Reset","check_minute_label":"Minutes","check_minute_placeholder":"MM","wifi_hidden_label":"Hide WiFi","wifi_hidden_description":"Hide the WiFi network and password from guests until check-in unlocks — the same conditions that gate the door code, including an unpaid required charge. Your team always sees it.","assignment_level_tag_named":"Tag: {name}","custom_address_label":"Display address","custom_address_placeholder":"e.g. Reception, 123 Main St","custom_address_hint":"Shown to guests instead of the real address.","maps_link_label":"Google Maps link","maps_link_hint":"Opens instead of the automatically generated map link.","images_primary":"Primary","images_make_primary":"Make primary","images_move_earlier":"Move earlier","images_move_later":"Move later","recommended":"Recommended","not_recommended":"Not recommended","images_primary_hint":"The Primary photo is the hero image guests see in the portal.","guest_address_title":"Guest-facing address","guest_address_description":"Control the address guests see and where map links point.","guest_address_real_label":"Real address","guest_address_override_toggle":"Override for guests","guest_address_override_hint":"Show guests a different address and/or maps link. Your team always sees the real one.","guest_address_override_badge":"Override on","guest_address_using_real":"Guests currently see the real address.","group_code_confirmation_key_label":"Confirmation key","house_manuals_reorder_hint":"Drag to set the order guests see in the portal.","manual_drag_handle":"Drag to reorder","restore_action":"Restore"},"elements":{"title":"Elements","manage":"Manage","empty":"No elements configured","child_count":"{count, plural, one {# item} other {# items}}","add_element":"Add element","add_child":"Add sub-element","delete_confirm":"Delete \"{name}\"?","delete_confirm_label":"Delete","delete_warning":"This will also delete {count, plural, one {# sub-element} other {# sub-elements}}.","no_children":"No sub-elements","mandatory":"Required","detail":{"name":"Name","name_placeholder":"Element name","description":"Description","description_placeholder":"Optional description…","type":"Type","parent":"Parent","save":"Save","saved":"Element saved","cancel":"Cancel"},"category":{"rooms_areas":"Rooms & Areas","furniture":"Furniture","fixtures_appliances":"Fixtures & Appliances","linens_amenities":"Linens & Amenities","outdoor":"Outdoor"}},"group_detail":{"page_title":"Property Group","back":"Back to Properties","not_found":"Property group not found","not_found_description":"This group may have been removed or you don't have access.","tab_general":"General","tab_properties":"Properties","tab_access":"Access","general_title":"General Settings","general_name_label":"Group Name","general_name_placeholder":"Enter group name","general_inspection_label":"Inspection Required","general_inspection_description":"Enable this if inspections are required before guests can stay at properties in this group. Changing this overrides property-level settings.","general_danger_zone":"Danger Zone","general_danger_zone_description":"Deleting this group will unassign all properties. This action cannot be undone.","general_delete_group":"Delete Group","properties_title":"Properties","properties_add":"Add Property","properties_add_title":"Add Properties","properties_add_description":"Search and select the properties to add to this group. A property belongs to one group at a time, so adding one that is already grouped moves it.","properties_add_search_placeholder":"Search properties…","properties_add_no_results":"No matching properties.","properties_add_nothing_left":"Every property you can access is already in this group.","properties_add_select_all":"Select all {count}","properties_add_deselect_all":"Deselect all","properties_add_selected_count":"{count, plural, =0 {No properties selected} one {# property selected} other {# properties selected}}","properties_add_submit":"{count, plural, =0 {Add} one {Add # property} other {Add # properties}}","properties_add_more_results":"{count, plural, one {# more property matches — refine your search} other {# more properties match — refine your search}}","properties_add_currently_in":"Currently in {group}","properties_add_move_warning":"{count, plural, one {# property will be moved out of its current group} other {# properties will be moved out of their current groups}}","properties_add_remove_selected":"Remove {name} from selection","properties_added":"{count, plural, one {# property added to the group} other {# properties added to the group}}","properties_no_properties":"No properties assigned to this group yet.","properties_remove":"Remove from group","properties_remove_title":"Remove Property","properties_remove_description":"Remove \"{name}\" from this group? The property will become unassigned.","access_title":"Group Access","access_code_type_label":"Code Type","access_code_type_description":"How access codes are displayed to guests. Choose between dynamic, fixed, or import from PMS.","access_code_type_placeholder":"Select code type","access_code_type_none":"No building access","access_entry_code_label":"Building Code","access_entry_code_placeholder":"1234#","access_entry_code_description":"Fixed access code for this building.","access_fixed_code_missing_title":"Building code required","access_fixed_code_missing_description":"This group uses a static code, but no building code is configured. Reservations at its properties will not show a building access code until one is added.","access_confirm_key_label":"Confirmation Key","access_confirm_key_placeholder":"#, ✔️…","access_confirm_key_description":"Confirmation key to validate personal access code. Max 8 characters.","access_notes_label":"Internal Access Notes","access_notes_placeholder":"Staff-only notes displayed on tasks assigned to this group…","access_notes_description":"This section will be displayed on each task assigned to the group.","access_checkin_summary_label":"Check-in Summary","access_checkin_summary_placeholder":"Describe how guests check in to this building…","access_checkin_summary_description":"If empty, the portal section including the access code won’t display.","access_label_visible":"Custom Access Label","access_label_visible_description":"When enabled, replaces \"Building access\" in the guest check-in guide with a custom label.","access_share_group_codes":"Share Building Codes","access_share_group_codes_description":"When enabled, stays that overlap in this group reuse one building entrance code instead of each getting its own. Applies only where building codes are generated per stay — not to codes imported from a PMS, and not to locks that issue their own access grants.","access_share_group_codes_confirm_title":"Share building codes for this group?","access_share_group_codes_confirm_description":"Where this group's building codes are generated per stay: from now on, an overlapping stay that does not yet have a building code will reuse an existing one instead of adding another to the lock. Stays that already have their own building code keep it. Saving also re-checks this group's active stays, so a building code that no longer matches SuiteOp's record is reset to it.","access_custom_label":"Custom Label Text","access_custom_label_placeholder":"e.g. Lobby Access","tab_users":"Users","users_title":"User Access","users_description":"Manage which members have access to this property group.","users_add":"Add User","users_add_placeholder":"Select a member…","users_no_members":"No members have been granted access to this group yet.","users_remove":"Remove access","users_remove_title":"Remove User Access","users_remove_description":"Remove \"{name}\" from this group? They will lose access to all properties in the group.","users_columns_name":"Name","users_columns_email":"Email","users_member_added":"Member added to group","users_member_removed":"Member removed from group","elements_tab":"Elements","elements_shared_note":"These elements are shared across all properties in this group.","delete_title":"Delete Property Group","delete_description":"Are you sure you want to delete \"{name}\"? Properties in this group will become unassigned.","delete_forbidden":"Only someone with access to every property can delete a group, because deleting it changes which properties your teammates can reach. Ask an admin or an owner to delete this group.","delete_unavailable":"This property group is no longer available. It may have already been deleted.","columns":{"name":"Name","location":"Location","readiness":"Readiness","cleaning":"Cleaning"}},"instruction":{"check_in_title":"Check-in Instructions","check_out_title":"Check-out Instructions","add":"Add Instruction","empty":"No instructions yet. Add your first instruction to guide guests.","step_label":"Step {number}","edit":"Edit instruction","delete":"Delete instruction","delete_title":"Delete Instruction","delete_description":"Are you sure you want to delete this instruction? This action cannot be undone.","move_up":"Move up","move_down":"Move down","editor_title_new":"New Instruction","editor_title_edit":"Edit Instruction","title_label":"Title","title_placeholder":"Instruction title","description_label":"Description","description_placeholder":"Describe this step for guests…","code_type_label":"Code Type","code_type_placeholder":"Select code type","code_type_manual_code":"Manual Code","code_type_reservation_dynamic_code":"Reservation Access Code","code_type_property_fixed_code":"Property Static Code","code_type_group_fixed_code":"Group Static Code","code_type_not_configured":"Not configured","code_type_shared_device_required":"Shared group lock required","code_type_reservation_dynamic_code_hint":"Uses the reservation's active access code for the selected entrance. The source follows the property or building access settings.","code_type_property_fixed_code_hint":"This step will display the property's static access code.","code_type_group_fixed_code_hint":"This step will display the group's static access code.","code_type_step_fixed_code_hint":"This step will display its own saved access code.","code_preview_label":"Current Code","fixed_code_label":"Static Code","fixed_code_placeholder":"Enter code","video_url_label":"Video URL","video_url_placeholder":"YouTube or video link","access_displayed_label":"Display Access","access_displayed_description":"Show an access code or device control on this step.","image_label":"Image","image_upload":"Upload image","image_change":"Change image","image_upload_failed":"Failed to upload image","duplicate":"Duplicate instruction","no_title":"Untitled step","title_and_description_required":"Title and description are required","toast_created":"Instruction created","toast_updated":"Instruction updated","toast_deleted":"Instruction deleted","toast_duplicated":"Instruction duplicated","toast_reordered":"Instructions reordered","toast_imported":"{count, plural, one {# instruction} other {# instructions}} imported","import":"Import","import_title":"Import Instructions","import_description":"Copy instructions from another property. Translations and images will be duplicated.","import_search_placeholder":"Search properties…","import_preview_label":"Instructions to import","import_no_instructions":"This property has no instructions of this type.","import_confirm":"Import","untitled":"Untitled step","preview_check_in_title":"Check-in Preview","preview_check_out_title":"Check-out Preview","preview_show":"Preview","preview_hide":"Hide","preview_empty":"No instructions to preview yet","preview_group_label":"{count, plural, one {# group instruction} other {# group instructions}} shown first","preview_group_badge":"Group","merge_tokens_label":"Merge tokens:","merge_tokens_hint":"These are filled in automatically per property — guests see real values, not the token names.","preview_sample_note":"Merge tokens show sample values here; each guest sees their own.","var_copied":"Copied {token}","var_unset":"not set","apply_to_multiple":"Manage across properties","chip_access_code":"Access code","chip_tap_to_unlock":"Tap to unlock","chip_video":"Video","tap_to_unlock_label":"Enable Tap to Unlock","tap_to_unlock_description":"Show a one-tap unlock button for a smartlock on this step.","tap_to_unlock_no_device":"Add a smartlock to this property to enable Tap to Unlock.","preview":"Preview","access_device_label":"Access device","access_device_description":"The lock whose code this step shows, and the one Tap to Unlock opens.","access_device_code_description":"The lock whose code this step shows.","access_device_placeholder":"Select a lock","access_device_unit":"{name} (unit lock)","access_device_building":"{name} (building lock)","access_device_none":"No lock is available here yet. Add one to select an access device.","access_device_required":"Select the lock this step uses.","access_device_legacy_warning":"This step shows the reservation code but no lock is selected. Choose one and save so guests always see the right code.","access_device_unavailable_warning":"The lock this step points to is no longer available here. Choose another one and save, or guests will see no code.","card_access_device_unavailable":"This step points at a lock that isn't shared with this group. Guests at any property that doesn't have that lock will see no access code. Open the step to choose a shared lock.","card_access_device_unavailable_unlock":"This step's Tap to unlock points at a lock that isn't shared with this group. Guests at any property that doesn't have that lock won't be able to open anything. Open the step to choose a shared lock.","access_device_clear":"Clear selection"},"error":{"group_move_requires_org_wide_access":"Moving a property between groups requires organization-wide property access. Ask an administrator to move it.","portal_assign_outside_scope":"This guest portal is outside your property access. Choose one that serves a property you can see, or ask an administrator to assign it."},"toast":{"created":"Property created","updated":"Property updated","deleted":"Property archived","status_updated":"Status updated","linked":"Property linked","unlinked":"Property unlinked","group_created":"Property group created","group_updated":"Property group updated","group_deleted":"Property group deleted","cover_upload_failed":"Failed to upload cover photo","restored":"Property restored"},"department_category":{"cleans":"Housekeeping","maintenance":"Maintenance","inspections":"Inspections","guest_experience":"Guest Experience"},"history_drawer":{"title":"Status history","title_readiness":"Readiness status history","title_cleaning":"Cleaning status history","title_inspection":"Inspection status history","title_maintenance":"Maintenance status history","subtitle":"{propertyName}","all_columns":"All","column_cleaning":"Cleaning","column_inspection":"Inspection","column_readiness":"Readiness","column_maintenance":"Maintenance","column_skipped":"Skipped","column_unknown":"Unknown","transition":"{from} → {to}","transition_initial":"Set to {to}","transition_skipped":"Task completed without changing property status","note_label":"Reason:","note_label_inline":"Note","actor_system":"System","open_task":"Open task","empty_title":"No activity yet","empty_description":"Status changes on this property will appear here.","load_more":"Load more","loading_more":"Loading…","error_title":"Could not load history","error_description":"Try again in a moment.","error_retry":"Retry"},"quick_actions":{"summarize_setup":{"label":"Summarize setup","prompt":"Summarize this property — devices, integrations, recent activity, and what still needs configuration."},"check_devices":{"label":"Check devices","prompt":"Show me the device health for this property: any offline locks, low batteries, or stale codes."},"recent_reservations":{"label":"Recent reservations","prompt":"List the last 10 reservations on this property with check-in/out dates and status."},"open_issues":{"label":"Open issues","prompt":"What tasks or guest issues are currently open for this property?"}},"bulk_select":{"selected_count":"{count, plural, one {# property selected} other {# properties selected}}","select_all":"Select all ({count})","clear":"Clear","edit_selected":"Edit {count, plural, one {# property} other {# properties}}","select_group":"Select all in {name}","select_row":"Select {name}"},"setup_audit":{"title":"Setup audit","description":"What is configured on each property, read live.","search_placeholder":"Search properties","export":"Export CSV","empty":"No properties yet.","empty_filtered":"No properties match your search.","none":"None","summary_present":"Present","summary_missing":"Missing","code_hidden":"Hidden","code_hidden_hint":"A code is set. You do not have permission to view it.","show_code":"Show code","hide_code":"Hide code","column":{"name":"Property","portal":"Portal template","verification":"Verification steps","check_in":"Check-in steps","check_out":"Check-out steps","property_summary":"Property entry summary","building_summary":"Building entry summary","property_code":"Property code","building_code":"Building code","manuals":"Active manuals"},"portal_source":{"building":"From building","tag":"From tag","default":"Org default","none":"Unassigned"},"code_type":{"dynamic":"Dynamic","fixed":"Fixed","import":"Imported","disabled":"Disabled"}}},"property_status":{"declaration":{"cleaning_prompt":"Mark this unit as…","inspection_prompt":"Mark this inspection as…","cleaning_options":{"clean":"Clean","dirty":"Dirty"},"inspection_options":{"inspected":"Passed","failed_inspection":"Failed"},"note_label":"Note (optional)","note_placeholder_failed_inspection":"Optional — describe what failed","note_placeholder_dirty":"Optional — what's still dirty?","submit":"Confirm","validation":{"declaration_required":"Please declare a property status or skip before completing this task.","declaration_value_mismatch":"That value isn't valid for this column."}},"completion_dialog":{"title_cleaning":"Mark {propertyName} as…","title_inspection":"Mark {propertyName} as inspected?","task_name_prefix":"Completing task:","now_banner":"This updates {propertyName} right now. The property's status will change immediately, regardless of this task's due date.","pms_no_write_back":"Cleaning status will not reach this property's PMS — the connected provider does not accept it. The update still applies in SuiteOp.","now_banner_overdue":"This task was due {due}. Marking it {action} today updates {propertyName} as of now — not the original due date.","now_action_cleaning":"clean","now_action_inspection":"inspected","mode_label_declare":"Pick an outcome","mode_label_skip":"Skip property update","skip_explainer":"Skip if this task shouldn't change the property's current status (for example, when catching up on old tasks that have since been redone).","skip_note_label":"Reason (optional)","skip_note_placeholder":"Why are you skipping?","current_status_label":"Current:","confirm_button":"Complete task","skip_button":"Skip — complete without updating property status","skip_button_short":"Skip property update","skip_complete_button":"Complete task (skip)","back_to_declare":"Back","cancel_button":"Cancel"}},"refer":{"page_title":"Refer & Earn","rewards":{"title":"Rewards","explore_milestones":"Explore milestones","tabs":{"refer_and_earn":"Refer & Earn","milestones":"Milestones","new_payouts":"{count, plural, one {# new payout} other {# new payouts}}","new_milestones":"{count, plural, one {# new milestone} other {# new milestones}}"}},"hero":{"badge":"Partner Program","title":"Earn commissions by sharing SuiteOp","subtitle":"Join our referral program and earn recurring commissions for every customer you bring to SuiteOp."},"benefits":{"commission_title":"Recurring Commission","commission_description":"Earn a percentage of every payment your referrals make, month after month.","sharing_title":"Easy Sharing","sharing_description":"Get a unique referral link to share with your network. Track clicks and conversions in real time.","payouts_title":"Monthly Payouts","payouts_description":"Commissions are paid out monthly via PayPal once they reach the minimum threshold."},"how_it_works":{"title":"How it works","step_1_title":"Sign up","step_1_description":"Fill out the enrollment form to get your unique referral link.","step_2_title":"Share your link","step_2_description":"Share your referral link with property managers and hospitality teams.","step_3_title":"Earn commissions","step_3_description":"When someone signs up through your link and subscribes, you earn a commission on every payment."},"enrollment":{"title":"Join the program","subtitle":"Fill in your details to get started.","first_name":"First name","last_name":"Last name","email":"Email","email_hint":"Your account email. Enrollment is tied to this address.","paypal_email":"PayPal email","paypal_email_hint":"Optional. Used for commission payouts. You can add this later.","receive_notifications":"Receive email notifications about new referrals and commissions","submit":"Join program","errors":{"already_enrolled":"You're already enrolled in the affiliate program.","email_not_verified":"Verify your account email before joining the program, then try again.","wrong_region":"Affiliate enrollment is only available from your home region. Switch to an organization in your home region and try again.","not_found":"We couldn't find your account. Refresh the page and try again.","unexpected":"Something went wrong. Please try again."},"verification":{"resend":"Resend verification email","sending":"Sending…","sent":"Verification email sent. Check your inbox, then try joining again.","send_failed":"We couldn't send the verification email. Please try again in a moment."}},"dashboard":{"subtitle":"Track your referrals, commissions, and payouts.","visitors":"Visitors","leads":"Leads","conversions":"Conversions","total_earnings":"Total earnings"},"referral_link":{"title":"Your referral link","description":"Share this link with potential customers. You will earn a commission on every sale.","copy":"Copy link","link_copied":"Referral link copied to clipboard"},"payout":{"title":"Payout settings","description":"Update your PayPal email to receive commission payouts.","paypal_email":"PayPal email","save":"Save"},"table":{"title":"Commissions","date":"Date","customer":"Customer","amount":"Amount","status":"Status","status_pending":"Pending","status_due":"Due","status_paid":"Paid","empty_description":"No commissions yet. Share your referral link to start earning."},"error":{"retry":"Retry"}},"reservation":{"page_title":"Reservations","add_reservation":"Add Reservation","search_placeholder":"Search guests, emails, confirmations…","empty_message":"No reservations found","empty_description":"Reservations will appear here once guests book.","export":{"button":"Export CSV","loading":"Exporting…","error":"Export failed. Please try again.","too_many":"This export covers more than {cap} reservations. Narrow your filters and try again.","too_many_answers":"This export covers too many pre-check-in answers. Narrow your filters and try again."},"columns":{"guest":"Guest","property":"Property","beds":"Beds","baths":"Baths","check_in":"Check-in","check_out":"Check-out","nights":"Nights","status":"Status","check_in_state":"Check-in","portal":"Portal","access":"Access","verify":"Verify","occupancy":"Occupancy"},"portal":{"not_opened":"Not opened","opened_count":"Opened {count}x"},"property_unlinked":{"label":"Not linked","tooltip":"This booking's PMS listing has not been added as a property yet, so it has no guest portal, cleaning task or access code. Add the property from the PMS integration to fix it.","portal_warning":"No guest portal for this booking","portal_help":"This booking came from {provider}, but its listing has not been linked to a SuiteOp property yet — so there is no portal to open, and no cleaning task or access code either. Link the listing to a property, or create one from it, in the PMS integration.","portal_cta":"Link the listing","portal_cta_generic":"Open PMS integrations","provider_fallback":"your PMS"},"labels":{"eta":"ETA","etd":"ETD"},"access":{"active":"Active","fixed_code":"Static code","missing_fixed_code":"Missing fixed code","import":"Import","scheduled_installation":"Scheduled installation","auto_schedule_disabled":"Auto-schedule disabled","no_locks":"No locks","failed":"Failed","default":"Unknown","pending":"Pending","unknown":"Unknown","scheduled":"Scheduled","pending_deletion":"Pending deletion","no_access":"No access","failed_deletion":"Failed deletion","awaiting_code":"Awaiting code","expired":"Expired","installed":"Installed"},"occupancy_method":{"dashboard":"Dashboard","guest_portal":"Guest Portal","smart_lock":"Smart Lock","remote_control":"Remote Control","workflow_action":"Agent Action"},"filter":{"status":"Reservation status","occupancy":"Occupancy","access":"Access","verification":"Verification","blacklisted_only":"Blacklisted only","property":"Property","group":"Group","source":"Source","check_in_date":"Check-in Date","check_out_date":"Check-out Date","booked_date":"Booked Date","stay_date":"Stay Date","date_type":"Date Type","date":"Date"},"grouping":{"access":"Access","booking_source":"Source","label":"Group by","no_booking_source":"No source","no_occupancy":"No occupancy","no_property":"No property","no_property_group":"No property group","no_status":"No status","no_verification":"No verification","none":"No grouping","occupancy":"Occupancy","partial_count":"{shown} of {total}","property":"Property","property_group":"Property group","reservation_status":"Reservation status","verification":"Verification"},"shared":{"not_found":"Reservation not found","guest_info":"Guest Information","name_label":"Name","email_label":"Email","phone_label":"Phone","confirmation_code_label":"Confirmation Code","status_label":"Status","code_status_label":"Code Status","check_in_label":"Check-in","check_out_label":"Check-out","nights_label":"Nights","source_label":"Source","property_label":"Property","check_in_guest":"Check In","check_out_guest":"Check Out"},"create":{"title":"New Reservation","description":"Create a new reservation manually or import from a PMS.","tab_manual":"Manual","tab_import":"Import from PMS","property_section":"Property","property_label":"Property","property_placeholder":"Select property…","guest_info_section":"Guest Info","first_name_label":"First Name","last_name_label":"Last Name","email_label":"Email","phone_label":"Phone","guest_count_label":"Guest Count","stay_details_section":"Stay Details","check_in_label":"Check-in Date","check_out_label":"Check-out Date","check_in_placeholder":"Check-in…","check_out_placeholder":"Check-out…","status_label":"Status","status_placeholder":"Select status…","source_label":"Source","source_placeholder":"Select a source...","confirmation_code_label":"Confirmation Code","confirmation_code_hint":"Auto-generated if left empty","submit":"Create Reservation","submitting":"Creating…","import_search_label":"Search PMS Reservations","import_search_placeholder":"Search by name, confirmation code...","import_searching":"Searching across PMS accounts...","import_no_results":"No reservations found","import_no_accounts":"No PMS accounts connected. Connect a PMS in Settings to import reservations.","import_select_property":"Select property to import into","import_button":"Import Reservation","import_success":"Reservation imported successfully"},"detail":{"back":"Back to Reservations","not_found_description":"This reservation may have been removed or you don't have access.","confirmation_prefix":"Confirmation: {code}","stay_details":"Stay Details","first_name_label":"First Name","last_name_label":"Last Name","guest_count_label":"Guest Count"},"panel":{"title":"Reservation details","title_for_guest":"Reservation details — {name}","scroll_to_top":"Scroll to top","view_full_details":"View full details","guest_count_label":"Guests","returning_guest":"Returning guest","open_in_pms":"Open in {pms}","edit":"Change","more_actions":"More actions","ask_opal":"Ask Opal about this reservation","refresh_from_pms":"Refresh","delete_reservation":"Delete reservation","delete_title":"Delete this reservation","delete_description":"You're about to permanently delete this reservation. This action cannot be undone and all reservation details will be lost.","delete_confirm":"Delete reservation","cancel_reservation":"Cancel reservation","cancel_title":"Cancel this reservation","cancel_description":"The reservation is kept as cancelled history. If the guest never checked in, the stay's scheduled tasks are cancelled; if they had already checked in, the cleaning is moved to now.","cancel_confirm":"Cancel reservation","confirmation_code":"Confirmation code","confirmation_code_unavailable":"Not available","copied_to_clipboard":"Copied to clipboard","na":"N/A","check_in_state_label":"Check-in State","mark_check_in":"Mark as checked in","mark_check_out":"Mark as checked out","reset":"Reset","eta_label":"ETA — {time}","etd_label":"ETD — {time}","stay_time_adjusted":"Adjusted — scheduled {scheduled}","stay_time_reset":"Reset to PMS time","property_section":"Property","property_not_linked":"Property not linked to SuiteOp","property_disabled":"Disabled","property_details":"Property details","group_label":"Group","suite_verify":"SuiteVerify","quick_nav_verify":"Verify","quick_nav_messages":"Messages","quick_nav_access":"Access","quick_nav_devices":"Connect","quick_nav_pay":"Pay","quick_nav_tasks":"Tasks","verification_status_label":"Verification Status","verification_empty":"No verification data for this reservation.","verification_load_error":"We couldn't load the verification data. Try again.","suite_portal":"SuitePortal","portal_loads_label":"Portal Loads","portal_not_opened":"Not opened","portal_empty":"No portal activity for this reservation.","pms_code_match":"Code & PMS variable match","pms_code_mismatch":"Code is different from PMS variable ({pmsCode})","smart_access":"Smart Access","access_scope_unit":"Unit access","access_scope_building":"Building access","auto_schedule_label":"Auto-schedule","auto_schedule_enabled":"Enabled","auto_schedule_disabled":"Disabled","auto_schedule_disabled_by":"Disabled by {name}","code_label":"Code","code_not_available":"Code not available yet","code_start":"From","code_end":"To","code_unknown_duration":"Unknown duration","code_action_unidentified":"This code cannot be identified from here, so it cannot be retried on this screen. Open the lock from Devices to retry it.","code_revoke_on_device":"Codes are removed from the lock's page under Devices, which shows first which other stays the removal would affect.","access_empty":"No access codes for this reservation.","access_configuration_required":"Access code setup required","access_configuration_unit_missing":"The property uses a static code, but no unit code is configured.","access_configuration_building_missing":"The building uses a static code, but no building code is configured.","access_configuration_action":"Configure property access","suite_connect":"SuiteConnect","device_online":"Online","device_offline":"Offline","device_battery":"Battery: {level}%","devices_empty":"No connected devices for this property.","upsell_fees":"Upsell & Fees","subtotal_label":"Subtotal","charge_paid":"Paid","charge_quantity":"Qty: {quantity}","upsell_fees_empty":"No upsell or fees to display for this reservation.","tasks":"Tasks","task_due":"Due {date}","task_no_due_date":"No due date","tasks_empty":"No tasks to display for this reservation.","workflow_actions":"Agent Actions","workflow_show_filtered":"Show filtered","workflow_hide_filtered":"Hide filtered","workflow_show_more":"Show more","workflow_show_less":"Show less","workflow_empty":"No actions to display for this reservation.","status_history":"Status history","status_changed_by":"by {name}","status_changed_system":"System","reviews_label":"Reviews","reviews_avg_rating":"Average: {rating}","reviews_empty":"No reviews for this reservation.","verification_step_completed":"Completed","verification_step_pending":"Pending","verification_step_in_progress":"In progress","verification_step_waived":"Waived","verification_step_declined":"Declined","verification_step_failed":"Failed","verification_step_skipped":"Skipped","verification_step_not_started":"Not Started","verification_blacklisted":"Blacklisted","verification_portal_complete":"Guest portal complete","waive_step":"Waive requirement","waive":"Waive","reset_step":"Reset step","reset_screen_protect_title":"Run Screen & Protect again?","reset_screen_protect_description":"This clears the current screening result and starts a new paid screening attempt. The reservation’s verification decision will stay unchanged.","reset_screen_protect_confirm":"Run again","reset_step_declined_title":"Reset step on a declined verification?","reset_step_declined_description":"This verification is currently declined. Keep it declined and clear only this step, or reopen the verification so the guest can redo it.","reset_step_keep_declined":"Keep declined","reset_step_reopen":"Reopen verification","reset_step_review_title":"Reopen the step on a reservation that needs review?","reset_step_review_description":"This verification currently needs review. Keep it in review and reset only this step, or reopen the verification so the guest can redo it.","reset_step_keep_review":"Keep in Needs Review","reset_step_has_payment_title":"This step still has a live payment","reset_step_has_payment_description":"This step's payment is still active, so resetting it would show the guest a bill for money you already hold. Refund the charge — or release the authorization hold — from the payment details, then reset the step.","reset_step_has_payment_description_in_flight":"This step's payment is still being confirmed with the provider, so there is nothing to refund or release yet. If it fails, the step becomes resettable; if it succeeds, refund the charge — or release the authorization hold — first. A payment that never resolves needs support to reconcile it.","reset_step_has_payment_description_disputed":"This step's payment is disputed, so it cannot be refunded or released here — and the step cannot be reset while the dispute stands. Resolve the chargeback with the payment provider, then contact support to reopen the step.","reset_step_has_payment_view_payment":"View payment","reopen_verification_title":"Reopen verification?","reopen_verification_description":"This withdraws the current decision. The guest's progress is kept, and the status will recompute from the completed steps.","reopen_verification_confirm":"Reopen","add_to_blacklist":"Add to blacklist","remove_blacklist":"Remove from blacklist","add_blacklist_title":"Add to blacklist","add_blacklist_description":"Are you sure you want to blacklist {name}? This will flag the guest across all reservations.","add_blacklist_confirm":"Blacklist guest","remove_blacklist_title":"Remove from blacklist","remove_blacklist_description":"Remove {name} from the blacklist?","remove_blacklist_confirm":"Remove from blacklist","reset_check_in_title":"Reset check-in state","reset_check_in_description":"Reset {name}'s check-in state back to not checked in?","reset_check_in_confirm":"Reset","disable_auto_schedule_title":"Disable auto-schedule","disable_auto_schedule_description":"Access codes will no longer be automatically scheduled for this reservation. You can re-enable auto-schedule at any time.","disable_auto_schedule_confirm":"Disable","enable_auto_schedule_title":"Enable auto-schedule","enable_auto_schedule_description":"Access codes will be automatically scheduled for this reservation based on check-in and check-out times.","enable_auto_schedule_confirm":"Enable","smart_access_disabled":"Disabled","smart_access_fixed_code":"Static code","smart_access_import":"Import","guest_count":"{count, plural, one {# guest} other {# guests}}","nights_count":"{count, plural, one {# night} other {# nights}}","reviews_arrival_experience":"General arrival experience","reviews_overall":"Overall","reviews_cleanliness_label":"Cleanliness","reviews_photo_alt":"Guest photo {index}","reviews_dialog_title":"Guest reviews","view_all_reviews":"View all reviews","portal_copy_link":"Copy link","portal_open":"Guest portal","charges_and_payments":"Charges & Payments","payments":"Payments","direct_payment":"Direct Payment","payment_captured":"Captured","payment_refunded":"Refunded","charges_empty":"No charges or payments for this reservation.","create_task":"Create task","eta_edit":"Edit ETA","etd_edit":"Edit ETD","other_guests":"Other guests","other_guests_empty":"No additional guests registered.","other_guests_count":"{count, plural, one {# other guest} other {# other guests}}","other_guest_child":"Child","question_flagged_for_review":"Answers flagged — manual review required","question_flagged_badge":"Flagged","result_restricted":"Additional details are restricted","other_guest_id_on_file":"ID on file","verification_approved_by":"Approved by {name}","verification_approved_at":"Approved {date}","verification_status_changed_by":"Status last changed by {name} on {date}","verification_status_changed_at":"Status last changed on {date}","verification_step_completed_at":"Completed {date}","verification_step_signed_by":"Signed by {name}","update_check_in_time":"Update Check-in Time","update_checkin_datetime":"Update Check-in Date & Time","update_check_out_time":"Update Check-out Time","update_checkout_datetime":"Update Check-out Date & Time","update_time_description":"This will update the scheduled time for this reservation.","update_time_current":"Current","update_time_new":"New time","update_time_confirm":"Update Time","truvi_section_title":"Screen & Protect","truvi_not_configured":"Truvi screening not configured for this property","truvi_not_screened":"Guest has not been screened yet","truvi_skipped":"Screening skipped — guest email not available","truvi_status_approved":"Approved","truvi_status_flagged":"Flagged","truvi_status_rejected":"Rejected","truvi_status_pending":"Screening in progress…","truvi_status_failed":"Failed","truvi_status_cancelled":"Cancelled","truvi_status_unrunnable":"Could not run","truvi_status_unresolved":"Outcome unconfirmed","truvi_unresolved_attempt":"This screening was sent to Truvi but never came back with a confirmed result, so it may already have been charged. Nothing will re-screen automatically. Select “Reset step” on the Screen & Protect step to run a new paid screening.","truvi_unresolved_attempt_nested":"This screening was sent to Truvi but never came back with a confirmed result, so it may already have been charged. Nothing will re-screen automatically. Select “Reset step” on the {step} step to run a new paid screening.","truvi_flagged_reason":"Reason: {reason}","truvi_unrunnable_intro":"Screening could not run. Fix the details below, then select “Re-screen”.","truvi_unrunnable_platform":"Screening is temporarily unavailable on our side. Nothing on this reservation needs changing — select “Re-screen” once we’ve fixed it.","truvi_unrunnable_waiver_declined":"Screening could not run — the guest declined the damage waiver. Nothing on this reservation needs changing; select “Re-screen” to screen this guest anyway.","truvi_field":{"company_name":"Organization billing name","company_email":"Organization owner email","property_name":"Property name","property_street":"Property street address","property_city":"Property city","property_country":"Property country","property_postcode":"Property postal code","guest_first_name":"Guest first name","guest_last_name":"Guest last name","guest_email":"Guest email","check_in":"Check-in date","check_out":"Check-out date","other":"Another required detail"},"truvi_rescreen":"Re-screen","truvi_cancel":"Cancel screening","truvi_verification_id":"Verification ID","truvi_open_resolution":"Open in Truvi","truvi_screen_now":"Screen Now","truvi_auto_screening":"Screening will run automatically once the guest completes verification.","truvi_auto_screening_waiver_linked":"Screening will run automatically once the guest purchases the damage waiver.","snp_learn_more":"Screen & Protect · Learn more","snp_title":"Screen & Protect","snp_body":"Automatic guest screening + damage protection — starting at {price} per booking.","snp_book_time":"Book time with us","snp_set_up":"Set up in Verify","refresh_in_progress":"Reservation refresh in progress…","unknown_device":"Unknown device","waived_by":"by {name}","declined_by_guest":"by guest","reset_step_refund_pending":"A refund on this step is still processing. Reset the step once the refund settles.","signed_by_label":"Signed by:","signature_alt":"Signature","step_type_main":"Main step","step_type_your_details":"Your Details","step_type_identity_check":"Identity Check","step_type_agreement":"Agreement","step_type_other_guests":"Other Guests","step_type_additional_questions":"Additional Questions","step_type_damage_deposit":"Protection — Waiver & Deposit","step_type_mandatory_fee":"Mandatory Fee","step_type_background_check":"Background Check","step_type_authority_reporting":"Guest Registration","step_type_screen_and_protect":"Screen & Protect","step_type_document_upload":"Document Upload","document_upload_no_uploads":"No uploads yet.","document_upload_unparseable":"Could not display this upload.","document_upload_image_alt":"Document upload, attempt {n}","document_upload_manual_review":"Manual review required","document_upload_purged":"Files were deleted after the 30-day retention period.","document_upload_file_unavailable":"File no longer available.","document_upload_attempt_n":"Attempt {n} of {total}","document_upload_uploaded_label":"Uploaded","document_upload_open_file":"Open file ({mime})","document_upload_loading_file":"Loading file…","document_upload_ai_verdict":"AI verdict","document_upload_ai_outcome_pass":"Pass","document_upload_ai_outcome_fail":"Fail","document_upload_ai_outcome_unable_to_evaluate":"Unable to evaluate","document_upload_ai_outcome_infra_error":"AI unavailable","document_upload_ai_confidence_low":"low confidence","document_upload_ai_confidence_medium":"medium confidence","document_upload_ai_confidence_high":"high confidence","sex_offender_check":"Sex Offender Check","sex_offender_price_per_check":"{price} per check","sex_offender_running":"Running…","sex_offender_run_check":"Run Check","sex_offender_cost":"$0.25 per check","sex_offender_run":"Run check","sex_offender_rerun":"Run again","sex_offender_confirm_title":"Run sex offender check?","sex_offender_confirm_description":"This check costs $0.25 and will update the existing result.","extracted_id_data":"Extracted ID Data","identity_result_label":"Result","identity_outcome_passed":"Passed","identity_outcome_failed":"Failed","identity_name_match":"Name match","identity_name_mismatch":"Name mismatch","identity_face_mismatch":"Face mismatch","identity_face_duplicate":"Selfie copies the ID","identity_face_match_unavailable":"Face match unavailable","identity_field_first_name":"First name","identity_field_last_name":"Last name","identity_field_middle_name":"Middle name","identity_field_dob":"Date of birth","identity_field_id_number":"ID number","identity_field_id_type":"ID type","identity_field_expiry":"Expires","identity_field_address":"Address","identity_field_state":"State / province","identity_field_country":"Country","identity_check_official_label":"Government-issued ID","identity_check_official_pass":"Document recognized as an official government ID.","identity_check_official_fail":"Document may not be a valid government-issued ID.","identity_check_face_label":"Photo detected","identity_check_face_pass":"A face photo was found on the document.","identity_check_face_fail":"No face photo detected — the document may be incomplete.","identity_check_quality_label":"Image quality","identity_check_quality_pass":"Image quality is sufficient for data extraction.","identity_check_quality_fail":"Image is too blurry for reliable extraction.","identity_check_details_label":"ID details readable","identity_check_details_pass":"Date of birth and document number were read from the document.","identity_check_details_fail":"The date of birth or document number couldn't be read from the document.","identity_check_expiry_label":"ID in date","identity_check_expiry_pass":"The document had not expired.","identity_check_expiry_fail":"The document has expired.","identity_check_name_label":"Name matches booking","identity_check_name_pass":"The name on the ID matches the reservation.","identity_check_name_fail":"The name on the ID doesn't match the reservation.","identity_check_mrz_fail":"The machine-readable zone didn't validate — a checksum failed.","identity_selfie_capture_live":"Live capture","identity_selfie_capture_upload":"Uploaded file","identity_id_back_not_provided":"Not provided","identity_check_mrz_label":"Machine-readable zone (MRZ)","identity_check_mrz_pass":"MRZ code detected and read from the document.","identity_check_mrz_unreadable":"MRZ detected, but it couldn't be read.","identity_check_barcode_label":"PDF417 barcode","identity_check_barcode_pass":"The barcode on the back of the ID was read.","identity_check_barcode_fail":"Barcode detected, but it couldn't be read.","document_checks":"Document Checks","selfie_checks":"Selfie Checks","identity_check_face_match_label":"Face match","identity_check_face_match_pass":"Selfie matches the document portrait.","identity_check_face_match_fail":"Selfie does not provide an acceptable independent match to the document portrait.","identity_check_unavailable":"This check couldn't run.","identity_check_skipped":"Not checked — switched off for this step.","operator_findings":"Your findings","operator_findings_note":"Anything the checks above did not cover. Staff only — the guest never sees this.","operator_findings_placeholder":"What did you notice?","operator_findings_author":"Last updated by {name} on {date}","operator_findings_marker":"Staff note","identity_findings_title":"ID check findings","identity_findings_attention":"Needs attention","identity_findings_clear":"No issues found","identity_findings_unspecified":"This check needs review, but no specific finding is shown here","identity_risk_factor_document_not_official":"The document doesn't appear to be an official government-issued ID","identity_risk_factor_high_risk":"The document scored poorly on the automated checks","identity_risk_factor_mrz_invalid":"The machine-readable zone on the ID couldn't be validated","identity_risk_factor_barcode_unreadable":"The barcode on the ID couldn't be read","identity_risk_factor_machine_readable_invalid":"The machine-readable part of the ID (barcode or MRZ) couldn't be read","identity_risk_factor_guest_is_local":"The address on the ID is near the property","identity_risk_factor_guest_is_local_locality":"The address on the ID is near the property (measured from the city on the ID, not the street)","identity_risk_factor_name_mismatch":"The name on the ID doesn't match the reservation","identity_risk_factor_name_unavailable":"The reservation had no guest name to compare the ID against","identity_risk_factor_name_unconfirmed":"The ID name couldn't be automatically confirmed against the reservation name (different scripts or an ambiguous match)","identity_risk_factor_face_mismatch":"The selfie doesn't match the ID photo","identity_risk_factor_face_duplicate":"The selfie looks like a photo of the ID, not a live person","identity_risk_factor_checks_unavailable":"Some checks couldn't run — this result is incomplete","identity_risk_factor_no_face_on_document":"No photo of the holder was detected on the document","identity_risk_factor_image_too_blurry":"The photo of the document is too blurry to read reliably","identity_risk_factor_unrecognized_id_type":"The document isn't a recognized type of ID","identity_risk_factor_missing_name_fields":"The name couldn't be read from the document","identity_risk_factor_missing_birth_date":"The date of birth couldn't be read from the document","identity_risk_factor_missing_document_number":"The document number couldn't be read from the document","identity_risk_factor_document_expired":"The document has expired","identity_risk_factor_retake_limit":"The guest used all available ID attempts and the last one was sent for review","criminal_record":"Criminal Record","global_watchlist":"Global Watchlist","ssn_verified":"SSN Verified","face_match":"Face Match","id_verification":"ID Verification","status_label":"Status","gov_status_label":"Government","gov_status_accepted":"Accepted","gov_status_rejected":"Rejected","gov_lot_code_label":"Reference:","clear":"Clear","flagged":"Flagged","match_count":"{count, plural, one {# match} other {# matches}}","email_label":"Email","nationality_label":"Nationality","dob_label":"DOB","sex_label":"Sex","document_label":"Document","address_label":"Address","verification_step_needs_review":"Needs Review","damage_deposit_type":"Protection Type","damage_waiver":"Damage Waiver","damage_security_deposit":"Security Deposit","damage_deposit_amount":"Amount","damage_payment_details":"Payment Details","damage_card":"Card","damage_amount_captured":"Captured","damage_amount_refunded":"Refunded","damage_view_payment":"View Payment Details","damage_view_receipt":"View Receipt","damage_payment_processing":"Payment record is still being processed.","damage_capture_button":"Capture Payment","damage_release_button":"Release Hold","damage_refund_button":"Refund Payment","damage_capture_success":"Payment captured successfully.","damage_release_success":"Authorization hold released.","damage_refund_success":"Payment refunded successfully.","damage_capture_confirm_title":"Capture Payment","damage_capture_confirm_description":"This will capture {amount} from the guest's card. This action cannot be undone.","damage_release_confirm_title":"Release Hold","damage_release_confirm_description":"This will release the authorization hold on the guest's card. The funds will no longer be reserved.","damage_refund_confirm_title":"Refund Payment","damage_refund_confirm_description":"This will refund {amount} to the guest's card. This action cannot be undone.","add_task":"Add task","upsell_and_fees":"Payments","payment_type":{"waiver":"Damage waiver","deposit":"Security deposit","charge":"Charge","request":"Request","booking":"Booking","external":"External","mandatory_fee":"Mandatory fee"},"upsell_and_fees_empty":"No upsell or fees to display for this reservation","add_service_fee":"Add Service Fee","no_guest":"No guest","copy_value":"Copy {label}","refresh_complete":"Refreshed from PMS","refresh_failed":"Couldn't refresh from PMS. Please try again.","verification_reason_label":"Reason","verification_reason_placeholder":"Why are you sending this verification back?","verification_decline_reason_title":"Decline verification","verification_decline_reason_description":"Tell the guest what they need to fix. The reason is shown in the audit trail and surfaced to the guest portal.","verification_review_reason_title":"Send back to review","verification_review_reason_description":"Add a note explaining what should change before the verification can be re-submitted.","verification_reason_submit":"Save","verification_guest_message_label":"Guest-facing message","verification_guest_message_help":"Drafted for the guest — edit before saving, or leave empty to show only the generic notice.","verification_guest_preview_label":"What the guest will see","verification_guest_message_too_long":"That's too long — trim it to 1000 characters or fewer before saving.","draft_with_ai":"Draft with AI","copy_failed":"Couldn't copy to clipboard.","messages":"Messages","messages_loading":"Loading conversation…","messages_empty":"No conversation with this guest yet.","messages_empty_send_hint":"Start the conversation from here. The thread will sync with the inbox.","messages_first_placeholder":"Write a message to the guest…","messages_send":"Send","messages_thread_label":"Conversation","messages_open_in_inbox":"Open in inbox","previous_submissions":"Previous submissions ({count})","submission_delete":"Delete","submission_delete_title":"Delete this submission?","submission_delete_description":"This permanently erases the guest's submitted data from this history entry (GDPR erasure). A record of who deleted it and when will remain. This cannot be undone.","submission_delete_confirm":"Delete permanently","submission_deleted_by":"Entry deleted by {name} · {date}","submission_deleted_at":"Entry deleted · {date}","edit_reservation":"Edit reservation","check_in_status_label":"Check-in status","step_details_toggle":"Show details for {step}","agreement_signers":"Signers","download_completed_contract":"Download completed contract","downloading_completed_contract":"Downloading contract…","download_completed_contract_success":"Completed contract downloaded","download_completed_contract_failed":"Couldn't download the completed contract. Please try again.","signer_status_signed":"Signed","signer_status_pending":"Awaiting","signer_status_minor":"Minor","step_missing_payment_account":"No payment account — this step charges but nothing can collect the payment.","add_steps":"Add steps","add_steps_empty":"No step types configured","add_steps_all_attached":"Every step is already on this reservation","add_step_added":"Step added","add_step_added_reopened":"Step added — verification reopened","add_step_failed":"Couldn't add the step. Please try again.","steps_progress":"Steps ({done} out of {total})","add_step_duplicate":"This step is already on the reservation.","detach_step":"Remove","detach_title":"Remove this step from the reservation?","detach_description":"“{step}” was added to this reservation only. Removing it deletes it from this stay's flow, and the guest will no longer be asked for it. The property's configured steps are unaffected.","detach_confirm":"Remove step","detach_step_removed":"Step removed from this reservation","detach_failed":"Couldn't remove the step. Please try again.","blacklist_check_in_title":"Check in a flagged guest?","blacklist_check_in_description":"{name} matches an entry on your organization's blacklist. Checking them in stops automatic access revocation for this reservation — access will have to be removed manually. Continue?","blacklist_check_in_confirm":"Check in anyway","review_check_in_title":"Check in a guest under review?","review_check_in_description":"{name}'s reservation requires administrator review. Checking them in is an explicit decision to admit the guest. Continue?","review_check_in_confirm":"Confirm check-in","pms_read_only_note":"Edits here won't reach {provider}","pms_read_only_detail":"Reservation updates still come in from {provider}. This connection just doesn't send your changes back the other way.","messages_channel":"Channel","tasks_cancelled_count":"{count, plural, one {# cancelled task hidden} other {# cancelled tasks hidden}}","id_check_details_changed":"Details changed after the ID check","id_check_details_changed_fields":"Changed since the check: {fields}","id_check_field_firstName":"First name","id_check_field_lastName":"Last name","id_check_field_middleName":"Middle name","id_check_field_dob":"Date of birth","id_check_field_documentNumber":"Document number","id_check_field_documentType":"Document type","id_check_field_issuingCountry":"Issuing country","id_check_details_changed_count":"{count, plural, one {# detail changed since the check} other {# details changed since the check}}"},"verification_sheet":{"label_id_front":"ID Front","label_id_back":"ID Back","label_selfie":"Selfie"},"guest_report":{"title":"Guest Verification Report","reservation_ref":"Reservation {code}","generated_by":"Generated by {name} · {date}","generated_via_suiteop":"Generated via SuiteOp","issued_by":"Issued by {org}","footer_page_of":"Page {page} of {total}","document_unavailable":"Document could not be loaded","pdf_pages_truncated":"Showing {shown} of {total} pages","label_verification_status":"Verification status","label_verified_at":"Verified","label_approved_at":"Approved","label_approved_by":"Approved by","stay_rung_recorded":"Recorded — what happened","stay_rung_scheduled":"Scheduled — agreed, not recorded","stay_rung_booked":"From the booking","label_agreed":"Agreed:","blacklist_title":"Guest blacklisted","label_blacklisted_by":"Blacklisted by","label_blacklisted_at":"Blacklisted on","section_guest_booking":"Guest & booking","label_booking_name":"Name on booking","label_verified_name":"Verified name","label_email":"Email","label_phone":"Phone","label_verified_email":"Verified email","label_verified_phone":"Verified phone","label_channel":"Booking channel","label_portal":"Guest portal","section_property_unit":"Property & unit","label_address":"Address","label_unit":"Unit","label_property_group":"Property group","label_timezone":"Time zone","label_smart_locks":"Smart locks","section_verification":"Verification timeline","label_required":"Required","label_optional":"Optional","no_verification_steps":"No verification steps were configured for this reservation.","section_identity_documents":"Identity documents","timezone_disclosure":"All times in this report are shown in the property's local time ({zone}).","timezone_disclosure_unknown":"This property has no time zone set — all times in this report are shown in {zone}, the time zone of the device that generated it.","section_access":"Access & door entries","label_codes_issued":"Access codes issued","label_door_entries":"Door entries","no_codes_issued":"No access codes were issued for this reservation.","shared_code_note":"{mark} This access code is one that can be held by more than one stay at this property (a shared or building code), so an entry recorded against it cannot be attributed to this guest alone.","pre_attribution_note":"Door entries recorded before SuiteOp began attributing access at the moment it happens may be missing here if this stay's codes were later revoked. Their absence is not evidence that they did not happen.","masked_code_note":"Door codes are shown with only their final digits; the full code is not printed.","entries_truncated":"The complete door-entry record was capped at {count} entries; further records exist and are not included here.","entries_shortened":"Only the most recent {count} door entries are shown; older records exist and are not included here.","entry_limit_label":"Door entries on the report","entry_limit_recent":"Most recent {count}","entry_limit_all":"All (up to {count})","tasks_truncated":"Showing {count} of {total} completed tasks; the remainder are not included in this report.","task_description_unavailable":"This task has a written description that is stored separately and could not be included here. It is available in SuiteOp.","payments_post_booking_note":"These are the payments SuiteOp processed: booking payments taken through SuiteOp's own booking engine, plus add-ons, deposits, waivers and fees taken after the reservation was made. Charges settled through the property management system are not shown here.","payment_captured_of_authorized":"Captured: {captured} of {authorized} authorised.","payment_capture_unrecorded":"The captured total was not recorded for this payment, so the figure shown is the amount authorised. Less than that may have been collected.","signature_unavailable":"The stored signature image could not be loaded, so it is not reproduced here. The signature record above still stands.","payment_type_upsell":"Upsell (post-booking add-on)","section_tasks":"Work completed on this stay","section_nicknamed":"{nickname} ({label})","scope_title":"Scope of this export","scope_included":"Included","scope_removed":"You removed","scope_withheld":"Your role can't view","scope_hint":"This summary is not printed. The PDF does not list the sections left out of it.","tasks_scope_note":"Completed tasks linked to this reservation — maintenance jobs, reported issues, cleans and inspections. Tasks still open or cancelled are not listed.","no_tasks_completed":"No tasks linked to this reservation were completed.","task_untitled":"Untitled task","task_completed_at":"Completed","task_completed_by":"by","download":"Download PDF","file_name_suffix":"Reservation Audit Report","sections_label":"Sections to include","sections_all":"All sections","sections_excluded":"{count} excluded","no_entries_recorded":"No door entries were recorded for this reservation.","entry_outcome_success":"Opened","entry_outcome_denied":"Denied","entry_outcome_invalid":"Invalid code","section_agreements":"Agreements & signatures","label_esign_provider":"E-sign provider","label_document_status":"Document status","label_signed_at":"Signed","section_flagged_answers":"Flagged answers","label_flagged_at":"Flagged","section_payments":"Payments processed by SuiteOp","label_billed_to":"Billed to","export_action":"Guest report","print":"Print","preparing":"Preparing…","some_assets_failed":"Some images could not be loaded in time and may print blank.","some_assets_failed_retry":"Reopen the report to try again.","data_incomplete_title":"Incomplete report","data_incomplete_body":"The following information could not be loaded and is missing from this report. Its absence below is not evidence that it did not happen.","source_reservation":"Reservation and guest details","source_verification":"Verification, identity documents and agreements","source_org":"Organization details","source_devices":"Smart locks","source_payments":"Payments","source_other_guests":"Additional guests","source_access_entries":"Access codes","source_tasks":"Tasks","source_branding":"Report branding","source_entry_log":"Door entries","section_safety_review":"Safety review details","section_smart_locks":"Smart locks"},"verification":{"step_type_missing":"This verification step is misconfigured — it has no step type. Fix the flow in Verify settings.","step_has_payment":"This step's payment is still active. Refund the charge or release the authorization hold before resetting the step."},"toast":{"created":"Reservation created","updated":"Reservation updated","checked_in":"Guest checked in","checked_out":"Guest checked out","deleted":"Reservation deleted","eta_updated":"ETA updated","etd_updated":"ETD updated","submission_deleted":"Submission deleted","cancelled":"Reservation cancelled","stay_time_reset":"Stay time reset to the PMS schedule"},"charge_detail":{"title":"Charge Details","title_for_charge":"Charge Details — {name}","description":"View charge information, payment details, and manage approval workflow.","details":"Details","category":"Category","price":"Price","quantity":"Quantity","origin":"Origin","created":"Created","guest_notes":"Guest Notes","guest_selections":"Guest selections","payment_details":"Payment Details","card":"Card","amount_authorized":"Amount Authorized","amount_captured":"Amount Captured","amount_refunded":"Amount Refunded","payment_status":"Payment Status","view_in_stripe":"View in Stripe","payment_actions":"Payment Actions","capture":"Capture Payment","capture_description":"Enter the amount to capture from the authorized hold.","capture_amount":"Capture Amount","max_amount":"Maximum: {amount}","capture_success":"Payment captured successfully","refund":"Refund Payment","refund_description":"Are you sure you want to refund this payment? This action cannot be undone.","refund_success":"Payment refunded successfully","release":"Release Hold","release_description":"Are you sure you want to release this payment hold? The authorized amount will be returned to the guest.","release_success":"Payment hold released successfully","service_fee":"Service Fee","status_section":"Status","stage_requested":"Requested","stage_pending":"Pending","stage_viewed":"Viewed","stage_approved":"Approved","stage_awaiting_payment":"Awaiting payment","stage_payment_submitted":"Payment submitted","stage_paid":"Paid","stage_delivered":"Delivered","stage_denied":"Denied","stage_refunded":"Refunded","current_state_label":"Current state","action_reopen":"Re-open","auto_assigned":"Status automatically assigned by SuiteOp","stage_updated":"Charge status updated","capture_prompt_title":"Capture Payment","capture_prompt":"Payment has not been captured yet. Do you want to process payment now?","upsell_workflow":"Upsell Workflow","update_status":"Update status","jump_to_stage":"Jump to stage","payment_uncaptured":"Uncaptured — {amount} held","payment_label":"Payment: {status}","invalid_capture_amount":"Please enter a valid capture amount","capture_exceeds_authorized":"Capture amount exceeds the authorized amount","header_amount_label":"Amount","qty_x_unit":"{qty} × {unit}","amount_outstanding":"Outstanding","payment_no_card":"Card on file","no_payment_title":"No payment yet","no_payment_subtitle":"Payment details will appear here once the guest pays the {amount} for this charge.","timeline_section":"Timeline","internal_notes":"Internal notes","internal_notes_placeholder":"Add a note visible only to your team…","unsaved_changes":"Unsaved","settings_title":"Charge settings","notes_save":"Save note","notes_saving":"Saving…","notes_cancel":"Discard","notes_saved":"Note saved","charge_update_conflict":"This charge was changed elsewhere. We loaded the latest version and kept your unsaved edits — review and save again.","unavailable_title":"This charge isn't available","unavailable_description":"It may have been removed, or you may not have access to it.","charge_unavailable_save":"This charge isn't available anymore, so your changes weren't saved.","refund_mode_full":"Full refund","refund_mode_partial":"Partial refund","refund_max_hint":"Up to {max} refundable.","refund_invalid_amount":"Enter an amount between $0.01 and {max}.","refund_confirm_full":"Refund {amount}","refund_confirm_partial":"Refund {amount}","refund_already_refunded":"{amount} already refunded on this charge.","action_claim_damage":"Claim damage","claim_damage":"Claim damage","claim_damage_description_hold":"Keep part of the deposit for damages. The rest of the hold is released back to the guest.","claim_damage_description_charged":"Keep part of the deposit for damages. The rest is refunded to the guest.","claim_amount":"Amount to keep","claim_reason":"Reason","claim_reason_placeholder":"Choose a reason","claim_reason_damage":"Damage","claim_reason_missing_items":"Missing items","claim_reason_extra_cleaning":"Extra cleaning","claim_reason_policy_violation":"House-rule violation","claim_reason_other":"Other","claim_note":"Details","claim_note_placeholder":"What happened, and what it cost","claim_invalid_amount":"Enter an amount between {min} and {max}.","claim_returns_hold":"You keep {kept}. {returned} is released back to the guest.","claim_returns_charge":"You keep {kept}. {returned} is refunded to the guest.","claim_returns_nothing":"You keep everything left on this deposit. Nothing goes back to the guest.","claim_not_editable":"A claim can't be edited. To return money later, use Refund.","deny_title":"Deny charge","deny_description":"This marks the charge as denied. The guest will not be billed.","action_approve":"Approve","action_deny":"Deny","deny_blocked_payment_in_flight":"The guest's payment is still resolving, so denying now would leave money collected against a refused request. Wait for it to settle or fail, then deny.","action_capture":"Capture payment","action_release":"Release hold","action_refund":"Refund","action_mark_delivered":"Mark delivered","timeline":{"created":"Charge created","approved":"Approved","payment_submitted":"Payment submitted","paid":"Payment captured","delivered":"Delivered","denied":"Denied","refunded":"Refunded","verb_submitted":"submitted the charge","verb_approved":"approved","verb_denied":"denied","verb_delivered":"marked it delivered","verb_captured":"captured the payment","verb_refunded":"refunded the payment","verb_released":"released the payment hold","actor_guest":"Guest","actor_system":"System","actor_workflow":"Agent","actor_former_member":"Former member"},"release_prompt_title":"Release auth-hold?","release_prompt":"This charge has an authorized hold on the guest's card. Release it so the funds aren't tied up for a denied request.","release_prompt_skip":"Skip","hold_still_live_badge":"Hold still live","jump_confirm_title":"Change stage to \"{stage}\"?","jump_confirm_description":"Manually moves this charge to a different workflow stage. Use this to correct a mistake — for example, re-opening a denied request or moving an approved charge back to pending for review. The payment side isn't touched: auth-holds and captured funds stay exactly where they are.","jump_confirm_action":"Change stage","workflow_pending":"Pending","workflow_approved":"Approved","workflow_denied":"Denied","marked_paid_title":"Marked as paid · {amount}","marked_paid_subtitle":"Recorded as collected off-platform (cash, Airbnb resolution, manual charge). No card was charged here.","marked_paid_subtitle_with_date":"Recorded as collected off-platform on {date}. No card was charged here.","receipt":"Receipt","receipt_open":"Open receipt in a new tab","hold_releases_on":"Hold releases on","deposit_state":"Deposit","deposit_state_held":"Held","deposit_state_charged":"Charged","deposit_state_claimed":"Claimed","deposit_state_released":"Released","deposit_state_refunded":"Refunded","deposit_returns_on":"Deposit returns on","deposit_renewed_from":"Renewed from an earlier hold","deposit_charged_renewal_failed":"Charged because the hold couldn't be renewed","deposit_charged_long_stay":"Charged for a long stay","deposit_auto_refund_failed":"The automatic refund failed. Refund this deposit manually.","deposit_damage_claimed":"Damage claimed","deposit_damage_claimed_on":"Claimed on","deposit_damage_claimed_by":"Claimed by","payment_awaiting_hint":"Capture and release become available once the card hold is confirmed.","payment_dead_hold_hint":"There is no live card authorization left on this charge — there is nothing to capture, and this guest cannot pay again on GuestyPay. Deny the charge to close the request.","refund_pending":"Refund pending","refund_failed":"Refund failed","refund_initiated":"Refund initiated","refund_pending_tooltip":"A refund is awaiting provider confirmation.","refund_shared_record_tooltip":"This payment covers several charges. Refund it from the payment itself — a per-charge refund isn't available here yet.","payment_shared_record_note":"These totals are for the whole payment, which covers several charges — not for this charge alone.","payment_unresolved_title":"Payment details unavailable","payment_unresolved_subtitle":"This charge points at a payment that isn't available here, so its money actions are hidden.","refund_failure_timeout":"The provider never confirmed this refund. Verify at the provider before retrying.","refund_failure_canceled":"The provider canceled this refund and no money moved. You can retry it.","refund_failure_generic":"The provider rejected this refund without giving a reason. Verify at the provider before retrying.","refund_error_pending":"A refund on this payment is still awaiting the provider's confirmation — it usually settles within a few minutes. Try again once it does.","refund_error_not_refundable":"This payment can't be refunded in its current state.","refund_error_exceeds_balance":"That amount is more than what's left to refund on this payment.","refund_error_fully_refunded":"This payment has already been fully refunded.","refund_error_misconfigured":"This payment can't be refunded from here. Ask an administrator to check the payment account setup.","refund_dispute_acknowledge":"I understand the risk and want to refund this disputed payment","refund_dispute_warning":"This payment is under an open dispute. If the dispute is later lost, the money may be paid twice — this refund and the chargeback with its fee. The card network may also refuse the refund while the dispute is open.","refund_error_dispute_open":"This payment is under an open dispute. Refunding it requires explicit confirmation of the double-payment risk.","refund_error_exceeds_line_balance":"That amount is more than what's left to refund on this charge.","refund_error_line_fully_refunded":"The full amount of this charge has already been sent for refund. Any balance left on this payment belongs to the other charges it covers.","postcard":{"section_title":"Postcard","recipient":"Recipient","sender":"Sender","message":"Message","design":"Design","no_message":"No message provided","guest_photo":"Guest photo","status_label":"Fulfillment","status_pending":"Pending","status_sent":"Sent","status_failed":"Failed","failure_no_upsell":"The upsell behind this order no longer exists, so there was nothing to mail.","failure_no_recipient":"The order has no complete recipient address, so it could not be mailed.","failure_not_postcard":"This charge is not a postcard order, so nothing was mailed.","failure_no_image":"The order has no artwork: the guest uploaded no photo and the upsell has no template.","failure_no_sender":"The order has no complete return address, which the mailing provider requires.","failure_not_configured":"Postcard mailing is not set up for this account, so nothing was sent. Ask an administrator to configure the postcard provider.","failure_enqueue_failed":"The mailing job never reached the queue, so nothing was sent. This one can be retried."},"permission_to_enter":"Permission to enter","permission_to_enter_granted":"Guest authorized entry","permission_to_enter_declined":"Guest did not authorize entry"},"payment_detail":{"title":"Payment Details","title_for_payment":"Payment Details — {name}","description":"View payment information and refund options for this direct payment.","refund_succeeded":"Refund issued","refund_failed":"Refund failed","capture_succeeded":"Payment captured","capture_failed":"Capture failed","release_succeeded":"Hold released","release_failed":"Release failed","claim_succeeded":"Damage claim recorded.","claim_failed":"The damage claim couldn't be recorded.","refund_error_pending":"A refund on this payment is still awaiting the provider's confirmation — it usually settles within a few minutes. Try again once it does.","refund_error_not_refundable":"This payment can't be refunded in its current state.","refund_error_exceeds_balance":"That amount is more than what's left to refund on this payment.","refund_error_fully_refunded":"This payment has already been fully refunded.","refund_error_misconfigured":"This payment can't be refunded from here. Ask an administrator to check the payment account setup.","refund_error_dispute_open":"This payment is under an open dispute. Refunding it requires explicit confirmation of the double-payment risk.","refund_error_exceeds_line_balance":"That amount is more than what's left to refund on this charge.","refund_error_line_fully_refunded":"The full amount of this charge has already been sent for refund. Any balance left on this payment belongs to the other charges it covers.","refund_error_deposit_damage_claimed":"This deposit has a damage claim, so it isn't refunded automatically.","claim_error_not_a_deposit":"Only a security deposit can have a damage claim.","claim_error_superseded":"This deposit was replaced by a newer one. Open the current deposit to claim it.","claim_error_fallback_in_flight":"This deposit is being charged right now. Try again in a few minutes.","claim_error_not_claimable":"This deposit isn't in a state that can be claimed.","claim_error_refund_in_flight":"A refund is already in progress on this deposit.","claim_error_already_claimed":"This deposit already has a claim. To return money, use Refund.","claim_error_nothing_left":"There's nothing left on this deposit to claim.","claim_error_exceeds_balance":"That's more than is left on this deposit."},"add_service_fee":{"title":"Add Service Fee","description":"Create a service fee charge for this reservation","select_upsell_title":"Select Upsell","reservation_summary":"Reservation Summary","confirmation_number":"Confirmation #{code}","nights_and_guests":"{nights, plural, one {# night} other {# nights}} · {guests, plural, one {# guest} other {# guests}}","chooser_question":"How would you like to create this service fee?","chooser_from_upsell_title":"From Upsell","chooser_from_upsell_description":"Link and auto-fill details from an existing upsell","chooser_from_scratch_title":"Create from Scratch","chooser_from_scratch_description":"Manually enter all fee details","back":"Back","search_upsells_placeholder":"Search upsells…","no_upsells_match":"No upsells found","linked_upsell":"Linked Upsell","field_fee_name":"Fee Name","field_amount":"Amount","field_payment_account":"Payment Account","field_currency":"Currency","placeholder_choose_option":"Choose an option…","placeholder_choose_currency":"Choose currency…","rules_section":"Fee Rules & Conditions","rule_require_fee":"Require this Fee","rule_require_fee_description":"Guests won't be able to remove this fee when reviewing their reservation.","rule_requested_by_guest":"Requested by guest","rule_blocks_checkin":"Blocks check-in until paid","rule_blocks_checkin_description":"Guests won't see check-in instructions until this fee is paid in full, but they will be able to complete the pre-checkin steps.","payment_status_section":"Payment Status","mark_as_paid_label":"Mark as already paid","mark_as_paid_description":"Record an off-platform payment (cash, Airbnb resolution, manual charge). The fee is created in the Paid stage.","add_internal_notes":"Add internal notes","internal_notes":"Internal Notes","create_fee":"Create Fee","toast_created":"Service fee created","reason_for_charge_label":"Reason for charge","reason_for_charge_helper":"Required for manual charges — appears in the timeline alongside actor + timestamp.","reason_for_charge_placeholder":"Why are you adding this charge?","field_receipt_url":"Receipt URL (optional)","field_receipt_url_helper":"Paste a link to an Airbnb resolution, off-platform receipt, or other supporting document."},"quick_actions":{"summarize_stay":{"label":"Summarize the stay","prompt":"Summarize this reservation — guest, dates, property, charges, and any open issues."},"pending_charges":{"label":"Pending charges","prompt":"List any pending or unpaid charges on this reservation and their statuses."},"pre_arrival_message":{"label":"Pre-arrival message","prompt":"Draft a friendly pre-arrival message I can send to this guest, including check-in details and the portal link."}},"edit":{"title":"Edit reservation","description":"Update this manually-created reservation. Reservations synced from a PMS are edited in the PMS.","time_hint":"Check-in and check-out times are edited from the dates above in the panel.","submit":"Save changes","submitting":"Saving…","confirmation_code_readonly":"Assigned automatically — can't be changed.","dates_locked_on_property_change":"Save the property change first — dates are edited in the property's own timezone."},"blacklist_registry":{"add_action":"Add to organization blacklist","evidence_found":"{count, plural, one {One blacklist match requires review.} other {{count} blacklist matches require review.}}","added":"Guest added to the organization blacklist","override_recorded":"Blacklist override recorded","generic_review_required":"This reservation requires administrator review before access is released.","warning_checked_in":"This guest is already checked in. The registry entry and alert will be recorded, but current access will not be changed automatically.","warning_verified":"This reservation is verified. Saving will move it to review and retire reservation-issued access where possible.","warning_default":"Saving creates or selects an organization profile, records match evidence, and scans other relevant reservations.","active_match":"Active match","overridden":"Overridden","erased_profile":"Erased profile","historical_match":"Historical match","phone_invalid_excluded":"This phone number is invalid and will not be used for blacklist matching.","matched_at":"Matched {date}","signals":"Matched signals:","open_profile":"Open profile","override_action":"Override match","add_title":"Add guest to organization blacklist","add_description":"Review the reservation identity and provide the required internal reason. Changes are saved only when you select Save.","name":"Name","email":"Email","phone":"Phone","government_id":"Government ID","reason":"Internal reason","cancel":"Cancel","save":"Save to blacklist","override_title":"Override blacklist match","override_description":"The evidence remains in history. Clearing the match does not approve or reopen the reservation.","override_reason":"Override reason","override_save":"Record override"},"cancel_pms_managed":"This reservation is managed by your PMS — cancel it there and the change will sync back.","list_has_staff_note":"A staff member left a note on this reservation"},"settings":{"page_title":"Settings","back_to_settings":"Settings","group_portal":"Guest Portal","group_portal_description":"Configure what guests see and interact with in the portal.","group_operations":"Operations","group_operations_description":"Configure the reusable building blocks your team uses to run daily operations.","group_inbox":"Inbox","group_inbox_description":"Configure how guest conversations are labelled, routed and answered.","card_inbox_labels_title":"Labels","card_inbox_labels_description":"The labels the inbox applies to conversations, and what each one means.","card_inbox_routing_title":"Routing","card_inbox_routing_description":"Which inbox a conversation lands in, and who gets assigned to it.","card_inbox_agents_title":"Agents","card_inbox_agents_description":"The AI agents that draft or send replies, and how much they may do unattended.","group_general":"General","group_general_description":"Manage organization-wide communication, payments, translations, and developer access.","tab_portal":"Portal","tab_payments":"Payments","tab_catalog":"Element Catalog","tab_translations":"Translations","tab_white_labeling":"White Labeling","card_portals_title":"Portals","card_portals_description":"Manage portal settings and defaults","card_brands_title":"Brands","card_brands_description":"Logo, colors, and visual identity","card_verify_title":"Verify","card_verify_description":"Pre-check-in verification steps","card_manuals_title":"Manuals","card_manuals_description":"Property manuals for guests","card_events_title":"Events","card_events_description":"Local events and activities","card_guides_title":"Guides","card_guides_description":"Location guides and recommendations","card_upsells_title":"Upsells","card_upsells_description":"Add-on services and products","card_payments_title":"Payments","card_payments_description":"Payment providers and accounts","card_email_templates_title":"Email Templates","card_email_templates_description":"Reusable emails for agents and guest communication","card_catalog_title":"Element Catalog","card_catalog_description":"Shared asset specifications","card_task_templates_title":"Task Templates","card_task_templates_description":"Reusable task instructions and requirements","card_departments_title":"Departments","card_departments_description":"Teams, rosters, and auto-assignment rules","card_scheduler_title":"Scheduler","card_scheduler_description":"Recurring and reservation-triggered task schedules","card_translations_title":"Translations","card_translations_description":"Languages and AI translations for your content — guest portal, task templates, and more","card_white_labeling_title":"White Labeling","card_white_labeling_description":"Custom domains, email senders, DNS, and SEO","catalog_title":"Element Catalog","catalog_tab_catalog":"Catalog","catalog_tab_categories":"Categories","catalog_add_entry":"New Entry","catalog_empty_title":"No catalog entries yet","catalog_empty_description":"Create entries to share asset specifications across properties.","catalog_delete_title":"Delete Catalog Entry","catalog_delete_confirm":"{count} instances are linked to this entry. They will become standalone.","catalog_entry_name":"Name","catalog_duplicate_name":"A catalog entry with this name already exists in this category","catalog_entry_description":"Description","catalog_entry_make":"Make","catalog_entry_model":"Model","catalog_entry_sleeping_capacity":"Sleeping capacity","catalog_entry_sleeping_capacity_hint":"How many people this element sleeps. Leave empty if it is not a bed.","catalog_entry_notes":"Notes","catalog_entry_category":"Category","catalog_entry_linked_count":"Linked Instances","categories_area_title":"Areas","categories_item_title":"Items","categories_sub_item_title":"Sub-items","categories_add":"Add Category","categories_system_badge":"System","categories_custom_badge":"Custom","categories_delete_title":"Delete Category","categories_delete_in_use":"Cannot delete: category is in use by element instances.","categories_delete_impact_loading":"Checking whether this category can be deleted…","categories_delete_blocked_title":"Can't delete category","categories_delete_blocked_system":"System categories can't be deleted.","categories_delete_blocked_usage":"{instanceCount, plural, =0 {No element instances} one {1 element instance} other {# element instances}} and {catalogEntryCount, plural, =0 {no catalog entries} one {1 catalog entry} other {# catalog entries}} use this category. Reassign them before deleting it.","categories_name_label":"Name","categories_duplicate_name":"An element type with this name already exists at this level","categories_icon_label":"Icon","categories_parent_label":"Parent Category","categories_type":"Type","categories_edit_translations_title":"Edit Category Name","catalog_attachments_partial_failure":"Saved, but {count} attachment(s) failed to upload: {names}","catalog_translated_draft_discarded":"“{field}” became a translated field while you were editing it, so your unsaved change was discarded.","card_appearance_title":"Appearance","card_appearance_description":"Brand color for the mobile app","appearance_title":"Appearance","appearance_subtitle":"Customize how your organization looks on the mobile app.","appearance_brand_color_label":"Brand Color","appearance_brand_color_description":"This color appears as a subtle gradient in the mobile app header. It helps staffers quickly identify which organization they're working in.","appearance_no_color":"No color set","appearance_clear":"Clear","appearance_save":"Save","appearance_save_success":"Appearance settings saved.","appearance_timezone_label":"Organization Timezone","appearance_timezone_description":"Primary operational timezone. Used as the default for scheduling shifts and displaying times.","appearance_timezone_placeholder":"Select timezone...","appearance_timezone_search":"Search timezones...","appearance_timezone_empty":"No timezone found.","appearance_temperature_unit_label":"Temperature Unit","appearance_temperature_unit_description":"How temperatures are displayed across the dashboard and guest portals.","appearance_temperature_celsius":"Celsius (°C)","appearance_temperature_fahrenheit":"Fahrenheit (°F)","quick_actions":{"setup_domain":{"label":"Setup email domain","prompt":"Walk me through setting up a custom email sending domain (SPF / DKIM / DMARC)."},"add_payment_account":{"label":"Add a payment account","prompt":"Walk me through adding a new payment account (Stripe / GuestyPay) for charging guests."},"invite_member":{"label":"Invite a teammate","prompt":"Walk me through inviting a new teammate and assigning them the right role."}},"message_templates_title":"Message templates","message_templates_add":"New template","message_templates_empty_title":"No message templates yet","message_templates_empty_description":"Create reusable replies to insert into conversations.","message_templates_col_title":"Title","message_templates_col_channel":"Channel","message_templates_col_body":"Preview","message_templates_any_channel":"Any channel","message_templates_field_title":"Title","message_templates_field_body":"Message","message_templates_field_channel":"Channel","message_templates_create_title":"New template","message_templates_edit_title":"Edit template","message_templates_delete_title":"Delete template?","message_templates_archived_badge":"Archived","message_templates_archive":"Archive","message_templates_unarchive":"Unarchive","card_message_templates_title":"Message templates","card_api_keys_title":"Developer","card_api_keys_description":"MCP and API access","api_access_title":"API & MCP access","api_access_description":"Connect an integration or AI assistant to your organization's regional endpoints. Authenticate with an API key below, or with OAuth.","api_access_rest_label":"REST API base URL","api_access_mcp_label":"MCP server endpoint","api_access_docs":"View setup guide","api_keys_title":"Developer","api_keys_add":"Create API key","api_keys_show_revoked":"Show revoked keys","api_keys_empty_title":"No API keys yet","api_keys_empty_description":"Create an API key to enable programmatic access to your organization.","api_keys_col_name":"Name","api_keys_col_key":"Key","api_keys_col_created":"Created","api_keys_col_last_used":"Last used","api_keys_col_expires":"Expires","api_keys_col_status":"Status","api_keys_status_active":"Active","api_keys_status_expired":"Expired","api_keys_status_revoked":"Revoked","api_keys_revoke":"Revoke","api_keys_revoke_title":"Revoke API key?","api_keys_revoke_description":"Revoking \"{name}\" will immediately block all requests using this key. This cannot be undone.","api_keys_revoked_toast":"API key revoked","api_keys_create_title":"Create API key","api_keys_field_name":"Name","api_keys_field_expiry":"Expiry","api_keys_field_permissions":"Permissions","api_keys_expiry_never":"No expiry","api_keys_expiry_30d":"30 days","api_keys_expiry_90d":"90 days","api_keys_expiry_1y":"1 year","api_keys_created_title":"Your API key","api_keys_created_warning":"Store this key now — you won't be able to see it again.","api_keys_created_key_label":"API key","api_keys_copied_toast":"Copied to clipboard","api_keys_copy":"Copy key","api_keys_copy_failed":"Couldn't copy — select the key and copy it manually.","card_webhooks_title":"Webhooks","card_webhooks_description":"Inspect webhooks received from your connected systems.","webhooks_title":"Webhooks","webhooks_description":"Webhooks received from your connected systems, newest first.","webhooks_filter_status":"Status","webhooks_filter_topic":"Topic","webhooks_filter_all":"All","webhooks_search_label":"Search","webhooks_search_placeholder":"Event or delivery ID","webhooks_column_received":"Received","webhooks_column_topic":"Topic","webhooks_column_event":"Event","webhooks_column_status":"Status","webhooks_column_attempts":"Attempts","webhooks_column_duration":"Duration","webhooks_empty":"No webhooks received yet. They appear here as your connected systems send them.","webhooks_empty_filtered":"No webhooks match these filters. Clear them to see everything received.","webhooks_detail_title":"Webhook delivery","webhooks_detail_payload":"Payload","webhooks_detail_load_payload":"Show payload","webhooks_detail_no_payload":"No payload stored — it was never captured, or it has expired.","webhooks_detail_payload_error":"The payload could not be loaded. Try again.","webhooks_detail_error":"Error","webhooks_detail_timings":"Receipt · queue · processing","webhooks_status_received":"Received","webhooks_status_queued":"Queued","webhooks_status_processing":"Processing","webhooks_status_succeeded":"Succeeded","webhooks_status_failed":"Failed","webhooks_status_skipped":"Skipped","webhooks_status_dead_letter":"Abandoned","webhooks_status_mapping_miss":"Mapping error","webhooks_topic_reservation":"Reservations","webhooks_topic_message":"Messages","webhooks_topic_listing":"Listings","webhooks_topic_payment":"Payments","webhooks_topic_review":"Reviews","webhooks_topic_device":"Devices","webhooks_topic_esign":"E-signature","webhooks_topic_notification":"Notifications","webhooks_topic_unclassified":"Unclassified","webhooks_retry":"Retry","webhooks_retry_queued":"Webhook queued for retry.","webhooks_retry_failed":"Could not retry: {reason}","webhooks_mapping_title":"Field mapping","webhooks_mapping_description":"How each field was read out of the payload.","webhooks_mapping_field":"Field","webhooks_mapping_source":"Read from","webhooks_mapping_value":"Value","webhooks_group_provider":"Source","webhooks_group_topic":"Topic","webhooks_section_receipt":"Webhook received","webhooks_section_processing":"Processing","webhooks_detail_receipt_ms":"Time to accept","webhooks_detail_queue_ms":"Waited in queue","webhooks_detail_process_ms":"Processing time","webhooks_loading":"Loading…","webhooks_load_failed":"Could not load webhooks. Refresh to try again.","webhooks_load_more":"Load more","webhooks_load_more_failed":"Could not load more webhooks. Try again.","webhooks_select_prompt":"Select a webhook to see how it was received, processed and mapped.","card_observability_title":"Observability","card_observability_description":"Scheduled sync history and PMS listing mapping — for when you need to check what ran.","observability_title":"Observability","observability_description":"What ran on your behalf, what it moved, and which provider listing each property pulls from.","observability_error_title":"Observability unavailable","observability_error_description":"This data could not be loaded. Try again shortly.","observability_no_permission":"You do not have permission to view sync activity. An administrator can grant it.","card_booking_sources_title":"Booking sources","card_booking_sources_description":"Map provider source names to channels","booking_sources_title":"Booking sources","booking_sources_description":"Match each source name your PMS sends to a known booking channel.","booking_sources_retroactive_hint":"Changing a channel also updates reservations already booked under that source.","booking_sources_column_name":"Source name","booking_sources_column_channel":"Channel","booking_sources_unmapped":"Not mapped","booking_sources_empty":"No booking sources yet","booking_sources_load_failed":"Booking sources could not be loaded.","booking_sources_save":"Save","booking_sources_save_success":"Booking sources saved.","booking_sources_channel_aria":"Channel for {name}"},"shifts":{"overview":{"title":"Shifts","description":"Manage shifts and schedules","create":"Create Shift","empty_title":"No shifts found","empty_description":"Create your first shift to get started"},"columns":{"date":"Date","time":"Time","status":"Status","headcount":"Headcount","open":"Open","notes":"Notes","department":"Department"},"status":{"draft":"Draft","published":"Published","in_progress":"In Progress","completed":"Completed","cancelled":"Cancelled"},"create_form":{"title":"Create Shift","description":"Schedule a new shift","department":"Department","department_placeholder":"Select department","department_archived_hint":"This department is archived. Pick another department to create a shift.","department_unavailable_hint":"We couldn't load departments, so this one can't be verified.","date":"Date","start_time":"Start Time","end_time":"End Time","timezone":"Timezone","headcount":"Required Headcount","is_open":"Open Shift","is_open_description":"Allow staff to self-assign","notes":"Notes","notes_placeholder":"Optional shift notes...","submit":"Create Shift","submitting":"Creating...","timezone_hint":"Times are in {tz} (org timezone). Toggle \"My local time\" on the grid to view in your timezone."},"filters":{"date_from":"From","date_to":"To","status":"Status","department":"Department","all_statuses":"All Statuses","all_departments":"All Departments"},"actions":{"publish":"Publish","cancel":"Cancel Shift","cancel_confirm":"Are you sure you want to cancel this shift?","view_details":"View Details","assign":"Assign Staff","clock_in":"Clock In","clock_out":"Clock Out","publishing":"Publishing...","cancelling":"Cancelling..."},"cancel_clock":{"checking":"Checking whether anyone is clocked into this shift…","check_failed":"Couldn't check whether anyone is clocked into this shift.","retry":"Try again","warning_headline":"{name} is currently clocked into this shift.","warning_body":"Cancelling it will clock them out now and close their time entry. Their recorded hours up to this moment are kept.","unnamed_worker":"The assigned team member","late_clock_note":"If anyone clocks in before the cancellation completes, that clock is closed too."},"assignee_locked_while_clocked_in":"Clock this shift out before changing who it is assigned to.","detail":{"title":"Shift Details","department":"Department","headcount":"Headcount","filled_of_required":"<ltr>{filled} / {required}</ltr>","open_shift":"Open Shift","closed_shift":"Closed","notes":"Notes","no_notes":"No notes","assignments":"Assignments","no_assignments":"No assignments yet","status":"Status","assign_staff":"Assign Staff","member_id":"Member ID","member_id_placeholder":"Enter member UUID","assign":"Assign","assigning":"Assigning...","assign_success":"Staff member assigned","section_details":"Details","section_assignments":"Assignments","unassign":"Unassign","unassign_confirm":"Remove this member from the shift? The shift becomes open and unassigned.","section_actions":"Actions","headcount_full":"Fully staffed","headcount_open":"{remaining} spots open","tasks_linked":"Tasks linked to this shift","task_count":"{count, plural, one {# task} other {# tasks}} linked to this shift","section_tasks":"Tasks","section_schedule":"Schedule","scheduled_start":"Start Time","scheduled_end":"End Time","save_schedule":"Save Changes","saving_schedule":"Saving...","schedule_updated":"Shift schedule updated","day_timeline":"Day timeline"},"clock":{"active":"Currently Clocked In","elapsed":"Elapsed","no_active":"Not clocked in","clock_in_success":"Clocked in successfully","clock_out_success":"Clocked out successfully","no_departments":"No departments available","on_break":"Break","paused_label":"Paused","start_break":"Start Break","end_break":"End Break","pause":"Pause","resume":"Resume","break_started":"Break started","break_ended":"Break ended","paused":"Clock paused","resumed":"Clock resumed","current_task":"Current","general_work":"General","property_work":"Property","break_minutes_short":"m","paid":"Paid","unpaid":"Unpaid","unpaid_break":"Unpaid Break","paid_break":"Paid Break","select_property":"Select property","search_properties":"Search properties...","switch_property_success":"Switched to property work","switch_general_success":"Switched to general work","clock_in_title":"Clock In","clock_in_to_shift":"Clock In to Shift","clock_in_without_shift":"Clock in without a shift","which_shift":"Which shift are you starting?","scheduled_shifts":"Your Shifts","open_shifts_label":"Open Shifts","no_shift_scheduled_title":"No Shift Scheduled","no_shift_scheduled_description":"You don't have a shift scheduled. This will be logged as unscheduled time.","clock_in_anyway":"Clock In Anyway","select_department":"Select department","late_start":"Late Start","loading_shifts":"Loading shifts...","shift_time_range":"<auto>{start} – {end}</auto>","or_divider":"or","status_bar_clock_out":"Clock Out","status_bar_clocked_in":"Clocked In"},"edit_history":{"title":"{count, plural, one {# edit} other {# edits}}","view_history_aria":"View {count, plural, one {# edit} other {# edits}}","latest_by":"Last edited by {name} · {when}","latest_at":"Last edited {when}","self_edit_label":"Self-edit","self_edit_tooltip":"The person who edited this entry is the same person whose time it tracks. Logged for audit visibility.","no_changes":"No net field changes (revisions cancelled out)."},"timesheet":{"title":"My Timesheet","description":"Your time entries for the selected period","tab_hours":"My Hours","tab_time_off":"Time Off","total_hours":"Total Hours","break_hours":"Break Time","entries":"Entries","no_entries":"No time entries for this period","open_day_details":"Open day details","in_progress":"In Progress","unconfirmed":"Unconfirmed","no_contact_since":"No contact from this device since {time}","approved":"Approved","pending":"Pending","date_range":"Period","day_total":"Day Total","this_week":"This Week","last_week":"Last Week","this_month":"This Month","locked":"Locked","activity_type":"Activity","task":"Task","approval_status":"Approval Status","pending_count":"Pending Approval","awaiting_approval":"Awaiting Approval","activity_shift":"Shift","activity_break":"Break","activity_time_off":"Time Off","segments":"Segments","work_segment":"Work","break_segment":"Break","department":"Department","expand_entries":"Show entries","collapse_entries":"Hide entries","no_entries_in_shift":"No entries recorded","loading_entries":"Loading entries...","task_singular":"task","task_plural":"tasks","standalone_wrapper":"{count} tasks · {total} total","edit":{"start_time":"Start time","end_time":"End time","notes":"Notes","saved":"Entry updated","invalid_time":"Invalid time format"},"edited":"Edited","edited_tooltip":"Modified by employee before submission","edit_entry":"Edit time entry","edit_diff":{"by_actor":"by {name}","field_start":"Start","field_end":"End","field_notes":"Notes"},"entry_type":{"work":"Work","paid_break":"Paid break","unpaid_break":"Unpaid break","work_time":"Work time","task":"Task"},"compliance":{"missed_break":"Missed mandatory {duration}min {name} break","break_too_short":"Break too short ({actual}min, minimum {required}min)","auto_deducted":"{minutes}min auto-deducted ({name} policy)"},"outside_shifts":"Outside shifts","col":{"start":"Start","end":"End","duration":"Duration","type":"Type","task":"Task","property":"Property","department":"Department","state":"State","day":"Day","entries":"Entries","breaks":"Breaks","status":"Status","total":"Total"},"tz_notice":"Times shown in {tz}","entries_count":"{count, plural, =0 {No entries} =1 {# entry} other {# entries}}","period_total":"Period total","time_entries":"Time entries","view":{"list":"List","by_task":"By task","calendar":"Calendar"},"no_task_group":"General work (no task)","breaks_group":"Breaks","other_costs_band":"Other costs (materials, expenses)","in_other_costs_inline":"in other costs","manual_entry":"manual entry","day_status":{"all_approved":"Approved","partially_approved":"Partially approved","pending":"Pending"}},"task_controls":{"start":"Start","stop":"Stop","pause":"Pause","resume":"Resume","elapsed":"Elapsed"},"approval":{"locked":"Approved & Locked","reopen":"Reopen","reopen_reason":"Reason for reopening","reopen_reason_placeholder":"Why does this entry need to be reopened?","reopened":"Time entry reopened","approve_all":"Approve All","approving_all":"Approving...","all_approved":"All entries approved","auto_clocked_out":"Auto Clock-Out","auto_clock_out_warning":"This entry was automatically closed","stale_entries":"Stale Entries","stale_entries_description":"{count} entries exceeded maximum shift duration","run_auto_clockout":"Auto Clock-Out Stale","auto_clockout_complete":"Auto clock-out completed for {count} entries"},"dashboard":{"title":"Shift Dashboard","description":"Real-time shift operations overview","todays_shifts":"Today's Shifts","currently_working":"Currently Working","pending_approvals":"Pending Approvals","open_shifts":"Open Shifts","whos_working":"Who's Working Now","no_one_working":"No one is currently clocked in","no_pending":"No pending approvals","todays_schedule":"Today's Schedule","no_shifts_today":"No shifts scheduled for today","approve":"Approve","approving":"Approving...","approved_success":"Time entry approved","lock":"Lock","locking":"Locking...","lock_success":"Time entry locked","hours_format":"{hours}h {minutes}m","entry_status_active":"Active","entry_status_on_break":"On Break","entry_status_paused":"Paused","entry_status_completed":"Completed","pending_time_off":"Pending Time-Off Requests","no_pending_time_off":"No pending time-off requests","time_off_approved":"Time-off request approved","time_off_declined":"Time-off request declined","break_label":"break","edited":"Edited","reject":"Reject","rejecting":"Rejecting...","rejected_success":"Shift rejected","reject_title":"Reject Timesheet","reject_description":"Provide a reason for rejecting this timesheet. The employee will be able to make corrections and resubmit.","reject_reason_label":"Reason","reject_reason_placeholder":"Why is this timesheet being rejected?","cancel":"Cancel","time_entries_label":"Time Entries","edit_history_label":"Edit History","edit_field_start":"Start","edit_field_end":"End","edit_field_notes":"Notes","time_off_balances":"Time-Off Balances","no_balances":"No time-off policies configured"},"schedule":{"title":"Shift Schedule","description":"Weekly shift calendar","previous_week":"Previous Week","this_week":"This Week","next_week":"Next Week","no_shifts":"No shifts","staff_count":"{filled}/{required} staff","mon":"Mon","tue":"Tue","wed":"Wed","thu":"Thu","fri":"Fri","sat":"Sat","sun":"Sun","time_range_label":"Time range","day":"Day","three_day":"3 Day","week":"Week","month":"Month","today":"Today","add_shift":"Add Shift","click_to_create":"Create shift","no_shifts_this_week":"No shifts scheduled this week","week_summary":"Summary","total_shifts":"Total shifts","total_headcount":"Headcount","no_department":"No department","quick_create":"Quick Create","start_time":"Start","end_time":"End","headcount":"Staff","more_options":"More options...","creating":"Creating...","shift_moved":"Shift moved to {date}","shift_duplicated":"Shift duplicated to {date}","duplicate":"Duplicate","edit":"Edit","cancel_shift":"Cancel Shift","shift_cancelled":"Shift cancelled","shift_duplicated_same_day":"Shift duplicated","cancelling":"Cancelling...","moving":"Moving...","duplicating":"Duplicating...","legend":"Legend","legend_draft":"Draft","legend_published":"Published","legend_in_progress":"In Progress","legend_completed":"Completed","legend_cancelled":"Cancelled","legend_open_shift":"Open Shift","legend_fully_staffed":"Fully Staffed","unassigned":"Unassigned","how_many":"How many?","assigned":"Assigned","collapse_department":"Collapse","expand_department":"Expand","delete_shift":"Delete Shift","shift_deleted":"Shift deleted","assign_success":"Shift assigned to {name}","assign_to":"Assign to {name}","shift_unassigned":"Shift unassigned","show_cancelled":"Show cancelled","shifts_count":"{count} shifts","assigned_count":"{count} assigned","unassigned_count":"{count} unassigned","more_count":"+{count} more","show_less":"Show less","previous_month":"Previous month","next_month":"Next month","time_off_conflict_title":"Time-off conflict","time_off_conflict_message":"{memberName} has approved {policyName} on {date}. Assign shift anyway?","assign_anyway":"Assign Anyway","time_off_pending":"Pending","time_off_approved":"Approved","duplicate_week":"Duplicate Week","duplicate_week_description":"Copy all shifts from one week to another. Duplicated shifts will be set to draft with no assignments.","duplicate_week_source":"Source Week","duplicate_week_target":"Target Week","duplicate_week_scope":"What to copy","duplicate_week_scope_all":"All shifts","duplicate_week_scope_department":"A specific department","duplicate_week_scope_employees":"Specific employees","duplicate_week_department":"Department","duplicate_week_select_department":"Select department","duplicate_week_member":"Employees","duplicate_week_select_employees":"Select employees","duplicate_week_members_selected":"{count, plural, one {# employee selected} other {# employees selected}}","duplicate_week_select_all":"Select All","duplicate_week_clear_all":"Clear All","duplicate_week_confirm":"Duplicate","duplicate_week_duplicating":"Duplicating...","duplicate_week_success":"Week duplicated successfully","duplicate_week_navigate":"Navigated to target week","publish_all":"Publish","publish_all_title":"Publish Draft Shifts","publish_all_description":"Publish {count} draft shifts for {range}?","publish_all_employees_notified":"{count, plural, one {# employee} other {# employees}} will be notified","publish_all_confirm":"Publish All","publishing_all":"Publishing...","publish_all_success":"Published {count} shifts","drop_here":"Drop here","display_timezone":"Timezone","tz_org":"Org default","tz_local":"My local time","tz_per_shift":"Original (per shift)","filter_department":"Department","filter_status":"Status","filter_assignee":"Assignee","previous":"Previous","next":"Next","cancel_shift_title":"Cancel this shift?","cancel_shift_description":"This shift will be marked cancelled. You can still delete it afterwards.","delete_shift_title":"Delete this shift?","delete_shift_description":"This permanently removes the shift. This can't be undone.","empty_week_hint":"Add a department and team members to start scheduling shifts.","partial_created":"Stopped after creating {created, plural, one {# shift} other {# shifts}} of {requested}. Check the schedule before creating the rest.","partial_created_unassigned":"Stopped after creating {created, plural, one {# shift} other {# shifts}} of {requested}; {unassigned} still without an assignee. Check the schedule before continuing."},"time_off":{"title":"Time Off","request_button":"Request Time Off","no_policies_available":"No time-off policies apply to you. Ask an admin to configure one for you in Settings → Shifts.","policies_load_error":"Couldn't load your time-off policies.","policy":"Policy","dates":"Dates","duration":"Duration","status":"Status","submitted":"Submitted","cancel":"Cancel","cancel_confirm":"Cancel this time-off request? This can't be undone.","cancelling":"Cancelling...","no_requests":"No time-off requests yet","cancel_success":"Request cancelled","approve":"Approve","decline":"Decline","approve_success":"Request approved","decline_success":"Request declined","edit_button":"Edit","edit_sheet":{"title":"Edit Time Off Request","description":"Update the dates or notes for this request"},"edit_success":"Request updated","request_success":"Time-off request submitted","request_sheet":{"title":"Request Time Off","description":"Submit a new time-off request","policy_label":"Policy","policy_placeholder":"Select a policy","dates_label":"Dates","notes":"Notes","notes_placeholder":"Optional notes for your manager...","submit":"Submit Request","submitting":"Submitting...","computed_duration":"{days} business days ({hours}h)","balance_current":"Available: {accrued} accrued · {used} used · {remaining} remaining","balance_projected":"After this request: {projected} remaining","balance_overage_warning":"This request exceeds your remaining balance — your manager will see this on approval."},"balance":{"unlimited":"Unlimited","used_of_total":"{used} ({usedDays}) used of {total} ({totalDays})","remaining":"{remaining} ({remainingDays}) remaining","used":"{used}h used","paid":"Paid","unpaid":"Unpaid","days_format":"{count}d"},"status_label":{"pending":"Pending","approved":"Approved","declined":"Declined","cancelled":"Cancelled"}},"settings":{"title":"Shift Settings","break_mandatory":"Mandatory","break_mandatory_help":"Break is required by policy — violations are flagged on the timesheet","break_types":{"title":"Break Types","description":"Define break types available for your organization","add_break":"Add Break","name":"Name","name_placeholder":"e.g. Lunch Break","duration":"Duration (minutes)","paid":"Paid","unpaid":"Unpaid","is_paid":"Paid Break","is_paid_description":"Employee is compensated during this break","scope":"Scope","org_wide":"Organization","department":"Department","member":"Member","edit":"Edit","delete":"Delete","confirm_delete":"Are you sure you want to remove this break type?","empty_title":"No break types defined","empty_description":"Add break types to standardize breaks across your organization","create_success":"Break type created","update_success":"Break type updated","delete_success":"Break type removed","saving":"Saving...","save":"Save","flags":"Flags","group_org_wide":"Organization-wide","group_by_department":"By department","group_by_member":"By member","duplicate_name":"A break with this name already exists","create_error":"Failed to create break","update_error":"Failed to update break"},"leave_types":{"title":"Leave Types","description":"Define time-off policies available for your organization","add":"Add Leave Type","name":"Name","name_placeholder":"e.g. Vacation","color":"Color","is_paid":"Paid Leave","is_paid_description":"Employee is compensated during this leave","paid":"Paid","unpaid":"Unpaid","accrual_method":"Accrual Method","unlimited":"Unlimited","fixed":"Fixed","hourly":"Hourly","yearly_cap":"Yearly Cap (hours)","carryover_limit":"Carryover Limit (hours)","requires_approval":"Requires Approval","requires_approval_description":"Manager must approve requests for this leave type","is_active":"Active","is_active_description":"Employees can request this leave type. Turn off to retire it without losing existing requests.","advance_notice":"Min Advance Notice (days)","edit":"Edit","delete":"Delete","confirm_delete":"Are you sure you want to remove this leave type?","active":"Active","inactive":"Inactive","status":"Status","empty_title":"No leave types defined","empty_description":"Add leave types to let employees request time off","create_success":"Leave type created","update_success":"Leave type updated","delete_success":"Leave type removed","saving":"Saving...","save":"Save","earn":"Earn","hours_for_every":"hour(s) for every","hours_worked":"hours worked","hours_per_year":"Hours per year","work_days_title":"Work Days & Hours","day_hours":"hours","advance_notice_prefix":"Time off can be requested no less than","advance_notice_suffix":"days before it starts","accrual_days_helper":"{hours} hours = {days} days (based on {avgHours}h work days)","hours_days_summary":"{hours, number}h ({days, plural, one {# day} other {# days}})","annual_estimate":"≈ {hours, number}h/year ({days, plural, one {# day} other {# days}})","weekday_sun":"S","weekday_mon":"M","weekday_tue":"T","weekday_wed":"W","weekday_thu":"T","weekday_fri":"F","weekday_sat":"S","weekday_full_sun":"Sunday","weekday_full_mon":"Monday","weekday_full_tue":"Tuesday","weekday_full_wed":"Wednesday","weekday_full_thu":"Thursday","weekday_full_fri":"Friday","weekday_full_sat":"Saturday","scope":"Scope","org_wide":"Organization-wide","group_org_wide":"Organization-wide","group_by_department":"By department","group_by_member":"By member","duplicate_name":"A time-off policy with this name already exists","create_error":"Failed to create policy","update_error":"Failed to update policy","delete_error":"Failed to remove leave type","delete_in_use":"This leave type has time-off requests against it and cannot be removed. Deactivate it instead to stop new requests."},"clock_in_settings":{"title":"Clock-In Settings","description":"Configure how employees clock into shifts","grace_window":"Grace Window","grace_window_description":"How early or late an employee can clock in and still match to their scheduled shift.","grace_window_unit":"minutes","allow_unscheduled":"Allow Unscheduled Clock-In","allow_unscheduled_description":"Whether employees can clock in without a scheduled shift.","save":"Save","saving":"Saving...","save_success":"Clock-in settings updated"},"location_tracking":{"title":"Location tracking","description":"Record team members' locations while they are on the clock. Tracking always stops at clock-out.","mode_label":"Tracking mode","mode_off":"Off","mode_off_hint":"No location is ever recorded.","mode_clock_events":"Clock events only","mode_clock_events_hint":"One location point at clock-in, clock-out, and task start/finish.","mode_full":"Full routes","mode_full_hint":"Continuous breadcrumbs while on the clock, for live map and route playback.","retention_label":"Keep location history for","retention_days":"days","retention_hint":"Between 7 and 62 days. Older points are deleted automatically.","privacy_note":"Locations are only visible to members with the View Team Locations permission.","save":"Save","save_success":"Location tracking settings saved","save_error":"Could not save location tracking settings"},"auto_clock_out":{"title":"Auto Clock-Out Settings","description":"Configure how shifts auto-close for team members","coming_soon":"Coming soon"},"auto_submit":{"title":"Automatic Submission","description":"Shifts are automatically submitted for manager approval {graceHours, plural, one {# hour} other {# hours}} after clock-out. No action needed from employees."},"scope_selector":{"label":"Scope","org_wide":"Organization-wide","by_department":"By department","by_member":"By member","select_departments":"Select departments…","select_member":"Select member"}},"timeline":{"loading":"Loading...","empty_no_shifts":"No shifts scheduled","work":"Work","break":"Break","overlap_inline":"Overlaps — try +15 min","lock_reason_approved":"Locked — already approved","lock_reason_submitted":"Locked — pending approval","lock_reason_cancelled":"Locked — shift cancelled","undo":"Undo","moved_shift":"Shift moved","moved_entry":"Entry moved","entry_count":"{count, plural, one {# entry} other {# entries}}","edit_times":"Edit times","edit_start":"Start","edit_end":"End","edit_save":"Save","edit_invalid_time":"Invalid time format","edit_end_after_start":"End must be after start","task_label":"Task","zoom_in":"Zoom in","zoom_out":"Zoom out","add_entry":"Add entry","add_entry_title":"Add time entry","entry_type_work":"Work","entry_type_paid_break":"Paid break","entry_type_unpaid_break":"Unpaid break","task_optional":"Task (optional)","department_label":"Department","department_placeholder":"Select department","department_required":"Department is required for work entries","no_future_time_entry":"Time entries cannot be in the future","department_optional":"Department (optional)","notes_optional":"Notes (optional)","add_entry_save":"Save","add_entry_cancel":"Cancel","add_entry_success":"Entry added","add_entry_failed":"Couldn't save the entry — try again","add_entry_overlap":"Overlaps with another entry — try different times","zoom_reset":"Reset zoom","zoom_hint":"Cmd/Ctrl + scroll to zoom","select_task":"Select task...","search_tasks":"Search tasks...","searching":"Searching...","no_tasks_found":"No tasks found","clear_task":"Clear task","edit_entry_title":"Edit time entry","edit_entry_save":"Save","edit_entry_success":"Entry updated","edit_entry_failed":"Couldn't save the change — try again","drag":{"overlap_failed":"Move snapped back — this entry would overlap with another. Try different times.","save_failed":"Move snapped back — couldn't save. Try again."},"popover_overlap_failed":"This entry would overlap with another. Try different times.","open_task_new_tab":"Open task in new tab","unsaved_changes":"{count, plural, one {# unsaved change} other {# unsaved changes}}","save_changes":"Save changes","saving":"Saving...","discard":"Discard","load_error":"Failed to load timeline","entry_type_break":"Break","break_label":"Break","break_definition_label":"Break type","break_definition_placeholder":"Select break type","break_definition_required":"Pick a break type","no_break_types_configured":"No break types configured. Configure them in Settings → Shifts.","break_types_load_error":"Couldn't load break types.","no_departments_scoped":"This member isn't assigned to a department. Assign one in Organization → Members to add Work entries.","break_paid":"paid","break_unpaid":"unpaid"}},"spotlight":{"title":"Search","global_trigger":"Search anything","description":"Search pages, actions, views, and resources","placeholder":"Search pages, actions, and resources…","close":"Close","recent_searches":"Recent searches","no_results":"No matches found","no_results_hint":"Try another name, confirmation code, page, or action.","empty_state":"Search pages, actions, people, and operational records","error":"Something went wrong. Try again.","records_error":"Records couldn’t be searched.","loading":"Searching…","type_more_for_records":"Type one more character to search records.","result_count":"{count, plural, one {# match} other {# matches}}","groups":{"actions":"Actions","go_to":"Go to","records":"Records","recent":"Recent","quick_actions":"Quick actions"},"result_kinds":{"page":"Page","view":"View","action":"Action","form":"Action"},"keyboard_hints":{"navigate":"Navigate","select":"Open","close":"Close"},"entity_types":{"property":"Properties","property_group":"Groups","reservation":"Reservations","task":"Tasks","device":"Devices","user":"People","element":"Elements"},"destinations":{"create_property":{"label":"Create property","aliases":["add property","new property","add unit","new unit"]},"create_property_group":{"label":"Create property group","aliases":["add group","new property group","group properties"]},"create_reservation":{"label":"Create reservation","aliases":["add reservation","new booking","manual reservation"]},"import_reservation":{"label":"Import reservation","aliases":["import booking","pull reservation","PMS reservation"]},"create_task":{"label":"Create task","aliases":["add task","new task","create job"]},"create_task_template":{"label":"Create task template","aliases":["new template","checklist template","turnover template"]},"create_shift":{"label":"Create shift","aliases":["add shift","schedule shift","new shift"]},"create_recurring_schedule":{"label":"Create recurring task schedule","aliases":["recurring tasks","repeat schedule","scheduled tasks"]},"create_reservation_schedule":{"label":"Create reservation-triggered task schedule","aliases":["reservation automation","turnover schedule","booking task schedule"]},"create_workflow":{"label":"Create workflow or agent","aliases":["create agent","new automation","automated workflow"]},"invite_member":{"label":"Invite team member","aliases":["invite user","add teammate","invite staff"]},"import_members":{"label":"Import team members","aliases":["bulk invite","upload members","CSV members"]},"create_portal":{"label":"Create portal","aliases":["new guest portal","add portal"]},"create_portal_brand":{"label":"Create portal brand","aliases":["new brand","guest portal branding","add brand"]},"create_verification_step":{"label":"Add guest verification step","aliases":["identity check","pre-check-in verification","ID verification"]},"create_house_manual":{"label":"Create house manual","aliases":["new manual","guest manual","property guide"]},"create_portal_event":{"label":"Create portal event","aliases":["add local event","new guest event"]},"import_external_events":{"label":"Import external portal events","aliases":["Ticketmaster import","AllEvents import","import local events"]},"create_guide_list":{"label":"Create guide list","aliases":["new guide","guest recommendations","location guide"]},"create_department":{"label":"Create department","aliases":["add department","new team department"]},"create_email_template":{"label":"Create email template","aliases":["new email","message template","email design"]},"create_api_key":{"label":"Create API key","aliases":["new API key","developer key","MCP access key"]},"profile_notifications":{"label":"Notification preferences","aliases":["notification settings","quiet hours","email notifications"]},"profile_security":{"label":"Security and MFA","aliases":["two-factor authentication","change password","active sessions"]},"check_in_instructions":{"label":"Check-in instructions","aliases":["guest instructions","arrival instructions","access instructions"]},"device_alerts":{"label":"Device alerts","aliases":["sensor alerts","lock alerts","device warnings"]},"low_battery_devices":{"label":"Low-battery devices","aliases":["battery warning","locks needing batteries"]},"folio_action_required":{"label":"Folio — Action required","aliases":["charges needing action","payment issues"]},"folio_complete":{"label":"Folio — Complete","aliases":["completed charges","settled folio"]},"property_readiness":{"label":"Property readiness","aliases":["unit readiness","turnover readiness","property status"]},"task_calendar":{"label":"Task calendar","aliases":["task schedule","operations calendar"]},"team_map":{"aliases":["task map","staff map","operations map"]},"team_locations":{"label":"Team locations","aliases":["staff locations","live team map","employee map"]},"opportunities_open":{"label":"Open opportunities","aliases":["new opportunities","task suggestions"]},"opportunities_in_progress":{"label":"Opportunities in progress","aliases":["active opportunities"]},"opportunities_watch":{"label":"Watched opportunities","aliases":["opportunity watch list"]},"opportunities_completed":{"label":"Completed opportunities","aliases":["finished opportunities"]},"opportunities_dismissed":{"label":"Dismissed opportunities","aliases":["ignored opportunities"]},"approvals_pending":{"label":"Pending financial approvals","aliases":["cost approvals","pending expenses"]},"approvals_all":{"label":"All financial approvals","aliases":["approval history","all costs"]},"approvals_time_off":{"label":"Time-off approvals","aliases":["leave requests","vacation approvals"]},"inbox_mine":{"label":"My conversations","aliases":["assigned to me","my inbox"]},"inbox_escalations":{"label":"Inbox escalations","aliases":["needs help","escalated conversations"]},"inbox_unknown":{"label":"Unknown senders","aliases":["unmatched messages","unknown guests"]},"inbox_todo":{"label":"Inbox — To do","aliases":["messages to answer","inbox tasks"]},"inbox_waiting_on_guest":{"label":"Inbox — Waiting on guest","aliases":["waiting for reply","guest response"]},"inbox_follow_up":{"label":"Inbox — Follow up","aliases":["follow-up messages"]},"inbox_done":{"label":"Inbox — Done","aliases":["completed conversations"]},"inbox_archived":{"label":"Inbox — Archived","aliases":["archived conversations"]},"agent_logs":{"label":"Agent run logs","aliases":["workflow logs","automation history","agent history"]},"agent_tools":{"aliases":["MCP servers","agent integrations","automation tools"]},"email_domains":{"label":"Email domains and senders","aliases":["sending domain","email sender","DNS email"]},"scheduler_reservation":{"label":"Reservation-triggered schedules","aliases":["booking schedules","turnover automation"]},"scheduler_recurring":{"label":"Recurring schedules","aliases":["repeating task schedules"]},"scheduler_runs":{"label":"Schedule run history","aliases":["scheduler logs","task schedule runs"]},"analytics_upsells":{"label":"Guest Store analytics","aliases":["upsell analytics","guest purchases"]},"analytics_reservations":{"label":"Reservation analytics","aliases":["booking analytics","occupancy analytics"]},"analytics_reviews":{"label":"Review analytics","aliases":["guest reviews","ratings analytics"]},"analytics_tasks":{"label":"Task analytics","aliases":["operations analytics","task performance"]},"analytics_financials":{"label":"Financial operations analytics","aliases":["FinOps","cost analytics","financial analytics"]},"analytics_staff":{"label":"Staff analytics","aliases":["team performance","employee analytics"]},"failed_access_codes":{"label":"Failed access codes","aliases":["door code failures","lock code issues"]},"verification_review":{"label":"Verifications needing review","aliases":["identity review","guest verification queue"]},"todays_arrivals":{"label":"Today’s arrivals","aliases":["today's check-ins","arriving guests"]},"todays_departures":{"label":"Today’s departures","aliases":["today's check-outs","departing guests"]}}},"status":{"readiness":{"ready":"Ready","not_ready":"Not Ready","occupied":"Occupied","unknown":"Unknown"},"cleaning":{"clean":"Clean","dirty":"Dirty","occupied":"Occupied","unknown":"Unknown"},"inspection":{"inspected":"Inspected","not_inspected":"Not Inspected","failed_inspection":"Failed","inspection_waived":"Waived"},"maintenance":{"normal":"Normal","attention_needed":"Attention Needed","blocked":"Blocked"},"reservation":{"inquiry":"Inquiry","declined":"Declined","expired":"Expired","canceled":"Canceled","closed":"Closed","reserved":"Reserved","confirmed":"Confirmed","awaiting_payment":"Awaiting Payment","blocked":"Blocked"},"check_in":{"not_checked_in":"Not Checked In","checked_in":"Checked In","checked_out":"Checked Out"},"code_status":{"active":"Active","pending":"Pending","failed":"Failed","scheduled":"Scheduled","unknown":"Unknown","pending_deletion":"Pending Deletion","no_access":"No Access","no_locks":"No Locks","failed_deletion":"Failed Deletion","awaiting_code":"Awaiting Code","installed":"Installed","not_active_yet":"Not Active Yet","expired":"Expired"},"device_type":{"lock":"Lock","thermostat":"Thermostat","sensor":"Sensor","door_window_sensor":"Door/Window","sound_system":"Sound","hub":"Hub","light":"Light","camera":"Camera","repeater":"Repeater"},"member_role":{"owner":"Owner","admin":"Admin","manager":"Manager","field_supervisor":"Field Supervisor","field_team_member":"Field Team","member":"Member","viewer":"Viewer","custom":"Custom"},"member_status":{"active":"Active","invited":"Invited","inactive":"Inactive"},"task":{"triage":"Triage","not_started":"Not Started","in_progress":"In Progress","paused":"Paused","completed":"Completed","cancelled":"Cancelled"},"integration":{"pending":"Pending","active":"Connected","expired":"Expired","error":"Error","disconnected":"Disconnected","needs_reauth":"Needs Reauth"},"lock_state":{"locked":"Locked","unlocked":"Unlocked","jammed":"Jammed","unknown":"Unknown"},"online_status":{"online":"Online","offline":"Offline"},"verification":{"verified":"Verified","review":"Needs review","pending":"Not started","decline":"Declined","in_progress":"In progress","not_started":"Not started","not_required":"Not required"},"priority":{"watch":"Watch","low":"Low","medium":"Medium","high":"High","urgent":"Urgent"},"charge_stage":{"viewed":"Viewed","requested":"Requested","pending":"Pending","approved":"Approved","denied":"Denied","awaiting_payment":"Awaiting Payment","payment_submitted":"Payment Submitted","paid":"Paid","delivered":"Delivered","refunded":"Refunded"},"payment":{"succeeded":"Succeeded","processing":"Processing","requires_capture":"Requires capture","requires_action":"Action required","requires_confirmation":"Awaiting confirmation","requires_payment_method":"Awaiting payment","canceled":"Canceled","refunded":"Refunded","expired":"Expired","disputed":"Disputed","reversed":"Reversed","failed":"Failed"},"charge_workflow":{"pending":"Pending","approved":"Approved","denied":"Denied"},"payment_label":{"awaiting_capture":"Awaiting capture","captured":"Captured","refunded":"Refunded","released":"Hold released","failed":"Failed","reversed":"Reversed"},"member_type":{"internal":"Internal","external":"External","agent":"Agent"},"shift":{"draft":"Draft","published":"Published","in_progress":"In Progress","completed":"Completed","cancelled":"Cancelled"},"automation":{"scheduled":"Scheduled","processing":"Processing","complete":"Complete","failed":"Failed","canceled":"Canceled","draft":"Draft","filtered":"Filtered","stuck":"Stuck","stuck_tooltip":"No progress for over {minutes} minutes — this run may be stuck. Check the worker before re-running it."},"clock":{"active":"Active","on_break":"On Break","completed":"Completed"},"time_off":{"pending":"Pending","approved":"Approved","declined":"Declined","cancelled":"Cancelled"},"approval":{"pending":"Pending","approved":"Approved","partial":"Partially approved","declined":"Declined"}},"suite_scan":{"requirement":{"title":"SuiteScan","subtitle":"AI-powered video walkthrough","start":"Start Recording","hint":"5 min max · Narrate what you see","view_results":"View Results","recording_completed":"Recording completed {duration}","suggested_tasks":"{count} suggested tasks","agent_created_tasks":"Agent created {count} tasks","agent_discovered_tasks":"Agent discovered {count} tasks","processing_background":"Processing your walkthrough...","processing_toast":"Processing continues in the background","processing_failed":"Processing failed. Please try again.","retry":"Retry Processing"},"coaching":{"title":"Tips for a great scan","subtitle":"Follow these steps to get the best results from your AI walkthrough","step_1_title":"Name each room","step_1_desc":"Say the room name out loud as you walk in so the AI knows where you are","step_2_title":"Point out issues and take photos","step_2_desc":"Describe what you see out loud and use the capture button to photograph problems","step_3_title":"Describe urgency","step_3_desc":"Tell the AI how urgent each issue feels — it helps prioritize tasks","duration_hint":"5 minutes max · Narrate what you see","camera_label":"Camera","camera_fallback":"Camera {number}","start_walkthrough":"Start Walkthrough"},"recording":{"label":"REC","mic_active":"Mic active","warning":"Recording ending in {seconds}s","too_short":"Recording too short — minimum 10 seconds","stop":"Stop Recording","capture":"Capture","pause":"Pause","resume":"Resume","paused":"Paused","paused_badge":"PAUSED","photos_captured":"{count} photos","min_wait":"{seconds}s…","stopping":"Stopping...","tap_photo_hint":"Tap the shutter to capture a photo of an issue","stop_confirm_title":"Stop recording?","stop_confirm_description":"Once you stop, you can't resume this recording. The video will be uploaded and analyzed by AI.","stop_confirm_cancel":"Keep Recording","stop_confirm_action":"Stop & Upload"},"processing":{"video_uploaded":"Video uploaded","transcribed":"Transcription complete","analyzing":"Analyzing walkthrough...","analyzing_photos":"Analyzing photos...","photos_analyzed":"Photos analyzed","extracting_frames":"Extracting photos","tasks_found":"Tasks found so far","status_preparing":"Preparing your recording for AI analysis...","status_transcribed":"Your walkthrough has been transcribed. Extracting tasks...","status_analyzing":"Our AI agent is reviewing your walkthrough and identifying issues...","status_photos":"Analyzing your captured photos for additional issues...","status_default":"Starting analysis — this usually takes 15-30 seconds","status_longer":"Taking a bit longer than usual — still working...","close_safe":"Feel free to close — processing continues in the background","time_estimate":"Usually completes in 15-30 seconds","uploading_video":"Uploading video...","tokens_used":"{count} tokens"},"review":{"title":"{count} tasks found","advanced":"Advanced","create_tasks":"Create {count} Tasks","cancel":"Cancel","edit":"Edit","remove":"Remove","no_tasks":"No issues found in this walkthrough","priority_high":"High","priority_medium":"Medium","priority_low":"Low","priority_watch":"Watch","priority_urgent":"Urgent","template_label":"Template","template_placeholder":"Select template…","template_none":"None","no_templates":"No templates","department_label":"Department","department_placeholder":"Select department…","department_none":"None","department_required_warning":"{count} tasks need a department before they can be created","title_label":"Task title","description_label":"Description","due_label":"Due date","loading":"Loading…","no_photo":"No photo captured","reassign_photo":"Change photo","from_walkthrough":"From walkthrough","found_in_photos":"Found in photos","photo_suggestion":"AI detected this issue in your photo","tokens_used":"{count} tokens used in analysis","created_badge":"Created","create_single":"Create Task","tasks_created_summary":"{created} of {total} tasks created","create_remaining":"Create {count} Remaining Tasks"},"complete":{"title":"{count} tasks created","uploading":"Video uploading in background","view_tasks":"View Tasks","back":"Back to Inspection"},"player":{"play_video":"Play Video","still_at":"Still at {time}","expires_in":"{days} days left"},"error":{"unsupported_browser":"Your browser doesn't support video recording","permission_denied":"Camera and microphone access required","processing_failed":"Processing failed","retry":"Retry","upload_failed":"Upload failed, tap to retry","not_processing":"This scan is no longer being analyzed","record_again":"Record again"}},"task":{"export":{"button":"Export CSV","loading":"Exporting…","error":"Export failed. Please try again.","too_many_rows":"This export covers more than {cap} tasks. Narrow your filters and try again."},"page":{"title":"Tasks","add":"Add Task","view_today":"Today","view_overdue":"Overdue","view_week":"Week","view_triage":"Triage","view_done":"Done","view_all":"All","search_placeholder":"Search tasks…","filter_status":"Status","filter_priority":"Priority","filter_department":"Department","filter_property_group":"Property group","filter_created":"Created date","filter_due":"Due date","empty_title":"No tasks found","empty_description":"Get started by creating your first task.","filter_unassigned":"Unassigned","filter_has_reservation":"Reservation-linked","filter_flagged_photos":"Photo flags","filter_readiness":"Readiness","filter_is_issue":"Issue","filter_is_blocking":"Blocking"},"templates":{"page_title":"Task Templates","search_placeholder":"Search templates…","empty_message":"No templates found","empty_description":"Create your first task template to standardize workflows.","add_template":"Create Template","columns":{"name":"Name","department":"Department","priority":"Priority","groups":"Groups","items":"Items","est_cost":"Est. Cost","est_time":"Est. Time","updated_at":"Updated"},"create":{"title":"Create Template","description":"Define a reusable task template with checklist items.","name_label":"Template Name","name_placeholder":"e.g. Cleaning Checklist","description_label":"Description","description_placeholder":"Describe the template…","department_label":"Department","department_placeholder":"Select a department…","default_name":"New Template","priority_label":"Priority","submit":"Create Template","submitting":"Creating…"},"detail":{"back":"Back to Templates","not_found":"Template not found","not_found_description":"This template may have been removed or you don't have access.","delete_title":"Delete Template","delete_description":"Are you sure you want to delete \"{name}\"?","name_placeholder":"Template name…","description_placeholder":"Add a description…","priority_label":"Priority","department_label":"Department","no_department":"None","est_cost_label":"Est. Cost","est_duration_label":"Est. Duration","hours_abbrev":"h","empty_value":"Empty","type_label":"Type","saving":"Saving…","saved":"Saved","elements_title":"Elements","search_elements":"Search elements…","no_elements_found":"No elements found","scoped_section":"Scoped","generic_section":"Generic","already_added":"Already added","level_area":"Area","level_item":"Item","level_sub_item":"Sub-item","level_general":"General","level_every":"Every","no_elements_match":"No elements match your search.","no_elements":"No element categories available.","sections_title":"Sections","no_sections":"No sections yet","no_sections_description":"Select elements from the panel to add sections.","items_count":"{count, plural, one {# item} other {# items}}","no_items":"No items yet","add_item":"Add item","item_placeholder":"Describe the requirement…","group_title_placeholder":"Group title…","parent_category_label":"Only under:","parent_category_any":"Any parent (no filter)","add_group":"Add Requirement","add_item_to":"Add item to {area}","add_requirement":"Add requirement","add_sub_item":"Add sub-item","add_requirement_short":"Requirement","add_item_short":"Item","add_sub_item_short":"Sub-item","collapse_all":"Collapse all","expand_all":"Expand all","current_location":"Current location","in_location":"In","every_category":"Every {category}","inherited_from":"Inherited from {label}","outline_title":"Outline","outline_hide":"Hide outline","outline_show":"Show outline","outline_empty":"Add a section to see the outline.","outline_collapse_aria":"Collapse","outline_expand_aria":"Expand","quick_find_label":"Quick-find","quick_find_title":"Quick-find","quick_find_description":"Jump to any area, item, sub-item, or requirement in this template.","quick_find_placeholder":"Go to…","quick_find_empty":"No matches.","count_reqs":"{count, plural, one {# req} other {# reqs}}","count_items":"{count, plural, one {# item} other {# items}}","count_subs":"{count, plural, one {# sub-item} other {# sub-items}}","add_area":"Add area","add_element":"Add element","add_general_section":"Add general section","delete_element_rule":"Remove element rule","conflict_covered_by_universal":"Also covered by a universal rule for this element","conflict_covered_by_scoped":"Also covered by a scoped rule in one of the areas","no_groups":"No requirement groups yet","no_groups_description":"Add a checklist, photo upload, or other requirement type.","delete_group":"Remove Group","delete_group_confirm":"This will remove this requirement group and its items. Continue?","move_up":"Move up","drag_to_reorder":"Drag to reorder","copy":"Copy","copied":"Copied","move_down":"Move down","collapse_section":"Collapse","expand_section":"Expand","delete_section":"Remove Section","delete_section_confirm":"This will remove all requirement groups in this section. Continue?","preview_button":"Preview","preview_title":"Task Preview","preview_description":"This is what your staff will see on a task created from this template. Read-only — no task is created.","preview_count":"{count, plural, one {# item} other {# items}}","preview_total":"Total checklist items","preview_select_property":"Select a property to preview…","preview_select_prompt":"Choose a property to see what this template would produce.","preview_no_items":"No items would be created for this property.","preview_edit_elements":"Edit property elements","preview_only_label":"Preview only — no task will be created","preview_general_section":"General","delete_item":"Remove","delete_item_confirm":"Are you sure you want to remove this item?","photo_requirement":"Photo Requirement","photo_disabled":"Disabled","photo_camera_only":"Camera Only","photo_camera_and_file":"Camera & File","photo_source":"Source","photo_optional":"Optional","photo_required":"Required","preview_rating":"Rating","preview_condition":"Condition","preview_dropdown":"Dropdown","preview_count_type":"Count","preview_text":"Text","preview_yes_no":"Yes / No","preview_photo":"Photo Upload","preview_checklist":"Checklist","condition_default_dirty":"Dirty","condition_default_okay":"Okay","condition_default_clean":"Clean","preview_tap_to_rate":"Tap to rate","preview_enter_count":"Enter count…","preview_enter_text":"Enter text…","preview_select_option":"Select an option…","preview_take_photo":"Take photo or upload","ai_verification_prompt":"AI Photo Verification","ai_verification_placeholder":"Write instructions for AI to verify the photo…","option_set_label":"Option Set","select_option_set":"Select an option set…","no_option_set":"None","no_option_sets":"No option sets available","manage_option_sets":"Manage option sets","default_options_hint":"Default options (no option set selected)","option_sets_dialog_title":"Manage Option Sets","option_sets_dialog_description":"Create and edit option sets for condition and dropdown fields.","create_option_set":"New Option Set","option_set_name_placeholder":"Option set name…","choice_placeholder":"Option label…","add_choice":"Add option","no_choices":"No options yet","delete_option_set":"Delete option set","delete_option_set_confirm":"This will delete this option set and all its options. Continue?","preview_yes":"Yes","preview_no":"No","edit_button":"Edit","save_button":"Save","cancel_button":"Cancel","unsaved_changes":"Unsaved changes","unsaved_changes_title":"Unsaved changes","unsaved_changes_description":"You have unsaved changes. Save them before leaving, or discard them?","unsaved_changes_discard":"Discard","unsaved_changes_keep_editing":"Keep Editing","save_error":"Failed to save template. Please try again.","save_success":"Template saved successfully.","translate_all":"Translate All","translate_all_started":"Translation started. This may take a moment.","save_before_language_switch":"Save your changes before switching languages.","advanced":"Advanced","description_label":"Description","requirement_panel_description":"Configure this requirement's items, type, and options.","settings_title":"Template settings","settings_description":"Configure metadata and access for this template.","settings_hourly_rate":"Hourly rate","settings_required_skill":"Required skill","settings_admin_template":"Admin-only","settings_admin_template_hint":"Hide this template from non-admin members.","settings_template_id":"Template ID","settings_danger_zone":"Danger zone","settings_duplicate":"Duplicate","settings_archive":"Archive","settings_delete":"Delete","more_actions":"More actions","field_view":"Field view","exit_field_view":"Exit field view","open_settings":"Settings","photo_obligation":"Obligation","default_option_set_badge":"Default","default_option_set_hint":"Seeded for your org — rename it, but it cannot be deleted.","view_as_label":"View as","preview_search_properties":"Search properties…","preview_no_properties":"No properties found.","bulk_select":"Select","bulk_selected_count":"{count} selected","bulk_apply":"Apply","bulk_select_row_named":"Select {name}","item_move_menu":"Move item","item_move_up":"Move up","item_move_down":"Move down","item_move_to":"Move to","preview_no_items_hint":"This property has no elements matching the template's areas. Check the property's elements or pick another property.","settings_actions":"Actions","duplicate_success":"Template duplicated","duplicate_failed":"Couldn't duplicate the template. Please try again.","view_only":"View only","unsaved_changes_badge":"Unsaved changes","discard_button":"Discard","save_changes_button":"Save changes","unsaved_changes_save":"Save & leave","settings_skill_none":"No skill required","settings_required_skill_hint":"A required skill is a hard filter: only people who hold it are eligible for this template's tasks."},"warnings":{"count":"{count, plural, one {# warning} other {# warnings}}","review_all":"Review all","hide":"Hide","empty_area":"Area has no items or requirements — it won't render on tasks","empty_checklist":"Checklist requirement has no items","parent_mismatch":"Requirement's parent doesn't match the element catalog"},"shortcuts":{"menu_item":"Keyboard shortcuts","title":"Keyboard shortcuts","description":"Speed up template editing","navigate":"Move selection up / down","move_within_siblings":"Reorder within siblings","rename":"Rename the selected row","delete":"Delete the selected row","duplicate":"Duplicate the selected row","add_sibling":"Add a sibling requirement","close_panel":"Close the active panel","open_help":"Open this shortcut list"},"list_page":{"title":"Templates","description":"Task templates across all departments — click a row to edit.","new_button":"New template","search_placeholder":"Search templates…","empty_title":"No templates yet","empty_description":"Create a task template to standardize recurring work across properties.","col_name":"Name","col_department":"Department","col_items":"Items","col_est_time":"Est. time","col_updated":"Last edited","no_department":"No department","filter_show_archived":"Show archived"}},"from_template":{"toggle_label":"Create from template","select_template":"Select a template","none":"None","property_required":"Property is required when using a template","items_preview":"{count, plural, one {# requirement will be created} other {# requirements will be created}}"},"checklist":{"title":"Checklist","progress":"{completed} of {total} completed","no_items":"No checklist items","add_item":"Add item","complete":"Complete","uncomplete":"Undo"},"create":{"title":"Create Task","description":"Add a new task to your organization.","name_label":"Task Name","name_placeholder":"Enter task name","department_label":"Department","department_placeholder":"Select a department","property_label":"Property","property_placeholder":"Select a property (optional)","due_label":"Due Date","priority_label":"Priority","priority_placeholder":"Select priority","assignee_label":"Assignee","assignee_placeholder":"Search for a member…","collaborators_label":"Collaborators","details_section":"Details","description_label":"Description","description_placeholder":"Describe the task…","est_cost_label":"Estimated Cost ($)","est_time_label":"Estimated Time (min)","flags_section":"Flags","is_blocking":"Is Blocking","permission_to_enter":"Permission to Enter","submit":"Create Task","submitting":"Creating…","success":"Task created","is_issue":"Is an Issue","element_label":"Linked element","element_placeholder":"Select an element (optional)","element_shared":"Shared with group","element_hint":"Link this task to one physical item so the repair lands in its history."},"due":{"date":"Due date","add_time":"Add time","time":"Time"},"validation":{"task_name_required":"Task name is required","department_required":"Department is required"},"detail":{"tab_overview":"Overview","tab_requirements":"Requirements","tab_activity":"Activity","details_title":"Details","properties_title":"Properties","schedule_title":"Status & Schedule","context_title":"Context","metadata_title":"Metadata & Cost","metadata_count":"{count} fields","name_label":"Name","name_placeholder":"Task name…","description_label":"Description","description_placeholder":"Add a description…","status_label":"Status","department_label":"Department","no_department":"None","property_label":"Property","due_label":"Due Date","no_due_date":"No date","priority_label":"Priority","assignee_label":"Assignee","unassigned":"Unassigned","est_cost_label":"Est. Cost","est_time_label":"Est. Time","empty_value":"Empty","blocking_label":"Blocking","permission_to_enter_label":"Permission to Enter","permission_granted":"Granted","tab_costs":"Costs","tab_comments":"Comments","tab_history":"History","tab_execute":"Execute","tab_details":"Details","requirements_label":"Requirements","requirements_items":"{count, plural, one {# item} other {# items}}","completed_by":"Completed by {name}","total_cost_label":"Total Cost","view_requirements":"View Requirements","view_costs":"View Costs","no_property":"No property linked","view_property":"View Property","property_beds":"{count, plural, one {# bed} other {# beds}}","property_baths":"{count, plural, one {# bath} other {# baths}}","permission_not_granted":"Not granted","collaborators_label":"Collaborators","collaborators_count":"{count, plural, one {# collaborator} other {# collaborators}}","no_collaborators":"None assigned","ai_recommended_label":"AI Recommended","coming_soon":"Coming soon","started_at_label":"Started at","ended_at_label":"Ended at","window_start_label":"Start after","buffer_label":"Buffer","group_people":"People","group_schedule":"Schedule","group_flags":"Flags","group_state":"Overview","work_label":"Work","work_not_started":"Not started yet","buffer_to_spare":"{duration} to spare","buffer_none_short":"No buffer","buffer_until_next_guest":"{duration} until the next guest","buffer_none":"None — the next guest arrives before this is done","buffer_days":"{count, plural, one {# day} other {# days}}","wont_fit_lead":"Won't fit. Finishes at {finishesAt}, {shortfall} after the next guest arrives at {nextGuest}.","wont_fit_add":"{count, plural, one {One more person} other {# more people}} and it fits.","wont_fit_none":"No crew size fits this window. It needs an earlier start or a later check-in.","est_time_crew":"{minutes} min · for {count, plural, one {# person} other {# people}}","est_time_effective":"≈ {minutes} min with {count, plural, one {# person} other {# people}}","duration_label":"Duration (Actual)","property_issues_label":"Include in Property Issues","type_label":"Type","created_by_label":"Created By","created_at_label":"Created","activity_title":"Activity","no_activity":"No activity yet.","no_comments":"No comments yet.","search_members":"Search members…","no_members_found":"No members found.","members_hidden_no_property_access":"{count, plural, one {# member hidden — no access to this property} other {# members hidden — no access to this property}}","no_members_access_property":"No members have access to this property","no_members_access_all_properties":"No one has access to all {count} selected properties","members_hidden_no_access_all_properties":"{count, plural, one {# member hidden} other {# members hidden}} — no access to all {properties} selected properties","members_list_truncated":"Showing the first 100 members — others may match but aren’t listed here","members_load_failed":"Couldn’t load members — try again","members_lookup_failed":"Couldn’t load everyone already on this task — some names may be missing","selection_over_bulk_limit":"Too many tasks selected — assign at most {limit} at a time","clear_date":"Clear","clear_date_confirm_title":"Clear the due date?","clear_date_confirm_body":"The task will have no due date until you set a new one.","task_deleted_banner":"This task has been deleted.","restore_success":"Task restored","comment_placeholder":"Add a comment…","comment_submit":"Comment","comment_sending":"Sending…","comment_success":"Comment added","task_updated":"Task updated","undo":"Undo","status_updated":"Status updated","delete_title":"Delete Task","delete_description":"Are you sure you want to delete \"{name}\"? This action cannot be undone.","delete_success":"Task deleted","untitled_task":"Untitled Task","not_found_title":"Task not found","not_found_description":"This task may have been removed or you don't have access.","back_to_tasks":"Back to Tasks","requirements_load_error":"Failed to load requirements.","requirements_retry":"Retry","requirements_empty_title":"No requirements yet","requirements_empty_description":"Requirements will appear here once this task has some — from a template or added directly.","requirements_select_placeholder":"Select...","requirements_enter_text_placeholder":"Enter text...","requirements_save":"Save","requirements_yes":"Yes","requirements_no":"No","requirements_add_photo":"Add photo","requirements_photo_upload_failed":"Could not upload photo","gate_action_aria_label":"Open task action","requirements_photo":"Photo","requirements_ai_prompt_label":"AI checks for:","requirements_ai_verifying":"AI verifying…","requirements_ai_verified":"AI verified","requirements_ai_flagged":"AI flagged","requirements_ai_flag_reason_label":"Reason:","requirements_ai_unavailable":"AI verification unavailable — please review manually","requirements_ai_unavailable_short":"Not checked","flagged_photo_checks":"{count, plural, one {# photo check flagged for review} other {# photo checks flagged for review}}","unavailable_photo_checks":"{count, plural, one {# photo check could not be verified} other {# photo checks could not be verified}}","requirements_ad_hoc_items":"Ad-hoc Items","occupancy":{"title":"Occupancy","linked_badge":"Linked reservation","legend_linked":"Linked stay","legend_other":"Other stays","legend_stay":"Stays","legend_due":"Task due","legend_now":"Now","due_label":"Due"},"stay_during_task":"Stay during this task","event":{"status_update":"Status changed to {status}","assignment_change_assigned":"Task reassigned","assignment_change_unassigned":"Task unassigned","date_change":"Due date changed","name_change":"Task name updated","property_change":"Property changed","property_change_moved":"Moved from \"{from}\" to \"{to}\"","property_change_removed":"Removed from \"{from}\"","property_change_added":"Moved to \"{to}\"","task_created":"Task created","task_archived":"Task archived","task_unarchived":"Task restored","photo_uploaded":"Photo uploaded","duration_edited":"Duration updated","cost_added":"Cost added","cost_deleted":"Cost removed","automation":"Automation triggered","system_author":"System","unknown_author":"Unknown","guest_author":"Guest","sent_to_guest":"Sent to guest","room_chip_a11y":"Written in {room}","internal_only":"Internal only","assigned_to_name":"Assigned to {name}","reassigned_from_to":"Reassigned from {from} to {to}","unassigned_from_name":"Unassigned from {name}","auto_assigned_to_name":"Auto-assigned to {name}","auto_reassigned_from_to":"Auto-reassigned from {from} to {to}","comment_photo_alt":"Comment photo","day_shape_turn":"This day became a same-day turn","day_shape_no_turn":"This day is no longer a same-day turn","day_shape_changed":"The day shape changed","completion_note":"Completion note"},"schedule_via":"Scheduled via {name}","recurring_schedule_label":"Recurring schedule","view_schedule":"View schedule","untitled_schedule":"Untitled Schedule","assign_to_self_title":"Assign to self?","assign_to_self_description":"You will become the assignee and the current assignee will be added as a collaborator. The task will start immediately.","assign_to_self_confirm":"Assign & Start","task_started":"Task started","incomplete_requirements_title":"Incomplete requirements","incomplete_requirements_description":"{missing} of {total} requirements are incomplete. Are you sure you want to complete this task?","complete_anyway":"Complete anyway","requirements_missing_steps_only":"{steps, plural, one {# step} other {# steps}} still needed","requirements_missing_photos_only":"{photos, plural, one {# photo} other {# photos}} still needed","requirements_missing_both":"{steps, plural, one {# step} other {# steps}} and {photos, plural, one {# photo} other {# photos}} still needed","requirements_missing_photos_in_element":"{photos, plural, one {# photo} other {# photos}} still needed in {element}","requirements_unnamed_element":"Unnamed area","task_must_be_reopened":"Task must be reopened to make changes","start_task_to_complete":"Start the task to begin completing requirements","not_assigned_to_task":"You are not assigned to this task","gate_reopen_title":"Task is completed","gate_reopen_description":"This task has been completed. Do you want to reopen it to make changes?","gate_reopen_confirm":"Reopen task","gate_start_title":"Start task?","gate_start_description":"Start the task to begin completing requirements.","gate_start_confirm":"Start task","gate_resume_title":"Resume task?","gate_resume_description":"This task is paused. Resume it to continue completing requirements.","gate_resume_confirm":"Resume task","gate_info_title":"Cannot edit requirements","gate_info_confirm":"OK","task_reopened":"Task reopened","complete_task":"Complete task","completing":"Completing...","task_completed_success":"Task completed","complete_requires_all_items":"Finish all requirements first ({missing} remaining)","share":"Share","duplicate":"Duplicate","open_mobile":"Open mobile","reopen":"Reopen","filter_all":"All","filter_open":"Open","filter_done":"Done","filter_comments":"Comments","filter_status":"Status","filter_edits":"Edits","filter_items":"Items","today":"Today","yesterday":"Yesterday","event_type_comment":"Comment","event_type_status":"Status","event_type_edit":"Edit","event_type_item":"Item","outcome_duration_label":"Duration","outcome_cost_label":"Total cost","outcome_done_label":"Requirements","outcome_done_value":"<ltr>{completed} / {total}</ltr>","outcome_done_pct":"{pct}% complete","outcome_vs_estimate":"{delta} vs estimate","outcome_vs_estimate_cents":"{delta} vs estimate","outcome_cost_projected":"Projected · finalises on completion","outcome_cost_open_costs":"Open cost detail","cost_projection_inline":"Projected cost · {amount}","cost_total_inline":"Total cost · {amount}","cost_projection_open":"View detail","outcome_completed_by_at":"Completed by {name} · {when}","setup_title":"Get this task ready","setup_assign":"Assign someone","setup_due":"Set a due date","setup_requirements":"Add requirements","setup_optional":"optional","setup_pick_assignee":"Pick assignee","setup_pick_date":"Pick date","setup_add_short":"Add","set_due_date_action":"+ Set due date","assign_action":"+ Assign","link_property_action":"+ Link property","add_description":"Add a description…","add_comment_short":"Add comment","post_comment":"Post comment","jump_to_checklist":"Jump to checklist","requirements_progress_label":"Requirements progress","requirements_progress_value":"{completed} of {total} complete","due_actual_label":"Due / actual","started_ended_label":"Started → ended","ai_suggested_count":"{count, plural, one {# candidate} other {# candidates}}","linked_reservation_label":"Linked reservation","via_schedule":"via {name}","show_more_requirements":"Show {count} more requirements","more_requirements":"{count} more (all complete)","newest_first":"Newest first","couldnt_save":"Couldn't save changes","couldnt_save_description":"Network error. Your last edit hasn't been saved.","retry":"Retry","elapsed_minutes":"{minutes}m elapsed","elapsed_hours":"{hours}h {minutes}m elapsed","started_at":"Started {time}","no_activity_description":"Comments, status changes, and edits will appear here.","from_template_label":"From template","requirements_general_section":"General","requirements_more":"More requirement actions","projected_label":"Projected","actuals_label":"Actuals","override_cost":"Override cost","total_billable_label":"Total Billable","outcome_cost_projected_inline":"Projected {amount} · labor still accruing","outcome_cost_projected_only":"Projected · labor in progress","reply_to_guest":"Reply to guest","outcome_faster":"{delta} faster · est {est}","outcome_over":"{delta} over · est {est}","outcome_on_estimate":"On estimate · {est}","duration_faster":"({delta} faster)","duration_over":"({delta} over)","photos":"Photos","permission_grant":"Grant","permission_revoke":"Revoke","understaffed":"{count, plural, one {Needs # more person} other {Needs # more people}}","flagged_issues":"{count, plural, one {# issue reported} other {# issues reported}}","issue_label":"Issue","save_before_language_switch":"Save your changes before switching languages.","window_inverted":"Window inverted — the finish falls before the start"},"sheet":{"title":"Task Details","title_for_task":"Task Details — {name}","open_full_page":"Open full page","requirements_progress":"{completed} of {total}","requirements_progress_pct":"{completed} of {total} · {pct}%","elapsed_minutes":"{minutes}m elapsed","elapsed_hours":"{hours}h {minutes}m elapsed","started_at":"Started {time}","est_time_value":"{minutes} min","tab_overview":"Overview","tab_details":"Details","tab_activity":"Activity","more_label":"More","less_label":"Less","no_activity":"No activity yet","no_activity_description":"Comments, status changes, and edits will appear here.","schedule_title":"Status & Schedule","context_title":"Context","metadata_title":"Metadata & Cost","metadata_count":"{count} fields","reassign":"Reassign","filter_all":"All","filter_comments":"Comments","filter_status":"Status","filter_edits":"Edits","filter_items":"Items","today":"Today","yesterday":"Yesterday","event_type_comment":"Comment","event_type_status":"Status","event_type_edit":"Edit","event_type_item":"Item","event_type_auto":"Auto","outcome_duration_label":"Duration","outcome_cost_label":"Total cost","outcome_done_label":"Done","outcome_done_value":"<ltr>{completed} / {total}</ltr>","outcome_done_pct":"{pct}% complete","outcome_vs_estimate":"{delta} vs estimate","outcome_vs_estimate_cents":"{delta} vs estimate","outcome_cost_projected":"Projected · finalises on completion","outcome_cost_open_costs":"Open cost detail","cost_projection_inline":"Projected cost · {amount}","cost_total_inline":"Total cost · {amount}","cost_projection_open":"View detail","setup_title":"Get this task ready","setup_assign":"Assign someone","setup_due":"Set a due date","setup_requirements":"Add requirements","setup_optional":"optional","setup_pick_assignee":"Pick assignee","setup_pick_date":"Pick date","setup_add_short":"Add","set_due_date_action":"+ Set due date","assign_action":"+ Assign","link_property_action":"+ Link property","add_description":"Add a description…","add_comment_short":"Add comment","post_comment":"Post comment","permission_granted_short":"Permission granted","ai_suggested_count":"{count, plural, one {# candidate} other {# candidates}}","ai_suggested_label":"AI suggested","linked_reservation_label":"Linked reservation","back_to_reservation":"Back to reservation","view_reservation":"View reservation","via_schedule":"via {name}","yes_blocking":"Yes","outcome_completed_by_at":"Completed by {name} · {when}","due_actual_label":"Due / actual","started_ended_label":"Started → ended","actions_share":"Share","actions_duplicate":"Duplicate","actions_delete":"Delete","actions_reopen":"Reopen","actions_open_mobile":"Open mobile","more_actions":"More actions","open_full_page_short":"Full page","couldnt_save":"Couldn't save changes","couldnt_save_description":"Network error. Your last edit hasn't been saved.","retry":"Retry","show_more_requirements":"Show {count} more requirements","more_requirements":"{count} more (all complete)","jump_to_checklist":"Jump to checklist","newest_first":"Newest first","outcome_cost_projected_inline":"Projected {amount} · labor still accruing","outcome_cost_projected_only":"Projected · labor in progress","time_entries_title":"Time logged","time_entries_total":"Total","in_progress":"In progress","started":"Started","ended":"Ended","time_entries_load_error":"Failed to load time entries","outcome_faster":"{delta} faster · est {est}","outcome_over":"{delta} over · est {est}","outcome_on_estimate":"On estimate · {est}"},"dashboard":{"title":"Operations Dashboard","updated_ago_seconds":"Updated {count}s ago","updated_ago_minutes":"Updated {count}m ago","updated_ago_hours":"Updated {count}h ago","refreshing":"Refreshing…","all_clear":"All tasks on track — nothing needs your attention right now.","alert_checkins_not_ready":"Check-ins Not Ready","alert_properties_not_ready":"Properties Not Ready","alert_overdue":"Overdue Tasks","alert_unassigned":"Unassigned Today","alert_checkouts_without_tasks":"Check-outs Without Tasks","alert_checkouts_without_tasks_window":"Today","card_task_progress":"Task Progress","card_task_progress_subtitle":"Today's distribution","card_department_progress":"Department Progress","card_dept_progress_subtitle":"Completion by team","view_all":"View all","seg_completed":"Completed","seg_in_progress":"In Progress","seg_not_started":"Not Started","seg_cancelled":"Cancelled","empty_title":"No tasks yet","empty_description":"Create tasks manually or set up automated schedules to get started.","empty_cta_create":"Create a task","empty_cta_schedule":"Set up a schedule","error_title":"Failed to load dashboard","error_retry":"Retry","coming_soon":"This dashboard is being redesigned. Check back soon.","col_property":"Property","col_reservation":"Reservation","col_readiness":"Readiness","col_maintenance":"Issues","col_cleans":"Cleans","col_inspections":"Inspections","col_today_tasks":"Today's Tasks","no_tasks_today":"No tasks due today","status_ready":"Ready","status_not_ready":"Not Ready","status_occupied":"Occupied","status_unknown":"Unknown","status_updated_at":"Updated {time}","status_updated_by":"by {name}","status_via_task":"via task","status_no_history":"No history","status_change":"Change status","status_updated":"Status updated","maint_normal":"Normal","maint_attention_needed":"Attention","maint_blocked":"Blocked","maint_tooltip_blocked_tasks":"Blocking tasks","maint_tooltip_open_tasks":"Open tasks","clean_clean":"Clean","clean_dirty":"Dirty","clean_occupied":"Occupied","clean_unknown":"Unknown","insp_inspected":"Inspected","insp_not_inspected":"Required","insp_failed":"Failed","insp_waived":"Waived","insp_failed_inspection":"Failed","insp_inspection_waived":"Waived","unassigned":"Unassigned","tasks_strip_more":"+{n} more","tasks_strip_tile_label":"Task: {name}","panel_tasks_title":"Tasks","panel_reservations_title":"Reservations","panel_no_department":"No Department","panel_dept_progress":"{completed}/{total}","panel_tab_details":"Details","panel_tab_history":"History","panel_status_title":"Property Status","panel_tasks_done_count":"{done}/{total} done","panel_add_task":"Add Task","panel_no_tasks":"No tasks scheduled","panel_no_reservations":"No reservations","panel_no_history":"No status changes recorded","panel_res_view":"View","panel_history_field_readiness":"Readiness","panel_history_field_cleaning":"Cleaning","panel_history_field_inspection":"Inspection","panel_history_field_maintenance":"Issues","panel_history_system":"System","panel_history_minutes_ago":"{count}m ago","panel_history_hours_ago":"{count}h ago","panel_res_nights":"{count, plural, one {# night} other {# nights}}","trigger_scheduled_check_in":"Scheduled check-in","trigger_scheduled_check_out":"Scheduled check-out","trigger_guest_checked_in":"Guest checked in","trigger_guest_checked_out":"Guest checked out","trigger_reservation_cancelled":"Reservation cancelled","trigger_property_marked_clean":"Property marked clean","trigger_blocking_task_scheduled":"Blocking task scheduled","trigger_manual_override":"Manual override","trigger_status_recalculated":"Status recalculated","reservations":"Reservations"},"schedule":{"action_complete":"Mark Complete","title":"Schedule","group_by_label":"Group by","calendar_range_label":"Calendar range","by_property":"By Property","by_user":"By User","day":"Day","three_day":"3 Day","week":"Week","month":"Month","today":"Today","hide_empty":"Hide empty properties","week_summary":"Summary","total_tasks":"Total tasks","turns":"Turns","completion":"Completion","click_to_create":"Click to create task","plus_more":"+{count} more","create_short":"New","drag_to_reschedule":"Drag to reschedule","cross_property_coming_soon":"Cross-property rescheduling is coming soon","timezone_not_ready":"Still loading your organization's time zone. Try moving the task again in a moment.","task_rescheduled":"Task rescheduled","task_reassigned":"Task reassigned","task_reassigned_and_rescheduled":"Task reassigned and rescheduled","no_tasks_this_week":"No tasks this week","empty_title":"No tasks scheduled","empty_description":"Tasks scheduled for this period will appear here.","monthly_total":"{total, plural, one {# task} other {# tasks}}","monthly_completed_ratio":"{completed}/{total} completed","monthly_in_progress":"{count} in progress","monthly_overdue":"{count} overdue","reservation_count":"{count, plural, one {# Reservation} other {# Reservations}}","reservation_occupied":"Occupied","reservation_checkin":"Check-in","reservation_checkout":"Check-out","reservation_turn":"Turn","reservation_vacant":"Vacant","action_reassign":"Reassign","action_reschedule":"Reschedule","error_load_failed":"Couldn't load the schedule","task_update_forbidden":"You don't have permission to update this task","task_update_conflict":"Someone else updated this task — refreshing","task_update_bad_request":"That change isn't allowed","property_label":"Property","assignee_label":"Assignee","loading_previous":"Loading earlier weeks…","loading_next":"Loading later weeks…","retry":"Retry","unassigned":"Unassigned","unscheduled":"Unscheduled","unscheduled_empty":"No unscheduled tasks","previous":"Previous","next":"Next","over_cap_subline":"Over daily cap · {count}d","over_cap_hours":"{hours}h / {capHours}h","over_cap_tooltip":"This person's day reaches their daily hours cap","day_hours":"{hours}h","over_capacity_count":"{count, plural, one {# over capacity} other {# over capacity}}"},"status":{"not_started":"Not Started","in_progress":"In Progress","paused":"Paused","done":"Done","completed":"Completed","triage":"Triage","cancelled":"Cancelled"},"priority":{"watch":"Watch","low":"Low","medium":"Medium","high":"High","urgent":"Urgent"},"requirement_type":{"checklist":"Checklist","yes_no":"Yes / No","condition":"Condition","photo":"Photo","count":"Count","text":"Text","rating":"Rating","dropdown":"Dropdown"},"completion":{"start_task":"Start","pause":"Pause","resume":"Resume","complete":"Complete","reopen":"Reopen","back_to_overview":"Back to overview","select_section":"Select a section to view requirements","ungrouped_items":"General Items","unnamed_author":"Commenter","comments":"Comments","add_comment":"Add Comment","add_a_comment":"Add a comment","add_comment_placeholder":"Write a comment…","previous":"Previous","next":"Next","rating_star":"Rate {n} of 5","remove_photo":"Remove photo {n}","expand_photo":"Expand photo {n}","progress_label":"{completed} of {total} complete","section_completed":"{completed} of {total} completed","tab_requirements":"Requirements","tab_comments":"Comments","no_requirements_yet":"No requirements yet — add one above.","worker_note_label":"Issue reported","worker_note_photo_alt":"Issue photo {n}"},"all_tasks":{"title":"All Tasks","title_properties":"Property readiness","for_date_prefix":"for","pick_date_aria":"Pick a date","filtering_by":"Filtering by","clear_filter":"Clear","mode_tasks":"Tasks","mode_properties":"Properties","preset_today":"Today","preset_overdue":"Overdue","preset_week":"This week","preset_scheduled":"Scheduled","preset_flagged":"Photo flags","preset_progress":"{done}/{total} done","scope_all_properties":"All Properties","scope_with_tasks":"With Tasks","res_all":"All","res_checkins":"Check-ins","res_checkouts":"Check-outs","res_turnovers":"Turnovers","res_in_stay":"In-Stay","empty_properties_all":"No properties found","today_btn":"Today","prev_day":"Previous day","next_day":"Next day","stat_done_of":"<ltr>{done} / {total}</ltr> tasks done","stat_overdue":"{count} overdue","showing_checkins":"Showing check-in properties","showing_checkouts":"Showing check-out properties","showing_turnovers":"Showing turnover properties","showing_all":"Showing all properties","footer_of_properties":"{count} of {total} properties","empty_tasks":"No tasks match your filters","empty_properties":"No properties with matching tasks","error_load_failed_title":"Couldn't load this page","error_load_failed_description":"The server returned an error. This is not a filter result — try again, and contact support if it persists.","showing_count":"{count} of {total} tasks","res_vacant":"Vacant","day_risk_arrivals":"{count, plural, one {# arrival today} other {# arrivals today}}","day_risk_not_ready":"{count, plural, one {# unit not ready} other {# units not ready}}","day_risk_all_ready":"all units ready"},"share":{"title":"Share Task","description":"Generate public links for this task.","not_enabled_description":"Public access is not enabled for this task. Enable it to generate shareable links.","enable_access":"Enable Public Access","access_enabled":"Public access enabled","access_revoked":"Public access revoked","view_link":"View Link","view_link_description":"For property owners — view-only access.","execute_link":"Execute Link","execute_link_description":"For workers — can complete checklist items.","no_edit_token":"No execute token available.","copied":"Link copied to clipboard","send_via_email":"Send via Email","type_view":"View","type_execute":"Execute","email_placeholder":"recipient@example.com","send":"Send","revoke_access":"Revoke Access","copy_view_link":"Copy view link","copy_execute_link":"Copy execute link","email_sent_toast":"Task shared via email","already_sent":"Email already sent to this address","email_send_failed":"Couldn't send the email. Please try again.","sending":"Sending...","sent_to":"Sent to","just_now":"just now","revoke_confirm_title":"Revoke public access?","revoke_confirm_description":"This disables the view and execute links. Anyone with an existing link will lose access. You can re-enable access later."},"my_tasks":{"title":"My Tasks","scope_personal":"Personal","scope_shared":"All Shared","view_list":"List","view_board":"Board","view_calendar":"Calendar","summary_overdue":"Overdue","summary_today":"Due Today","summary_upcoming":"Upcoming","group_by_label":"Group by","group_due":"Due date","group_status":"Status","group_priority":"Priority","group_property":"Property","group_department":"Department","group_no_priority":"No priority","group_no_property":"No property","group_no_department":"No department","segment_all":"All","calendar_more":"+{count} more","calendar_times_label":"Grid","calendar_tz_org":"Org timezone","calendar_tz_device":"My device","calendar_month":"Month","calendar_week":"Week","calendar_legend_shift":"Shift","calendar_legend_task":"Task","calendar_shift":"Shift","calendar_shift_clocked_in":"Clocked in","calendar_shift_done":"Done","calendar_shift_scheduled":"Scheduled","summary_completed":"Completed","section_overdue":"Overdue","section_today":"Today","section_tomorrow":"Tomorrow","section_this_week":"This Week","section_later":"Later","section_unscheduled":"No Due Date","section_done":"Done","board_column_not_started":"Not Started","board_column_in_progress":"In Progress","board_column_paused":"Paused","board_column_completed":"Completed","board_column_triage":"Triage","board_column_cancelled":"Cancelled","show_triage":"Show triage","show_cancelled":"Show cancelled","board_drag_handle":"Drag to move","calendar_today_button":"Today","calendar_side_panel_title":"Tasks for this day","calendar_add_task":"Add task for this day","empty_title":"No tasks found","empty_description":"Tasks assigned to you will appear here","empty_all_caught_up":"You're all caught up!","empty_all_caught_up_description":"No tasks assigned to you right now","empty_no_match":"No tasks match your filters","empty_no_match_action":"Clear all filters","quick_add_placeholder":"Add a task...","load_more":"Load more ({remaining} remaining)","loading":"Loading...","blocking_badge":"Blocking","select_row_aria":"Select task","collaborator_unknown_name":"Unknown","collaborator_unassigned_aria":"Unassigned","collaborator_assignee_suffix":"(assignee)","row":{"overdue":"Overdue","triage":"Triage","cancelled":"Cancelled","paused":"Paused","no_due_date":"No due date","was_due":"Was due {date}","done_at":"✓ Done {time}","done_yesterday":"✓ Done yesterday","done_on":"✓ Done {date}","cancelled_on":"Cancelled {date}","completed_by":"Completed by {name}"},"board_column_open":"Open","board_column_done":"Done"},"scheduler":{"concurrent_update":"This schedule is being updated. Please try again.","title":"Scheduler","description":"Automate task creation from reservations or on a recurring basis","new_schedule":"New Schedule","edit_schedule":"Edit Schedule","type_reservation":"Reservation confirmation","type_recurring":"Recurring","tab_all":"All","tab_reservation":"Reservation-based","tab_recurring":"Recurring","trigger_event":"Trigger Event","trigger_check_in":"Check-in","trigger_check_out":"Check-out","trigger_confirmation":"Confirmation","offset_label":"Offset","offset_hours":"hours","recurrence_frequency":"Frequency","recurrence_every":"Every","recurrence_days":"Days","recurrence_time":"Time","recurrence_timezone":"Timezone","recurrence_start_date":"Start Date","recurrence_end_date":"End Date","recurrence_no_end":"No end date","task_blueprint":"Task to Create","template_label":"Template (optional)","task_name_label":"Task Name","property_scope":"Apply to Properties","scope_add":"Add scope","scope_property":"Property","scope_group":"Group","scope_tag":"Tag","status_active":"Active","status_inactive":"Inactive","activation_warning_label":"Schedule needs attention","activation_warning_title":"This active schedule needs attention:","filter_search_placeholder":"Search schedules…","filter_status":"Status","filter_department":"Department","save_schedule":"Save Schedule","delete_confirm":"Are you sure you want to delete this schedule?","no_schedules":"No schedules yet","not_found":"Schedule not found","column_name":"Name","column_type":"Type","column_tasks":"Tasks","column_trigger":"Trigger / Frequency","column_template":"Template","column_properties":"Properties","column_status":"Status","day_of_month":"Day of month","recurrence_interval_label":"Interval","select_type_title":"What type of schedule?","select_type_continue":"Continue","builder":{"new_title":"New Schedule","edit_title":"Edit Schedule","back_to_list":"Schedules","schedule_name":"Schedule Name","schedule_name_placeholder":"e.g. Post-Checkout Deep Clean","description":"Description","description_placeholder":"Optional notes about this schedule","cancel":"Cancel","save":"Save Schedule","saving":"Saving...","unsaved_title":"Unsaved Changes","unsaved_message":"You have unsaved changes. Discard changes?","unsaved_keep":"Keep Editing","unsaved_discard":"Discard","properties_label":"Properties","properties_desc":"Which properties does this apply to?","preview_label":"Preview","schedule_type":"Schedule Type","type_reservation":"Reservation confirmation","type_recurring":"Recurring","reservation_desc":"Triggered by guest events","recurring_desc":"Runs on a time schedule","trigger_event":"Trigger Event","timing_offset":"Timing Offset","after":"After","before":"Before","hours":"hours","minutes":"minutes","frequency":"Frequency","frequency_daily":"Daily","frequency_weekly":"Weekly","frequency_monthly":"Monthly","every":"Every","on_days":"On Days","day_sun":"Su","day_mon":"Mo","day_tue":"Tu","day_wed":"We","day_thu":"Th","day_fri":"Fr","day_sat":"Sa","time_of_day":"Time of Day","timezone":"Timezone","start_date":"Start Date","end_date":"End Date","no_end_date":"No end date","template":"Template","change_template":"Change","department":"Department","priority":"Priority","priority_watch":"Watch","priority_low":"Low","priority_medium":"Medium","priority_high":"High","priority_urgent":"Urgent","est_cost":"Est. Cost","est_time":"Est. Time (min)","not_configured":"Not configured","configured":"Configured","add_scope":"Add","scope_property":"Property","scope_group":"Property Group","scope_tag":"Tag","scope_more":"+{count} more","collapse":"Collapse","search":"Search...","preview_create":"create","preview_more_tasks":"+ {count, plural, one {# more task} other {# more tasks}}","preview_at":"at","rule_summary_active":"Active","rule_summary_paused":"Paused","at_event":"at","days_unit":"days","weeks_unit":"weeks","months_unit":"months","of_month":"of month","ordinal_st":"st","ordinal_nd":"nd","ordinal_rd":"rd","ordinal_th":"th","preview_empty":"Complete all sections to preview your schedule rule","type_locked":"Type cannot be changed after creation","pause_schedule":"Pause","resume_schedule":"Resume","save_incomplete_tooltip":"Complete all required sections to save","cost_prefix":"$","validation_required":"Required","validation_name_too_long":"Name is too long","validation_description_too_long":"Description is too long","scope_section_title":"Assign Properties","scope_section_description":"Choose which properties this schedule applies to","scope_union_hint":"Scopes are additive: the schedule applies to every property matching any group, tag, or property you select.","groups_inclusion":"Property Groups","groups_description":"Include all properties in selected groups","tags_inclusion":"Tags","tags_description":"Include all properties with selected tags","properties_inclusion":"Individual Properties","properties_description":"Include specific properties","select_groups":"Select groups...","select_tags":"Select tags...","select_properties":"Select properties...","no_scopes_enabled":"Enable at least one inclusion type","wizard_continue":"Continue","wizard_step_of":"Step {current} of {total}","wizard_view_details":"View Details","wizard_success_title":"Schedule Created","wizard_success_message":"Your schedule has been saved and is now active. You can review the details below.","wizard_success_confirm":"Got it","add_task":"Add Task","remove_task":"Remove","items_count":"{count, plural, one {# task} other {# tasks}}","save_draft":"Save as Draft","validation_blocked":"Please fix the highlighted fields before saving.","create_schedule":"Create schedule","create_success":"Schedule created","description_empty":"No description","assignment":"Assignment","assignment_mode":{"unassigned":"Unassigned","specific":"Specific person","auto":"Auto-assign","property_default":"Preferred assignee","property_default_legacy":"Property's preferred person (retired)"},"assignment_specific_placeholder":"Choose a person","assignment_auto_off_warning":"Auto-assignment is off for this department — tasks will be created unassigned.","collaborators":"Collaborators","collaborators_placeholder":"Add collaborators","assignment_specific_required":"Choose a person, or this task will be created unassigned.","assignment_desc_auto":"Follows the {dept} department's auto-assign rules.","assignment_desc_auto_nodept":"Follows the task's department auto-assign rules.","assignment_view_rules":"View rules","unnamed_task":"Untitled task","edit_task":"Edit task","template_placeholder":"Choose a template…","template_no_department":"Other","assignment_auto_label":"Auto-assign","done":"Done","new_task_label":"New task","save_incomplete_hint":"Finish these before saving:","workflows_label":"Workflows","workflows_desc":"What happens at each moment of the reservation?","workflows_desc_recurring":"Which tasks get created, and how often?","blocker_no_workflows":"Add at least one workflow.","blocker_workflow_trigger":"{workflow} has no schedule yet — set how often it repeats, the time, the time zone and a start date.","blocker_workflow_no_items":"{workflow} has no tasks — add at least one.","blocker_item_no_task":"{workflow} · task {position} has no template yet — choose one.","blocker_item_no_department":"{workflow} · “{task}” has no department — open it and choose a template to set one.","adhoc_badge":"No checklist","adhoc_hint":"This task was set up before templates. It creates a task with a name, department and priority — but no checklist and no time estimate. Choose a template to add them.","assignment_desc_property_default_legacy":"Retired. This workflow assigns the first person on this property's own Auto-assignment list for the department. It ignores an inherited list and one set to “Only these people” — the task is then created unassigned. There is no reorder control, so remove whoever is first to change who gets these tasks. This mode can't be selected again once the workflow moves off it.","type_vacancy":"Vacancy","vacancy_desc":"Schedule tasks on days a property sits empty","type_occupancy":"Occupancy","occupancy_desc":"Schedule tasks on days a guest is in-house","vacancy_cadence":"Every N vacant days","vacancy_min_gap":"Only gaps of at least (nights)","occupancy_cadence":"Every N days during the stay","occupancy_min_stay":"Only stays of at least (nights)","vacancy_final_toggle":"Once more before the next arrival","vacancy_final_offset":"Days before arrival","season_start":"Season start","season_end":"Season end","repeat_annually_toggle":"Repeat this season every year","repeat_annually_hint":"Only the day and month are used, so the season runs again each year — including a window that crosses 31 December.","vacancy_hint":"A vacant day has no check-in, no check-out and no guest. Days are counted in the property's timezone.","occupancy_hint":"Days are counted from the day after check-in (day 1) to the day before check-out, in the property's timezone. A task lands on every Nth day; if another reservation checks in or out on one of those days, that task is skipped and the day still counts.","occupancy_pte_toggle":"Create tasks with permission to enter","occupancy_pte_hint":"The guest has authorized entry while they're staying, so the crew can go in even when the guest is out. Applies to tasks created after saving.","reschedule_toggle":"Reschedule when the property is occupied","reschedule_target":"Move to the next","reschedule_target_fully_vacant":"Fully vacant day","reschedule_target_check_out_only":"Check-out only day","reschedule_target_check_in_only":"Check-in only day","reschedule_target_turn":"Same-day turn","reschedule_window":"Look ahead (days)","reschedule_fallback":"If no day matches","reschedule_fallback_skip":"Skip this occurrence","reschedule_fallback_keep_original":"Keep the original date","reschedule_hint":"When the scheduled day has a guest, the task moves to the next matching day within the window. If none matches: skip it, or keep the date for work that must happen anyway.","vacancy_chip":"Vacancy · every {cadence} vacant days","occupancy_chip":"Occupancy · every {cadence} days during the stay","reschedule_chip":"If occupied: {target} within {window, plural, one {# day} other {# days}}, else {fallback}","span_preview_sample":"With these settings: {property} → {days}","span_preview_totals":"{count, plural, one {# task} other {# tasks}} across {properties, plural, one {# property} other {# properties}} in the next {window} days","span_preview_none":"No tasks would be created in the next {window} days","span_preview_none_before_season":"Nothing yet — the season starts {date}.","span_preview_none_after_season":"Nothing more — the season ended {date}.","span_preview_none_off_season":"Nothing in the next {window} days — this season runs {start} to {end} every year.","span_preview_truncated":"Totals cover the first {cap} properties.","vacancy_sentence":"Create a task every <cadence></cadence> fully vacant days, in gaps of at least <nights></nights> nights, at <time></time>","occupancy_sentence":"Create a task every <cadence></cadence> days during the stay, for stays of at least <nights></nights> nights, at <time></time>","new_title_vacancy":"New Vacancy Schedule","new_title_occupancy":"New Occupancy Schedule","new_title_recurring":"New Recurring Schedule","new_title_reservation":"New Reservation Schedule","blocker_span_trigger":"{workflow} is missing values — fill in the cadence, the minimum length and the time.","blocker_season_dates":"{workflow} repeats its season every year — set both a season start and end."},"start_schedule":"Start","pause_schedule":"Pause","start_success":"Schedule started — tasks are being created in the background","pause_success":"Schedule paused","save_draft_success":"Schedule saved as draft. Activate it from the list to start creating tasks.","runs_tab":"Run History","runs_title":"Run History","runs_column_timestamp":"Timestamp","runs_column_status":"Status","runs_column_property":"Property","runs_column_reservation":"Reservation","runs_column_detail":"Detail","runs_column_task":"Task","runs_column_schedule":"Schedule","runs_no_runs":"No runs recorded yet","runs_status_success":"Success","runs_status_skipped":"Skipped","runs_status_error":"Error","runs_status_filter_all":"All Statuses","runs_trigger_check_in":"Check-in","runs_trigger_check_out":"Check-out","runs_trigger_confirmation":"Confirmation","runs_trigger_recurring":"Recurring","runs_view_task":"View Task","runs_view_reservation":"View","runs_action_created":"Task created","runs_action_cancelled":"Task cancelled","runs_action_cancelled_pre_checkin":"Cancelled (pre check-in)","runs_action_cancelled_confirmation":"Cancelled (confirmation future)","runs_action_cancelled_property_changed":"Cancelled (property changed)","runs_action_cancelled_property_unassigned":"Cancelled (property unassigned)","runs_action_rescheduled":"Task rescheduled","runs_action_recomputed":"Due date updated","runs_action_skipped":"Skipped","runs_action_activated":"Schedule activated","runs_action_paused":"Schedule paused","runs_action_unknown":"Unknown action","runs_action_cancelled_day_shape":"Cancelled (day shape changed)","runs_action_skipped_day_shape_departed":"Skipped (day shape changed — guest already departed)","runs_action_skipped_day_shape_started":"Skipped (day shape changed — work already started)","runs_action_created_day_shape_aborted":"Day-shape swap aborted — task set unchanged","runs_action_created_day_shape_completed":"Day-shape swap completed — task set updated","runs_action_created_day_shape_unmaterializable":"Workflow skipped in the day-shape swap — it can never create a task","runs_column_action":"Action","detail_title":"Schedule Details","detail_edit":"Edit","detail_summary":"Summary","detail_trigger":"Trigger","detail_scope":"Scope","detail_template":"Template","detail_department":"Department","detail_est_cost":"Est. Cost","detail_est_time":"Est. Time","and_more":"+ {count} more","template_items":"{count, plural, one {# item} other {# items}}","page_title":"Scheduler","delete_confirm_title":"Delete Schedule?","delete_confirm_description":"This action cannot be undone. All associated tasks will be unlinked.","pagination_range":"{from}–{to} of {total}","dialogs":{"delete_title":"Delete Schedule","delete_message":"Deleting this schedule will cancel {count, plural, one {# open task} other {# open tasks}}. To keep those tasks, disable the schedule instead. In-progress tasks are kept.","delete_confirm":"Delete & Cancel Tasks","delete_disable_instead":"Disable Instead","delete_no_tasks":"No open tasks will be affected.","activate_title":"Activate Schedule","activate_message":"Resuming this schedule will create tasks for {count, plural, one {# upcoming reservation} other {# upcoming reservations}}.","activate_no_reservations":"No matching reservations found. Tasks will be created as new reservations arrive.","activate_blocked":"This schedule can't be activated yet:","activate_confirm":"Activate","deactivate_title":"Pause Schedule","deactivate_confirm":"Pause","update_title":"Update Schedule","update_message":"Saving will update due dates on {count, plural, one {# existing task} other {# existing tasks}}.","update_no_tasks":"No existing tasks will be affected.","update_confirm":"Save Changes","checking":"Checking…","resume_message":"This schedule will start creating tasks again.","deactivate_message_reservation":"No new tasks will be created while this schedule is paused. Existing tasks are kept and continue to follow their reservations. Resuming will create tasks for reservations booked while paused.","deactivate_message_recurring":"No new recurring tasks will be generated while this schedule is paused. Already-created tasks are kept.","impact_created":"{count, plural, one {# task will be created} other {# tasks will be created}}","impact_created_why":"One per upcoming booking, assigned automatically.","impact_cancelled":"{count, plural, one {# task will be cancelled} other {# tasks will be cancelled}}","impact_cancelled_why":"Not started yet, and their step is being replaced.","impact_kept":"{count, plural, one {# task stays as it is} other {# tasks stay as they are}}","impact_kept_note":"These keep their current task — nothing new is created for them.","impact_kept_detail":"In progress: {inProgress} · Completed: {completed} · Edited by hand: {edited}","impact_none":"Saving won't change any existing tasks.","impact_unavailable":"We couldn't work out what this save will do."},"select_type_description":"Choose how this schedule is triggered.","runs_no_runs_description":"Runs appear here after a schedule fires. Paused schedules don't generate runs.","no_schedules_description":"Schedules automatically create tasks on a recurring cadence or when reservations are booked.","trigger_sentence":"{when, select, on {On {anchor}} before {{amount} before {anchor}} after {{amount} after {anchor}} other {}}{scope, select, every {} turn { (turn)} no_turn { (no turn)} other {}}","trigger_when_on":"On","trigger_when_before":"Before","trigger_when_after":"After","trigger_anchor_check_out":"check-out","trigger_anchor_check_in":"check-in","trigger_anchor_confirmation":"booking confirmed","trigger_unit_days":"days","trigger_amount_minutes":"{count, plural, one {# minute} other {# minutes}}","trigger_amount_hours":"{count, plural, one {# hour} other {# hours}}","trigger_amount_days":"{count, plural, one {# day} other {# days}}","trigger_unit_hours":"hours","trigger_unit_minutes":"minutes","trigger_label_when":"when","trigger_label_count":"count","trigger_label_unit":"unit","trigger_label_variant":"departures","trigger_variant_every":"every time","trigger_variant_turn":"only on same-day turns","trigger_variant_no_turn":"only when there's no same-day turn","event_checkout":"Check-out","event_checkin":"Check-in","event_booking":"Booking Confirmation","add_workflow":"Add a workflow","add_task":"Add task","remove_workflow":"Remove workflow","remove_workflow_confirm_title":"Remove workflow?","remove_workflow_confirm_body":"This will also remove all tasks in this workflow.","empty_event":"No workflows yet","event_checkout_subtext":"when a guest departs","event_checkin_subtext":"when a guest arrives","event_booking_subtext":"when a reservation is booked","reservation_banner":"Runs for every confirmed reservation, and updates on its own if a booking changes or cancels.","event_checkout_help":"Set when each task is due, relative to check-out.","event_checkin_help":"Set when each task is due, relative to check-in.","event_booking_help":"Set when each task is due, relative to the booking being confirmed.","add_task_no_templates":"Tasks come from a template.","add_task_create_template":"Create a template","row_tasks_count":"{count, plural, one {# task} other {# tasks}}","row_trigger_scope":"{trigger}{scope, select, every {} turn { (turn)} no_turn { (no turn)} other {}}","row_trigger_offset":"{when, select, before {{duration} before {trigger}} after {{duration} after {trigger}} other {}}{scope, select, every {} turn { (turn)} no_turn { (no turn)} other {}}","runs_action_created_no_checklist":"Task created — no checklist (task has no template)","runs_action_created_preferred_assignee_gone":"Task created — unassigned (the property's preferred assignee is no longer an active member)","runs_status_filter_label":"Run status","type_vacancy":"Vacancy","type_occupancy":"Occupancy"},"elapsed_pill":{"running_aria":"Running for {time}","paused":"Paused"},"action_toast":{"started":"Started","paused":"Paused","resumed":"Resumed","completed":"Completed","undo":"Undo","failed":"Action failed","undo_failed":"Undo failed"},"now_in_progress":{"untitled":"Untitled task","plus_more":"+{count} more","open":"Open","open_aria":"Open task details"},"action_cta":{"start":"Start","pause":"Pause","resume":"Resume","complete":"Complete","take_over_start":"Take over & Start","reopen":"Reopen","cancel":"Cancel","more_actions":"More actions","take_over_title":"Take over this task?","take_over_description":"Starting this task will reassign it to you. The current assignee will be moved to collaborators.","not_started":"Not started","triage":"Triage","triage_owner":"Needs an owner","in_progress":"In progress","ready":"Ready to finish","paused":"Paused","completed":"Completed","cancelled":"Cancelled","read_only":"Read-only","started_by":"Started {when} by {name}","started_when":"started {when}","paused_by":"Paused {when} by {name}","paused_when":"paused {when}","cancelled_by":"Cancelled {when} by {name}","cancelled_at":"Cancelled {when}","completed_by":"Completed by {name} · {when}","items_done":"{done} of {total} done","items_all_done":"All {total} requirements done","assigned_to_caption":"Assigned to","assigned_to_you_caption":"Assigned to you","completed_caption":"Completed by","cancelled_caption":"Cancelled","progress_label":"Requirements progress","progress_value":"{done} of {total} complete","join_task":"Join task","joined_task":"Joined task"},"bulk":{"selected":"{count, plural, one {# task selected} other {# tasks selected}}","start":"Start","pause":"Pause","complete":"Complete","clear_aria":"Clear selection","select_row_aria":"Select task","summary_all_ok":"Completed {ok} tasks","summary_with_skipped":"Completed {ok} · {skipped} skipped (requirements not done)","summary_with_failed":"Completed {ok} · {failed} failed · {skipped} skipped","actions":{"status":"Status","assign":"Assign","priority":"Priority","due_date":"Due date","delete":"Delete","unassign":"Unassign","clear_due":"Clear due date"},"confirm":{"confirm_label":"Apply","status":{"title":"Change status?","description":"Change {count, plural, one {# task} other {# tasks}} to ''{summary}''?"},"assign":{"title":"Reassign tasks?","description":"Reassign {count, plural, one {# task} other {# tasks}} to {summary}?"},"priority":{"title":"Change priority?","description":"Set {count, plural, one {# task} other {# tasks}} to ''{summary}'' priority?"},"due":{"title":"Change due date?","description":"Set {count, plural, one {# task} other {# tasks}} due date to {summary}?"},"delete":{"title":"Delete tasks?","description":"{count, plural, one {# task} other {# tasks}} will be moved to trash and can be restored within 30 days.","confirm_label":"Delete"}},"toast":{"success":"{count, plural, one {# task} other {# tasks}} updated","partial":"{ok} of {ok, plural, one {# task} other {# tasks}} updated · {failed} failed","all_failed":"{count, plural, one {# task} other {# tasks}} failed to update"}},"requirements":{"or":"or","add":"Add","add_placeholder":"Add a requirement…","add_failed":"Couldn't add requirement","change_type":"Change requirement type","pick_type":"Pick a type","load_template":"Load from template","load_template_helper":"Photos, dropdowns, ratings, and grouped sections","load_template_more":"Load another template…","template_picker_placeholder":"Search templates…","template_picker_empty":"No templates yet.","template_loading":"Loading templates…","template_suggested":"Suggested for this task","template_other_departments":"Other departments","template_loaded":"Loaded {count} requirements","template_load_failed":"Couldn't load template","template_empty":"Template has no requirements for this property.","type":{"yes_no":"Yes / No","photo":"Photo","dropdown":"Dropdown","count":"Count","text":"Short text","rating":"Rating","condition":"Condition","checklist":"Checklist"},"element":{"label":"Element","placeholder":"Element…","general":"General"},"option_set":{"label":"Choices","placeholder":"Choose an option set…","default":"Org default","default_marker":"default"},"add_more":"Add requirement","collapse":"Done","checklist":{"add_hint":"Click Add — you'll be able to type checkbox items next."},"replace_template":"Replace with another template…"},"edit":{"customize":"Customize","done_editing":"Done","editing_badge":"Editing","empty":"Add a requirement to get started.","ad_hoc_label":"Ad-hoc","template_label":"From template","section_options":"Options","section_more":"More section actions","delete_section":"Delete section","rename_row":"Rename","delete_row":"Delete","save":"Save","cancel":"Cancel","row_renamed":"Requirement renamed","row_rename_failed":"Couldn't rename requirement","row_deleted":"Requirement deleted","row_delete_failed":"Couldn't delete requirement","section_updated":"Section updated","section_update_failed":"Couldn't update section","section_deleted":"{count, plural, one {Section deleted (1 requirement)} other {Section deleted (# requirements)}}","section_delete_failed":"Couldn't delete section","confirm_delete_section_title":"Delete this section?","confirm_delete_section_body":"Removes \"{label}\" and its {count, plural, one {1 requirement} other {# requirements}}. Template requirements are not affected.","row_more":"More row actions","add_checklist_item_placeholder":"Add a checkbox item, press Enter…","move_to":"Move to…","row_moved":"Requirement moved","row_move_failed":"Couldn't move requirement","discard_changes":"Discard changes","unsaved_changes_title":"Discard unsaved changes?","unsaved_changes_description":"Your edits to this task's requirements haven't been saved yet. Discarding will throw them away.","discard_action":"Discard","changes_saved":"Changes saved","flush_failed":"Couldn't save changes","flush_before_template_load":"Save or discard your customize-mode changes before loading a template."},"property_edit":{"no_property":"No property assigned","pick_property":"Pick property","change_property":"Change property","remove_property":"Remove property","search_placeholder":"Search properties…","changed":"Property changed","change_failed":"Couldn't change property","cancel":"Cancel","move_title":"{mode, select, add {Assign this property?} remove {Remove the property?} other {Change the property?}}","move_body":"{mode, select, add {This task will be assigned to \"{next}\".} remove {This task will no longer be linked to \"{current}\".} other {This task will move from \"{current}\" to \"{next}\".}} Tasks are usually tied to one property, so this should be rare.","move_action":"{mode, select, add {Assign property} remove {Remove property} other {Change property}}","soft_title":"Change the property?","soft_body":"Changing to \"{next}\" will clear {count, plural, one {1 requirement} other {# requirements}}{template, select, empty {} other { from template \"{template}\"}} — they're tied to the current property's elements.","soft_body_no_target":"Removing the property will clear {count, plural, one {1 requirement} other {# requirements}}{template, select, empty {} other { from template \"{template}\"}} — they're tied to the current property's elements.","bullet_clear_items":"{count, plural, one {1 requirement will be removed} other {# requirements will be removed}}","bullet_clear_template":"Template link ({name}) will be cleared","bullet_can_reload":"You can load a template again on the new property","replace_action":"Replace requirements","hard_title":"This task is in progress — you'll lose progress","hard_body":"Changing the property will reset {completed} of {total} completed requirements and clear the linked template. The task will return to \"not started\".","hard_will_clear_label":"Will be cleared","badge_items":"{count, plural, one {1 requirement} other {# requirements}}","badge_completions":"{count, plural, one {1 completion} other {# completions}}","badge_template":"Template: {name}","hard_type_to_confirm":"Type {token} to confirm.","hard_confirm_token":"RESET","hard_action":"Reset and change property","view_property":"View property"},"lanes":{"critical_label":"Critical","critical_rule":"Today's check-in is within 4 hours and nobody is on the readiness-blocking work.","watch_label":"Watch","watch_rule":"Today's check-in is not ready yet, but work is in motion.","occupied_label":"Occupied & later","occupied_rule":"Guests are in the unit now, or the next arrival is later.","ready_label":"Ready","ready_rule":"Clean, inspected, and today's check-in is counting on it.","op_critical_label":"Action needed","op_critical_rule":"Check-in is close and the work won't happen on time — nobody owns the readiness-blocking work within 4 hours, or an assigned clean (within 2h) or inspection (within 1h) still hasn't been started.","op_watch_label":"Watch","op_watch_rule":"Today's check-in is not ready yet, but work is owned and on track — keep an eye on it.","op_occupied_label":"Occupied & later","op_occupied_rule":"Guest currently in the unit (operator can't enter), future arrival on another day, or idle property.","op_ready_label":"Ready","op_ready_rule":"Clean, inspected, and today's check-in is counting on it.","status_not_ready_label":"Not ready","status_not_ready_rule":"Property is flagged not_ready — work is outstanding on the unit.","status_occupied_label":"Occupied","status_occupied_rule":"Guest is currently in the unit.","status_unknown_label":"Unknown","status_unknown_rule":"Readiness state has not yet been derived for this property.","status_ready_label":"Ready","status_ready_rule":"Property is clean and inspected — ready for check-in.","action_needed_count":"{count} Action needed","action_needed_in_lane":"{count} properties in this lane need immediate action","count_label":"{count}","empty_lane":"Nothing here.","flat_label":"Properties","pill":{"ready":"Ready","not_ready":"Not ready","dirty":"Dirty","failed":"Failed inspection","blocked":"Blocked","occupied":"Occupied"},"countdown":{"tomorrow":"Tomorrow","after_checkout":"After checkout","none":"—","aria_label":"Check-in in {label}"},"row":{"open_drawer_aria":"Open {property} details","unassigned":"—","task_count_more":"+{count}","no_tasks":"No tasks today","action_needed_chip":"Action needed","action_needed_chip_aria":"This property needs immediate action","unnamed_user":"Unnamed user"},"hover":{"reservation_title":"Reservation","reservation_source":"Source","reservation_check_in":"Check-in","reservation_check_out":"Check-out","reservation_guest":"Guest","reservation_confirmation":"Confirmation","reservation_nights":"{count, plural, one {1 night} other {# nights}}","status_title":"Status","status_readiness":"Readiness","status_cleaning":"Cleaning","status_inspection":"Inspection","status_maintenance":"Maintenance","status_last_changed_by":"by {name}","status_no_history":"No recent changes","task_progress":"{done}/{total} requirements","task_no_progress":"No requirements","task_assignee":"Assignee","task_unassigned":"Unassigned","task_due":"Due","task_open":"Open task","user_role":"Role","user_today_tasks":"Today's tasks","user_no_tasks_today":"No tasks today","user_view_profile":"View profile"},"res_turnover_label":"Turnover","res_turnover_rule":"Checking out and back in today","res_check_in_label":"Check-in","res_check_in_rule":"Guest arriving today","res_check_out_label":"Check-out","res_check_out_rule":"Guest departing today","res_in_stay_label":"In-stay","res_in_stay_rule":"Currently occupied","res_none_label":"Vacant","res_none_rule":"No reservation activity today"},"quick_actions":{"summarize":{"label":"Summarize this task","prompt":"Summarize this task and its current status. Include who it’s assigned to and what’s blocking completion."},"suggest_checklist":{"label":"Suggest a checklist","prompt":"Suggest a checklist of subtasks that would help complete this task end-to-end."},"find_similar":{"label":"Find similar tasks","prompt":"Find similar tasks recently created on this property or from this template."}},"status_triage":"Triage","status_not_started":"Not Started","status_in_progress":"In Progress","status_paused":"Paused","status_completed":"Completed","status_cancelled":"Cancelled","view_mode":{"aria_label":"Swimlane grouping mode","operational":"Operational","operational_aria":"Group by readiness urgency","status":"Status","status_aria":"Group by property state","reservation_type":"Reservation","reservation_type_aria":"Group by reservation activity"},"panel":{"title":"Property details","error_title":"Couldn't load this property","error_description":"The server returned an error. Check your connection and try again.","error_retry":"Try again","error_close":"Close","attribution":"{when} · {who}","guest_fallback":"Guest","open_property_page_aria":"Open property page","tab_overview":"Overview","tab_tasks":"Tasks","status_title":"Property status","readiness_label":"Readiness","cleaning_label":"Cleaning","inspection_label":"Inspection","maintenance_label":"Maintenance","occupancy_title":"Occupancy","occupancy_empty":"No reservations in this window","occupancy_now":"Now","scheduled_title":"Scheduled today","scheduled_progress":"{done}/{total} done","scheduled_empty":"No scheduled tasks for this day.","open_maintenance_title":"Open maintenance","open_maintenance_empty":"No open maintenance.","add_task":"Add task","open_property":"Open property"},"capacity":{"tab_title":"Capacity","base_title":"What this job takes","base_description":"People and time for every property, unless a property below says otherwise.","set_base":"Set capacity","people_needed":"{count, plural, one {# person} other {# people}}","estimated_minutes_value":"{minutes} min","no_estimate":"No estimate","no_estimate_warning":"No estimate — tasks from this template will be due the minute the guest leaves. Add an estimate and the due becomes check-out + estimate.","snapshot_note":"Values are stamped onto tasks when they are created — edits shape future tasks, never existing ones. An estimate guides the person and plans the day; it is never a promise.","column_property":"Property","column_people":"People","column_estimate":"Estimate","edit_base_title":"Capacity for this task type","edit_description":"How many people the job needs, and how long it should take.","required_label":"People needed (1–5)","required_placeholder":"Leave empty to inherit","required_hint":"Empty falls back to the template value, then to one person.","estimate_label":"Estimated time (min)","estimate_placeholder":"Leave empty to inherit","estimate_hint":"Empty falls back to the template value, then to any estimate configured on rates.","toast_saved":"Capacity saved","toast_removed":"Override removed","toast_failed":"Could not save capacity","window_start_label":"Start after","window_finish_label":"Finish before","window_hint":"When tasks from this template can start and must finish. Check-out and check-in anchors follow the reservation live, including the guest's actual departure — so they apply only to tasks linked to a stay. A task created by hand keeps its fixed times only.","window_option_inherit":"Inherit","window_option_not_set":"Not set","window_option_off":"No window","window_option_check_out":"Check-out","window_option_check_in":"Check-in","window_option_next_check_in":"Next check-in","window_option_fixed":"Fixed time","window_time_label":"Time","window_column":"Window","window_not_set":"No window","window_off":"Window off","window_after":"After {what}","window_before":"Before {what}","properties_title":"Every property","properties_description":"What this job takes at each property. Grey means it follows the values above.","filter_status":"Capacity","filter_status_override":"Has its own values","filter_status_inherited":"Follows the template","inherited_hint":"Follows the template","reset_row":"Reset to the template","bulk_sheet_title":"Set capacity","bulk_sheet_description":"{count, plural, one {# property will be updated} other {# properties will be updated}}","bulk_clear_action":"Reset to the template","bulk_clear_undo":"Enter a value instead","bulk_cleared_note":"Will follow the template value","bulk_toast_saved":"{count, plural, one {# property updated} other {# properties updated}}"},"element_edit":{"label":"Linked element","shared":"Shared with group","placeholder":"Select an element","no_element":"No element linked","link":"Link element","change":"Change","changed":"Element updated","change_failed":"Could not update the element"},"element_history":{"title":"Repair history","open":"Open work","completed":"Completed","empty_open":"No open work on this item.","empty_closed":"Nothing completed on this item yet.","range":"{from}–{to} of {total}"}},"team_map":{"title":"Team Map","description":"Where your team is and where they've been.","roster":{"search_placeholder":"Search team members","no_location":"No location shared","empty":"Nobody clocked in on this day.","clear_selection":"Clear selection","worked_this_day":"Worked this day","active_now":"Active now","assigned_not_active":"Assigned, not active","task_progress":"{done}/{total} tasks","no_tasks":"No tasks today"},"summary":{"distance":"Distance","tasks_done":"Tasks done","time_on_clock":"Time on clock","last_seen":"Last seen {time}","duration_hm":"{hours}h {minutes}m","duration_m":"{minutes}m"},"playback":{"label":"Playback","play":"Play","pause":"Pause","stop_number":"Stop {number}"},"live":{"badge":"Live"},"empty":{"tracking_off_title":"Location tracking is off","tracking_off_admin":"Turn it on in Shift settings to see your team on the map.","tracking_off_member":"Ask your administrator to turn on location tracking.","tracking_off_cta":"Open shift settings","no_permission_title":"You don't have access to team locations","no_permission_body":"Ask your administrator for the team locations permission.","no_points_title":"No locations recorded","no_points_body":"Nobody shared a location on this day."},"off_map":{"title":"Not on the map","body":"{count, plural, one {# task has no property address} other {# tasks have no property address}}"},"truncated":{"title":"Showing the first {count}","body":"This day has more tasks than the map draws at once. Narrow the filters to see the rest."},"mode_map":"Map","scope":{"label":"Show on map","overdue":"Overdue","unscheduled":"Unscheduled","all_departments":"All departments","team":"Team","on_map_count":"{count} on map","due_today":"Due today","due_on":"Due {date}","none_selected":"Pick at least one to put tasks on the map.","assignment_label":"Assignment","assignment_all":"All","assignment_unassigned":"Unassigned","assignment_assigned":"Assigned","guests_unavailable":"Guest arrivals and departures could not be loaded.","team_unavailable":"Team data could not be loaded."},"lasso":{"select":"Select area","drawing":"Draw to select"},"legend":{"title":"Legend","unassigned":"Unassigned","overdue":"Overdue","grouped":"Several tasks here","person":"Team member","trigger":"Legend","check_out":"Guest leaves today","check_in":"Guest arrives today","guest_done":"Solid = already happened","occupied":"Guest here all day"},"route":{"clocked_in":"Clocked in at {time}","clocked_out":"Clocked out at {time}","stops":"{count, plural, one {# stop} other {# stops}}","no_stops":"No tasks logged on this day.","in_progress":"ongoing","untitled_task":"Untitled task","hide_detail":"Hide day detail","active":"Active","never_clocked_in":"Not clocked in today"},"selection":{"title":"{count, plural, one {# task selected} other {# tasks selected}}","filter_placeholder":"Filter selection","unselect":"Remove from selection","untitled":"Untitled task","none_match":"Nothing matches that filter.","off_map":"{count, plural, one {# selected task is not on this map} other {# selected tasks are not on this map}}","close":"Close","group_label":"Group selection","group_department":"Department","no_department":"No department","no_property":"No property","group_property":"Property","group_status":"Status","draft_unassigned":"Nobody available","unassigned_row":"Unassigned","guest_out":"Guest out {time}","guest_in":"Guest in {time}","guest_left":"Left {time}","guest_arrived":"Arrived {time}","guest_all_day":"Guest here all day"}},"translation":{"page_title":"Translations","page_description":"Manage translated content across all enabled languages.","search_placeholder":"Search translations...","empty_title":"No translations found","empty_description":"Translated content will appear here when elements are created.","filter_source_table":"Source","filter_content_tag":"Tag","columns":{"source_text":"Source Text","source_table":"Source","content_tag":"Tag","input_type":"Type","status":"Status","created_at":"Created"},"status_processing":"Translating","status_complete":"Complete","detail":{"title":"Translation Entries","no_selection":"Select a translation to view its entries.","language":"Language","text":"Text","method":"Method","no_entries":"No entries yet.","save":"Save","translate_all":"Translate All","translating":"Translating...","saved":"Saved","method_manual":"Manual","method_automatic":"AI","method_recursive":"Batch"},"languages":{"title":"Language Settings","description":"Enable languages for your organization. New languages will be automatically translated using AI.","save":"Save Languages","saving":"Saving...","saved":"Languages updated","initialize_confirm":"Enable {language}? This will start AI translation for all existing content.","jobs_enqueued":"{count} translation jobs enqueued","jobs_enqueued_partial":"{count} translation jobs started — {skipped} records could not be started and stay listed as missing. Press again to retry them.","initialize_failed":"Could not save languages or start AI translation. Please try again.","initialize_failed_partial":"Translation stopped partway — {count} jobs are running. Press again to translate the rest.","initialize_stopped_early":"Saving stopped before it finished — {count} translation jobs had already started.","jobs_already_running":"These translations are already in progress from an earlier request. Check back shortly.","jobs_already_in_flight":"No new translation jobs were queued — these {count} translations were already under way. Check back shortly.","coverage_title":"Translation coverage","coverage_description":"How much of your content exists in each enabled language.","coverage_base":"base","coverage_count":"{translated} of {total}","coverage_missing":"{count} missing","coverage_translate_missing":"Translate {count} missing","coverage_translating":"Translating {count}…","coverage_complete":"All up to date"},"language_names":{"en":"English","es":"Spanish","fr":"French","nl":"Dutch","de":"German","zh":"Chinese","ar":"Arabic","it":"Italian","bg":"Bulgarian","ja":"Japanese","pt":"Portuguese","el":"Greek","cs":"Czech","he":"Hebrew","uk":"Ukrainian","ru":"Russian"},"source_tables":{"custom_url":"Custom URL","instruction":"Instruction","portal_branding":"Portal Branding","portal_guide_item":"Guide Item","portal_guide_list":"Guide List","portal_settings":"Portal Settings","portal_upsell":"Upsell","portal_fee_product":"Fee Product","portal_manual":"Manual","portal_manual_category":"Manual Category","portal_event":"Event","precheck_option":"Pre-Check-In Option","precheck_question":"Pre-Check-In Question","precheck_step_detail":"Pre-Check-In Step Detail","property_details":"Property Details","group":"Property Group","tms_task":"Task","tms_requirement_group":"Requirement Group","tms_checklist_item":"Checklist Item","tms_template":"Task Template","tms_department":"Department","element_instance":"Element Instance","element_catalog":"Element Catalog","element_category":"Element Category","option_set":"Option Set","option_choice":"Option Choice"},"content_tags":{"title":"Title","description":"Description","caption":"Caption","category_name":"Category Name","cta":"Call to Action","message":"Message","house_rule":"House Rule","name":"Name","notes":"Notes","summary":"Summary","subtitle":"Subtitle","overview":"Overview","location":"Location"}},"validation":{"auto_capture_payment_capture_method_must_be_automatic":"This payment type is always captured automatically and cannot be placed on a manual hold.","duplicate_document_number":"Document numbers must be unique","required":"This field is required","unsupported_scope_type_for_entity":"This item can't be scoped to portals.","scope_ids_not_in_org":"Some selected items don't belong to your organization.","entity_scope_delta_empty":"Select at least one property, group, tag or portal to change.","ends_at_must_be_after_starts_at":"End time must be after start time","email_required":"Email is required","email_invalid":"Invalid email address","password_min_length":"Password must be at least 8 characters","password_max_length":"Password must be 128 characters or less","passwords_must_match":"Passwords do not match","confirm_password_required":"Please confirm your password","company_name_required":"Company name is required","first_name_required":"First name is required","last_name_required":"Last name is required","nickname_required":"Nickname is required","nickname_max_length":"Nickname must be 200 characters or less","at_least_one_guest":"At least 1 guest required","terms_required":"You must accept the Terms of Service","address_required":"Address is required","current_password_required":"Current password is required","mfa_code_length":"Code must be exactly 6 digits","mfa_code_digits":"Code must contain only digits","department_name_required":"Department name is required","property_group_name_required":"Group name is required","task_name_required":"Task name is required","comment_required":"Comment is required","comment_or_photo_required":"Write a comment or add a photo","comment_too_long":"Comment must be 5000 characters or less","name_too_long":"Name must be 255 characters or less","translation_text_too_long":"Translation text is too long","title_required":"Title is required","title_too_long":"Title must be 200 characters or less","template_name_required":"Template name is required","template_area_cannot_have_parent":"Area-level requirements can't be nested under a parent","template_null_target_requires_null_level":"Choose an element before setting a level","department_required":"Department is required","option_set_title_required":"Option set title is required","option_choice_label_required":"Option choice label is required","checklist_item_required":"Checklist item text is required","group_title_required":"Group title is required","tag_title_required":"Tag title is required","tag_title_too_long":"Tag title must be 100 characters or less","search_query_required":"Search query is required","search_query_too_long":"Search query is too long","url_required":"URL is required","node_name_required":"Name is required","action_type_required":"Action type is required","email_template_required":"Email template is required","custom_email_required":"Custom email is required","email_recipient_user_required":"Select a user","http_method_required":"HTTP method is required","js_code_required":"JavaScript code is required","thermostat_mode_required":"Thermostat mode is required","url_invalid":"Invalid URL","https_url_required":"Enter a secure URL starting with https://","duplicate_booking_source":"This booking site already has an override","unsplash_download_url":"URL must be an Unsplash download link","instruction_scope_required":"Exactly one of property or property group must be selected","hide_timer_hours_min":"Hours must be at least 0","check_out_after_check_in":"Check-out must be after check-in","element_catalog_name_required":"Catalog entry name is required","element_catalog_category_required":"Category is required","element_category_name_required":"Category name is required","inventory_catalog_name_required":"Consumable name is required","element_instance_name_required":"Element name is required","element_instance_owner_required":"Exactly one of property or property group must be selected","device_guest_label_element_ineligible":"Select an eligible room name from the linked property.","code_min_length":"Code must be at least 4 characters","code_max_length":"Code must be at most 8 characters","code_time_window_pair_required":"Provide both start and end time, or leave both blank","code_pin_shared_with_reservation":"This PIN is shared with a staying guest's door access, so changing it here would change their code too. Delete this code and create a new one instead.","code_retry_not_failed":"This code is not in a failed state, so there is nothing to retry.","code_retry_queued_for_sync":"This code is waiting for the lock to come back online. It will be sent automatically once the lock reconnects.","code_retry_discovered_code":"This code was found on the lock rather than issued by SuiteOp, so there is no installation to retry.","code_retry_shadow_credential":"This entry only records that another code is shared, so it cannot be installed on its own.","code_retry_not_retryable":"This type of code is managed by its own schedule and cannot be retried here.","code_retry_window_elapsed":"This code's end time has passed, so re-sending it would install a code that opens nothing. Create a new code instead.","code_retry_read_only_provider":"This lock's codes are managed in the provider's own system, so SuiteOp cannot re-send them.","code_retry_provider_unsupported":"This lock does not support access codes, so there is nothing to re-send.","code_retry_immutable_credential":"This lock's provider generates the code itself, and none was ever issued for this entry. Retrying would create different digits, so create a new code instead.","code_retry_provider_cannot_update":"This lock's provider cannot change a code once it has reached the lock — such a code can only be left to expire. Delete this code and create a new one instead.","code_retry_remotelock_person_unlinked":"This code's lock shares one credential across several doors, and SuiteOp has not yet linked it to that shared access person — so re-sending it could change the code on doors this page cannot show. It links itself on the next sync; try again after that.","code_retry_reservation_ineligible":"This reservation has ended, so its door code is no longer being installed.","code_retry_in_progress":"This code is already being sent to the lock. Wait for it to finish before retrying.","code_duplicate_pin_on_device":"A code with this PIN already exists on this device.","code_update_remotelock_person_unlinked":"This code is not linked to its RemoteLock access person yet, so a PIN or name change cannot be applied to its other locks. The link is established by the next push or sync.","code_delete_discovered_code":"This code was discovered on the lock rather than issued by SuiteOp, so it cannot be deleted individually. Codes SuiteOp did not issue are cleared together, by re-provisioning the lock with its delete-unknown-codes take-over.","code_delete_backup_residual":"This record is the only evidence that a revoked stay is still holding this backup PIN on the lock, so it cannot be deleted while that is true. Rotate or remove the backup code itself to take the PIN off the lock; this record can be deleted once that is done.","code_device_no_integration_account":"This device has no integration account, so codes cannot be sent to it.","code_grant_start_time_clear_unsupported":"This code's lock provider cannot remove a start time once the code exists on the lock. Set a different start time, or delete this code and create a new one.","code_grant_end_time_clear_unsupported":"This code's lock provider cannot remove an end time once the code exists on the lock. Set a later end time, or delete this code and create a new one.","backup_code_manual_share_note_required":"Enter a share note","backup_code_manual_share_note_too_long":"Share note must be 500 characters or less","backup_code_manual_share_future":"Expiration must be in the future","backup_code_not_manageable":"This backup code is no longer available to manage.","device_code_provider_required":"This device is not connected to a code-capable provider.","device_code_create_unsupported":"This device does not support creating this type of access code.","reservation_source_required":"Reservation source is required","id_required":"ID is required","key_required":"Key is required","trigger_type_required":"Trigger type is required","body_required":"Body is required","template_required":"Template is required","send_type_required":"Send type is required","assignment_type_required":"Assignment type is required","node_id_required":"Node ID is required","too_many_nodes":"This agent has too many nodes (maximum 500)","edge_id_required":"Edge ID is required","edge_source_required":"Edge source is required","edge_target_required":"Edge target is required","limit_min":"Limit must be at least 1","limit_max":"Limit must be at most 100","offset_min_zero":"Offset must be at least 0","title_max_length":"Title must be 200 characters or less","search_max_length":"Search must be 200 characters or less","max_length":"Value is too long","too_short":"Value is too short","too_small":"Value is too small","too_large":"Value is too large","invalid_option":"Invalid option","invalid_format":"Invalid format","invalid_hex_color":"Invalid hex color","follow_up_at_only_for_follow_up":"Follow-up date is only allowed when status is follow up","follow_up_at_in_past":"The follow-up time must be in the future","street_required":"Street address is required","city_required":"City is required","country_code_required":"Country code is required","return_url_required":"Return URL is required","exactly_one_scope_value":"Exactly one scope value is required","template_or_name_required":"A template or task name is required","template_and_name_exclusive":"A template and a task name cannot both be set","end_date_after_start_date":"End date must be after start date","repeat_annually_requires_dates":"Set both a season start and end to repeat it every year","at_least_one_item":"At least one task item is required","at_least_one_workflow":"At least one workflow is required","temperature_limits_heat_range_invalid":"Heat range min must be less than or equal to max","temperature_limits_cool_range_invalid":"Cool range min must be less than or equal to max","temperature_limits_lanes_disjoint":"Cool range max must be at or above heat range min","temperature_limits_lanes_disjoint_hidden_precision":"Heat range min is saved slightly above cool range max — both round to the value shown. Raise cool range max to save","noise_threshold_range":"Must be between 30 and 120 dB","co2_threshold_range":"Must be between 200 and 5000 ppm","humidity_threshold_range":"Must be between 0 and 100%","temperature_threshold_range":"Must be between {min} and {max}{unit}","quiet_hour_range":"Must be between 0 and 23","humidity_range_invalid":"Minimum humidity must be less than maximum humidity","temperature_range_invalid":"Minimum temperature must be less than maximum temperature","quiet_hours_identical":"Quiet hours start and end must be different","scope_entity_required":"Entity ID is required for non-organization scopes","inbox":{"action_not_proposed":"This recap does not offer that action — reopen it and try again","analysis_superseded":"A newer analysis replaced the one you rated — reopen the recap and rate the current one","assign_others_forbidden":"Only managers can assign other people to a conversation","assignee_cannot_view_inbox":"That member cannot open inbox conversations","assignee_out_of_scope":"That member does not have access to this conversation","attachment_url_required":"Attachment URL is required","content_or_attachment_required":"Enter a message or add an attachment","content_required":"Message content is required","content_too_long":"Message is too long","edit_author_only":"You can only edit your own messages","edit_ticket_mirror_forbidden":"Edit this message in the request thread it belongs to","edit_web_channel_only":"Messages sent over this channel can't be edited","escalation_department_invalid":"The escalation department must be one of this workspace’s active departments","escalation_manager_invalid":"The escalation manager must be an active member who can open the inbox","escalation_rule_department_invalid":"A rule points at a department that is not active","escalation_rule_label_duplicated":"Each label can have only one rule","escalation_rule_label_unknown":"A rule points at a label that no longer exists","escalation_rule_one_target":"Pick either a person or a department for this label","escalation_rule_user_invalid":"A rule points at someone who is not an active member who can open the inbox","needs_help_reason_too_long":"Reason must be 500 characters or fewer","note_required":"Note cannot be empty","note_too_long":"Note must be 5000 characters or fewer","reply_web_channel_only":"You can only reply to messages in the guest portal chat","retry_body_unavailable":"The full message couldn't be loaded — try again in a moment","retry_no_body":"This message has no text to send","retry_no_reservation":"This thread isn't linked to a reservation, so it can't be sent to the PMS","retry_not_failed":"Only a message that failed to send can be retried","retry_provider_message":"This message was sent by the property management system, so it can't be retried from here","retry_still_sending":"This message is still being sent — wait for it to finish before retrying","task_action_requires_task":"A filed-task record needs the task it filed","too_many_assignees":"Too many assignees","typing_requires_user":"Sign in to use the inbox","auto_assign_rules_empty":"Pick at least one rule","auto_assign_rules_duplicated":"Each rule can only appear once","too_many_agents":"You have reached the maximum number of agents (25).","operator_department_unknown":"That department no longer exists","operator_member_unknown":"That member is no longer active","auto_assign_max_open_range":"Enter a whole number between 1 and 500","response_target_range":"Enter a whole number of minutes between 1 and 10080 (7 days)","inbox_agent_scope_forbidden":"Only a member with access to every property can change which agent answers an inbox","operator_excluded_and_named":"You can't exclude someone you've also added by name","operator_cap_not_named":"A personal cap only applies to someone you've added by name","operator_cap_duplicated":"Each person can only have one personal cap","internal_channel_only":"This conversation only accepts team chat messages","internal_channel_forbidden":"Team chat messages can't be sent in a guest conversation"},"invalid_cursor":"Invalid cursor","invalid_range":"The end of the period must come after its start","range_too_wide":"This period is too long to report on","name_required":"Name is required","otp_code_length":"Code must be exactly 6 characters","otp_code_format":"Code must be exactly 6 digits","xray":{"property_ids_required":"At least one property must be selected","property_ids_max":"Maximum 50 properties per batch","selected_elements_required":"At least one element must be selected","sub_item_requires_item":"Sub-item index requires an item index"},"subdomain_required":"Domain is required","domain_required":"Domain is required","sender_name_required":"Sender name is required","hex_color":"Must be a valid hex color (e.g., #FF5733)","inbox_label_name_max":"Label name must be 60 characters or less","inbox_label_description_max":"Description must be 500 characters or less","inbox_label_limit":"You've reached the limit of 100 labels — delete one to add another","phone_required":"Phone number is required","phone_invalid":"Enter a valid phone number","phone_verification_code_length":"Code must be exactly 6 digits","phone_verification_code_digits":"Code must contain only digits","token_required":"Token is required","password_required":"Password is required","file_name_required":"File name is required","content_type_required":"Content type is required","flat_cost_required":"Flat cost is required for this type","unit_cost_required":"Unit cost is required for this type","uuid":"Invalid identifier","email":"Invalid email address","shift_definition_name_required":"Shift definition name is required","invalid_time_format":"Invalid time format","eta_before_check_in":"Arrival time cannot be before the reservation check-in time.","departure_not_open_yet":"You can confirm your departure starting on your check-out day. Please try again then.","correction_reason_required":"Correction reason is required","correction_requires_at_least_one_field":"At least one of clock-in or clock-out must be provided","reopen_reason_required":"Reason for reopening is required","break_definition_name_required":"Break definition name is required","break_duration_min":"Break duration must be at least 1 minute","scope_xor_department_or_member":"Cannot scope to both departments and specific members — pick one","time_off_policy_name_required":"Time off policy name is required","time_off_accrual_amount_min":"Accrual amount must be greater than 0","time_off_accrual_amount_required":"Accrual amount is required","time_off_accrual_per_worked_min":"Worked time must be greater than 0","time_off_accrual_per_worked_required":"Worked time is required","time_off_yearly_cap_min":"Yearly cap can't be negative","time_off_carryover_limit_min":"Carryover limit can't be negative","time_off_advance_notice_min":"Advance notice can't be negative","name_max_length":"Name must be at most 255 characters","role_required":"Role is required","field_required":"Field is required","signers_required":"At least one signer is required","duplicate_signer_email":"Each signer must have a different email address","rejection_reason_required":"Rejection reason is required","invalid_custom_action":"Custom action must start with 'custom:'","description_required":"Description is required","invalid_date":"Invalid date","amount_positive":"Amount must be greater than zero","amount_whole_units":"Amount must be a whole number for this currency","amount_max_two_decimals":"Enter a valid amount with at most 2 decimal places","property_required":"Property is required","invalid_video_mime":"Video content type must be a video/* MIME","invalid_audio_mime":"Audio content type must be an audio/* MIME","invalid_timezone":"Select a valid timezone (for example America/New_York).","check_in_required":"Check-in date is required","check_out_required":"Check-out date is required","display_name_required":"Display name is required","message_min_length":"Message must be at least 10 characters","message_max_length":"Message must be 10,000 characters or less","signature_required":"Request signature is required","signature_invalid":"Request signature is invalid","requirement_group_title_required":"Requirement group title is required","storage":{"invalid_file_name":"Invalid file name: must be alphanumeric with extension","invalid_content_type":"Content type must be one of the allowed upload MIME types"},"cost_requires_flat_or_unit_quantity":"A cost must specify either a flat amount or unit cost × quantity","hourly_rate_required_for_hourly_compensation":"An hourly rate is required for hourly team members.","declaration_required":"Please declare a property status or skip before completing this task.","task_department_unresolved":"This task's department is missing or invalid, so its property status can't be recorded. Ask an administrator to set the task's department, then complete it again.","task_requirements_incomplete":"Some required steps or photos are still incomplete.","declaration_value_mismatch":"That value isn't valid for this column.","no_default_option_set":"No default option set is configured for this organization.","task_already_has_template":"A template has already been loaded onto this task.","checklist_items_required":"Add at least one checkbox item.","task_must_be_open_to_edit":"Reopen the task before editing requirements.","task_status_permission_denied":"You don’t have permission to change this task’s status.","task_property_detach_requires_all_access":"A task must be on one of your assigned properties. Only someone with access to all properties can create or leave a task without one.","task_item_not_editable":"This requirement was added by a template and cannot be edited here.","template_group_not_editable":"Template requirements cannot be edited from a task.","option_set_only_for_dropdown_or_condition":"Option sets only apply to dropdown or condition requirements.","requirement_group_orphaned":"This requirement group is in an unexpected state.","template_materialize_requires_property":"This task needs a property before a template can be loaded.","template_materialize_requires_open_task":"Reopen the task before loading a template.","text_too_long":"Text is too long.","checklist_items_too_many":"Too many checklist items (max 50).","subdomain_too_long":"Domain is too long (max 253 characters)","subdomain_invalid_fqdn":"Enter a valid domain like portal.example.com (lowercase, no scheme or trailing slash)","subdomain_taken":"This domain is already taken","portal_label_required":"Enter a subdomain","portal_label_invalid":"Use lowercase letters, numbers, and hyphens only","portal_label_reserved":"This name is reserved — choose another","portal_label_taken":"This name is already taken","manual_category_title_taken":"Another category already uses this title","portal_label_limit_reached":"You've reached your branded URL limit — contact support to raise it","task_template_required":"Task template is required","task_assignee_required":"Select a user to assign this task to","task_user_group_required":"Select a user group to assign this task to","task_est_cost_negative":"Estimated cost cannot be negative","task_est_time_negative":"Estimated time cannot be negative","invalid":"Invalid value","max_price_below_base":"Max price must be at least the base price.","max_quantity_below_min":"Max quantity must be at least the min quantity.","at_least_one_choice":"Add at least one choice","priced_choice_required_for_price_by_option":"Give at least one choice a price above zero.","reservation_charge_description_max":"Description must be 200 characters or less","amount_min":"Amount must not be negative","amount_max":"Amount must be $100,000 or less","quantity_min":"Quantity must be at least 1","quantity_max_four_decimals":"Enter a quantity with at most 4 decimal places","internal_notes_max":"Internal notes must be 5,000 characters or less","preview_cost_member_ids_required":"At least one memberId is required","preview_cost_member_ids_max":"Cannot preview cost for more than 20 members at once","preview_cost_member_not_in_org":"One or more memberIds do not belong to this organization","preview_cost_no_assignees":"Task has no assignee or collaborators; pass memberIds explicitly to preview cost","preview_cost_no_active_members":"No active organization-member records were found for the task's assignee or collaborators","reason_max":"Reason is too long.","reason_required":"A reason is required.","reservation_charge_manual_reason_required":"A reason is required for manual charges.","url_max":"URL is too long.","custom_field_required_for_pms_variable":"Custom field is required when display mode is PMS variable","custom_field_only_for_pms_variable":"Custom field can only be set when display mode is PMS variable","video_url_invalid":"Enter a valid video URL starting with http:// or https://","viator_partner_id_invalid":"Enter a Viator Partner ID like P00086376 (one letter + 8 digits)","manual_cover_icon_or_image":"A manual cover can be a photo or an icon, not both.","amount_must_be_positive":"Amount must be greater than zero.","workflow":{"only_scheduled_can_be_cancelled":"Only scheduled agent actions can be cancelled.","action_status_changed_before_cancel":"This agent action's status changed before the cancellation completed. Refresh to see the latest state.","publish_draft_missing":"This agent's draft couldn't be loaded, so it wasn't published. Save your changes again, then publish.","publish_invalid_definition":"Couldn't publish — this agent's draft is invalid. Fix the highlighted problems and try again.","publish_template_issues":"Couldn't publish — some steps reference information that isn't available. Fix the flagged references and try again.","publish_no_trigger":"Couldn't publish — add a trigger and choose when it fires. An agent without a trigger never runs.","publish_duplicate_schedules":"Couldn't publish — two triggers fire on the same event. Remove or change one of them.","publish_unscoped":"Couldn't publish — assign this agent to at least one property, group, or tag. An unscoped agent never runs.","ai_activation_unlock":"Couldn't publish — this agent has a step that unlocks a door, so the assistant can't switch it on. Publish it in the app instead.","unavailable_trigger":"This trigger isn't available for new agents. Choose a different trigger. If you're switching a saved agent on, publish it after editing — switching it on checks the version that's currently live as well as your draft.","version_unreadable":"Couldn't switch this agent on — its saved version couldn't be loaded. Save your changes again, then publish.","publish_state_changed":"This agent changed while you were publishing. Refresh to see its current state, then try again.","unpublish_state_changed":"This agent changed while you were unpublishing. Refresh to see its current state, then try again."},"slack":{"invalid_channel_or_user_id":"Invalid Slack channel or user ID.","message_required":"A message is required.","channel_required":"A Slack channel is required.","recipient_required":"A Slack DM recipient is required."},"reason_required_for_decline_or_review":"A reason is required when declining or sending a verification back to review.","charge_type_required":"Select how this upsell is charged.","base_price_required":"Enter a base price for this charge type.","fields_required_for_price_by_option":"Add at least one option field for this price-by-option upsell.","notification_method_required":"Choose how you'll be notified when a guest submits a request.","postcard_template_required":"Select a postcard template for this upsell.","upsell_nickname_required":"A nickname is required.","upsell_type_required":"Select an upsell type.","upsell_category_required":"Select a category.","upsell_title_required":"A guest-facing title is required.","upsell_image_required":"Add a cover image.","upsell_choice_time_invalid":"Select a valid time for this choice.","upsell_choice_number_invalid":"Enter a valid number for this choice.","bulk_update_requires_field":"At least one field is required.","due_intent_required":"Say whether this due date has a time of day","due_intent_without_due":"A time-of-day choice needs a due date","created_day_range_inverted":"The Created start date must not be after the end date.","due_day_range_inverted":"The Due start date must not be after the end date.","source_language_unsupported_with_template":"A source language can't be set when creating a task from a template.","phone_sms_region_unsupported":"Text notifications are available only for US and Canada (+1) numbers.","specific_assignee_required":"Choose a person for the Specific person option.","schedule_no_properties":"This schedule no longer covers any property. Add a property, group or tag.","schedule_template_deleted":"A task in this schedule uses a template that was deleted. Pick a different template.","schedule_window_too_wide":"The schedule can show at most 31 days at a time. Choose a shorter date range.","assignee_requires_specific_mode":"An assignee only applies to the Specific person option.","turn_variant_requires_check_out":"Same-day turn options only apply to check-out.","message_template":{"title_required":"Title is required","title_too_long":"Title is too long","body_required":"Message body is required","body_too_long":"Message body is too long","title_exists":"A template with this title already exists"},"checklist_item_move_same_template":"Checklist items can only move between groups on the same template.","inventory_binding_requires_count_group":"Stock counts can only be added to count requirements.","inventory_binding_requires_unscoped_group":"Stock counts can only be added to requirements that aren't repeated per room.","api_key":{"name_required":"API key name is required","name_too_long":"Name must be 100 characters or less","permissions_required":"Select at least one permission"},"oauth_consent":{"consent_code_required":"Missing authorization request.","organization_required":"Please select an organization."},"invalid_currency":"Invalid currency code","photo_ai_prompt_photo_only":"AI verification prompts only apply to photo requirements.","photo_ai_prompt_new_group_only":"AI verification prompts cannot be added when appending to an existing checklist.","rule_ids_required":"Select at least one agent","rule_ids_max":"You can select up to 100 agents at once","analytics_metric_invalid_for_category":"Metric is not available for this category","duplicate_widget":"This widget can only be added once","too_many_analytics_widgets":"Too many analytics tiles","bulk_edit_empty_patch":"Fill in at least one field to apply.","bulk_edit_hour_range":"Hour must be between 0 and 23","bulk_edit_validation_code_max":"Validation code must be 8 characters or less","bulk_edit_value_too_long":"Value is too long","bulk_edit_hours_max":"Hours must be 8760 or less","bulk_edit_too_many_tags":"Select 100 tags or fewer","battery_threshold_range":"Battery threshold must be between 1 and 99","bulk_edit_minute_range":"Minutes must be between 0 and 59","bulk_status_too_many_properties":"Status can be changed on at most 1,000 properties at a time.","payment_account_required":"Select a payment account to charge for this upsell.","mcp_server_name_reserved":"This name is reserved for a catalog integration","collaborators_required":"Select at least one collaborator","lock_targets_required":"Select at least one lock device","lock_must_be_provisioned":"This lock must be provisioned before its access codes can be managed.","lock_provisioning_in_progress":"This lock is still being provisioned. Try again in a few minutes.","device_provisioning_confirmation_required":"Linking this lock starts provisioning, which must be confirmed first.","device_not_code_capable_lock":"This device is not a lock that supports access codes.","device_must_be_linked_before_provisioning":"Link this lock to a property before provisioning it.","device_link_selection_invalid":"Select at least one device to link, without duplicates.","device_assignment_duplicate_ids":"Each device can appear only once in an assignment change.","device_assignment_overlapping_ids":"A device cannot be linked and unlinked in the same assignment change.","device_assignment_archived":"Archived devices cannot be linked to a property.","truvi_no_applicable_rule":"No Screen & Protect rule applies to this reservation. Check the rule’s property assignment and its booking-source, length-of-stay and returning-guest conditions.","truvi_damage_waiver_required":"Add an active, enabled damage-waiver step with a positive amount and an active payment account before using the ‘When guest purchases damage waiver’ trigger.","truvi_screen_protect_coverage_required":"A Screen & Protect rule triggers on damage-waiver purchase and still covers properties this change would leave without a usable waiver. Switch that rule off, or narrow the properties it applies to, first.","truvi_screen_protect_coverage_rules":"{count, plural, one {Blocking rule: {rules}} other {Blocking rules: {rules}}}","truvi_screen_protect_coverage_unnamed_rule":"Unnamed Screen & Protect rule","truvi_screening_unavailable":"Screen & Protect is temporarily unavailable — this is a configuration problem on our side, not with this reservation. Our team has been notified.","truvi_screening_temporarily_unavailable":"Screening is temporarily unavailable. Nothing on this reservation needs changing — try again in a few minutes.","truvi_rule_link_conflict":"Screening was not started: another step on this reservation already holds this Screen & Protect rule, and with more than one Screen & Protect step configured the attempt could not be shown or reset. Nothing was charged.","sex_offender_check_unavailable":"The sex offender check is temporarily unavailable. Our team has been notified — please try again shortly.","sex_offender_check_no_latin_name":"This ID doesn't give a first and last name in Latin script, so the US sex offender registry can't be searched for this guest. Review the ID manually.","sex_offender_check_no_guest_name":"No guest name is available from the ID or the reservation, so the US sex offender registry can't be searched. Review the ID manually.","reservation_dates_pms_owned":"Check-in and check-out dates are managed by the connected PMS. Change the date there and it will sync back here — the time of day can still be edited from this screen.","reservation_property_required":"This reservation must be assigned to a property before its access codes can be managed.","webhook_delete_requires_push_enabled":"Push is disabled for this account — enable push before deleting webhooks.","webhook_delete_not_reregisterable":"This provider's webhook can't be re-created by SuiteOp — deleting it would stop event delivery until the account is reconnected.","webhook_retry_platform_managed":"This provider's webhook is registered once for the whole SuiteOp app, not per account — there is nothing to re-subscribe here.","webhook_retry_unsupported_for_provider":"Webhook setup can't be retried for this provider. If events stopped arriving, reconnect the account.","webhook_retry_account_not_active":"This account isn't active, so its webhook setup can't be retried. Reconnect the account and try again.","pms_account_requires_reconnect":"No credentials are available for this account — reconnect it and try again.","pms_provider_unknown":"This PMS provider isn't supported here, so this action can't run. Reconnect the account or contact support.","pms_review_sync_unsupported":"This PMS doesn't support review sync.","pms_inbox_backfill_unsupported":"This PMS doesn't support importing past conversations.","pms_reservation_external_id_mismatch":"This reservation no longer matches the booking it was imported from, so it can't be refreshed.","pms_reservation_no_integration_account":"This reservation isn't linked to a connected PMS account, so it can't be refreshed.","pms_not_a_pms_account":"This integration isn't a PMS account, so this action doesn't apply to it.","pms_disconnect_in_progress":"The account is still finishing in-flight sync work — try disconnecting again in about 30 seconds.","pms_property_not_linked":"This property isn't linked to a PMS listing yet.","pms_webhook_url_not_configured":"Webhooks can't be registered because no public address is configured for this server. Contact support.","pms_custom_fields_unsupported":"This PMS doesn't support custom fields.","pms_custom_fields_unsupported_upstream":"The PMS behind this integration doesn't support custom fields.","pms_custom_field_not_initialized":"This custom field isn't set up on the account yet — initialize custom fields first.","pms_webhook_list_failed":"We couldn't read this account's existing webhooks, so nothing was changed. Try again in a moment.","pms_custom_field_init_timeout":"Setting up custom fields is taking longer than expected. It may still finish — check back in a few minutes.","webhook_payload_invalid":"The webhook payload couldn't be read.","access_code_length_range":"Must be between 4 and 8 digits","access_code_buffer_range":"Must be between 0 and 300 minutes","clock_in_grace_range":"Must be between 0 and 120 minutes","location_retention_range":"Must be between 7 and 62 days","precheck_retention_range":"Enter a number of days between 1 and 36,500","latitude_range":"Latitude must be between -90 and 90","longitude_range":"Longitude must be between -180 and 180","date_format":"Date must be in YYYY-MM-DD format","integer_required":"Enter a whole number","number_required":"Enter a number","choices_not_allowed":"Choices are only allowed on select fields","member_code_digits":"Code must contain 4–8 digits","member_code_collision":"This code conflicts with another active access code","signup_link_required":"A signup link is required","digits_only":"Digits only","establishment_code_10_digits":"Establishment code must be exactly 10 digits","establishment_code_idub_digits":"Establishment code must be 12 to 14 digits","precheck_step_has_no_questions":"This step has no questions yet. Add at least one question to it before attaching it to a reservation.","precheck_step_type_missing":"This step has no type set, so it can't be added to a reservation.","verification_step_already_attached":"This step is already on the reservation.","verification_step_not_attached":"This step is part of the property's configured flow, so it can't be removed from a single reservation. Waive it instead if this guest shouldn't be asked for it.","verification_step_engaged":"This step can't be removed because the guest has already worked on it. Waive it instead, so what they submitted is kept.","verification_step_has_live_payment":"This step's payment is still active. Refund the charge or release the authorization hold before removing the step.","verification_screen_and_protect_already_present":"This reservation already has a Screen & Protect step.","blacklist":{"key_version_required":"Key version is required","key_version_too_long":"Key version is too long","key_version_invalid":"Key version contains invalid characters","name_required":"First and last name are required","name_too_long":"Name must be 200 characters or less","reason_required":"A documented reason is required","reason_too_long":"Reason must be 500 characters or less","override_reason_required":"An override reason is required","override_reason_too_long":"Override reason must be 500 characters or less","identifier_required":"At least one valid identifier is required","identifier_too_long":"Identifier is too long","too_many_identifiers":"Add no more than 50 identifiers","update_required":"Change at least one field","search_too_long":"Search must be 200 characters or less","erasure_confirmation_required":"Confirm permanent erasure","government_id_key_too_short":"Government ID matching key is too short","government_id_current_pair_required":"Current government ID key and version must be provided together","government_id_previous_pair_required":"Previous government ID key and version must be provided together","government_id_versions_must_differ":"Government ID key versions must differ","government_id_keys_must_differ":"Government ID matching keys must differ","import_empty":"Add at least one profile to import","import_too_many":"Import no more than 500 profiles at once"},"offer_cover_icon_or_image":"An offer cover can be a photo or an icon, not both.","opportunity_thresholds_must_ascend":"Thresholds must ascend: low cannot exceed medium, and medium cannot exceed high.","opportunity_bundle_spans_properties":"These issues are at different properties. Select issues from one property to create a single task.","invalid_catalog_key":"Use lowercase letters, numbers, dots and underscores only — for example \"bathroom.shower_pressure\".","payment_account_default_cannot_be_cleared":"This is the default payment account. Make another account the default instead of clearing this one — an organization with no default cannot take guest payments.","payment_account_default_cannot_be_deactivated":"This is the default payment account. Make another account the default before deactivating this one — an organization with no active default cannot take guest payments.","payment_account_inactive_cannot_be_default":"An inactive payment account cannot be made the default — guest payments are only taken on an active account. Activate it first, then make it the default.","payment_account_default_promotion_failed":"That payment account could not be made the default — it is either inactive or no longer available. Guest payments are only taken on an active account.","payment_account_has_live_payments":"{count, plural, one {This payment account has # payment still depending on it. Refunds, disputes and reconciliation all resolve through this account, so deleting it would leave them with no way to settle. To stop taking new payments on it, deactivate it instead — if it is the default, make another account the default first.} other {This payment account has # payments still depending on it. Refunds, disputes and reconciliation all resolve through this account, so deleting it would leave them with no way to settle. To stop taking new payments on it, deactivate it instead — if it is the default, make another account the default first.}}","payment_account_has_live_payments_capped":"This payment account has more than {cap, number} payments still depending on it. Refunds, disputes and reconciliation all resolve through this account, so deleting it would leave them with no way to settle. To stop taking new payments on it, deactivate it instead — if it is the default, make another account the default first.","payment_account_has_live_payments_unknown_count":"This payment account still has payments depending on it. Refunds, disputes and reconciliation all resolve through this account, so deleting it would leave them with no way to settle. To stop taking new payments on it, deactivate it instead — if it is the default, make another account the default first.","vacancy_final_offset_required":"Enter how many days before arrival","vacancy_final_offset_without_flag":"Remove the days-before-arrival value or enable the final visit","reschedule_config_required":"Choose a target day, a look-ahead window and a fallback","reschedule_config_without_flag":"Turn the reschedule switch on, or clear these fields","reschedule_window_exceeds_interval":"The look-ahead cannot exceed the recurrence interval","provider_required":"Provider is required","invalid_idempotency_key":"Invalid idempotency key","time_off_policy_required":"Time off policy is required","time_off_start_date_required":"Start date is required","time_off_end_date_required":"End date is required","work_day_hours_range":"Must be between 0 and 24 hours","auto_clock_out_hours_range":"Must be between 1 and 24 hours","window_time_shape":"Pick a time for the fixed-time anchor","window_finish_before_start":"The finish must come after the start","bulk_patch_empty":"Fill in at least one field","capacity_required_assignees_range":"Must be between 1 and 5 people","capacity_estimated_minutes_range":"Must be between 1 and 14400 minutes","capacity_whole_number":"Must be a whole number","capacity_status_invalid":"Select at least one capacity status, without duplicates.","capacity_invalid_number":"Enter a valid number","permission_to_enter_requires_ask":"Turn on “Request permission to enter” before making it mandatory","identity_check_cannot_be_disabled":"This check can't be switched off.","identity_policy_action_not_allowed":"That option isn't available for this check.","feedback":{"kind_required":"Choose a feedback type","body_min":"Please write at least 10 characters","body_max":"Please keep it to 4000 characters or fewer","video_incomplete":"The recording is incomplete. Remove it and record again."},"inbox_agent_name_max":"Name must be 60 characters or fewer","inbox_agent_instructions_max":"House style must be 2000 characters or fewer","inbox_skill_instructions_max":"A skill instruction must be 1000 characters or fewer","inbox_skill_when_to_use_max":"A skill trigger must be 160 characters or fewer","inbox_agent_confidence_range":"Confidence must be a whole number between 50 and 100","inbox_agent_reply_delay_range":"Reply delay must be a whole number of minutes between 1 and 120","booking_source_canonical_row_locked":"This is the standard source for its channel and cannot be pointed at another one. Map the provider's own source name instead.","inbox_skill_body_max":"Skill instructions must be 20,000 characters or fewer","inbox_skill_description_max":"A skill description must be 200 characters or fewer","code_time_window_order":"End time must be after start time.","code_time_window_unsupported":"This lock does not support the selected time window.","code_pin_provider_generated":"This lock generates its own PIN. Leave the PIN empty.","code_pin_generation_failed":"A PIN could not be generated with this lock’s rules. Try again or enter one manually.","code_pin_required":"Enter a PIN for this lock.","code_pin_invalid":"The PIN must use the length and digits supported by this lock.","code_create_account_unavailable":"This integration is unavailable for creating codes. Check its connection and push settings.","code_end_requires_start":"An end time requires a start time.","code_start_time_required":"Enter a start time.","code_end_time_required":"Enter an end time.","task_element_requires_property":"Pick a property before linking an element.","task_element_not_on_property":"That element does not belong to this property.","email_test_send_out_of_grant_upsell":"This template includes an offer from properties outside your access, so a test send isn’t available to you.","email_test_send_document_unreadable":"This template’s content can’t be checked against your property access, so a test send isn’t available to you.","guest_directory":{"search_too_long":"Search must be 200 characters or less","date_range_inverted":"The end date must be on or after the start date"},"authority_reporting":{"unknown_traveller":"That traveller is no longer on this reservation. Refresh the page before trying again — your answers stay as they are."},"damage_claim_note_required":"Describe what happened."},"verification_provider":{"slow":{"title":"Provider is slow to respond","body":"We've been waiting on the verification provider for {duration}. Decisions usually take a few seconds. Nothing to do — the panel will update once the provider replies."},"outage":{"title":"Provider may be down","body":"We've been waiting on the verification provider for {duration}. The provider could be having an outage. If this persists, ask the guest to retry the step later."},"recent_failure":{"title":"Provider just failed","body":"The most recent verification step failed. If the failure pattern continues, the upstream provider is likely having an outage."}},"verification_risk":{"aria_label":"Risk: {band}, score {score} out of 100","bands":{"low":"Low risk","medium":"Medium risk","high":"High risk"},"popover":{"title":"Verification risk","description":"Heuristic score from blacklist, operator decisions, and step results. Use the flags below — don't approve on the band alone.","flags_heading":"Contributing flags","no_flags":"No risk signals on this verification."},"flags":{"blacklisted":"Guest is on the blacklist","operator_declined":"Verification was declined by an operator","operator_review":"Verification is in manual review","flagged_answers":"Guest answers were flagged for review","step_declined":"Step was declined","manual_review_required":"Step requires manual review","step_failed":"Step result indicates a failure","id_check_failed":"ID check failed","id_check_review":"ID check needs review","id_name_mismatch":"ID name doesn't match the reservation","id_face_mismatch":"Selfie doesn't match the ID photo","id_face_duplicate":"Selfie appears to be a photo of the ID","id_face_check_unavailable":"Face match could not be completed","truvi_flagged":"Truvi Screen & Protect flagged this guest","screening_not_run":"Truvi Screen & Protect was never run","awaiting_review":"Step is awaiting operator review"}},"white_labeling":{"page_title":"White Labeling","copy":"Copy","tabs":{"custom_url":"Custom URL","email_domain":"Email Domain"},"custom_url":{"add":"Add Custom URL","empty":"No custom URLs configured","empty_description":"Claim a free SuiteOp address for your guest portal, or connect a domain you already own.","primary_badge":"Default","set_primary":{"button":"Set as Default","helper":"New brands will be served on this domain. You can still pick a different one per brand."},"cache_repair":{"button":"Republish portal branding","pending":"Republishing…"},"columns":{"domain":"Domain","type":"Type","status":"Status","created_at":"Created"},"type":{"portal":"Guest Portal","booking_engine":"Booking Engine"},"status":{"enabled":"Enabled","disabled":"Disabled"},"create":{"title":"Create Custom URL","kind":{"title":"Hostname","suiteop_subdomain":"Hosted by SuiteOp","custom_domain":"Your own domain"},"label":"Subdomain","label_placeholder":"stay","label_help":"This becomes your guest portal address — no DNS setup required.","subdomain":"Domain","subdomain_placeholder":"portal.yourdomain.com","subdomain_help":"Enter the full domain you want to use","type":"URL Type","type_placeholder":"Select a type","availability":{"available":"Available"},"taken":"This name is already taken.","reserved":"This name is not available.","invalid":"Enter a valid name.","retry_later":"We couldn't reach the naming service. Try again in a moment.","submit":"Create"},"detail":{"title":"Custom URL Settings","tabs":{"dns":"DNS","seo":"SEO","customization":"Customization","code":"Custom Code","google_maps":"Google Maps"}},"dns":{"instructions":"In your domain DNS provider (e.g. GoDaddy, Google, etc.), add the following records:","proxy_warning":"Note: if your DNS provider is Cloudflare or another CDN, make sure to select 'DNS Only'. The configuration will not work when Proxy is enabled.","record_type":"Type","record_name":"Name","record_content":"Content","acme_label":"SSL Certificate Verification","acme_provisioning":"SSL verification record is being provisioned by Cloudflare. This may take a few minutes after creating the custom URL.","app_label":"Domain Routing","check_dns":"Check DNS","verified":"Verified","not_verified":"Not Verified","copied":"Copied to clipboard","verify_button":"Verify DNS","verified_active":"DNS verified — your white-label URL is live.","verified_inactive":"Some DNS records are missing. The URL stays inactive until both records resolve.","auto_provisioned_notice":"This URL is managed by SuiteOp and is always live — no DNS setup required.","status_live":"Live","status_inactive":"Inactive","default_always_active_badge":"Default — always active","verify_required_pill":"Verify required"},"editing_locked":{"title":"Verify your DNS to unlock these settings","description":"Once both DNS records resolve, you'll be able to edit SEO, customization, and custom code on this domain."},"seo":{"favicon":"Favicon","favicon_help":"Square image (typically 32×32 or larger). Shown in browser tabs and bookmarks.","site_name":"Site Name","site_name_placeholder":"Your Brand Name","meta_title":"Meta Title","meta_title_placeholder":"Page title for search engines","meta_description":"Meta Description","meta_description_placeholder":"Brief description for search results","og_image":"OpenGraph Image","og_image_help":"Wide preview image (1.91:1 / ~1200×630). Shown when guests share the link on social media.","welcome_message":"Welcome Message","welcome_message_help":"Greeting shown on the landing page before guests verify. Translated automatically into your active languages.","welcome_message_placeholder":"Welcome to your stay!","save":"Save SEO Settings"},"customization":{"colors_moved_notice":"Brand colors are managed on the Portals settings page — a custom URL groups the typography, SEO, and hostname; the brand row owns the colors applied to the guest portal.","edit_brand_colors":"Edit brand colors","brand_linked":"Brand colors come from {brandName}.","no_brand_linked":"No brand is linked to this URL yet — guests will see SuiteOp's default colors. Link a brand to apply custom colors.","link_a_brand":"Link a brand","header_font":"Header Font","body_font":"Body Font","background_image":"Background Image","background_image_help":"Hero image shown on the pre-verify landing page (16:9, ~1920×1080).","external_booking_url":"External Booking Link","external_booking_url_placeholder":"https://booking.example.com","save":"Save Customization"},"code":{"head_code":"Header Code","head_code_help":"HTML/JS injected into the '<head>' section","body_code":"Body Code","body_code_help":"HTML/JS injected into the '<body>' section","save":"Save Custom Code"},"google_maps":{"api_key":"Google Maps API Key","api_key_placeholder":"Enter your API key","save":"Save","delete":"Remove Key"},"delete":{"title":"Delete Custom URL","description":"Are you sure you want to delete this custom URL? This will remove the domain configuration from Cloudflare and cannot be undone.","confirm":"Delete","cancel":"Cancel","last_active_blocked":"This is your only live portal address — activate another one before deleting this."},"toast":{"created":"Custom URL created successfully","seo_updated":"SEO settings saved","customization_updated":"Customization settings saved","code_updated":"Custom code saved","maps_key_updated":"Google Maps key saved","maps_key_deleted":"Google Maps key removed","deleted":"Custom URL deleted successfully","set_primary":"Custom URL set as the default domain","cache_republished":"Portal branding republished","cache_republish_failed":"Couldn’t republish portal branding. Try again.","create_failed":"Failed to create custom URL","update_failed":"Failed to save settings","delete_failed":"Failed to delete custom URL","welcome_link_failed":"Welcome message saved, but couldn't link it to this URL — please try saving again"}},"email_domain":{"add":"Add domain","empty":"No sending domains yet","empty_description":"Add a domain you own so guest emails come from you, not from SuiteOp.","columns":{"domain":"Domain","status":"Status","created_at":"Created"},"status":{"verified":"Verified","pending":"Pending","active":"Active"},"create":{"title":"Add a sending domain","domain":"Domain","domain_placeholder":"mail.yourdomain.com","submit":"Add domain","toast_created":"Domain added — copy the DNS records and verify","domain_hint":"Use a subdomain you control, like mail.yourdomain.com. Email on your main domain keeps working."},"detail":{"title":"Email Domain Settings","dns_instructions":"Add the following DNS records to verify your domain:","record_type":"Type","record_name":"Name","record_content":"Content","mail_cname":"Mail CNAME","dkim1":"DKIM 1","dkim2":"DKIM 2","verify":"Verify Domain","verified":"Verified","not_verified":"Not Verified"},"senders":{"title":"Email Senders","add":"Add Sender","empty":"No senders yet — verify a domain first.","name":"Sender Name","name_placeholder":"Your Company","email":"Sender Email","email_placeholder":"noreply@yourdomain.com","reply_to":"Reply To","reply_to_placeholder":"support@yourdomain.com","type":"Type","type_placeholder":"Select type","type_options":{"single_sender":"Single Sender","domain_verified":"Domain Verified"},"submit":"Add Sender","default":"Default","verified":"Verified","awaiting":"Awaiting confirmation","resend":"Resend email","resend_pending":"Sending…","resend_success":"Confirmation email re-sent","create":{"title":"Add a sender","name":"Display name","name_placeholder":"Front desk","email":"Email address","email_placeholder":"front-desk@yourdomain.com","reply_to":"Reply-to (optional)","reply_to_placeholder":"hello@yourdomain.com","domain":"Authenticated domain","domain_none":"Single-sender (no domain)","submit_domain":"Create","submit_single":"Send confirmation email","toast_created":"Sender created"},"delete":{"title":"Remove this sender?","description":"Agents that send from {sender} will fall back to the default sender.","cancel":"Cancel","confirm":"Remove","toast_deleted":"Sender removed"}},"delete":{"title":"Remove this domain?","description":"Agents that send from {domain} will fail until you reconfigure them.","confirm":"Remove","cancel":"Cancel","toast_deleted":"Domain removed"},"delete_sender":{"title":"Delete Sender","description":"Are you sure you want to delete this email sender?","confirm":"Delete","cancel":"Cancel"},"toast":{"created":"Domain added","verified":"Domain verified","verification_failed":"Verification failed — check your DNS records","deleted":"Email domain deleted","sender_created":"Email sender added","sender_deleted":"Email sender deleted","create_failed":"Failed to authenticate domain","delete_failed":"Failed to delete email domain","dns_unreachable":"We couldn't check your DNS just now — nothing changed. Try again in a moment."},"add_sender":"Add sender","verify_now":"Verify now","verifying":"Verifying...","manage":"DNS records","hide_dns":"Hide DNS records","table":{"domain":"Domain","status":"Status","dns_records":"DNS records","primary":"Primary sending domain","secondary":"Secondary"},"callout":{"active":"White labeling is active","active_sub":"Guests see {email} — this sender is verified and ready to send.","inactive":"White labeling is not active yet","inactive_sub":"Guest emails still come from SuiteOp. Verify a sender address, or the sending domain it uses, to send from your own.","verified_count":"{verified} of {total} verified"},"cards":{"domains_title":"Sending domains","domains_sub":"Verify a domain you own so emails come from you, not from SuiteOp.","senders_title":"Sender identities","senders_sub":"The names and addresses guests see in their inbox."},"dns":{"header":"Add these records at your DNS provider","copy_all":"Copy all","no_records":"DNS records not yet generated.","toast":{"copied_all":"All DNS records copied to clipboard"},"last_checked":"Last checked {time}","record_mismatch":"Not matching yet","ownership":{"label":"Domain ownership","hint":"Proves this domain is yours. Publish it at your DNS provider along with the records above.","not_published":"TXT record not found yet, or it doesn't match","unreachable":"We couldn't reach DNS to check this record"}},"preview":{"title":"Inbox preview","sub":"An example of how your sender appears in a guest's inbox.","empty":"Add a verified sender to see the preview.","subject":"Your check-in for The Kessler Loft →","preview_body":"Hey Sarah — we can't wait to host you. Here's your door code, WiFi, and a few neighborhood tips...","via":"via {domain}","sample_badge":"Sample"},"record_chip":{"unknown":"DMARC: configure separately"},"manage_templates":"Manage email templates","actions":{"delete_domain":"Delete domain","delete_sender":"Delete sender"}}},"workflows":{"page":{"title":"Agents","add_workflow":"Add Agent","search_placeholder":"Search agents…","no_results":"No agents found","no_results_description":"Agent automation rules will appear here."},"columns":{"name":"Name","trigger":"Trigger","folder":"Folder","status":"Status","created":"Created","updated":"Updated","active":"Active","inactive":"Inactive","untitled":"Untitled","actions":"Actions"},"row_actions":{"open":"Open","clone":"Clone","clone_aria":"Clone this agent","cloning":"Cloning…","cloned_toast":"Agent cloned","clone_failed_toast":"Couldn't clone agent"},"editor":{"not_found_title":"Agent not found","not_found_description":"No agent with ID {id} exists.","refresh_failed":"Couldn't refresh this agent. You're seeing the last loaded version.","read_only_notice":"Read-only — you don't have permission to edit this agent.","untitled":"Untitled","rename_aria":"Rename agent","status":{"saving":"Saving…","saved":"Saved","unsaved":"Unsaved changes"},"settings_toggle":"Toggle settings panel","published":"Published","draft":"Draft","has_draft_changes":"Draft changes","publish":"Publish","unpublish":"Unpublish","publish_success":"Agent published successfully","unpublish_success":"Agent unpublished","unpublished_leave_title":"Unpublished changes","unpublished_leave_description":"Your changes are saved as a draft, but the live agent keeps running the previously published version until you publish.","unpublished_leave_stay":"Keep editing","unpublished_leave_leave":"Leave anyway","unsaved_leave_title":"Unsaved changes","unsaved_leave_description":"Couldn't save your changes. They will be lost.","lint_issue_count":"{count, plural, one {# template issue} other {# template issues}}","lint_popover_title":"Template issues","lint_section_blocking":"Blocks publishing","lint_section_advisory":"Suggestions","config_issue_count":"{count, plural, one {# misconfigured node} other {# misconfigured nodes}}","config_popover_title":"Misconfigured nodes","config_popover_subtitle":"These nodes are missing required configuration and won't run — fix them before publishing.","config_node_prefix":"Missing:","node_misconfigured":"Missing required configuration","publish_blocked_config_toast":"Fix the misconfigured nodes before publishing","context_popover_title":"Missing trigger data","context_popover_subtitle":"These nodes read data the triggers that reach them don't provide, so they would run empty or never run at all. Fix them, or change the trigger, before publishing.","publish_blocked_context_toast":"Fix the nodes that need data their triggers don't provide","context_issue_token":"\"{template}\" would be empty — this trigger provides no {context} data","context_issue_action":"This action needs {context} data that its trigger doesn't provide","context_issue_condition":"This condition can never pass — this trigger provides no {context} data","context_issue_guest_recipient":"The guest recipient can't be resolved — this trigger provides no reservation data, so the email fails","context_issue_offset_anchor":"The delay is ignored — this trigger has no date to count from, so the action runs immediately","context_issue_generic":"This node reads data its trigger doesn't provide","publish_failed_toast":"Couldn't publish this agent.","save_failed_toast":"Couldn't save your changes.","save_failed_reason_toast":"Couldn't save your changes: {reason}","clear_test_failed_toast":"Couldn't clear the test data. Try again.","config_dialog_close":"Fix issues","validation":{"action_type_required":"Action type","email_template_required":"Email template","email_sender_required":"Sender","email_recipients_required":"Recipients","notification_title_required":"Title","assignee_required":"Assignee","user_group_required":"User group","department_required":"Department","assignment_type_required":"Assignment type","slack_channel_required":"Slack channel","slack_dm_member_required":"Slack DM recipient","slack_message_required":"Message","task_template_required":"Task template","collaborators_required":"Select at least one collaborator","http_url_required":"URL","http_method_required":"HTTP method","zapier_hook_required":"Zapier hook","service_fee_required":"Upsell / service fee","js_code_required":"JavaScript code","thermostat_mode_required":"Thermostat mode","thermostat_mode_unexecutable":"Supported thermostat mode","thermostat_mode_fallback_unexecutable":"Supported fallback mode","device_type_required":"Device type","agent_prompt_required":"Agent prompt","custom_action_required":"Custom action","custom_action_params_outdated":"Newly required action parameters","trigger_schedule_required":"Trigger event","branch_conditions_required":"Branch conditions","condition_criteria_required":"Condition needs criteria","expression_condition_left_required":"Expression condition needs a value","expression_condition_right_required":"Expression condition needs a comparison value","loop_source_required":"Loop source","service_fee_source_required":"Select an upsell or configure a custom fee","service_fee_name_required":"Fee name is required","service_fee_amount_required":"Amount is required","service_fee_account_required":"Payment account is required","lock_targets_required":"Select at least one lock device","refund_scope_unsupported":"Unsupported refund scope"},"publish_no_actions_title":"Publish without any actions?","publish_no_actions_body":"This agent has a trigger but no action steps, so it will run when triggered but won't do anything. Add an action, or publish anyway.","publish_anyway":"Publish anyway","lint":{"code":{"unknown_variable":"\"{token}\" isn't a recognized variable — it will be blank when the agent runs.","unknown_variable_casing":"\"{token}\" has the wrong capitalization — use \"{suggestion}\".","unknown_modifier":"\"{token}\" uses an unsupported modifier — the action will fail when it runs.","unescaped_json_token":"\"{token}\" sits inside a quoted string in a JSON body — a quote, backslash or line break in its value will break the request. Use \"{suggestion}\".","unsafe_href":"\"{token}\" will render as a dead link.","unknown_source":"\"{token}\" refers to step \"{source}\", which no longer exists.","not_upstream":"\"{token}\" refers to step \"{source}\", which does not run before this one — its output is not available here.","unknown_field_camel_case":"\"{token}\" will not resolve — \"{source}\" fields use camelCase, so \"{field}\" will be blank.","unknown_field_camel_case_suggestion":"\"{token}\" will not resolve — \"{source}\" fields use camelCase. Use the merge field \"{suggestion}\" instead.","unknown_field_not_declared":"\"{field}\" is not a declared output of step \"{source}\".","unknown_field_not_traversable":"\"{field}\" on step \"{source}\" is of type {actualType} — you cannot read a field inside it.","type_mismatch":"This condition expects {expectedType}, but \"{token}\" is declared as {actualType}."}},"recovery_conflict_title":"Restore your unsaved changes?","recovery_conflict_description":"This agent was changed somewhere else while your unsaved changes were kept in this tab. Restore your changes over the current version, or keep the current version and discard them.","recovery_conflict_recover":"Restore my changes","recovery_conflict_keep_server":"Keep current version","recovery_unreadable_toast":"Couldn't restore your unsaved changes.","recovery_capture_failed_toast":"Couldn't keep your unsaved changes in this tab. Reloading the page will lose them."},"version_history":{"title":"Version History","published_label":"Published","draft_label":"Draft","restore":"Restore","restore_confirm":"Restore this version as the current draft?","restore_confirm_unsaved":"You have unsaved changes. Restore to version {version}? Your current draft changes will be replaced.","restore_confirm_unpublished":"This workflow has saved changes that aren't published yet. Restore to version {version}? Your current draft changes will be replaced.","restore_success":"Version restored as draft","load_failed":"Failed to load version","no_versions":"No version history yet","description_placeholder":"Version description","viewing_version":"Viewing version {version}","back_to_draft":"Back to draft","preview_readonly":"This is a read-only preview. Restore to edit.","cancel":"Cancel"},"canvas":{"add_trigger":"Add Trigger","add_trigger_title":"Add new trigger","add_action":"Add Action","add_node":"Add node","trigger_label":"Trigger","add_first_step":"Add first step","add_first_step_description":"Click to create your first trigger","close_context_menu":"Close context menu","delete_edge":"Delete edge","filters":"Filters","condition":"Condition: {condition}","more_count":"+{count} more","action_label":"Action","select_trigger_event":"Select a trigger event","parent_action_succeeds":"parent action succeeds","parent_action_fails":"parent action fails","fit_view":"Fit to screen","zoom_in":"Zoom in","zoom_out":"Zoom out","reset_zoom":"Reset zoom","tidy_up":"Tidy up","add_logic":"Add Logic"},"branch":{"title":"Condition","success":"true","fail":"false","add_failure_node":"Add failure node","add_success_node":"Add success node","condition_logic":"Condition Logic","logic_and":"AND","logic_or":"OR","logic_and_description":"All conditions must match for the true path.","logic_or_description":"Any condition can match for the true path.","conditions_label":"Conditions","conditions_description":"Define when this branch should take the true path.","add_output_condition":"Output Condition","add_context_condition":"Context Condition"},"expression_builder":{"section_title":"Output Conditions","section_description":"Compare values from upstream nodes using expressions.","domain_section_title":"Context Conditions","add_condition":"Add condition","remove_condition":"Remove condition","value":"Value","compare_value":"Compare to","left_placeholder":"e.g. node.field","right_placeholder":"e.g. abc","op_equals":"equals","op_not_equals":"not equals","op_contains":"contains","op_not_contains":"does not contain","op_starts_with":"starts with","op_ends_with":"ends with","op_greater_than":"is greater than","op_less_than":"is less than","op_greater_than_or_equals":"is greater than or equals","op_less_than_or_equals":"is less than or equals","op_is_empty":"is empty","op_is_not_empty":"is not empty","op_regex_matches":"matches regex","value_type":"Value type","operator_label":"Operator","type_string":"Text","type_number":"Number","type_boolean":"Boolean","boolean_true":"true","boolean_false":"false","op_is":"is","op_is_not":"is not"},"loop":{"each_item":"loop","complete":"done","add_body_node":"Add node to loop body","add_done_node":"Add node after loop"},"sidebar":{"triggers_label":"Triggers","actions_label":"Actions","logic_label":"Logic","integrations_label":"Tools","provider_action_count":"{count, plural, one {# action} other {# actions}}","back_to_integrations":"All tools","back_to_trigger_categories":"All categories","branch_label":"Conditional Branch","branch_description":"Split the agent based on conditions","search_triggers":"Search triggers…","search_actions":"Search actions…","search_logic":"Search logic nodes…","search_both":"Search triggers or actions…","no_matching_triggers":"No matching triggers.","no_matching_actions":"No matching actions.","no_matching_nodes":"No matching nodes.","types_of_action":"Types of Action","add_node_title":"Add a Node","add_node_subtitle":"Choose a category to get started.","add_title":"Add a {type}","subtitle_trigger":"Select a trigger event.","subtitle_action":"Select an action type.","subtitle_integration":"Select a connected tool.","subtitle_logic":"Add branches, loops, or custom code.","subtitle_both":"Select a trigger or action type.","time_offset":"Time Offset","type":"Type","advance_notice":"Advance Notice","category":"Category","connected_actions":"Connected Actions","connected_actions_count":"Connected Actions ({count})","no_actions_connected":"No actions connected yet. Use the + button on the canvas to add one.","missing_parent_node":"Missing parent node","parent_schedule_mismatch":"Parent schedule mismatch","trigger_title":"Trigger","no_event_selected":"No event selected","branch_title":"Branch","loop_title":"Loop Over Items","loop_label":"Loop Over Items","loop_description":"Iterate over an array and run actions for each item","loop_source_label":"Source Array","loop_source_placeholder":"Select a source array...","loop_source_help":"Select an array field from an upstream node to iterate over.","loop_no_sources":"No array fields available. Initialize upstream nodes first.","loop_iterating_over":"Iterating over {nodeName} → {fieldName}","loop_select_source_hint":"Select a source array above to see available variables.","loop_max_label":"Max Iterations","loop_max_help":"Safety cap to prevent runaway loops (1-1000).","loop_outputs_title":"Available in loop body","loop_output_item":"Current item","loop_output_item_field":"Field on current item","loop_output_index":"Current index (0-based)","loop_output_total":"Total items","run_js_label":"Run JavaScript","run_js_description":"Execute custom code to transform data or add logic","conditional_split":"Conditional split","add_action_button":"Add Action","save_changes":"Save Changes","branch_read_only":"Branch nodes are read-only. They split the agent based on conditions.","conditions_heading":"Conditions","no_conditions_configured":"No conditions configured","values_heading":"Values","selected_count":"{count} selected","yes":"Yes","no":"No","up_to":"Up to {value}","any_value":"Any","length_of_stay":"Length of Stay","guest_count":"Guest Count","rating":"Rating","battery_level":"Battery Level","temperature":"Temperature","days_of_week":"Days of Week","months":"Months","properties":"Properties","portal_opened":"Portal Opened","recurring_guest":"Recurring Guest","time_offset_value":"{value} {value, plural, one {minute} other {minutes}}","node_type":{"trigger":"Trigger","action":"Action"},"trigger_type":{"guest":"Guest","operations":"Operations"},"go_back":"Go back","test_result":"Test Result"},"delete_node":{"trigger":"trigger","branch":"branch","action":"action","delete_button":"Delete","cancel":"Cancel","confirm_title":"Delete \"{nodeType}\"?","confirm_body":"Are you sure you want to delete this {nodeType}? This action cannot be undone.","delete_trigger":"Delete Trigger","delete_branch":"Delete Branch","delete_action":"Delete Action","loop":"loop","delete_loop":"Delete Loop","relink_message":"{count, plural, one {# downstream node} other {# downstream nodes}} will be reconnected to the parent:","disconnect_message":"This is a root node. Deleting it will disconnect {count, plural, one {# downstream node} other {# downstream nodes}}.","cannot_undo":"This action cannot be undone."},"parent_schedule":{"trigger":"trigger","parent_action_success":"parent action success","parent_action_failure":"parent action failure"},"advance_notice_values":{"any_time":"Any Time","equals_or_more_than":"Equals or More Than","less_than":"Less Than"},"units":{"nights":"nights","guests":"guests","stars":"stars","percent":"%","hour":"hour"},"damage_waiver_state":{"purchased":"Purchased","not_purchased":"Not Purchased"},"days":{"monday":"Mon","tuesday":"Tue","wednesday":"Wed","thursday":"Thu","friday":"Fri","saturday":"Sat","sunday":"Sun"},"months":{"january":"Jan","february":"Feb","march":"Mar","april":"Apr","may":"May","june":"Jun","july":"Jul","august":"Aug","september":"Sep","october":"Oct","november":"Nov","december":"Dec"},"condition_groups":{"reservation":"Reservation","property":"Property","time":"Time","device":"Device","review":"Review","upsell":"Upsell","task":"Task","other":"Other"},"condition_context":{"property":"Property","reservation":"Reservation","device":"Device","task":"Task","upsell":"Upsell","review":"Review","opportunity":"Opportunity"},"verification_status":{"verified":"Verified","review":"Review","pending":"Pending","decline":"Decline","unknown":"Unknown"},"code_status":{"active":"Active","pending":"Pending","failed":"Failed","scheduled":"Scheduled","unknown":"Unknown","pending_deletion":"Pending Deletion","no_access":"No Access","no_locks":"No Locks","failed_deletion":"Failed Deletion","awaiting_code":"Awaiting Code","installed":"Installed","expired":"Expired"},"task_status":{"triage":"Triage","not_started":"Not Started","in_progress":"In Progress","paused":"Paused","completed":"Completed","cancelled":"Cancelled"},"upsell_type":{"advertisement":"Advertisement","request":"Request","postcard":"Postcard","purchase":"Purchase"},"upsell_stage":{"inquiry":"Inquiry","requested":"Requested","approved":"Approved","delivered":"Delivered","denied":"Denied","awaiting_payment":"Awaiting Payment","payment_submitted":"Payment Submitted"},"review_source":{"airbnb":"Airbnb","booking_com":"Booking.com","vrbo":"VRBO","check_in_survey":"Check-in Survey","check_out_survey":"Check-out Survey","suiteop":"SuiteOp","direct":"Direct","google":"Google"},"property_occupancy":{"occupied":"Occupied","vacant":"Vacant","check_out":"Check-out","check_in":"Check-in","turn":"Turn"},"conditions_builder":{"no_conditions":"No conditions — action runs every time","add_condition":"Add Condition","dialog_title":"Add Condition","dialog_description":"Search for a condition type to filter when this action runs.","search_placeholder":"Search conditions…","no_matching":"No matching conditions.","active":"Active","unavailable_reason":"This trigger provides no {context} data","upsell_option_unavailable":"Upsell option unavailable","remove_condition":"Remove condition","min_label":"Min ({unit})","max_label":"Max ({unit})","any":"Any","portal_must_be_opened":"Portal must be opened","guest_is_recurring":"Guest has stayed before","entity_picker_coming_soon":"Entity picker coming soon ({count} selected)","entity_picker_coming_soon_single":"Entity picker coming soon","add_source_placeholder":"Add source…","days_label":"Days","property_ids":"Properties","tag_ids":"Tags","group_ids":"Property Groups","department_ids":"Departments","select_properties":"Select properties…","select_tags":"Select tags…","select_groups":"Select property groups…","select_departments":"Select departments…","select_upsells":"Select upsells…","upsell_item_ids":"Upsell Item IDs","precheck_option_ids":"Precheck Option IDs","upsell_choice_id":"Upsell Choice ID","upsell_field_choice_id":"Upsell Field Choice ID","exclude_sources":"Exclude Sources","source_mode_label":"Match","source_mode_only":"Only these sources","source_mode_except":"All except these sources","source_except_owned_elsewhere":"Another condition on this step already holds the excluded sources. Remove it to use \"All except these sources\" here.","source_legacy_label":"Legacy value (from an older rule)","source_legacy_remove":"Remove {value}","source_dropped_label":"Also saved (removed the next time you edit this condition)","source_dropped_remove":"Remove {value}","source_unknown_note":"Sources mapped to \"Unknown\" are matched like any other channel."},"rule_settings":{"active":"Active","inactive":"Inactive","assign_properties":"Assign agents to your properties","assign_properties_description":"Target agents to specific properties using groups, tags, or individual selection.","delete_confirm_title":"Delete agent?","delete_confirm_description":"This will permanently deactivate this agent. This action cannot be undone.","delete_button":"Delete agent","cancel":"Cancel","delete_action":"Delete","remove_template":"Remove template","convert_to_template":"Convert to template","groups_inclusion":"Groups inclusion","groups_description":"List of groups included in the rule","tags_inclusion":"Tags inclusion","tags_description":"List of tags included in the rule","properties_inclusion":"Properties inclusion","properties_description":"List of properties included in the rule","select_groups":"Select groups…","select_tags":"Select tags…","select_properties":"Select properties…","unnamed":"Unnamed","scope_update_error":"Couldn't update agent scoping"},"trigger_panel":{"title":"Triggers","expand":"Expand panel","collapse":"Collapse panel"},"create_dialog":{"title_create":"Create Agent","title_create_new":"Create new agent","or":"or","choose_method_description":"How would you like to create your agent?","describe_title":"Describe it","describe_subtitle":"Tell AI what you want to automate in plain English","describe_badge":"AI-powered","describe_description":"Describe the agent you want to create and AI will build it for you.","describe_placeholder":"Describe what you want to automate...","generate_button":"Generate Agent","chat_input_placeholder":"Type your answer...","chat_send":"Send","chat_initial_message":"What would you like to automate? Describe the agent you have in mind and I will help you build it.","chat_error":"Something went wrong. Please try again.","generating":"Generating agent…","generate_error":"Failed to generate agent. Please try again.","generate_coming_soon":"Agent generation coming soon","build_title":"Build it","build_subtitle":"Open the canvas editor and build your agent manually","choose_category":"Choose category","guest_section":"Guest","operations_section":"Operations","title_with_group":"Create {group} agent","configure_description":"Configure your new agent.","description":"Set up a new automation rule for your properties.","sheet_description":"Set up a new automation rule for your organization.","name_label":"Name *","name_placeholder":"e.g. Send check-in email","name_required":"Name is required","trigger_type_label":"Trigger Type *","trigger_type_placeholder":"Select trigger type","folder_label":"Folder (optional)","folder_placeholder":"No folder","cancel":"Cancel","creating":"Creating…","create_button":"Create Agent","workflow_created":"Agent created","group_descriptions":{"reservation":"This agent will run anytime a reservation is created or updated.","guest_status":"This agent will run anytime a reservation's occupancy status is updated.","payments":"When upsell opportunities arise.","review":"When reviews are submitted or requested.","guest_verification":"When guest verification status changes.","device":"When smart devices change status.","task":"When tasks are created or completed.","opportunity":"When upsell opportunities are created or re-opened.","action":"Runs when another action completes."},"group_labels":{"reservation":"Reservation","guest_status":"Guest Status","payments":"Payments","review":"Review","guest_verification":"Guest Verification","device":"Device","task":"Task","opportunity":"Opportunity","action":"Action"},"trigger_options":{"reservation":"Reservation","guest_status__in_development_0":"Guest Status","payment":"Payments","review":"Review","device":"Device","task":"Task","opportunity":"Opportunity","guest_verification":"Guest Verification","action":"Action"},"folder_options":{"communication":"Communication","upsells":"Upsells","notifications":"Notifications"},"generate_error_hint":"You can try again or go back to refine your description.","untitled_workflow":"Untitled agent"},"log":{"title":"Logs","refresh":"Refresh","workflow_action":"Agent Action","workflow_action_column":"Agent action","trigger_suppressed":"Trigger skipped — conditions not met","scheduled_date":"Scheduled date","runs_at":"Runs {time}","trigger":"Trigger","property":"Property","status":"Status","created_date":"Created date","action_detail_title":"Agent Action Details","scheduled":"Scheduled","filtered_reason":"Filtered reason","failure_reason":"Failure reason","reservation_section":"Reservation","confirmation_code":"Confirmation code","guest":"Guest","reservation_status":"Reservation status","check_in":"Check-in","check_out":"Check-out","guests":"Guests","workflow_rule_section":"Agent Rule","rule":"Rule","created_task_section":"Created Task","created_task":"Task","devices":"Devices","active":"Active","inactive":"Inactive","no_rule":"No rule","action_not_found":"Action not found","action_not_found_description":"This action may have been deleted or is no longer available.","action_parameters_section":"Action details","outputs_section":"Outputs","outputs_label":"Recorded output","http_response_section":"HTTP response","http_response_label":"Response body","cancel_action":"Cancel action","cancel_pending":"Cancelling…","cancel_succeeded":"Action cancelled","cancel_failed":"Failed to cancel action","show_hidden_actions":"Show filtered & cancelled ({count})","hide_hidden_actions":"Hide filtered & cancelled","status_filter":"Status","action_filter":"Action","date_range_filter":"Date Range","property_filter_placeholder":"Property…","rule_filter_placeholder":"Agent…","no_results":"No agent actions found","no_results_description":"Agent execution logs will appear here as agents run.","reason":{"thermostat_dispatch_failed":"{failed} of {total} thermostat command target(s) failed to dispatch","thermostat_mode_unexecutable":"\"{mode}\" is not a thermostat mode this action can set — no command was sent","power_dispatch_failed":"{failed} of {total} power command target(s) failed to dispatch","lock_dispatch_failed":"{failed} of {total} lock command target(s) failed to dispatch","no_matching_lock_devices":"No matching lock devices found on this property","no_matching_devices":"No matching {deviceType} devices found on this property","lock_state_not_confirmed":"Lock state not confirmed for {count} device(s) — command dispatched but the {action, select, lock {lock} unlock {unlock} other {command}} was never observed","property_default_assignee_gone":"Property's preferred assignee is no longer an active member — task created unassigned","collaborators_requires_task":"This action only runs on a task trigger — no task was in the trigger context","collaborators_none_configured":"No collaborators are configured on this action","collaborators_invalid_ids":"The collaborators configured on this action are not valid user IDs","collaborators_task_not_found":"The task this action targets no longer exists","collaborators_not_org_members":"None of the configured collaborators are active members of this organization","service_fee_requires_reservation":"This action only runs on a reservation trigger","service_fee_not_configured":"Service fee is not configured — link an upsell or set a name and amount","service_fee_negative_amount":"Service fee amount is negative — refusing to create a credit","service_fee_payment_account_unavailable":"The payment account set on this service fee is no longer available — the fee was not created","service_fee_not_created":"The service fee could not be created","task_scheduled_scope_stale":"The task was moved, detached, or deleted before this action could be scheduled.","task_no_property":"No property in the trigger context — the task could not be created","task_template_missing":"The task template this action uses no longer exists","task_no_department":"No department available to create the task","action_internal_error":"The action could not run because of an internal error","url_invalid_format":"The configured URL is not valid","url_scheme_not_allowed":"Only http:// and https:// URLs are allowed","url_embeds_credentials":"The URL must not embed a username or password — send the credential in a header instead","url_host_blocked":"The URL points at a blocked host ({host})","url_private_address":"The URL points at a private or internal address","url_private_address_named":"The URL points at a private or internal address ({address})","url_dns_private_address":"The URL's hostname resolves to a blocked private address ({address})","url_dns_failed":"The URL's hostname could not be resolved","url_dns_failed_named":"The address in the URL could not be resolved ({address})","url_redirect_blocked":"The request was redirected to a URL SuiteOp will not follow","url_too_many_redirects":"The request was redirected more than {max} times","url_request_timed_out":"The request timed out after {seconds} seconds","url_request_failed":"The request could not be sent — the destination could not be reached","http_credentials_stripped_on_redirect":"HTTP {status} — the redirect crossed to a different origin, so the credential headers ({rules}) were not replayed","test_override":"Test override: production would have resolved ''{status}'' from live entity state","test_override_with_reason":"Test override: production would have resolved ''{status}'' from live entity state — {reason}","task_cancelled_reservation_deleted":"Task cancelled — its reservation was deleted","task_cancelled_by_scheduler":"Task cancelled by scheduler ({trigger})","email_no_template_configured":"No email template is configured on this action","email_no_sender_configured":"No email sender is configured on this action","email_no_recipients_configured":"No recipients are configured on this action","email_template_not_found":"The email template this action uses no longer exists","email_template_no_body":"The email template has no content","email_sender_not_found":"The email sender this action uses no longer exists","email_domain_not_in_org":"The sender's email domain no longer belongs to this organization","email_domain_not_verified":"The sender's domain is not verified — complete DNS authentication for it","email_sender_host_mismatch":"The sender address is not on its attached domain","email_sender_not_verified":"The sender is not verified — confirm the verification email sent to this address","email_recipients_not_found":"The recipients configured on this action no longer exist","email_guest_email_unavailable":"This reservation has no guest email address","email_no_resolvable_recipients":"None of the configured recipients resolved to an email address","email_no_primary_recipient":"This action has only cc and bcc recipients — add a To: recipient","refund_requires_reservation":"This action only runs on a reservation trigger","refund_nothing_refundable":"None of the {total} payment(s) on this reservation could be refunded","refund_partially_skipped":"{skipped} of {total} payment(s) on this reservation were not refundable and were skipped","refund_dispatch_failed":"{failed} of {total} refund(s) could not be sent to the payment provider","zapier_account_disconnected":"The Zapier account for this action is disconnected — reconnect Zapier to start sending again","organization_outbound_muted":"Outbound communications are paused for this account — the action was not run","trigger_conditions_not_met":"The trigger's conditions were not met: {conditions}"}},"multi_entity_picker":{"default_placeholder":"Select…","search_placeholder":"Search…","loading":"Loading…","waiting_for_connection":"Waiting for connection","labels_unavailable":"Name unavailable","list_unavailable":"Couldn't load the list","no_results":"No results found.","one_selected":"1 selected","others_count":"{label}, and {count, plural, one {# other} other {# others}}","count_selected":"{count} selected","included_count":"{selected} included out of {total}","remove_item":"Remove {label}","disambiguated_label":"{label} ({detail})","retired_label":"{label} (deleted)"},"action_form":{"action_type_section":"Action Type","select_action_type":"Select action type","name_section":"Name","timing_section":"Timing","configuration_section":"Configuration","conditions_section":"Conditions","conditions_description":"The action only runs when these conditions pass. Otherwise the step is skipped and recorded as filtered.","schedule_at":"This action will {verb} at {triggerLabel}.","email_template":"Email Template","manage_email_templates":"Manage email templates","select_template":"Select a template…","title_label":"Title","body_label":"Body","channel_label":"Channel","select_channel":"Select a channel…","slack_target":"Send to","slack_target_channel":"Channel","slack_target_user_dm":"Direct message","slack_dm_recipient":"Recipient","select_member":"Select a member…","slack_no_channels":"No channels yet. Invite the SuiteOp bot to a channel in Slack, then sync channels from the Slack integration settings.","slack_no_account":"No Slack workspace is connected. Connect one in the integrations settings, or enter a channel ID manually.","slack_channels_unavailable":"Channels could not be loaded. Enter a channel ID manually, or reopen this panel to try again.","message_template":"Message Template","url_label":"URL","method_label":"Method","select_method":"Select method","request_body_json":"Request Body (JSON)","headers_label":"Headers","header_key_placeholder":"Header name","header_value_placeholder":"Value","add_header":"Add header","remove_header":"Remove header","show_value":"Show value","hide_value":"Hide value","zapier_hook_id":"Zapier Hook ID","temperature_label":"Temperature ({unit})","mode_label":"Mode","select_mode":"Select mode","fallback_mode":"Fallback Mode","select_fallback":"Select fallback","device_type":"Device Type","select_device_type":"Select device type","task_template":"Task Template","est_cost_cents":"Est. Cost (cents)","est_cost":"Est. Cost","est_time_min":"Est. Time (min)","assignment_type":"Assignment Type","select_assignment_type":"Select assignment type","assignment_coming_soon":"Coming soon","assignment_deferred_hint":"Tasks created with this assignment mode will be unassigned for now — a person can claim them.","assignment_department_hint":"One member owns the task and the others are added as collaborators — everyone in the department for “Department users”, and only the members carrying the Manager badge for “Department managers”. If nobody carries that badge, the task is created unassigned.","assignment_auto_hint":"Picks the person automatically when the task is created — through the organisation's eligibility lists, gates and capacity, exactly like scheduled tasks. If nobody is eligible, the task is created unassigned and flagged.","assignment_auto_needs_due_date":"Auto-assignment needs a due date. Without one — or on a trigger that carries no reservation — the task is created unassigned and nothing records that assignment was skipped.","assignee":"Assignee","no_templates":"No task templates yet — create one in Tasks → Templates first.","no_members":"No active members in this organization.","collaborators":"Collaborators","collaborators_selected":"{count, plural, one {# selected} other {# selected}}","upsell_id":"Upsell ID","required_label":"Required","blocks_checkin":"Blocks Check-in","category_email":"Email Settings","category_notification":"Notification Settings","category_slack":"Slack Settings","category_webhook":"HTTP Request Settings","category_device":"Device Settings","category_task":"Task Settings","category_billing":"Service Fee Settings","category_reservation":"Reservation","category_code":"JavaScript Settings","category_status":"Status Settings","category_agent":"AI Agent Settings","agent_prompt":"Additional Prompt","agent_prompt_placeholder":"Optional instructions for this specific agent step...","js_code_label":"JavaScript Code","js_code_help":"Available globals: $input (upstream outputs), $context (trigger data). Return a value to set as output.","js_timeout_label":"Timeout (ms)","js_memory_label":"Memory (MB)","workflow_status_label":"Status","select_status":"Select status...","status_success":"Success","status_failure":"Failure","status_message_label":"Status Message","status_message_placeholder":"Optional message describing the outcome","initialize_action":"Initialize","initializing":"Testing…","initialize_success":"Discovered {count} output fields","initialize_error":"Test request failed","initialize_description":"Send a test request to discover the response schema","insert_variable":"Variable","search_variables":"Search variables…","no_variables":"No variables available","node_outputs":"Node Outputs","output_fields_section":"Output Fields","initialized_badge":"Initialized","response_preview":"Response Preview","agent_output_fields":"Output Fields","agent_output_fields_description":"Define structured fields the agent must return. Downstream branches can reference these typed fields.","agent_output_key_placeholder":"Field key","agent_output_label_placeholder":"Label","agent_add_output_field":"Add Output Field","category_custom":"Tool Parameters","custom_no_action_selected":"No custom action selected.","custom_loading":"Loading parameters…","custom_no_parameters":"This action has no configurable parameters.","custom_unsupported_parameters":"This action's parameters use a schema shape the editor can't display. Configure them in the tool itself.","custom_select_placeholder":"Select {field}…","custom_array_placeholder":"Comma-separated values","notification_send_to":"Send To","select_assignment":"Select recipients…","assignment_user_group":"User Group","assignment_dept_managers":"Department Managers","assignment_dept_users":"Department Users","assignment_user_list":"Specific Users","select_user_group":"Select a user group…","no_user_groups":"No user groups in this organization yet.","select_department":"Select a department…","select_user":"Select a user…","email_sender":"Sender","select_sender":"Select a sender...","email_language":"Language","email_language_default":"Default (base template)","email_recipient_type":"Send To","select_recipient_type":"Select recipient type...","custom_email":"Email Address","recipient_guest":"Guest","recipient_task_assignee":"Task Assignee","recipient_task_managers":"Task Assignee's Managers","recipient_custom":"Custom Email","recipient_user":"Specific User","custom_email_placeholder":"email@example.com","initialize_stale_hint":"The URL changed since these fields were discovered — re-initialize to refresh them.","template_compat_warning":"The “{trigger}” trigger doesn't provide the context these template variables need — they will render empty:","template_compat_warning_multi":"Not every trigger on this agent provides the context these template variables need — they will render empty for some triggers:","variable_not_available":"Not yet available","variable_not_available_hint":"This variable currently renders as empty — its data source isn't wired up yet.","merge_field_groups":{"general":"Merge fields — General","reservation":"Merge fields — Reservation","property":"Merge fields — Property","device":"Merge fields — Device","upsell":"Merge fields — Upsell","review":"Merge fields — Review","opportunity":"Merge fields — Opportunity"},"est_time_inherited":"Inherited","est_time_inherited_hint":"Inherited from the template","custom_test_button":"Test action","custom_test_hint":"Runs the real action with the values above; template variables are sent as-is.","custom_test_tool_error":"The tool reported an error","collaborators_label":"Collaborators","collaborators_placeholder":"Select team members…","collaborators_help":"Added to the task from the trigger — use with task triggers.","upsell_label":"Upsell","select_upsell":"Select an upsell...","new_time_label":"New time","new_time_hint":"Enter a time like 14:00 (property timezone, on the scheduled date), a full date-time, or insert a variable.","new_time_use_expression":"Use a variable","new_time_use_picker":"Pick a time","new_time_hint_picker":"The reservation's new time, in the property's timezone on the scheduled date.","fee_source_label":"Fee source","fee_source_upsell":"From upsell","fee_source_custom":"Custom fee","fee_name_label":"Fee name","fee_amount_label":"Amount","fee_payment_account_label":"Payment account","fee_currency_label":"Currency","fee_requested_by_guest":"Requested by guest","select_payment_account":"Choose an account...","lock_targets_label":"Lock devices","lock_targets_placeholder":"Select lock device(s)...","lock_targets_help":"The command runs only on the locks selected here — doors are never targeted implicitly. Completion waits for the lock to confirm its new state.","task_due_anchor":"Due Date","task_due_anchor_none":"No due date","task_due_anchor_hint":"The offset in Timing above is measured from this anchor to set the task's due date.","task_due_anchor_no_reservation":"A trigger reaching this task can fire without a reservation — on those runs the task is created with no due date.","schedule_offset_before":"This action will {verb} {amount} before {triggerLabel}.","schedule_offset_after":"This action will {verb} {amount} after {triggerLabel}.","agent_output_type_label":"Field type","schedule_granularity_label":"Time unit","schedule_definition_label":"Timing relation"},"time":{"at":"At","after":"after","before":"before","minute":"{count, plural, one {# minute} other {# minutes}}","hour":"{count, plural, one {# hour} other {# hours}}","day":"{count, plural, one {# day} other {# days}}"},"enums":{"trigger_categories":{"reservation":"Reservation","guest_status__in_development_0":"Guest Status","payment":"Payments","review":"Review","device":"Device","task":"Task","opportunity":"Opportunity","guest_verification":"Guest Verification","action":"Action"},"folder_categories":{"communication":"Communication","upsells":"Upsells","notifications":"Notifications"},"automation_actions":{"set_thermostat_mode":"Set Thermostat Mode","all_thermostats___turn_off":"All Thermostats Turn Off","turn_on_device":"Turn On Device","tasks___create_template":"Create Task","trigger_zapier_hook":"Trigger Zapier Hook","send_a_slack_message":"Send a Slack Message","send_email":"Send Email","send_a_notification":"Send a Notification","lock_device":"Lock Device","create_service_fee":"Create Service Fee","http_request":"HTTP Request","update_check_in":"Update Check-in","update_check_out_time":"Update Check-out Time","mark_guest_as_checked_in":"Mark Guest as Checked In","mark_guest_as_checked_out":"Mark Guest as Checked Out","add_collaborators":"Add Collaborators","unlock_device":"Unlock Device","update_thermostat":"Update Thermostat","run_javascript":"Run JavaScript","set_workflow_status":"Set Agent Status","ask_agent":"Ask AI Agent","refund_reservation_charges":"Refund Reservation Charges"},"user_assignment_types":{"user_selection":"Specific user","user_list":"User list","user_group":"User group","department_managers":"Department managers","department_users":"Department users","auto_assignment":"Auto-assignment","property_default":"Preferred assignee"},"automation_statuses":{"scheduled":"Scheduled","processing":"Processing","complete":"Complete","failed":"Failed","canceled":"Canceled","draft":"Draft","filtered":"Filtered"},"task_due_anchors":{"check_in":"Check-in","check_out_date":"Check-out","confirmation_date":"Booking confirmation"},"schedule_events":{"action_is_executed":"action executed","branch0":"branch","charge_approved":"charge approved","charge_delivered":"charge delivered","charge_denied":"charge denied","charge_submitted":"charge submitted","check_in":"check-in time","check_out_date":"check-out time","co2_threshold":"CO₂ threshold","code_changed":"code changed","confirmation_date":"confirmation time","device_connected":"device connected","device_disconnected":"device disconnected","device_low_battery":"device low battery","esign_envelope_completed":"eSign envelope completed","guest_checked_in":"guest checked-in","guest_checked_out":"guest checked-out","humidity_threshold":"humidity threshold","lock_code_updated":"lock code updated","lock_is_locked":"device is locked","lock_is_unlocked":"device is unlocked","lock_lock":"lock locked","mandatory_fee_payment_submitted_by_guest":"mandatory fee paid","mandatory_fee_refunded":"mandatory fee refunded","manual_verification":"guest verified","noise_alert":"noise alert","opportunity_is_created":"opportunity created","opportunity_is_re_opened":"opportunity re-opened","parent_action_is_executed":"parent action executed","payment_captured":"payment captured","payment_disputed":"payment disputed","payment_failed":"payment failed","payment_refunded":"payment refunded","requested_time_reached":"requested time reached","reservation_canceled":"reservation canceled","reservation_created":"reservation created","reservation_status_changed":"reservation status changed","reservation_updated":"reservation updated","review_submitted":"review submitted","scheduled_time":"scheduled time","task_complete":"task is complete","task_created":"task is created","task_due_date_reached":"task due date reached","task_is_assigned":"task is assigned","task_is_cancelled":"task is cancelled","task_is_synced":"task is synced","task_scheduled":"task due date changed","task_started":"task is started","temperature_threshold":"temperature threshold","thermostat_threshold":"thermostat threshold","unlock_lock":"lock unlocked","update_thermostat":"thermostat updated","verification_declined":"verification declined","issue_reported":"issue is reported","verification_flagged_for_review":"flagged for review"},"action_verbs":{"run":"run","be_scheduled":"be scheduled","trigger":"trigger"},"task_schedule_run_triggers":{"reservation_confirmed":"Reservation confirmed","reservation_canceled":"Reservation canceled","reservation_dates_changed":"Reservation dates changed","reservation_property_changed":"Reservation property changed","recurring_generation":"Recurring generation","manual":"Manual"}},"log_page_title":"Agent Log","copilot":{"title":"Copilot","placeholder":"Describe changes to your agent…","send":"Send","coming_soon":"Coming soon — AI copilot will modify your agent graph","badge":"AI","thinking":"Applying changes…","changes_applied":"Changes applied to your agent.","trigger_set_changed":"This change modified the agent's triggers — review the trigger nodes before publishing.","error":"Failed to apply changes: {message}","connect_plugin":"Connect {plugin}"},"test":{"manual_test":"Manual Test","manual_test_description":"Creates a test reservation and runs the full agent","confirm_title":"Run Manual Test?","confirm_description":"This will execute all actions for real (emails, Slack, HTTP, etc.) using a test reservation.","confirm_button":"Run Test","cancel_button":"Cancel","select_property_placeholder":"Select a property...","synthetic_data":"Synthetic data","existing_entity":"Existing entity","select_charge_placeholder":"Select a charge…","no_charges":"No charges on this reservation","property_label":"Property","checkin_label":"Check-in","checkout_label":"Check-out","charge_label":"Charge (required for {scheduleEvent})","unsupported_trigger":"This trigger doesn't support manual test. Pick a different schedule on the trigger node.","context_overrides_title":"Trigger context overrides (optional)","context_overrides_help":"Overrides only affect the trigger context — the reservation row isn't modified. Useful for date-anchored schedules.","fixture_reservation":"Reservation","fixture_task":"Task","fixture_device":"Device","fixture_review":"Review","fixture_upsell":"Upsell","select_fixture_placeholder":"Select a {fixture}…","reservation_context":{"label":"Reservation context","optional":"(optional)","placeholder":"Pick a real reservation to test against…","help_upsell":"When set, the agent runs with this reservation’s data so guest / date / property tokens render real values. Leave blank to use a synthetic reservation.","help_generic":"When set, reservation tokens render with this stay’s data. Leave blank to skip reservation context."},"running":"Test running","running_progress":"Executing node {current} of {total}","complete_success":"Test complete — {passed}/{total} nodes passed","complete_failure":"Test complete — {passed}/{total} passed, {failed} failed","complete_success_with_skipped":"Test complete — {passed} passed, {skipped} skipped","complete_failure_with_skipped":"Test complete — {passed} passed, {failed} failed, {skipped} skipped","complete_timeout":"Test timed out after 30s — showing partial results","clear_test":"Clear Test","dismiss_test":"Dismiss","show_last_test":"Show Last Test","cancel_test":"Cancel","node_success":"Passed","node_failure":"Failed","node_skipped":"Skipped","node_running":"Running...","node_replaying":"Replaying...","node_pending":"Pending","node_not_reached":"Not reached","outputs_title":"Outputs","error_title":"Error","note_title":"Note","duration":"{ms}ms","back_to_trace":"Back to trace","complete_error":"Test errored — walk was interrupted","banner_success_title":"Passed","banner_success_description":"Action executed successfully","banner_failure_title":"Failed","banner_failure_description":"Action encountered an error","banner_skipped_title":"Skipped","banner_skipped_description":"Action was filtered out","banner_no_result_title":"No result","banner_no_result_description":"No outcome to show for this action yet","skip_reason_parent_failed":"The previous action did not succeed, so this one never ran.","skip_reason_branch_not_taken":"The branch took its other path, so this action never ran.","skip_reason_upstream_not_reached":"An earlier action on this path never ran, so this one did not either.","skip_reason_not_reached":"This action was not reached during the test run.","node_not_reached_description":"This node was not reached during the test run","context_title":"Execution Context","context_property":"Property","context_reservation":"Reservation","context_device":"Device","context_devices":"Devices ({count})","context_created_task":"Created Task","section_request":"Request","section_response":"Response","section_email":"Email","section_notification":"Notification","section_update":"Update","section_device":"Device","section_branch":"Conditions","branch_route":"Routed to:","branch_route_true":"True path","branch_route_false":"False path","branch_passthrough":"Pass-through branch — no conditions configured.","branch_logic":"All conditions must pass ({logic})","branch_left":"Left:","branch_right":"Right:","agent_label":"Agent:","agent_tokens":"{count} tokens","agent_tool_calls":"{count} tool calls","email_sent":"Email sent","email_to":"To:","email_subject":"Subject:","http_headers":"Headers","http_body":"Body","http_response_title":"HTTP Response","http_success":"Success","http_error":"Error","http_credentials_stripped_title":"Credential headers removed","http_credentials_stripped_description":"This request was redirected to a different origin, so the credential headers you configured ({rules}) were not sent on. A 401 or 403 from the final hop is the expected result.","update_field":"Field:","update_new_value":"New value:","update_check_in_state":"Check-in state:","sidebar_subtitle":"Test Result","guest_prefix_note":"Guest name will be prefixed with <tag>[TEST]</tag>.","synthetic_intro":"Builds a <code>[TEST]</code> reservation in your sandbox. Fields are pre-filled with sensible defaults — edit any value before running. Use \"Clear test\" after the run to remove the synthetic data.","synthetic_upsell_title":"Upsell","synthetic_upsell_subtitle":"Catalog template the synthetic charge binds to.","synthetic_upsell_template_label":"Upsell template","synthetic_upsell_template_placeholder":"Pick an upsell template…","synthetic_reservation_title":"Reservation","synthetic_reservation_subtitle":"Guest + dates for the synthetic reservation.","synthetic_first_name":"First name","synthetic_last_name":"Last name","synthetic_email":"Email","synthetic_guests":"Guests","synthetic_check_in":"Check-in","synthetic_check_out":"Check-out","synthetic_first_name_placeholder":"Jane","synthetic_last_name_placeholder":"Doe","synthetic_email_placeholder":"test@example.com","synthetic_guests_placeholder":"2"},"email_action":{"context_warning":{"title":"Some variables won't resolve under this trigger","body":"This template uses {tokens} but the trigger \"{trigger}\" doesn't provide a {missing}. Those tokens will render as empty strings — pick a different template or change the trigger.","missing_singular":{"property":"property","reservation":"reservation","device":"device","task":"task","upsell":"upsell","review":"review","opportunity":"opportunity"}}},"custom_action_description":"Custom tool action","custom_integration_fallback":"Custom","action_params":{"title":"Title","body":"Body","recipients":"Recipients","user_ids":"User IDs","user_group":"User group","department":"Department","template":"Template","sender":"Sender","method":"Method","url":"URL","headers":"Headers","query_params":"Query params","channel":"Channel","slack_target":"Send to","slack_target_channel":"Channel","slack_target_user_dm":"Direct message","slack_dm_recipient":"Recipient","message":"Message","prompt":"Prompt","max_steps":"Max steps","timeout_ms":"Timeout (ms)","code":"Code","memory_mb":"Memory (MB)","mode":"Mode","fallback_mode":"Fallback mode","target_f":"Target ({unit})","assignment":"Assignment","assignee":"Assignee","est_cost_cents":"Est. cost (¢)","est_time_minutes":"Est. time (min)","upsell":"Upsell","required":"Required","blocks_check_in":"Blocks check-in","new_time_min":"New time (min)","collaborators":"Collaborators","zapier_hook":"Zapier hook","parameters":"Parameters","yes":"Yes","no":"No"},"quick_actions":{"explain":{"label":"Explain this agent","prompt":"Walk me through what this agent does, step by step. Mention each trigger and what runs after it."},"find_issues":{"label":"Find issues","prompt":"Review this agent for problems: dead branches, unconfigured action parameters, scope misses, or anything that would make a trigger silently never fire."},"add_notification":{"label":"Add a notification step","prompt":"Add a Send Notification action that pings me when this agent runs. Wire it after the trigger."},"add_branch":{"label":"Add a condition branch","prompt":"Add a condition branch on this agent. Ask me what the condition should evaluate before generating it."}},"bulk":{"select_all":"Select all","select_row":"Select row","publish":"Publish","unpublish":"Unpublish","duplicate":"Duplicate","delete":"Delete","published_toast":"{count, plural, one {# agent published} other {# agents published}}","published_partial_toast":"{ok} published, {failed} couldn't be published","publish_failed_toast":"Couldn't publish agents","unpublished_toast":"{count, plural, one {# agent unpublished} other {# agents unpublished}}","unpublish_failed_toast":"Couldn't unpublish agents","cloned_toast":"{count, plural, one {# agent duplicated} other {# agents duplicated}}","cloned_partial_toast":"{ok} duplicated, {failed} couldn't be duplicated","clone_failed_toast":"Couldn't duplicate agents","deleted_toast":"{count, plural, one {# agent deleted} other {# agents deleted}}","delete_failed_toast":"Couldn't delete agents","delete_confirm_title":"Delete selected agents?","delete_confirm_description":"{count, plural, one {# agent will be deleted and stop running.} other {# agents will be deleted and stop running.}} This can't be undone.","delete_confirm_action":"Delete","delete_confirm_cancel":"Cancel","selected":"{count, plural, one {# agent selected} other {# agents selected}}"},"agent_team":{"tab_sops":"Playbooks","tab_team":"Profiles","tab_soon_badge":"Soon","wordmark_start":"AGENT","wordmark_end":"PROFILES","coming_soon_pill":"Coming soon","aria_carousel":"Agent profiles preview","aria_prev":"Previous","aria_next":"Next","prev":"Previous","next":"Next","intro":{"chip_1":"Talk anywhere","chip_2":"Starts with Opal","chip_3":"Playbooks stay in charge","title":"Meet Your Agent Profiles.","description":"Agents you talk to right where you work — WhatsApp, Slack, or here. Opal is the first. They answer, dig in, and hand real work to your Playbooks — the deterministic workflows that run your operation.","cta_sops":"Explore Playbooks","cta_meet":"See the profiles"},"opal":{"eyebrow":"On your team today","chip_1":"In SuiteOp now","chip_2":"WhatsApp & Slack next","chip_3":"Knows your operation","title":"OPAL — Your First Agent","description":"Opal already answers you inside SuiteOp. Soon she joins you in WhatsApp and Slack — and takes on real work through your Playbooks, with tools, skills, and knowledge you control."},"sage":{"eyebrow":"Example hire — add later","chip_1":"Guest messaging","chip_2":"Upsells","chip_3":"Review replies","title":"SAGE — Guest Communications","description":"Handles guest conversations end to end — check-in questions, upsell offers, review replies — with your approval always on the line."},"atlas":{"eyebrow":"Example hire — add later","chip_1":"Task dispatch","chip_2":"Scheduling","chip_3":"Escalations","title":"ATLAS — Operations Dispatch","description":"Keeps the day running — assigns work, reshuffles schedules when plans change, and escalates to a human the moment judgment is needed."},"nova":{"eyebrow":"Example hire — add later","chip_1":"Issue triage","chip_2":"Vendor loops","chip_3":"Preventive care","title":"NOVA — Maintenance Triage","description":"Turns guest-reported issues into dispatched, tracked, and closed work orders — before small problems become bad reviews."},"custom":{"eyebrow":"Yours to design","chip_1":"Skills","chip_2":"Tools","chip_3":"Memory","chip_4":"Knowledge base","chip_5":"Guardrails","title":"YOURS — Build Your Own","description":"Compose an agent from scratch — pick its skills and tools, give it memory, and set its guardrails. It plugs into your knowledge base and elements, and shows up as an agent step inside your Playbooks."}},"schedule_unit":{"minute":"{count, plural, one {minute} other {minutes}}","hour":"{count, plural, one {hour} other {hours}}","day":"{count, plural, one {day} other {days}}"},"templates":{"method_title":"Start from a template","method_subtitle":"Pick a ready-made agent and adjust it","step_description":"Choose a template to start from. You can change everything afterwards.","search_placeholder":"Search templates…","filter_all":"All","empty":"No templates match your search.","load_error":"Could not load templates. Please try again."},"action_tags":{"ai":"AI","code":"Code","communication":"Communication","device":"Device","general":"General","integration":"Tool","reservation":"Reservation","task":"Task","webhook":"Webhook"},"action_catalog":{"add_collaborators":{"description":"Add team members as collaborators on the task from the trigger — use with task triggers.","label":"Add collaborators"},"all_thermostats___turn_off":{"description":"Turns off all devices of the selected type within the property.","label":"Turn off device"},"ask_agent":{"description":"Invoke an AI agent to reason about the current context and return a decision.","label":"Ask AI Agent"},"create_service_fee":{"description":"Attach a service fee or upsell charge to the reservation.","label":"Add service fee"},"http_request":{"description":"Call an external API with a custom HTTP request.","label":"HTTP Request"},"lock_device":{"description":"Remotely locks all smart locks on the property.","label":"Lock device"},"mark_guest_as_checked_in":{"description":"Set the guest status to checked-in on the reservation.","label":"Mark guest as checked in"},"mark_guest_as_checked_out":{"description":"Set the guest status to checked-out on the reservation.","label":"Mark guest as checked out"},"refund_reservation_charges":{"description":"Refund every captured payment on the reservation, in full.","label":"Refund reservation charges"},"run_javascript":{"description":"Execute custom JavaScript code to transform data or add logic.","label":"Run JavaScript"},"send_a_notification":{"description":"Push an in-app notification to staff or guests.","label":"Send a notification"},"send_a_slack_message":{"description":"Post to a Slack channel or DM a team member automatically.","label":"Send a Slack message"},"send_email":{"description":"Send an automated email using a template to guests or staff.","label":"Send an email"},"set_thermostat_mode":{"description":"Applies to all thermostats within the property.","label":"Set thermostat mode & temperature"},"tasks___create_template":{"description":"Generate a task from a template and assign to staff.","label":"Create task"},"trigger_zapier_hook":{"description":"Fire a webhook to trigger a Zapier automation.","label":"Trigger Zapier hook"},"turn_on_device":{"description":"Turns on all devices of the selected type within the property.","label":"Turn on device"},"unlock_device":{"description":"Remotely unlocks all smart locks on the property.","label":"Unlock device"},"update_check_in":{"description":"Modify the scheduled check-in time for the reservation.","label":"Update check-in time"},"update_check_out_time":{"description":"Modify the scheduled check-out time for the reservation.","label":"Update check-out time"},"update_thermostat":{"description":"Change temperature or mode on a specific thermostat.","label":"Update thermostat"}},"trigger_catalog":{"action_is_executed":{"label":"Action executed","notes":"Runs when an action is executed."},"branch0":{"label":"Branch","notes":"Internal branch event."},"charge_approved":{"label":"Charge approved","notes":"Fires when an operator approves a pending charge."},"charge_delivered":{"label":"Charge delivered","notes":"Fires when an operator marks the charge as delivered."},"charge_denied":{"label":"Charge denied","notes":"Fires when an operator denies a pending charge."},"charge_submitted":{"label":"Charge submitted","notes":"Fires when any charge is created — guest portal purchase, guest request, operator-added fee, damage waiver, or deposit. Upsell-purchase charges carry upsell context too."},"check_in":{"label":"Check-in time","notes":"Runs at the booking check in time."},"check_out_date":{"label":"Check-out time","notes":"Runs at check-out time."},"co2_threshold":{"label":"CO₂ threshold","notes":"Runs when CO₂ rises above threshold."},"code_changed":{"label":"Code changed","notes":"Runs when a reservation's access code is created, changed, or removed."},"confirmation_date":{"label":"Confirmation time","notes":"Fires once a booking is confirmed in the system."},"device_connected":{"label":"Device connected","notes":"Runs when a device regains network connection."},"device_disconnected":{"label":"Device disconnected","notes":"Runs when a device loses network connectivity."},"device_low_battery":{"label":"Device low battery","notes":"Runs once when a device's battery drops below its threshold — set per device in the device's Settings tab, 30% when unset. It does not repeat while the battery stays low; it can only fire again after the battery recovers to or above the threshold."},"esign_envelope_completed":{"label":"eSign envelope completed","notes":"Fires when every recipient on a DocuSign / SuiteOp Sign envelope has finished signing. Only emits for envelopes linked to a reservation with a property."},"guest_checked_in":{"label":"Guest checked-in","notes":"Runs when a guest checks in via the portal."},"guest_checked_out":{"label":"Guest checked-out","notes":"Runs when guest checks out."},"humidity_threshold":{"label":"Humidity threshold","notes":"Runs when humidity is above/below threshold."},"lock_code_updated":{"label":"Lock code updated","notes":"Runs when a lock code is updated."},"lock_is_locked":{"label":"Device is locked","notes":"Runs when a device is locked."},"lock_is_unlocked":{"label":"Device is unlocked","notes":"Runs when a device is unlocked."},"lock_lock":{"label":"Lock locked","notes":"Runs when a lock is locked."},"mandatory_fee_payment_submitted_by_guest":{"label":"Mandatory fee paid","notes":"Fires when a guest pays a mandatory fee in the pre-checkin flow."},"mandatory_fee_refunded":{"label":"Mandatory fee refunded","notes":"Fires when a mandatory fee charge is refunded (partial or full)."},"manual_verification":{"label":"Guest verified","notes":"Runs when a reservation's guest becomes verified (ID check passed, or an operator verifies them)."},"noise_alert":{"label":"Noise alert","notes":"Runs when noise sensor reports above threshold."},"opportunity_is_created":{"label":"Opportunity created","notes":"Runs when AI analysis of guest reviews raises a new opportunity (operation-wide opportunities have no property, so they never fire)."},"opportunity_is_re_opened":{"label":"Opportunity re-opened","notes":"Runs when a new guest review re-opens a completed, dismissed or watched opportunity (changing its status by hand does not fire this; operation-wide opportunities have no property, so they never fire)."},"parent_action_is_executed":{"label":"Parent action executed","notes":"Runs when the parent action is executed."},"payment_captured":{"label":"Payment captured","notes":"Fires when money is pulled from the payment method for a charge."},"payment_disputed":{"label":"Payment disputed","notes":"Fires when a guest opens a chargeback (dispute) on a captured payment."},"payment_failed":{"label":"Payment failed","notes":"Fires when a submitted payment fails while processing."},"payment_refunded":{"label":"Payment refunded","notes":"Fires when a charge is refunded (partial or full)."},"requested_time_reached":{"label":"Requested time reached","notes":"Fires at the guest-requested delivery time stored on the charge (e.g. 3pm late checkout)."},"reservation_canceled":{"label":"Reservation canceled","notes":"Fires when a reservation is canceled."},"reservation_created":{"label":"Reservation created","notes":"Fires when a new reservation is imported or created."},"reservation_status_changed":{"label":"Reservation status changed","notes":"Not available — no producer. Fires when a reservation's status transitions (e.g. confirmed → canceled). Narrower than Reservation updated, which fires on date or property changes."},"reservation_updated":{"label":"Reservation updated","notes":"Fires when a reservation changes dates or property — including via PMS sync, so it can still fire often. It does NOT fire on other field edits (guest details, notes, counts). Pair with conditions when it drives actions that create things."},"review_submitted":{"label":"Review submitted","notes":"Runs when a review is submitted."},"scheduled_time":{"label":"Scheduled time","notes":"Not available — no producer. Fires at the scheduled delivery time stored on a charge."},"task_complete":{"label":"Task is complete","notes":"Runs when task status is set to complete."},"task_created":{"label":"Task is created","notes":"Runs when a new task is added."},"task_due_date_reached":{"label":"Task due date","notes":"Not available — no producer. Runs when the wall clock reaches a task's due date."},"task_is_assigned":{"label":"Task is assigned","notes":"Runs when a task is assigned."},"task_is_cancelled":{"label":"Task is cancelled","notes":"Runs when an operator cancels a task. Tasks cancelled automatically by a schedule change or a cancelled reservation do not fire this — use Reservation canceled for those."},"task_is_synced":{"label":"Task is synced","notes":"Not available — no producer. v1 fired this on an accounting sync stamp (last_sync + financial_approval_status = synced), not a task status."},"task_scheduled":{"label":"Task due date changed","notes":"Runs when a task due date is set or changed, and re-runs on the new property when a task is moved."},"task_started":{"label":"Task is started","notes":"Runs when the assignee marks the task as In progress."},"temperature_threshold":{"label":"Temperature threshold","notes":"Runs when temperature sensor reports above/below threshold."},"thermostat_threshold":{"label":"Thermostat threshold","notes":"Runs when thermostat reports above/below threshold."},"unlock_lock":{"label":"Lock unlocked","notes":"Runs when a lock is unlocked."},"update_thermostat":{"label":"Thermostat updated","notes":"Runs when a thermostat setting is changed."},"verification_declined":{"label":"Verification declined","notes":"Runs when an operator declines a reservation's guest verification."},"issue_reported":{"label":"Issue is reported","notes":"Runs when a task is reported as an issue — from the mobile report-issue flow, a walkthrough, a guest portal ticket, or a manager marking an existing task as an issue. Runs once per task."},"verification_flagged_for_review":{"label":"Flagged for review","notes":"Runs when a guest verification is held for manual review."}},"condition_catalog":{"day_of_the_week":"Day of Week","days_since_last_reservation":"Days Since Last Res.","days_until_next_reservation":"Days Until Next Res.","device_battery_level":"Battery Level","group":"Group","length_of_stay":"Length of Stay","month_of_the_year":"Month of Year","number_of_guests":"Number of Guests","portal_opened":"Portal Opened","pre_checkin_answer_selected":"Pre-Checkin Answer","property":"Property","property_occupancy":"Unit Occupancy","property_tag":"Property Tag","recurring_guest":"Recurring Guest","reservation_check_in_date":"Check-In Date","reservation_check_out_date":"Check-Out Date","reservation_code":"Code Status","reservation_damage_waiver":"Damage Waiver","reservation_source":"Reservation Source","reservation_source_exclusion":"Source Exclusion","reservation_status":"Reservation Status","reservation_verification_status":"Verification Status","review_rating":"Review Rating","review_source":"Review Source","task_department":"Department","task_status":"Task Status","thermostat":"Temperature","unit_is_occupied":"Unit Occupied","unit_is_vacant":"Unit Vacant","upsell_field_choice":"Upsell Selected Option","upsell_item":"Upsell Item","upsell_option":"Upsell Option","upsell_stage":"Upsell Stage","upsell_type":"Upsell Type"},"output_fields":{"addedCount":"Added Count","affectedCount":"Affected Count","affectedDeviceIds":"Affected Device IDs","assignee_user_id":"Assignee User ID","body":"Response Body","changed":"Changed","channelId":"Channel ID","chargeId":"Charge ID","checkInState":"Check-in State","collaborator_user_ids":"Collaborator User IDs","confidence":"Confidence","confirmed":"State confirmed","decision":"Decision","durationMs":"Duration (ms)","failedCount":"Failed Count","failedDeviceIds":"Failed Device IDs","headers":"Response Headers","json":"Parsed JSON","messageId":"Message ID","messageTs":"Message Timestamp","newValue":"New Value","notificationIds":"Notification IDs","notificationType":"Notification Type","property_id":"Property ID","reasoning":"Agent Reasoning","recipientCount":"Recipient Count","recipients":"Recipients","refundedCount":"Refunded Count","reservationId":"Reservation ID","reservation_id":"Reservation ID","result":"Result","sendType":"Send Type","sent":"Sent","skippedCount":"Skipped Count","stage":"Charge Stage","status":"Status","status_code":"Status Code","subject":"Subject","success":"Success","taskId":"Task ID","task_id":"Created Task ID","toolsUsed":"Tools Used","totalTokens":"Total Tokens","updatedField":"Updated Field"}},"xray":{"title":{"xray":"Property X-Ray","report":"X-Ray Report"},"empty":{"title":"Build your property's digital twin","description":"AI analyzes your listing photos, amenities, and reservation data to create a complete operational blueprint — asset inventory, risk detection, and revenue opportunities.","feature_elements":"Asset inventory","feature_risks":"Risk detection","feature_upsells":"Revenue opportunities","time_estimate":"Analysis may take a few minutes depending on property size"},"ready":{"title":"Your Property X-Ray is ready","description":"We analyzed your listing photos, amenities, and data to build a complete operational blueprint for this property.","view_report":"View Full Report"},"status":{"pending":"Pending","fetching":"Gathering data","analyzing":"Analyzing","generating":"Generating report","matching":"Matching catalog","completed":"Complete","failed":"Failed","no_report":"No X-Ray yet","running":"X-Ray running","analyzing_ellipsis":"Analyzing..."},"action":{"run_xray":"Run X-Ray","run_xray_count":"Run X-Ray ({count} selected)","select_all":"Select All","view_report":"View Report","xray_in_progress":"X-Ray in progress","xray_ready":"X-Ray Ready","view_xray":"View X-Ray","property_xray":"Property X-Ray","import_section":"Import Section","import":"Import","import_areas":"{count, plural, one {# area} other {# areas}}","import_elements":"{count, plural, one {# element} other {# elements}}","import_sub_elements":"{count, plural, one {# sub-element} other {# sub-elements}}","import_all":"Import All Sections","rerun":"Re-run","assign_category":"Assign Category","show_less":"Show less","show_more":"+{count} more"},"section":{"element_tree":"Element Tree","upsell_opportunities":"Upsell Opportunities","template_overrides":"Template Overrides","cross_validation":"Discrepancies","review_insights":"Review Insights","safety":"Safety"},"element":{"matched":"Matched","new":"New","exact_match":"Exact match","fuzzy_match":"Fuzzy match ({percent}%)","new_item":"New item","vision_only":"Vision only","low_confidence":"Low confidence","already_on_property":"Already on property","items_count":"{count} items","no_category_match":"No matching category","excluded_count":"{count} items excluded (no matching category)","link_catalog":"Link to catalog","unlink_catalog":"Remove catalog link","catalog_linked":"Linked to catalog"},"source":{"from_photos":"From photos","from_listing":"From listing","from_photos_and_listing":"From photos & listing"},"progress":{"pending":"Queued","fetching":"Gathering property data","analyzing":"Analyzing photos & listing","generating":"Generating report","matching":"Matching to element catalog","gathering_data":"Gathering property data...","classifying_photos":"Classifying {count} photos...","analyzing_photos":"Analyzing photos ({done}/{total})...","cross_validating":"Cross-validating findings...","generating_report":"Generating report...","matching_catalog":"Matching to catalog...","counter_preparing":"Preparing...","counter_data_points":"{count} data points loaded","counter_items_detected":"{count} items detected","counter_areas_mapped":"{count} areas mapped","counter_matches_found":"{count} matches found","counter_finalizing":"Wrapping up...","hint_queued":"Preparing your analysis...","hint_fetching_listing":"Pulling listing details from your PMS...","hint_fetching_photos":"Loading property photos...","hint_fetching_reservations":"Reviewing reservation history...","hint_classifying_photos":"Sorting photos by room type...","hint_detecting_items":"Identifying furniture, appliances & fixtures...","hint_identifying_brands":"Looking for brands and model details...","hint_cross_validating":"Comparing photos against listing amenities...","hint_building_tree":"Building your property's element tree...","hint_analyzing_layout":"Mapping rooms, areas & spaces...","hint_mapping_categories":"Matching items to your element categories...","hint_detecting_risks":"Scanning for safety & compliance risks...","hint_matching_catalog":"Comparing against your product catalog...","hint_finalizing":"Finalizing your report..."},"notice":{"text_only":"Text-only analysis — no usable photos found","reviews_unavailable":"Review data was unavailable during analysis","budget_remaining":"{count} analyses remaining this month","analysis_in_progress":"Analysis already in progress for this property","analysis_queued":"X-Ray analysis queued — this may take up to 60 seconds","import_disabled":"Assign categories to all selected items before importing"},"summary":{"new_elements":"New Elements","safety_risks":"Safety Risks","revenue_per_year":"Revenue/yr","overrides":"Element Overrides"},"override":{"in_area":"in {area}","suggested_template":"Suggested for: {name}"},"listing":{"photos_count":"{count} photos from listing","amenities_count":"Amenities from listing ({count})","existing_elements_count":"{count} elements already on this property"},"metadata":{"photos_count":"{count} photos"},"upsell":{"type":"Type","price":"Price","take_rate":"Take rate","missed":"Missed","annual":"Annual","cta":"Manage upsells"},"review_insights":{"cta":"View in Opportunities"},"discrepancy":{"text_only":"text only","vision_only":"vision only","source":"Source","item":"Item","note":"Note"},"severity":{"low":"Low","medium":"Medium","high":"High","critical":"Critical"},"risk_category":{"safety":"Safety","compliance":"Compliance","device":"Device","maintenance":"Maintenance"},"insight_category":{"maintenance":"Maintenance","cleanliness":"Cleanliness","device":"Device","other":"Other"},"insight":{"reviews_mentioned_short":"{count} reviews mentioned this","source_label":"Source","guest_reviews_mentioned":"{count} guest reviews mentioned this issue","recommended_action":"Recommended action","action_maintenance":"Schedule a maintenance inspection to verify and address this issue.","action_cleanliness":"Review cleaning checklist and add specific requirements.","action_device":"Verify device configuration and connectivity.","action_default":"Investigate and address during next property inspection."},"safety":{"observation":"Observation","action_needed":"Action needed"},"usage":{"tokens":"tokens","input":"Input","output":"Output","total":"Total","aria_cost_breakdown":"Token cost breakdown"},"unavailable":{"title":"X-Ray unavailable","no_pms":"Connect this property to a PMS to run X-Ray.","provider_no_photos":"This property's PMS doesn't provide listing photos, so X-Ray can't analyze it.","insufficient_photos":"X-Ray needs at least {min} listing photos ({count} so far)."}}}